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

200 lines
7.6 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
local ____modifier_overheating = require("abilities.heroes.sargatanas.modifier_overheating")
local modifier_overheating = ____modifier_overheating.modifier_overheating
local function DamageHell(self, unit)
if unit:HasModifier(modifier_overheating.name) then
local modif = unit:FindModifierByName(modifier_overheating.name)
if modif then
return modif:GetStackCount() / 100 + 1
end
end
return 1
end
____exports.ability_firecleave = __TS__Class()
local ability_firecleave = ____exports.ability_firecleave
ability_firecleave.name = "ability_firecleave"
ability_firecleave.____file_path = "scripts/vscripts/abilities/heroes/sargatanas/ability_firecleave.lua"
__TS__ClassExtends(ability_firecleave, BaseAbility)
function ability_firecleave.prototype.GetIntrinsicModifierName(self)
return ____exports.modifier_ability_firecleave.name
end
ability_firecleave = __TS__Decorate(
ability_firecleave,
ability_firecleave,
{registerAbility(nil)},
{kind = "class", name = "ability_firecleave"}
)
____exports.ability_firecleave = ability_firecleave
____exports.modifier_ability_firecleave = __TS__Class()
local modifier_ability_firecleave = ____exports.modifier_ability_firecleave
modifier_ability_firecleave.name = "modifier_ability_firecleave"
modifier_ability_firecleave.____file_path = "scripts/vscripts/abilities/heroes/sargatanas/ability_firecleave.lua"
__TS__ClassExtends(modifier_ability_firecleave, BaseModifier)
function modifier_ability_firecleave.prototype.____constructor(self, ...)
BaseModifier.prototype.____constructor(self, ...)
self.cleaveStartingWidth = 0
self.cleaveEndingWidth = 0
self.cleaveDistance = 0
self.greatCleaveDamage = 0
end
function modifier_ability_firecleave.prototype.IsHidden(self)
return true
end
function modifier_ability_firecleave.prototype.IsPurgable(self)
return false
end
function modifier_ability_firecleave.prototype.IsDebuff(self)
return false
end
function modifier_ability_firecleave.prototype.IsBuff(self)
return true
end
function modifier_ability_firecleave.prototype.RemoveOnDeath(self)
return true
end
function modifier_ability_firecleave.prototype.AllowIllusionDuplicate(self)
return false
end
function modifier_ability_firecleave.prototype.DeclareFunctions(self)
return {MODIFIER_EVENT_ON_ATTACK_LANDED}
end
function modifier_ability_firecleave.prototype.OnCreated(self)
if not IsServer() then
return
end
local ability = self:GetAbility()
if not ability then
return
end
self.cleaveStartingWidth = ability:GetSpecialValueFor("cleave_starting_width")
self.cleaveEndingWidth = ability:GetSpecialValueFor("cleave_ending_width")
self.cleaveDistance = ability:GetSpecialValueFor("cleave_distance")
end
function modifier_ability_firecleave.prototype.OnRefresh(self)
self:OnCreated()
end
function modifier_ability_firecleave.prototype.OnAttackLanded(self, event)
if not IsServer() then
return
end
local caster = self:GetParent()
local target = event.target
local attacker = event.attacker
local ability = self:GetAbility()
if not ability then
return
end
local duration = ability:GetSpecialValueFor("duration")
if caster == attacker and not caster:PassivesDisabled() then
self.greatCleaveDamage = ability:GetSpecialValueFor("great_cleave_damage") / 100 * self:GetCaster():GetAverageTrueAttackDamage(event.target)
if target:HasModifier(____exports.modifier_ability_firecleave_fire.name) then
local modif = target:FindModifierByName(____exports.modifier_ability_firecleave_fire.name)
if modif then
modif:IncrementStackCount()
modif:SetDuration(duration, true)
end
else
local newModif = target:AddNewModifier(caster, ability, ____exports.modifier_ability_firecleave_fire.name, {duration = duration})
if newModif ~= nil and newModif ~= nil then
newModif:SetStackCount(1)
end
end
local fx = "particles/econ/items/sven/sven_ti7_sword/sven_ti7_sword_spell_great_cleave_gods_strength_crit_b.vpcf"
DoCleaveAttack(
caster,
target,
ability,
self.greatCleaveDamage,
self.cleaveStartingWidth,
self.cleaveEndingWidth,
self.cleaveDistance,
fx
)
end
end
modifier_ability_firecleave = __TS__Decorate(
modifier_ability_firecleave,
modifier_ability_firecleave,
{registerModifier(nil)},
{kind = "class", name = "modifier_ability_firecleave"}
)
____exports.modifier_ability_firecleave = modifier_ability_firecleave
____exports.modifier_ability_firecleave_fire = __TS__Class()
local modifier_ability_firecleave_fire = ____exports.modifier_ability_firecleave_fire
modifier_ability_firecleave_fire.name = "modifier_ability_firecleave_fire"
modifier_ability_firecleave_fire.____file_path = "scripts/vscripts/abilities/heroes/sargatanas/ability_firecleave.lua"
__TS__ClassExtends(modifier_ability_firecleave_fire, BaseModifier)
function modifier_ability_firecleave_fire.prototype.IsHidden(self)
return false
end
function modifier_ability_firecleave_fire.prototype.IsPurgable(self)
return true
end
function modifier_ability_firecleave_fire.prototype.IsDebuff(self)
return true
end
function modifier_ability_firecleave_fire.prototype.IsBuff(self)
return false
end
function modifier_ability_firecleave_fire.prototype.RemoveOnDeath(self)
return true
end
function modifier_ability_firecleave_fire.prototype.AllowIllusionDuplicate(self)
return false
end
function modifier_ability_firecleave_fire.prototype.GetEffectName(self)
return "particles/econ/items/huskar/huskar_2021_immortal/huskar_2021_immortal_burning_spear_debuff_flame_circulate.vpcf"
end
function modifier_ability_firecleave_fire.prototype.GetEffectAttachType(self)
return PATTACH_ABSORIGIN_FOLLOW
end
function modifier_ability_firecleave_fire.prototype.OnCreated(self)
if not IsServer() then
return
end
self:StartIntervalThink(1)
end
function modifier_ability_firecleave_fire.prototype.OnIntervalThink(self)
if not IsServer() then
return
end
local ability = self:GetAbility()
local caster = self:GetCaster()
if not ability or not caster then
return
end
local damage
if caster:HasModifier("modifier_ability_metamorphosis") then
damage = ability:GetSpecialValueFor("fire_damage") * 2
else
damage = ability:GetSpecialValueFor("fire_damage")
end
ApplyDamage({
victim = self:GetParent(),
attacker = caster,
damage = damage * DamageHell(
nil,
self:GetParent()
),
damage_type = ability:GetAbilityDamageType(),
ability = ability
})
end
modifier_ability_firecleave_fire = __TS__Decorate(
modifier_ability_firecleave_fire,
modifier_ability_firecleave_fire,
{registerModifier(nil)},
{kind = "class", name = "modifier_ability_firecleave_fire"}
)
____exports.modifier_ability_firecleave_fire = modifier_ability_firecleave_fire
return ____exports