118 lines
4.9 KiB
Lua
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
|