111 lines
4.4 KiB
Lua
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
|