130 lines
5.1 KiB
Lua
130 lines
5.1 KiB
Lua
local ____lualib = require("lualib_bundle")
|
|
local __TS__Class = ____lualib.__TS__Class
|
|
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
|
local __TS__Decorate = ____lualib.__TS__Decorate
|
|
local ____exports = {}
|
|
local ____dota_ts_adapter = require("lib.dota_ts_adapter")
|
|
local BaseAbility = ____dota_ts_adapter.BaseAbility
|
|
local BaseModifier = ____dota_ts_adapter.BaseModifier
|
|
local registerAbility = ____dota_ts_adapter.registerAbility
|
|
local registerModifier = ____dota_ts_adapter.registerModifier
|
|
____exports.dark_golem = __TS__Class()
|
|
local dark_golem = ____exports.dark_golem
|
|
dark_golem.name = "dark_golem"
|
|
dark_golem.____file_path = "scripts/vscripts/abilities/heroes/nagash/dark_golem.lua"
|
|
__TS__ClassExtends(dark_golem, BaseAbility)
|
|
function dark_golem.prototype.OnSpellStart(self)
|
|
local caster = self:GetCaster()
|
|
EmitSoundOn("Hero_Warlock.RainOfChaos", caster)
|
|
local particleId = ParticleManager:CreateParticle("particles/units/heroes/hero_warlock/warlock_rain_of_chaos_start.vpcf", PATTACH_ABSORIGIN_FOLLOW, caster)
|
|
ParticleManager:ReleaseParticleIndex(particleId)
|
|
caster:AddNewModifier(
|
|
caster,
|
|
self,
|
|
"modifier_dark_golem_buff",
|
|
{duration = self:GetSpecialValueFor("duration")}
|
|
)
|
|
end
|
|
dark_golem = __TS__Decorate(
|
|
dark_golem,
|
|
dark_golem,
|
|
{registerAbility(nil)},
|
|
{kind = "class", name = "dark_golem"}
|
|
)
|
|
____exports.dark_golem = dark_golem
|
|
____exports.modifier_dark_golem_buff = __TS__Class()
|
|
local modifier_dark_golem_buff = ____exports.modifier_dark_golem_buff
|
|
modifier_dark_golem_buff.name = "modifier_dark_golem_buff"
|
|
modifier_dark_golem_buff.____file_path = "scripts/vscripts/abilities/heroes/nagash/dark_golem.lua"
|
|
__TS__ClassExtends(modifier_dark_golem_buff, BaseModifier)
|
|
function modifier_dark_golem_buff.prototype.IsHidden(self)
|
|
return false
|
|
end
|
|
function modifier_dark_golem_buff.prototype.DeclareFunctions(self)
|
|
return {
|
|
MODIFIER_PROPERTY_MODEL_CHANGE,
|
|
MODIFIER_PROPERTY_DAMAGEOUTGOING_PERCENTAGE,
|
|
MODIFIER_PROPERTY_ATTACKSPEED_PERCENTAGE,
|
|
MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE,
|
|
MODIFIER_EVENT_ON_ATTACK_LANDED
|
|
}
|
|
end
|
|
function modifier_dark_golem_buff.prototype.GetModifierModelChange(self)
|
|
return "models/items/warlock/golem/puppet_summoner_golem/puppet_summoner_golem.vmdl"
|
|
end
|
|
function modifier_dark_golem_buff.prototype.GetModifierDamageOutgoing_Percentage(self)
|
|
if IsClient() then
|
|
return 0
|
|
end
|
|
local ability = self:GetAbility()
|
|
if not ability then
|
|
return 0
|
|
end
|
|
local parent = self:GetParent()
|
|
if not parent then
|
|
return ability:GetSpecialValueFor("bonus_damage_pct_per_token")
|
|
end
|
|
local leaderTokenModifier = parent:FindModifierByName("modifier_leader_token")
|
|
local stackCount = leaderTokenModifier and leaderTokenModifier:GetStackCount() or 0
|
|
return ability:GetSpecialValueFor("bonus_damage_pct_per_token") + stackCount
|
|
end
|
|
function modifier_dark_golem_buff.prototype.GetModifierAttackSpeedPercentage(self)
|
|
if IsClient() then
|
|
return 0
|
|
end
|
|
local ability = self:GetAbility()
|
|
if not ability then
|
|
return 0
|
|
end
|
|
local parent = self:GetParent()
|
|
if not parent then
|
|
return ability:GetSpecialValueFor("bonus_attack_speed_pct_per_token")
|
|
end
|
|
local leaderTokenModifier = parent:FindModifierByName("modifier_leader_token")
|
|
local stackCount = leaderTokenModifier and leaderTokenModifier:GetStackCount() or 0
|
|
return ability:GetSpecialValueFor("bonus_attack_speed_pct_per_token") + stackCount
|
|
end
|
|
function modifier_dark_golem_buff.prototype.GetModifierMoveSpeedBonus_Percentage(self)
|
|
if IsClient() then
|
|
return 0
|
|
end
|
|
local ability = self:GetAbility()
|
|
if not ability then
|
|
return 0
|
|
end
|
|
local parent = self:GetParent()
|
|
if not parent then
|
|
return ability:GetSpecialValueFor("bonus_movespeed_pct_per_token")
|
|
end
|
|
local leaderTokenModifier = parent:FindModifierByName("modifier_leader_token")
|
|
local stackCount = leaderTokenModifier and leaderTokenModifier:GetStackCount() or 0
|
|
return ability:GetSpecialValueFor("bonus_movespeed_pct_per_token") + stackCount
|
|
end
|
|
function modifier_dark_golem_buff.prototype.OnAttackLanded(self, event)
|
|
local parent = event.attacker
|
|
if self:GetParent() ~= parent then
|
|
return
|
|
end
|
|
local target = event.target
|
|
local attackDamage = parent:GetAttackDamage()
|
|
local cleaveDamage = attackDamage * (self:GetAbility():GetSpecialValueFor("cleave_damage") / 100)
|
|
DoCleaveAttack(
|
|
parent,
|
|
target,
|
|
self:GetAbility(),
|
|
cleaveDamage,
|
|
self:GetAbility():GetSpecialValueFor("cleave_starting_width"),
|
|
self:GetAbility():GetSpecialValueFor("cleave_ending_width"),
|
|
self:GetAbility():GetSpecialValueFor("cleave_distance"),
|
|
"particles/items_fx/battlefury_cleave.vpcf"
|
|
)
|
|
end
|
|
modifier_dark_golem_buff = __TS__Decorate(
|
|
modifier_dark_golem_buff,
|
|
modifier_dark_golem_buff,
|
|
{registerModifier(nil)},
|
|
{kind = "class", name = "modifier_dark_golem_buff"}
|
|
)
|
|
____exports.modifier_dark_golem_buff = modifier_dark_golem_buff
|
|
return ____exports
|