Короче создаю партикль и он не удаляется как надо

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

Se7eN

Друзья CG
22 Ноя 2014
334
18
Код:
  ParticleManager:DestroyParticle(particle[i], true)

Путь к партиклю: particles/units/heroes/hero_chaos_knight/chaos_knight_bolt_msg.vpcf

в общем это сообщение от Хаос найта, которое высвечивается и выражается в секундах стана от первой способности
 
[quote author=Se7eN link=topic=912.msg4362#msg4362 date=1463763747]
Код:
  ParticleManager:DestroyParticle(particle[i], true)

Путь к партиклю: particles/units/heroes/hero_chaos_knight/chaos_knight_bolt_msg.vpcf

в общем это сообщение от Хаос найта, которое высвечивается и выражается в секундах стана от первой способности
[/quote]
Делай через
Код:
  self:AddParticle( nFXIndex1, false, false, -1, false, true )
И удалять ничего не придется
 
Мне обычно лень искать какие то специализированые функции удаления, так что я обычно делаю через UTIL_Remove(object). Удаляет все, а если объект уже удален он не крашнет гейммод(но если подать на него Nil, то крашнет).
 
есть какой-нибудь грамотный пример юза?
Код:
bynder_rim = class ( {})
LinkLuaModifier ("modifier_bynder_rim","heroes/hero_bynder/bynder_rim.lua", LUA_MODIFIER_MOTION_NONE)

function bynder_rim:GetCooldown (nLevel)
  if self:GetCaster ():HasScepter () then
    return self:GetSpecialValueFor ("cooldown_scepter")
  end

  return self.BaseClass.GetCooldown (self, nLevel)
end

function bynder_rim:GetManaCost (hTarget)
  if 	self:GetCaster ():HasScepter () then
    return 0
  else
    return self.BaseClass.GetManaCost (self, hTarget)
  end
end

function bynder_rim:OnSpellStart ()
  local hCaster = self:GetCaster()

  local duration = self:GetSpecialValueFor ("duration")
  if hCaster:HasScepter() then
    duration = self:GetSpecialValueFor ("duration_scepter")
  end

  hCaster:AddNewModifier (self:GetCaster (), self, "modifier_bynder_rim", { duration = duration } )
  EmitSoundOn ("Hero_ChaosKnight.Phantasm", hTarget)
  EmitSoundOn ("Hero_ChaosKnight.Phantasm.Plus", hTarget)
end

modifier_bynder_rim = class ( {})

function modifier_bynder_rim:IsBuff ()
  return true
end

function modifier_bynder_rim:IsHidden()
  return false
end

function modifier_bynder_rim:IsPurgable()
  return false
end

function modifier_bynder_rim:OnCreated ()
  if IsServer() then
    local caster = self:GetParent ()
    local nFXIndex1 = ParticleManager:CreateParticle ("particles/byonder_ball_sphere.vpcf", PATTACH_ABSORIGIN_FOLLOW, caster)
    ParticleManager:SetParticleControl (nFXIndex1, 0, caster:GetAbsOrigin () )
    ParticleManager:SetParticleControl (nFXIndex1, 1, Vector (1, 0, 0))
    ParticleManager:SetParticleControl (nFXIndex1, 2, caster:GetAbsOrigin () )
    ParticleManager:SetParticleControl (nFXIndex1, 5, caster:GetAbsOrigin () )
    ParticleManager:SetParticleControl (nFXIndex1, 6, caster:GetAbsOrigin () )
    ParticleManager:SetParticleControl (nFXIndex1, 7, caster:GetAbsOrigin () )
    self:AddParticle( nFXIndex1, false, false, -1, false, true )
    self.damage = 0
  end
end

function modifier_bynder_rim:DeclareFunctions ()
  local funcs = {
    MODIFIER_EVENT_ON_TAKEDAMAGE
  }

  return funcs
end


function modifier_bynder_rim:OnTakeDamage(params)
  if self:GetParent () == params.unit then
    self.damage = self.damage + params.damage
    self:GetParent ():SetHealth(self:GetParent ():GetHealth() + params.damage)
    self:GetParent ():SetBaseDamageMax(self.damage)
    
    local RemovePositiveBuffs = false
    local RemoveDebuffs = true
    local BuffsCreatedThisFrameOnly = false
    local RemoveStuns = true
    local RemoveExceptions = false
    self:GetParent():Purge( RemovePositiveBuffs, RemoveDebuffs, BuffsCreatedThisFrameOnly, RemoveStuns, RemoveExceptions)
  end
end


function modifier_bynder_rim:CheckState()
  local state = {
    [MODIFIER_STATE_NO_HEALTH_BAR] = true,
  }

  return state
end   

function modifier_bynder_rim:OnDestroy()
  self.damage = 0
  self:GetParent ():SetBaseDamageMax(43)
end
 
Последнее редактирование модератором:
Если ты удаляешь его спустя какое-то время, то все дело кроется в его идентификаторе, которого может уже и не быть в момент времени, когда ты пытаешься удалить партикль.
 
Реклама: