Files
Dota-Zombie-Invasion/scripts/vscripts/abilities/heroes/nagash/dark_golem.lua
T
2026-05-29 15:11:31 +07:00

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