Сделал абилку которая призывает 1 иллюзию героя и при спавне имеет шанс получить умения оригинала, но после того как иллюзия умирает через некоторое время у оригинала пропадают те умения которые были у иллюзии. Собственно как это исправить?
Код:
function item_mirror_blade:OnSpellStart( )
local caster = self:GetCaster()
ProjectileManager:ProjectileDodge(caster)
caster:EmitSound("DOTA_Item.Manta.Activate")
local id0 = ParticleManager:CreateParticle("particles/items2_fx/manta_phase.vpcf",PATTACH_ABSORIGIN_FOLLOW, caster)
caster:Purge(false, true, false, false, false)
caster:AddNoDraw()
local illusion_duration = self:GetSpecialValueFor("duration")
local illusion_outgoing_damage = self:GetSpecialValueFor("out_damage") - 100
local illusion_incoming_damage = self:GetSpecialValueFor("take_damage") - 100
local count = self:GetSpecialValueFor("illusions")
local player_id = caster:GetPlayerID()
local ability_chance = self:GetSpecialValueFor("ability_chance")
local cpl = self:GetSpecialValueFor("ability_chance_per_level") * caster:GetLevel()
local chance = ability_chance + cpl
if IsServer() then
caster_health = caster:GetHealthPercent()
caster_mana = caster:GetManaPercent()
caster_agi = caster:GetBaseAgility()
caster_str = caster:GetBaseStrength()
caster_int = caster:GetBaseIntellect()
end
for i=1, count do
local unit = CreateUnitByName(caster:GetName(), caster:GetAbsOrigin()+Vector(RandomInt(-120,120),RandomInt(-120,120),0), true, caster, nil, caster:GetTeam())
local caster_level = caster:GetLevel()
for i = 1, caster_level - 1 do
unit:HeroLevelUp(false)
end
unit:SetControllableByPlayer(player_id, true)
unit:SetBaseAgility(caster_agi)
unit:SetBaseIntellect(caster_int)
unit:SetBaseStrength(caster_str)
unit:SetHealth(unit:GetMaxHealth() * caster_health * 0.01)
unit:SetMana(unit:GetMaxMana() * caster_mana * 0.01)
for ability_slot = 0, 5 do
local individual_ability = caster:GetAbilityByIndex(ability_slot)
if individual_ability and RollPercentage(chance) then
local illusion_ability = unit:SetAbilityByIndex(individual_ability,ability_slot)
if illusion_ability then
illusion_ability:SetLevel(individual_ability:GetLevel())
end
end
end
for item_slot = 0, 5 do
local individual_item = caster:GetItemInSlot(item_slot)
if individual_item then
local illusion_duplicate_item = CreateItem(individual_item:GetName(), unit, unit)
unit:AddItem(illusion_duplicate_item)
end
end
end
unit:AddNewModifier(caster, self, "modifier_illusion", {duration = illusion_duration, outgoing_damage = illusion_outgoing_damage, incoming_damage = illusion_incoming_damage})
unit:MakeIllusion()
caster:SetAbsOrigin(caster:GetAbsOrigin()+Vector(RandomInt(-120,120),RandomInt(-120,120),0))
FindClearSpaceForUnit(caster,caster:GetAbsOrigin(),false)
caster:RemoveNoDraw()
ParticleManager:DestroyParticle(id0,false)
end
Последнее редактирование модератором: