200 lines
7.6 KiB
Lua
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
|