Files
Dota-Zombie-Invasion/scripts/vscripts/abilities/creep/demon_dragon_satyr/animation.lua
T
2026-05-29 15:11:31 +07:00

118 lines
4.9 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 ____incoming_damage_reduction_combine = require("utils.incoming_damage_reduction_combine")
local removeIncomingDamageReductionSource = ____incoming_damage_reduction_combine.removeIncomingDamageReductionSource
local setIncomingDamageReductionSource = ____incoming_damage_reduction_combine.setIncomingDamageReductionSource
local ANIMATION_STUN_INCOMING_SOURCE = "modifier_animation_stun"
____exports.ability_animation = __TS__Class()
local ability_animation = ____exports.ability_animation
ability_animation.name = "ability_animation"
ability_animation.____file_path = "scripts/vscripts/abilities/creep/demon_dragon_satyr/animation.lua"
__TS__ClassExtends(ability_animation, BaseAbility)
function ability_animation.prototype.GetIntrinsicModifierName(self)
return "modifier_animation_checker"
end
ability_animation = __TS__Decorate(
ability_animation,
ability_animation,
{registerAbility(nil)},
{kind = "class", name = "ability_animation"}
)
____exports.ability_animation = ability_animation
____exports.modifier_animation_checker = __TS__Class()
local modifier_animation_checker = ____exports.modifier_animation_checker
modifier_animation_checker.name = "modifier_animation_checker"
modifier_animation_checker.____file_path = "scripts/vscripts/abilities/creep/demon_dragon_satyr/animation.lua"
__TS__ClassExtends(modifier_animation_checker, BaseModifier)
function modifier_animation_checker.prototype.IsHidden(self)
return true
end
function modifier_animation_checker.prototype.DeclareFunctions(self)
return {MODIFIER_EVENT_ON_TAKEDAMAGE}
end
function modifier_animation_checker.prototype.OnTakeDamage(self, event)
if not IsServer() then
return
end
local unit = event.unit
if unit ~= self:GetParent() then
return
end
local maxHealth = unit:GetMaxHealth()
local currentHealth = unit:GetHealth()
local ability = self:GetAbility()
if currentHealth <= maxHealth * 0.75 and self:GetStackCount() < 1 then
self:IncrementStackCount()
unit:AddNewModifier(unit, ability, "modifier_animation_stun", {duration = 3.7})
end
if currentHealth <= maxHealth * 0.5 and self:GetStackCount() < 2 then
self:IncrementStackCount()
unit:AddNewModifier(unit, ability, "modifier_animation_stun", {duration = 3.7})
end
if currentHealth <= maxHealth * 0.25 and self:GetStackCount() < 3 then
self:IncrementStackCount()
unit:AddNewModifier(unit, ability, "modifier_animation_stun", {duration = 3.7})
end
end
modifier_animation_checker = __TS__Decorate(
modifier_animation_checker,
modifier_animation_checker,
{registerModifier(nil)},
{kind = "class", name = "modifier_animation_checker"}
)
____exports.modifier_animation_checker = modifier_animation_checker
____exports.modifier_animation_stun = __TS__Class()
local modifier_animation_stun = ____exports.modifier_animation_stun
modifier_animation_stun.name = "modifier_animation_stun"
modifier_animation_stun.____file_path = "scripts/vscripts/abilities/creep/demon_dragon_satyr/animation.lua"
__TS__ClassExtends(modifier_animation_stun, BaseModifier)
function modifier_animation_stun.prototype.IsHidden(self)
return false
end
function modifier_animation_stun.prototype.OnCreated(self)
if not IsServer() then
return
end
local parent = self:GetParent()
parent:StartGestureWithFade(ACT_DOTA_NIAN_PIN_TO_STUN, 0.5, 0)
setIncomingDamageReductionSource(
nil,
parent,
ANIMATION_STUN_INCOMING_SOURCE,
function() return 50 end
)
end
function modifier_animation_stun.prototype.OnDestroy(self)
if not IsServer() then
return
end
local parent = self:GetParent()
removeIncomingDamageReductionSource(nil, parent, ANIMATION_STUN_INCOMING_SOURCE)
parent:RemoveGesture(ACT_DOTA_NIAN_PIN_TO_STUN)
end
function modifier_animation_stun.prototype.CheckState(self)
return {
[MODIFIER_STATE_COMMAND_RESTRICTED] = false,
[MODIFIER_STATE_DISARMED] = true,
[MODIFIER_STATE_IGNORING_MOVE_AND_ATTACK_ORDERS] = true,
[MODIFIER_STATE_IGNORING_MOVE_ORDERS] = true,
[MODIFIER_STATE_SILENCED] = true
}
end
modifier_animation_stun = __TS__Decorate(
modifier_animation_stun,
modifier_animation_stun,
{registerModifier(nil)},
{kind = "class", name = "modifier_animation_stun"}
)
____exports.modifier_animation_stun = modifier_animation_stun
return ____exports