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

69 lines
2.3 KiB
Lua

--[[ Generated with https://github.com/TypeScriptToLua/TypeScriptToLua ]]
local ____exports = {}
local CRIT_MULT_KEY_PREFIX
require("lib.dota_ts_adapter")
function ____exports.getCritMult(self, hero)
if not hero or not IsValidEntity(hero) then
return 100
end
local playerId = hero:GetPlayerOwnerID()
if playerId == nil or playerId == nil or playerId < 0 then
return 100
end
local key = CRIT_MULT_KEY_PREFIX .. tostring(playerId)
local data = CustomNetTables:GetTableValue("custom_stats", key)
local ____data_0
if data then
____data_0 = data.value
else
____data_0 = 100
end
return ____data_0
end
CRIT_MULT_KEY_PREFIX = "crit_mult_"
function ____exports.setCritMult(self, hero, critMult)
if not IsServer() then
return
end
local playerId = hero:GetPlayerOwnerID()
if playerId == nil or playerId == nil or playerId < 0 then
return
end
local key = CRIT_MULT_KEY_PREFIX .. tostring(playerId)
CustomNetTables:SetTableValue("custom_stats", key, {value = critMult})
end
function ____exports.addCritMult(self, hero, delta)
if not IsServer() then
return
end
local current = ____exports.getCritMult(nil, hero)
____exports.setCritMult(nil, hero, current + delta)
end
function ____exports.reduceCritMult(self, hero, delta)
if not IsServer() then
return
end
____exports.addCritMult(
nil,
hero,
-math.abs(delta)
)
end
--- Итоговый множитель урона крита (физика и магия): sum(mult/100 из источников) × (крит_мульт героя / 100).
--
-- @param stackedCritMultSum сумма mult/100 по сработавшим источникам (например 1.75 + 1.6)
function ____exports.getFinalStackingCritMultiplier(self, unit, stackedCritMultSum)
if stackedCritMultSum <= 0 then
return 0
end
local critMultStat = unit:IsHero() and ____exports.getCritMult(nil, unit) or 100
return stackedCritMultSum * (critMultStat / 100)
end
local g = _G
g.setCritMult = ____exports.setCritMult
g.addCritMult = ____exports.addCritMult
g.reduceCritMult = ____exports.reduceCritMult
g.getCritMult = ____exports.getCritMult
g.getFinalStackingCritMultiplier = ____exports.getFinalStackingCritMultiplier
return ____exports