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

111 lines
4.4 KiB
Lua

local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____dota_ts_adapter = require("lib.dota_ts_adapter")
local BaseAbility = ____dota_ts_adapter.BaseAbility
local ____hero_rage = require("abilities.system.hero_rage")
local heroRageGetCurrent = ____hero_rage.heroRageGetCurrent
--- Стоимость ярости: приоритет `rage_cost`, иначе берём обычный mana cost способности.
function ____exports.getAbilityRageCost(self, ability)
local customRageCost = math.max(
0,
math.floor(ability:GetSpecialValueFor("rage_cost"))
)
if customRageCost > 0 then
return customRageCost
end
return math.max(
0,
math.floor(ability:GetManaCost(ability:GetLevel()))
)
end
____exports.canCastRageNoTarget = function(____, ability)
if not IsServer() then
return UF_SUCCESS
end
local caster = ability:GetCaster()
local cost = ____exports.getAbilityRageCost(nil, ability)
if cost <= 0 then
return UF_SUCCESS
end
if ability:IsChanneling() then
return UF_SUCCESS
end
local ____temp_0
if heroRageGetCurrent(nil, caster) < cost then
____temp_0 = UF_FAIL_CUSTOM
else
____temp_0 = UF_SUCCESS
end
return ____temp_0
end
____exports.canCastRageErrorNoTarget = function(____, ability)
if not IsServer() then
return ""
end
local caster = ability:GetCaster()
local cost = ____exports.getAbilityRageCost(nil, ability)
if cost <= 0 then
return ""
end
if ability:IsChanneling() then
return ""
end
return heroRageGetCurrent(nil, caster) < cost and "#dota_hud_error_havent_charges" or ""
end
____exports.canCastRageTarget = function(____, ability, target)
local rage = ____exports.canCastRageNoTarget(nil, ability)
if rage ~= UF_SUCCESS then
return rage
end
if not IsServer() then
return UF_SUCCESS
end
local caster = ability:GetCaster()
return UnitFilter(
target,
ability:GetAbilityTargetTeam(),
ability:GetAbilityTargetType(),
ability:GetAbilityTargetFlags(),
caster:GetTeamNumber()
)
end
--- Базовый класс для способностей с расходом ярости (проверка без таргета / точки). Не регистрируется как отдельная ability — только наследование.
____exports.RageAbilityNoTarget = __TS__Class()
local RageAbilityNoTarget = ____exports.RageAbilityNoTarget
RageAbilityNoTarget.name = "RageAbilityNoTarget"
RageAbilityNoTarget.____file_path = "scripts/vscripts/abilities/system/rage_ability.lua"
__TS__ClassExtends(RageAbilityNoTarget, BaseAbility)
function RageAbilityNoTarget.prototype.CastFilterResult(self)
return ____exports.canCastRageNoTarget(nil, self)
end
function RageAbilityNoTarget.prototype.GetCustomCastError(self)
return ____exports.canCastRageErrorNoTarget(nil, self)
end
--- Базовый класс для способностей с расходом ярости по юниту-цели.
____exports.RageAbilityTarget = __TS__Class()
local RageAbilityTarget = ____exports.RageAbilityTarget
RageAbilityTarget.name = "RageAbilityTarget"
RageAbilityTarget.____file_path = "scripts/vscripts/abilities/system/rage_ability.lua"
__TS__ClassExtends(RageAbilityTarget, BaseAbility)
function RageAbilityTarget.prototype.CastFilterResultTarget(self, target)
return ____exports.canCastRageTarget(nil, self, target)
end
function RageAbilityTarget.prototype.GetCustomCastErrorTarget(self, _target)
return ____exports.canCastRageErrorNoTarget(nil, self)
end
--- Базовый класс для способностей с расходом ярости по точке.
____exports.RageAbilityPoint = __TS__Class()
local RageAbilityPoint = ____exports.RageAbilityPoint
RageAbilityPoint.name = "RageAbilityPoint"
RageAbilityPoint.____file_path = "scripts/vscripts/abilities/system/rage_ability.lua"
__TS__ClassExtends(RageAbilityPoint, BaseAbility)
function RageAbilityPoint.prototype.CastFilterResultLocation(self)
return ____exports.canCastRageNoTarget(nil, self)
end
function RageAbilityPoint.prototype.GetCustomCastErrorLocation(self)
return ____exports.canCastRageErrorNoTarget(nil, self)
end
return ____exports