149 lines
5.6 KiB
Lua
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
|