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

161 lines
6.2 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 ____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 addPhysicalVampirism = ____vampirism.addPhysicalVampirism
local reducePhysicalVampirism = ____vampirism.reducePhysicalVampirism
____exports.item_vampire_claw = __TS__Class()
local item_vampire_claw = ____exports.item_vampire_claw
item_vampire_claw.name = "item_vampire_claw"
item_vampire_claw.____file_path = "scripts/vscripts/items/default_items/item_vampire_claw.lua"
__TS__ClassExtends(item_vampire_claw, BaseItem)
function item_vampire_claw.prototype.GetIntrinsicModifierName(self)
return "modifier_item_vampire_claw"
end
function item_vampire_claw.prototype.Precache(self, context)
PrecacheResource("particle", "particles/econ/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodbath_eztzhok.vpcf", context)
end
function item_vampire_claw.prototype.GetAbilityTextureName(self)
local charges = self:GetCurrentCharges()
if charges < 7 then
return "default_items/vampire_claw/vampire_claw_1"
elseif charges < 14 then
return "default_items/vampire_claw/vampire_claw_2"
elseif charges < 21 then
return "default_items/vampire_claw/vampire_claw_3"
else
return "default_items/vampire_claw/vampire_claw_4"
end
end
function item_vampire_claw.prototype.OnSpellStart(self)
local charges = self:GetCurrentCharges()
if charges <= 0 then
return
end
local caster = self:GetCaster()
local healing = charges * self:GetSpecialValueFor("heal_per_charge")
caster:Heal(healing, self)
self:SetCurrentCharges(0)
SendOverheadEventMessage(
nil,
OVERHEAD_ALERT_HEAL,
caster,
healing,
caster:GetPlayerOwner()
)
local particle = ParticleManager:CreateParticle("particles/econ/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodbath_eztzhok.vpcf", PATTACH_ABSORIGIN_FOLLOW, caster)
ParticleManager:SetParticleControlEnt(
particle,
1,
caster,
PATTACH_ABSORIGIN_FOLLOW,
"",
caster:GetAbsOrigin(),
true
)
EmitSoundOn("hero_bloodseeker.bloodRite.silence", caster)
end
item_vampire_claw = __TS__Decorate(
item_vampire_claw,
item_vampire_claw,
{registerAbility(nil)},
{kind = "class", name = "item_vampire_claw"}
)
____exports.item_vampire_claw = item_vampire_claw
____exports.modifier_item_vampire_claw = __TS__Class()
local modifier_item_vampire_claw = ____exports.modifier_item_vampire_claw
modifier_item_vampire_claw.name = "modifier_item_vampire_claw"
modifier_item_vampire_claw.____file_path = "scripts/vscripts/items/default_items/item_vampire_claw.lua"
__TS__ClassExtends(modifier_item_vampire_claw, BaseModifier)
function modifier_item_vampire_claw.prototype.____constructor(self, ...)
BaseModifier.prototype.____constructor(self, ...)
self.bonusStr = 0
self.bonusDamage = 0
self.chargesPerBossAttack = 0
self.chargesPerCreepAttack = 0
self.maxCharges = 0
end
function modifier_item_vampire_claw.prototype.IsHidden(self)
return true
end
function modifier_item_vampire_claw.prototype.IsPurgable(self)
return false
end
function modifier_item_vampire_claw.prototype.IsPurgeException(self)
return false
end
function modifier_item_vampire_claw.prototype.RemoveOnDeath(self)
return false
end
function modifier_item_vampire_claw.prototype.IsDebuff(self)
return false
end
function modifier_item_vampire_claw.prototype.GetAttributes(self)
return MODIFIER_ATTRIBUTE_MULTIPLE
end
function modifier_item_vampire_claw.prototype.DeclareFunctions(self)
return {MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE, MODIFIER_PROPERTY_STATS_STRENGTH_BONUS, MODIFIER_EVENT_ON_TAKEDAMAGE}
end
function modifier_item_vampire_claw.prototype.OnCreated(self, params)
self:OnRefresh()
local hero = self:GetParent()
local vampirism = self:GetAbility():GetSpecialValueFor("vampirism")
if vampirism > 0 then
addPhysicalVampirism(nil, hero, vampirism)
end
end
function modifier_item_vampire_claw.prototype.OnRefresh(self, params)
local ability = self:GetAbility()
if not ability or ability:IsNull() then
return
end
self.bonusStr = ability:GetSpecialValueFor("bonus_str")
self.bonusDamage = ability:GetSpecialValueFor("bonus_damage")
self.chargesPerBossAttack = ability:GetSpecialValueFor("charges_for_attack_boss")
self.chargesPerCreepAttack = ability:GetSpecialValueFor("charges_for_attack_creep")
self.maxCharges = ability:GetSpecialValueFor("max_charges")
end
function modifier_item_vampire_claw.prototype.OnDestroy(self)
if not IsServer() then
return
end
local hero = self:GetParent()
local vampirism = self:GetAbility():GetSpecialValueFor("vampirism")
if vampirism > 0 then
reducePhysicalVampirism(nil, hero, vampirism)
end
end
function modifier_item_vampire_claw.prototype.GetModifierBonusStats_Strength(self)
return self.bonusStr
end
function modifier_item_vampire_claw.prototype.GetModifierPreAttack_BonusDamage(self)
return self.bonusDamage
end
function modifier_item_vampire_claw.prototype.OnTakeDamage(self, event)
if event.attacker ~= self:GetParent() then
return
end
local ability = self:GetAbility()
if not ability then
return
end
local currentCharges = ability:GetCurrentCharges()
local bonusChargesPerAttack = self.chargesPerCreepAttack
ability:SetCurrentCharges(math.min(currentCharges + bonusChargesPerAttack, self.maxCharges))
end
modifier_item_vampire_claw = __TS__Decorate(
modifier_item_vampire_claw,
modifier_item_vampire_claw,
{registerModifier(nil)},
{kind = "class", name = "modifier_item_vampire_claw"}
)
____exports.modifier_item_vampire_claw = modifier_item_vampire_claw
return ____exports