Взял ульт пугны из имбадоты, убрал то что мне не нужно (ещё чистить нужно не заморачивался).
Всё работает если у нас один юнит использует скилл на другом. А вот когда на юните 1 использует скилл юнит 2 и юнит 3, то при когда юнит 3 начинает кастовать у него не появляется анимация, но ману он начинает получать а юнит 2 прекращает.
Предполагаю что за счёт использования одинаковых переменных поскольку скилл один происходит конфликт, но все же переменные локальные и такого не должно происходить. Просто не так много видимо про язык знаю.
Так как это поправить?
Всё работает если у нас один юнит использует скилл на другом. А вот когда на юните 1 использует скилл юнит 2 и юнит 3, то при когда юнит 3 начинает кастовать у него не появляется анимация, но ману он начинает получать а юнит 2 прекращает.
Предполагаю что за счёт использования одинаковых переменных поскольку скилл один происходит конфликт, но все же переменные локальные и такого не должно происходить. Просто не так много видимо про язык знаю.
Так как это поправить?
Код:
function LifeDrainAllyStart( keys )
local caster = keys.caster
local target = keys.target
local particle_drain = keys.particle_drain
local sound_loop = keys.sound_loop
-- Stop any ongoing looping sound on the target
target:StopSound(sound_loop)
target:EmitSound(sound_loop)
-- End any pre-existing particle
if target.life_give_particle then
ParticleManager:DestroyParticle(target.life_give_particle, false)
ParticleManager:ReleaseParticleIndex(target.life_give_particle)
end
-- Play ally particle
target.life_give_particle = ParticleManager:CreateParticle(particle_drain, PATTACH_ABSORIGIN, caster)
ParticleManager:SetParticleControlEnt(target.life_give_particle, 0, caster, PATTACH_POINT_FOLLOW, "attach_hitloc", caster:GetAbsOrigin(), true)
ParticleManager:SetParticleControlEnt(target.life_give_particle, 1, target, PATTACH_POINT_FOLLOW, "attach_hitloc", target:GetAbsOrigin(), true)
end
function LifeDrainEnemyStart( keys )
local caster = keys.caster
local target = keys.target
local particle_drain = keys.particle_drain
local sound_loop = keys.sound_loop
-- Stop any ongoing looping sound on the target
target:StopSound(sound_loop)
target:EmitSound(sound_loop)
-- End any pre-existing particle
if target.life_drain_particle then
ParticleManager:DestroyParticle(target.life_drain_particle, false)
ParticleManager:ReleaseParticleIndex(target.life_drain_particle)
end
-- Play ally particle
target.life_drain_particle = ParticleManager:CreateParticle(particle_drain, PATTACH_ABSORIGIN, caster)
ParticleManager:SetParticleControlEnt(target.life_drain_particle, 0, caster, PATTACH_POINT_FOLLOW, "attach_hitloc", caster:GetAbsOrigin(), true)
ParticleManager:SetParticleControlEnt(target.life_drain_particle, 1, target, PATTACH_POINT_FOLLOW, "attach_hitloc", target:GetAbsOrigin(), true)
end
function LifeDrainTickEnemy( keys )
local caster = keys.caster
local target = keys.target
local ability = keys.ability
local ability_level = ability:GetLevel() - 1
local modifier_enemy = keys.modifier_enemy
-- Parameters
local break_range = ability:GetLevelSpecialValueFor("break_range", ability_level) --+ GetCastRangeIncrease(caster)
local tick_rate = ability:GetLevelSpecialValueFor("tick_rate", ability_level)
local caster_max_mana = caster:GetMaxMana()
local target_max_mana = target:GetMaxMana()
local caster_current_mana = caster:GetMana()
local target_current_mana = target:GetMana()
if caster_max_mana ~= caster_current_mana and target_current_mana >= 5 then
caster:GiveMana(5)
target:ReduceMana(5)
end
-- Update particle color
ParticleManager:SetParticleControl(target.life_drain_particle, 11, Vector(1, 0, 0))
-- Check link break conditions
local should_break = false
-- Break the link if the caster is stunned or silenced or dead
if caster:IsStunned() or caster:IsSilenced() or not caster:IsAlive() then
should_break = true
end
-- Break the link if this target is out of the world or no longer visible
if target:IsOutOfGame() then
should_break = true
end
-- Calculate distance from this target to the caster
local target_loc = target:GetAbsOrigin()
local caster_loc = caster:GetAbsOrigin()
local distance = (target_loc - caster_loc):Length2D()
-- Break the link if the distance is too large
if distance > break_range then
should_break = true
end
-- If any of the break conditions is true, break the link
if should_break then
target:RemoveModifierByName(modifier_enemy)
end
end
function LifeDrainCancel( keys )
local caster = keys.caster
local ability = keys.ability
local ability_level = ability:GetLevel() - 1
local modifier_ally = keys.modifier_ally
local modifier_enemy = keys.modifier_enemy --не заверщён
-- Parameters
local search_range = ability:GetLevelSpecialValueFor("search_range", ability_level)
-- Find all currently tethered allies (Найти все в настоящее время на привязи союзников)
local allies = FindUnitsInRadius(caster:GetTeamNumber(), caster:GetAbsOrigin(), nil, search_range, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_BASIC + DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_INVULNERABLE + DOTA_UNIT_TARGET_FLAG_OUT_OF_WORLD, FIND_ANY_ORDER, false)
-- Iterate through valid allies, removing the life drain modifier
for _,ally in pairs(allies) do
ally:RemoveModifierByNameAndCaster(modifier_ally, caster)
end
end
function LifeDrainEnemyEnd( keys )
local caster = keys.caster
local target = keys.target
local sound_loop = keys.sound_loop
local sound_target = keys.sound_target
-- End the particle
ParticleManager:DestroyParticle(target.life_drain_particle, false)
ParticleManager:ReleaseParticleIndex(target.life_drain_particle)
target.life_drain_particle = nil
-- Stop the looping sound
target:StopSound(sound_target)
target:StopSound(sound_loop)
end
function LifeDrainAllyEnd( keys )
local caster = keys.caster
local target = keys.target
local sound_loop = keys.sound_loop
local sound_target = keys.sound_target
-- End the particle
ParticleManager:DestroyParticle(target.life_give_particle, false)
ParticleManager:ReleaseParticleIndex(target.life_give_particle)
target.life_give_particle = nil
-- Stop the looping sound
target:StopSound(sound_target)
target:StopSound(sound_loop)
end
Последнее редактирование модератором: