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