161 lines
6.2 KiB
Lua
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
|