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

24 lines
1.4 KiB
Lua

local ____lualib = require("lualib_bundle")
local __TS__NumberIsFinite = ____lualib.__TS__NumberIsFinite
local ____exports = {}
--- Верхний предел после убывания (как в `incoming_damage_reduction_combine`).
____exports.MAX_EFFECTIVE_INCOMING_REDUCTION_FROM_LINEAR_SUM_PCT = 92
____exports.INCOMING_DAMAGE_REDUCTION_STAT_KEY = "incoming_damage_reduction_pct"
--- «Бумажная» сумма % снижения входящего → эффективный % в бою (убывающая отдача).
--
-- @param linearSumPositivePct сумма вкладов из KV/арсенала (+20+20+…)
function ____exports.resolveIncomingDamageReductionPctFromLinearSum(self, linearSumPositivePct)
if not __TS__NumberIsFinite(linearSumPositivePct) or linearSumPositivePct <= 0 then
return 0
end
local s = linearSumPositivePct
local hyperbolic = 100 * s / (100 + s)
return math.min(____exports.MAX_EFFECTIVE_INCOMING_REDUCTION_FROM_LINEAR_SUM_PCT, hyperbolic)
end
--- Значение для MODIFIER_PROPERTY_INCOMING_DAMAGE_PERCENTAGE (отрицательное = меньше урона).
function ____exports.incomingDamageReductionModifierValue(self, linearSumPositivePct)
local effective = ____exports.resolveIncomingDamageReductionPctFromLinearSum(nil, linearSumPositivePct)
return effective > 0 and -effective or 0
end
return ____exports