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