- 4 Окт 2014
- 473
- 2
не понимаю почему не работают заряды, помогите плиз)
Код:
LinkLuaModifier( "modifier_pudge_sacrifice", "heroes/hero_butcher/pudge_sacrifice.lua" ,LUA_MODIFIER_MOTION_NONE )
LinkLuaModifier( "modifier_pudge_sacrifice_visible", "heroes/hero_butcher/pudge_sacrifice.lua" ,LUA_MODIFIER_MOTION_NONE )
LinkLuaModifier( "modifier_pudge_sacrifice_charge", "heroes/hero_butcher/pudge_sacrifice.lua" ,LUA_MODIFIER_MOTION_NONE )
LinkLuaModifier( "modifier_pudge_sacrifice_charge_cooldown", "heroes/hero_butcher/pudge_sacrifice.lua" ,LUA_MODIFIER_MOTION_NONE )
pudge_sacrifice = class({})
function pudge_sacrifice:GetIntrinsicModifierName()
return "modifier_pudge_sacrifice_visible"
end
function pudge_sacrifice:CastFilterResultTarget( hTarget )
if IsServer() then
if self:GetCaster():HasScepter() then
if not self:GetCaster():HasModifier("modifier_pudge_sacrifice_charge") then
return UF_FAIL_CUSTOM
end
end
local nResult = UnitFilter( hTarget, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_CREEP, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, self:GetCaster():GetTeamNumber() )
if nResult ~= UF_SUCCESS then
return nResult
end
end
return UF_SUCCESS
end
function pudge_sacrifice:GetCustomCastErrorTarget( hTarget )
if IsServer() then
if self:GetCaster():HasScepter() then
if not self:GetCaster():HasModifier("modifier_pudge_sacrifice_charge") then
return "#dota_hud_error_charges"
end
end
end
return ""
end
function pudge_sacrifice:GetCooldown( nLevel )
if self:GetCaster():HasScepter() then
return 0
end
return self.BaseClass.GetCooldown( self, nLevel )
end
function pudge_sacrifice:GetConceptRecipientType()
return DOTA_SPEECH_USER_ALL
end
function pudge_sacrifice:SpeakTrigger()
return DOTA_ABILITY_SPEAK_CAST
end
function pudge_sacrifice:GetChannelTime()
self.hero_duration = self:GetSpecialValueFor( "sacrifice_duration" )
return self.hero_duration
end
function pudge_sacrifice:OnAbilityPhaseStart()
if IsServer() then
self.hVictim = self:GetCursorTarget()
if self:GetCaster():HasScepter() then
if self:GetCaster():HasModifier("modifier_pudge_sacrifice_charge") then
local mod_table = self:GetCaster():FindAllModifiers()
for i = 1, #mod_table do
local mods = mod_table[i]
if mods:GetName() == "modifier_pudge_sacrifice_charge" then
self.charge = mods
break
end
end
self.charge:Destroy()
local mod_visible = self:GetCaster():FindModifierByName("modifier_pudge_sacrifice_visible")
mod_visible:SetStackCount(mod_visible:GetStackCount() - 1)
return true
else
return false
end
end
end
return true
end
function pudge_sacrifice:OnSpellStart()
if self.hVictim == nil then
return
end
if self.hVictim:TriggerSpellAbsorb( self ) then
self.hVictim = nil
self:GetCaster():Interrupt()
else
self.hVictim:AddNewModifier( self:GetCaster(), self, "modifier_pudge_sacrifice", { duration = self:GetChannelTime() } )
self.hVictim:Interrupt()
end
end
function pudge_sacrifice:OnChannelFinish( bInterrupted )
if self.hVictim ~= nil then
self.hVictim:RemoveModifierByName( "modifier_pudge_sacrifice" )
end
end
modifier_pudge_sacrifice_visible = class({})
function modifier_pudge_sacrifice_visible:GetAttributes ()
return MODIFIER_ATTRIBUTE_IGNORE_INVULNERABLE + MODIFIER_ATTRIBUTE_MULTIPLE
end
function modifier_pudge_sacrifice_visible:IsHidden()
if IsServer() then
if self:GetCaster():HasScepter() then
return false
end
end
return true
end
function modifier_pudge_sacrifice_visible:IsPurgable()
return false
end
function modifier_pudge_sacrifice_visible:OnCreated()
if IsServer() then
self:StartIntervalThink(0.5)
end
end
function modifier_pudge_sacrifice_visible:OnIntervalThink()
if IsServer() then
if self:GetParent():HasScepter() then
if not self:GetParent():HasModifier("modifier_pudge_sacrifice_charge") then
self:GetParent():AddNewModifier(self:GetParent(), self:GetAbility(), "modifier_pudge_sacrifice_charge", nil)
self:GetParent():AddNewModifier(self:GetParent(), self:GetAbility(), "modifier_pudge_sacrifice_charge", nil)
self:SetStackCount(2)
end
end
end
end
modifier_pudge_sacrifice_charge = class({})
function modifier_pudge_sacrifice_charge:RemoveOnDeath()
return false
end
function modifier_pudge_sacrifice_charge:IsPurgable()
return false
end
function modifier_pudge_sacrifice_charge:IsBuff()
return true
end
function modifier_pudge_sacrifice_charge:OnDestroy()
if IsServer() then
local abil = self:GetAbility()
local cooldown = abil:GetCooldown(abil:GetLevel())
self:GetParent():AddNewModifier(self:GetParent(), abil, "modifier_pudge_sacrifice_charge_cooldown", {duration = cooldown})
--self:StartChargeCooldown(abil, cooldown)
end
end
function modifier_pudge_sacrifice_charge:StartChargeCooldown(abil, cooldown)
if IsServer() then
end
end
function modifier_pudge_sacrifice_charge:GetAttributes ()
return MODIFIER_ATTRIBUTE_IGNORE_INVULNERABLE + MODIFIER_ATTRIBUTE_PERMANENT
end
modifier_pudge_sacrifice_charge_cooldown = class({})
function modifier_pudge_sacrifice_charge_cooldown:RemoveOnDeath()
return false
end
function modifier_pudge_sacrifice_charge_cooldown:IsPurgable()
return false
end
function modifier_pudge_sacrifice_charge_cooldown:IsBuff()
return true
end
function modifier_pudge_sacrifice_charge_cooldown:OnDestroy()
if IsServer() then
self:GetParent():AddNewModifier(self:GetParent(), self:GetAbility(), "modifier_pudge_sacrifice_charge", nil)
end
end
function modifier_pudge_sacrifice_charge_cooldown:GetAttributes ()
return MODIFIER_ATTRIBUTE_IGNORE_INVULNERABLE + MODIFIER_ATTRIBUTE_PERMANENT
end
modifier_pudge_sacrifice = class({})
function modifier_pudge_sacrifice:IsDebuff()
return true
end
--------------------------------------------------------------------------------
function modifier_pudge_sacrifice:IsStunDebuff()
return true
end
--------------------------------------------------------------------------------
function modifier_pudge_sacrifice:OnCreated( kv )
self.sacrifice_damage = self:GetAbility():GetSpecialValueFor( "sacrifice_damage" )
self.strength_damage_scepter = self:GetAbility():GetSpecialValueFor( "sacrifice_atributes" )
if IsServer() then
self:GetParent():InterruptChannel()
self:OnIntervalThink()
self:StartIntervalThink( 1 )
end
end
--------------------------------------------------------------------------------
function modifier_pudge_sacrifice:OnDestroy()
if IsServer() then
self:GetCaster():InterruptChannel()
end
end
--------------------------------------------------------------------------------
function modifier_pudge_sacrifice:OnIntervalThink()
if IsServer() then
local flDamage = self.sacrifice_damage
flDamage = flDamage + ((self:GetCaster():GetStrength() + self:GetCaster():GetAgility() + self:GetCaster():GetIntellect()) * (self.strength_damage_scepter/100) )
self:GetCaster():Heal( flDamage, self:GetAbility() )
local damage = {
victim = self:GetParent(),
attacker = self:GetCaster(),
damage = flDamage/10,
damage_type = DAMAGE_TYPE_MAGICAL,
ability = self:GetAbility()
}
ApplyDamage( damage )
EmitSoundOn( "Hero_Pudge.Dismember", self:GetParent() )
end
end
--------------------------------------------------------------------------------
function modifier_pudge_sacrifice:CheckState()
local state = {
[MODIFIER_STATE_STUNNED] = true,
[MODIFIER_STATE_INVISIBLE] = false,
}
return state
end
--------------------------------------------------------------------------------
function modifier_pudge_sacrifice:DeclareFunctions()
local funcs = {
MODIFIER_PROPERTY_OVERRIDE_ANIMATION,
}
return funcs
end
--------------------------------------------------------------------------------
function modifier_pudge_sacrifice:GetOverrideAnimation( params )
return ACT_DOTA_DISABLED
end
Последнее редактирование модератором: