- 4 Окт 2014
- 473
- 2
Код:
ursa_battle_trance = class({})
LinkLuaModifier( "ursa_battle_trance_modifier", "ursa_battle_trance.lua", LUA_MODIFIER_MOTION_NONE )
--------------------------------------------------------------------------------
function ursa_battle_trance:GetCooldown( nLevel )
if self:GetCaster():HasScepter() then
return 20
end
return self.BaseClass.GetCooldown( self, nLevel )
end
--------------------------------------------------------------------------------
function ursa_battle_trance:IsHiddenWhenStolen()
return true
end
--------------------------------------------------------------------------------
function ursa_battle_trance:OnSpellStart()
self.damage_reduction = self:GetSpecialValueFor( "damage_reduction" )*0.01
self.heal_persent = self:GetSpecialValueFor( "healing_scepter" )
self.duration = self:GetSpecialValueFor( "duration" )
_G.heal = nil
_G.damage = nil
local caster = self:GetCaster()
caster:EmitSound("Hero_Ursa.Enrage")
caster:EmitSound("Hero_Ursa.Enrage")
_G.CastHealth = caster:GetHealth()
caster:AddNewModifier( self:GetCaster(), self, "ursa_battle_trance_modifier", { duration = self.duration } )
local vTargetPosition = caster:GetAbsOrigin()
nFXIndex_promise = ParticleManager:CreateParticle( "particles/units/heroes/hero_oracle/oracle_false_promise.vpcf", PATTACH_POINT_FOLLOW, self:GetCaster() )
ParticleManager:SetParticleControl( nFXIndex_promise, 0, vTargetPosition )
ParticleManager:SetParticleControl( nFXIndex_promise, 1, vTargetPosition )
ParticleManager:SetParticleControl( nFXIndex_promise, 2, vTargetPosition )
ParticleManager:SetParticleControl( nFXIndex_promise, 4, vTargetPosition )
ParticleManager:SetParticleControl( nFXIndex_promise, 5, vTargetPosition )
EmitSoundOnLocationWithCaster( vTargetPosition, "Hero_Ursa.Enrage", self:GetCaster() )
Timers:CreateTimer(self.duration,
function()
ParticleManager:DestroyParticle(nFXIndex_promise, false)
return nil
end)
end
--------------------------------------------------------------------------------
ursa_battle_trance_modifier = class({})
function ursa_battle_trance_modifier:DeclareFunctions()
return { MODIFIER_EVENT_ON_TAKEDAMAGE }
end
function ursa_battle_trance_modifier:OnCreated()
local ability = self:GetAbility()
local caster = self:GetCaster()
self.tick_interval = 0.03
self:StartIntervalThink(self.tick_interval)
_G.heal = 0
_G.damage = 0
end
function ursa_battle_trance_modifier:OnIntervalThink()
local caster = self:GetParent()
if caster:HasScepter() and caster:GetHealth() > _G.CastHealth then
_G.heal = _G.heal + (caster:GetHealth() - _G.CastHealth)
caster:SetHealth(_G.CastHealth)
end
end
function ursa_battle_trance_modifier:OnTakeDamage( event )
local caster = self:GetCaster()
self.attacker = event.attacker
local damage_dealed = event.damage
_G.damage = _G.damage + damage_dealed
caster:SetHealth(_G.CastHealth)
end
function ursa_battle_trance_modifier:OnDestroy()
local caster = self:GetCaster()
local ability = self
if not caster:HasScepter() then
ApplyDamage({attacker = self.attacker, victim = caster, ability = ability, damage = _G.damage, damage_type = DAMAGE_TYPE_PURE})
caster:EmitSound("Hero_Oracle.FalsePromise.Damaged")
caster:EmitSound("Hero_Oracle.FalsePromise.Damaged")
_G.damage = nil
ParticleManager:CreateParticle("particles/units/heroes/hero_oracle/oracle_false_promise_dmg.vpcf", PATTACH_OVERHEAD_FOLLOW, caster)
else
caster:Heal(_G.heal, caster)
ApplyDamage({attacker = caster, victim = self.attacker, ability = ability, damage = _G.damage, damage_type = DAMAGE_TYPE_PURE})
ApplyDamage({attacker = self.attacker, victim = caster, ability = ability, damage = _G.damage, damage_type = DAMAGE_TYPE_PURE})
caster:EmitSound("Hero_Oracle.FalsePromise.Healed")
_G.heal = nil
_G.damage = nil
ParticleManager:CreateParticle("particles/units/heroes/hero_oracle/oracle_false_promise_dmg.vpcf", PATTACH_OVERHEAD_FOLLOW, caster)
end
end
function ursa_battle_trance_modifier:GetStatusEffectName()
return "particles/status_fx/status_effect_huskar_lifebreak.vpcf"
end
function ursa_battle_trance_modifier:IsHidden()
return false
end
function ursa_battle_trance_modifier:IsBuff()
return true
end
function ursa_battle_trance_modifier:IsPurgable()
return false
end
Последнее редактирование модератором: