Files
2026-05-29 15:11:31 +07:00

149 lines
5.6 KiB
Lua

local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__Decorate = ____lualib.__TS__Decorate
local ____exports = {}
local ____ability_stacking_spell_crit = require("abilities.modifiers.ability_stacking_spell_crit")
local modifier_stacking_spell_crit = ____ability_stacking_spell_crit.modifier_stacking_spell_crit
local ____dota_ts_adapter = require("lib.dota_ts_adapter")
local BaseItem = ____dota_ts_adapter.BaseItem
local BaseModifier = ____dota_ts_adapter.BaseModifier
local registerAbility = ____dota_ts_adapter.registerAbility
local registerModifier = ____dota_ts_adapter.registerModifier
local ____vampirism = require("utils.vampirism")
local addMagicalVampirism = ____vampirism.addMagicalVampirism
local reduceMagicalVampirism = ____vampirism.reduceMagicalVampirism
____exports.item_magical_crit = __TS__Class()
local item_magical_crit = ____exports.item_magical_crit
item_magical_crit.name = "item_magical_crit"
item_magical_crit.____file_path = "scripts/vscripts/items/default_items/item_magical_crit.lua"
__TS__ClassExtends(item_magical_crit, BaseItem)
function item_magical_crit.prototype.GetIntrinsicModifierName(self)
return "modifier_item_magical_crit"
end
item_magical_crit = __TS__Decorate(
item_magical_crit,
item_magical_crit,
{registerAbility(nil)},
{kind = "class", name = "item_magical_crit"}
)
____exports.item_magical_crit = item_magical_crit
____exports.modifier_item_magical_crit = __TS__Class()
local modifier_item_magical_crit = ____exports.modifier_item_magical_crit
modifier_item_magical_crit.name = "modifier_item_magical_crit"
modifier_item_magical_crit.____file_path = "scripts/vscripts/items/default_items/item_magical_crit.lua"
__TS__ClassExtends(modifier_item_magical_crit, BaseModifier)
function modifier_item_magical_crit.prototype.____constructor(self, ...)
BaseModifier.prototype.____constructor(self, ...)
self.manaLock = false
end
function modifier_item_magical_crit.prototype.IsHidden(self)
return true
end
function modifier_item_magical_crit.prototype.IsDebuff(self)
return false
end
function modifier_item_magical_crit.prototype.IsPurgable(self)
return false
end
function modifier_item_magical_crit.prototype.GetAttributes(self)
return MODIFIER_ATTRIBUTE_MULTIPLE
end
function modifier_item_magical_crit.prototype.DeclareFunctions(self)
return {
MODIFIER_PROPERTY_SPELL_AMPLIFY_PERCENTAGE,
MODIFIER_PROPERTY_STATS_INTELLECT_BONUS,
MODIFIER_PROPERTY_STATS_STRENGTH_BONUS,
MODIFIER_PROPERTY_STATS_AGILITY_BONUS,
MODIFIER_PROPERTY_MANA_REGEN_CONSTANT,
MODIFIER_PROPERTY_MANA_BONUS,
MODIFIER_PROPERTY_FORCE_MAX_MANA
}
end
function modifier_item_magical_crit.prototype.getValue(self, name)
local ____opt_0 = self:GetAbility()
return ____opt_0 and ____opt_0:GetSpecialValueFor(name) or 0
end
function modifier_item_magical_crit.prototype.GetModifierSpellAmplify_Percentage(self)
return self:getValue("bonus_spell_amplify")
end
function modifier_item_magical_crit.prototype.GetModifierBonusStats_Intellect(self)
return self:getValue("bonus_intellect")
end
function modifier_item_magical_crit.prototype.GetModifierBonusStats_Strength(self)
return self:getValue("bonus_strength")
end
function modifier_item_magical_crit.prototype.GetModifierBonusStats_Agility(self)
return self:getValue("bonus_agility")
end
function modifier_item_magical_crit.prototype.GetModifierConstantManaRegen(self)
return self:getValue("bonus_mana_regen")
end
function modifier_item_magical_crit.prototype.GetModifierManaBonus(self)
if not IsServer() then
return 0
end
if self.manaLock then
return 0
end
local parent = self:GetParent()
if not parent:IsHero() then
return 0
end
self.manaLock = true
local maxMana = parent:GetMaxMana()
self.manaLock = false
return self:getValue("bonus_mana_pct") * maxMana / 100
end
function modifier_item_magical_crit.prototype.OnCreated(self)
if not IsServer() then
return
end
local parent = self:GetParent()
local ability = self:GetAbility()
if not ability then
return
end
local vamp = self:getValue("magical_vampirism")
if vamp > 0 and parent:IsRealHero() then
addMagicalVampirism(nil, parent, vamp)
end
local stackingSpellCrit = modifier_stacking_spell_crit:GetForUnit(parent)
if stackingSpellCrit then
stackingSpellCrit:AddCustomCrit(
self:getValue("spell_crit_chance"),
self:getValue("spell_crit_mult"),
"item_magical_crit",
ability
)
end
end
function modifier_item_magical_crit.prototype.OnDestroy(self)
if IsClient() then
return
end
local parent = self:GetParent()
if not parent or not IsValidEntity(parent) then
return
end
local ability = self:GetAbility()
if ability and parent:IsRealHero() then
local vamp = ability:GetSpecialValueFor("magical_vampirism")
if vamp > 0 then
reduceMagicalVampirism(nil, parent, vamp)
end
end
local stackingSpellCrit = modifier_stacking_spell_crit:GetForUnit(parent)
if stackingSpellCrit and ability then
stackingSpellCrit:RemoveCrit("item_magical_crit", ability)
end
end
modifier_item_magical_crit = __TS__Decorate(
modifier_item_magical_crit,
modifier_item_magical_crit,
{registerModifier(nil)},
{kind = "class", name = "modifier_item_magical_crit"}
)
____exports.modifier_item_magical_crit = modifier_item_magical_crit
return ____exports