Исчезают умения после смерти иллюзии

  • Автор темы Автор темы Danis
  • Дата начала Дата начала

Danis

Продвинутый
12 Июн 2016
285
0
Проект
Custom Hero Arena
Сделал абилку которая призывает 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
 
Последнее редактирование модератором:
[quote author=Danis link=topic=1329.msg8296#msg8296 date=1487160406]
Сделал абилку которая призывает 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
[/quote]


извини что не по теме но все молчат посмотри вот это плез https://customgames.ru/forum/index.php?topic=1328.msg8295#msg8295
 
Последнее редактирование модератором:
[quote author=remeercs link=topic=1329.msg8300#msg8300 date=1487162493]

извини что не по теме но все молчат посмотри вот это плез https://customgames.ru/forum/index.php?topic=1328.msg8295#msg8295
[/quote]

а смысл сюда писать если твою тему и так видно всем кто сидит в скриптинге? Если не пишут значит не могут ответить.
 
Дык потому что абилки это сущности и ты ему не добавляешь новые абилки а расшариваешь абилки кастера с ним. Соответственно иллюзия умирает и её абилки удаляются. Используй AddAbility
 
Реклама: