Есть отличная команда о которой я ток недавно узналкто может скинуть скрипт сплэша на дальников и txt и lua и объяснить как это делается?
hero:PerformAttack(hTarget, bUseCastAttackOrb,bProcessProcs, bSkipCooldown, bIgnoreInvis)
DoCleaveAttack
Тут насколько я знаю не очень любят давать все готовое.мне нужен скрипт предмета сплеша типо battlefury
Тут насколько я знаю не очень любят давать все готовое.
Неаcrydes а можешь дать исходники ангел арены?
Файл снарядов я где то уже на форуме кидал вроде.я холи буку посмотреть хотел
local projectiles = require("heroes/projectiles")
function HolyBook_attack( keys )
local caster = keys.caster
if caster and not caster:IsRealHero() then return end
local target = keys.target
local ability = keys.ability
local position = keys.target:GetAbsOrigin()
local team = keys.target:GetOpposingTeamNumber()
local radius = keys.Radius
local damage_percent = keys.ability:GetLevelSpecialValueFor( "damage_percent", keys.ability:GetLevel() - 1 )
local damage = keys.Damage*(damage_percent/100)
local fly_time
local projectile_temp = projectiles[caster:GetUnitName()]
local projectile_model, projectile_speed
if projectile_temp then
projectile_model = projectile_temp.model
projectile_speed = projectile_temp.speed
else
projectile_model = ""
projectile_speed = 2000
end
local is_first = false
for i = 0, 5 do
local item = caster:GetItemInSlot(i)
if item then
if (item:GetName() == "item_holy_book" or item:GetName() == "item_holy_book_2" ) and not is_first then
if item ~= ability and caster:GetUnitName() == "npc_dota_hero_storm_spirit" then damage = damage/2.5 end
if item ~= ability then damage = damage/2 end
is_first = true
end
end
end
local units = FindUnitsInRadius(team, position, nil, radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_CREEP, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false)
local caster_attack_speed = caster:GetAttacksPerSecond()
for _, x in pairs(units) do
if x ~= keys.target then
if x and caster and x:GetTeamNumber() ~= caster:GetTeamNumber() and IsValidEntity(x) and x:IsAlive() then
if projectile_model and caster_attack_speed < 8 then
local info = {
Target = x,
Source = keys.target,
EffectName = projectile_model,
bDodgeable = false,
bProvidesVision = true,
iMoveSpeed = projectile_speed,
iVisionRadius = 0,
iVisionTeamNumber = caster:GetTeamNumber(),
}
ProjectileManager:CreateTrackingProjectile( info )
fly_time = FindDistance(x:GetAbsOrigin(), position) / projectile_speed
else
fly_time = 0.1
end
Timers:CreateTimer(fly_time, function()
if x and IsValidEntity(x) and x:IsAlive() and caster and IsValidEntity(caster) then
if x:GetUnitName() == "npc_dota_hero_meepo" then
damage = damage/4
end
if target then
if x:IsIllusion() or target:IsIllusion() then
damage = damage / 5
end
else
if x:IsIllusion() then
damage = damage / 5
end
end
ApplyDamage({ victim = x, attacker = caster, damage = damage, damage_type = DAMAGE_TYPE_PURE })
end
return nil
end )
end
end
end
end
function FindDistance(vec1, vec2)
return math.sqrt(math.abs(vec1.x - vec2.x)^2 + math.abs(vec1.y - vec2.y)^2 + math.abs(vec1.z - vec2.z)^2 )
end
function HolyBook_attack( keys )
local caster = keys.caster
if caster and not caster:IsRealHero() then return end
local target = keys.target
local ability = keys.ability
local position = keys.target:GetAbsOrigin()
local team = keys.target:GetOpposingTeamNumber()
local radius = keys.Radius
local damage_percent = keys.ability:GetLevelSpecialValueFor( "damage_percent", keys.ability:GetLevel() - 1 )
local damage = keys.Damage*(damage_percent/100)
local units = FindUnitsInRadius(team, position, nil, radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_CREEP, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false)
for _, unit in pairs(units) do
caster:PerformAttack(unit, false, false, false, false, true)
end
end
Давай ка ты чутка почитаешь гайдики и потом придешь, мб поймешь лучше куда заливать.а куда эту функцию заливать?
Ага. И событие в модификаторе OnAttackLandedв npc_items_custom и там предмет свой?
"ability_projectile_tracking"
{
// General
//-------------------------------------------------------------------------------------
"BaseClass" "ability_datadriven"
"AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET"
"AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY"
"AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC"
"AbilityUnitDamageType" "DAMAGE_TYPE_PURE"
// Stats
//-------------------------------------------------------------------------------------
"AbilityCastRange" "600"
"AbilityDamage" "100"
// Special
//-------------------------------------------------------------------------------------
"AbilitySpecial"
{
"01"
{
"var_type" "FIELD_INTEGER"
"radius" "1000"
}
}
"precache"
{
"particle" "particles/units/heroes/hero_enchantress/enchantress_impetus.vpcf"
}
// Data Driven
//-------------------------------------------------------------------------------------
"OnSpellStart"
{
"ActOnTargets"
{
"Target"
{
"Center" "CASTER"
"Radius" "%radius"
"Teams" "DOTA_UNIT_TARGET_TEAM_ENEMY"
"Types" "DOTA_UNIT_TARGET_BASIC | DOTA_UNIT_TARGET_HERO"
}
"Action"
{
"TrackingProjectile"
{
"Target" "TARGET"
"EffectName" "particles/units/heroes/hero_enchantress/enchantress_impetus.vpcf"
"Dodgeable" "1"
"ProvidesVision" "1"
"VisionRadius" "300"
"MoveSpeed" "1000"
"SourceAttachment" "DOTA_PROJECTILE_ATTACHMENT_ATTACK_1"
}
}
}
}
"OnProjectileHitUnit"
{
"DeleteOnHit" "1"
"Damage"
{
"Type" "DAMAGE_TYPE_PHYSICAL"
"Damage" "%AbilityDamage"
"Target" "TARGET"
}
}
}
function attack(keys)
local units = FindUnitsInRadius(keys.caster:GetTeam(), keys.target:GetOrigin(), nil, 250, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC + DOTA_UNIT_TARGET_OTHER, DOTA_UNIT_TARGET_FLAG_NONE, 0, false )
for _,unit in pairs(units) do
if unit ~= keys.target then
keys.caster:PerformAttack(unit, false, false, true, false, false)
end
end
end
function attack(keys)
local units = FindUnitsInRadius(keys.caster:GetTeam(), keys.target:GetOrigin(), nil, 250, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC + DOTA_UNIT_TARGET_OTHER, DOTA_UNIT_TARGET_FLAG_NONE, 0, false )
for _,unit in pairs(units) do
if unit ~= keys.target then
keys.caster:PerformAttack(unit, false, false, true, false, false)
end
end
end
Пишешь модификатор который делает -65% урона через MODIFIER_PROPERTY_DAMAGEOUTGOING_PERCENTAGE._. Есть варианты как это сделать?