24 lines
1.4 KiB
Lua
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
|