initial commit
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
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
|
||||
--- Синий воск — бонус к восстановлению маны (стакается).
|
||||
____exports.item_blackshop_common_blue_tallow = __TS__Class()
|
||||
local item_blackshop_common_blue_tallow = ____exports.item_blackshop_common_blue_tallow
|
||||
item_blackshop_common_blue_tallow.name = "item_blackshop_common_blue_tallow"
|
||||
item_blackshop_common_blue_tallow.____file_path = "scripts/vscripts/items/blackshop/common/item_blackshop_common_blue_tallow.lua"
|
||||
__TS__ClassExtends(item_blackshop_common_blue_tallow, BaseItem)
|
||||
function item_blackshop_common_blue_tallow.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local add = self:GetSpecialValueFor("bonus_mana_regen")
|
||||
if caster:HasModifier("modifier_item_blue_tallow") then
|
||||
local m = caster:FindModifierByName("modifier_item_blue_tallow")
|
||||
m:SetStackCount(m:GetStackCount() + add)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, "modifier_item_blue_tallow", {}):SetStackCount(add)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_blackshop_common_blue_tallow = __TS__Decorate(
|
||||
item_blackshop_common_blue_tallow,
|
||||
item_blackshop_common_blue_tallow,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blackshop_common_blue_tallow"}
|
||||
)
|
||||
____exports.item_blackshop_common_blue_tallow = item_blackshop_common_blue_tallow
|
||||
____exports.modifier_item_blue_tallow = __TS__Class()
|
||||
local modifier_item_blue_tallow = ____exports.modifier_item_blue_tallow
|
||||
modifier_item_blue_tallow.name = "modifier_item_blue_tallow"
|
||||
modifier_item_blue_tallow.____file_path = "scripts/vscripts/items/blackshop/common/item_blackshop_common_blue_tallow.lua"
|
||||
__TS__ClassExtends(modifier_item_blue_tallow, BaseModifier)
|
||||
function modifier_item_blue_tallow.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_blue_tallow.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_blue_tallow.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_blue_tallow.prototype.GetTexture(self)
|
||||
return "../items/blackshop/blue_tallow"
|
||||
end
|
||||
function modifier_item_blue_tallow.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_MANA_REGEN_CONSTANT}
|
||||
end
|
||||
function modifier_item_blue_tallow.prototype.GetModifierConstantManaRegen(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_blue_tallow = __TS__Decorate(
|
||||
modifier_item_blue_tallow,
|
||||
modifier_item_blue_tallow,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_blue_tallow"}
|
||||
)
|
||||
____exports.modifier_item_blue_tallow = modifier_item_blue_tallow
|
||||
return ____exports
|
||||
@@ -0,0 +1,69 @@
|
||||
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
|
||||
____exports.item_blackshop_common_bonus_stats_agi = __TS__Class()
|
||||
local item_blackshop_common_bonus_stats_agi = ____exports.item_blackshop_common_bonus_stats_agi
|
||||
item_blackshop_common_bonus_stats_agi.name = "item_blackshop_common_bonus_stats_agi"
|
||||
item_blackshop_common_bonus_stats_agi.____file_path = "scripts/vscripts/items/blackshop/common/item_blackshop_common_bonus_stats_agi.lua"
|
||||
__TS__ClassExtends(item_blackshop_common_bonus_stats_agi, BaseItem)
|
||||
function item_blackshop_common_bonus_stats_agi.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local stats = self:GetSpecialValueFor("bonus_agility")
|
||||
if caster:HasModifier("modifier_item_bonus_stats_agi") then
|
||||
caster:FindModifierByName("modifier_item_bonus_stats_agi"):SetStackCount(caster:FindModifierByName("modifier_item_bonus_stats_agi"):GetStackCount() + stats)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, "modifier_item_bonus_stats_agi", {}):SetStackCount(stats)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_blackshop_common_bonus_stats_agi = __TS__Decorate(
|
||||
item_blackshop_common_bonus_stats_agi,
|
||||
item_blackshop_common_bonus_stats_agi,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blackshop_common_bonus_stats_agi"}
|
||||
)
|
||||
____exports.item_blackshop_common_bonus_stats_agi = item_blackshop_common_bonus_stats_agi
|
||||
____exports.modifier_item_bonus_stats_agi = __TS__Class()
|
||||
local modifier_item_bonus_stats_agi = ____exports.modifier_item_bonus_stats_agi
|
||||
modifier_item_bonus_stats_agi.name = "modifier_item_bonus_stats_agi"
|
||||
modifier_item_bonus_stats_agi.____file_path = "scripts/vscripts/items/blackshop/common/item_blackshop_common_bonus_stats_agi.lua"
|
||||
__TS__ClassExtends(modifier_item_bonus_stats_agi, BaseModifier)
|
||||
function modifier_item_bonus_stats_agi.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_bonus_stats_agi.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_bonus_stats_agi.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_bonus_stats_agi.prototype.GetTexture(self)
|
||||
return "../items/blackshop/book_agi"
|
||||
end
|
||||
function modifier_item_bonus_stats_agi.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_STATS_AGILITY_BONUS}
|
||||
end
|
||||
function modifier_item_bonus_stats_agi.prototype.GetModifierBonusStats_Agility(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_bonus_stats_agi = __TS__Decorate(
|
||||
modifier_item_bonus_stats_agi,
|
||||
modifier_item_bonus_stats_agi,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_bonus_stats_agi"}
|
||||
)
|
||||
____exports.modifier_item_bonus_stats_agi = modifier_item_bonus_stats_agi
|
||||
return ____exports
|
||||
@@ -0,0 +1,69 @@
|
||||
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
|
||||
____exports.item_blackshop_common_bonus_stats_int = __TS__Class()
|
||||
local item_blackshop_common_bonus_stats_int = ____exports.item_blackshop_common_bonus_stats_int
|
||||
item_blackshop_common_bonus_stats_int.name = "item_blackshop_common_bonus_stats_int"
|
||||
item_blackshop_common_bonus_stats_int.____file_path = "scripts/vscripts/items/blackshop/common/item_blackshop_common_bonus_stats_int.lua"
|
||||
__TS__ClassExtends(item_blackshop_common_bonus_stats_int, BaseItem)
|
||||
function item_blackshop_common_bonus_stats_int.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local stats = self:GetSpecialValueFor("bonus_intelligence")
|
||||
if caster:HasModifier("modifier_item_bonus_stats_int") then
|
||||
caster:FindModifierByName("modifier_item_bonus_stats_int"):SetStackCount(caster:FindModifierByName("modifier_item_bonus_stats_int"):GetStackCount() + stats)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, "modifier_item_bonus_stats_int", {}):SetStackCount(stats)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_blackshop_common_bonus_stats_int = __TS__Decorate(
|
||||
item_blackshop_common_bonus_stats_int,
|
||||
item_blackshop_common_bonus_stats_int,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blackshop_common_bonus_stats_int"}
|
||||
)
|
||||
____exports.item_blackshop_common_bonus_stats_int = item_blackshop_common_bonus_stats_int
|
||||
____exports.modifier_item_bonus_stats_int = __TS__Class()
|
||||
local modifier_item_bonus_stats_int = ____exports.modifier_item_bonus_stats_int
|
||||
modifier_item_bonus_stats_int.name = "modifier_item_bonus_stats_int"
|
||||
modifier_item_bonus_stats_int.____file_path = "scripts/vscripts/items/blackshop/common/item_blackshop_common_bonus_stats_int.lua"
|
||||
__TS__ClassExtends(modifier_item_bonus_stats_int, BaseModifier)
|
||||
function modifier_item_bonus_stats_int.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_bonus_stats_int.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_bonus_stats_int.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_bonus_stats_int.prototype.GetTexture(self)
|
||||
return "../items/blackshop/book_int"
|
||||
end
|
||||
function modifier_item_bonus_stats_int.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_STATS_INTELLECT_BONUS}
|
||||
end
|
||||
function modifier_item_bonus_stats_int.prototype.GetModifierBonusStats_Intellect(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_bonus_stats_int = __TS__Decorate(
|
||||
modifier_item_bonus_stats_int,
|
||||
modifier_item_bonus_stats_int,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_bonus_stats_int"}
|
||||
)
|
||||
____exports.modifier_item_bonus_stats_int = modifier_item_bonus_stats_int
|
||||
return ____exports
|
||||
@@ -0,0 +1,69 @@
|
||||
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
|
||||
____exports.item_blackshop_common_bonus_stats_str = __TS__Class()
|
||||
local item_blackshop_common_bonus_stats_str = ____exports.item_blackshop_common_bonus_stats_str
|
||||
item_blackshop_common_bonus_stats_str.name = "item_blackshop_common_bonus_stats_str"
|
||||
item_blackshop_common_bonus_stats_str.____file_path = "scripts/vscripts/items/blackshop/common/item_blackshop_common_bonus_stats_str.lua"
|
||||
__TS__ClassExtends(item_blackshop_common_bonus_stats_str, BaseItem)
|
||||
function item_blackshop_common_bonus_stats_str.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local stats = self:GetSpecialValueFor("bonus_strength")
|
||||
if caster:HasModifier("modifier_item_bonus_stats_str") then
|
||||
caster:FindModifierByName("modifier_item_bonus_stats_str"):SetStackCount(caster:FindModifierByName("modifier_item_bonus_stats_str"):GetStackCount() + stats)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, "modifier_item_bonus_stats_str", {}):SetStackCount(stats)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_blackshop_common_bonus_stats_str = __TS__Decorate(
|
||||
item_blackshop_common_bonus_stats_str,
|
||||
item_blackshop_common_bonus_stats_str,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blackshop_common_bonus_stats_str"}
|
||||
)
|
||||
____exports.item_blackshop_common_bonus_stats_str = item_blackshop_common_bonus_stats_str
|
||||
____exports.modifier_item_bonus_stats_str = __TS__Class()
|
||||
local modifier_item_bonus_stats_str = ____exports.modifier_item_bonus_stats_str
|
||||
modifier_item_bonus_stats_str.name = "modifier_item_bonus_stats_str"
|
||||
modifier_item_bonus_stats_str.____file_path = "scripts/vscripts/items/blackshop/common/item_blackshop_common_bonus_stats_str.lua"
|
||||
__TS__ClassExtends(modifier_item_bonus_stats_str, BaseModifier)
|
||||
function modifier_item_bonus_stats_str.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_bonus_stats_str.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_bonus_stats_str.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_bonus_stats_str.prototype.GetTexture(self)
|
||||
return "../items/blackshop/book_str"
|
||||
end
|
||||
function modifier_item_bonus_stats_str.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_STATS_STRENGTH_BONUS}
|
||||
end
|
||||
function modifier_item_bonus_stats_str.prototype.GetModifierBonusStats_Strength(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_bonus_stats_str = __TS__Decorate(
|
||||
modifier_item_bonus_stats_str,
|
||||
modifier_item_bonus_stats_str,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_bonus_stats_str"}
|
||||
)
|
||||
____exports.modifier_item_bonus_stats_str = modifier_item_bonus_stats_str
|
||||
return ____exports
|
||||
@@ -0,0 +1,75 @@
|
||||
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
|
||||
____exports.item_blackshop_common_boo_stuff = __TS__Class()
|
||||
local item_blackshop_common_boo_stuff = ____exports.item_blackshop_common_boo_stuff
|
||||
item_blackshop_common_boo_stuff.name = "item_blackshop_common_boo_stuff"
|
||||
item_blackshop_common_boo_stuff.____file_path = "scripts/vscripts/items/blackshop/common/item_blackshop_common_boo_stuff.lua"
|
||||
__TS__ClassExtends(item_blackshop_common_boo_stuff, BaseItem)
|
||||
function item_blackshop_common_boo_stuff.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local stats = self:GetSpecialValueFor("bonus_stats")
|
||||
if caster:HasModifier("modifier_item_boo_stuff") then
|
||||
caster:FindModifierByName("modifier_item_boo_stuff"):SetStackCount(caster:FindModifierByName("modifier_item_boo_stuff"):GetStackCount() + stats)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, "modifier_item_boo_stuff", {}):SetStackCount(stats)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_blackshop_common_boo_stuff = __TS__Decorate(
|
||||
item_blackshop_common_boo_stuff,
|
||||
item_blackshop_common_boo_stuff,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blackshop_common_boo_stuff"}
|
||||
)
|
||||
____exports.item_blackshop_common_boo_stuff = item_blackshop_common_boo_stuff
|
||||
____exports.modifier_item_boo_stuff = __TS__Class()
|
||||
local modifier_item_boo_stuff = ____exports.modifier_item_boo_stuff
|
||||
modifier_item_boo_stuff.name = "modifier_item_boo_stuff"
|
||||
modifier_item_boo_stuff.____file_path = "scripts/vscripts/items/blackshop/common/item_blackshop_common_boo_stuff.lua"
|
||||
__TS__ClassExtends(modifier_item_boo_stuff, BaseModifier)
|
||||
function modifier_item_boo_stuff.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_boo_stuff.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_boo_stuff.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_boo_stuff.prototype.GetTexture(self)
|
||||
return "../items/blackshop/boo_stuff"
|
||||
end
|
||||
function modifier_item_boo_stuff.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE, MODIFIER_PROPERTY_ATTACK_RANGE_BONUS}
|
||||
end
|
||||
function modifier_item_boo_stuff.prototype.GetModifierPreAttack_BonusDamage(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
function modifier_item_boo_stuff.prototype.GetModifierAttackRangeBonus(self)
|
||||
if not self:GetParent():IsRangedAttacker() then
|
||||
return 50
|
||||
end
|
||||
return 0
|
||||
end
|
||||
modifier_item_boo_stuff = __TS__Decorate(
|
||||
modifier_item_boo_stuff,
|
||||
modifier_item_boo_stuff,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_boo_stuff"}
|
||||
)
|
||||
____exports.modifier_item_boo_stuff = modifier_item_boo_stuff
|
||||
return ____exports
|
||||
@@ -0,0 +1,72 @@
|
||||
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
|
||||
____exports.item_blackshop_common_injector = __TS__Class()
|
||||
local item_blackshop_common_injector = ____exports.item_blackshop_common_injector
|
||||
item_blackshop_common_injector.name = "item_blackshop_common_injector"
|
||||
item_blackshop_common_injector.____file_path = "scripts/vscripts/items/blackshop/common/item_blackshop_common_injector.lua"
|
||||
__TS__ClassExtends(item_blackshop_common_injector, BaseItem)
|
||||
function item_blackshop_common_injector.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local stats = self:GetSpecialValueFor("attack_speed")
|
||||
if caster:HasModifier("modifier_item_injector") then
|
||||
caster:FindModifierByName("modifier_item_injector"):SetStackCount(caster:FindModifierByName("modifier_item_injector"):GetStackCount() + stats)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, "modifier_item_injector", {}):SetStackCount(stats)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_blackshop_common_injector = __TS__Decorate(
|
||||
item_blackshop_common_injector,
|
||||
item_blackshop_common_injector,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blackshop_common_injector"}
|
||||
)
|
||||
____exports.item_blackshop_common_injector = item_blackshop_common_injector
|
||||
____exports.modifier_item_injector = __TS__Class()
|
||||
local modifier_item_injector = ____exports.modifier_item_injector
|
||||
modifier_item_injector.name = "modifier_item_injector"
|
||||
modifier_item_injector.____file_path = "scripts/vscripts/items/blackshop/common/item_blackshop_common_injector.lua"
|
||||
__TS__ClassExtends(modifier_item_injector, BaseModifier)
|
||||
function modifier_item_injector.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_injector.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_injector.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_injector.prototype.GetTexture(self)
|
||||
return "../items/blackshop/soldier"
|
||||
end
|
||||
function modifier_item_injector.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT, MODIFIER_PROPERTY_MOVESPEED_BONUS_CONSTANT}
|
||||
end
|
||||
function modifier_item_injector.prototype.GetModifierAttackSpeedBonus_Constant(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
function modifier_item_injector.prototype.GetModifierMoveSpeedBonus_Constant(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_injector = __TS__Decorate(
|
||||
modifier_item_injector,
|
||||
modifier_item_injector,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_injector"}
|
||||
)
|
||||
____exports.modifier_item_injector = modifier_item_injector
|
||||
return ____exports
|
||||
@@ -0,0 +1,72 @@
|
||||
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
|
||||
____exports.item_blackshop_common_king_crown = __TS__Class()
|
||||
local item_blackshop_common_king_crown = ____exports.item_blackshop_common_king_crown
|
||||
item_blackshop_common_king_crown.name = "item_blackshop_common_king_crown"
|
||||
item_blackshop_common_king_crown.____file_path = "scripts/vscripts/items/blackshop/common/item_blackshop_common_king_crown.lua"
|
||||
__TS__ClassExtends(item_blackshop_common_king_crown, BaseItem)
|
||||
function item_blackshop_common_king_crown.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local stats = self:GetSpecialValueFor("bonus_armor")
|
||||
if caster:HasModifier("modifier_item_king_crown") then
|
||||
caster:FindModifierByName("modifier_item_king_crown"):SetStackCount(caster:FindModifierByName("modifier_item_king_crown"):GetStackCount() + stats)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, "modifier_item_king_crown", {}):SetStackCount(stats)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_blackshop_common_king_crown = __TS__Decorate(
|
||||
item_blackshop_common_king_crown,
|
||||
item_blackshop_common_king_crown,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blackshop_common_king_crown"}
|
||||
)
|
||||
____exports.item_blackshop_common_king_crown = item_blackshop_common_king_crown
|
||||
____exports.modifier_item_king_crown = __TS__Class()
|
||||
local modifier_item_king_crown = ____exports.modifier_item_king_crown
|
||||
modifier_item_king_crown.name = "modifier_item_king_crown"
|
||||
modifier_item_king_crown.____file_path = "scripts/vscripts/items/blackshop/common/item_blackshop_common_king_crown.lua"
|
||||
__TS__ClassExtends(modifier_item_king_crown, BaseModifier)
|
||||
function modifier_item_king_crown.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_king_crown.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_king_crown.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_king_crown.prototype.GetTexture(self)
|
||||
return "../items/blackshop/crown"
|
||||
end
|
||||
function modifier_item_king_crown.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_HEALTH_BONUS, MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS}
|
||||
end
|
||||
function modifier_item_king_crown.prototype.GetModifierHealthBonus(self)
|
||||
return math.floor(self:GetStackCount() * 10)
|
||||
end
|
||||
function modifier_item_king_crown.prototype.GetModifierPhysicalArmorBonus(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_king_crown = __TS__Decorate(
|
||||
modifier_item_king_crown,
|
||||
modifier_item_king_crown,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_king_crown"}
|
||||
)
|
||||
____exports.modifier_item_king_crown = modifier_item_king_crown
|
||||
return ____exports
|
||||
@@ -0,0 +1,72 @@
|
||||
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
|
||||
____exports.item_blackshop_common_manaflare = __TS__Class()
|
||||
local item_blackshop_common_manaflare = ____exports.item_blackshop_common_manaflare
|
||||
item_blackshop_common_manaflare.name = "item_blackshop_common_manaflare"
|
||||
item_blackshop_common_manaflare.____file_path = "scripts/vscripts/items/blackshop/common/item_blackshop_common_manaflare.lua"
|
||||
__TS__ClassExtends(item_blackshop_common_manaflare, BaseItem)
|
||||
function item_blackshop_common_manaflare.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local stats = self:GetSpecialValueFor("bonus_mana")
|
||||
if caster:HasModifier("modifier_item_manaflare") then
|
||||
caster:FindModifierByName("modifier_item_manaflare"):SetStackCount(caster:FindModifierByName("modifier_item_manaflare"):GetStackCount() + stats)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, "modifier_item_manaflare", {}):SetStackCount(stats)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_blackshop_common_manaflare = __TS__Decorate(
|
||||
item_blackshop_common_manaflare,
|
||||
item_blackshop_common_manaflare,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blackshop_common_manaflare"}
|
||||
)
|
||||
____exports.item_blackshop_common_manaflare = item_blackshop_common_manaflare
|
||||
____exports.modifier_item_manaflare = __TS__Class()
|
||||
local modifier_item_manaflare = ____exports.modifier_item_manaflare
|
||||
modifier_item_manaflare.name = "modifier_item_manaflare"
|
||||
modifier_item_manaflare.____file_path = "scripts/vscripts/items/blackshop/common/item_blackshop_common_manaflare.lua"
|
||||
__TS__ClassExtends(modifier_item_manaflare, BaseModifier)
|
||||
function modifier_item_manaflare.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_manaflare.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_manaflare.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_manaflare.prototype.GetTexture(self)
|
||||
return "../items/blackshop/manaflare"
|
||||
end
|
||||
function modifier_item_manaflare.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_MANA_BONUS, MODIFIER_PROPERTY_MANA_REGEN_CONSTANT}
|
||||
end
|
||||
function modifier_item_manaflare.prototype.GetModifierManaBonus(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
function modifier_item_manaflare.prototype.GetModifierConstantManaRegen(self)
|
||||
return self:GetStackCount() / 100
|
||||
end
|
||||
modifier_item_manaflare = __TS__Decorate(
|
||||
modifier_item_manaflare,
|
||||
modifier_item_manaflare,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_manaflare"}
|
||||
)
|
||||
____exports.modifier_item_manaflare = modifier_item_manaflare
|
||||
return ____exports
|
||||
@@ -0,0 +1,72 @@
|
||||
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
|
||||
____exports.item_blackshop_common_spell_mask = __TS__Class()
|
||||
local item_blackshop_common_spell_mask = ____exports.item_blackshop_common_spell_mask
|
||||
item_blackshop_common_spell_mask.name = "item_blackshop_common_spell_mask"
|
||||
item_blackshop_common_spell_mask.____file_path = "scripts/vscripts/items/blackshop/common/item_blackshop_common_spell_mask.lua"
|
||||
__TS__ClassExtends(item_blackshop_common_spell_mask, BaseItem)
|
||||
function item_blackshop_common_spell_mask.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local stats = self:GetSpecialValueFor("bonus_spell_amp")
|
||||
if caster:HasModifier("modifier_item_spell_mask") then
|
||||
caster:FindModifierByName("modifier_item_spell_mask"):SetStackCount(caster:FindModifierByName("modifier_item_spell_mask"):GetStackCount() + stats)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, "modifier_item_spell_mask", {}):SetStackCount(stats)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_blackshop_common_spell_mask = __TS__Decorate(
|
||||
item_blackshop_common_spell_mask,
|
||||
item_blackshop_common_spell_mask,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blackshop_common_spell_mask"}
|
||||
)
|
||||
____exports.item_blackshop_common_spell_mask = item_blackshop_common_spell_mask
|
||||
____exports.modifier_item_spell_mask = __TS__Class()
|
||||
local modifier_item_spell_mask = ____exports.modifier_item_spell_mask
|
||||
modifier_item_spell_mask.name = "modifier_item_spell_mask"
|
||||
modifier_item_spell_mask.____file_path = "scripts/vscripts/items/blackshop/common/item_blackshop_common_spell_mask.lua"
|
||||
__TS__ClassExtends(modifier_item_spell_mask, BaseModifier)
|
||||
function modifier_item_spell_mask.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_spell_mask.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_spell_mask.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_spell_mask.prototype.GetTexture(self)
|
||||
return "../items/blackshop/spell_mask"
|
||||
end
|
||||
function modifier_item_spell_mask.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_SPELL_AMPLIFY_PERCENTAGE, MODIFIER_PROPERTY_MANA_REGEN_CONSTANT}
|
||||
end
|
||||
function modifier_item_spell_mask.prototype.GetModifierSpellAmplify_Percentage(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
function modifier_item_spell_mask.prototype.GetModifierConstantManaRegen(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_spell_mask = __TS__Decorate(
|
||||
modifier_item_spell_mask,
|
||||
modifier_item_spell_mask,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_spell_mask"}
|
||||
)
|
||||
____exports.modifier_item_spell_mask = modifier_item_spell_mask
|
||||
return ____exports
|
||||
@@ -0,0 +1,69 @@
|
||||
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
|
||||
____exports.item_blackshop_common_stone_armor = __TS__Class()
|
||||
local item_blackshop_common_stone_armor = ____exports.item_blackshop_common_stone_armor
|
||||
item_blackshop_common_stone_armor.name = "item_blackshop_common_stone_armor"
|
||||
item_blackshop_common_stone_armor.____file_path = "scripts/vscripts/items/blackshop/common/item_blackshop_common_stone_armor.lua"
|
||||
__TS__ClassExtends(item_blackshop_common_stone_armor, BaseItem)
|
||||
function item_blackshop_common_stone_armor.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local stats = self:GetSpecialValueFor("bonus_armor")
|
||||
if caster:HasModifier("modifier_item_stone_armor") then
|
||||
caster:FindModifierByName("modifier_item_stone_armor"):SetStackCount(caster:FindModifierByName("modifier_item_stone_armor"):GetStackCount() + stats)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, "modifier_item_stone_armor", {}):SetStackCount(stats)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_blackshop_common_stone_armor = __TS__Decorate(
|
||||
item_blackshop_common_stone_armor,
|
||||
item_blackshop_common_stone_armor,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blackshop_common_stone_armor"}
|
||||
)
|
||||
____exports.item_blackshop_common_stone_armor = item_blackshop_common_stone_armor
|
||||
____exports.modifier_item_stone_armor = __TS__Class()
|
||||
local modifier_item_stone_armor = ____exports.modifier_item_stone_armor
|
||||
modifier_item_stone_armor.name = "modifier_item_stone_armor"
|
||||
modifier_item_stone_armor.____file_path = "scripts/vscripts/items/blackshop/common/item_blackshop_common_stone_armor.lua"
|
||||
__TS__ClassExtends(modifier_item_stone_armor, BaseModifier)
|
||||
function modifier_item_stone_armor.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_stone_armor.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_stone_armor.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_stone_armor.prototype.GetTexture(self)
|
||||
return "../items/blackshop/stone_armor"
|
||||
end
|
||||
function modifier_item_stone_armor.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS}
|
||||
end
|
||||
function modifier_item_stone_armor.prototype.GetModifierPhysicalArmorBonus(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_stone_armor = __TS__Decorate(
|
||||
modifier_item_stone_armor,
|
||||
modifier_item_stone_armor,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_stone_armor"}
|
||||
)
|
||||
____exports.modifier_item_stone_armor = modifier_item_stone_armor
|
||||
return ____exports
|
||||
@@ -0,0 +1,71 @@
|
||||
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
|
||||
--- Настойка силы — постоянный бонус к регену HP (стакается).
|
||||
____exports.item_blackshop_common_vigor_tincture = __TS__Class()
|
||||
local item_blackshop_common_vigor_tincture = ____exports.item_blackshop_common_vigor_tincture
|
||||
item_blackshop_common_vigor_tincture.name = "item_blackshop_common_vigor_tincture"
|
||||
item_blackshop_common_vigor_tincture.____file_path = "scripts/vscripts/items/blackshop/common/item_blackshop_common_vigor_tincture.lua"
|
||||
__TS__ClassExtends(item_blackshop_common_vigor_tincture, BaseItem)
|
||||
function item_blackshop_common_vigor_tincture.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local add = self:GetSpecialValueFor("bonus_hp_regen")
|
||||
if caster:HasModifier("modifier_item_vigor_tincture") then
|
||||
local m = caster:FindModifierByName("modifier_item_vigor_tincture")
|
||||
m:SetStackCount(m:GetStackCount() + add)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, "modifier_item_vigor_tincture", {}):SetStackCount(add)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_blackshop_common_vigor_tincture = __TS__Decorate(
|
||||
item_blackshop_common_vigor_tincture,
|
||||
item_blackshop_common_vigor_tincture,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blackshop_common_vigor_tincture"}
|
||||
)
|
||||
____exports.item_blackshop_common_vigor_tincture = item_blackshop_common_vigor_tincture
|
||||
____exports.modifier_item_vigor_tincture = __TS__Class()
|
||||
local modifier_item_vigor_tincture = ____exports.modifier_item_vigor_tincture
|
||||
modifier_item_vigor_tincture.name = "modifier_item_vigor_tincture"
|
||||
modifier_item_vigor_tincture.____file_path = "scripts/vscripts/items/blackshop/common/item_blackshop_common_vigor_tincture.lua"
|
||||
__TS__ClassExtends(modifier_item_vigor_tincture, BaseModifier)
|
||||
function modifier_item_vigor_tincture.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_vigor_tincture.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_vigor_tincture.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_vigor_tincture.prototype.GetTexture(self)
|
||||
return "../items/blackshop/vigor_salve"
|
||||
end
|
||||
function modifier_item_vigor_tincture.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_HEALTH_REGEN_CONSTANT}
|
||||
end
|
||||
function modifier_item_vigor_tincture.prototype.GetModifierConstantHealthRegen(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_vigor_tincture = __TS__Decorate(
|
||||
modifier_item_vigor_tincture,
|
||||
modifier_item_vigor_tincture,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_vigor_tincture"}
|
||||
)
|
||||
____exports.modifier_item_vigor_tincture = modifier_item_vigor_tincture
|
||||
return ____exports
|
||||
@@ -0,0 +1,71 @@
|
||||
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
|
||||
--- Пыль ветра — бонус к скорости передвижения (стакается).
|
||||
____exports.item_blackshop_common_wind_dust = __TS__Class()
|
||||
local item_blackshop_common_wind_dust = ____exports.item_blackshop_common_wind_dust
|
||||
item_blackshop_common_wind_dust.name = "item_blackshop_common_wind_dust"
|
||||
item_blackshop_common_wind_dust.____file_path = "scripts/vscripts/items/blackshop/common/item_blackshop_common_wind_dust.lua"
|
||||
__TS__ClassExtends(item_blackshop_common_wind_dust, BaseItem)
|
||||
function item_blackshop_common_wind_dust.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local add = self:GetSpecialValueFor("bonus_movement_speed")
|
||||
if caster:HasModifier("modifier_item_wind_dust") then
|
||||
local m = caster:FindModifierByName("modifier_item_wind_dust")
|
||||
m:SetStackCount(m:GetStackCount() + add)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, "modifier_item_wind_dust", {}):SetStackCount(add)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_blackshop_common_wind_dust = __TS__Decorate(
|
||||
item_blackshop_common_wind_dust,
|
||||
item_blackshop_common_wind_dust,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blackshop_common_wind_dust"}
|
||||
)
|
||||
____exports.item_blackshop_common_wind_dust = item_blackshop_common_wind_dust
|
||||
____exports.modifier_item_wind_dust = __TS__Class()
|
||||
local modifier_item_wind_dust = ____exports.modifier_item_wind_dust
|
||||
modifier_item_wind_dust.name = "modifier_item_wind_dust"
|
||||
modifier_item_wind_dust.____file_path = "scripts/vscripts/items/blackshop/common/item_blackshop_common_wind_dust.lua"
|
||||
__TS__ClassExtends(modifier_item_wind_dust, BaseModifier)
|
||||
function modifier_item_wind_dust.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_wind_dust.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_wind_dust.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_wind_dust.prototype.GetTexture(self)
|
||||
return "../items/blackshop/granite_boots"
|
||||
end
|
||||
function modifier_item_wind_dust.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_MOVESPEED_BONUS_CONSTANT}
|
||||
end
|
||||
function modifier_item_wind_dust.prototype.GetModifierMoveSpeedBonus_Constant(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_wind_dust = __TS__Decorate(
|
||||
modifier_item_wind_dust,
|
||||
modifier_item_wind_dust,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_wind_dust"}
|
||||
)
|
||||
____exports.modifier_item_wind_dust = modifier_item_wind_dust
|
||||
return ____exports
|
||||
@@ -0,0 +1,66 @@
|
||||
local ____lualib = require("lualib_bundle")
|
||||
local __TS__Class = ____lualib.__TS__Class
|
||||
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
||||
local __TS__Decorate = ____lualib.__TS__Decorate
|
||||
local __TS__SourceMapTraceBack = ____lualib.__TS__SourceMapTraceBack
|
||||
__TS__SourceMapTraceBack(debug.getinfo(1).short_src, {["8"] = 1,["9"] = 1,["10"] = 1,["11"] = 1,["12"] = 1,["13"] = 3,["14"] = 4,["15"] = 3,["16"] = 4,["17"] = 5,["18"] = 6,["21"] = 8,["22"] = 9,["25"] = 11,["26"] = 13,["27"] = 14,["29"] = 18,["31"] = 20,["32"] = 5,["33"] = 4,["34"] = 4,["35"] = 4,["36"] = 3,["39"] = 4,["40"] = 24,["41"] = 25,["42"] = 24,["43"] = 25,["44"] = 26,["45"] = 27,["46"] = 26,["47"] = 30,["48"] = 31,["49"] = 30,["50"] = 34,["51"] = 35,["52"] = 34,["53"] = 38,["54"] = 39,["55"] = 38,["56"] = 42,["57"] = 43,["58"] = 42,["59"] = 25,["60"] = 25,["61"] = 25,["62"] = 24,["65"] = 25});
|
||||
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
|
||||
____exports.item_bonus_stats_agi = __TS__Class()
|
||||
local item_bonus_stats_agi = ____exports.item_bonus_stats_agi
|
||||
item_bonus_stats_agi.name = "item_bonus_stats_agi"
|
||||
__TS__ClassExtends(item_bonus_stats_agi, BaseItem)
|
||||
function item_bonus_stats_agi.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local stats = self:GetSpecialValueFor("bonus_agility")
|
||||
if caster:HasModifier("modifier_item_bonus_stats_agi") then
|
||||
caster:FindModifierByName("modifier_item_bonus_stats_agi"):SetStackCount(caster:FindModifierByName("modifier_item_bonus_stats_agi"):GetStackCount() + stats)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, "modifier_item_bonus_stats_agi", {}):SetStackCount(stats)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_bonus_stats_agi = __TS__Decorate(
|
||||
item_bonus_stats_agi,
|
||||
item_bonus_stats_agi,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_bonus_stats_agi"}
|
||||
)
|
||||
____exports.item_bonus_stats_agi = item_bonus_stats_agi
|
||||
____exports.modifier_item_bonus_stats_agi = __TS__Class()
|
||||
local modifier_item_bonus_stats_agi = ____exports.modifier_item_bonus_stats_agi
|
||||
modifier_item_bonus_stats_agi.name = "modifier_item_bonus_stats_agi"
|
||||
__TS__ClassExtends(modifier_item_bonus_stats_agi, BaseModifier)
|
||||
function modifier_item_bonus_stats_agi.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_bonus_stats_agi.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_bonus_stats_agi.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_bonus_stats_agi.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_STATS_AGILITY_BONUS}
|
||||
end
|
||||
function modifier_item_bonus_stats_agi.prototype.GetModifierBonusStats_Agility(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_bonus_stats_agi = __TS__Decorate(
|
||||
modifier_item_bonus_stats_agi,
|
||||
modifier_item_bonus_stats_agi,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_bonus_stats_agi"}
|
||||
)
|
||||
____exports.modifier_item_bonus_stats_agi = modifier_item_bonus_stats_agi
|
||||
return ____exports
|
||||
@@ -0,0 +1,66 @@
|
||||
local ____lualib = require("lualib_bundle")
|
||||
local __TS__Class = ____lualib.__TS__Class
|
||||
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
||||
local __TS__Decorate = ____lualib.__TS__Decorate
|
||||
local __TS__SourceMapTraceBack = ____lualib.__TS__SourceMapTraceBack
|
||||
__TS__SourceMapTraceBack(debug.getinfo(1).short_src, {["8"] = 1,["9"] = 1,["10"] = 1,["11"] = 1,["12"] = 1,["13"] = 3,["14"] = 4,["15"] = 3,["16"] = 4,["17"] = 5,["18"] = 6,["21"] = 8,["22"] = 9,["25"] = 11,["26"] = 13,["27"] = 14,["29"] = 18,["31"] = 20,["32"] = 5,["33"] = 4,["34"] = 4,["35"] = 4,["36"] = 3,["39"] = 4,["40"] = 24,["41"] = 25,["42"] = 24,["43"] = 25,["44"] = 26,["45"] = 27,["46"] = 26,["47"] = 30,["48"] = 31,["49"] = 30,["50"] = 34,["51"] = 35,["52"] = 34,["53"] = 38,["54"] = 39,["55"] = 38,["56"] = 42,["57"] = 43,["58"] = 42,["59"] = 25,["60"] = 25,["61"] = 25,["62"] = 24,["65"] = 25});
|
||||
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
|
||||
____exports.item_bonus_stats_int = __TS__Class()
|
||||
local item_bonus_stats_int = ____exports.item_bonus_stats_int
|
||||
item_bonus_stats_int.name = "item_bonus_stats_int"
|
||||
__TS__ClassExtends(item_bonus_stats_int, BaseItem)
|
||||
function item_bonus_stats_int.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local stats = self:GetSpecialValueFor("bonus_intelligence")
|
||||
if caster:HasModifier("modifier_item_bonus_stats_int") then
|
||||
caster:FindModifierByName("modifier_item_bonus_stats_int"):SetStackCount(caster:FindModifierByName("modifier_item_bonus_stats_int"):GetStackCount() + stats)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, "modifier_item_bonus_stats_int", {}):SetStackCount(stats)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_bonus_stats_int = __TS__Decorate(
|
||||
item_bonus_stats_int,
|
||||
item_bonus_stats_int,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_bonus_stats_int"}
|
||||
)
|
||||
____exports.item_bonus_stats_int = item_bonus_stats_int
|
||||
____exports.modifier_item_bonus_stats_int = __TS__Class()
|
||||
local modifier_item_bonus_stats_int = ____exports.modifier_item_bonus_stats_int
|
||||
modifier_item_bonus_stats_int.name = "modifier_item_bonus_stats_int"
|
||||
__TS__ClassExtends(modifier_item_bonus_stats_int, BaseModifier)
|
||||
function modifier_item_bonus_stats_int.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_bonus_stats_int.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_bonus_stats_int.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_bonus_stats_int.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_STATS_INTELLECT_BONUS}
|
||||
end
|
||||
function modifier_item_bonus_stats_int.prototype.GetModifierBonusStats_Intellect(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_bonus_stats_int = __TS__Decorate(
|
||||
modifier_item_bonus_stats_int,
|
||||
modifier_item_bonus_stats_int,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_bonus_stats_int"}
|
||||
)
|
||||
____exports.modifier_item_bonus_stats_int = modifier_item_bonus_stats_int
|
||||
return ____exports
|
||||
@@ -0,0 +1,66 @@
|
||||
local ____lualib = require("lualib_bundle")
|
||||
local __TS__Class = ____lualib.__TS__Class
|
||||
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
||||
local __TS__Decorate = ____lualib.__TS__Decorate
|
||||
local __TS__SourceMapTraceBack = ____lualib.__TS__SourceMapTraceBack
|
||||
__TS__SourceMapTraceBack(debug.getinfo(1).short_src, {["8"] = 1,["9"] = 1,["10"] = 1,["11"] = 1,["12"] = 1,["13"] = 3,["14"] = 4,["15"] = 3,["16"] = 4,["17"] = 5,["18"] = 6,["21"] = 8,["22"] = 9,["25"] = 11,["26"] = 13,["27"] = 14,["29"] = 18,["31"] = 20,["32"] = 5,["33"] = 4,["34"] = 4,["35"] = 4,["36"] = 3,["39"] = 4,["40"] = 24,["41"] = 25,["42"] = 24,["43"] = 25,["44"] = 26,["45"] = 27,["46"] = 26,["47"] = 30,["48"] = 31,["49"] = 30,["50"] = 34,["51"] = 35,["52"] = 34,["53"] = 38,["54"] = 39,["55"] = 38,["56"] = 42,["57"] = 43,["58"] = 42,["59"] = 25,["60"] = 25,["61"] = 25,["62"] = 24,["65"] = 25});
|
||||
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
|
||||
____exports.item_bonus_stats_str = __TS__Class()
|
||||
local item_bonus_stats_str = ____exports.item_bonus_stats_str
|
||||
item_bonus_stats_str.name = "item_bonus_stats_str"
|
||||
__TS__ClassExtends(item_bonus_stats_str, BaseItem)
|
||||
function item_bonus_stats_str.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local stats = self:GetSpecialValueFor("bonus_strength")
|
||||
if caster:HasModifier("modifier_item_bonus_stats_str") then
|
||||
caster:FindModifierByName("modifier_item_bonus_stats_str"):SetStackCount(caster:FindModifierByName("modifier_item_bonus_stats_str"):GetStackCount() + stats)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, "modifier_item_bonus_stats_str", {}):SetStackCount(stats)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_bonus_stats_str = __TS__Decorate(
|
||||
item_bonus_stats_str,
|
||||
item_bonus_stats_str,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_bonus_stats_str"}
|
||||
)
|
||||
____exports.item_bonus_stats_str = item_bonus_stats_str
|
||||
____exports.modifier_item_bonus_stats_str = __TS__Class()
|
||||
local modifier_item_bonus_stats_str = ____exports.modifier_item_bonus_stats_str
|
||||
modifier_item_bonus_stats_str.name = "modifier_item_bonus_stats_str"
|
||||
__TS__ClassExtends(modifier_item_bonus_stats_str, BaseModifier)
|
||||
function modifier_item_bonus_stats_str.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_bonus_stats_str.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_bonus_stats_str.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_bonus_stats_str.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_STATS_STRENGTH_BONUS}
|
||||
end
|
||||
function modifier_item_bonus_stats_str.prototype.GetModifierBonusStats_Strength(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_bonus_stats_str = __TS__Decorate(
|
||||
modifier_item_bonus_stats_str,
|
||||
modifier_item_bonus_stats_str,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_bonus_stats_str"}
|
||||
)
|
||||
____exports.modifier_item_bonus_stats_str = modifier_item_bonus_stats_str
|
||||
return ____exports
|
||||
@@ -0,0 +1,72 @@
|
||||
local ____lualib = require("lualib_bundle")
|
||||
local __TS__Class = ____lualib.__TS__Class
|
||||
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
||||
local __TS__Decorate = ____lualib.__TS__Decorate
|
||||
local __TS__SourceMapTraceBack = ____lualib.__TS__SourceMapTraceBack
|
||||
__TS__SourceMapTraceBack(debug.getinfo(1).short_src, {["8"] = 1,["9"] = 1,["10"] = 1,["11"] = 1,["12"] = 1,["13"] = 3,["14"] = 4,["15"] = 3,["16"] = 4,["17"] = 5,["18"] = 6,["21"] = 8,["22"] = 9,["25"] = 11,["26"] = 13,["27"] = 14,["29"] = 16,["31"] = 18,["32"] = 5,["33"] = 4,["34"] = 4,["35"] = 4,["36"] = 3,["39"] = 4,["40"] = 22,["41"] = 23,["42"] = 22,["43"] = 23,["44"] = 24,["45"] = 25,["46"] = 24,["47"] = 28,["48"] = 29,["49"] = 28,["50"] = 32,["51"] = 33,["52"] = 32,["53"] = 36,["54"] = 37,["55"] = 36,["56"] = 40,["57"] = 41,["58"] = 40,["59"] = 43,["60"] = 44,["61"] = 45,["63"] = 47,["64"] = 43,["65"] = 23,["66"] = 23,["67"] = 23,["68"] = 22,["71"] = 23});
|
||||
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
|
||||
____exports.item_boo_stuff = __TS__Class()
|
||||
local item_boo_stuff = ____exports.item_boo_stuff
|
||||
item_boo_stuff.name = "item_boo_stuff"
|
||||
__TS__ClassExtends(item_boo_stuff, BaseItem)
|
||||
function item_boo_stuff.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local stats = self:GetSpecialValueFor("bonus_stats")
|
||||
if caster:HasModifier("modifier_item_boo_stuff") then
|
||||
caster:FindModifierByName("modifier_item_boo_stuff"):SetStackCount(caster:FindModifierByName("modifier_item_boo_stuff"):GetStackCount() + stats)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, "modifier_item_boo_stuff", {}):SetStackCount(stats)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_boo_stuff = __TS__Decorate(
|
||||
item_boo_stuff,
|
||||
item_boo_stuff,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_boo_stuff"}
|
||||
)
|
||||
____exports.item_boo_stuff = item_boo_stuff
|
||||
____exports.modifier_item_boo_stuff = __TS__Class()
|
||||
local modifier_item_boo_stuff = ____exports.modifier_item_boo_stuff
|
||||
modifier_item_boo_stuff.name = "modifier_item_boo_stuff"
|
||||
__TS__ClassExtends(modifier_item_boo_stuff, BaseModifier)
|
||||
function modifier_item_boo_stuff.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_boo_stuff.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_boo_stuff.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_boo_stuff.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE, MODIFIER_PROPERTY_ATTACK_RANGE_BONUS}
|
||||
end
|
||||
function modifier_item_boo_stuff.prototype.GetModifierPreAttack_BonusDamage(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
function modifier_item_boo_stuff.prototype.GetModifierAttackRangeBonus(self)
|
||||
if not self:GetParent():IsRangedAttacker() then
|
||||
return 50
|
||||
end
|
||||
return 0
|
||||
end
|
||||
modifier_item_boo_stuff = __TS__Decorate(
|
||||
modifier_item_boo_stuff,
|
||||
modifier_item_boo_stuff,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_boo_stuff"}
|
||||
)
|
||||
____exports.modifier_item_boo_stuff = modifier_item_boo_stuff
|
||||
return ____exports
|
||||
@@ -0,0 +1,69 @@
|
||||
local ____lualib = require("lualib_bundle")
|
||||
local __TS__Class = ____lualib.__TS__Class
|
||||
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
||||
local __TS__Decorate = ____lualib.__TS__Decorate
|
||||
local __TS__SourceMapTraceBack = ____lualib.__TS__SourceMapTraceBack
|
||||
__TS__SourceMapTraceBack(debug.getinfo(1).short_src, {["8"] = 1,["9"] = 1,["10"] = 1,["11"] = 1,["12"] = 1,["13"] = 3,["14"] = 4,["15"] = 3,["16"] = 4,["17"] = 5,["18"] = 6,["21"] = 8,["22"] = 9,["25"] = 11,["26"] = 13,["27"] = 14,["29"] = 16,["31"] = 18,["32"] = 5,["33"] = 4,["34"] = 4,["35"] = 4,["36"] = 3,["39"] = 4,["40"] = 22,["41"] = 23,["42"] = 22,["43"] = 23,["44"] = 24,["45"] = 25,["46"] = 24,["47"] = 27,["48"] = 28,["49"] = 27,["50"] = 31,["51"] = 32,["52"] = 31,["53"] = 35,["54"] = 36,["55"] = 35,["56"] = 39,["57"] = 40,["58"] = 39,["59"] = 43,["60"] = 44,["61"] = 43,["62"] = 23,["63"] = 23,["64"] = 23,["65"] = 22,["68"] = 23});
|
||||
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
|
||||
____exports.item_injector = __TS__Class()
|
||||
local item_injector = ____exports.item_injector
|
||||
item_injector.name = "item_injector"
|
||||
__TS__ClassExtends(item_injector, BaseItem)
|
||||
function item_injector.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local stats = self:GetSpecialValueFor("attack_speed")
|
||||
if caster:HasModifier("modifier_item_injector") then
|
||||
caster:FindModifierByName("modifier_item_injector"):SetStackCount(caster:FindModifierByName("modifier_item_injector"):GetStackCount() + stats)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, "modifier_item_injector", {}):SetStackCount(stats)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_injector = __TS__Decorate(
|
||||
item_injector,
|
||||
item_injector,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_injector"}
|
||||
)
|
||||
____exports.item_injector = item_injector
|
||||
____exports.modifier_item_injector = __TS__Class()
|
||||
local modifier_item_injector = ____exports.modifier_item_injector
|
||||
modifier_item_injector.name = "modifier_item_injector"
|
||||
__TS__ClassExtends(modifier_item_injector, BaseModifier)
|
||||
function modifier_item_injector.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_injector.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_injector.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_injector.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT, MODIFIER_PROPERTY_MOVESPEED_BONUS_CONSTANT}
|
||||
end
|
||||
function modifier_item_injector.prototype.GetModifierAttackSpeedBonus_Constant(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
function modifier_item_injector.prototype.GetModifierMoveSpeedBonus_Constant(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_injector = __TS__Decorate(
|
||||
modifier_item_injector,
|
||||
modifier_item_injector,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_injector"}
|
||||
)
|
||||
____exports.modifier_item_injector = modifier_item_injector
|
||||
return ____exports
|
||||
@@ -0,0 +1,69 @@
|
||||
local ____lualib = require("lualib_bundle")
|
||||
local __TS__Class = ____lualib.__TS__Class
|
||||
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
||||
local __TS__Decorate = ____lualib.__TS__Decorate
|
||||
local __TS__SourceMapTraceBack = ____lualib.__TS__SourceMapTraceBack
|
||||
__TS__SourceMapTraceBack(debug.getinfo(1).short_src, {["8"] = 1,["9"] = 1,["10"] = 1,["11"] = 1,["12"] = 1,["13"] = 3,["14"] = 4,["15"] = 3,["16"] = 4,["17"] = 5,["18"] = 6,["21"] = 8,["22"] = 9,["25"] = 11,["26"] = 13,["27"] = 14,["29"] = 16,["31"] = 18,["32"] = 5,["33"] = 4,["34"] = 4,["35"] = 4,["36"] = 3,["39"] = 4,["40"] = 22,["41"] = 23,["42"] = 22,["43"] = 23,["44"] = 24,["45"] = 25,["46"] = 24,["47"] = 28,["48"] = 29,["49"] = 28,["50"] = 32,["51"] = 33,["52"] = 32,["53"] = 36,["54"] = 37,["55"] = 36,["56"] = 40,["57"] = 41,["58"] = 40,["59"] = 44,["60"] = 45,["61"] = 44,["62"] = 23,["63"] = 23,["64"] = 23,["65"] = 22,["68"] = 23});
|
||||
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
|
||||
____exports.item_king_crown = __TS__Class()
|
||||
local item_king_crown = ____exports.item_king_crown
|
||||
item_king_crown.name = "item_king_crown"
|
||||
__TS__ClassExtends(item_king_crown, BaseItem)
|
||||
function item_king_crown.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local stats = self:GetSpecialValueFor("bonus_armor")
|
||||
if caster:HasModifier("modifier_item_king_crown") then
|
||||
caster:FindModifierByName("modifier_item_king_crown"):SetStackCount(caster:FindModifierByName("modifier_item_king_crown"):GetStackCount() + stats)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, "modifier_item_king_crown", {}):SetStackCount(stats)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_king_crown = __TS__Decorate(
|
||||
item_king_crown,
|
||||
item_king_crown,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_king_crown"}
|
||||
)
|
||||
____exports.item_king_crown = item_king_crown
|
||||
____exports.modifier_item_king_crown = __TS__Class()
|
||||
local modifier_item_king_crown = ____exports.modifier_item_king_crown
|
||||
modifier_item_king_crown.name = "modifier_item_king_crown"
|
||||
__TS__ClassExtends(modifier_item_king_crown, BaseModifier)
|
||||
function modifier_item_king_crown.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_king_crown.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_king_crown.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_king_crown.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_HEALTH_BONUS, MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS}
|
||||
end
|
||||
function modifier_item_king_crown.prototype.GetModifierHealthBonus(self)
|
||||
return math.floor(self:GetStackCount() * 10)
|
||||
end
|
||||
function modifier_item_king_crown.prototype.GetModifierPhysicalArmorBonus(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_king_crown = __TS__Decorate(
|
||||
modifier_item_king_crown,
|
||||
modifier_item_king_crown,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_king_crown"}
|
||||
)
|
||||
____exports.modifier_item_king_crown = modifier_item_king_crown
|
||||
return ____exports
|
||||
@@ -0,0 +1,69 @@
|
||||
local ____lualib = require("lualib_bundle")
|
||||
local __TS__Class = ____lualib.__TS__Class
|
||||
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
||||
local __TS__Decorate = ____lualib.__TS__Decorate
|
||||
local __TS__SourceMapTraceBack = ____lualib.__TS__SourceMapTraceBack
|
||||
__TS__SourceMapTraceBack(debug.getinfo(1).short_src, {["8"] = 1,["9"] = 1,["10"] = 1,["11"] = 1,["12"] = 1,["13"] = 3,["14"] = 4,["15"] = 3,["16"] = 4,["17"] = 5,["18"] = 6,["21"] = 8,["22"] = 9,["25"] = 11,["26"] = 13,["27"] = 14,["29"] = 16,["31"] = 18,["32"] = 5,["33"] = 4,["34"] = 4,["35"] = 4,["36"] = 3,["39"] = 4,["40"] = 22,["41"] = 23,["42"] = 22,["43"] = 23,["44"] = 24,["45"] = 25,["46"] = 24,["47"] = 27,["48"] = 28,["49"] = 27,["50"] = 31,["51"] = 32,["52"] = 31,["53"] = 35,["54"] = 36,["55"] = 35,["56"] = 39,["57"] = 40,["58"] = 39,["59"] = 43,["60"] = 44,["61"] = 43,["62"] = 23,["63"] = 23,["64"] = 23,["65"] = 22,["68"] = 23});
|
||||
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
|
||||
____exports.item_manaflare = __TS__Class()
|
||||
local item_manaflare = ____exports.item_manaflare
|
||||
item_manaflare.name = "item_manaflare"
|
||||
__TS__ClassExtends(item_manaflare, BaseItem)
|
||||
function item_manaflare.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local stats = self:GetSpecialValueFor("bonus_mana")
|
||||
if caster:HasModifier("modifier_item_manaflare") then
|
||||
caster:FindModifierByName("modifier_item_manaflare"):SetStackCount(caster:FindModifierByName("modifier_item_manaflare"):GetStackCount() + stats)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, "modifier_item_manaflare", {}):SetStackCount(stats)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_manaflare = __TS__Decorate(
|
||||
item_manaflare,
|
||||
item_manaflare,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_manaflare"}
|
||||
)
|
||||
____exports.item_manaflare = item_manaflare
|
||||
____exports.modifier_item_manaflare = __TS__Class()
|
||||
local modifier_item_manaflare = ____exports.modifier_item_manaflare
|
||||
modifier_item_manaflare.name = "modifier_item_manaflare"
|
||||
__TS__ClassExtends(modifier_item_manaflare, BaseModifier)
|
||||
function modifier_item_manaflare.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_manaflare.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_manaflare.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_manaflare.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_MANA_BONUS, MODIFIER_PROPERTY_MANA_REGEN_CONSTANT}
|
||||
end
|
||||
function modifier_item_manaflare.prototype.GetModifierManaBonus(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
function modifier_item_manaflare.prototype.GetModifierConstantManaRegen(self)
|
||||
return self:GetStackCount() / 100
|
||||
end
|
||||
modifier_item_manaflare = __TS__Decorate(
|
||||
modifier_item_manaflare,
|
||||
modifier_item_manaflare,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_manaflare"}
|
||||
)
|
||||
____exports.modifier_item_manaflare = modifier_item_manaflare
|
||||
return ____exports
|
||||
@@ -0,0 +1,69 @@
|
||||
local ____lualib = require("lualib_bundle")
|
||||
local __TS__Class = ____lualib.__TS__Class
|
||||
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
||||
local __TS__Decorate = ____lualib.__TS__Decorate
|
||||
local __TS__SourceMapTraceBack = ____lualib.__TS__SourceMapTraceBack
|
||||
__TS__SourceMapTraceBack(debug.getinfo(1).short_src, {["8"] = 1,["9"] = 1,["10"] = 1,["11"] = 1,["12"] = 1,["13"] = 3,["14"] = 4,["15"] = 3,["16"] = 4,["17"] = 5,["18"] = 6,["21"] = 8,["22"] = 9,["25"] = 11,["26"] = 13,["27"] = 14,["29"] = 16,["31"] = 18,["32"] = 5,["33"] = 4,["34"] = 4,["35"] = 4,["36"] = 3,["39"] = 4,["40"] = 22,["41"] = 23,["42"] = 22,["43"] = 23,["44"] = 24,["45"] = 25,["46"] = 24,["47"] = 27,["48"] = 28,["49"] = 27,["50"] = 31,["51"] = 32,["52"] = 31,["53"] = 35,["54"] = 36,["55"] = 35,["56"] = 39,["57"] = 40,["58"] = 39,["59"] = 43,["60"] = 44,["61"] = 43,["62"] = 23,["63"] = 23,["64"] = 23,["65"] = 22,["68"] = 23});
|
||||
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
|
||||
____exports.item_spell_mask = __TS__Class()
|
||||
local item_spell_mask = ____exports.item_spell_mask
|
||||
item_spell_mask.name = "item_spell_mask"
|
||||
__TS__ClassExtends(item_spell_mask, BaseItem)
|
||||
function item_spell_mask.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local stats = self:GetSpecialValueFor("bonus_spell_amp")
|
||||
if caster:HasModifier("modifier_item_spell_mask") then
|
||||
caster:FindModifierByName("modifier_item_spell_mask"):SetStackCount(caster:FindModifierByName("modifier_item_spell_mask"):GetStackCount() + stats)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, "modifier_item_spell_mask", {}):SetStackCount(stats)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_spell_mask = __TS__Decorate(
|
||||
item_spell_mask,
|
||||
item_spell_mask,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_spell_mask"}
|
||||
)
|
||||
____exports.item_spell_mask = item_spell_mask
|
||||
____exports.modifier_item_spell_mask = __TS__Class()
|
||||
local modifier_item_spell_mask = ____exports.modifier_item_spell_mask
|
||||
modifier_item_spell_mask.name = "modifier_item_spell_mask"
|
||||
__TS__ClassExtends(modifier_item_spell_mask, BaseModifier)
|
||||
function modifier_item_spell_mask.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_spell_mask.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_spell_mask.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_spell_mask.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_SPELL_AMPLIFY_PERCENTAGE, MODIFIER_PROPERTY_MANA_REGEN_CONSTANT}
|
||||
end
|
||||
function modifier_item_spell_mask.prototype.GetModifierSpellAmplify_Percentage(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
function modifier_item_spell_mask.prototype.GetModifierConstantManaRegen(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_spell_mask = __TS__Decorate(
|
||||
modifier_item_spell_mask,
|
||||
modifier_item_spell_mask,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_spell_mask"}
|
||||
)
|
||||
____exports.modifier_item_spell_mask = modifier_item_spell_mask
|
||||
return ____exports
|
||||
@@ -0,0 +1,66 @@
|
||||
local ____lualib = require("lualib_bundle")
|
||||
local __TS__Class = ____lualib.__TS__Class
|
||||
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
||||
local __TS__Decorate = ____lualib.__TS__Decorate
|
||||
local __TS__SourceMapTraceBack = ____lualib.__TS__SourceMapTraceBack
|
||||
__TS__SourceMapTraceBack(debug.getinfo(1).short_src, {["8"] = 1,["9"] = 1,["10"] = 1,["11"] = 1,["12"] = 1,["13"] = 3,["14"] = 4,["15"] = 3,["16"] = 4,["17"] = 5,["18"] = 6,["21"] = 8,["22"] = 9,["25"] = 11,["26"] = 13,["27"] = 14,["29"] = 16,["31"] = 18,["32"] = 5,["33"] = 4,["34"] = 4,["35"] = 4,["36"] = 3,["39"] = 4,["40"] = 22,["41"] = 23,["42"] = 22,["43"] = 23,["44"] = 24,["45"] = 25,["46"] = 24,["47"] = 27,["48"] = 28,["49"] = 27,["50"] = 31,["51"] = 32,["52"] = 31,["53"] = 35,["54"] = 36,["55"] = 35,["56"] = 39,["57"] = 40,["58"] = 39,["59"] = 23,["60"] = 23,["61"] = 23,["62"] = 22,["65"] = 23});
|
||||
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
|
||||
____exports.item_stone_armor = __TS__Class()
|
||||
local item_stone_armor = ____exports.item_stone_armor
|
||||
item_stone_armor.name = "item_stone_armor"
|
||||
__TS__ClassExtends(item_stone_armor, BaseItem)
|
||||
function item_stone_armor.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local stats = self:GetSpecialValueFor("bonus_armor")
|
||||
if caster:HasModifier("modifier_item_stone_armor") then
|
||||
caster:FindModifierByName("modifier_item_stone_armor"):SetStackCount(caster:FindModifierByName("modifier_item_stone_armor"):GetStackCount() + stats)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, "modifier_item_stone_armor", {}):SetStackCount(stats)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_stone_armor = __TS__Decorate(
|
||||
item_stone_armor,
|
||||
item_stone_armor,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_stone_armor"}
|
||||
)
|
||||
____exports.item_stone_armor = item_stone_armor
|
||||
____exports.modifier_item_stone_armor = __TS__Class()
|
||||
local modifier_item_stone_armor = ____exports.modifier_item_stone_armor
|
||||
modifier_item_stone_armor.name = "modifier_item_stone_armor"
|
||||
__TS__ClassExtends(modifier_item_stone_armor, BaseModifier)
|
||||
function modifier_item_stone_armor.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_stone_armor.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_stone_armor.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_stone_armor.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS}
|
||||
end
|
||||
function modifier_item_stone_armor.prototype.GetModifierPhysicalArmorBonus(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_stone_armor = __TS__Decorate(
|
||||
modifier_item_stone_armor,
|
||||
modifier_item_stone_armor,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_stone_armor"}
|
||||
)
|
||||
____exports.modifier_item_stone_armor = modifier_item_stone_armor
|
||||
return ____exports
|
||||
@@ -0,0 +1,123 @@
|
||||
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
|
||||
--- Скрытый стак исходящего урона — стак = %%.
|
||||
____exports.modifier_item_glass_pact_outgoing = __TS__Class()
|
||||
local modifier_item_glass_pact_outgoing = ____exports.modifier_item_glass_pact_outgoing
|
||||
modifier_item_glass_pact_outgoing.name = "modifier_item_glass_pact_outgoing"
|
||||
modifier_item_glass_pact_outgoing.____file_path = "scripts/vscripts/items/blackshop/cursed/item_blackshop_cursed_glass_pact.lua"
|
||||
__TS__ClassExtends(modifier_item_glass_pact_outgoing, BaseModifier)
|
||||
function modifier_item_glass_pact_outgoing.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_glass_pact_outgoing.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_glass_pact_outgoing.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_glass_pact_outgoing.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_DAMAGEOUTGOING_PERCENTAGE}
|
||||
end
|
||||
function modifier_item_glass_pact_outgoing.prototype.GetModifierDamageOutgoing_Percentage(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_glass_pact_outgoing = __TS__Decorate(
|
||||
modifier_item_glass_pact_outgoing,
|
||||
modifier_item_glass_pact_outgoing,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_glass_pact_outgoing"}
|
||||
)
|
||||
____exports.modifier_item_glass_pact_outgoing = modifier_item_glass_pact_outgoing
|
||||
--- Скрытый стак входящего урона — стак = %%.
|
||||
____exports.modifier_item_glass_pact_incoming = __TS__Class()
|
||||
local modifier_item_glass_pact_incoming = ____exports.modifier_item_glass_pact_incoming
|
||||
modifier_item_glass_pact_incoming.name = "modifier_item_glass_pact_incoming"
|
||||
modifier_item_glass_pact_incoming.____file_path = "scripts/vscripts/items/blackshop/cursed/item_blackshop_cursed_glass_pact.lua"
|
||||
__TS__ClassExtends(modifier_item_glass_pact_incoming, BaseModifier)
|
||||
function modifier_item_glass_pact_incoming.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_glass_pact_incoming.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_glass_pact_incoming.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_glass_pact_incoming.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_INCOMING_DAMAGE_PERCENTAGE}
|
||||
end
|
||||
function modifier_item_glass_pact_incoming.prototype.GetModifierIncomingDamage_Percentage(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_glass_pact_incoming = __TS__Decorate(
|
||||
modifier_item_glass_pact_incoming,
|
||||
modifier_item_glass_pact_incoming,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_glass_pact_incoming"}
|
||||
)
|
||||
____exports.modifier_item_glass_pact_incoming = modifier_item_glass_pact_incoming
|
||||
--- Видимый маркер пакта.
|
||||
____exports.modifier_item_glass_pact = __TS__Class()
|
||||
local modifier_item_glass_pact = ____exports.modifier_item_glass_pact
|
||||
modifier_item_glass_pact.name = "modifier_item_glass_pact"
|
||||
modifier_item_glass_pact.____file_path = "scripts/vscripts/items/blackshop/cursed/item_blackshop_cursed_glass_pact.lua"
|
||||
__TS__ClassExtends(modifier_item_glass_pact, BaseModifier)
|
||||
function modifier_item_glass_pact.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_glass_pact.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_glass_pact.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_glass_pact.prototype.GetTexture(self)
|
||||
return "../items/blackshop/glass_pact"
|
||||
end
|
||||
modifier_item_glass_pact = __TS__Decorate(
|
||||
modifier_item_glass_pact,
|
||||
modifier_item_glass_pact,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_glass_pact"}
|
||||
)
|
||||
____exports.modifier_item_glass_pact = modifier_item_glass_pact
|
||||
--- Стеклянный пакт — больше входящего и исходящего урона (один раз на героя).
|
||||
____exports.item_blackshop_cursed_glass_pact = __TS__Class()
|
||||
local item_blackshop_cursed_glass_pact = ____exports.item_blackshop_cursed_glass_pact
|
||||
item_blackshop_cursed_glass_pact.name = "item_blackshop_cursed_glass_pact"
|
||||
item_blackshop_cursed_glass_pact.____file_path = "scripts/vscripts/items/blackshop/cursed/item_blackshop_cursed_glass_pact.lua"
|
||||
__TS__ClassExtends(item_blackshop_cursed_glass_pact, BaseItem)
|
||||
function item_blackshop_cursed_glass_pact.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
if caster:HasModifier(____exports.modifier_item_glass_pact.name) then
|
||||
return
|
||||
end
|
||||
local outPct = self:GetSpecialValueFor("outgoing_damage_pct")
|
||||
local inPct = self:GetSpecialValueFor("incoming_damage_pct")
|
||||
caster:AddNewModifier(caster, self, ____exports.modifier_item_glass_pact_outgoing.name, {}):SetStackCount(outPct)
|
||||
caster:AddNewModifier(caster, self, ____exports.modifier_item_glass_pact_incoming.name, {}):SetStackCount(inPct)
|
||||
caster:AddNewModifier(caster, self, ____exports.modifier_item_glass_pact.name, {}):SetStackCount(1)
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_blackshop_cursed_glass_pact = __TS__Decorate(
|
||||
item_blackshop_cursed_glass_pact,
|
||||
item_blackshop_cursed_glass_pact,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blackshop_cursed_glass_pact"}
|
||||
)
|
||||
____exports.item_blackshop_cursed_glass_pact = item_blackshop_cursed_glass_pact
|
||||
return ____exports
|
||||
@@ -0,0 +1,141 @@
|
||||
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
|
||||
--- Скрытый стак бонуса урона к атаке — сумма из KV за все слои.
|
||||
____exports.modifier_item_martyrs_damage = __TS__Class()
|
||||
local modifier_item_martyrs_damage = ____exports.modifier_item_martyrs_damage
|
||||
modifier_item_martyrs_damage.name = "modifier_item_martyrs_damage"
|
||||
modifier_item_martyrs_damage.____file_path = "scripts/vscripts/items/blackshop/cursed/item_blackshop_cursed_martyrs_brand.lua"
|
||||
__TS__ClassExtends(modifier_item_martyrs_damage, BaseModifier)
|
||||
function modifier_item_martyrs_damage.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_martyrs_damage.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_martyrs_damage.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_martyrs_damage.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_DAMAGEOUTGOING_PERCENTAGE}
|
||||
end
|
||||
function modifier_item_martyrs_damage.prototype.GetModifierDamageOutgoing_Percentage(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_martyrs_damage = __TS__Decorate(
|
||||
modifier_item_martyrs_damage,
|
||||
modifier_item_martyrs_damage,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_martyrs_damage"}
|
||||
)
|
||||
____exports.modifier_item_martyrs_damage = modifier_item_martyrs_damage
|
||||
--- Скрытый стак %% входящего урона — сумма из KV за все слои.
|
||||
____exports.modifier_item_martyrs_incoming = __TS__Class()
|
||||
local modifier_item_martyrs_incoming = ____exports.modifier_item_martyrs_incoming
|
||||
modifier_item_martyrs_incoming.name = "modifier_item_martyrs_incoming"
|
||||
modifier_item_martyrs_incoming.____file_path = "scripts/vscripts/items/blackshop/cursed/item_blackshop_cursed_martyrs_brand.lua"
|
||||
__TS__ClassExtends(modifier_item_martyrs_incoming, BaseModifier)
|
||||
function modifier_item_martyrs_incoming.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_martyrs_incoming.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_martyrs_incoming.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_martyrs_incoming.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_INCOMING_DAMAGE_PERCENTAGE}
|
||||
end
|
||||
function modifier_item_martyrs_incoming.prototype.GetModifierIncomingDamage_Percentage(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_martyrs_incoming = __TS__Decorate(
|
||||
modifier_item_martyrs_incoming,
|
||||
modifier_item_martyrs_incoming,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_martyrs_incoming"}
|
||||
)
|
||||
____exports.modifier_item_martyrs_incoming = modifier_item_martyrs_incoming
|
||||
--- Видимый маркер клейма (стак = число слоёв).
|
||||
____exports.modifier_item_martyrs_brand = __TS__Class()
|
||||
local modifier_item_martyrs_brand = ____exports.modifier_item_martyrs_brand
|
||||
modifier_item_martyrs_brand.name = "modifier_item_martyrs_brand"
|
||||
modifier_item_martyrs_brand.____file_path = "scripts/vscripts/items/blackshop/cursed/item_blackshop_cursed_martyrs_brand.lua"
|
||||
__TS__ClassExtends(modifier_item_martyrs_brand, BaseModifier)
|
||||
function modifier_item_martyrs_brand.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_martyrs_brand.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_martyrs_brand.prototype.IsDebuff(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_martyrs_brand.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_martyrs_brand.prototype.GetTexture(self)
|
||||
return "../items/blackshop/martyrs_brand"
|
||||
end
|
||||
modifier_item_martyrs_brand = __TS__Decorate(
|
||||
modifier_item_martyrs_brand,
|
||||
modifier_item_martyrs_brand,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_martyrs_brand"}
|
||||
)
|
||||
____exports.modifier_item_martyrs_brand = modifier_item_martyrs_brand
|
||||
--- Клеймо мученика — урон растёт, но ты получаешь больше входящего (стакается).
|
||||
____exports.item_blackshop_cursed_martyrs_brand = __TS__Class()
|
||||
local item_blackshop_cursed_martyrs_brand = ____exports.item_blackshop_cursed_martyrs_brand
|
||||
item_blackshop_cursed_martyrs_brand.name = "item_blackshop_cursed_martyrs_brand"
|
||||
item_blackshop_cursed_martyrs_brand.____file_path = "scripts/vscripts/items/blackshop/cursed/item_blackshop_cursed_martyrs_brand.lua"
|
||||
__TS__ClassExtends(item_blackshop_cursed_martyrs_brand, BaseItem)
|
||||
function item_blackshop_cursed_martyrs_brand.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local dmgAdd = self:GetSpecialValueFor("bonus_damage_per")
|
||||
local incAdd = self:GetSpecialValueFor("incoming_damage_per_stack")
|
||||
local dMod = ____exports.modifier_item_martyrs_damage.name
|
||||
local iMod = ____exports.modifier_item_martyrs_incoming.name
|
||||
local disp = ____exports.modifier_item_martyrs_brand.name
|
||||
local m = caster:FindModifierByName(dMod)
|
||||
if m then
|
||||
m:SetStackCount(m:GetStackCount() + dmgAdd)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, dMod, {}):SetStackCount(dmgAdd)
|
||||
end
|
||||
m = caster:FindModifierByName(iMod)
|
||||
if m then
|
||||
m:SetStackCount(m:GetStackCount() + incAdd)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, iMod, {}):SetStackCount(incAdd)
|
||||
end
|
||||
m = caster:FindModifierByName(disp)
|
||||
if m then
|
||||
m:SetStackCount(m:GetStackCount() + 1)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, disp, {}):SetStackCount(1)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_blackshop_cursed_martyrs_brand = __TS__Decorate(
|
||||
item_blackshop_cursed_martyrs_brand,
|
||||
item_blackshop_cursed_martyrs_brand,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blackshop_cursed_martyrs_brand"}
|
||||
)
|
||||
____exports.item_blackshop_cursed_martyrs_brand = item_blackshop_cursed_martyrs_brand
|
||||
return ____exports
|
||||
+196
@@ -0,0 +1,196 @@
|
||||
local ____lualib = require("lualib_bundle")
|
||||
local __TS__Class = ____lualib.__TS__Class
|
||||
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
||||
local __TS__Decorate = ____lualib.__TS__Decorate
|
||||
local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
|
||||
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
|
||||
____exports.item_blackshop_cursed_the_hand_of_gluttony = __TS__Class()
|
||||
local item_blackshop_cursed_the_hand_of_gluttony = ____exports.item_blackshop_cursed_the_hand_of_gluttony
|
||||
item_blackshop_cursed_the_hand_of_gluttony.name = "item_blackshop_cursed_the_hand_of_gluttony"
|
||||
item_blackshop_cursed_the_hand_of_gluttony.____file_path = "scripts/vscripts/items/blackshop/cursed/item_blackshop_cursed_the_hand_of_gluttony.lua"
|
||||
__TS__ClassExtends(item_blackshop_cursed_the_hand_of_gluttony, BaseItem)
|
||||
function item_blackshop_cursed_the_hand_of_gluttony.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local stats = self:GetSpecialValueFor("bonus_stats")
|
||||
if caster:HasModifier("modifier_item_the_hand_of_gluttony") then
|
||||
caster:FindModifierByName("modifier_item_the_hand_of_gluttony"):SetStackCount(caster:FindModifierByName("modifier_item_the_hand_of_gluttony"):GetStackCount() + stats)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, "modifier_item_the_hand_of_gluttony", {}):SetStackCount(stats)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_blackshop_cursed_the_hand_of_gluttony = __TS__Decorate(
|
||||
item_blackshop_cursed_the_hand_of_gluttony,
|
||||
item_blackshop_cursed_the_hand_of_gluttony,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blackshop_cursed_the_hand_of_gluttony"}
|
||||
)
|
||||
____exports.item_blackshop_cursed_the_hand_of_gluttony = item_blackshop_cursed_the_hand_of_gluttony
|
||||
____exports.modifier_item_the_hand_of_gluttony = __TS__Class()
|
||||
local modifier_item_the_hand_of_gluttony = ____exports.modifier_item_the_hand_of_gluttony
|
||||
modifier_item_the_hand_of_gluttony.name = "modifier_item_the_hand_of_gluttony"
|
||||
modifier_item_the_hand_of_gluttony.____file_path = "scripts/vscripts/items/blackshop/cursed/item_blackshop_cursed_the_hand_of_gluttony.lua"
|
||||
__TS__ClassExtends(modifier_item_the_hand_of_gluttony, BaseModifier)
|
||||
function modifier_item_the_hand_of_gluttony.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_the_hand_of_gluttony.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_the_hand_of_gluttony.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_the_hand_of_gluttony.prototype.GetTexture(self)
|
||||
return "../items/blackshop/the_hand_of_gluttony"
|
||||
end
|
||||
function modifier_item_the_hand_of_gluttony.prototype.GetAuraRadius(self)
|
||||
return self:GetParent():GetBaseAttackRange() + 235
|
||||
end
|
||||
function modifier_item_the_hand_of_gluttony.prototype.GetAuraSearchTeam(self)
|
||||
return DOTA_UNIT_TARGET_TEAM_FRIENDLY
|
||||
end
|
||||
function modifier_item_the_hand_of_gluttony.prototype.GetAuraSearchType(self)
|
||||
return DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC
|
||||
end
|
||||
function modifier_item_the_hand_of_gluttony.prototype.GetModifierAura(self)
|
||||
return "modifier_item_the_hand_of_gluttony_aura"
|
||||
end
|
||||
function modifier_item_the_hand_of_gluttony.prototype.IsAura(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_the_hand_of_gluttony.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_EVENT_ON_ATTACK_LANDED, MODIFIER_EVENT_ON_ATTACK_START}
|
||||
end
|
||||
function modifier_item_the_hand_of_gluttony.prototype.OnAttackStart(self, event)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
if event.attacker ~= self:GetParent() then
|
||||
return
|
||||
end
|
||||
local parent = self:GetParent()
|
||||
local units = FindUnitsInRadius(
|
||||
parent:GetTeamNumber(),
|
||||
parent:GetAbsOrigin(),
|
||||
nil,
|
||||
self:GetAuraRadius(),
|
||||
DOTA_UNIT_TARGET_TEAM_FRIENDLY,
|
||||
DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC,
|
||||
DOTA_UNIT_TARGET_FLAG_NONE,
|
||||
FIND_ANY_ORDER,
|
||||
false
|
||||
)
|
||||
if #units > 1 and RollPseudoRandomPercentage(
|
||||
self:GetStackCount() / 12,
|
||||
1,
|
||||
self:GetParent()
|
||||
) then
|
||||
if self:GetParent():HasModifier("modifier_lose_control") then
|
||||
return
|
||||
end
|
||||
local allies = __TS__ArrayFilter(
|
||||
units,
|
||||
function(____, unit) return unit ~= parent end
|
||||
)
|
||||
local randomAlly = allies[RandomInt(0, #allies - 1) + 1]
|
||||
parent:MoveToTargetToAttack(randomAlly)
|
||||
parent:AddNewModifier(
|
||||
parent,
|
||||
self:GetAbility(),
|
||||
"modifier_lose_control",
|
||||
{duration = 3}
|
||||
)
|
||||
end
|
||||
end
|
||||
function modifier_item_the_hand_of_gluttony.prototype.OnAttackLanded(self, event)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
if event.attacker ~= self:GetParent() then
|
||||
return
|
||||
end
|
||||
local damage = event.damage
|
||||
local heal = damage * (self:GetStackCount() / 100)
|
||||
SendOverheadEventMessage(
|
||||
nil,
|
||||
OVERHEAD_ALERT_HEAL,
|
||||
self:GetParent(),
|
||||
heal,
|
||||
nil
|
||||
)
|
||||
local healParticle = ParticleManager:CreateParticle(
|
||||
"particles/generic_gameplay/generic_lifesteal.vpcf",
|
||||
PATTACH_ABSORIGIN_FOLLOW,
|
||||
self:GetParent()
|
||||
)
|
||||
ParticleManager:ReleaseParticleIndex(healParticle)
|
||||
local parent = self:GetParent()
|
||||
parent:Heal(
|
||||
heal,
|
||||
self:GetAbility()
|
||||
)
|
||||
end
|
||||
modifier_item_the_hand_of_gluttony = __TS__Decorate(
|
||||
modifier_item_the_hand_of_gluttony,
|
||||
modifier_item_the_hand_of_gluttony,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_the_hand_of_gluttony"}
|
||||
)
|
||||
____exports.modifier_item_the_hand_of_gluttony = modifier_item_the_hand_of_gluttony
|
||||
____exports.modifier_item_the_hand_of_gluttony_aura = __TS__Class()
|
||||
local modifier_item_the_hand_of_gluttony_aura = ____exports.modifier_item_the_hand_of_gluttony_aura
|
||||
modifier_item_the_hand_of_gluttony_aura.name = "modifier_item_the_hand_of_gluttony_aura"
|
||||
modifier_item_the_hand_of_gluttony_aura.____file_path = "scripts/vscripts/items/blackshop/cursed/item_blackshop_cursed_the_hand_of_gluttony.lua"
|
||||
__TS__ClassExtends(modifier_item_the_hand_of_gluttony_aura, BaseModifier)
|
||||
function modifier_item_the_hand_of_gluttony_aura.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_the_hand_of_gluttony_aura.prototype.IsDebuff(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_the_hand_of_gluttony_aura.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_the_hand_of_gluttony_aura.prototype.CheckState(self)
|
||||
return {[MODIFIER_STATE_SPECIALLY_DENIABLE] = true}
|
||||
end
|
||||
function modifier_item_the_hand_of_gluttony_aura.prototype.GetTexture(self)
|
||||
return "../items/blackshop/the_hand_of_gluttony"
|
||||
end
|
||||
modifier_item_the_hand_of_gluttony_aura = __TS__Decorate(
|
||||
modifier_item_the_hand_of_gluttony_aura,
|
||||
modifier_item_the_hand_of_gluttony_aura,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_the_hand_of_gluttony_aura"}
|
||||
)
|
||||
____exports.modifier_item_the_hand_of_gluttony_aura = modifier_item_the_hand_of_gluttony_aura
|
||||
____exports.modifier_lose_control = __TS__Class()
|
||||
local modifier_lose_control = ____exports.modifier_lose_control
|
||||
modifier_lose_control.name = "modifier_lose_control"
|
||||
modifier_lose_control.____file_path = "scripts/vscripts/items/blackshop/cursed/item_blackshop_cursed_the_hand_of_gluttony.lua"
|
||||
__TS__ClassExtends(modifier_lose_control, BaseModifier)
|
||||
function modifier_lose_control.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_lose_control.prototype.CheckState(self)
|
||||
return {[MODIFIER_STATE_COMMAND_RESTRICTED] = true}
|
||||
end
|
||||
modifier_lose_control = __TS__Decorate(
|
||||
modifier_lose_control,
|
||||
modifier_lose_control,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_lose_control"}
|
||||
)
|
||||
____exports.modifier_lose_control = modifier_lose_control
|
||||
return ____exports
|
||||
@@ -0,0 +1,201 @@
|
||||
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
|
||||
--- Короткий само-рут после удара (цепь вдовы).
|
||||
____exports.modifier_item_widow_chain_root = __TS__Class()
|
||||
local modifier_item_widow_chain_root = ____exports.modifier_item_widow_chain_root
|
||||
modifier_item_widow_chain_root.name = "modifier_item_widow_chain_root"
|
||||
modifier_item_widow_chain_root.____file_path = "scripts/vscripts/items/blackshop/cursed/item_blackshop_cursed_widow_chain.lua"
|
||||
__TS__ClassExtends(modifier_item_widow_chain_root, BaseModifier)
|
||||
function modifier_item_widow_chain_root.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_widow_chain_root.prototype.IsDebuff(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_widow_chain_root.prototype.IsPurgable(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_widow_chain_root.prototype.GetTexture(self)
|
||||
return "../items/blackshop/widow_chain"
|
||||
end
|
||||
function modifier_item_widow_chain_root.prototype.CheckState(self)
|
||||
return {[MODIFIER_STATE_ROOTED] = true}
|
||||
end
|
||||
function modifier_item_widow_chain_root.prototype.GetEffectName(self)
|
||||
return "particles/units/heroes/hero_treant/treant_bramble_root.vpcf"
|
||||
end
|
||||
function modifier_item_widow_chain_root.prototype.GetEffectAttachType(self)
|
||||
return PATTACH_ABSORIGIN_FOLLOW
|
||||
end
|
||||
modifier_item_widow_chain_root = __TS__Decorate(
|
||||
modifier_item_widow_chain_root,
|
||||
modifier_item_widow_chain_root,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_widow_chain_root"}
|
||||
)
|
||||
____exports.modifier_item_widow_chain_root = modifier_item_widow_chain_root
|
||||
--- Скрытый стак %% исходящего урона — сумма за слои.
|
||||
____exports.modifier_item_widow_outgoing = __TS__Class()
|
||||
local modifier_item_widow_outgoing = ____exports.modifier_item_widow_outgoing
|
||||
modifier_item_widow_outgoing.name = "modifier_item_widow_outgoing"
|
||||
modifier_item_widow_outgoing.____file_path = "scripts/vscripts/items/blackshop/cursed/item_blackshop_cursed_widow_chain.lua"
|
||||
__TS__ClassExtends(modifier_item_widow_outgoing, BaseModifier)
|
||||
function modifier_item_widow_outgoing.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_widow_outgoing.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_widow_outgoing.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_widow_outgoing.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_DAMAGEOUTGOING_PERCENTAGE}
|
||||
end
|
||||
function modifier_item_widow_outgoing.prototype.GetModifierDamageOutgoing_Percentage(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_widow_outgoing = __TS__Decorate(
|
||||
modifier_item_widow_outgoing,
|
||||
modifier_item_widow_outgoing,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_widow_outgoing"}
|
||||
)
|
||||
____exports.modifier_item_widow_outgoing = modifier_item_widow_outgoing
|
||||
--- Скрытый стак штрафа скорости атаки — сумма %% за слои.
|
||||
____exports.modifier_item_widow_as = __TS__Class()
|
||||
local modifier_item_widow_as = ____exports.modifier_item_widow_as
|
||||
modifier_item_widow_as.name = "modifier_item_widow_as"
|
||||
modifier_item_widow_as.____file_path = "scripts/vscripts/items/blackshop/cursed/item_blackshop_cursed_widow_chain.lua"
|
||||
__TS__ClassExtends(modifier_item_widow_as, BaseModifier)
|
||||
function modifier_item_widow_as.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_widow_as.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_widow_as.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_widow_as.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_ATTACKSPEED_PERCENTAGE}
|
||||
end
|
||||
function modifier_item_widow_as.prototype.GetModifierAttackSpeedPercentage(self)
|
||||
return -self:GetStackCount()
|
||||
end
|
||||
modifier_item_widow_as = __TS__Decorate(
|
||||
modifier_item_widow_as,
|
||||
modifier_item_widow_as,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_widow_as"}
|
||||
)
|
||||
____exports.modifier_item_widow_as = modifier_item_widow_as
|
||||
--- Видимый маркер цепи (стак = слои; рут по длительности из params при первом создании).
|
||||
____exports.modifier_item_widow_chain = __TS__Class()
|
||||
local modifier_item_widow_chain = ____exports.modifier_item_widow_chain
|
||||
modifier_item_widow_chain.name = "modifier_item_widow_chain"
|
||||
modifier_item_widow_chain.____file_path = "scripts/vscripts/items/blackshop/cursed/item_blackshop_cursed_widow_chain.lua"
|
||||
__TS__ClassExtends(modifier_item_widow_chain, BaseModifier)
|
||||
function modifier_item_widow_chain.prototype.____constructor(self, ...)
|
||||
BaseModifier.prototype.____constructor(self, ...)
|
||||
self.rootDuration = 0
|
||||
end
|
||||
function modifier_item_widow_chain.prototype.OnCreated(self, params)
|
||||
self.rootDuration = params.root_duration or 0
|
||||
end
|
||||
function modifier_item_widow_chain.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_widow_chain.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_widow_chain.prototype.IsDebuff(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_widow_chain.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_widow_chain.prototype.GetTexture(self)
|
||||
return "../items/blackshop/widow_chain"
|
||||
end
|
||||
function modifier_item_widow_chain.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_EVENT_ON_ATTACK_LANDED}
|
||||
end
|
||||
function modifier_item_widow_chain.prototype.OnAttackLanded(self, event)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local parent = self:GetParent()
|
||||
if event.attacker ~= parent or not parent or not parent:IsAlive() then
|
||||
return
|
||||
end
|
||||
parent:AddNewModifier(
|
||||
parent,
|
||||
getModifierSourceAbility(nil, parent),
|
||||
____exports.modifier_item_widow_chain_root.name,
|
||||
{duration = self.rootDuration}
|
||||
)
|
||||
end
|
||||
modifier_item_widow_chain = __TS__Decorate(
|
||||
modifier_item_widow_chain,
|
||||
modifier_item_widow_chain,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_widow_chain"}
|
||||
)
|
||||
____exports.modifier_item_widow_chain = modifier_item_widow_chain
|
||||
--- Цепь вдовы — огромный урон, медленные атаки; каждый удар коренит героя.
|
||||
____exports.item_blackshop_cursed_widow_chain = __TS__Class()
|
||||
local item_blackshop_cursed_widow_chain = ____exports.item_blackshop_cursed_widow_chain
|
||||
item_blackshop_cursed_widow_chain.name = "item_blackshop_cursed_widow_chain"
|
||||
item_blackshop_cursed_widow_chain.____file_path = "scripts/vscripts/items/blackshop/cursed/item_blackshop_cursed_widow_chain.lua"
|
||||
__TS__ClassExtends(item_blackshop_cursed_widow_chain, BaseItem)
|
||||
function item_blackshop_cursed_widow_chain.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local dmgAdd = self:GetSpecialValueFor("bonus_outgoing_damage_pct")
|
||||
local asAdd = self:GetSpecialValueFor("attack_speed_loss_pct")
|
||||
local rootDur = self:GetSpecialValueFor("root_duration")
|
||||
local outMod = ____exports.modifier_item_widow_outgoing.name
|
||||
local asMod = ____exports.modifier_item_widow_as.name
|
||||
local disp = ____exports.modifier_item_widow_chain.name
|
||||
local m = caster:FindModifierByName(outMod)
|
||||
if m then
|
||||
m:SetStackCount(m:GetStackCount() + dmgAdd)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, outMod, {}):SetStackCount(dmgAdd)
|
||||
end
|
||||
m = caster:FindModifierByName(asMod)
|
||||
if m then
|
||||
m:SetStackCount(m:GetStackCount() + asAdd)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, asMod, {}):SetStackCount(asAdd)
|
||||
end
|
||||
m = caster:FindModifierByName(disp)
|
||||
if m then
|
||||
m:SetStackCount(m:GetStackCount() + 1)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, disp, {root_duration = rootDur}):SetStackCount(1)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_blackshop_cursed_widow_chain = __TS__Decorate(
|
||||
item_blackshop_cursed_widow_chain,
|
||||
item_blackshop_cursed_widow_chain,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blackshop_cursed_widow_chain"}
|
||||
)
|
||||
____exports.item_blackshop_cursed_widow_chain = item_blackshop_cursed_widow_chain
|
||||
return ____exports
|
||||
@@ -0,0 +1,191 @@
|
||||
local ____lualib = require("lualib_bundle")
|
||||
local __TS__Class = ____lualib.__TS__Class
|
||||
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
||||
local __TS__Decorate = ____lualib.__TS__Decorate
|
||||
local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
|
||||
local __TS__SourceMapTraceBack = ____lualib.__TS__SourceMapTraceBack
|
||||
__TS__SourceMapTraceBack(debug.getinfo(1).short_src, {["9"] = 1,["10"] = 1,["11"] = 1,["12"] = 1,["13"] = 1,["14"] = 3,["15"] = 4,["16"] = 3,["17"] = 4,["18"] = 5,["19"] = 6,["22"] = 8,["23"] = 9,["26"] = 11,["27"] = 13,["28"] = 14,["30"] = 18,["32"] = 20,["33"] = 5,["34"] = 4,["35"] = 4,["36"] = 4,["37"] = 3,["40"] = 4,["41"] = 24,["42"] = 25,["43"] = 24,["44"] = 25,["45"] = 26,["46"] = 27,["47"] = 26,["48"] = 30,["49"] = 31,["50"] = 30,["51"] = 34,["52"] = 35,["53"] = 34,["54"] = 38,["55"] = 39,["56"] = 38,["57"] = 42,["58"] = 43,["59"] = 42,["60"] = 46,["61"] = 47,["62"] = 46,["63"] = 50,["64"] = 51,["65"] = 50,["66"] = 54,["67"] = 55,["68"] = 54,["69"] = 58,["70"] = 59,["71"] = 58,["72"] = 62,["73"] = 63,["76"] = 64,["79"] = 66,["80"] = 67,["81"] = 67,["82"] = 67,["83"] = 67,["84"] = 67,["85"] = 67,["86"] = 67,["87"] = 67,["88"] = 67,["89"] = 67,["90"] = 67,["91"] = 79,["92"] = 79,["93"] = 79,["94"] = 79,["95"] = 79,["96"] = 80,["99"] = 81,["100"] = 81,["101"] = 81,["102"] = 81,["103"] = 82,["104"] = 83,["105"] = 85,["106"] = 85,["107"] = 85,["108"] = 85,["109"] = 85,["110"] = 85,["112"] = 62,["113"] = 89,["114"] = 90,["117"] = 91,["120"] = 93,["121"] = 94,["122"] = 95,["123"] = 95,["124"] = 95,["125"] = 95,["126"] = 95,["127"] = 95,["128"] = 95,["129"] = 96,["130"] = 96,["131"] = 96,["132"] = 96,["133"] = 96,["134"] = 101,["135"] = 103,["136"] = 104,["137"] = 104,["138"] = 104,["139"] = 104,["140"] = 89,["141"] = 25,["142"] = 25,["143"] = 25,["144"] = 24,["147"] = 25,["148"] = 108,["149"] = 109,["150"] = 108,["151"] = 109,["152"] = 110,["153"] = 111,["154"] = 110,["155"] = 114,["156"] = 115,["157"] = 114,["158"] = 118,["159"] = 119,["160"] = 118,["161"] = 122,["162"] = 123,["163"] = 122,["164"] = 128,["165"] = 129,["166"] = 128,["167"] = 109,["168"] = 109,["169"] = 109,["170"] = 108,["173"] = 109,["174"] = 133,["175"] = 134,["176"] = 133,["177"] = 134,["178"] = 135,["179"] = 136,["180"] = 135,["181"] = 138,["182"] = 139,["183"] = 138,["184"] = 134,["185"] = 134,["186"] = 134,["187"] = 133,["190"] = 134});
|
||||
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
|
||||
____exports.item_the_hand_of_gluttony = __TS__Class()
|
||||
local item_the_hand_of_gluttony = ____exports.item_the_hand_of_gluttony
|
||||
item_the_hand_of_gluttony.name = "item_the_hand_of_gluttony"
|
||||
__TS__ClassExtends(item_the_hand_of_gluttony, BaseItem)
|
||||
function item_the_hand_of_gluttony.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local stats = self:GetSpecialValueFor("bonus_stats")
|
||||
if caster:HasModifier("modifier_item_the_hand_of_gluttony") then
|
||||
caster:FindModifierByName("modifier_item_the_hand_of_gluttony"):SetStackCount(caster:FindModifierByName("modifier_item_the_hand_of_gluttony"):GetStackCount() + stats)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, "modifier_item_the_hand_of_gluttony", {}):SetStackCount(stats)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_the_hand_of_gluttony = __TS__Decorate(
|
||||
item_the_hand_of_gluttony,
|
||||
item_the_hand_of_gluttony,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_the_hand_of_gluttony"}
|
||||
)
|
||||
____exports.item_the_hand_of_gluttony = item_the_hand_of_gluttony
|
||||
____exports.modifier_item_the_hand_of_gluttony = __TS__Class()
|
||||
local modifier_item_the_hand_of_gluttony = ____exports.modifier_item_the_hand_of_gluttony
|
||||
modifier_item_the_hand_of_gluttony.name = "modifier_item_the_hand_of_gluttony"
|
||||
__TS__ClassExtends(modifier_item_the_hand_of_gluttony, BaseModifier)
|
||||
function modifier_item_the_hand_of_gluttony.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_the_hand_of_gluttony.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_the_hand_of_gluttony.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_the_hand_of_gluttony.prototype.GetAuraRadius(self)
|
||||
return self:GetParent():GetBaseAttackRange() + 235
|
||||
end
|
||||
function modifier_item_the_hand_of_gluttony.prototype.GetAuraSearchTeam(self)
|
||||
return DOTA_UNIT_TARGET_TEAM_FRIENDLY
|
||||
end
|
||||
function modifier_item_the_hand_of_gluttony.prototype.GetAuraSearchType(self)
|
||||
return DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC
|
||||
end
|
||||
function modifier_item_the_hand_of_gluttony.prototype.GetModifierAura(self)
|
||||
return "modifier_item_the_hand_of_gluttony_aura"
|
||||
end
|
||||
function modifier_item_the_hand_of_gluttony.prototype.IsAura(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_the_hand_of_gluttony.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_EVENT_ON_ATTACK_LANDED, MODIFIER_EVENT_ON_ATTACK_START}
|
||||
end
|
||||
function modifier_item_the_hand_of_gluttony.prototype.OnAttackStart(self, event)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
if event.attacker ~= self:GetParent() then
|
||||
return
|
||||
end
|
||||
local parent = self:GetParent()
|
||||
local units = FindUnitsInRadius(
|
||||
parent:GetTeamNumber(),
|
||||
parent:GetAbsOrigin(),
|
||||
nil,
|
||||
self:GetAuraRadius(),
|
||||
DOTA_UNIT_TARGET_TEAM_FRIENDLY,
|
||||
DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC,
|
||||
DOTA_UNIT_TARGET_FLAG_NONE,
|
||||
FIND_ANY_ORDER,
|
||||
false
|
||||
)
|
||||
if #units > 1 and RollPseudoRandomPercentage(
|
||||
self:GetStackCount() / 12,
|
||||
1,
|
||||
self:GetParent()
|
||||
) then
|
||||
if self:GetParent():HasModifier("modifier_lose_control") then
|
||||
return
|
||||
end
|
||||
local allies = __TS__ArrayFilter(
|
||||
units,
|
||||
function(____, unit) return unit ~= parent end
|
||||
)
|
||||
local randomAlly = allies[RandomInt(0, #allies - 1) + 1]
|
||||
parent:MoveToTargetToAttack(randomAlly)
|
||||
parent:AddNewModifier(
|
||||
parent,
|
||||
self:GetAbility(),
|
||||
"modifier_lose_control",
|
||||
{duration = 3}
|
||||
)
|
||||
end
|
||||
end
|
||||
function modifier_item_the_hand_of_gluttony.prototype.OnAttackLanded(self, event)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
if event.attacker ~= self:GetParent() then
|
||||
return
|
||||
end
|
||||
local damage = event.damage
|
||||
local heal = damage * (self:GetStackCount() / 100)
|
||||
SendOverheadEventMessage(
|
||||
nil,
|
||||
OVERHEAD_ALERT_HEAL,
|
||||
self:GetParent(),
|
||||
heal,
|
||||
nil
|
||||
)
|
||||
local healParticle = ParticleManager:CreateParticle(
|
||||
"particles/generic_gameplay/generic_lifesteal.vpcf",
|
||||
PATTACH_ABSORIGIN_FOLLOW,
|
||||
self:GetParent()
|
||||
)
|
||||
ParticleManager:ReleaseParticleIndex(healParticle)
|
||||
local parent = self:GetParent()
|
||||
parent:Heal(
|
||||
heal,
|
||||
self:GetAbility()
|
||||
)
|
||||
end
|
||||
modifier_item_the_hand_of_gluttony = __TS__Decorate(
|
||||
modifier_item_the_hand_of_gluttony,
|
||||
modifier_item_the_hand_of_gluttony,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_the_hand_of_gluttony"}
|
||||
)
|
||||
____exports.modifier_item_the_hand_of_gluttony = modifier_item_the_hand_of_gluttony
|
||||
____exports.modifier_item_the_hand_of_gluttony_aura = __TS__Class()
|
||||
local modifier_item_the_hand_of_gluttony_aura = ____exports.modifier_item_the_hand_of_gluttony_aura
|
||||
modifier_item_the_hand_of_gluttony_aura.name = "modifier_item_the_hand_of_gluttony_aura"
|
||||
__TS__ClassExtends(modifier_item_the_hand_of_gluttony_aura, BaseModifier)
|
||||
function modifier_item_the_hand_of_gluttony_aura.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_the_hand_of_gluttony_aura.prototype.IsDebuff(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_the_hand_of_gluttony_aura.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_the_hand_of_gluttony_aura.prototype.CheckState(self)
|
||||
return {[MODIFIER_STATE_SPECIALLY_DENIABLE] = true}
|
||||
end
|
||||
function modifier_item_the_hand_of_gluttony_aura.prototype.GetTexture(self)
|
||||
return "item_the_hand_of_gluttony"
|
||||
end
|
||||
modifier_item_the_hand_of_gluttony_aura = __TS__Decorate(
|
||||
modifier_item_the_hand_of_gluttony_aura,
|
||||
modifier_item_the_hand_of_gluttony_aura,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_the_hand_of_gluttony_aura"}
|
||||
)
|
||||
____exports.modifier_item_the_hand_of_gluttony_aura = modifier_item_the_hand_of_gluttony_aura
|
||||
____exports.modifier_lose_control = __TS__Class()
|
||||
local modifier_lose_control = ____exports.modifier_lose_control
|
||||
modifier_lose_control.name = "modifier_lose_control"
|
||||
__TS__ClassExtends(modifier_lose_control, BaseModifier)
|
||||
function modifier_lose_control.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_lose_control.prototype.CheckState(self)
|
||||
return {[MODIFIER_STATE_COMMAND_RESTRICTED] = true}
|
||||
end
|
||||
modifier_lose_control = __TS__Decorate(
|
||||
modifier_lose_control,
|
||||
modifier_lose_control,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_lose_control"}
|
||||
)
|
||||
____exports.modifier_lose_control = modifier_lose_control
|
||||
return ____exports
|
||||
@@ -0,0 +1,138 @@
|
||||
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
|
||||
--- Скрытый стак брони — число в стаке = суммарный бонус из KV (как синий воск).
|
||||
____exports.modifier_item_bulwark_plate_armor = __TS__Class()
|
||||
local modifier_item_bulwark_plate_armor = ____exports.modifier_item_bulwark_plate_armor
|
||||
modifier_item_bulwark_plate_armor.name = "modifier_item_bulwark_plate_armor"
|
||||
modifier_item_bulwark_plate_armor.____file_path = "scripts/vscripts/items/blackshop/epic/item_blackshop_epic_bulwark_plate.lua"
|
||||
__TS__ClassExtends(modifier_item_bulwark_plate_armor, BaseModifier)
|
||||
function modifier_item_bulwark_plate_armor.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_bulwark_plate_armor.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_bulwark_plate_armor.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_bulwark_plate_armor.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS}
|
||||
end
|
||||
function modifier_item_bulwark_plate_armor.prototype.GetModifierPhysicalArmorBonus(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_bulwark_plate_armor = __TS__Decorate(
|
||||
modifier_item_bulwark_plate_armor,
|
||||
modifier_item_bulwark_plate_armor,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_bulwark_plate_armor"}
|
||||
)
|
||||
____exports.modifier_item_bulwark_plate_armor = modifier_item_bulwark_plate_armor
|
||||
--- Скрытый стак магического сопротивления — стак = сумма процентов из KV.
|
||||
____exports.modifier_item_bulwark_plate_mr = __TS__Class()
|
||||
local modifier_item_bulwark_plate_mr = ____exports.modifier_item_bulwark_plate_mr
|
||||
modifier_item_bulwark_plate_mr.name = "modifier_item_bulwark_plate_mr"
|
||||
modifier_item_bulwark_plate_mr.____file_path = "scripts/vscripts/items/blackshop/epic/item_blackshop_epic_bulwark_plate.lua"
|
||||
__TS__ClassExtends(modifier_item_bulwark_plate_mr, BaseModifier)
|
||||
function modifier_item_bulwark_plate_mr.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_bulwark_plate_mr.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_bulwark_plate_mr.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_bulwark_plate_mr.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_MAGICAL_RESISTANCE_BONUS}
|
||||
end
|
||||
function modifier_item_bulwark_plate_mr.prototype.GetModifierMagicalResistanceBonus(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_bulwark_plate_mr = __TS__Decorate(
|
||||
modifier_item_bulwark_plate_mr,
|
||||
modifier_item_bulwark_plate_mr,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_bulwark_plate_mr"}
|
||||
)
|
||||
____exports.modifier_item_bulwark_plate_mr = modifier_item_bulwark_plate_mr
|
||||
--- Видимый маркер пластины (без статов — только иконка/слои для игрока).
|
||||
____exports.modifier_item_bulwark_plate_display = __TS__Class()
|
||||
local modifier_item_bulwark_plate_display = ____exports.modifier_item_bulwark_plate_display
|
||||
modifier_item_bulwark_plate_display.name = "modifier_item_bulwark_plate_display"
|
||||
modifier_item_bulwark_plate_display.____file_path = "scripts/vscripts/items/blackshop/epic/item_blackshop_epic_bulwark_plate.lua"
|
||||
__TS__ClassExtends(modifier_item_bulwark_plate_display, BaseModifier)
|
||||
function modifier_item_bulwark_plate_display.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_bulwark_plate_display.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_bulwark_plate_display.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_bulwark_plate_display.prototype.GetTexture(self)
|
||||
return "../items/blackshop/iron_plate"
|
||||
end
|
||||
modifier_item_bulwark_plate_display = __TS__Decorate(
|
||||
modifier_item_bulwark_plate_display,
|
||||
modifier_item_bulwark_plate_display,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_bulwark_plate_display"}
|
||||
)
|
||||
____exports.modifier_item_bulwark_plate_display = modifier_item_bulwark_plate_display
|
||||
--- Пластина бастиона — за применение добавляет в стаки брони и МР величины из AbilityValues предмета.
|
||||
____exports.item_blackshop_epic_bulwark_plate = __TS__Class()
|
||||
local item_blackshop_epic_bulwark_plate = ____exports.item_blackshop_epic_bulwark_plate
|
||||
item_blackshop_epic_bulwark_plate.name = "item_blackshop_epic_bulwark_plate"
|
||||
item_blackshop_epic_bulwark_plate.____file_path = "scripts/vscripts/items/blackshop/epic/item_blackshop_epic_bulwark_plate.lua"
|
||||
__TS__ClassExtends(item_blackshop_epic_bulwark_plate, BaseItem)
|
||||
function item_blackshop_epic_bulwark_plate.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local armorAdd = self:GetSpecialValueFor("bonus_armor_per")
|
||||
local mrAdd = self:GetSpecialValueFor("bonus_mr_per")
|
||||
local armorMod = ____exports.modifier_item_bulwark_plate_armor.name
|
||||
local mrMod = ____exports.modifier_item_bulwark_plate_mr.name
|
||||
local disp = ____exports.modifier_item_bulwark_plate_display.name
|
||||
local m = caster:FindModifierByName(armorMod)
|
||||
if m then
|
||||
m:SetStackCount(m:GetStackCount() + armorAdd)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, armorMod, {}):SetStackCount(armorAdd)
|
||||
end
|
||||
m = caster:FindModifierByName(mrMod)
|
||||
if m then
|
||||
m:SetStackCount(m:GetStackCount() + mrAdd)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, mrMod, {}):SetStackCount(mrAdd)
|
||||
end
|
||||
local d = caster:FindModifierByName(disp)
|
||||
if d then
|
||||
d:SetStackCount(d:GetStackCount() + 1)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, disp, {}):SetStackCount(1)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_blackshop_epic_bulwark_plate = __TS__Decorate(
|
||||
item_blackshop_epic_bulwark_plate,
|
||||
item_blackshop_epic_bulwark_plate,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blackshop_epic_bulwark_plate"}
|
||||
)
|
||||
____exports.item_blackshop_epic_bulwark_plate = item_blackshop_epic_bulwark_plate
|
||||
return ____exports
|
||||
@@ -0,0 +1,33 @@
|
||||
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 registerAbility = ____dota_ts_adapter.registerAbility
|
||||
____exports.item_blackshop_epic_critical_paladin_sword = __TS__Class()
|
||||
local item_blackshop_epic_critical_paladin_sword = ____exports.item_blackshop_epic_critical_paladin_sword
|
||||
item_blackshop_epic_critical_paladin_sword.name = "item_blackshop_epic_critical_paladin_sword"
|
||||
item_blackshop_epic_critical_paladin_sword.____file_path = "scripts/vscripts/items/blackshop/epic/item_blackshop_epic_critical_paladin_sword.lua"
|
||||
__TS__ClassExtends(item_blackshop_epic_critical_paladin_sword, BaseItem)
|
||||
function item_blackshop_epic_critical_paladin_sword.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local mult = self:GetSpecialValueFor("crit_multiplier")
|
||||
local stackingCritMod = self:GetCaster():FindModifierByName("modifier_stacking_crit")
|
||||
if stackingCritMod then
|
||||
local ability = self
|
||||
stackingCritMod:AddCustomCrit(0, mult, "item_critical_paladin_sword", ability)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_blackshop_epic_critical_paladin_sword = __TS__Decorate(
|
||||
item_blackshop_epic_critical_paladin_sword,
|
||||
item_blackshop_epic_critical_paladin_sword,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blackshop_epic_critical_paladin_sword"}
|
||||
)
|
||||
____exports.item_blackshop_epic_critical_paladin_sword = item_blackshop_epic_critical_paladin_sword
|
||||
return ____exports
|
||||
@@ -0,0 +1,105 @@
|
||||
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
|
||||
____exports.item_blackshop_epic_power_of_grow = __TS__Class()
|
||||
local item_blackshop_epic_power_of_grow = ____exports.item_blackshop_epic_power_of_grow
|
||||
item_blackshop_epic_power_of_grow.name = "item_blackshop_epic_power_of_grow"
|
||||
item_blackshop_epic_power_of_grow.____file_path = "scripts/vscripts/items/blackshop/epic/item_blackshop_epic_power_of_grow.lua"
|
||||
__TS__ClassExtends(item_blackshop_epic_power_of_grow, BaseItem)
|
||||
function item_blackshop_epic_power_of_grow.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local stats = self:GetSpecialValueFor("bonus_stats")
|
||||
if caster:HasModifier("modifier_item_power_of_grow") then
|
||||
caster:FindModifierByName("modifier_item_power_of_grow_scale"):SetStackCount(caster:FindModifierByName("modifier_item_power_of_grow_scale"):GetStackCount() + stats)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, "modifier_item_power_of_grow", {})
|
||||
caster:AddNewModifier(caster, self, "modifier_item_power_of_grow_scale", {}):SetStackCount(stats)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_blackshop_epic_power_of_grow = __TS__Decorate(
|
||||
item_blackshop_epic_power_of_grow,
|
||||
item_blackshop_epic_power_of_grow,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blackshop_epic_power_of_grow"}
|
||||
)
|
||||
____exports.item_blackshop_epic_power_of_grow = item_blackshop_epic_power_of_grow
|
||||
____exports.modifier_item_power_of_grow = __TS__Class()
|
||||
local modifier_item_power_of_grow = ____exports.modifier_item_power_of_grow
|
||||
modifier_item_power_of_grow.name = "modifier_item_power_of_grow"
|
||||
modifier_item_power_of_grow.____file_path = "scripts/vscripts/items/blackshop/epic/item_blackshop_epic_power_of_grow.lua"
|
||||
__TS__ClassExtends(modifier_item_power_of_grow, BaseModifier)
|
||||
function modifier_item_power_of_grow.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_power_of_grow.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_power_of_grow.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_power_of_grow.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_DAMAGEOUTGOING_PERCENTAGE, MODIFIER_PROPERTY_MODEL_SCALE}
|
||||
end
|
||||
function modifier_item_power_of_grow.prototype.OnCreated(self)
|
||||
self:StartIntervalThink(0.1)
|
||||
end
|
||||
function modifier_item_power_of_grow.prototype.OnIntervalThink(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local parent = self:GetParent()
|
||||
local scale = (parent:GetModelScale() - 1) * 100
|
||||
self:SetStackCount(scale)
|
||||
end
|
||||
function modifier_item_power_of_grow.prototype.GetModifierDamageOutgoing_Percentage(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_power_of_grow = __TS__Decorate(
|
||||
modifier_item_power_of_grow,
|
||||
modifier_item_power_of_grow,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_power_of_grow"}
|
||||
)
|
||||
____exports.modifier_item_power_of_grow = modifier_item_power_of_grow
|
||||
____exports.modifier_item_power_of_grow_scale = __TS__Class()
|
||||
local modifier_item_power_of_grow_scale = ____exports.modifier_item_power_of_grow_scale
|
||||
modifier_item_power_of_grow_scale.name = "modifier_item_power_of_grow_scale"
|
||||
modifier_item_power_of_grow_scale.____file_path = "scripts/vscripts/items/blackshop/epic/item_blackshop_epic_power_of_grow.lua"
|
||||
__TS__ClassExtends(modifier_item_power_of_grow_scale, BaseModifier)
|
||||
function modifier_item_power_of_grow_scale.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_power_of_grow_scale.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_power_of_grow_scale.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_MODEL_SCALE}
|
||||
end
|
||||
function modifier_item_power_of_grow_scale.prototype.GetTexture(self)
|
||||
return "../items/blackshop/magic_mushroom"
|
||||
end
|
||||
function modifier_item_power_of_grow_scale.prototype.GetModifierModelScale(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_power_of_grow_scale = __TS__Decorate(
|
||||
modifier_item_power_of_grow_scale,
|
||||
modifier_item_power_of_grow_scale,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_power_of_grow_scale"}
|
||||
)
|
||||
____exports.modifier_item_power_of_grow_scale = modifier_item_power_of_grow_scale
|
||||
return ____exports
|
||||
@@ -0,0 +1,77 @@
|
||||
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
|
||||
--- Печать тройственности — эпик: ко всем атрибутам за применение (стакается).
|
||||
____exports.item_blackshop_epic_trinity_seal = __TS__Class()
|
||||
local item_blackshop_epic_trinity_seal = ____exports.item_blackshop_epic_trinity_seal
|
||||
item_blackshop_epic_trinity_seal.name = "item_blackshop_epic_trinity_seal"
|
||||
item_blackshop_epic_trinity_seal.____file_path = "scripts/vscripts/items/blackshop/epic/item_blackshop_epic_trinity_seal.lua"
|
||||
__TS__ClassExtends(item_blackshop_epic_trinity_seal, BaseItem)
|
||||
function item_blackshop_epic_trinity_seal.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local stats = self:GetSpecialValueFor("bonus_all")
|
||||
if caster:HasModifier("modifier_item_trinity_seal") then
|
||||
local m = caster:FindModifierByName("modifier_item_trinity_seal")
|
||||
m:SetStackCount(m:GetStackCount() + stats)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, "modifier_item_trinity_seal", {}):SetStackCount(stats)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_blackshop_epic_trinity_seal = __TS__Decorate(
|
||||
item_blackshop_epic_trinity_seal,
|
||||
item_blackshop_epic_trinity_seal,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blackshop_epic_trinity_seal"}
|
||||
)
|
||||
____exports.item_blackshop_epic_trinity_seal = item_blackshop_epic_trinity_seal
|
||||
____exports.modifier_item_trinity_seal = __TS__Class()
|
||||
local modifier_item_trinity_seal = ____exports.modifier_item_trinity_seal
|
||||
modifier_item_trinity_seal.name = "modifier_item_trinity_seal"
|
||||
modifier_item_trinity_seal.____file_path = "scripts/vscripts/items/blackshop/epic/item_blackshop_epic_trinity_seal.lua"
|
||||
__TS__ClassExtends(modifier_item_trinity_seal, BaseModifier)
|
||||
function modifier_item_trinity_seal.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_trinity_seal.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_trinity_seal.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_trinity_seal.prototype.GetTexture(self)
|
||||
return "../items/blackshop/trinity_seal"
|
||||
end
|
||||
function modifier_item_trinity_seal.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_STATS_AGILITY_BONUS, MODIFIER_PROPERTY_STATS_INTELLECT_BONUS, MODIFIER_PROPERTY_STATS_STRENGTH_BONUS}
|
||||
end
|
||||
function modifier_item_trinity_seal.prototype.GetModifierBonusStats_Agility(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
function modifier_item_trinity_seal.prototype.GetModifierBonusStats_Intellect(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
function modifier_item_trinity_seal.prototype.GetModifierBonusStats_Strength(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_trinity_seal = __TS__Decorate(
|
||||
modifier_item_trinity_seal,
|
||||
modifier_item_trinity_seal,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_trinity_seal"}
|
||||
)
|
||||
____exports.modifier_item_trinity_seal = modifier_item_trinity_seal
|
||||
return ____exports
|
||||
@@ -0,0 +1,35 @@
|
||||
local ____lualib = require("lualib_bundle")
|
||||
local __TS__Class = ____lualib.__TS__Class
|
||||
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
||||
local __TS__Decorate = ____lualib.__TS__Decorate
|
||||
local __TS__SourceMapTraceBack = ____lualib.__TS__SourceMapTraceBack
|
||||
__TS__SourceMapTraceBack(debug.getinfo(1).short_src, {["8"] = 1,["9"] = 1,["10"] = 1,["11"] = 3,["12"] = 4,["13"] = 3,["14"] = 4,["15"] = 5,["16"] = 6,["19"] = 7,["20"] = 8,["21"] = 9,["22"] = 10,["23"] = 11,["24"] = 12,["26"] = 14,["27"] = 5,["28"] = 4,["29"] = 4,["30"] = 4,["31"] = 3,["34"] = 4});
|
||||
local ____exports = {}
|
||||
local ____dota_ts_adapter = require("lib.dota_ts_adapter")
|
||||
local BaseItem = ____dota_ts_adapter.BaseItem
|
||||
local registerAbility = ____dota_ts_adapter.registerAbility
|
||||
____exports.item_critical_paladin_sword = __TS__Class()
|
||||
local item_critical_paladin_sword = ____exports.item_critical_paladin_sword
|
||||
item_critical_paladin_sword.name = "item_critical_paladin_sword"
|
||||
__TS__ClassExtends(item_critical_paladin_sword, BaseItem)
|
||||
function item_critical_paladin_sword.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local mult = self:GetSpecialValueFor("crit_multiplier")
|
||||
print("[Item Test] Adding crit modifier")
|
||||
local stackingCritMod = self:GetCaster():FindModifierByName("modifier_stacking_crit")
|
||||
if stackingCritMod then
|
||||
local ability = self
|
||||
stackingCritMod:AddCustomCrit(0, mult, "item_critical_paladin_sword", ability)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_critical_paladin_sword = __TS__Decorate(
|
||||
item_critical_paladin_sword,
|
||||
item_critical_paladin_sword,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_critical_paladin_sword"}
|
||||
)
|
||||
____exports.item_critical_paladin_sword = item_critical_paladin_sword
|
||||
return ____exports
|
||||
@@ -0,0 +1,104 @@
|
||||
local ____lualib = require("lualib_bundle")
|
||||
local __TS__Class = ____lualib.__TS__Class
|
||||
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
||||
local __TS__Decorate = ____lualib.__TS__Decorate
|
||||
local __TS__SourceMapTraceBack = ____lualib.__TS__SourceMapTraceBack
|
||||
__TS__SourceMapTraceBack(debug.getinfo(1).short_src, {["8"] = 1,["9"] = 1,["10"] = 1,["11"] = 1,["12"] = 1,["13"] = 3,["14"] = 4,["15"] = 3,["16"] = 4,["17"] = 5,["18"] = 6,["21"] = 8,["22"] = 9,["25"] = 11,["26"] = 13,["27"] = 14,["29"] = 18,["30"] = 19,["32"] = 21,["33"] = 5,["34"] = 4,["35"] = 4,["36"] = 4,["37"] = 3,["40"] = 4,["41"] = 25,["42"] = 26,["43"] = 25,["44"] = 26,["45"] = 27,["46"] = 28,["47"] = 27,["48"] = 31,["49"] = 32,["50"] = 31,["51"] = 35,["52"] = 36,["53"] = 35,["54"] = 39,["55"] = 40,["56"] = 39,["57"] = 43,["58"] = 44,["59"] = 43,["60"] = 47,["61"] = 48,["64"] = 49,["65"] = 50,["66"] = 52,["67"] = 47,["68"] = 55,["69"] = 56,["70"] = 55,["71"] = 26,["72"] = 26,["73"] = 26,["74"] = 25,["77"] = 26,["78"] = 60,["79"] = 61,["80"] = 60,["81"] = 61,["82"] = 62,["83"] = 63,["84"] = 62,["85"] = 65,["86"] = 66,["87"] = 65,["88"] = 68,["89"] = 69,["90"] = 68,["91"] = 71,["92"] = 72,["93"] = 71,["94"] = 74,["95"] = 75,["96"] = 74,["97"] = 61,["98"] = 61,["99"] = 61,["100"] = 60,["103"] = 61});
|
||||
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
|
||||
____exports.item_power_of_grow = __TS__Class()
|
||||
local item_power_of_grow = ____exports.item_power_of_grow
|
||||
item_power_of_grow.name = "item_power_of_grow"
|
||||
__TS__ClassExtends(item_power_of_grow, BaseItem)
|
||||
function item_power_of_grow.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local stats = self:GetSpecialValueFor("bonus_stats")
|
||||
if caster:HasModifier("modifier_item_power_of_grow") then
|
||||
caster:FindModifierByName("modifier_item_power_of_grow_scale"):SetStackCount(caster:FindModifierByName("modifier_item_power_of_grow_scale"):GetStackCount() + stats)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, "modifier_item_power_of_grow", {})
|
||||
caster:AddNewModifier(caster, self, "modifier_item_power_of_grow_scale", {}):SetStackCount(stats)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_power_of_grow = __TS__Decorate(
|
||||
item_power_of_grow,
|
||||
item_power_of_grow,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_power_of_grow"}
|
||||
)
|
||||
____exports.item_power_of_grow = item_power_of_grow
|
||||
____exports.modifier_item_power_of_grow = __TS__Class()
|
||||
local modifier_item_power_of_grow = ____exports.modifier_item_power_of_grow
|
||||
modifier_item_power_of_grow.name = "modifier_item_power_of_grow"
|
||||
__TS__ClassExtends(modifier_item_power_of_grow, BaseModifier)
|
||||
function modifier_item_power_of_grow.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_power_of_grow.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_power_of_grow.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_power_of_grow.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_DAMAGEOUTGOING_PERCENTAGE, MODIFIER_PROPERTY_MODEL_SCALE}
|
||||
end
|
||||
function modifier_item_power_of_grow.prototype.OnCreated(self)
|
||||
self:StartIntervalThink(0.1)
|
||||
end
|
||||
function modifier_item_power_of_grow.prototype.OnIntervalThink(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local parent = self:GetParent()
|
||||
local scale = (parent:GetModelScale() - 1) * 100
|
||||
self:SetStackCount(scale)
|
||||
end
|
||||
function modifier_item_power_of_grow.prototype.GetModifierDamageOutgoing_Percentage(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_power_of_grow = __TS__Decorate(
|
||||
modifier_item_power_of_grow,
|
||||
modifier_item_power_of_grow,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_power_of_grow"}
|
||||
)
|
||||
____exports.modifier_item_power_of_grow = modifier_item_power_of_grow
|
||||
____exports.modifier_item_power_of_grow_scale = __TS__Class()
|
||||
local modifier_item_power_of_grow_scale = ____exports.modifier_item_power_of_grow_scale
|
||||
modifier_item_power_of_grow_scale.name = "modifier_item_power_of_grow_scale"
|
||||
__TS__ClassExtends(modifier_item_power_of_grow_scale, BaseModifier)
|
||||
function modifier_item_power_of_grow_scale.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_power_of_grow_scale.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_power_of_grow_scale.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_MODEL_SCALE}
|
||||
end
|
||||
function modifier_item_power_of_grow_scale.prototype.GetTexture(self)
|
||||
return "blackshop/magic_mushroom"
|
||||
end
|
||||
function modifier_item_power_of_grow_scale.prototype.GetModifierModelScale(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_power_of_grow_scale = __TS__Decorate(
|
||||
modifier_item_power_of_grow_scale,
|
||||
modifier_item_power_of_grow_scale,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_power_of_grow_scale"}
|
||||
)
|
||||
____exports.modifier_item_power_of_grow_scale = modifier_item_power_of_grow_scale
|
||||
return ____exports
|
||||
@@ -0,0 +1,161 @@
|
||||
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
|
||||
____exports.modifier_item_heavenly_dawn_chorus_status = __TS__Class()
|
||||
local modifier_item_heavenly_dawn_chorus_status = ____exports.modifier_item_heavenly_dawn_chorus_status
|
||||
modifier_item_heavenly_dawn_chorus_status.name = "modifier_item_heavenly_dawn_chorus_status"
|
||||
modifier_item_heavenly_dawn_chorus_status.____file_path = "scripts/vscripts/items/blackshop/heavenly/item_blackshop_heavenly_dawn_chorus.lua"
|
||||
__TS__ClassExtends(modifier_item_heavenly_dawn_chorus_status, BaseModifier)
|
||||
function modifier_item_heavenly_dawn_chorus_status.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_heavenly_dawn_chorus_status.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_heavenly_dawn_chorus_status.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_heavenly_dawn_chorus_status.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_STATUS_RESISTANCE_STACKING}
|
||||
end
|
||||
function modifier_item_heavenly_dawn_chorus_status.prototype.GetModifierStatusResistanceStacking(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_heavenly_dawn_chorus_status = __TS__Decorate(
|
||||
modifier_item_heavenly_dawn_chorus_status,
|
||||
modifier_item_heavenly_dawn_chorus_status,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_heavenly_dawn_chorus_status"}
|
||||
)
|
||||
____exports.modifier_item_heavenly_dawn_chorus_status = modifier_item_heavenly_dawn_chorus_status
|
||||
____exports.modifier_item_heavenly_dawn_chorus_mr = __TS__Class()
|
||||
local modifier_item_heavenly_dawn_chorus_mr = ____exports.modifier_item_heavenly_dawn_chorus_mr
|
||||
modifier_item_heavenly_dawn_chorus_mr.name = "modifier_item_heavenly_dawn_chorus_mr"
|
||||
modifier_item_heavenly_dawn_chorus_mr.____file_path = "scripts/vscripts/items/blackshop/heavenly/item_blackshop_heavenly_dawn_chorus.lua"
|
||||
__TS__ClassExtends(modifier_item_heavenly_dawn_chorus_mr, BaseModifier)
|
||||
function modifier_item_heavenly_dawn_chorus_mr.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_heavenly_dawn_chorus_mr.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_heavenly_dawn_chorus_mr.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_heavenly_dawn_chorus_mr.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_MAGICAL_RESISTANCE_BONUS}
|
||||
end
|
||||
function modifier_item_heavenly_dawn_chorus_mr.prototype.GetModifierMagicalResistanceBonus(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_heavenly_dawn_chorus_mr = __TS__Decorate(
|
||||
modifier_item_heavenly_dawn_chorus_mr,
|
||||
modifier_item_heavenly_dawn_chorus_mr,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_heavenly_dawn_chorus_mr"}
|
||||
)
|
||||
____exports.modifier_item_heavenly_dawn_chorus_mr = modifier_item_heavenly_dawn_chorus_mr
|
||||
____exports.modifier_item_heavenly_dawn_chorus_display = __TS__Class()
|
||||
local modifier_item_heavenly_dawn_chorus_display = ____exports.modifier_item_heavenly_dawn_chorus_display
|
||||
modifier_item_heavenly_dawn_chorus_display.name = "modifier_item_heavenly_dawn_chorus_display"
|
||||
modifier_item_heavenly_dawn_chorus_display.____file_path = "scripts/vscripts/items/blackshop/heavenly/item_blackshop_heavenly_dawn_chorus.lua"
|
||||
__TS__ClassExtends(modifier_item_heavenly_dawn_chorus_display, BaseModifier)
|
||||
function modifier_item_heavenly_dawn_chorus_display.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_heavenly_dawn_chorus_display.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_heavenly_dawn_chorus_display.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_heavenly_dawn_chorus_display.prototype.GetTexture(self)
|
||||
return "../items/blackshop/dawn_chorus"
|
||||
end
|
||||
modifier_item_heavenly_dawn_chorus_display = __TS__Decorate(
|
||||
modifier_item_heavenly_dawn_chorus_display,
|
||||
modifier_item_heavenly_dawn_chorus_display,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_heavenly_dawn_chorus_display"}
|
||||
)
|
||||
____exports.modifier_item_heavenly_dawn_chorus_display = modifier_item_heavenly_dawn_chorus_display
|
||||
--- Рассветный хор — каждому союзнику в радиусе в стаки добавляет значения из KV.
|
||||
____exports.item_blackshop_heavenly_dawn_chorus = __TS__Class()
|
||||
local item_blackshop_heavenly_dawn_chorus = ____exports.item_blackshop_heavenly_dawn_chorus
|
||||
item_blackshop_heavenly_dawn_chorus.name = "item_blackshop_heavenly_dawn_chorus"
|
||||
item_blackshop_heavenly_dawn_chorus.____file_path = "scripts/vscripts/items/blackshop/heavenly/item_blackshop_heavenly_dawn_chorus.lua"
|
||||
__TS__ClassExtends(item_blackshop_heavenly_dawn_chorus, BaseItem)
|
||||
function item_blackshop_heavenly_dawn_chorus.prototype.GetAOERadius(self)
|
||||
return self:GetSpecialValueFor("radius")
|
||||
end
|
||||
function item_blackshop_heavenly_dawn_chorus.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster or not caster:IsRealHero() then
|
||||
return
|
||||
end
|
||||
local radius = self:GetSpecialValueFor("radius")
|
||||
local srAdd = self:GetSpecialValueFor("status_resist")
|
||||
local mrAdd = self:GetSpecialValueFor("magic_resist")
|
||||
local ms = ____exports.modifier_item_heavenly_dawn_chorus_status.name
|
||||
local mm = ____exports.modifier_item_heavenly_dawn_chorus_mr.name
|
||||
local md = ____exports.modifier_item_heavenly_dawn_chorus_display.name
|
||||
EmitSoundOn("Hero_Chen.HandOfGod", caster)
|
||||
local allies = FindUnitsInRadius(
|
||||
caster:GetTeamNumber(),
|
||||
caster:GetAbsOrigin(),
|
||||
nil,
|
||||
radius,
|
||||
DOTA_UNIT_TARGET_TEAM_FRIENDLY,
|
||||
DOTA_UNIT_TARGET_HERO,
|
||||
DOTA_UNIT_TARGET_FLAG_NOT_ILLUSIONS,
|
||||
FIND_ANY_ORDER,
|
||||
false
|
||||
)
|
||||
for ____, hero in ipairs(allies) do
|
||||
do
|
||||
if not hero or not IsValidEntity(hero) or not hero:IsAlive() then
|
||||
goto __continue20
|
||||
end
|
||||
local m = hero:FindModifierByName(ms)
|
||||
if m then
|
||||
m:SetStackCount(m:GetStackCount() + srAdd)
|
||||
else
|
||||
hero:AddNewModifier(caster, self, ms, {}):SetStackCount(srAdd)
|
||||
end
|
||||
m = hero:FindModifierByName(mm)
|
||||
if m then
|
||||
m:SetStackCount(m:GetStackCount() + mrAdd)
|
||||
else
|
||||
hero:AddNewModifier(caster, self, mm, {}):SetStackCount(mrAdd)
|
||||
end
|
||||
local d = hero:FindModifierByName(md)
|
||||
if d then
|
||||
d:SetStackCount(d:GetStackCount() + 1)
|
||||
else
|
||||
hero:AddNewModifier(caster, self, md, {}):SetStackCount(1)
|
||||
end
|
||||
local pfx = ParticleManager:CreateParticle("particles/items_fx/healing_clarity.vpcf", PATTACH_ABSORIGIN_FOLLOW, hero)
|
||||
ParticleManager:ReleaseParticleIndex(pfx)
|
||||
end
|
||||
::__continue20::
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_blackshop_heavenly_dawn_chorus = __TS__Decorate(
|
||||
item_blackshop_heavenly_dawn_chorus,
|
||||
item_blackshop_heavenly_dawn_chorus,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blackshop_heavenly_dawn_chorus"}
|
||||
)
|
||||
____exports.item_blackshop_heavenly_dawn_chorus = item_blackshop_heavenly_dawn_chorus
|
||||
return ____exports
|
||||
@@ -0,0 +1,345 @@
|
||||
local ____lualib = require("lualib_bundle")
|
||||
local __TS__Class = ____lualib.__TS__Class
|
||||
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
||||
local __TS__Decorate = ____lualib.__TS__Decorate
|
||||
local __TS__ObjectAssign = ____lualib.__TS__ObjectAssign
|
||||
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 ____heal_tracker = require("utils.heal_tracker")
|
||||
local HealWithBattlePass = ____heal_tracker.HealWithBattlePass
|
||||
local function fontMercyReadParams(self, raw)
|
||||
if not raw then
|
||||
return nil
|
||||
end
|
||||
local t = raw
|
||||
local heal_flat = t.heal_flat
|
||||
local heal_max_hp_pct = t.heal_max_hp_pct
|
||||
local radius = t.radius
|
||||
local crisis_hp_pct = t.crisis_hp_pct
|
||||
local hero_cooldown = t.hero_cooldown
|
||||
if heal_flat == nil or heal_max_hp_pct == nil or radius == nil or crisis_hp_pct == nil or hero_cooldown == nil then
|
||||
return nil
|
||||
end
|
||||
return {
|
||||
heal_flat = heal_flat,
|
||||
heal_max_hp_pct = heal_max_hp_pct,
|
||||
radius = radius,
|
||||
crisis_hp_pct = crisis_hp_pct,
|
||||
hero_cooldown = hero_cooldown
|
||||
}
|
||||
end
|
||||
local function fontMercyHasCrisisAlly(self, caster, v)
|
||||
local allies = FindUnitsInRadius(
|
||||
caster:GetTeamNumber(),
|
||||
caster:GetAbsOrigin(),
|
||||
nil,
|
||||
v.radius,
|
||||
DOTA_UNIT_TARGET_TEAM_FRIENDLY,
|
||||
DOTA_UNIT_TARGET_HERO,
|
||||
DOTA_UNIT_TARGET_FLAG_NOT_ILLUSIONS,
|
||||
FIND_ANY_ORDER,
|
||||
false
|
||||
)
|
||||
for ____, hero in ipairs(allies) do
|
||||
do
|
||||
if not hero or not IsValidEntity(hero) or not hero:IsAlive() then
|
||||
goto __continue6
|
||||
end
|
||||
if hero:GetHealthPercent() < v.crisis_hp_pct then
|
||||
return true
|
||||
end
|
||||
end
|
||||
::__continue6::
|
||||
end
|
||||
return false
|
||||
end
|
||||
local function fontMercyPerformEffect(self, caster, v, refAbility)
|
||||
local pctHeal = v.heal_max_hp_pct / 100
|
||||
EmitSoundOn("Hero_Omniknight.GuardianAngel", caster)
|
||||
local allies = FindUnitsInRadius(
|
||||
caster:GetTeamNumber(),
|
||||
caster:GetAbsOrigin(),
|
||||
nil,
|
||||
v.radius,
|
||||
DOTA_UNIT_TARGET_TEAM_FRIENDLY,
|
||||
DOTA_UNIT_TARGET_HERO,
|
||||
DOTA_UNIT_TARGET_FLAG_NOT_ILLUSIONS,
|
||||
FIND_ANY_ORDER,
|
||||
false
|
||||
)
|
||||
for ____, hero in ipairs(allies) do
|
||||
do
|
||||
if not hero or not IsValidEntity(hero) or not hero:IsAlive() then
|
||||
goto __continue11
|
||||
end
|
||||
local amount = v.heal_flat + hero:GetMaxHealth() * pctHeal
|
||||
if amount > 0 then
|
||||
if hero == caster then
|
||||
hero:Heal(amount, refAbility)
|
||||
else
|
||||
HealWithBattlePass(
|
||||
nil,
|
||||
hero,
|
||||
amount,
|
||||
refAbility,
|
||||
caster,
|
||||
true
|
||||
)
|
||||
end
|
||||
end
|
||||
hero:Purge(
|
||||
false,
|
||||
true,
|
||||
false,
|
||||
false,
|
||||
false
|
||||
)
|
||||
local pfx = ParticleManager:CreateParticle("particles/units/heroes/hero_omniknight/omniknight_purification_cast.vpcf", PATTACH_ABSORIGIN_FOLLOW, hero)
|
||||
ParticleManager:ReleaseParticleIndex(pfx)
|
||||
end
|
||||
::__continue11::
|
||||
end
|
||||
end
|
||||
--- Скрытая логика (как status/mr у рассветного хора): тикер и KV-заначка; без иконки в столбце бафов.
|
||||
-- После каждого срабатывания купели следующий интервал: hero_cooldown / 2^(N−1), N — номер уже случившегося прока.
|
||||
____exports.modifier_item_heavenly_font_of_mercy_engine = __TS__Class()
|
||||
local modifier_item_heavenly_font_of_mercy_engine = ____exports.modifier_item_heavenly_font_of_mercy_engine
|
||||
modifier_item_heavenly_font_of_mercy_engine.name = "modifier_item_heavenly_font_of_mercy_engine"
|
||||
modifier_item_heavenly_font_of_mercy_engine.____file_path = "scripts/vscripts/items/blackshop/heavenly/item_blackshop_heavenly_font_of_mercy.lua"
|
||||
__TS__ClassExtends(modifier_item_heavenly_font_of_mercy_engine, BaseModifier)
|
||||
function modifier_item_heavenly_font_of_mercy_engine.prototype.____constructor(self, ...)
|
||||
BaseModifier.prototype.____constructor(self, ...)
|
||||
self.cdUntil = 0
|
||||
self.mercyProcCount = 0
|
||||
end
|
||||
function modifier_item_heavenly_font_of_mercy_engine.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_heavenly_font_of_mercy_engine.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_heavenly_font_of_mercy_engine.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_heavenly_font_of_mercy_engine.prototype.OnCreated(self, params)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local v = fontMercyReadParams(nil, params)
|
||||
if not v then
|
||||
return
|
||||
end
|
||||
self.values = v
|
||||
local t = params
|
||||
self.cdUntil = t.cd_until or 0
|
||||
self.mercyProcCount = t.mercy_proc_count or 0
|
||||
self:StartIntervalThink(____exports.modifier_item_heavenly_font_of_mercy_engine.thinkInterval)
|
||||
self:refreshCooldownVisual()
|
||||
end
|
||||
function modifier_item_heavenly_font_of_mercy_engine.prototype.nextCooldownDuration(self)
|
||||
local base = self.values.hero_cooldown
|
||||
local exp = math.max(0, self.mercyProcCount - 1)
|
||||
return math.max(____exports.modifier_item_heavenly_font_of_mercy_engine.cooldownFloor, base / 2 ^ exp)
|
||||
end
|
||||
function modifier_item_heavenly_font_of_mercy_engine.prototype.refreshCooldownVisual(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local hero = self:GetParent()
|
||||
if not hero or not IsValidEntity(hero) then
|
||||
return
|
||||
end
|
||||
local name = ____exports.modifier_item_heavenly_font_of_mercy_cooldown.name
|
||||
local now = GameRules:GetGameTime()
|
||||
local remaining = self.cdUntil - now
|
||||
local existing = hero:FindModifierByName(name)
|
||||
if remaining <= 0.05 then
|
||||
if existing then
|
||||
existing:Destroy()
|
||||
end
|
||||
return
|
||||
end
|
||||
if existing then
|
||||
existing:SetDuration(remaining, true)
|
||||
else
|
||||
local created = hero:AddNewModifier(
|
||||
hero,
|
||||
getModifierSourceAbility(nil, hero),
|
||||
name,
|
||||
{}
|
||||
)
|
||||
created:SetDuration(remaining, true)
|
||||
end
|
||||
end
|
||||
function modifier_item_heavenly_font_of_mercy_engine.prototype.OnIntervalThink(self)
|
||||
local hero = self:GetParent()
|
||||
if not hero or not hero:IsRealHero() or not IsValidEntity(hero) or not hero:IsAlive() then
|
||||
return
|
||||
end
|
||||
if not self.values then
|
||||
return
|
||||
end
|
||||
local now = GameRules:GetGameTime()
|
||||
if now < self.cdUntil then
|
||||
return
|
||||
end
|
||||
if not fontMercyHasCrisisAlly(nil, hero, self.values) then
|
||||
return
|
||||
end
|
||||
fontMercyPerformEffect(nil, hero, self.values, nil)
|
||||
self.mercyProcCount = self.mercyProcCount + 1
|
||||
self.cdUntil = now + self:nextCooldownDuration()
|
||||
self:refreshCooldownVisual()
|
||||
local disp = hero:FindModifierByName(____exports.modifier_item_heavenly_font_of_mercy_display.name)
|
||||
if disp then
|
||||
disp:SetStackCount(disp:GetStackCount() + 1)
|
||||
end
|
||||
end
|
||||
modifier_item_heavenly_font_of_mercy_engine.thinkInterval = 0.35
|
||||
modifier_item_heavenly_font_of_mercy_engine.cooldownFloor = 12
|
||||
modifier_item_heavenly_font_of_mercy_engine = __TS__Decorate(
|
||||
modifier_item_heavenly_font_of_mercy_engine,
|
||||
modifier_item_heavenly_font_of_mercy_engine,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_heavenly_font_of_mercy_engine"}
|
||||
)
|
||||
____exports.modifier_item_heavenly_font_of_mercy_engine = modifier_item_heavenly_font_of_mercy_engine
|
||||
--- Отображение оставшегося КД автопрока (круг на иконке бафа).
|
||||
____exports.modifier_item_heavenly_font_of_mercy_cooldown = __TS__Class()
|
||||
local modifier_item_heavenly_font_of_mercy_cooldown = ____exports.modifier_item_heavenly_font_of_mercy_cooldown
|
||||
modifier_item_heavenly_font_of_mercy_cooldown.name = "modifier_item_heavenly_font_of_mercy_cooldown"
|
||||
modifier_item_heavenly_font_of_mercy_cooldown.____file_path = "scripts/vscripts/items/blackshop/heavenly/item_blackshop_heavenly_font_of_mercy.lua"
|
||||
__TS__ClassExtends(modifier_item_heavenly_font_of_mercy_cooldown, BaseModifier)
|
||||
function modifier_item_heavenly_font_of_mercy_cooldown.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_heavenly_font_of_mercy_cooldown.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_heavenly_font_of_mercy_cooldown.prototype.IsDebuff(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_heavenly_font_of_mercy_cooldown.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_heavenly_font_of_mercy_cooldown.prototype.GetTexture(self)
|
||||
return "../items/blackshop/holy_mercy"
|
||||
end
|
||||
function modifier_item_heavenly_font_of_mercy_cooldown.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_EVENT_ON_DEATH}
|
||||
end
|
||||
function modifier_item_heavenly_font_of_mercy_cooldown.prototype.OnDeath(self, keys)
|
||||
local parent = self:GetParent()
|
||||
if not parent then
|
||||
return
|
||||
end
|
||||
local eng = ____exports.modifier_item_heavenly_font_of_mercy_engine.name
|
||||
local disp = ____exports.modifier_item_heavenly_font_of_mercy_display.name
|
||||
local m = parent:FindModifierByName(eng)
|
||||
if m then
|
||||
m:Destroy()
|
||||
end
|
||||
local d = parent:FindModifierByName(disp)
|
||||
if d then
|
||||
d:Destroy()
|
||||
end
|
||||
end
|
||||
modifier_item_heavenly_font_of_mercy_cooldown = __TS__Decorate(
|
||||
modifier_item_heavenly_font_of_mercy_cooldown,
|
||||
modifier_item_heavenly_font_of_mercy_cooldown,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_heavenly_font_of_mercy_cooldown"}
|
||||
)
|
||||
____exports.modifier_item_heavenly_font_of_mercy_cooldown = modifier_item_heavenly_font_of_mercy_cooldown
|
||||
--- Иконка в UI (как modifier_item_heavenly_dawn_chorus_display).
|
||||
____exports.modifier_item_heavenly_font_of_mercy_display = __TS__Class()
|
||||
local modifier_item_heavenly_font_of_mercy_display = ____exports.modifier_item_heavenly_font_of_mercy_display
|
||||
modifier_item_heavenly_font_of_mercy_display.name = "modifier_item_heavenly_font_of_mercy_display"
|
||||
modifier_item_heavenly_font_of_mercy_display.____file_path = "scripts/vscripts/items/blackshop/heavenly/item_blackshop_heavenly_font_of_mercy.lua"
|
||||
__TS__ClassExtends(modifier_item_heavenly_font_of_mercy_display, BaseModifier)
|
||||
function modifier_item_heavenly_font_of_mercy_display.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_heavenly_font_of_mercy_display.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_heavenly_font_of_mercy_display.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_heavenly_font_of_mercy_display.prototype.GetTexture(self)
|
||||
return "../items/blackshop/holy_mercy"
|
||||
end
|
||||
modifier_item_heavenly_font_of_mercy_display = __TS__Decorate(
|
||||
modifier_item_heavenly_font_of_mercy_display,
|
||||
modifier_item_heavenly_font_of_mercy_display,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_heavenly_font_of_mercy_display"}
|
||||
)
|
||||
____exports.modifier_item_heavenly_font_of_mercy_display = modifier_item_heavenly_font_of_mercy_display
|
||||
--- Купель милости — расходник; после применения как покров: вечные модификаторы + автопрок по условиям из KV.
|
||||
____exports.item_blackshop_heavenly_font_of_mercy = __TS__Class()
|
||||
local item_blackshop_heavenly_font_of_mercy = ____exports.item_blackshop_heavenly_font_of_mercy
|
||||
item_blackshop_heavenly_font_of_mercy.name = "item_blackshop_heavenly_font_of_mercy"
|
||||
item_blackshop_heavenly_font_of_mercy.____file_path = "scripts/vscripts/items/blackshop/heavenly/item_blackshop_heavenly_font_of_mercy.lua"
|
||||
__TS__ClassExtends(item_blackshop_heavenly_font_of_mercy, BaseItem)
|
||||
function item_blackshop_heavenly_font_of_mercy.prototype.Precache(context)
|
||||
PrecacheResource("particle", "particles/units/heroes/hero_omniknight/omniknight_purification_cast.vpcf", context)
|
||||
end
|
||||
function item_blackshop_heavenly_font_of_mercy.prototype.GetAOERadius(self)
|
||||
return self:GetSpecialValueFor("radius")
|
||||
end
|
||||
function item_blackshop_heavenly_font_of_mercy.prototype.HasEngine(self, hero)
|
||||
return hero:HasModifier(____exports.modifier_item_heavenly_font_of_mercy_engine.name)
|
||||
end
|
||||
function item_blackshop_heavenly_font_of_mercy.prototype.BuildStoredFromKv(self)
|
||||
return {
|
||||
heal_flat = self:GetSpecialValueFor("heal_flat"),
|
||||
heal_max_hp_pct = self:GetSpecialValueFor("heal_max_hp_pct"),
|
||||
radius = self:GetSpecialValueFor("radius"),
|
||||
crisis_hp_pct = self:GetSpecialValueFor("crisis_hp_pct"),
|
||||
hero_cooldown = self:GetSpecialValueFor("hero_cooldown")
|
||||
}
|
||||
end
|
||||
function item_blackshop_heavenly_font_of_mercy.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster or not caster:IsRealHero() then
|
||||
return
|
||||
end
|
||||
if self:HasEngine(caster) then
|
||||
return
|
||||
end
|
||||
local v = self:BuildStoredFromKv()
|
||||
local heroCd = v.hero_cooldown
|
||||
local now = GameRules:GetGameTime()
|
||||
fontMercyPerformEffect(nil, caster, v, self)
|
||||
local eng = ____exports.modifier_item_heavenly_font_of_mercy_engine.name
|
||||
local dis = ____exports.modifier_item_heavenly_font_of_mercy_display.name
|
||||
caster:AddNewModifier(
|
||||
caster,
|
||||
self,
|
||||
eng,
|
||||
__TS__ObjectAssign({}, v, {cd_until = now + heroCd, mercy_proc_count = 1})
|
||||
)
|
||||
local d = caster:FindModifierByName(dis)
|
||||
if d then
|
||||
d:SetStackCount(d:GetStackCount() + 1)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, dis, {}):SetStackCount(1)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_blackshop_heavenly_font_of_mercy = __TS__Decorate(
|
||||
item_blackshop_heavenly_font_of_mercy,
|
||||
item_blackshop_heavenly_font_of_mercy,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blackshop_heavenly_font_of_mercy"}
|
||||
)
|
||||
____exports.item_blackshop_heavenly_font_of_mercy = item_blackshop_heavenly_font_of_mercy
|
||||
return ____exports
|
||||
@@ -0,0 +1,37 @@
|
||||
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 registerAbility = ____dota_ts_adapter.registerAbility
|
||||
local ____blackshop = require("blackshop")
|
||||
local BlackShop = ____blackshop.BlackShop
|
||||
____exports.item_blackshop_heavenly_reset_to_zero = __TS__Class()
|
||||
local item_blackshop_heavenly_reset_to_zero = ____exports.item_blackshop_heavenly_reset_to_zero
|
||||
item_blackshop_heavenly_reset_to_zero.name = "item_blackshop_heavenly_reset_to_zero"
|
||||
item_blackshop_heavenly_reset_to_zero.____file_path = "scripts/vscripts/items/blackshop/heavenly/item_blackshop_heavenly_reset_to_zero.lua"
|
||||
__TS__ClassExtends(item_blackshop_heavenly_reset_to_zero, BaseItem)
|
||||
function item_blackshop_heavenly_reset_to_zero.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
BlackShop:getInstance():ResetUniqueItems()
|
||||
EmitSoundOn("Hero_Phoenix.SuperNova.Explode", caster)
|
||||
local particle = ParticleManager:CreateParticle("particles/units/heroes/hero_phoenix/phoenix_supernova_reborn.vpcf", PATTACH_ABSORIGIN_FOLLOW, caster)
|
||||
ParticleManager:ReleaseParticleIndex(particle)
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_blackshop_heavenly_reset_to_zero = __TS__Decorate(
|
||||
item_blackshop_heavenly_reset_to_zero,
|
||||
item_blackshop_heavenly_reset_to_zero,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blackshop_heavenly_reset_to_zero"}
|
||||
)
|
||||
____exports.item_blackshop_heavenly_reset_to_zero = item_blackshop_heavenly_reset_to_zero
|
||||
return ____exports
|
||||
@@ -0,0 +1,160 @@
|
||||
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
|
||||
____exports.modifier_item_heavenly_sanctuary_veil_status = __TS__Class()
|
||||
local modifier_item_heavenly_sanctuary_veil_status = ____exports.modifier_item_heavenly_sanctuary_veil_status
|
||||
modifier_item_heavenly_sanctuary_veil_status.name = "modifier_item_heavenly_sanctuary_veil_status"
|
||||
modifier_item_heavenly_sanctuary_veil_status.____file_path = "scripts/vscripts/items/blackshop/heavenly/item_blackshop_heavenly_sanctuary_veil.lua"
|
||||
__TS__ClassExtends(modifier_item_heavenly_sanctuary_veil_status, BaseModifier)
|
||||
function modifier_item_heavenly_sanctuary_veil_status.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_heavenly_sanctuary_veil_status.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_heavenly_sanctuary_veil_status.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_heavenly_sanctuary_veil_status.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_STATUS_RESISTANCE_STACKING}
|
||||
end
|
||||
function modifier_item_heavenly_sanctuary_veil_status.prototype.GetModifierStatusResistanceStacking(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_heavenly_sanctuary_veil_status = __TS__Decorate(
|
||||
modifier_item_heavenly_sanctuary_veil_status,
|
||||
modifier_item_heavenly_sanctuary_veil_status,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_heavenly_sanctuary_veil_status"}
|
||||
)
|
||||
____exports.modifier_item_heavenly_sanctuary_veil_status = modifier_item_heavenly_sanctuary_veil_status
|
||||
____exports.modifier_item_heavenly_sanctuary_veil_mr = __TS__Class()
|
||||
local modifier_item_heavenly_sanctuary_veil_mr = ____exports.modifier_item_heavenly_sanctuary_veil_mr
|
||||
modifier_item_heavenly_sanctuary_veil_mr.name = "modifier_item_heavenly_sanctuary_veil_mr"
|
||||
modifier_item_heavenly_sanctuary_veil_mr.____file_path = "scripts/vscripts/items/blackshop/heavenly/item_blackshop_heavenly_sanctuary_veil.lua"
|
||||
__TS__ClassExtends(modifier_item_heavenly_sanctuary_veil_mr, BaseModifier)
|
||||
function modifier_item_heavenly_sanctuary_veil_mr.prototype.____constructor(self, ...)
|
||||
BaseModifier.prototype.____constructor(self, ...)
|
||||
self.totalMagicResistBonus = 0
|
||||
end
|
||||
function modifier_item_heavenly_sanctuary_veil_mr.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_heavenly_sanctuary_veil_mr.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_heavenly_sanctuary_veil_mr.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_heavenly_sanctuary_veil_mr.prototype.addMagicResistFromAbilityValue(self, amount)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local n = math.floor(amount)
|
||||
if n <= 0 then
|
||||
return
|
||||
end
|
||||
self.totalMagicResistBonus = self.totalMagicResistBonus + n
|
||||
end
|
||||
function modifier_item_heavenly_sanctuary_veil_mr.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_MAGICAL_RESISTANCE_BONUS}
|
||||
end
|
||||
function modifier_item_heavenly_sanctuary_veil_mr.prototype.GetModifierMagicalResistanceBonus(self)
|
||||
return self.totalMagicResistBonus
|
||||
end
|
||||
modifier_item_heavenly_sanctuary_veil_mr = __TS__Decorate(
|
||||
modifier_item_heavenly_sanctuary_veil_mr,
|
||||
modifier_item_heavenly_sanctuary_veil_mr,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_heavenly_sanctuary_veil_mr"}
|
||||
)
|
||||
____exports.modifier_item_heavenly_sanctuary_veil_mr = modifier_item_heavenly_sanctuary_veil_mr
|
||||
____exports.modifier_item_heavenly_sanctuary_veil_display = __TS__Class()
|
||||
local modifier_item_heavenly_sanctuary_veil_display = ____exports.modifier_item_heavenly_sanctuary_veil_display
|
||||
modifier_item_heavenly_sanctuary_veil_display.name = "modifier_item_heavenly_sanctuary_veil_display"
|
||||
modifier_item_heavenly_sanctuary_veil_display.____file_path = "scripts/vscripts/items/blackshop/heavenly/item_blackshop_heavenly_sanctuary_veil.lua"
|
||||
__TS__ClassExtends(modifier_item_heavenly_sanctuary_veil_display, BaseModifier)
|
||||
function modifier_item_heavenly_sanctuary_veil_display.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_heavenly_sanctuary_veil_display.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_heavenly_sanctuary_veil_display.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_heavenly_sanctuary_veil_display.prototype.GetTexture(self)
|
||||
return "../items/blackshop/sanctuary_veil"
|
||||
end
|
||||
modifier_item_heavenly_sanctuary_veil_display = __TS__Decorate(
|
||||
modifier_item_heavenly_sanctuary_veil_display,
|
||||
modifier_item_heavenly_sanctuary_veil_display,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_heavenly_sanctuary_veil_display"}
|
||||
)
|
||||
____exports.modifier_item_heavenly_sanctuary_veil_display = modifier_item_heavenly_sanctuary_veil_display
|
||||
--- Покров святилища — status_resist суммируется в стеке статус-модификатора; magic_resist копится в поле MR-модификатора при каждом касте (константы из KV).
|
||||
____exports.item_blackshop_heavenly_sanctuary_veil = __TS__Class()
|
||||
local item_blackshop_heavenly_sanctuary_veil = ____exports.item_blackshop_heavenly_sanctuary_veil
|
||||
item_blackshop_heavenly_sanctuary_veil.name = "item_blackshop_heavenly_sanctuary_veil"
|
||||
item_blackshop_heavenly_sanctuary_veil.____file_path = "scripts/vscripts/items/blackshop/heavenly/item_blackshop_heavenly_sanctuary_veil.lua"
|
||||
__TS__ClassExtends(item_blackshop_heavenly_sanctuary_veil, BaseItem)
|
||||
function item_blackshop_heavenly_sanctuary_veil.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster or not caster:IsRealHero() then
|
||||
return
|
||||
end
|
||||
caster:Purge(
|
||||
false,
|
||||
true,
|
||||
false,
|
||||
false,
|
||||
false
|
||||
)
|
||||
local srAdd = self:GetSpecialValueFor("status_resist")
|
||||
local mrAdd = self:GetSpecialValueFor("magic_resist")
|
||||
local ms = ____exports.modifier_item_heavenly_sanctuary_veil_status.name
|
||||
local mm = ____exports.modifier_item_heavenly_sanctuary_veil_mr.name
|
||||
local md = ____exports.modifier_item_heavenly_sanctuary_veil_display.name
|
||||
local m = caster:FindModifierByName(ms)
|
||||
if m then
|
||||
m:SetStackCount(m:GetStackCount() + srAdd)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, ms, {}):SetStackCount(srAdd)
|
||||
end
|
||||
m = caster:FindModifierByName(mm)
|
||||
if m then
|
||||
m:addMagicResistFromAbilityValue(mrAdd)
|
||||
else
|
||||
local mrMod = caster:AddNewModifier(caster, self, mm, {})
|
||||
mrMod:addMagicResistFromAbilityValue(mrAdd)
|
||||
end
|
||||
local d = caster:FindModifierByName(md)
|
||||
if d then
|
||||
d:SetStackCount(d:GetStackCount() + 1)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, md, {}):SetStackCount(1)
|
||||
local pfx = ParticleManager:CreateParticle("particles/items_fx/black_king_bar_avatar.vpcf", PATTACH_ABSORIGIN_FOLLOW, caster)
|
||||
ParticleManager:ReleaseParticleIndex(pfx)
|
||||
end
|
||||
EmitSoundOn("Hero_Omniknight.Repel", caster)
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_blackshop_heavenly_sanctuary_veil = __TS__Decorate(
|
||||
item_blackshop_heavenly_sanctuary_veil,
|
||||
item_blackshop_heavenly_sanctuary_veil,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blackshop_heavenly_sanctuary_veil"}
|
||||
)
|
||||
____exports.item_blackshop_heavenly_sanctuary_veil = item_blackshop_heavenly_sanctuary_veil
|
||||
return ____exports
|
||||
@@ -0,0 +1,38 @@
|
||||
local ____lualib = require("lualib_bundle")
|
||||
local __TS__Class = ____lualib.__TS__Class
|
||||
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
||||
local __TS__Decorate = ____lualib.__TS__Decorate
|
||||
local __TS__SourceMapTraceBack = ____lualib.__TS__SourceMapTraceBack
|
||||
__TS__SourceMapTraceBack(debug.getinfo(1).short_src, {["8"] = 1,["9"] = 1,["10"] = 1,["11"] = 2,["12"] = 2,["13"] = 4,["14"] = 5,["15"] = 4,["16"] = 5,["17"] = 6,["18"] = 7,["21"] = 9,["22"] = 10,["25"] = 13,["26"] = 16,["27"] = 17,["28"] = 22,["29"] = 25,["30"] = 6,["31"] = 5,["32"] = 5,["33"] = 5,["34"] = 4,["37"] = 5});
|
||||
local ____exports = {}
|
||||
local ____dota_ts_adapter = require("lib.dota_ts_adapter")
|
||||
local BaseItem = ____dota_ts_adapter.BaseItem
|
||||
local registerAbility = ____dota_ts_adapter.registerAbility
|
||||
local ____blackshop = require("blackshop")
|
||||
local BlackShop = ____blackshop.BlackShop
|
||||
____exports.item_reset_to_zero = __TS__Class()
|
||||
local item_reset_to_zero = ____exports.item_reset_to_zero
|
||||
item_reset_to_zero.name = "item_reset_to_zero"
|
||||
__TS__ClassExtends(item_reset_to_zero, BaseItem)
|
||||
function item_reset_to_zero.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
BlackShop:getInstance():ResetUniqueItems()
|
||||
EmitSoundOn("Hero_Phoenix.SuperNova.Explode", caster)
|
||||
local particle = ParticleManager:CreateParticle("particles/units/heroes/hero_phoenix/phoenix_supernova_reborn.vpcf", PATTACH_ABSORIGIN_FOLLOW, caster)
|
||||
ParticleManager:ReleaseParticleIndex(particle)
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_reset_to_zero = __TS__Decorate(
|
||||
item_reset_to_zero,
|
||||
item_reset_to_zero,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_reset_to_zero"}
|
||||
)
|
||||
____exports.item_reset_to_zero = item_reset_to_zero
|
||||
return ____exports
|
||||
+138
@@ -0,0 +1,138 @@
|
||||
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
|
||||
--- Скрытый стак дальности каста — число в стаке = суммарный бонус (реплицируется на клиент для HUD).
|
||||
____exports.modifier_item_astral_anchor_cast = __TS__Class()
|
||||
local modifier_item_astral_anchor_cast = ____exports.modifier_item_astral_anchor_cast
|
||||
modifier_item_astral_anchor_cast.name = "modifier_item_astral_anchor_cast"
|
||||
modifier_item_astral_anchor_cast.____file_path = "scripts/vscripts/items/blackshop/legendary/item_blackshop_legendary_astral_anchor.lua"
|
||||
__TS__ClassExtends(modifier_item_astral_anchor_cast, BaseModifier)
|
||||
function modifier_item_astral_anchor_cast.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_astral_anchor_cast.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_astral_anchor_cast.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_astral_anchor_cast.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_CAST_RANGE_BONUS_STACKING}
|
||||
end
|
||||
function modifier_item_astral_anchor_cast.prototype.GetModifierCastRangeBonusStacking(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_astral_anchor_cast = __TS__Decorate(
|
||||
modifier_item_astral_anchor_cast,
|
||||
modifier_item_astral_anchor_cast,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_astral_anchor_cast"}
|
||||
)
|
||||
____exports.modifier_item_astral_anchor_cast = modifier_item_astral_anchor_cast
|
||||
--- Скрытый стак штрафа к скорости — стак = сумма процентов из KV.
|
||||
____exports.modifier_item_astral_anchor_slow = __TS__Class()
|
||||
local modifier_item_astral_anchor_slow = ____exports.modifier_item_astral_anchor_slow
|
||||
modifier_item_astral_anchor_slow.name = "modifier_item_astral_anchor_slow"
|
||||
modifier_item_astral_anchor_slow.____file_path = "scripts/vscripts/items/blackshop/legendary/item_blackshop_legendary_astral_anchor.lua"
|
||||
__TS__ClassExtends(modifier_item_astral_anchor_slow, BaseModifier)
|
||||
function modifier_item_astral_anchor_slow.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_astral_anchor_slow.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_astral_anchor_slow.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_astral_anchor_slow.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE}
|
||||
end
|
||||
function modifier_item_astral_anchor_slow.prototype.GetModifierMoveSpeedBonus_Percentage(self)
|
||||
return -self:GetStackCount()
|
||||
end
|
||||
modifier_item_astral_anchor_slow = __TS__Decorate(
|
||||
modifier_item_astral_anchor_slow,
|
||||
modifier_item_astral_anchor_slow,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_astral_anchor_slow"}
|
||||
)
|
||||
____exports.modifier_item_astral_anchor_slow = modifier_item_astral_anchor_slow
|
||||
--- Видимый маркер якоря (иконка; статы в скрытых модификаторах выше).
|
||||
____exports.modifier_item_astral_anchor = __TS__Class()
|
||||
local modifier_item_astral_anchor = ____exports.modifier_item_astral_anchor
|
||||
modifier_item_astral_anchor.name = "modifier_item_astral_anchor"
|
||||
modifier_item_astral_anchor.____file_path = "scripts/vscripts/items/blackshop/legendary/item_blackshop_legendary_astral_anchor.lua"
|
||||
__TS__ClassExtends(modifier_item_astral_anchor, BaseModifier)
|
||||
function modifier_item_astral_anchor.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_astral_anchor.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_astral_anchor.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_astral_anchor.prototype.GetTexture(self)
|
||||
return "../items/blackshop/astral_anchor"
|
||||
end
|
||||
modifier_item_astral_anchor = __TS__Decorate(
|
||||
modifier_item_astral_anchor,
|
||||
modifier_item_astral_anchor,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_astral_anchor"}
|
||||
)
|
||||
____exports.modifier_item_astral_anchor = modifier_item_astral_anchor
|
||||
--- Якорь звёздной тверди — дальность кастов ценой скорости (каждое применение суммируется).
|
||||
____exports.item_blackshop_legendary_astral_anchor = __TS__Class()
|
||||
local item_blackshop_legendary_astral_anchor = ____exports.item_blackshop_legendary_astral_anchor
|
||||
item_blackshop_legendary_astral_anchor.name = "item_blackshop_legendary_astral_anchor"
|
||||
item_blackshop_legendary_astral_anchor.____file_path = "scripts/vscripts/items/blackshop/legendary/item_blackshop_legendary_astral_anchor.lua"
|
||||
__TS__ClassExtends(item_blackshop_legendary_astral_anchor, BaseItem)
|
||||
function item_blackshop_legendary_astral_anchor.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local castRange = self:GetSpecialValueFor("cast_range_bonus")
|
||||
local moveSlowPct = self:GetSpecialValueFor("move_speed_loss_pct")
|
||||
local castMod = ____exports.modifier_item_astral_anchor_cast.name
|
||||
local slowMod = ____exports.modifier_item_astral_anchor_slow.name
|
||||
local dispMod = ____exports.modifier_item_astral_anchor.name
|
||||
local m = caster:FindModifierByName(castMod)
|
||||
if m then
|
||||
m:SetStackCount(m:GetStackCount() + castRange)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, castMod, {}):SetStackCount(castRange)
|
||||
end
|
||||
m = caster:FindModifierByName(slowMod)
|
||||
if m then
|
||||
m:SetStackCount(m:GetStackCount() + moveSlowPct)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, slowMod, {}):SetStackCount(moveSlowPct)
|
||||
end
|
||||
m = caster:FindModifierByName(dispMod)
|
||||
if m then
|
||||
m:SetStackCount(m:GetStackCount() + 1)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, dispMod, {}):SetStackCount(1)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_blackshop_legendary_astral_anchor = __TS__Decorate(
|
||||
item_blackshop_legendary_astral_anchor,
|
||||
item_blackshop_legendary_astral_anchor,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blackshop_legendary_astral_anchor"}
|
||||
)
|
||||
____exports.item_blackshop_legendary_astral_anchor = item_blackshop_legendary_astral_anchor
|
||||
return ____exports
|
||||
@@ -0,0 +1,39 @@
|
||||
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 registerAbility = ____dota_ts_adapter.registerAbility
|
||||
local ____luck = require("utils.luck")
|
||||
local addLuck = ____luck.addLuck
|
||||
--- Жребий судьбы — навсегда повышает удачу героя (расходуется).
|
||||
____exports.item_blackshop_legendary_fated_die = __TS__Class()
|
||||
local item_blackshop_legendary_fated_die = ____exports.item_blackshop_legendary_fated_die
|
||||
item_blackshop_legendary_fated_die.name = "item_blackshop_legendary_fated_die"
|
||||
item_blackshop_legendary_fated_die.____file_path = "scripts/vscripts/items/blackshop/legendary/item_blackshop_legendary_fated_die.lua"
|
||||
__TS__ClassExtends(item_blackshop_legendary_fated_die, BaseItem)
|
||||
function item_blackshop_legendary_fated_die.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster or not caster:IsRealHero() then
|
||||
return
|
||||
end
|
||||
local luck = self:GetSpecialValueFor("luck_bonus")
|
||||
addLuck(nil, caster, luck)
|
||||
EmitSoundOn("DOTA_Item.Hand_Of_Midas", caster)
|
||||
local pfx = ParticleManager:CreateParticle("particles/items2_fx/veil_of_discord.vpcf", PATTACH_ABSORIGIN_FOLLOW, caster)
|
||||
ParticleManager:ReleaseParticleIndex(pfx)
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_blackshop_legendary_fated_die = __TS__Decorate(
|
||||
item_blackshop_legendary_fated_die,
|
||||
item_blackshop_legendary_fated_die,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blackshop_legendary_fated_die"}
|
||||
)
|
||||
____exports.item_blackshop_legendary_fated_die = item_blackshop_legendary_fated_die
|
||||
return ____exports
|
||||
+167
@@ -0,0 +1,167 @@
|
||||
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
|
||||
____exports.item_blackshop_legendary_fire_summoner = __TS__Class()
|
||||
local item_blackshop_legendary_fire_summoner = ____exports.item_blackshop_legendary_fire_summoner
|
||||
item_blackshop_legendary_fire_summoner.name = "item_blackshop_legendary_fire_summoner"
|
||||
item_blackshop_legendary_fire_summoner.____file_path = "scripts/vscripts/items/blackshop/legendary/item_blackshop_legendary_fire_summoner.lua"
|
||||
__TS__ClassExtends(item_blackshop_legendary_fire_summoner, BaseItem)
|
||||
function item_blackshop_legendary_fire_summoner.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local demon = CreateUnitByName(
|
||||
"npc_dota_fire_summon",
|
||||
caster:GetAbsOrigin() + RandomVector(100),
|
||||
true,
|
||||
caster,
|
||||
caster,
|
||||
caster:GetTeamNumber()
|
||||
)
|
||||
demon:SetOwner(caster)
|
||||
demon:SetBaseDamageMin(caster:GetBaseDamageMin())
|
||||
demon:SetBaseDamageMax(caster:GetBaseDamageMax())
|
||||
demon:SetBaseMoveSpeed(caster:GetBaseMoveSpeed() + 65)
|
||||
demon:AddNewModifier(
|
||||
caster,
|
||||
getModifierSourceAbility(nil, caster),
|
||||
"modifier_fire_summoner_demon",
|
||||
{}
|
||||
)
|
||||
demon:AddAbility("ability_stacking_crit"):SetLevel(1)
|
||||
caster:EmitSound("Item.TomeOfKnowledge")
|
||||
if self:GetCurrentCharges() <= self:GetInitialCharges() then
|
||||
UTIL_Remove(self)
|
||||
return
|
||||
end
|
||||
self:SetCurrentCharges(self:GetCurrentCharges() - self:GetInitialCharges())
|
||||
end
|
||||
item_blackshop_legendary_fire_summoner = __TS__Decorate(
|
||||
item_blackshop_legendary_fire_summoner,
|
||||
item_blackshop_legendary_fire_summoner,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blackshop_legendary_fire_summoner"}
|
||||
)
|
||||
____exports.item_blackshop_legendary_fire_summoner = item_blackshop_legendary_fire_summoner
|
||||
____exports.modifier_fire_summoner_demon = __TS__Class()
|
||||
local modifier_fire_summoner_demon = ____exports.modifier_fire_summoner_demon
|
||||
modifier_fire_summoner_demon.name = "modifier_fire_summoner_demon"
|
||||
modifier_fire_summoner_demon.____file_path = "scripts/vscripts/items/blackshop/legendary/item_blackshop_legendary_fire_summoner.lua"
|
||||
__TS__ClassExtends(modifier_fire_summoner_demon, BaseModifier)
|
||||
function modifier_fire_summoner_demon.prototype.OnCreated(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
self:StartIntervalThink(0.1)
|
||||
self:OnIntervalThink()
|
||||
end
|
||||
function modifier_fire_summoner_demon.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_fire_summoner_demon.prototype.GetTexture(self)
|
||||
return "../items/blackshop/fire_summoner"
|
||||
end
|
||||
function modifier_fire_summoner_demon.prototype.GetRealOwner(self)
|
||||
local parent = self:GetParent()
|
||||
if not parent then
|
||||
return nil
|
||||
end
|
||||
if parent:IsRealHero() then
|
||||
return parent
|
||||
end
|
||||
local owner = parent:GetOwner()
|
||||
if not owner then
|
||||
return nil
|
||||
end
|
||||
local ownerUnit = owner
|
||||
if ownerUnit:IsRealHero() then
|
||||
return ownerUnit
|
||||
end
|
||||
return nil
|
||||
end
|
||||
function modifier_fire_summoner_demon.prototype.OnIntervalThink(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local parent = self:GetParent()
|
||||
if not parent then
|
||||
return
|
||||
end
|
||||
local realOwner = self:GetRealOwner()
|
||||
if not realOwner then
|
||||
return
|
||||
end
|
||||
local critModifier = realOwner:FindModifierByName("modifier_stacking_crit")
|
||||
if critModifier then
|
||||
local parentCritModifier = parent:FindModifierByName("modifier_stacking_crit")
|
||||
if parentCritModifier then
|
||||
parentCritModifier.critModifiers = critModifier.critModifiers
|
||||
end
|
||||
end
|
||||
parent:SetBaseAttackTime(realOwner:GetBaseAttackTime())
|
||||
parent:SetBaseDamageMin(realOwner:GetBaseDamageMin())
|
||||
parent:SetBaseDamageMax(realOwner:GetBaseDamageMax())
|
||||
parent:SetBaseMoveSpeed(realOwner:GetBaseMoveSpeed())
|
||||
local distanceToOwner = (parent:GetAbsOrigin() - realOwner:GetAbsOrigin()):Length2D()
|
||||
if distanceToOwner > 160 then
|
||||
parent:MoveToPosition(toVectorWS(
|
||||
nil,
|
||||
realOwner:GetAbsOrigin() + RandomVector(200)
|
||||
))
|
||||
end
|
||||
if distanceToOwner > 400 then
|
||||
FindClearSpaceForUnit(
|
||||
parent,
|
||||
toVectorWS(
|
||||
nil,
|
||||
realOwner:GetAbsOrigin() + RandomVector(200)
|
||||
),
|
||||
true
|
||||
)
|
||||
end
|
||||
if distanceToOwner <= 300 and realOwner:IsAlive() then
|
||||
local enemies = FindUnitsInRadius(
|
||||
parent:GetTeamNumber(),
|
||||
parent:GetAbsOrigin(),
|
||||
nil,
|
||||
500,
|
||||
DOTA_UNIT_TARGET_TEAM_ENEMY,
|
||||
bit.bor(DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_HERO),
|
||||
DOTA_UNIT_TARGET_FLAG_NONE,
|
||||
FIND_CLOSEST,
|
||||
false
|
||||
)
|
||||
if #enemies > 0 then
|
||||
enemies[1]:MoveToTargetToAttack(realOwner)
|
||||
parent:MoveToTargetToAttack(enemies[1])
|
||||
end
|
||||
end
|
||||
end
|
||||
function modifier_fire_summoner_demon.prototype.CheckState(self)
|
||||
return {
|
||||
[MODIFIER_STATE_NO_HEALTH_BAR] = true,
|
||||
[MODIFIER_STATE_INVULNERABLE] = true,
|
||||
[MODIFIER_STATE_NO_UNIT_COLLISION] = true,
|
||||
[MODIFIER_STATE_NO_TEAM_SELECT] = true,
|
||||
[MODIFIER_STATE_NO_TEAM_MOVE_TO] = true
|
||||
}
|
||||
end
|
||||
modifier_fire_summoner_demon = __TS__Decorate(
|
||||
modifier_fire_summoner_demon,
|
||||
modifier_fire_summoner_demon,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_fire_summoner_demon"}
|
||||
)
|
||||
____exports.modifier_fire_summoner_demon = modifier_fire_summoner_demon
|
||||
return ____exports
|
||||
+77
@@ -0,0 +1,77 @@
|
||||
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
|
||||
--- Осколок прародины — легендарка: крупный прирост ко всем атрибутам за применение (стакается).
|
||||
____exports.item_blackshop_legendary_primordial_shard = __TS__Class()
|
||||
local item_blackshop_legendary_primordial_shard = ____exports.item_blackshop_legendary_primordial_shard
|
||||
item_blackshop_legendary_primordial_shard.name = "item_blackshop_legendary_primordial_shard"
|
||||
item_blackshop_legendary_primordial_shard.____file_path = "scripts/vscripts/items/blackshop/legendary/item_blackshop_legendary_primordial_shard.lua"
|
||||
__TS__ClassExtends(item_blackshop_legendary_primordial_shard, BaseItem)
|
||||
function item_blackshop_legendary_primordial_shard.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local stats = self:GetSpecialValueFor("bonus_all")
|
||||
if caster:HasModifier("modifier_item_primordial_shard") then
|
||||
local m = caster:FindModifierByName("modifier_item_primordial_shard")
|
||||
m:SetStackCount(m:GetStackCount() + stats)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, "modifier_item_primordial_shard", {}):SetStackCount(stats)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_blackshop_legendary_primordial_shard = __TS__Decorate(
|
||||
item_blackshop_legendary_primordial_shard,
|
||||
item_blackshop_legendary_primordial_shard,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blackshop_legendary_primordial_shard"}
|
||||
)
|
||||
____exports.item_blackshop_legendary_primordial_shard = item_blackshop_legendary_primordial_shard
|
||||
____exports.modifier_item_primordial_shard = __TS__Class()
|
||||
local modifier_item_primordial_shard = ____exports.modifier_item_primordial_shard
|
||||
modifier_item_primordial_shard.name = "modifier_item_primordial_shard"
|
||||
modifier_item_primordial_shard.____file_path = "scripts/vscripts/items/blackshop/legendary/item_blackshop_legendary_primordial_shard.lua"
|
||||
__TS__ClassExtends(modifier_item_primordial_shard, BaseModifier)
|
||||
function modifier_item_primordial_shard.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_primordial_shard.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_primordial_shard.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_primordial_shard.prototype.GetTexture(self)
|
||||
return "../items/blackshop/primordial_shard"
|
||||
end
|
||||
function modifier_item_primordial_shard.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_STATS_AGILITY_BONUS, MODIFIER_PROPERTY_STATS_INTELLECT_BONUS, MODIFIER_PROPERTY_STATS_STRENGTH_BONUS}
|
||||
end
|
||||
function modifier_item_primordial_shard.prototype.GetModifierBonusStats_Agility(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
function modifier_item_primordial_shard.prototype.GetModifierBonusStats_Intellect(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
function modifier_item_primordial_shard.prototype.GetModifierBonusStats_Strength(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_primordial_shard = __TS__Decorate(
|
||||
modifier_item_primordial_shard,
|
||||
modifier_item_primordial_shard,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_primordial_shard"}
|
||||
)
|
||||
____exports.modifier_item_primordial_shard = modifier_item_primordial_shard
|
||||
return ____exports
|
||||
@@ -0,0 +1,63 @@
|
||||
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
|
||||
____exports.item_blackshop_legendary_restock = __TS__Class()
|
||||
local item_blackshop_legendary_restock = ____exports.item_blackshop_legendary_restock
|
||||
item_blackshop_legendary_restock.name = "item_blackshop_legendary_restock"
|
||||
item_blackshop_legendary_restock.____file_path = "scripts/vscripts/items/blackshop/legendary/item_blackshop_legendary_restock.lua"
|
||||
__TS__ClassExtends(item_blackshop_legendary_restock, BaseItem)
|
||||
function item_blackshop_legendary_restock.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local heroes = HeroList:GetAllHeroes()
|
||||
for ____, hero in ipairs(heroes) do
|
||||
if hero:IsRealHero() then
|
||||
hero:AddNewModifier(caster, self, "modifier_item_restock", {})
|
||||
end
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_blackshop_legendary_restock = __TS__Decorate(
|
||||
item_blackshop_legendary_restock,
|
||||
item_blackshop_legendary_restock,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blackshop_legendary_restock"}
|
||||
)
|
||||
____exports.item_blackshop_legendary_restock = item_blackshop_legendary_restock
|
||||
____exports.modifier_item_restock = __TS__Class()
|
||||
local modifier_item_restock = ____exports.modifier_item_restock
|
||||
modifier_item_restock.name = "modifier_item_restock"
|
||||
modifier_item_restock.____file_path = "scripts/vscripts/items/blackshop/legendary/item_blackshop_legendary_restock.lua"
|
||||
__TS__ClassExtends(modifier_item_restock, BaseModifier)
|
||||
function modifier_item_restock.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_restock.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_restock.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_restock.prototype.GetTexture(self)
|
||||
return "../items/blackshop/restock"
|
||||
end
|
||||
modifier_item_restock = __TS__Decorate(
|
||||
modifier_item_restock,
|
||||
modifier_item_restock,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_restock"}
|
||||
)
|
||||
____exports.modifier_item_restock = modifier_item_restock
|
||||
return ____exports
|
||||
+123
@@ -0,0 +1,123 @@
|
||||
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
|
||||
--- Скрытый стак усиления магии — стак = проценты spell amp (реплицируется на клиент).
|
||||
____exports.modifier_item_twilight_mirror_spell = __TS__Class()
|
||||
local modifier_item_twilight_mirror_spell = ____exports.modifier_item_twilight_mirror_spell
|
||||
modifier_item_twilight_mirror_spell.name = "modifier_item_twilight_mirror_spell"
|
||||
modifier_item_twilight_mirror_spell.____file_path = "scripts/vscripts/items/blackshop/legendary/item_blackshop_legendary_twilight_mirror.lua"
|
||||
__TS__ClassExtends(modifier_item_twilight_mirror_spell, BaseModifier)
|
||||
function modifier_item_twilight_mirror_spell.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_twilight_mirror_spell.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_twilight_mirror_spell.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_twilight_mirror_spell.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_SPELL_AMPLIFY_PERCENTAGE}
|
||||
end
|
||||
function modifier_item_twilight_mirror_spell.prototype.GetModifierSpellAmplify_Percentage(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_twilight_mirror_spell = __TS__Decorate(
|
||||
modifier_item_twilight_mirror_spell,
|
||||
modifier_item_twilight_mirror_spell,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_twilight_mirror_spell"}
|
||||
)
|
||||
____exports.modifier_item_twilight_mirror_spell = modifier_item_twilight_mirror_spell
|
||||
--- Скрытый стак входящего урона — стак = %% доп. получаемого урона.
|
||||
____exports.modifier_item_twilight_mirror_incoming = __TS__Class()
|
||||
local modifier_item_twilight_mirror_incoming = ____exports.modifier_item_twilight_mirror_incoming
|
||||
modifier_item_twilight_mirror_incoming.name = "modifier_item_twilight_mirror_incoming"
|
||||
modifier_item_twilight_mirror_incoming.____file_path = "scripts/vscripts/items/blackshop/legendary/item_blackshop_legendary_twilight_mirror.lua"
|
||||
__TS__ClassExtends(modifier_item_twilight_mirror_incoming, BaseModifier)
|
||||
function modifier_item_twilight_mirror_incoming.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_twilight_mirror_incoming.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_twilight_mirror_incoming.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_twilight_mirror_incoming.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_INCOMING_DAMAGE_PERCENTAGE}
|
||||
end
|
||||
function modifier_item_twilight_mirror_incoming.prototype.GetModifierIncomingDamage_Percentage(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_twilight_mirror_incoming = __TS__Decorate(
|
||||
modifier_item_twilight_mirror_incoming,
|
||||
modifier_item_twilight_mirror_incoming,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_twilight_mirror_incoming"}
|
||||
)
|
||||
____exports.modifier_item_twilight_mirror_incoming = modifier_item_twilight_mirror_incoming
|
||||
--- Видимый маркер зеркала (без статов).
|
||||
____exports.modifier_item_twilight_mirror = __TS__Class()
|
||||
local modifier_item_twilight_mirror = ____exports.modifier_item_twilight_mirror
|
||||
modifier_item_twilight_mirror.name = "modifier_item_twilight_mirror"
|
||||
modifier_item_twilight_mirror.____file_path = "scripts/vscripts/items/blackshop/legendary/item_blackshop_legendary_twilight_mirror.lua"
|
||||
__TS__ClassExtends(modifier_item_twilight_mirror, BaseModifier)
|
||||
function modifier_item_twilight_mirror.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_twilight_mirror.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_twilight_mirror.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_twilight_mirror.prototype.GetTexture(self)
|
||||
return "../items/blackshop/twilight_mirror"
|
||||
end
|
||||
modifier_item_twilight_mirror = __TS__Decorate(
|
||||
modifier_item_twilight_mirror,
|
||||
modifier_item_twilight_mirror,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_twilight_mirror"}
|
||||
)
|
||||
____exports.modifier_item_twilight_mirror = modifier_item_twilight_mirror
|
||||
--- Зеркало сумерек — огромный усилитель магии ценой уязвимости (одно применение, навсегда).
|
||||
____exports.item_blackshop_legendary_twilight_mirror = __TS__Class()
|
||||
local item_blackshop_legendary_twilight_mirror = ____exports.item_blackshop_legendary_twilight_mirror
|
||||
item_blackshop_legendary_twilight_mirror.name = "item_blackshop_legendary_twilight_mirror"
|
||||
item_blackshop_legendary_twilight_mirror.____file_path = "scripts/vscripts/items/blackshop/legendary/item_blackshop_legendary_twilight_mirror.lua"
|
||||
__TS__ClassExtends(item_blackshop_legendary_twilight_mirror, BaseItem)
|
||||
function item_blackshop_legendary_twilight_mirror.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
if caster:HasModifier(____exports.modifier_item_twilight_mirror.name) then
|
||||
return
|
||||
end
|
||||
local spell = self:GetSpecialValueFor("spell_amp_pct")
|
||||
local inc = self:GetSpecialValueFor("incoming_damage_pct")
|
||||
caster:AddNewModifier(caster, self, ____exports.modifier_item_twilight_mirror_spell.name, {}):SetStackCount(spell)
|
||||
caster:AddNewModifier(caster, self, ____exports.modifier_item_twilight_mirror_incoming.name, {}):SetStackCount(inc)
|
||||
caster:AddNewModifier(caster, self, ____exports.modifier_item_twilight_mirror.name, {}):SetStackCount(1)
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_blackshop_legendary_twilight_mirror = __TS__Decorate(
|
||||
item_blackshop_legendary_twilight_mirror,
|
||||
item_blackshop_legendary_twilight_mirror,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blackshop_legendary_twilight_mirror"}
|
||||
)
|
||||
____exports.item_blackshop_legendary_twilight_mirror = item_blackshop_legendary_twilight_mirror
|
||||
return ____exports
|
||||
@@ -0,0 +1,150 @@
|
||||
local ____lualib = require("lualib_bundle")
|
||||
local __TS__Class = ____lualib.__TS__Class
|
||||
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
||||
local __TS__Decorate = ____lualib.__TS__Decorate
|
||||
local __TS__SourceMapTraceBack = ____lualib.__TS__SourceMapTraceBack
|
||||
__TS__SourceMapTraceBack(debug.getinfo(1).short_src, {["8"] = 1,["9"] = 1,["10"] = 1,["11"] = 1,["12"] = 1,["13"] = 3,["14"] = 4,["15"] = 3,["16"] = 4,["17"] = 5,["18"] = 6,["21"] = 8,["22"] = 9,["25"] = 12,["26"] = 12,["27"] = 12,["28"] = 12,["29"] = 12,["30"] = 12,["31"] = 12,["32"] = 12,["33"] = 13,["34"] = 14,["35"] = 15,["36"] = 16,["37"] = 18,["38"] = 19,["39"] = 20,["40"] = 22,["41"] = 23,["44"] = 26,["45"] = 5,["46"] = 4,["47"] = 4,["48"] = 4,["49"] = 3,["52"] = 4,["53"] = 30,["54"] = 31,["55"] = 30,["56"] = 31,["57"] = 32,["58"] = 33,["61"] = 34,["62"] = 35,["63"] = 32,["64"] = 38,["65"] = 39,["66"] = 40,["67"] = 40,["69"] = 43,["70"] = 43,["72"] = 46,["73"] = 47,["74"] = 47,["76"] = 50,["77"] = 51,["78"] = 51,["80"] = 53,["81"] = 38,["82"] = 56,["83"] = 57,["86"] = 59,["87"] = 60,["90"] = 63,["91"] = 64,["94"] = 67,["95"] = 68,["96"] = 69,["97"] = 70,["98"] = 72,["101"] = 76,["102"] = 77,["103"] = 78,["104"] = 79,["105"] = 82,["106"] = 83,["107"] = 84,["109"] = 86,["110"] = 87,["111"] = 87,["112"] = 87,["113"] = 87,["114"] = 87,["116"] = 91,["117"] = 92,["118"] = 92,["119"] = 92,["120"] = 92,["121"] = 92,["122"] = 92,["123"] = 92,["124"] = 92,["125"] = 92,["126"] = 92,["127"] = 92,["128"] = 104,["129"] = 105,["130"] = 106,["133"] = 56,["134"] = 111,["135"] = 112,["136"] = 112,["137"] = 112,["138"] = 112,["139"] = 112,["140"] = 112,["141"] = 112,["142"] = 111,["143"] = 31,["144"] = 31,["145"] = 31,["146"] = 30,["149"] = 31});
|
||||
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
|
||||
____exports.item_fire_summoner = __TS__Class()
|
||||
local item_fire_summoner = ____exports.item_fire_summoner
|
||||
item_fire_summoner.name = "item_fire_summoner"
|
||||
__TS__ClassExtends(item_fire_summoner, BaseItem)
|
||||
function item_fire_summoner.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local demon = CreateUnitByName(
|
||||
"npc_dota_fire_summon",
|
||||
caster:GetAbsOrigin() + RandomVector(100),
|
||||
true,
|
||||
caster,
|
||||
caster,
|
||||
caster:GetTeamNumber()
|
||||
)
|
||||
demon:SetOwner(caster)
|
||||
demon:SetBaseDamageMin(caster:GetBaseDamageMin())
|
||||
demon:SetBaseDamageMax(caster:GetBaseDamageMax())
|
||||
demon:SetBaseMoveSpeed(caster:GetBaseMoveSpeed() + 65)
|
||||
demon:AddNewModifier(caster, nil, "modifier_fire_summoner_demon", {})
|
||||
demon:AddAbility("ability_stacking_crit"):SetLevel(1)
|
||||
caster:EmitSound("Item.TomeOfKnowledge")
|
||||
if self:GetCurrentCharges() <= self:GetInitialCharges() then
|
||||
UTIL_Remove(self)
|
||||
return
|
||||
end
|
||||
self:SetCurrentCharges(self:GetCurrentCharges() - self:GetInitialCharges())
|
||||
end
|
||||
item_fire_summoner = __TS__Decorate(
|
||||
item_fire_summoner,
|
||||
item_fire_summoner,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_fire_summoner"}
|
||||
)
|
||||
____exports.item_fire_summoner = item_fire_summoner
|
||||
____exports.modifier_fire_summoner_demon = __TS__Class()
|
||||
local modifier_fire_summoner_demon = ____exports.modifier_fire_summoner_demon
|
||||
modifier_fire_summoner_demon.name = "modifier_fire_summoner_demon"
|
||||
__TS__ClassExtends(modifier_fire_summoner_demon, BaseModifier)
|
||||
function modifier_fire_summoner_demon.prototype.OnCreated(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
self:StartIntervalThink(0.1)
|
||||
self:OnIntervalThink()
|
||||
end
|
||||
function modifier_fire_summoner_demon.prototype.GetRealOwner(self)
|
||||
local parent = self:GetParent()
|
||||
if not parent then
|
||||
return nil
|
||||
end
|
||||
if parent:IsRealHero() then
|
||||
return parent
|
||||
end
|
||||
local owner = parent:GetOwner()
|
||||
if not owner then
|
||||
return nil
|
||||
end
|
||||
local ownerUnit = owner
|
||||
if ownerUnit:IsRealHero() then
|
||||
return ownerUnit
|
||||
end
|
||||
return nil
|
||||
end
|
||||
function modifier_fire_summoner_demon.prototype.OnIntervalThink(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local parent = self:GetParent()
|
||||
if not parent then
|
||||
return
|
||||
end
|
||||
local realOwner = self:GetRealOwner()
|
||||
if not realOwner then
|
||||
return
|
||||
end
|
||||
local critModifier = realOwner:FindModifierByName("modifier_stacking_crit")
|
||||
if critModifier then
|
||||
local parentCritModifier = parent:FindModifierByName("modifier_stacking_crit")
|
||||
if parentCritModifier then
|
||||
parentCritModifier.critModifiers = critModifier.critModifiers
|
||||
end
|
||||
end
|
||||
parent:SetBaseAttackTime(realOwner:GetBaseAttackTime())
|
||||
parent:SetBaseDamageMin(realOwner:GetBaseDamageMin())
|
||||
parent:SetBaseDamageMax(realOwner:GetBaseDamageMax())
|
||||
parent:SetBaseMoveSpeed(realOwner:GetBaseMoveSpeed())
|
||||
local distanceToOwner = (parent:GetAbsOrigin() - realOwner:GetAbsOrigin()):Length2D()
|
||||
if distanceToOwner > 160 then
|
||||
parent:MoveToPosition(realOwner:GetAbsOrigin() + RandomVector(200))
|
||||
end
|
||||
if distanceToOwner > 400 then
|
||||
FindClearSpaceForUnit(
|
||||
parent,
|
||||
realOwner:GetAbsOrigin() + RandomVector(200),
|
||||
true
|
||||
)
|
||||
end
|
||||
if distanceToOwner <= 300 and realOwner:IsAlive() then
|
||||
local enemies = FindUnitsInRadius(
|
||||
parent:GetTeamNumber(),
|
||||
parent:GetAbsOrigin(),
|
||||
nil,
|
||||
500,
|
||||
DOTA_UNIT_TARGET_TEAM_ENEMY,
|
||||
bit.bor(DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_HERO),
|
||||
DOTA_UNIT_TARGET_FLAG_NONE,
|
||||
FIND_CLOSEST,
|
||||
false
|
||||
)
|
||||
if #enemies > 0 then
|
||||
enemies[1]:MoveToTargetToAttack(realOwner)
|
||||
parent:MoveToTargetToAttack(enemies[1])
|
||||
end
|
||||
end
|
||||
end
|
||||
function modifier_fire_summoner_demon.prototype.CheckState(self)
|
||||
return {
|
||||
[MODIFIER_STATE_NO_HEALTH_BAR] = true,
|
||||
[MODIFIER_STATE_INVULNERABLE] = true,
|
||||
[MODIFIER_STATE_NO_UNIT_COLLISION] = true,
|
||||
[MODIFIER_STATE_NO_TEAM_SELECT] = true,
|
||||
[MODIFIER_STATE_NO_TEAM_MOVE_TO] = true
|
||||
}
|
||||
end
|
||||
modifier_fire_summoner_demon = __TS__Decorate(
|
||||
modifier_fire_summoner_demon,
|
||||
modifier_fire_summoner_demon,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_fire_summoner_demon"}
|
||||
)
|
||||
____exports.modifier_fire_summoner_demon = modifier_fire_summoner_demon
|
||||
return ____exports
|
||||
@@ -0,0 +1,60 @@
|
||||
local ____lualib = require("lualib_bundle")
|
||||
local __TS__Class = ____lualib.__TS__Class
|
||||
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
||||
local __TS__Decorate = ____lualib.__TS__Decorate
|
||||
local __TS__SourceMapTraceBack = ____lualib.__TS__SourceMapTraceBack
|
||||
__TS__SourceMapTraceBack(debug.getinfo(1).short_src, {["8"] = 1,["9"] = 1,["10"] = 1,["11"] = 1,["12"] = 1,["13"] = 4,["14"] = 5,["15"] = 4,["16"] = 5,["17"] = 6,["18"] = 7,["21"] = 9,["22"] = 10,["25"] = 13,["26"] = 16,["27"] = 17,["28"] = 19,["31"] = 22,["32"] = 6,["33"] = 5,["34"] = 5,["35"] = 5,["36"] = 4,["39"] = 5,["40"] = 26,["41"] = 27,["42"] = 26,["43"] = 27,["44"] = 28,["45"] = 29,["46"] = 28,["47"] = 31,["48"] = 32,["49"] = 31,["50"] = 34,["51"] = 35,["52"] = 34,["53"] = 27,["54"] = 27,["55"] = 27,["56"] = 26,["59"] = 27});
|
||||
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
|
||||
____exports.item_restock = __TS__Class()
|
||||
local item_restock = ____exports.item_restock
|
||||
item_restock.name = "item_restock"
|
||||
__TS__ClassExtends(item_restock, BaseItem)
|
||||
function item_restock.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local heroes = HeroList:GetAllHeroes()
|
||||
for ____, hero in ipairs(heroes) do
|
||||
if hero:IsRealHero() then
|
||||
hero:AddNewModifier(caster, self, "modifier_item_restock", {})
|
||||
end
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_restock = __TS__Decorate(
|
||||
item_restock,
|
||||
item_restock,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_restock"}
|
||||
)
|
||||
____exports.item_restock = item_restock
|
||||
____exports.modifier_item_restock = __TS__Class()
|
||||
local modifier_item_restock = ____exports.modifier_item_restock
|
||||
modifier_item_restock.name = "modifier_item_restock"
|
||||
__TS__ClassExtends(modifier_item_restock, BaseModifier)
|
||||
function modifier_item_restock.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_restock.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_restock.prototype.GetTexture(self)
|
||||
return "blackshop/restock"
|
||||
end
|
||||
modifier_item_restock = __TS__Decorate(
|
||||
modifier_item_restock,
|
||||
modifier_item_restock,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_restock"}
|
||||
)
|
||||
____exports.modifier_item_restock = modifier_item_restock
|
||||
return ____exports
|
||||
@@ -0,0 +1,66 @@
|
||||
local ____lualib = require("lualib_bundle")
|
||||
local __TS__Class = ____lualib.__TS__Class
|
||||
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
||||
local __TS__Decorate = ____lualib.__TS__Decorate
|
||||
local __TS__SourceMapTraceBack = ____lualib.__TS__SourceMapTraceBack
|
||||
__TS__SourceMapTraceBack(debug.getinfo(1).short_src, {["8"] = 1,["9"] = 1,["10"] = 1,["11"] = 1,["12"] = 1,["13"] = 3,["14"] = 4,["15"] = 3,["16"] = 4,["17"] = 5,["18"] = 6,["21"] = 8,["22"] = 9,["25"] = 11,["26"] = 13,["27"] = 14,["29"] = 18,["31"] = 20,["32"] = 5,["33"] = 4,["34"] = 4,["35"] = 4,["36"] = 3,["39"] = 4,["40"] = 24,["41"] = 25,["42"] = 24,["43"] = 25,["44"] = 26,["45"] = 27,["46"] = 26,["47"] = 30,["48"] = 31,["49"] = 30,["50"] = 34,["51"] = 35,["52"] = 34,["53"] = 38,["54"] = 39,["55"] = 38,["56"] = 42,["57"] = 43,["58"] = 42,["59"] = 25,["60"] = 25,["61"] = 25,["62"] = 24,["65"] = 25});
|
||||
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
|
||||
____exports.item_agility_cape = __TS__Class()
|
||||
local item_agility_cape = ____exports.item_agility_cape
|
||||
item_agility_cape.name = "item_agility_cape"
|
||||
__TS__ClassExtends(item_agility_cape, BaseItem)
|
||||
function item_agility_cape.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local agility = self:GetSpecialValueFor("bonus_agility")
|
||||
if caster:HasModifier("modifier_item_agility_cape") then
|
||||
caster:FindModifierByName("modifier_item_agility_cape"):SetStackCount(caster:FindModifierByName("modifier_item_agility_cape"):GetStackCount() + agility)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, "modifier_item_agility_cape", {}):SetStackCount(agility)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_agility_cape = __TS__Decorate(
|
||||
item_agility_cape,
|
||||
item_agility_cape,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_agility_cape"}
|
||||
)
|
||||
____exports.item_agility_cape = item_agility_cape
|
||||
____exports.modifier_item_agility_cape = __TS__Class()
|
||||
local modifier_item_agility_cape = ____exports.modifier_item_agility_cape
|
||||
modifier_item_agility_cape.name = "modifier_item_agility_cape"
|
||||
__TS__ClassExtends(modifier_item_agility_cape, BaseModifier)
|
||||
function modifier_item_agility_cape.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_agility_cape.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_agility_cape.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_agility_cape.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_STATS_AGILITY_BONUS}
|
||||
end
|
||||
function modifier_item_agility_cape.prototype.GetModifierBonusStats_Agility(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_agility_cape = __TS__Decorate(
|
||||
modifier_item_agility_cape,
|
||||
modifier_item_agility_cape,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_agility_cape"}
|
||||
)
|
||||
____exports.modifier_item_agility_cape = modifier_item_agility_cape
|
||||
return ____exports
|
||||
@@ -0,0 +1,69 @@
|
||||
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
|
||||
____exports.item_blackshop_rare_agility_cape = __TS__Class()
|
||||
local item_blackshop_rare_agility_cape = ____exports.item_blackshop_rare_agility_cape
|
||||
item_blackshop_rare_agility_cape.name = "item_blackshop_rare_agility_cape"
|
||||
item_blackshop_rare_agility_cape.____file_path = "scripts/vscripts/items/blackshop/rare/item_blackshop_rare_agility_cape.lua"
|
||||
__TS__ClassExtends(item_blackshop_rare_agility_cape, BaseItem)
|
||||
function item_blackshop_rare_agility_cape.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local agility = self:GetSpecialValueFor("bonus_agility")
|
||||
if caster:HasModifier("modifier_item_agility_cape") then
|
||||
caster:FindModifierByName("modifier_item_agility_cape"):SetStackCount(caster:FindModifierByName("modifier_item_agility_cape"):GetStackCount() + agility)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, "modifier_item_agility_cape", {}):SetStackCount(agility)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_blackshop_rare_agility_cape = __TS__Decorate(
|
||||
item_blackshop_rare_agility_cape,
|
||||
item_blackshop_rare_agility_cape,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blackshop_rare_agility_cape"}
|
||||
)
|
||||
____exports.item_blackshop_rare_agility_cape = item_blackshop_rare_agility_cape
|
||||
____exports.modifier_item_agility_cape = __TS__Class()
|
||||
local modifier_item_agility_cape = ____exports.modifier_item_agility_cape
|
||||
modifier_item_agility_cape.name = "modifier_item_agility_cape"
|
||||
modifier_item_agility_cape.____file_path = "scripts/vscripts/items/blackshop/rare/item_blackshop_rare_agility_cape.lua"
|
||||
__TS__ClassExtends(modifier_item_agility_cape, BaseModifier)
|
||||
function modifier_item_agility_cape.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_agility_cape.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_agility_cape.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_agility_cape.prototype.GetTexture(self)
|
||||
return "../items/blackshop/agility_cape"
|
||||
end
|
||||
function modifier_item_agility_cape.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_STATS_AGILITY_BONUS}
|
||||
end
|
||||
function modifier_item_agility_cape.prototype.GetModifierBonusStats_Agility(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_agility_cape = __TS__Decorate(
|
||||
modifier_item_agility_cape,
|
||||
modifier_item_agility_cape,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_agility_cape"}
|
||||
)
|
||||
____exports.modifier_item_agility_cape = modifier_item_agility_cape
|
||||
return ____exports
|
||||
@@ -0,0 +1,68 @@
|
||||
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
|
||||
____exports.item_blackshop_rare_critical_havoc = __TS__Class()
|
||||
local item_blackshop_rare_critical_havoc = ____exports.item_blackshop_rare_critical_havoc
|
||||
item_blackshop_rare_critical_havoc.name = "item_blackshop_rare_critical_havoc"
|
||||
item_blackshop_rare_critical_havoc.____file_path = "scripts/vscripts/items/blackshop/rare/item_blackshop_rare_critical_havoc.lua"
|
||||
__TS__ClassExtends(item_blackshop_rare_critical_havoc, BaseItem)
|
||||
function item_blackshop_rare_critical_havoc.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
caster:AddNewModifier(caster, self, "modifier_item_critical_havoc", {})
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_blackshop_rare_critical_havoc = __TS__Decorate(
|
||||
item_blackshop_rare_critical_havoc,
|
||||
item_blackshop_rare_critical_havoc,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blackshop_rare_critical_havoc"}
|
||||
)
|
||||
____exports.item_blackshop_rare_critical_havoc = item_blackshop_rare_critical_havoc
|
||||
____exports.modifier_item_critical_havoc = __TS__Class()
|
||||
local modifier_item_critical_havoc = ____exports.modifier_item_critical_havoc
|
||||
modifier_item_critical_havoc.name = "modifier_item_critical_havoc"
|
||||
modifier_item_critical_havoc.____file_path = "scripts/vscripts/items/blackshop/rare/item_blackshop_rare_critical_havoc.lua"
|
||||
__TS__ClassExtends(modifier_item_critical_havoc, BaseModifier)
|
||||
function modifier_item_critical_havoc.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_critical_havoc.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_critical_havoc.prototype.GetTexture(self)
|
||||
return "../items/blackshop/critical_havoc"
|
||||
end
|
||||
function modifier_item_critical_havoc.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_critical_havoc.prototype.OnCreated(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local stackingCritMod = self:GetParent():FindModifierByName("modifier_stacking_crit")
|
||||
if stackingCritMod then
|
||||
local ability = self:GetAbility()
|
||||
stackingCritMod:AddCustomCrit(10, 200, "item_critical_havoc", ability)
|
||||
end
|
||||
end
|
||||
modifier_item_critical_havoc = __TS__Decorate(
|
||||
modifier_item_critical_havoc,
|
||||
modifier_item_critical_havoc,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_critical_havoc"}
|
||||
)
|
||||
____exports.modifier_item_critical_havoc = modifier_item_critical_havoc
|
||||
return ____exports
|
||||
@@ -0,0 +1,135 @@
|
||||
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
|
||||
____exports.item_blackshop_rare_damage_dagger = __TS__Class()
|
||||
local item_blackshop_rare_damage_dagger = ____exports.item_blackshop_rare_damage_dagger
|
||||
item_blackshop_rare_damage_dagger.name = "item_blackshop_rare_damage_dagger"
|
||||
item_blackshop_rare_damage_dagger.____file_path = "scripts/vscripts/items/blackshop/rare/item_blackshop_rare_damage_dagger.lua"
|
||||
__TS__ClassExtends(item_blackshop_rare_damage_dagger, BaseItem)
|
||||
function item_blackshop_rare_damage_dagger.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local stats = self:GetSpecialValueFor("bonus_damage")
|
||||
if caster:HasModifier("modifier_item_damage_dagger") then
|
||||
caster:FindModifierByName("modifier_item_damage_dagger"):SetStackCount(caster:FindModifierByName("modifier_item_damage_dagger"):GetStackCount() + stats)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, "modifier_item_damage_dagger", {}):SetStackCount(stats)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_blackshop_rare_damage_dagger = __TS__Decorate(
|
||||
item_blackshop_rare_damage_dagger,
|
||||
item_blackshop_rare_damage_dagger,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blackshop_rare_damage_dagger"}
|
||||
)
|
||||
____exports.item_blackshop_rare_damage_dagger = item_blackshop_rare_damage_dagger
|
||||
____exports.modifier_item_damage_dagger = __TS__Class()
|
||||
local modifier_item_damage_dagger = ____exports.modifier_item_damage_dagger
|
||||
modifier_item_damage_dagger.name = "modifier_item_damage_dagger"
|
||||
modifier_item_damage_dagger.____file_path = "scripts/vscripts/items/blackshop/rare/item_blackshop_rare_damage_dagger.lua"
|
||||
__TS__ClassExtends(modifier_item_damage_dagger, BaseModifier)
|
||||
function modifier_item_damage_dagger.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_damage_dagger.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_damage_dagger.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_damage_dagger.prototype.GetTexture(self)
|
||||
return "../items/blackshop/damage_dagger"
|
||||
end
|
||||
function modifier_item_damage_dagger.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE, MODIFIER_EVENT_ON_ATTACK_LANDED}
|
||||
end
|
||||
function modifier_item_damage_dagger.prototype.GetModifierPreAttack_BonusDamage(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
function modifier_item_damage_dagger.prototype.OnAttackLanded(self, keys)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local attacker = keys.attacker
|
||||
if attacker ~= self:GetParent() then
|
||||
return
|
||||
end
|
||||
local parent = self:GetParent()
|
||||
if not parent then
|
||||
return
|
||||
end
|
||||
if not parent:HasModifier("modifier_item_damage_dagger_timer") then
|
||||
parent:AddNewModifier(
|
||||
parent,
|
||||
getModifierSourceAbility(nil, parent),
|
||||
"modifier_item_damage_dagger_timer",
|
||||
{duration = 4}
|
||||
):SetStackCount(self:GetStackCount())
|
||||
parent:RemoveModifierByName("modifier_item_damage_dagger")
|
||||
end
|
||||
end
|
||||
modifier_item_damage_dagger = __TS__Decorate(
|
||||
modifier_item_damage_dagger,
|
||||
modifier_item_damage_dagger,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_damage_dagger"}
|
||||
)
|
||||
____exports.modifier_item_damage_dagger = modifier_item_damage_dagger
|
||||
____exports.modifier_item_damage_dagger_timer = __TS__Class()
|
||||
local modifier_item_damage_dagger_timer = ____exports.modifier_item_damage_dagger_timer
|
||||
modifier_item_damage_dagger_timer.name = "modifier_item_damage_dagger_timer"
|
||||
modifier_item_damage_dagger_timer.____file_path = "scripts/vscripts/items/blackshop/rare/item_blackshop_rare_damage_dagger.lua"
|
||||
__TS__ClassExtends(modifier_item_damage_dagger_timer, BaseModifier)
|
||||
function modifier_item_damage_dagger_timer.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_damage_dagger_timer.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_damage_dagger_timer.prototype.GetTexture(self)
|
||||
return "../items/blackshop/damage_dagger"
|
||||
end
|
||||
function modifier_item_damage_dagger_timer.prototype.OnDestroy(self)
|
||||
if IsClient() then
|
||||
return
|
||||
end
|
||||
local parent = self:GetParent()
|
||||
if not parent or not parent:IsAlive() then
|
||||
return
|
||||
end
|
||||
local stacks = self:GetStackCount()
|
||||
local modifier = parent:AddNewModifier(
|
||||
parent,
|
||||
getModifierSourceAbility(nil, parent),
|
||||
"modifier_item_damage_dagger",
|
||||
{}
|
||||
)
|
||||
if modifier ~= nil then
|
||||
if self:GetParent():HasModifier("modifier_item_damage_dagger") then
|
||||
modifier:SetStackCount(self:GetParent():FindModifierByName("modifier_item_damage_dagger"):GetStackCount() + stacks)
|
||||
else
|
||||
modifier:SetStackCount(stacks)
|
||||
end
|
||||
end
|
||||
end
|
||||
modifier_item_damage_dagger_timer = __TS__Decorate(
|
||||
modifier_item_damage_dagger_timer,
|
||||
modifier_item_damage_dagger_timer,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_damage_dagger_timer"}
|
||||
)
|
||||
____exports.modifier_item_damage_dagger_timer = modifier_item_damage_dagger_timer
|
||||
return ____exports
|
||||
@@ -0,0 +1,75 @@
|
||||
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
|
||||
____exports.item_blackshop_rare_egg_of_death = __TS__Class()
|
||||
local item_blackshop_rare_egg_of_death = ____exports.item_blackshop_rare_egg_of_death
|
||||
item_blackshop_rare_egg_of_death.name = "item_blackshop_rare_egg_of_death"
|
||||
item_blackshop_rare_egg_of_death.____file_path = "scripts/vscripts/items/blackshop/rare/item_blackshop_rare_egg_of_death.lua"
|
||||
__TS__ClassExtends(item_blackshop_rare_egg_of_death, BaseItem)
|
||||
function item_blackshop_rare_egg_of_death.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local stats = self:GetSpecialValueFor("bonus_all")
|
||||
if caster:HasModifier("modifier_item_egg_of_death") then
|
||||
caster:FindModifierByName("modifier_item_egg_of_death"):SetStackCount(caster:FindModifierByName("modifier_item_egg_of_death"):GetStackCount() + stats)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, "modifier_item_egg_of_death", {}):SetStackCount(stats)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_blackshop_rare_egg_of_death = __TS__Decorate(
|
||||
item_blackshop_rare_egg_of_death,
|
||||
item_blackshop_rare_egg_of_death,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blackshop_rare_egg_of_death"}
|
||||
)
|
||||
____exports.item_blackshop_rare_egg_of_death = item_blackshop_rare_egg_of_death
|
||||
____exports.modifier_item_egg_of_death = __TS__Class()
|
||||
local modifier_item_egg_of_death = ____exports.modifier_item_egg_of_death
|
||||
modifier_item_egg_of_death.name = "modifier_item_egg_of_death"
|
||||
modifier_item_egg_of_death.____file_path = "scripts/vscripts/items/blackshop/rare/item_blackshop_rare_egg_of_death.lua"
|
||||
__TS__ClassExtends(modifier_item_egg_of_death, BaseModifier)
|
||||
function modifier_item_egg_of_death.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_egg_of_death.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_egg_of_death.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_egg_of_death.prototype.GetTexture(self)
|
||||
return "../items/blackshop/egg_of_death"
|
||||
end
|
||||
function modifier_item_egg_of_death.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_STATS_AGILITY_BONUS, MODIFIER_PROPERTY_STATS_INTELLECT_BONUS, MODIFIER_PROPERTY_STATS_STRENGTH_BONUS}
|
||||
end
|
||||
function modifier_item_egg_of_death.prototype.GetModifierBonusStats_Agility(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
function modifier_item_egg_of_death.prototype.GetModifierBonusStats_Intellect(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
function modifier_item_egg_of_death.prototype.GetModifierBonusStats_Strength(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_egg_of_death = __TS__Decorate(
|
||||
modifier_item_egg_of_death,
|
||||
modifier_item_egg_of_death,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_egg_of_death"}
|
||||
)
|
||||
____exports.modifier_item_egg_of_death = modifier_item_egg_of_death
|
||||
return ____exports
|
||||
@@ -0,0 +1,71 @@
|
||||
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
|
||||
--- Гранитный жетон — запас здоровья (стакается).
|
||||
____exports.item_blackshop_rare_granite_badge = __TS__Class()
|
||||
local item_blackshop_rare_granite_badge = ____exports.item_blackshop_rare_granite_badge
|
||||
item_blackshop_rare_granite_badge.name = "item_blackshop_rare_granite_badge"
|
||||
item_blackshop_rare_granite_badge.____file_path = "scripts/vscripts/items/blackshop/rare/item_blackshop_rare_granite_badge.lua"
|
||||
__TS__ClassExtends(item_blackshop_rare_granite_badge, BaseItem)
|
||||
function item_blackshop_rare_granite_badge.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local add = self:GetSpecialValueFor("bonus_health")
|
||||
if caster:HasModifier("modifier_item_granite_badge") then
|
||||
local m = caster:FindModifierByName("modifier_item_granite_badge")
|
||||
m:SetStackCount(m:GetStackCount() + add)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, "modifier_item_granite_badge", {}):SetStackCount(add)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_blackshop_rare_granite_badge = __TS__Decorate(
|
||||
item_blackshop_rare_granite_badge,
|
||||
item_blackshop_rare_granite_badge,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blackshop_rare_granite_badge"}
|
||||
)
|
||||
____exports.item_blackshop_rare_granite_badge = item_blackshop_rare_granite_badge
|
||||
____exports.modifier_item_granite_badge = __TS__Class()
|
||||
local modifier_item_granite_badge = ____exports.modifier_item_granite_badge
|
||||
modifier_item_granite_badge.name = "modifier_item_granite_badge"
|
||||
modifier_item_granite_badge.____file_path = "scripts/vscripts/items/blackshop/rare/item_blackshop_rare_granite_badge.lua"
|
||||
__TS__ClassExtends(modifier_item_granite_badge, BaseModifier)
|
||||
function modifier_item_granite_badge.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_granite_badge.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_granite_badge.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_granite_badge.prototype.GetTexture(self)
|
||||
return "../items/blackshop/granite_stone"
|
||||
end
|
||||
function modifier_item_granite_badge.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_HEALTH_BONUS}
|
||||
end
|
||||
function modifier_item_granite_badge.prototype.GetModifierHealthBonus(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_granite_badge = __TS__Decorate(
|
||||
modifier_item_granite_badge,
|
||||
modifier_item_granite_badge,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_granite_badge"}
|
||||
)
|
||||
____exports.modifier_item_granite_badge = modifier_item_granite_badge
|
||||
return ____exports
|
||||
@@ -0,0 +1,71 @@
|
||||
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
|
||||
--- Железная воля — стойкость к эффектам (стакается).
|
||||
____exports.item_blackshop_rare_iron_resolve = __TS__Class()
|
||||
local item_blackshop_rare_iron_resolve = ____exports.item_blackshop_rare_iron_resolve
|
||||
item_blackshop_rare_iron_resolve.name = "item_blackshop_rare_iron_resolve"
|
||||
item_blackshop_rare_iron_resolve.____file_path = "scripts/vscripts/items/blackshop/rare/item_blackshop_rare_iron_resolve.lua"
|
||||
__TS__ClassExtends(item_blackshop_rare_iron_resolve, BaseItem)
|
||||
function item_blackshop_rare_iron_resolve.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local add = self:GetSpecialValueFor("bonus_status_resist")
|
||||
if caster:HasModifier("modifier_item_iron_resolve") then
|
||||
local m = caster:FindModifierByName("modifier_item_iron_resolve")
|
||||
m:SetStackCount(m:GetStackCount() + add)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, "modifier_item_iron_resolve", {}):SetStackCount(add)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_blackshop_rare_iron_resolve = __TS__Decorate(
|
||||
item_blackshop_rare_iron_resolve,
|
||||
item_blackshop_rare_iron_resolve,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blackshop_rare_iron_resolve"}
|
||||
)
|
||||
____exports.item_blackshop_rare_iron_resolve = item_blackshop_rare_iron_resolve
|
||||
____exports.modifier_item_iron_resolve = __TS__Class()
|
||||
local modifier_item_iron_resolve = ____exports.modifier_item_iron_resolve
|
||||
modifier_item_iron_resolve.name = "modifier_item_iron_resolve"
|
||||
modifier_item_iron_resolve.____file_path = "scripts/vscripts/items/blackshop/rare/item_blackshop_rare_iron_resolve.lua"
|
||||
__TS__ClassExtends(modifier_item_iron_resolve, BaseModifier)
|
||||
function modifier_item_iron_resolve.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_iron_resolve.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_iron_resolve.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_iron_resolve.prototype.GetTexture(self)
|
||||
return "../items/blackshop/ironwood_tree"
|
||||
end
|
||||
function modifier_item_iron_resolve.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_STATUS_RESISTANCE_STACKING}
|
||||
end
|
||||
function modifier_item_iron_resolve.prototype.GetModifierStatusResistanceStacking(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_iron_resolve = __TS__Decorate(
|
||||
modifier_item_iron_resolve,
|
||||
modifier_item_iron_resolve,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_iron_resolve"}
|
||||
)
|
||||
____exports.modifier_item_iron_resolve = modifier_item_iron_resolve
|
||||
return ____exports
|
||||
@@ -0,0 +1,81 @@
|
||||
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
|
||||
____exports.item_blackshop_rare_silver_eye = __TS__Class()
|
||||
local item_blackshop_rare_silver_eye = ____exports.item_blackshop_rare_silver_eye
|
||||
item_blackshop_rare_silver_eye.name = "item_blackshop_rare_silver_eye"
|
||||
item_blackshop_rare_silver_eye.____file_path = "scripts/vscripts/items/blackshop/rare/item_blackshop_rare_silver_eye.lua"
|
||||
__TS__ClassExtends(item_blackshop_rare_silver_eye, BaseItem)
|
||||
function item_blackshop_rare_silver_eye.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local vision = self:GetSpecialValueFor("bonus_vision")
|
||||
if caster:HasModifier("modifier_item_silver_eye") then
|
||||
caster:FindModifierByName("modifier_item_silver_eye"):SetStackCount(caster:FindModifierByName("modifier_item_silver_eye"):GetStackCount() + vision)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, "modifier_item_silver_eye", {}):SetStackCount(vision)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_blackshop_rare_silver_eye = __TS__Decorate(
|
||||
item_blackshop_rare_silver_eye,
|
||||
item_blackshop_rare_silver_eye,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blackshop_rare_silver_eye"}
|
||||
)
|
||||
____exports.item_blackshop_rare_silver_eye = item_blackshop_rare_silver_eye
|
||||
____exports.modifier_item_silver_eye = __TS__Class()
|
||||
local modifier_item_silver_eye = ____exports.modifier_item_silver_eye
|
||||
modifier_item_silver_eye.name = "modifier_item_silver_eye"
|
||||
modifier_item_silver_eye.____file_path = "scripts/vscripts/items/blackshop/rare/item_blackshop_rare_silver_eye.lua"
|
||||
__TS__ClassExtends(modifier_item_silver_eye, BaseModifier)
|
||||
function modifier_item_silver_eye.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_silver_eye.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_silver_eye.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_silver_eye.prototype.GetTexture(self)
|
||||
return "../items/blackshop/silver_eye"
|
||||
end
|
||||
function modifier_item_silver_eye.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_BONUS_NIGHT_VISION, MODIFIER_PROPERTY_BONUS_DAY_VISION, MODIFIER_PROPERTY_CAST_RANGE_BONUS_STACKING, MODIFIER_PROPERTY_ATTACK_RANGE_BONUS}
|
||||
end
|
||||
function modifier_item_silver_eye.prototype.GetBonusNightVision(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
function modifier_item_silver_eye.prototype.GetBonusDayVision(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
function modifier_item_silver_eye.prototype.GetModifierCastRangeBonusStacking(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
function modifier_item_silver_eye.prototype.GetModifierAttackRangeBonus(self)
|
||||
if self:GetParent():IsRangedAttacker() then
|
||||
return self:GetStackCount()
|
||||
end
|
||||
return 0
|
||||
end
|
||||
modifier_item_silver_eye = __TS__Decorate(
|
||||
modifier_item_silver_eye,
|
||||
modifier_item_silver_eye,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_silver_eye"}
|
||||
)
|
||||
____exports.modifier_item_silver_eye = modifier_item_silver_eye
|
||||
return ____exports
|
||||
@@ -0,0 +1,66 @@
|
||||
local ____lualib = require("lualib_bundle")
|
||||
local __TS__Class = ____lualib.__TS__Class
|
||||
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
||||
local __TS__Decorate = ____lualib.__TS__Decorate
|
||||
local __TS__SourceMapTraceBack = ____lualib.__TS__SourceMapTraceBack
|
||||
__TS__SourceMapTraceBack(debug.getinfo(1).short_src, {["8"] = 1,["9"] = 1,["10"] = 1,["11"] = 1,["12"] = 1,["13"] = 4,["14"] = 5,["15"] = 4,["16"] = 5,["17"] = 6,["18"] = 7,["21"] = 9,["22"] = 10,["25"] = 11,["26"] = 13,["27"] = 6,["28"] = 5,["29"] = 5,["30"] = 5,["31"] = 4,["34"] = 5,["35"] = 17,["36"] = 18,["37"] = 17,["38"] = 18,["39"] = 19,["40"] = 20,["41"] = 19,["42"] = 23,["43"] = 24,["44"] = 23,["45"] = 27,["46"] = 28,["47"] = 27,["48"] = 31,["49"] = 32,["52"] = 33,["53"] = 34,["54"] = 35,["55"] = 36,["56"] = 37,["58"] = 31,["59"] = 18,["60"] = 18,["61"] = 18,["62"] = 17,["65"] = 18});
|
||||
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
|
||||
____exports.item_critical_havoc = __TS__Class()
|
||||
local item_critical_havoc = ____exports.item_critical_havoc
|
||||
item_critical_havoc.name = "item_critical_havoc"
|
||||
__TS__ClassExtends(item_critical_havoc, BaseItem)
|
||||
function item_critical_havoc.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
caster:AddNewModifier(caster, self, "modifier_item_critical_havoc", {})
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_critical_havoc = __TS__Decorate(
|
||||
item_critical_havoc,
|
||||
item_critical_havoc,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_critical_havoc"}
|
||||
)
|
||||
____exports.item_critical_havoc = item_critical_havoc
|
||||
____exports.modifier_item_critical_havoc = __TS__Class()
|
||||
local modifier_item_critical_havoc = ____exports.modifier_item_critical_havoc
|
||||
modifier_item_critical_havoc.name = "modifier_item_critical_havoc"
|
||||
__TS__ClassExtends(modifier_item_critical_havoc, BaseModifier)
|
||||
function modifier_item_critical_havoc.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_critical_havoc.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_critical_havoc.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_critical_havoc.prototype.OnCreated(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
print("[Item Test] Adding crit modifier")
|
||||
local stackingCritMod = self:GetParent():FindModifierByName("modifier_stacking_crit")
|
||||
if stackingCritMod then
|
||||
local ability = self:GetAbility()
|
||||
stackingCritMod:AddCustomCrit(10, 200, "item_critical_havoc", ability)
|
||||
end
|
||||
end
|
||||
modifier_item_critical_havoc = __TS__Decorate(
|
||||
modifier_item_critical_havoc,
|
||||
modifier_item_critical_havoc,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_critical_havoc"}
|
||||
)
|
||||
____exports.modifier_item_critical_havoc = modifier_item_critical_havoc
|
||||
return ____exports
|
||||
@@ -0,0 +1,124 @@
|
||||
local ____lualib = require("lualib_bundle")
|
||||
local __TS__Class = ____lualib.__TS__Class
|
||||
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
||||
local __TS__Decorate = ____lualib.__TS__Decorate
|
||||
local __TS__SourceMapTraceBack = ____lualib.__TS__SourceMapTraceBack
|
||||
__TS__SourceMapTraceBack(debug.getinfo(1).short_src, {["8"] = 1,["9"] = 1,["10"] = 1,["11"] = 1,["12"] = 1,["13"] = 3,["14"] = 4,["15"] = 3,["16"] = 4,["17"] = 5,["18"] = 6,["21"] = 8,["22"] = 9,["25"] = 11,["26"] = 13,["27"] = 14,["29"] = 18,["31"] = 20,["32"] = 5,["33"] = 4,["34"] = 4,["35"] = 4,["36"] = 3,["39"] = 4,["40"] = 24,["41"] = 25,["42"] = 24,["43"] = 25,["44"] = 26,["45"] = 27,["46"] = 26,["47"] = 30,["48"] = 31,["49"] = 30,["50"] = 34,["51"] = 35,["52"] = 34,["53"] = 37,["54"] = 38,["55"] = 37,["56"] = 41,["57"] = 42,["58"] = 41,["59"] = 45,["60"] = 46,["61"] = 45,["62"] = 49,["63"] = 50,["66"] = 52,["67"] = 53,["70"] = 54,["71"] = 55,["74"] = 57,["75"] = 58,["76"] = 59,["78"] = 49,["79"] = 25,["80"] = 25,["81"] = 25,["82"] = 24,["85"] = 25,["86"] = 64,["87"] = 65,["88"] = 64,["89"] = 65,["90"] = 66,["91"] = 67,["92"] = 66,["93"] = 69,["94"] = 70,["95"] = 69,["96"] = 72,["97"] = 73,["98"] = 72,["99"] = 75,["100"] = 76,["103"] = 78,["104"] = 79,["107"] = 81,["108"] = 82,["109"] = 83,["110"] = 84,["111"] = 85,["113"] = 87,["116"] = 75,["117"] = 65,["118"] = 65,["119"] = 65,["120"] = 64,["123"] = 65});
|
||||
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
|
||||
____exports.item_damage_dagger = __TS__Class()
|
||||
local item_damage_dagger = ____exports.item_damage_dagger
|
||||
item_damage_dagger.name = "item_damage_dagger"
|
||||
__TS__ClassExtends(item_damage_dagger, BaseItem)
|
||||
function item_damage_dagger.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local stats = self:GetSpecialValueFor("bonus_damage")
|
||||
if caster:HasModifier("modifier_item_damage_dagger") then
|
||||
caster:FindModifierByName("modifier_item_damage_dagger"):SetStackCount(caster:FindModifierByName("modifier_item_damage_dagger"):GetStackCount() + stats)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, "modifier_item_damage_dagger", {}):SetStackCount(stats)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_damage_dagger = __TS__Decorate(
|
||||
item_damage_dagger,
|
||||
item_damage_dagger,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_damage_dagger"}
|
||||
)
|
||||
____exports.item_damage_dagger = item_damage_dagger
|
||||
____exports.modifier_item_damage_dagger = __TS__Class()
|
||||
local modifier_item_damage_dagger = ____exports.modifier_item_damage_dagger
|
||||
modifier_item_damage_dagger.name = "modifier_item_damage_dagger"
|
||||
__TS__ClassExtends(modifier_item_damage_dagger, BaseModifier)
|
||||
function modifier_item_damage_dagger.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_damage_dagger.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_damage_dagger.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_damage_dagger.prototype.GetTexture(self)
|
||||
return "blackshop/damage_dagger"
|
||||
end
|
||||
function modifier_item_damage_dagger.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE, MODIFIER_EVENT_ON_ATTACK_LANDED}
|
||||
end
|
||||
function modifier_item_damage_dagger.prototype.GetModifierPreAttack_BonusDamage(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
function modifier_item_damage_dagger.prototype.OnAttackLanded(self, keys)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local attacker = keys.attacker
|
||||
if attacker ~= self:GetParent() then
|
||||
return
|
||||
end
|
||||
local parent = self:GetParent()
|
||||
if not parent then
|
||||
return
|
||||
end
|
||||
if not parent:HasModifier("modifier_item_damage_dagger_timer") then
|
||||
parent:AddNewModifier(parent, nil, "modifier_item_damage_dagger_timer", {duration = 4}):SetStackCount(self:GetStackCount())
|
||||
parent:RemoveModifierByName("modifier_item_damage_dagger")
|
||||
end
|
||||
end
|
||||
modifier_item_damage_dagger = __TS__Decorate(
|
||||
modifier_item_damage_dagger,
|
||||
modifier_item_damage_dagger,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_damage_dagger"}
|
||||
)
|
||||
____exports.modifier_item_damage_dagger = modifier_item_damage_dagger
|
||||
____exports.modifier_item_damage_dagger_timer = __TS__Class()
|
||||
local modifier_item_damage_dagger_timer = ____exports.modifier_item_damage_dagger_timer
|
||||
modifier_item_damage_dagger_timer.name = "modifier_item_damage_dagger_timer"
|
||||
__TS__ClassExtends(modifier_item_damage_dagger_timer, BaseModifier)
|
||||
function modifier_item_damage_dagger_timer.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_damage_dagger_timer.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_damage_dagger_timer.prototype.GetTexture(self)
|
||||
return "blackshop/damage_dagger"
|
||||
end
|
||||
function modifier_item_damage_dagger_timer.prototype.OnDestroy(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local parent = self:GetParent()
|
||||
if not parent or not parent:IsAlive() then
|
||||
return
|
||||
end
|
||||
local stacks = self:GetStackCount()
|
||||
local modifier = parent:AddNewModifier(parent, nil, "modifier_item_damage_dagger", {})
|
||||
if modifier ~= nil then
|
||||
if self:GetParent():HasModifier("modifier_item_damage_dagger") then
|
||||
modifier:SetStackCount(self:GetParent():FindModifierByName("modifier_item_damage_dagger"):GetStackCount() + stacks)
|
||||
else
|
||||
modifier:SetStackCount(stacks)
|
||||
end
|
||||
end
|
||||
end
|
||||
modifier_item_damage_dagger_timer = __TS__Decorate(
|
||||
modifier_item_damage_dagger_timer,
|
||||
modifier_item_damage_dagger_timer,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_damage_dagger_timer"}
|
||||
)
|
||||
____exports.modifier_item_damage_dagger_timer = modifier_item_damage_dagger_timer
|
||||
return ____exports
|
||||
@@ -0,0 +1,72 @@
|
||||
local ____lualib = require("lualib_bundle")
|
||||
local __TS__Class = ____lualib.__TS__Class
|
||||
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
||||
local __TS__Decorate = ____lualib.__TS__Decorate
|
||||
local __TS__SourceMapTraceBack = ____lualib.__TS__SourceMapTraceBack
|
||||
__TS__SourceMapTraceBack(debug.getinfo(1).short_src, {["8"] = 1,["9"] = 1,["10"] = 1,["11"] = 1,["12"] = 1,["13"] = 3,["14"] = 4,["15"] = 3,["16"] = 4,["17"] = 5,["18"] = 6,["21"] = 8,["22"] = 9,["25"] = 11,["26"] = 13,["27"] = 14,["29"] = 16,["31"] = 18,["32"] = 5,["33"] = 4,["34"] = 4,["35"] = 4,["36"] = 3,["39"] = 4,["40"] = 22,["41"] = 23,["42"] = 22,["43"] = 23,["44"] = 24,["45"] = 25,["46"] = 24,["47"] = 28,["48"] = 29,["49"] = 28,["50"] = 32,["51"] = 33,["52"] = 32,["53"] = 36,["54"] = 37,["55"] = 36,["56"] = 40,["57"] = 41,["58"] = 40,["59"] = 44,["60"] = 45,["61"] = 44,["62"] = 48,["63"] = 49,["64"] = 48,["65"] = 23,["66"] = 23,["67"] = 23,["68"] = 22,["71"] = 23});
|
||||
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
|
||||
____exports.item_egg_of_death = __TS__Class()
|
||||
local item_egg_of_death = ____exports.item_egg_of_death
|
||||
item_egg_of_death.name = "item_egg_of_death"
|
||||
__TS__ClassExtends(item_egg_of_death, BaseItem)
|
||||
function item_egg_of_death.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local stats = self:GetSpecialValueFor("bonus_all")
|
||||
if caster:HasModifier("modifier_item_egg_of_death") then
|
||||
caster:FindModifierByName("modifier_item_egg_of_death"):SetStackCount(caster:FindModifierByName("modifier_item_egg_of_death"):GetStackCount() + stats)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, "modifier_item_egg_of_death", {}):SetStackCount(stats)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_egg_of_death = __TS__Decorate(
|
||||
item_egg_of_death,
|
||||
item_egg_of_death,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_egg_of_death"}
|
||||
)
|
||||
____exports.item_egg_of_death = item_egg_of_death
|
||||
____exports.modifier_item_egg_of_death = __TS__Class()
|
||||
local modifier_item_egg_of_death = ____exports.modifier_item_egg_of_death
|
||||
modifier_item_egg_of_death.name = "modifier_item_egg_of_death"
|
||||
__TS__ClassExtends(modifier_item_egg_of_death, BaseModifier)
|
||||
function modifier_item_egg_of_death.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_egg_of_death.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_egg_of_death.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_egg_of_death.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_STATS_AGILITY_BONUS, MODIFIER_PROPERTY_STATS_INTELLECT_BONUS, MODIFIER_PROPERTY_STATS_STRENGTH_BONUS}
|
||||
end
|
||||
function modifier_item_egg_of_death.prototype.GetModifierBonusStats_Agility(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
function modifier_item_egg_of_death.prototype.GetModifierBonusStats_Intellect(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
function modifier_item_egg_of_death.prototype.GetModifierBonusStats_Strength(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
modifier_item_egg_of_death = __TS__Decorate(
|
||||
modifier_item_egg_of_death,
|
||||
modifier_item_egg_of_death,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_egg_of_death"}
|
||||
)
|
||||
____exports.modifier_item_egg_of_death = modifier_item_egg_of_death
|
||||
return ____exports
|
||||
@@ -0,0 +1,78 @@
|
||||
local ____lualib = require("lualib_bundle")
|
||||
local __TS__Class = ____lualib.__TS__Class
|
||||
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
||||
local __TS__Decorate = ____lualib.__TS__Decorate
|
||||
local __TS__SourceMapTraceBack = ____lualib.__TS__SourceMapTraceBack
|
||||
__TS__SourceMapTraceBack(debug.getinfo(1).short_src, {["8"] = 1,["9"] = 1,["10"] = 1,["11"] = 1,["12"] = 1,["13"] = 3,["14"] = 4,["15"] = 3,["16"] = 4,["17"] = 5,["18"] = 6,["21"] = 8,["22"] = 9,["25"] = 11,["26"] = 13,["27"] = 14,["29"] = 16,["31"] = 18,["32"] = 5,["33"] = 4,["34"] = 4,["35"] = 4,["36"] = 3,["39"] = 4,["40"] = 22,["41"] = 23,["42"] = 22,["43"] = 23,["44"] = 24,["45"] = 25,["46"] = 24,["47"] = 28,["48"] = 29,["49"] = 28,["50"] = 32,["51"] = 33,["52"] = 32,["53"] = 36,["54"] = 37,["55"] = 36,["56"] = 45,["57"] = 46,["58"] = 45,["59"] = 48,["60"] = 49,["61"] = 48,["62"] = 51,["63"] = 52,["64"] = 51,["65"] = 54,["66"] = 55,["67"] = 56,["69"] = 58,["70"] = 54,["71"] = 23,["72"] = 23,["73"] = 23,["74"] = 22,["77"] = 23});
|
||||
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
|
||||
____exports.item_silver_eye = __TS__Class()
|
||||
local item_silver_eye = ____exports.item_silver_eye
|
||||
item_silver_eye.name = "item_silver_eye"
|
||||
__TS__ClassExtends(item_silver_eye, BaseItem)
|
||||
function item_silver_eye.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local vision = self:GetSpecialValueFor("bonus_vision")
|
||||
if caster:HasModifier("modifier_item_silver_eye") then
|
||||
caster:FindModifierByName("modifier_item_silver_eye"):SetStackCount(caster:FindModifierByName("modifier_item_silver_eye"):GetStackCount() + vision)
|
||||
else
|
||||
caster:AddNewModifier(caster, self, "modifier_item_silver_eye", {}):SetStackCount(vision)
|
||||
end
|
||||
UTIL_Remove(self)
|
||||
end
|
||||
item_silver_eye = __TS__Decorate(
|
||||
item_silver_eye,
|
||||
item_silver_eye,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_silver_eye"}
|
||||
)
|
||||
____exports.item_silver_eye = item_silver_eye
|
||||
____exports.modifier_item_silver_eye = __TS__Class()
|
||||
local modifier_item_silver_eye = ____exports.modifier_item_silver_eye
|
||||
modifier_item_silver_eye.name = "modifier_item_silver_eye"
|
||||
__TS__ClassExtends(modifier_item_silver_eye, BaseModifier)
|
||||
function modifier_item_silver_eye.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_silver_eye.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_silver_eye.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_silver_eye.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_BONUS_NIGHT_VISION, MODIFIER_PROPERTY_BONUS_DAY_VISION, MODIFIER_PROPERTY_CAST_RANGE_BONUS_STACKING, MODIFIER_PROPERTY_ATTACK_RANGE_BONUS}
|
||||
end
|
||||
function modifier_item_silver_eye.prototype.GetBonusNightVision(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
function modifier_item_silver_eye.prototype.GetBonusDayVision(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
function modifier_item_silver_eye.prototype.GetModifierCastRangeBonusStacking(self)
|
||||
return self:GetStackCount()
|
||||
end
|
||||
function modifier_item_silver_eye.prototype.GetModifierAttackRangeBonus(self)
|
||||
if self:GetParent():IsRangedAttacker() then
|
||||
return self:GetStackCount()
|
||||
end
|
||||
return 0
|
||||
end
|
||||
modifier_item_silver_eye = __TS__Decorate(
|
||||
modifier_item_silver_eye,
|
||||
modifier_item_silver_eye,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_silver_eye"}
|
||||
)
|
||||
____exports.modifier_item_silver_eye = modifier_item_silver_eye
|
||||
return ____exports
|
||||
@@ -0,0 +1,180 @@
|
||||
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 BaseAbility = ____dota_ts_adapter.BaseAbility
|
||||
local BaseModifier = ____dota_ts_adapter.BaseModifier
|
||||
local registerAbility = ____dota_ts_adapter.registerAbility
|
||||
local registerModifier = ____dota_ts_adapter.registerModifier
|
||||
____exports.item_armlet_of_eternal_hunger = __TS__Class()
|
||||
local item_armlet_of_eternal_hunger = ____exports.item_armlet_of_eternal_hunger
|
||||
item_armlet_of_eternal_hunger.name = "item_armlet_of_eternal_hunger"
|
||||
item_armlet_of_eternal_hunger.____file_path = "scripts/vscripts/items/default_items/item_armlet_of_eternal_hunger.lua"
|
||||
__TS__ClassExtends(item_armlet_of_eternal_hunger, BaseAbility)
|
||||
function item_armlet_of_eternal_hunger.prototype.GetIntrinsicModifierName(self)
|
||||
return "modifier_item_armlet_of_eternal_hunger"
|
||||
end
|
||||
function item_armlet_of_eternal_hunger.prototype.GetAbilityTextureName(self)
|
||||
local caster = self:GetCaster()
|
||||
if caster and caster:HasModifier("modifier_item_armlet_of_eternal_hunger_buff") then
|
||||
return "default_items/armlet_of_eternal_hunger/armlet2"
|
||||
else
|
||||
return "default_items/armlet_of_eternal_hunger/armlet2_off"
|
||||
end
|
||||
end
|
||||
function item_armlet_of_eternal_hunger.prototype.OnToggle(self)
|
||||
local caster = self:GetCaster()
|
||||
local toggle = self:GetToggleState()
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
if toggle then
|
||||
self:EndCooldown()
|
||||
caster:AddNewModifier(caster, self, "modifier_item_armlet_of_eternal_hunger_buff", {})
|
||||
else
|
||||
local mod = caster:FindModifierByName("modifier_item_armlet_of_eternal_hunger_buff")
|
||||
if mod then
|
||||
mod:Destroy()
|
||||
self:UseResources(false, false, false, true)
|
||||
end
|
||||
end
|
||||
end
|
||||
item_armlet_of_eternal_hunger = __TS__Decorate(
|
||||
item_armlet_of_eternal_hunger,
|
||||
item_armlet_of_eternal_hunger,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_armlet_of_eternal_hunger"}
|
||||
)
|
||||
____exports.item_armlet_of_eternal_hunger = item_armlet_of_eternal_hunger
|
||||
____exports.modifier_item_armlet_of_eternal_hunger = __TS__Class()
|
||||
local modifier_item_armlet_of_eternal_hunger = ____exports.modifier_item_armlet_of_eternal_hunger
|
||||
modifier_item_armlet_of_eternal_hunger.name = "modifier_item_armlet_of_eternal_hunger"
|
||||
modifier_item_armlet_of_eternal_hunger.____file_path = "scripts/vscripts/items/default_items/item_armlet_of_eternal_hunger.lua"
|
||||
__TS__ClassExtends(modifier_item_armlet_of_eternal_hunger, BaseModifier)
|
||||
function modifier_item_armlet_of_eternal_hunger.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_armlet_of_eternal_hunger.prototype.GetAttributes(self)
|
||||
return MODIFIER_ATTRIBUTE_PERMANENT
|
||||
end
|
||||
function modifier_item_armlet_of_eternal_hunger.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_armlet_of_eternal_hunger.prototype.OnCreated(self, params)
|
||||
addPhysicalVampirism(
|
||||
nil,
|
||||
self:GetParent(),
|
||||
self:GetAbility():GetSpecialValueFor("lifesteal")
|
||||
)
|
||||
end
|
||||
function modifier_item_armlet_of_eternal_hunger.prototype.OnDestroy(self)
|
||||
if IsClient() then
|
||||
return
|
||||
end
|
||||
reducePhysicalVampirism(
|
||||
nil,
|
||||
self:GetParent(),
|
||||
self:GetAbility():GetSpecialValueFor("lifesteal")
|
||||
)
|
||||
local mod = self:GetParent():FindModifierByName("modifier_item_armlet_of_eternal_hunger_buff")
|
||||
if mod then
|
||||
mod:Destroy()
|
||||
end
|
||||
end
|
||||
function modifier_item_armlet_of_eternal_hunger.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE, MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT, MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS, MODIFIER_PROPERTY_HEALTH_REGEN_CONSTANT}
|
||||
end
|
||||
function modifier_item_armlet_of_eternal_hunger.prototype.GetModifierPhysicalArmorBonus(self, event)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_armor")
|
||||
end
|
||||
function modifier_item_armlet_of_eternal_hunger.prototype.GetModifierPreAttack_BonusDamage(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_damage")
|
||||
end
|
||||
function modifier_item_armlet_of_eternal_hunger.prototype.GetModifierAttackSpeedBonus_Constant(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_attack_speed")
|
||||
end
|
||||
function modifier_item_armlet_of_eternal_hunger.prototype.GetModifierConstantHealthRegen(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_hp_regen")
|
||||
end
|
||||
modifier_item_armlet_of_eternal_hunger = __TS__Decorate(
|
||||
modifier_item_armlet_of_eternal_hunger,
|
||||
modifier_item_armlet_of_eternal_hunger,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_armlet_of_eternal_hunger"}
|
||||
)
|
||||
____exports.modifier_item_armlet_of_eternal_hunger = modifier_item_armlet_of_eternal_hunger
|
||||
____exports.modifier_item_armlet_of_eternal_hunger_buff = __TS__Class()
|
||||
local modifier_item_armlet_of_eternal_hunger_buff = ____exports.modifier_item_armlet_of_eternal_hunger_buff
|
||||
modifier_item_armlet_of_eternal_hunger_buff.name = "modifier_item_armlet_of_eternal_hunger_buff"
|
||||
modifier_item_armlet_of_eternal_hunger_buff.____file_path = "scripts/vscripts/items/default_items/item_armlet_of_eternal_hunger.lua"
|
||||
__TS__ClassExtends(modifier_item_armlet_of_eternal_hunger_buff, BaseModifier)
|
||||
function modifier_item_armlet_of_eternal_hunger_buff.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_armlet_of_eternal_hunger_buff.prototype.OnCreated(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
addPhysicalVampirism(
|
||||
nil,
|
||||
self:GetParent(),
|
||||
self:GetAbility():GetSpecialValueFor("lifesteal_active")
|
||||
)
|
||||
self:StartIntervalThink(0.25)
|
||||
end
|
||||
function modifier_item_armlet_of_eternal_hunger_buff.prototype.OnDestroy(self)
|
||||
if IsClient() then
|
||||
return
|
||||
end
|
||||
reducePhysicalVampirism(
|
||||
nil,
|
||||
self:GetParent(),
|
||||
self:GetAbility():GetSpecialValueFor("lifesteal_active")
|
||||
)
|
||||
end
|
||||
function modifier_item_armlet_of_eternal_hunger_buff.prototype.OnIntervalThink(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
self:GetParent():SetHealth(math.max(
|
||||
self:GetParent():GetHealth() - self:GetAbility():GetSpecialValueFor("health_per_sec") * 0.25,
|
||||
1
|
||||
))
|
||||
end
|
||||
function modifier_item_armlet_of_eternal_hunger_buff.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE, MODIFIER_PROPERTY_MOVESPEED_BONUS_CONSTANT, MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT, MODIFIER_PROPERTY_STATS_STRENGTH_BONUS}
|
||||
end
|
||||
function modifier_item_armlet_of_eternal_hunger_buff.prototype.CheckState(self)
|
||||
return {[MODIFIER_STATE_SILENCED] = true}
|
||||
end
|
||||
function modifier_item_armlet_of_eternal_hunger_buff.prototype.GetModifierPreAttack_BonusDamage(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_damage_active")
|
||||
end
|
||||
function modifier_item_armlet_of_eternal_hunger_buff.prototype.GetModifierAttackSpeedBonus_Constant(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_attack_speed_active")
|
||||
end
|
||||
function modifier_item_armlet_of_eternal_hunger_buff.prototype.GetModifierMoveSpeedBonus_Constant(self)
|
||||
return self:GetAbility():GetSpecialValueFor("movespeed_active")
|
||||
end
|
||||
function modifier_item_armlet_of_eternal_hunger_buff.prototype.GetModifierBonusStats_Strength(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_str_active")
|
||||
end
|
||||
function modifier_item_armlet_of_eternal_hunger_buff.prototype.GetAbilityTextureName(self)
|
||||
return "default_items/armlet_of_eternal_hunger/armlet2"
|
||||
end
|
||||
function modifier_item_armlet_of_eternal_hunger_buff.prototype.GetEffectName(self)
|
||||
return "particles/units/heroes/hero_bloodseeker/bloodseeker_bloodrage.vpcf"
|
||||
end
|
||||
function modifier_item_armlet_of_eternal_hunger_buff.prototype.GetEffectAttachType(self)
|
||||
return PATTACH_ABSORIGIN_FOLLOW
|
||||
end
|
||||
modifier_item_armlet_of_eternal_hunger_buff = __TS__Decorate(
|
||||
modifier_item_armlet_of_eternal_hunger_buff,
|
||||
modifier_item_armlet_of_eternal_hunger_buff,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_armlet_of_eternal_hunger_buff"}
|
||||
)
|
||||
____exports.modifier_item_armlet_of_eternal_hunger_buff = modifier_item_armlet_of_eternal_hunger_buff
|
||||
return ____exports
|
||||
@@ -0,0 +1,55 @@
|
||||
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 registerAbility = ____dota_ts_adapter.registerAbility
|
||||
____exports.item_bag_of_gold = __TS__Class()
|
||||
local item_bag_of_gold = ____exports.item_bag_of_gold
|
||||
item_bag_of_gold.name = "item_bag_of_gold"
|
||||
item_bag_of_gold.____file_path = "scripts/vscripts/items/default_items/item_bag_of_gold.lua"
|
||||
__TS__ClassExtends(item_bag_of_gold, BaseItem)
|
||||
function item_bag_of_gold.prototype.____constructor(self, ...)
|
||||
BaseItem.prototype.____constructor(self, ...)
|
||||
self.GOLD_AMOUNT = RandomInt(10, 50)
|
||||
end
|
||||
function item_bag_of_gold.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local playerID = caster:GetPlayerOwnerID()
|
||||
if not PlayerResource:IsValidPlayerID(playerID) then
|
||||
return
|
||||
end
|
||||
PlayerResource:ModifyGold(playerID, self.GOLD_AMOUNT, true, DOTA_ModifyGold_SharedGold)
|
||||
EmitSoundOnClient(
|
||||
"General.Coins",
|
||||
PlayerResource:GetPlayer(playerID)
|
||||
)
|
||||
SendOverheadEventMessage(
|
||||
PlayerResource:GetPlayer(playerID),
|
||||
OVERHEAD_ALERT_GOLD,
|
||||
caster,
|
||||
self.GOLD_AMOUNT,
|
||||
nil
|
||||
)
|
||||
local container = self:GetContainer()
|
||||
if container then
|
||||
container:RemoveSelf()
|
||||
end
|
||||
self:RemoveSelf()
|
||||
end
|
||||
item_bag_of_gold = __TS__Decorate(
|
||||
item_bag_of_gold,
|
||||
item_bag_of_gold,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_bag_of_gold"}
|
||||
)
|
||||
____exports.item_bag_of_gold = item_bag_of_gold
|
||||
return ____exports
|
||||
@@ -0,0 +1,298 @@
|
||||
local ____lualib = require("lualib_bundle")
|
||||
local Map = ____lualib.Map
|
||||
local __TS__New = ____lualib.__TS__New
|
||||
local __TS__Class = ____lualib.__TS__Class
|
||||
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
||||
local __TS__Decorate = ____lualib.__TS__Decorate
|
||||
local Set = ____lualib.Set
|
||||
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 chainHitTargets = __TS__New(Map)
|
||||
local chainIdCounter = 0
|
||||
____exports.item_balist_custom = __TS__Class()
|
||||
local item_balist_custom = ____exports.item_balist_custom
|
||||
item_balist_custom.name = "item_balist_custom"
|
||||
item_balist_custom.____file_path = "scripts/vscripts/items/default_items/item_balist_custom.lua"
|
||||
__TS__ClassExtends(item_balist_custom, BaseItem)
|
||||
function item_balist_custom.prototype.GetIntrinsicModifierName(self)
|
||||
return "modifier_balist_custom"
|
||||
end
|
||||
function item_balist_custom.prototype.Precache(self, context)
|
||||
PrecacheResource("particle", "particles/items_fx/chain_lightning.vpcf", context)
|
||||
end
|
||||
item_balist_custom = __TS__Decorate(
|
||||
item_balist_custom,
|
||||
item_balist_custom,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_balist_custom"}
|
||||
)
|
||||
____exports.item_balist_custom = item_balist_custom
|
||||
____exports.modifier_balist_custom = __TS__Class()
|
||||
local modifier_balist_custom = ____exports.modifier_balist_custom
|
||||
modifier_balist_custom.name = "modifier_balist_custom"
|
||||
modifier_balist_custom.____file_path = "scripts/vscripts/items/default_items/item_balist_custom.lua"
|
||||
__TS__ClassExtends(modifier_balist_custom, BaseModifier)
|
||||
function modifier_balist_custom.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_balist_custom.prototype.IsDebuff(self)
|
||||
return false
|
||||
end
|
||||
function modifier_balist_custom.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_balist_custom.prototype.GetAttributes(self)
|
||||
return MODIFIER_ATTRIBUTE_MULTIPLE
|
||||
end
|
||||
function modifier_balist_custom.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE, MODIFIER_EVENT_ON_ATTACK_LANDED}
|
||||
end
|
||||
function modifier_balist_custom.prototype.GetModifierPreAttack_BonusDamage(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_damage")
|
||||
end
|
||||
function modifier_balist_custom.prototype.OnAttackLanded(self, event)
|
||||
if event.attacker ~= self:GetParent() then
|
||||
return
|
||||
end
|
||||
if RandomInt(1, 100) > self:GetAbility():GetSpecialValueFor("chance") then
|
||||
return
|
||||
end
|
||||
local ____opt_0 = self:GetAbility()
|
||||
if (____opt_0 and ____opt_0:IsCooldownReady()) == false then
|
||||
return
|
||||
end
|
||||
local mainTarget = event.target
|
||||
local attacker = self:GetCaster()
|
||||
local ability = self:GetAbility()
|
||||
local boltRadius = ability:GetSpecialValueFor("bolt_radius")
|
||||
chainIdCounter = chainIdCounter + 1
|
||||
local chainId = chainIdCounter
|
||||
chainHitTargets:set(
|
||||
chainId,
|
||||
__TS__New(
|
||||
Set,
|
||||
{mainTarget:entindex()}
|
||||
)
|
||||
)
|
||||
mainTarget:AddNewModifier(
|
||||
self:GetParent(),
|
||||
ability,
|
||||
"modifier_balist_custom_dps",
|
||||
{duration = 0.26, initial_stacks = 3, chain_id = chainId, chain_radius = boltRadius}
|
||||
)
|
||||
ability:StartCooldown(ability:GetSpecialValueFor("ability_cooldown"))
|
||||
end
|
||||
function modifier_balist_custom.prototype.OnCreated(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local stackingCritMod = self:GetParent():FindModifierByName("modifier_stacking_crit")
|
||||
local ____addCritMult_5 = addCritMult
|
||||
local ____temp_4 = self:GetCaster()
|
||||
local ____opt_2 = self:GetAbility()
|
||||
____addCritMult_5(
|
||||
nil,
|
||||
____temp_4,
|
||||
____opt_2 and ____opt_2:GetSpecialValueFor("crit_multiplier") or 0
|
||||
)
|
||||
if stackingCritMod then
|
||||
local ability = self:GetAbility()
|
||||
local ____self_11 = stackingCritMod
|
||||
local ____self_11_AddCustomCrit_12 = ____self_11.AddCustomCrit
|
||||
local ____opt_6 = self:GetAbility()
|
||||
local ____temp_10 = ____opt_6 and ____opt_6:GetSpecialValueFor("crit_chance") or 0
|
||||
local ____opt_8 = self:GetAbility()
|
||||
____self_11_AddCustomCrit_12(
|
||||
____self_11,
|
||||
____temp_10,
|
||||
____opt_8 and ____opt_8:GetSpecialValueFor("crit_mult") or 0,
|
||||
"item_balist_custom",
|
||||
ability
|
||||
)
|
||||
end
|
||||
end
|
||||
function modifier_balist_custom.prototype.OnDestroy(self)
|
||||
if IsClient() then
|
||||
return
|
||||
end
|
||||
local parent = self:GetParent()
|
||||
if not parent or not IsValidEntity(parent) then
|
||||
return
|
||||
end
|
||||
local stackingCritModifier = parent:FindModifierByName("modifier_stacking_crit")
|
||||
if not stackingCritModifier then
|
||||
return
|
||||
end
|
||||
local ____reduceCritMult_16 = reduceCritMult
|
||||
local ____temp_15 = self:GetCaster()
|
||||
local ____opt_13 = self:GetAbility()
|
||||
____reduceCritMult_16(
|
||||
nil,
|
||||
____temp_15,
|
||||
____opt_13 and ____opt_13:GetSpecialValueFor("crit_multiplier") or 0
|
||||
)
|
||||
local ability = self:GetAbility()
|
||||
stackingCritModifier:RemoveCrit("item_balist_custom", ability)
|
||||
end
|
||||
modifier_balist_custom = __TS__Decorate(
|
||||
modifier_balist_custom,
|
||||
modifier_balist_custom,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_balist_custom"}
|
||||
)
|
||||
____exports.modifier_balist_custom = modifier_balist_custom
|
||||
local function hitWithBolt(self, attacker, victim, ability, sourceForParticle)
|
||||
local particle = ParticleManager:CreateParticle("particles/items_fx/chain_lightning.vpcf", PATTACH_ABSORIGIN_FOLLOW, victim)
|
||||
if sourceForParticle and IsValidEntity(sourceForParticle) then
|
||||
ParticleManager:SetParticleControlEnt(
|
||||
particle,
|
||||
0,
|
||||
sourceForParticle,
|
||||
PATTACH_POINT_FOLLOW,
|
||||
"attach_hitloc",
|
||||
sourceForParticle:GetAbsOrigin(),
|
||||
true
|
||||
)
|
||||
else
|
||||
ParticleManager:SetParticleControl(
|
||||
particle,
|
||||
0,
|
||||
victim:GetAbsOrigin()
|
||||
)
|
||||
end
|
||||
ParticleManager:SetParticleControlEnt(
|
||||
particle,
|
||||
1,
|
||||
victim,
|
||||
PATTACH_POINT_FOLLOW,
|
||||
"attach_hitloc",
|
||||
victim:GetAbsOrigin(),
|
||||
true
|
||||
)
|
||||
ParticleManager:SetParticleControl(
|
||||
particle,
|
||||
2,
|
||||
Vector(1, 1, 1)
|
||||
)
|
||||
ParticleManager:ReleaseParticleIndex(particle)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
attacker:PerformAttack(
|
||||
victim,
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
true
|
||||
)
|
||||
ApplyDamage({
|
||||
victim = victim,
|
||||
attacker = attacker,
|
||||
damage = ability:GetSpecialValueFor("bolt_damage"),
|
||||
damage_type = DAMAGE_TYPE_MAGICAL,
|
||||
damage_flags = DOTA_DAMAGE_FLAG_NONE,
|
||||
ability = ability
|
||||
})
|
||||
victim:AddNewModifier(
|
||||
victim,
|
||||
ability,
|
||||
"modifier_stunned",
|
||||
{duration = ability:GetSpecialValueFor("stun")}
|
||||
)
|
||||
end
|
||||
____exports.modifier_balist_custom_dps = __TS__Class()
|
||||
local modifier_balist_custom_dps = ____exports.modifier_balist_custom_dps
|
||||
modifier_balist_custom_dps.name = "modifier_balist_custom_dps"
|
||||
modifier_balist_custom_dps.____file_path = "scripts/vscripts/items/default_items/item_balist_custom.lua"
|
||||
__TS__ClassExtends(modifier_balist_custom_dps, BaseModifier)
|
||||
function modifier_balist_custom_dps.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_balist_custom_dps.prototype.IsDebuff(self)
|
||||
return true
|
||||
end
|
||||
function modifier_balist_custom_dps.prototype.IsPurgable(self)
|
||||
return true
|
||||
end
|
||||
function modifier_balist_custom_dps.prototype.OnCreated(self, params)
|
||||
local stacks = params and params.initial_stacks or 3
|
||||
self:SetStackCount(stacks)
|
||||
if (params and params.chain_id) ~= nil and (params and params.chain_radius) ~= nil then
|
||||
self.chainParams = {chain_id = params.chain_id, chain_radius = params.chain_radius}
|
||||
end
|
||||
self:StartIntervalThink(0.25)
|
||||
end
|
||||
function modifier_balist_custom_dps.prototype.OnIntervalThink(self)
|
||||
if self:GetStackCount() == 0 then
|
||||
return
|
||||
end
|
||||
local mainTarget = self:GetParent()
|
||||
local attacker = self:GetCaster()
|
||||
local ability = self:GetAbility()
|
||||
local params = self.chainParams
|
||||
if not attacker or not ability then
|
||||
return
|
||||
end
|
||||
self:SetDuration(0.26, true)
|
||||
self:SetStackCount(self:GetStackCount() - 1)
|
||||
hitWithBolt(
|
||||
nil,
|
||||
attacker,
|
||||
mainTarget,
|
||||
ability,
|
||||
attacker
|
||||
)
|
||||
if params and IsServer() then
|
||||
local hitSet = chainHitTargets:get(params.chain_id)
|
||||
if hitSet then
|
||||
local nearbyEnemies = FindUnitsInRadius(
|
||||
attacker:GetTeamNumber(),
|
||||
mainTarget:GetAbsOrigin(),
|
||||
nil,
|
||||
params.chain_radius,
|
||||
DOTA_UNIT_TARGET_TEAM_ENEMY,
|
||||
bit.bor(
|
||||
bit.bor(DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_BASIC),
|
||||
DOTA_UNIT_TARGET_BUILDING
|
||||
),
|
||||
DOTA_UNIT_TARGET_FLAG_NONE,
|
||||
FIND_CLOSEST,
|
||||
false
|
||||
)
|
||||
for ____, enemy in ipairs(nearbyEnemies) do
|
||||
if enemy and enemy:IsAlive() and not hitSet:has(enemy:entindex()) then
|
||||
hitSet:add(enemy:entindex())
|
||||
hitWithBolt(
|
||||
nil,
|
||||
attacker,
|
||||
enemy,
|
||||
ability,
|
||||
mainTarget
|
||||
)
|
||||
break
|
||||
end
|
||||
end
|
||||
if self:GetStackCount() == 0 then
|
||||
chainHitTargets:delete(params.chain_id)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
function modifier_balist_custom_dps.prototype.GetTexture(self)
|
||||
return "default_items/balist_custom"
|
||||
end
|
||||
modifier_balist_custom_dps = __TS__Decorate(
|
||||
modifier_balist_custom_dps,
|
||||
modifier_balist_custom_dps,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_balist_custom_dps"}
|
||||
)
|
||||
____exports.modifier_balist_custom_dps = modifier_balist_custom_dps
|
||||
return ____exports
|
||||
@@ -0,0 +1 @@
|
||||
--[[ Generated with https://github.com/TypeScriptToLua/TypeScriptToLua ]]
|
||||
@@ -0,0 +1,110 @@
|
||||
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
|
||||
____exports.item_battle_fury_custom = __TS__Class()
|
||||
local item_battle_fury_custom = ____exports.item_battle_fury_custom
|
||||
item_battle_fury_custom.name = "item_battle_fury_custom"
|
||||
item_battle_fury_custom.____file_path = "scripts/vscripts/items/default_items/item_battle_fury_custom.lua"
|
||||
__TS__ClassExtends(item_battle_fury_custom, BaseItem)
|
||||
function item_battle_fury_custom.prototype.GetIntrinsicModifierName(self)
|
||||
return "modifier_battle_fury_custom"
|
||||
end
|
||||
function item_battle_fury_custom.prototype.GetAOERadius(self)
|
||||
return self:GetSpecialValueFor("tree")
|
||||
end
|
||||
function item_battle_fury_custom.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
local point = self:GetCursorPosition()
|
||||
local trees = GridNav:GetAllTreesAroundPoint(
|
||||
point,
|
||||
self:GetSpecialValueFor("tree"),
|
||||
true
|
||||
)
|
||||
if trees and #trees > 0 then
|
||||
self:CutTree(caster, point)
|
||||
end
|
||||
end
|
||||
function item_battle_fury_custom.prototype.CutTree(self, caster, position)
|
||||
GridNav:DestroyTreesAroundPoint(
|
||||
position,
|
||||
self:GetSpecialValueFor("tree"),
|
||||
true
|
||||
)
|
||||
end
|
||||
item_battle_fury_custom = __TS__Decorate(
|
||||
item_battle_fury_custom,
|
||||
item_battle_fury_custom,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_battle_fury_custom"}
|
||||
)
|
||||
____exports.item_battle_fury_custom = item_battle_fury_custom
|
||||
____exports.modifier_battle_fury_custom = __TS__Class()
|
||||
local modifier_battle_fury_custom = ____exports.modifier_battle_fury_custom
|
||||
modifier_battle_fury_custom.name = "modifier_battle_fury_custom"
|
||||
modifier_battle_fury_custom.____file_path = "scripts/vscripts/items/default_items/item_battle_fury_custom.lua"
|
||||
__TS__ClassExtends(modifier_battle_fury_custom, BaseModifier)
|
||||
function modifier_battle_fury_custom.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_battle_fury_custom.prototype.IsDebuff(self)
|
||||
return false
|
||||
end
|
||||
function modifier_battle_fury_custom.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_battle_fury_custom.prototype.GetAttributes(self)
|
||||
return MODIFIER_ATTRIBUTE_MULTIPLE
|
||||
end
|
||||
function modifier_battle_fury_custom.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE, MODIFIER_EVENT_ON_ATTACK_LANDED}
|
||||
end
|
||||
function modifier_battle_fury_custom.prototype.OnAttackLanded(self, event)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
if self:GetParent():IsRangedAttacker() then
|
||||
return
|
||||
end
|
||||
local parent = event.attacker
|
||||
if parent ~= self:GetParent() then
|
||||
return
|
||||
end
|
||||
local ability = self:GetAbility()
|
||||
if not ability then
|
||||
return
|
||||
end
|
||||
local target = event.target
|
||||
local attackDamage = parent:GetAverageTrueAttackDamage(target)
|
||||
local cleaveDamage = attackDamage * (self:GetAbility():GetSpecialValueFor("cleave_damage") / 100)
|
||||
DoCleaveAttack(
|
||||
parent,
|
||||
target,
|
||||
ability,
|
||||
cleaveDamage,
|
||||
self:GetAbility():GetSpecialValueFor("cleave_starting_width"),
|
||||
self:GetAbility():GetSpecialValueFor("cleave_ending_width"),
|
||||
self:GetAbility():GetSpecialValueFor("cleave_distance"),
|
||||
"particles/items_fx/battlefury_cleave.vpcf"
|
||||
)
|
||||
end
|
||||
function modifier_battle_fury_custom.prototype.GetModifierPreAttack_BonusDamage(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_damage")
|
||||
end
|
||||
modifier_battle_fury_custom = __TS__Decorate(
|
||||
modifier_battle_fury_custom,
|
||||
modifier_battle_fury_custom,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_battle_fury_custom"}
|
||||
)
|
||||
____exports.modifier_battle_fury_custom = modifier_battle_fury_custom
|
||||
return ____exports
|
||||
@@ -0,0 +1,138 @@
|
||||
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 registerAbility = ____dota_ts_adapter.registerAbility
|
||||
local registerModifier = ____dota_ts_adapter.registerModifier
|
||||
local BaseModifier = ____dota_ts_adapter.BaseModifier
|
||||
____exports.item_bearstbow = __TS__Class()
|
||||
local item_bearstbow = ____exports.item_bearstbow
|
||||
item_bearstbow.name = "item_bearstbow"
|
||||
item_bearstbow.____file_path = "scripts/vscripts/items/default_items/item_bearstbow.lua"
|
||||
__TS__ClassExtends(item_bearstbow, BaseItem)
|
||||
function item_bearstbow.prototype.GetIntrinsicModifierName(self)
|
||||
return "modifier_item_bearstbow"
|
||||
end
|
||||
item_bearstbow = __TS__Decorate(
|
||||
item_bearstbow,
|
||||
item_bearstbow,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_bearstbow"}
|
||||
)
|
||||
____exports.item_bearstbow = item_bearstbow
|
||||
____exports.modifier_item_bearstbow = __TS__Class()
|
||||
local modifier_item_bearstbow = ____exports.modifier_item_bearstbow
|
||||
modifier_item_bearstbow.name = "modifier_item_bearstbow"
|
||||
modifier_item_bearstbow.____file_path = "scripts/vscripts/items/default_items/item_bearstbow.lua"
|
||||
__TS__ClassExtends(modifier_item_bearstbow, BaseModifier)
|
||||
function modifier_item_bearstbow.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_bearstbow.prototype.IsDebuff(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_bearstbow.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_bearstbow.prototype.OnCreated(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
end
|
||||
function modifier_item_bearstbow.prototype.DeclareFunctions(self)
|
||||
return {
|
||||
MODIFIER_EVENT_ON_ATTACK,
|
||||
MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT,
|
||||
MODIFIER_PROPERTY_ATTACK_RANGE_BONUS,
|
||||
MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE,
|
||||
MODIFIER_PROPERTY_STATS_AGILITY_BONUS,
|
||||
MODIFIER_PROPERTY_STATS_STRENGTH_BONUS,
|
||||
MODIFIER_PROPERTY_STATS_INTELLECT_BONUS,
|
||||
MODIFIER_PROPERTY_HEALTH_BONUS
|
||||
}
|
||||
end
|
||||
function modifier_item_bearstbow.prototype.GetModifierAttackSpeedBonus_Constant(self)
|
||||
return self:GetAbility():GetSpecialValueFor("attack_speed")
|
||||
end
|
||||
function modifier_item_bearstbow.prototype.GetModifierAttackRangeBonus(self)
|
||||
if not self:GetParent():IsRangedAttacker() then
|
||||
return 0
|
||||
end
|
||||
return self:GetAbility():GetSpecialValueFor("attack_range")
|
||||
end
|
||||
function modifier_item_bearstbow.prototype.GetModifierBonusStats_Strength(self)
|
||||
return self:GetAbility():GetSpecialValueFor("strength")
|
||||
end
|
||||
function modifier_item_bearstbow.prototype.GetModifierBonusStats_Agility(self)
|
||||
return self:GetAbility():GetSpecialValueFor("agility")
|
||||
end
|
||||
function modifier_item_bearstbow.prototype.GetModifierBonusStats_Intellect(self)
|
||||
return self:GetAbility():GetSpecialValueFor("intellect")
|
||||
end
|
||||
function modifier_item_bearstbow.prototype.GetModifierHealthBonus(self)
|
||||
return self:GetAbility():GetSpecialValueFor("health")
|
||||
end
|
||||
function modifier_item_bearstbow.prototype.OnAttack(self, event)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local attacker = event.attacker
|
||||
local target = event.target
|
||||
if not attacker or not target then
|
||||
return
|
||||
end
|
||||
if not attacker:IsRealHero() then
|
||||
return
|
||||
end
|
||||
if attacker ~= self:GetParent() then
|
||||
return
|
||||
end
|
||||
if not attacker:IsRangedAttacker() then
|
||||
return
|
||||
end
|
||||
if event.no_attack_cooldown then
|
||||
return
|
||||
end
|
||||
local radius = self:GetParent():GetAttackRangeBuffer() + self:GetParent():GetBaseAttackRange()
|
||||
local units = FindUnitsInRadius(
|
||||
attacker:GetTeamNumber(),
|
||||
attacker:GetAbsOrigin(),
|
||||
nil,
|
||||
radius,
|
||||
DOTA_UNIT_TARGET_TEAM_ENEMY,
|
||||
DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC + DOTA_UNIT_TARGET_BUILDING,
|
||||
DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE,
|
||||
FIND_CLOSEST,
|
||||
false
|
||||
)
|
||||
local attackCount = 0
|
||||
for ____, unit in ipairs(units) do
|
||||
if unit and not unit:IsNull() and unit ~= target and unit:IsAlive() then
|
||||
attacker:PerformAttack(
|
||||
unit,
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
false,
|
||||
true,
|
||||
false,
|
||||
false
|
||||
)
|
||||
attackCount = attackCount + 1
|
||||
end
|
||||
if attackCount >= self:GetAbility():GetSpecialValueFor("attack_count") then
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
modifier_item_bearstbow = __TS__Decorate(
|
||||
modifier_item_bearstbow,
|
||||
modifier_item_bearstbow,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_bearstbow"}
|
||||
)
|
||||
____exports.modifier_item_bearstbow = modifier_item_bearstbow
|
||||
return ____exports
|
||||
@@ -0,0 +1,260 @@
|
||||
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 registerAbility = ____dota_ts_adapter.registerAbility
|
||||
local registerModifier = ____dota_ts_adapter.registerModifier
|
||||
local BaseModifier = ____dota_ts_adapter.BaseModifier
|
||||
local PARTICLE_BLADEMAIL = "particles/econ/items/spectre/spectre_arcana/spectre_arcana_blademail.vpcf"
|
||||
____exports.item_blademail_2 = __TS__Class()
|
||||
local item_blademail_2 = ____exports.item_blademail_2
|
||||
item_blademail_2.name = "item_blademail_2"
|
||||
item_blademail_2.____file_path = "scripts/vscripts/items/default_items/item_blademail_2.lua"
|
||||
__TS__ClassExtends(item_blademail_2, BaseItem)
|
||||
function item_blademail_2.prototype.Precache(self, context)
|
||||
PrecacheResource("particle", PARTICLE_BLADEMAIL, context)
|
||||
end
|
||||
function item_blademail_2.prototype.GetIntrinsicModifierName(self)
|
||||
return "modifier_item_blademail_2"
|
||||
end
|
||||
function item_blademail_2.prototype.GetAOERadius(self)
|
||||
return self:GetSpecialValueFor("radius")
|
||||
end
|
||||
function item_blademail_2.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
local duration = self:GetSpecialValueFor("active_duration")
|
||||
caster:AddNewModifier(caster, self, ____exports.modifier_item_blademail_2_active.name, {duration = duration})
|
||||
EmitSoundOn("DOTA_Item.BladeMail.Activate", caster)
|
||||
end
|
||||
item_blademail_2 = __TS__Decorate(
|
||||
item_blademail_2,
|
||||
item_blademail_2,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blademail_2"}
|
||||
)
|
||||
____exports.item_blademail_2 = item_blademail_2
|
||||
--- Носитель: отражение части входящего урона; аура на союзников и врагов в радиусе.
|
||||
____exports.modifier_item_blademail_2 = __TS__Class()
|
||||
local modifier_item_blademail_2 = ____exports.modifier_item_blademail_2
|
||||
modifier_item_blademail_2.name = "modifier_item_blademail_2"
|
||||
modifier_item_blademail_2.____file_path = "scripts/vscripts/items/default_items/item_blademail_2.lua"
|
||||
__TS__ClassExtends(modifier_item_blademail_2, BaseModifier)
|
||||
function modifier_item_blademail_2.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_blademail_2.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_blademail_2.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_blademail_2.prototype.IsAura(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_blademail_2.prototype.GetModifierAura(self)
|
||||
return "modifier_item_blademail_2_aura"
|
||||
end
|
||||
function modifier_item_blademail_2.prototype.GetAuraRadius(self)
|
||||
return self:GetAbility():GetSpecialValueFor("radius")
|
||||
end
|
||||
function modifier_item_blademail_2.prototype.GetAuraDuration(self)
|
||||
return 0.5
|
||||
end
|
||||
function modifier_item_blademail_2.prototype.GetAuraSearchTeam(self)
|
||||
return DOTA_UNIT_TARGET_TEAM_BOTH
|
||||
end
|
||||
function modifier_item_blademail_2.prototype.GetAuraSearchType(self)
|
||||
return DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC
|
||||
end
|
||||
function modifier_item_blademail_2.prototype.GetAuraSearchFlags(self)
|
||||
return DOTA_UNIT_TARGET_FLAG_NONE
|
||||
end
|
||||
function modifier_item_blademail_2.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_EVENT_ON_TAKEDAMAGE, MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS, MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT}
|
||||
end
|
||||
function modifier_item_blademail_2.prototype.GetModifierPhysicalArmorBonus(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_armor")
|
||||
end
|
||||
function modifier_item_blademail_2.prototype.GetModifierAttackSpeedBonus_Constant(self)
|
||||
return self:GetAbility():GetSpecialValueFor("attack_speed")
|
||||
end
|
||||
function modifier_item_blademail_2.prototype.OnTakeDamage(self, event)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local parent = self:GetParent()
|
||||
local ability = self:GetAbility()
|
||||
if not ability or event.unit ~= parent then
|
||||
return
|
||||
end
|
||||
if event.damage <= 0 then
|
||||
return
|
||||
end
|
||||
if bit.band(event.damage_flags, DOTA_DAMAGE_FLAG_HPLOSS) == DOTA_DAMAGE_FLAG_HPLOSS then
|
||||
return
|
||||
end
|
||||
if bit.band(event.damage_flags, DOTA_DAMAGE_FLAG_REFLECTION) == DOTA_DAMAGE_FLAG_REFLECTION then
|
||||
return
|
||||
end
|
||||
local attacker = event.attacker
|
||||
if not attacker or attacker:IsNull() or not attacker:IsAlive() then
|
||||
return
|
||||
end
|
||||
if attacker == parent then
|
||||
return
|
||||
end
|
||||
if attacker:GetTeamNumber() == parent:GetTeamNumber() then
|
||||
return
|
||||
end
|
||||
if attacker:IsBuilding() or attacker:IsOther() then
|
||||
return
|
||||
end
|
||||
local isActive = parent:HasModifier(____exports.modifier_item_blademail_2_active.name)
|
||||
local reflectPct = ability:GetSpecialValueFor("reflect_pct") * 0.01
|
||||
if isActive then
|
||||
reflectPct = ability:GetSpecialValueFor("active_reflect_pct") * 0.01
|
||||
parent:HealWithParams(
|
||||
event.damage,
|
||||
ability,
|
||||
false,
|
||||
false,
|
||||
parent,
|
||||
false
|
||||
)
|
||||
SendOverheadEventMessage(
|
||||
nil,
|
||||
OVERHEAD_ALERT_HEAL,
|
||||
parent,
|
||||
event.damage,
|
||||
nil
|
||||
)
|
||||
end
|
||||
if reflectPct <= 0 then
|
||||
return
|
||||
end
|
||||
local reflectDamage = event.damage * reflectPct
|
||||
if reflectDamage <= 0 then
|
||||
return
|
||||
end
|
||||
ApplyDamage({
|
||||
victim = attacker,
|
||||
attacker = parent,
|
||||
damage = reflectDamage,
|
||||
damage_type = event.damage_type,
|
||||
ability = ability,
|
||||
damage_flags = DOTA_DAMAGE_FLAG_REFLECTION + DOTA_DAMAGE_FLAG_NO_SPELL_AMPLIFICATION
|
||||
})
|
||||
end
|
||||
modifier_item_blademail_2 = __TS__Decorate(
|
||||
modifier_item_blademail_2,
|
||||
modifier_item_blademail_2,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_blademail_2"}
|
||||
)
|
||||
____exports.modifier_item_blademail_2 = modifier_item_blademail_2
|
||||
--- Актив: ванильный визуал и 100% отражения из KV.
|
||||
____exports.modifier_item_blademail_2_active = __TS__Class()
|
||||
local modifier_item_blademail_2_active = ____exports.modifier_item_blademail_2_active
|
||||
modifier_item_blademail_2_active.name = "modifier_item_blademail_2_active"
|
||||
modifier_item_blademail_2_active.____file_path = "scripts/vscripts/items/default_items/item_blademail_2.lua"
|
||||
__TS__ClassExtends(modifier_item_blademail_2_active, BaseModifier)
|
||||
function modifier_item_blademail_2_active.prototype.RemoveOnDeath(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_blademail_2_active.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_blademail_2_active.prototype.IsDebuff(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_blademail_2_active.prototype.IsPurgable(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_blademail_2_active.prototype.GetEffectName(self)
|
||||
return PARTICLE_BLADEMAIL
|
||||
end
|
||||
function modifier_item_blademail_2_active.prototype.GetEffectAttachType(self)
|
||||
return PATTACH_ABSORIGIN_FOLLOW
|
||||
end
|
||||
function modifier_item_blademail_2_active.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_MIN_HEALTH}
|
||||
end
|
||||
function modifier_item_blademail_2_active.prototype.GetMinHealth(self)
|
||||
return 1
|
||||
end
|
||||
function modifier_item_blademail_2_active.prototype.GetTexture(self)
|
||||
return "../items/default_items/blademail_2"
|
||||
end
|
||||
modifier_item_blademail_2_active = __TS__Decorate(
|
||||
modifier_item_blademail_2_active,
|
||||
modifier_item_blademail_2_active,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_blademail_2_active"}
|
||||
)
|
||||
____exports.modifier_item_blademail_2_active = modifier_item_blademail_2_active
|
||||
--- Аура: союзникам +броня и +скорость атаки, врагам столько же со знаком минус.
|
||||
____exports.modifier_item_blademail_2_aura = __TS__Class()
|
||||
local modifier_item_blademail_2_aura = ____exports.modifier_item_blademail_2_aura
|
||||
modifier_item_blademail_2_aura.name = "modifier_item_blademail_2_aura"
|
||||
modifier_item_blademail_2_aura.____file_path = "scripts/vscripts/items/default_items/item_blademail_2.lua"
|
||||
__TS__ClassExtends(modifier_item_blademail_2_aura, BaseModifier)
|
||||
function modifier_item_blademail_2_aura.prototype.RemoveOnDeath(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_blademail_2_aura.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_blademail_2_aura.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_blademail_2_aura.prototype.IsDebuff(self)
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return true
|
||||
end
|
||||
return self:GetParent():GetTeamNumber() ~= caster:GetTeamNumber()
|
||||
end
|
||||
function modifier_item_blademail_2_aura.prototype.IsBuff(self)
|
||||
return not self:IsDebuff()
|
||||
end
|
||||
function modifier_item_blademail_2_aura.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS, MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT}
|
||||
end
|
||||
function modifier_item_blademail_2_aura.prototype.GetModifierPhysicalArmorBonus(self)
|
||||
local ability = self:GetAbility()
|
||||
local caster = self:GetCaster()
|
||||
if not ability or not caster then
|
||||
return 0
|
||||
end
|
||||
local v = ability:GetSpecialValueFor("aura_armor")
|
||||
return self:GetParent():GetTeamNumber() == caster:GetTeamNumber() and v or -v
|
||||
end
|
||||
function modifier_item_blademail_2_aura.prototype.GetModifierAttackSpeedBonus_Constant(self)
|
||||
local ability = self:GetAbility()
|
||||
local caster = self:GetCaster()
|
||||
if not ability or not caster then
|
||||
return 0
|
||||
end
|
||||
local v = ability:GetSpecialValueFor("aura_attack_speed")
|
||||
return self:GetParent():GetTeamNumber() == caster:GetTeamNumber() and v or -v
|
||||
end
|
||||
function modifier_item_blademail_2_aura.prototype.GetTexture(self)
|
||||
return "../items/default_items/blademail_2"
|
||||
end
|
||||
modifier_item_blademail_2_aura = __TS__Decorate(
|
||||
modifier_item_blademail_2_aura,
|
||||
modifier_item_blademail_2_aura,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_blademail_2_aura"}
|
||||
)
|
||||
____exports.modifier_item_blademail_2_aura = modifier_item_blademail_2_aura
|
||||
return ____exports
|
||||
@@ -0,0 +1,272 @@
|
||||
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 ____modifier_general_fired = require("abilities.modifiers.modifier_general_fired")
|
||||
local modifier_general_fired = ____modifier_general_fired.modifier_general_fired
|
||||
local ____modifier_stats_multiplier = require("modifiers.modifier_stats_multiplier")
|
||||
local removeStatsMultiplierSource = ____modifier_stats_multiplier.removeStatsMultiplierSource
|
||||
local setStatsMultiplierSource = ____modifier_stats_multiplier.setStatsMultiplierSource
|
||||
local BLAZING_RADIANCE_SOURCE_PREFIX = "item_blazing_radiance_custom"
|
||||
local RADIANCE_PARTICLE = "particles/items2_fx/radiance_owner.vpcf"
|
||||
local function getOwnerHealthRegenPerSecond(self, unit)
|
||||
local u = unit
|
||||
if u.GetHealthRegen ~= nil and type(u.GetHealthRegen) == "function" then
|
||||
return math.max(
|
||||
0,
|
||||
u:GetHealthRegen()
|
||||
)
|
||||
end
|
||||
return math.max(
|
||||
0,
|
||||
unit:GetBaseHealthRegen()
|
||||
)
|
||||
end
|
||||
____exports.item_blazing_radiance_custom = __TS__Class()
|
||||
local item_blazing_radiance_custom = ____exports.item_blazing_radiance_custom
|
||||
item_blazing_radiance_custom.name = "item_blazing_radiance_custom"
|
||||
item_blazing_radiance_custom.____file_path = "scripts/vscripts/items/default_items/item_blazing_radiance_custom.lua"
|
||||
__TS__ClassExtends(item_blazing_radiance_custom, BaseItem)
|
||||
function item_blazing_radiance_custom.prototype.Precache(self, context)
|
||||
PrecacheResource("particle", RADIANCE_PARTICLE, context)
|
||||
end
|
||||
function item_blazing_radiance_custom.prototype.GetIntrinsicModifierName(self)
|
||||
return ____exports.modifier_item_blazing_radiance_custom.name
|
||||
end
|
||||
function item_blazing_radiance_custom.prototype.GetAOERadius(self)
|
||||
return self:GetSpecialValueFor("radius")
|
||||
end
|
||||
item_blazing_radiance_custom = __TS__Decorate(
|
||||
item_blazing_radiance_custom,
|
||||
item_blazing_radiance_custom,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_blazing_radiance_custom"}
|
||||
)
|
||||
____exports.item_blazing_radiance_custom = item_blazing_radiance_custom
|
||||
____exports.modifier_item_blazing_radiance_custom = __TS__Class()
|
||||
local modifier_item_blazing_radiance_custom = ____exports.modifier_item_blazing_radiance_custom
|
||||
modifier_item_blazing_radiance_custom.name = "modifier_item_blazing_radiance_custom"
|
||||
modifier_item_blazing_radiance_custom.____file_path = "scripts/vscripts/items/default_items/item_blazing_radiance_custom.lua"
|
||||
__TS__ClassExtends(modifier_item_blazing_radiance_custom, BaseModifier)
|
||||
function modifier_item_blazing_radiance_custom.prototype.____constructor(self, ...)
|
||||
BaseModifier.prototype.____constructor(self, ...)
|
||||
self.statsSourceId = ""
|
||||
end
|
||||
function modifier_item_blazing_radiance_custom.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_blazing_radiance_custom.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_blazing_radiance_custom.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_blazing_radiance_custom.prototype.GetAttributes(self)
|
||||
return MODIFIER_ATTRIBUTE_MULTIPLE
|
||||
end
|
||||
function modifier_item_blazing_radiance_custom.prototype.IsAura(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_blazing_radiance_custom.prototype.GetModifierAura(self)
|
||||
return ____exports.modifier_item_blazing_radiance_custom_enemy_aura.name
|
||||
end
|
||||
function modifier_item_blazing_radiance_custom.prototype.GetAuraRadius(self)
|
||||
return self:GetAbility():GetSpecialValueFor("radius")
|
||||
end
|
||||
function modifier_item_blazing_radiance_custom.prototype.GetAuraDuration(self)
|
||||
return 1
|
||||
end
|
||||
function modifier_item_blazing_radiance_custom.prototype.GetAuraSearchTeam(self)
|
||||
return DOTA_UNIT_TARGET_TEAM_ENEMY
|
||||
end
|
||||
function modifier_item_blazing_radiance_custom.prototype.GetAuraSearchType(self)
|
||||
return DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC
|
||||
end
|
||||
function modifier_item_blazing_radiance_custom.prototype.GetAuraSearchFlags(self)
|
||||
return DOTA_UNIT_TARGET_FLAG_NONE
|
||||
end
|
||||
function modifier_item_blazing_radiance_custom.prototype.DeclareFunctions(self)
|
||||
return {
|
||||
MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE,
|
||||
MODIFIER_PROPERTY_EVASION_CONSTANT,
|
||||
MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT,
|
||||
MODIFIER_PROPERTY_MAGICAL_RESISTANCE_BONUS,
|
||||
MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS,
|
||||
MODIFIER_PROPERTY_HEALTH_REGEN_CONSTANT,
|
||||
MODIFIER_PROPERTY_MANA_REGEN_CONSTANT,
|
||||
MODIFIER_PROPERTY_STATS_STRENGTH_BONUS,
|
||||
MODIFIER_PROPERTY_STATS_AGILITY_BONUS,
|
||||
MODIFIER_PROPERTY_STATS_INTELLECT_BONUS
|
||||
}
|
||||
end
|
||||
function modifier_item_blazing_radiance_custom.prototype.GetModifierBonusStats_Strength(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_all_stats")
|
||||
end
|
||||
function modifier_item_blazing_radiance_custom.prototype.GetModifierBonusStats_Agility(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_all_stats")
|
||||
end
|
||||
function modifier_item_blazing_radiance_custom.prototype.GetModifierBonusStats_Intellect(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_all_stats")
|
||||
end
|
||||
function modifier_item_blazing_radiance_custom.prototype.GetModifierPreAttack_BonusDamage(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_damage")
|
||||
end
|
||||
function modifier_item_blazing_radiance_custom.prototype.GetModifierEvasion_Constant(self)
|
||||
return self:GetAbility():GetSpecialValueFor("evasion")
|
||||
end
|
||||
function modifier_item_blazing_radiance_custom.prototype.GetModifierAttackSpeedBonus_Constant(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_attack_speed")
|
||||
end
|
||||
function modifier_item_blazing_radiance_custom.prototype.GetModifierMagicalResistanceBonus(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_magic_resistance")
|
||||
end
|
||||
function modifier_item_blazing_radiance_custom.prototype.GetModifierPhysicalArmorBonus(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_physical_armor")
|
||||
end
|
||||
function modifier_item_blazing_radiance_custom.prototype.GetModifierConstantHealthRegen(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_health_regen")
|
||||
end
|
||||
function modifier_item_blazing_radiance_custom.prototype.GetModifierConstantManaRegen(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_mana_regen")
|
||||
end
|
||||
function modifier_item_blazing_radiance_custom.prototype.OnCreated(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local ability = self:GetAbility()
|
||||
self:StartIntervalThink(ability:GetSpecialValueFor("tick_interval"))
|
||||
self.particleId = ParticleManager:CreateParticle(
|
||||
RADIANCE_PARTICLE,
|
||||
PATTACH_ABSORIGIN_FOLLOW,
|
||||
self:GetParent()
|
||||
)
|
||||
ParticleManager:SetParticleShouldCheckFoW(self.particleId, false)
|
||||
local hero = self:GetParent()
|
||||
if hero and hero:IsRealHero() then
|
||||
self.statsSourceId = (BLAZING_RADIANCE_SOURCE_PREFIX .. "_") .. tostring(hero:entindex())
|
||||
setStatsMultiplierSource(
|
||||
nil,
|
||||
hero,
|
||||
self.statsSourceId,
|
||||
function()
|
||||
if not hero or not IsValidEntity(hero) or not hero:IsRealHero() then
|
||||
return 0
|
||||
end
|
||||
return ability and ability:GetSpecialValueFor("all_stats_pct") or 0
|
||||
end,
|
||||
"all_stats_pct"
|
||||
)
|
||||
end
|
||||
end
|
||||
function modifier_item_blazing_radiance_custom.prototype.OnDestroy(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
if self.particleId ~= nil then
|
||||
ParticleManager:DestroyParticle(self.particleId, false)
|
||||
ParticleManager:ReleaseParticleIndex(self.particleId)
|
||||
self.particleId = nil
|
||||
end
|
||||
if self.statsSourceId ~= "" then
|
||||
local hero = self:GetParent()
|
||||
if hero and IsValidEntity(hero) then
|
||||
removeStatsMultiplierSource(nil, hero, self.statsSourceId)
|
||||
end
|
||||
self.statsSourceId = ""
|
||||
end
|
||||
end
|
||||
function modifier_item_blazing_radiance_custom.prototype.OnIntervalThink(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
if not self:GetParent():IsAlive() then
|
||||
return
|
||||
end
|
||||
local ____opt_4 = self:GetCaster()
|
||||
if ____opt_4 and ____opt_4:IsIllusion() then
|
||||
return
|
||||
end
|
||||
local ability = self:GetAbility()
|
||||
local owner = self:GetParent()
|
||||
local radius = ability:GetSpecialValueFor("radius")
|
||||
local tickInterval = ability:GetSpecialValueFor("tick_interval")
|
||||
local healthRegen = getOwnerHealthRegenPerSecond(nil, owner)
|
||||
local damage = (ability:GetSpecialValueFor("damage") + owner:GetMaxHealth() * (ability:GetSpecialValueFor("health_damage_pct") / 100) + healthRegen * ability:GetSpecialValueFor("health_regen_damage") + owner:GetMaxMana() * (ability:GetSpecialValueFor("mana_damage_pct") / 100)) * tickInterval
|
||||
local enemies = FindUnitsInRadius(
|
||||
owner:GetTeamNumber(),
|
||||
owner:GetAbsOrigin(),
|
||||
nil,
|
||||
radius,
|
||||
DOTA_UNIT_TARGET_TEAM_ENEMY,
|
||||
DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC,
|
||||
DOTA_UNIT_TARGET_FLAG_NONE,
|
||||
FIND_ANY_ORDER,
|
||||
false
|
||||
)
|
||||
local stacksPerTick = ability:GetSpecialValueFor("fire_stack")
|
||||
for ____, enemy in ipairs(enemies) do
|
||||
local burnModifier = enemy:AddNewModifier(owner, ability, modifier_general_fired.name, {})
|
||||
if burnModifier then
|
||||
do
|
||||
local i = 0
|
||||
while i < stacksPerTick do
|
||||
burnModifier:IncrementStackCount()
|
||||
i = i + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
ApplyDamage({
|
||||
victim = enemy,
|
||||
attacker = owner,
|
||||
damage = damage,
|
||||
damage_type = DAMAGE_TYPE_MAGICAL,
|
||||
ability = ability,
|
||||
damage_flags = DOTA_DAMAGE_FLAG_NO_SPELL_AMPLIFICATION
|
||||
})
|
||||
end
|
||||
end
|
||||
modifier_item_blazing_radiance_custom = __TS__Decorate(
|
||||
modifier_item_blazing_radiance_custom,
|
||||
modifier_item_blazing_radiance_custom,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_blazing_radiance_custom"}
|
||||
)
|
||||
____exports.modifier_item_blazing_radiance_custom = modifier_item_blazing_radiance_custom
|
||||
--- Дебафф ауры: подавление магии врагов (Blazing Shroud).
|
||||
____exports.modifier_item_blazing_radiance_custom_enemy_aura = __TS__Class()
|
||||
local modifier_item_blazing_radiance_custom_enemy_aura = ____exports.modifier_item_blazing_radiance_custom_enemy_aura
|
||||
modifier_item_blazing_radiance_custom_enemy_aura.name = "modifier_item_blazing_radiance_custom_enemy_aura"
|
||||
modifier_item_blazing_radiance_custom_enemy_aura.____file_path = "scripts/vscripts/items/default_items/item_blazing_radiance_custom.lua"
|
||||
__TS__ClassExtends(modifier_item_blazing_radiance_custom_enemy_aura, BaseModifier)
|
||||
function modifier_item_blazing_radiance_custom_enemy_aura.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_blazing_radiance_custom_enemy_aura.prototype.IsDebuff(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_blazing_radiance_custom_enemy_aura.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_blazing_radiance_custom_enemy_aura.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_MAGICAL_RESISTANCE_BONUS, MODIFIER_PROPERTY_SPELL_AMPLIFY_PERCENTAGE}
|
||||
end
|
||||
function modifier_item_blazing_radiance_custom_enemy_aura.prototype.GetModifierMagicalResistanceBonus(self)
|
||||
return -self:GetAbility():GetSpecialValueFor("aura_magic_resistance_reduction")
|
||||
end
|
||||
function modifier_item_blazing_radiance_custom_enemy_aura.prototype.GetModifierSpellAmplify_Percentage(self)
|
||||
return -self:GetAbility():GetSpecialValueFor("aura_spell_amp_reduction")
|
||||
end
|
||||
modifier_item_blazing_radiance_custom_enemy_aura = __TS__Decorate(
|
||||
modifier_item_blazing_radiance_custom_enemy_aura,
|
||||
modifier_item_blazing_radiance_custom_enemy_aura,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_blazing_radiance_custom_enemy_aura"}
|
||||
)
|
||||
____exports.modifier_item_blazing_radiance_custom_enemy_aura = modifier_item_blazing_radiance_custom_enemy_aura
|
||||
return ____exports
|
||||
@@ -0,0 +1,207 @@
|
||||
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 registerAbility = ____dota_ts_adapter.registerAbility
|
||||
local registerModifier = ____dota_ts_adapter.registerModifier
|
||||
local BaseModifier = ____dota_ts_adapter.BaseModifier
|
||||
____exports.item_bloodstone_magical = __TS__Class()
|
||||
local item_bloodstone_magical = ____exports.item_bloodstone_magical
|
||||
item_bloodstone_magical.name = "item_bloodstone_magical"
|
||||
item_bloodstone_magical.____file_path = "scripts/vscripts/items/default_items/item_bloodstone_magical.lua"
|
||||
__TS__ClassExtends(item_bloodstone_magical, BaseItem)
|
||||
function item_bloodstone_magical.prototype.GetIntrinsicModifierName(self)
|
||||
return "modifier_item_bloodstone_magical"
|
||||
end
|
||||
function item_bloodstone_magical.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
self:GetCaster():AddNewModifier(
|
||||
self:GetCaster(),
|
||||
self,
|
||||
"modifier_item_bloodstone_magical_vampirism",
|
||||
{duration = self:GetSpecialValueFor("duration")}
|
||||
)
|
||||
end
|
||||
item_bloodstone_magical = __TS__Decorate(
|
||||
item_bloodstone_magical,
|
||||
item_bloodstone_magical,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_bloodstone_magical"}
|
||||
)
|
||||
____exports.item_bloodstone_magical = item_bloodstone_magical
|
||||
____exports.modifier_item_bloodstone_magical = __TS__Class()
|
||||
local modifier_item_bloodstone_magical = ____exports.modifier_item_bloodstone_magical
|
||||
modifier_item_bloodstone_magical.name = "modifier_item_bloodstone_magical"
|
||||
modifier_item_bloodstone_magical.____file_path = "scripts/vscripts/items/default_items/item_bloodstone_magical.lua"
|
||||
__TS__ClassExtends(modifier_item_bloodstone_magical, BaseModifier)
|
||||
function modifier_item_bloodstone_magical.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_bloodstone_magical.prototype.IsDebuff(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_bloodstone_magical.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_bloodstone_magical.prototype.DeclareFunctions(self)
|
||||
return {
|
||||
MODIFIER_PROPERTY_HEALTH_BONUS,
|
||||
MODIFIER_PROPERTY_MANA_BONUS,
|
||||
MODIFIER_PROPERTY_HEALTH_REGEN_CONSTANT,
|
||||
MODIFIER_PROPERTY_MANA_REGEN_CONSTANT,
|
||||
MODIFIER_PROPERTY_SPELL_AMPLIFY_PERCENTAGE,
|
||||
MODIFIER_PROPERTY_COOLDOWN_PERCENTAGE
|
||||
}
|
||||
end
|
||||
function modifier_item_bloodstone_magical.prototype.OnCreated(self, params)
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
addMagicalVampirism(
|
||||
nil,
|
||||
caster,
|
||||
self:GetAbility():GetSpecialValueFor("spell_lifesteal")
|
||||
)
|
||||
end
|
||||
function modifier_item_bloodstone_magical.prototype.OnDestroy(self)
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
reduceMagicalVampirism(
|
||||
nil,
|
||||
caster,
|
||||
self:GetAbility():GetSpecialValueFor("spell_lifesteal")
|
||||
)
|
||||
end
|
||||
function modifier_item_bloodstone_magical.prototype.GetModifierHealthBonus(self)
|
||||
local item = self:GetAbility()
|
||||
if not item then
|
||||
return 0
|
||||
end
|
||||
local ____opt_0 = self:GetCaster()
|
||||
if not (____opt_0 and ____opt_0:HasItemInInventory("item_bloodstone_magical")) then
|
||||
return 0
|
||||
end
|
||||
return item:GetSpecialValueFor("bonus_health")
|
||||
end
|
||||
function modifier_item_bloodstone_magical.prototype.GetModifierManaBonus(self)
|
||||
local item = self:GetAbility()
|
||||
if not item then
|
||||
return 0
|
||||
end
|
||||
local ____opt_2 = self:GetCaster()
|
||||
if not (____opt_2 and ____opt_2:HasItemInInventory("item_bloodstone_magical")) then
|
||||
return 0
|
||||
end
|
||||
return item:GetSpecialValueFor("bonus_mana")
|
||||
end
|
||||
function modifier_item_bloodstone_magical.prototype.GetModifierConstantHealthRegen(self)
|
||||
local item = self:GetAbility()
|
||||
if not item then
|
||||
return 0
|
||||
end
|
||||
local ____opt_4 = self:GetCaster()
|
||||
if not (____opt_4 and ____opt_4:HasItemInInventory("item_bloodstone_magical")) then
|
||||
return 0
|
||||
end
|
||||
return item:GetSpecialValueFor("bonus_health_regen")
|
||||
end
|
||||
function modifier_item_bloodstone_magical.prototype.GetModifierConstantManaRegen(self)
|
||||
local item = self:GetAbility()
|
||||
if not item then
|
||||
return 0
|
||||
end
|
||||
local ____opt_6 = self:GetCaster()
|
||||
if not (____opt_6 and ____opt_6:HasItemInInventory("item_bloodstone_magical")) then
|
||||
return 0
|
||||
end
|
||||
return item:GetSpecialValueFor("bonus_mana_regen")
|
||||
end
|
||||
modifier_item_bloodstone_magical = __TS__Decorate(
|
||||
modifier_item_bloodstone_magical,
|
||||
modifier_item_bloodstone_magical,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_bloodstone_magical"}
|
||||
)
|
||||
____exports.modifier_item_bloodstone_magical = modifier_item_bloodstone_magical
|
||||
____exports.modifier_item_bloodstone_magical_vampirism = __TS__Class()
|
||||
local modifier_item_bloodstone_magical_vampirism = ____exports.modifier_item_bloodstone_magical_vampirism
|
||||
modifier_item_bloodstone_magical_vampirism.name = "modifier_item_bloodstone_magical_vampirism"
|
||||
modifier_item_bloodstone_magical_vampirism.____file_path = "scripts/vscripts/items/default_items/item_bloodstone_magical.lua"
|
||||
__TS__ClassExtends(modifier_item_bloodstone_magical_vampirism, BaseModifier)
|
||||
function modifier_item_bloodstone_magical_vampirism.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_bloodstone_magical_vampirism.prototype.IsDebuff(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_bloodstone_magical_vampirism.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_bloodstone_magical_vampirism.prototype.GetTexture(self)
|
||||
return "default_items/bloodstone2"
|
||||
end
|
||||
function modifier_item_bloodstone_magical_vampirism.prototype.OnCreated(self, params)
|
||||
local caster = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
if IsClient() then
|
||||
return
|
||||
end
|
||||
local player = caster:GetPlayerOwner()
|
||||
if not player then
|
||||
return
|
||||
end
|
||||
addMagicalVampirism(
|
||||
nil,
|
||||
caster,
|
||||
self:GetAbility():GetSpecialValueFor("spell_lifesteal_active")
|
||||
)
|
||||
self.particle = ParticleManager:CreateParticleForPlayer("particles/bloodstone_full_screen_effect.vpcf", PATTACH_ABSORIGIN_FOLLOW, caster, player)
|
||||
EmitSoundOn("bloodstone_magical_sound", caster)
|
||||
end
|
||||
function modifier_item_bloodstone_magical_vampirism.prototype.OnRefresh(self, params)
|
||||
if self.particle then
|
||||
ParticleManager:DestroyParticle(self.particle, false)
|
||||
end
|
||||
self:OnCreated(params)
|
||||
end
|
||||
function modifier_item_bloodstone_magical_vampirism.prototype.OnDestroy(self)
|
||||
if IsClient() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if self.particle then
|
||||
ParticleManager:DestroyParticle(self.particle, false)
|
||||
end
|
||||
reduceMagicalVampirism(
|
||||
nil,
|
||||
caster,
|
||||
self:GetAbility():GetSpecialValueFor("spell_lifesteal_active")
|
||||
)
|
||||
end
|
||||
function modifier_item_bloodstone_magical_vampirism.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_CASTTIME_PERCENTAGE, MODIFIER_PROPERTY_COOLDOWN_PERCENTAGE}
|
||||
end
|
||||
function modifier_item_bloodstone_magical_vampirism.prototype.GetModifierPercentageCasttime(self)
|
||||
return self:GetAbility():GetSpecialValueFor("casttime_reduction")
|
||||
end
|
||||
function modifier_item_bloodstone_magical_vampirism.prototype.GetModifierPercentageCooldown(self)
|
||||
return self:GetAbility():GetSpecialValueFor("cooldown_reduction_active")
|
||||
end
|
||||
modifier_item_bloodstone_magical_vampirism = __TS__Decorate(
|
||||
modifier_item_bloodstone_magical_vampirism,
|
||||
modifier_item_bloodstone_magical_vampirism,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_bloodstone_magical_vampirism"}
|
||||
)
|
||||
____exports.modifier_item_bloodstone_magical_vampirism = modifier_item_bloodstone_magical_vampirism
|
||||
return ____exports
|
||||
@@ -0,0 +1,266 @@
|
||||
local ____lualib = require("lualib_bundle")
|
||||
local __TS__Class = ____lualib.__TS__Class
|
||||
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
||||
local __TS__Decorate = ____lualib.__TS__Decorate
|
||||
local __TS__StringIncludes = ____lualib.__TS__StringIncludes
|
||||
local __TS__ArrayForEach = ____lualib.__TS__ArrayForEach
|
||||
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 ____clean_harbor_flag_markers = require("quests.clean_harbor_flag_markers")
|
||||
local hideCleanHarborFlagPlacementMarkers = ____clean_harbor_flag_markers.hideCleanHarborFlagPlacementMarkers
|
||||
local isNearCleanHarborFlagPlacement = ____clean_harbor_flag_markers.isNearCleanHarborFlagPlacement
|
||||
local ____SpawnManager = require("SpawnManager")
|
||||
local SpawnManager = ____SpawnManager.SpawnManager
|
||||
local ____QuestSystem = require("quests.QuestSystem")
|
||||
local QuestSystem = ____QuestSystem.QuestSystem
|
||||
____exports.item_clean_harbor = __TS__Class()
|
||||
local item_clean_harbor = ____exports.item_clean_harbor
|
||||
item_clean_harbor.name = "item_clean_harbor"
|
||||
item_clean_harbor.____file_path = "scripts/vscripts/items/default_items/item_clean_harbor.lua"
|
||||
__TS__ClassExtends(item_clean_harbor, BaseItem)
|
||||
function item_clean_harbor.prototype.canPlaceFlagHere(self, caster)
|
||||
return isNearCleanHarborFlagPlacement(
|
||||
nil,
|
||||
caster:GetAbsOrigin()
|
||||
)
|
||||
end
|
||||
function item_clean_harbor.prototype.CastFilterResult(self)
|
||||
if IsServer() then
|
||||
local caster = self:GetCaster()
|
||||
if not self:canPlaceFlagHere(caster) then
|
||||
return UF_FAIL_CUSTOM
|
||||
end
|
||||
return UF_SUCCESS
|
||||
end
|
||||
return UF_SUCCESS
|
||||
end
|
||||
function item_clean_harbor.prototype.GetCustomCastError(self)
|
||||
if IsServer() then
|
||||
local caster = self:GetCaster()
|
||||
if not self:canPlaceFlagHere(caster) then
|
||||
return "#dota_hud_error_not_in_zone"
|
||||
end
|
||||
end
|
||||
return ""
|
||||
end
|
||||
function item_clean_harbor.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if not self:canPlaceFlagHere(caster) then
|
||||
self:EndCooldown()
|
||||
return
|
||||
end
|
||||
hideCleanHarborFlagPlacementMarkers(nil)
|
||||
local duration = 60
|
||||
CreateModifierThinker(
|
||||
caster,
|
||||
self,
|
||||
____exports.modifier_clean_harbor_flag.name,
|
||||
{duration = duration},
|
||||
caster:GetAbsOrigin(),
|
||||
caster:GetTeamNumber(),
|
||||
false
|
||||
)
|
||||
self:RemoveSelf()
|
||||
end
|
||||
item_clean_harbor = __TS__Decorate(
|
||||
item_clean_harbor,
|
||||
item_clean_harbor,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_clean_harbor"}
|
||||
)
|
||||
____exports.item_clean_harbor = item_clean_harbor
|
||||
____exports.modifier_clean_harbor_flag = __TS__Class()
|
||||
local modifier_clean_harbor_flag = ____exports.modifier_clean_harbor_flag
|
||||
modifier_clean_harbor_flag.name = "modifier_clean_harbor_flag"
|
||||
modifier_clean_harbor_flag.____file_path = "scripts/vscripts/items/default_items/item_clean_harbor.lua"
|
||||
__TS__ClassExtends(modifier_clean_harbor_flag, BaseModifier)
|
||||
function modifier_clean_harbor_flag.prototype.____constructor(self, ...)
|
||||
BaseModifier.prototype.____constructor(self, ...)
|
||||
self.lastHeroInRangeTime = 0
|
||||
self.lastBuffTime = 0
|
||||
end
|
||||
function modifier_clean_harbor_flag.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_clean_harbor_flag.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_clean_harbor_flag.prototype.OnCreated(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local parent = self:GetParent()
|
||||
local pos = parent:GetAbsOrigin()
|
||||
self.flagEntity = SpawnEntityFromTableSynchronous("prop_dynamic", {model = "models/props_gameplay/roshans_banner.vmdl", targetname = "clean_harbor_flag", origin = pos})
|
||||
if self.flagParticleId ~= nil then
|
||||
ParticleManager:DestroyParticle(self.flagParticleId, false)
|
||||
ParticleManager:ReleaseParticleIndex(self.flagParticleId)
|
||||
end
|
||||
self.flagParticleId = ParticleManager:CreateParticle("particles/bloodbath_circle.vpcf", PATTACH_WORLDORIGIN, nil)
|
||||
ParticleManager:SetParticleControl(self.flagParticleId, 0, pos)
|
||||
ParticleManager:SetParticleControl(
|
||||
self.flagParticleId,
|
||||
1,
|
||||
Vector(350, 0, 0)
|
||||
)
|
||||
self.lastHeroInRangeTime = GameRules:GetGameTime()
|
||||
self.lastBuffTime = self.lastHeroInRangeTime
|
||||
self:StartIntervalThink(0.25)
|
||||
end
|
||||
function modifier_clean_harbor_flag.prototype.OnIntervalThink(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local parent = self:GetParent()
|
||||
if not parent or parent:IsNull() then
|
||||
return
|
||||
end
|
||||
local pos = parent:GetAbsOrigin()
|
||||
local heroes = FindUnitsInRadius(
|
||||
parent:GetTeamNumber(),
|
||||
pos,
|
||||
nil,
|
||||
350,
|
||||
DOTA_UNIT_TARGET_TEAM_FRIENDLY,
|
||||
DOTA_UNIT_TARGET_HERO,
|
||||
DOTA_UNIT_TARGET_FLAG_NOT_ILLUSIONS,
|
||||
FIND_ANY_ORDER,
|
||||
false
|
||||
)
|
||||
local now = GameRules:GetGameTime()
|
||||
if #heroes > 0 then
|
||||
self.lastHeroInRangeTime = now
|
||||
local targetHero = heroes[1]
|
||||
local spawnManager = SpawnManager:getInstance()
|
||||
local skeletonZoneIds = spawnManager:GetZoneIdsByPrefixes({"zone_skeletons_", "zone_skeletons2_"})
|
||||
local shouldBuff = now - self.lastBuffTime >= 1
|
||||
__TS__ArrayForEach(
|
||||
skeletonZoneIds,
|
||||
function(____, zoneId)
|
||||
local units = spawnManager:GetSpawnedUnits(zoneId)
|
||||
__TS__ArrayForEach(
|
||||
units,
|
||||
function(____, unit)
|
||||
if unit and IsValidEntity(unit) and unit.IsAlive and unit:IsAlive() then
|
||||
local creep = unit
|
||||
creep:MoveToTargetToAttack(targetHero)
|
||||
if shouldBuff then
|
||||
local name
|
||||
do
|
||||
local function ____catch()
|
||||
name = ""
|
||||
end
|
||||
local ____try = pcall(function()
|
||||
name = creep:GetUnitName()
|
||||
end)
|
||||
if not ____try then
|
||||
____catch()
|
||||
end
|
||||
end
|
||||
if __TS__StringIncludes(name, "skeleton") then
|
||||
local anyCreep = creep
|
||||
if anyCreep._cleanHarborBaseMin == nil then
|
||||
anyCreep._cleanHarborBaseMin = creep:GetBaseDamageMin()
|
||||
anyCreep._cleanHarborBaseMax = creep:GetBaseDamageMax()
|
||||
anyCreep._cleanHarborBuffStacks = 0
|
||||
end
|
||||
anyCreep._cleanHarborBuffStacks = (anyCreep._cleanHarborBuffStacks or 0) + 1
|
||||
local stacks = anyCreep._cleanHarborBuffStacks
|
||||
local mult = 1 + 0.02 * stacks
|
||||
local newMin = math.floor(anyCreep._cleanHarborBaseMin * mult)
|
||||
local newMax = math.floor(anyCreep._cleanHarborBaseMax * mult)
|
||||
creep:SetBaseDamageMin(newMin)
|
||||
creep:SetBaseDamageMax(newMax)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
)
|
||||
end
|
||||
)
|
||||
if shouldBuff then
|
||||
self.lastBuffTime = now
|
||||
end
|
||||
else
|
||||
if now - self.lastHeroInRangeTime >= 1 then
|
||||
CustomGameEventManager:Send_ServerToAllClients("CreateIngameErrorMessage", {reason = 80, message = "#clean_harbor_no_hero_near_flag"})
|
||||
end
|
||||
if now - self.lastHeroInRangeTime >= 5 then
|
||||
local questSystem = QuestSystem:getInstance()
|
||||
questSystem:failQuest("kunkka_quest_clean_harbor")
|
||||
self:Destroy()
|
||||
return
|
||||
end
|
||||
end
|
||||
local enemies = FindUnitsInRadius(
|
||||
DOTA_TEAM_NEUTRALS,
|
||||
pos,
|
||||
nil,
|
||||
400,
|
||||
DOTA_UNIT_TARGET_TEAM_ENEMY,
|
||||
DOTA_UNIT_TARGET_BASIC,
|
||||
DOTA_UNIT_TARGET_FLAG_NONE,
|
||||
FIND_ANY_ORDER,
|
||||
false
|
||||
)
|
||||
if #enemies > 0 then
|
||||
local questSystem = QuestSystem:getInstance()
|
||||
questSystem:failQuest("kunkka_quest_clean_harbor")
|
||||
self:Destroy()
|
||||
end
|
||||
end
|
||||
function modifier_clean_harbor_flag.prototype.OnDestroy(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local parent = self:GetParent()
|
||||
if not parent or parent:IsNull() then
|
||||
return
|
||||
end
|
||||
if self.flagParticleId ~= nil then
|
||||
ParticleManager:DestroyParticle(self.flagParticleId, false)
|
||||
ParticleManager:ReleaseParticleIndex(self.flagParticleId)
|
||||
self.flagParticleId = nil
|
||||
end
|
||||
if self.flagEntity and IsValidEntity(self.flagEntity) then
|
||||
UTIL_Remove(self.flagEntity)
|
||||
self.flagEntity = nil
|
||||
end
|
||||
if self:GetRemainingTime() <= 0 then
|
||||
local spawnManager = SpawnManager:getInstance()
|
||||
spawnManager:RemoveSpawnZonesByType("skeletons")
|
||||
spawnManager:RemoveSpawnZonesByType("skeletons2")
|
||||
local skeletonZoneIds = spawnManager:GetZoneIdsByPrefixes({"zone_skeletons_", "zone_skeletons2_"})
|
||||
__TS__ArrayForEach(
|
||||
skeletonZoneIds,
|
||||
function(____, zoneId)
|
||||
local units = spawnManager:GetSpawnedUnits(zoneId)
|
||||
__TS__ArrayForEach(
|
||||
units,
|
||||
function(____, unit)
|
||||
if unit and IsValidEntity(unit) and unit.IsAlive and unit:IsAlive() then
|
||||
unit:ForceKill(false)
|
||||
end
|
||||
end
|
||||
)
|
||||
end
|
||||
)
|
||||
local questSystem = QuestSystem:getInstance()
|
||||
questSystem:addQuestProgress("kunkka_quest_clean_harbor", "clean_harbor", 1)
|
||||
end
|
||||
end
|
||||
modifier_clean_harbor_flag = __TS__Decorate(
|
||||
modifier_clean_harbor_flag,
|
||||
modifier_clean_harbor_flag,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_clean_harbor_flag"}
|
||||
)
|
||||
____exports.modifier_clean_harbor_flag = modifier_clean_harbor_flag
|
||||
return ____exports
|
||||
@@ -0,0 +1,643 @@
|
||||
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 ____modifier_stats_multiplier = require("modifiers.modifier_stats_multiplier")
|
||||
local removeStatsMultiplierSource = ____modifier_stats_multiplier.removeStatsMultiplierSource
|
||||
local setStatsMultiplierSource = ____modifier_stats_multiplier.setStatsMultiplierSource
|
||||
local ____luck = require("utils.luck")
|
||||
local rollLuckChance = ____luck.rollLuckChance
|
||||
local ____incoming_damage_reduction_combine = require("utils.incoming_damage_reduction_combine")
|
||||
local removeIncomingDamageReductionSource = ____incoming_damage_reduction_combine.removeIncomingDamageReductionSource
|
||||
local setIncomingDamageReductionSource = ____incoming_damage_reduction_combine.setIncomingDamageReductionSource
|
||||
local CRIMSON_SHIVAS_SOURCE_PREFIX = "item_crimson_shivas_custom"
|
||||
local CRIMSON_SHIVAS_ALLY_AURA_INCOMING_SOURCE = "modifier_item_crimson_shivas_custom_ally_aura_buff"
|
||||
local CRIMSON_SHIVAS_GUARD_BUFF_INCOMING_SOURCE = "modifier_item_crimson_shivas_custom_guard_buff"
|
||||
local SHIVAS_BLAST_PARTICLE = "particles/items2_fx/shivas_guard_active.vpcf"
|
||||
local SHIVAS_IMPACT_PARTICLE = "particles/items2_fx/shivas_guard_impact.vpcf"
|
||||
local SHIVAS_SLOW_PARTICLE = "particles/generic_gameplay/generic_slowed_cold.vpcf"
|
||||
local GUARD_BUFF_PARTICLE = "particles/units/heroes/hero_grimstroke/grimstroke_ink_swell_buff.vpcf"
|
||||
local MELEE_STRENGTH_BLOCK_PCT = 50
|
||||
____exports.item_crimson_shivas_custom = __TS__Class()
|
||||
local item_crimson_shivas_custom = ____exports.item_crimson_shivas_custom
|
||||
item_crimson_shivas_custom.name = "item_crimson_shivas_custom"
|
||||
item_crimson_shivas_custom.____file_path = "scripts/vscripts/items/default_items/item_crimson_shivas_custom.lua"
|
||||
__TS__ClassExtends(item_crimson_shivas_custom, BaseItem)
|
||||
function item_crimson_shivas_custom.prototype.Precache(self, context)
|
||||
PrecacheResource("particle", SHIVAS_BLAST_PARTICLE, context)
|
||||
PrecacheResource("particle", SHIVAS_IMPACT_PARTICLE, context)
|
||||
PrecacheResource("particle", SHIVAS_SLOW_PARTICLE, context)
|
||||
PrecacheResource("particle", GUARD_BUFF_PARTICLE, context)
|
||||
PrecacheResource("soundfile", "soundevents/game_sounds_items.vsndevts", context)
|
||||
end
|
||||
function item_crimson_shivas_custom.prototype.GetIntrinsicModifierName(self)
|
||||
return ____exports.modifier_item_crimson_shivas_custom.name
|
||||
end
|
||||
function item_crimson_shivas_custom.prototype.GetAOERadius(self)
|
||||
return self:GetSpecialValueFor("guard_radius")
|
||||
end
|
||||
function item_crimson_shivas_custom.prototype.GetCastRange(self)
|
||||
local blastRadius = self:GetSpecialValueFor("blast_radius")
|
||||
if IsServer() then
|
||||
return blastRadius
|
||||
end
|
||||
local ____opt_0 = self:GetCaster()
|
||||
local bonus = ____opt_0 and ____opt_0:GetCastRangeBonus() or 0
|
||||
return blastRadius - bonus
|
||||
end
|
||||
function item_crimson_shivas_custom.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
local blastRadius = self:GetSpecialValueFor("blast_radius")
|
||||
local blastSpeed = self:GetSpecialValueFor("blast_speed")
|
||||
local guardRadius = self:GetSpecialValueFor("guard_radius")
|
||||
local guardDuration = self:GetSpecialValueFor("guard_duration")
|
||||
caster:EmitSound("DOTA_Item.ShivasGuard.Activate")
|
||||
caster:AddNewModifier(caster, self, ____exports.modifier_item_crimson_shivas_custom_blast_thinker.name, {duration = blastRadius / blastSpeed})
|
||||
local allies = FindUnitsInRadius(
|
||||
caster:GetTeamNumber(),
|
||||
caster:GetAbsOrigin(),
|
||||
nil,
|
||||
guardRadius,
|
||||
DOTA_UNIT_TARGET_TEAM_FRIENDLY,
|
||||
DOTA_UNIT_TARGET_HERO,
|
||||
DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES,
|
||||
FIND_CLOSEST,
|
||||
false
|
||||
)
|
||||
for ____, ally in ipairs(allies) do
|
||||
ally:AddNewModifier(caster, self, ____exports.modifier_item_crimson_shivas_custom_guard_buff.name, {duration = guardDuration})
|
||||
ally:EmitSound("Hero_LegionCommander.Overwhelming.Cast")
|
||||
end
|
||||
end
|
||||
item_crimson_shivas_custom = __TS__Decorate(
|
||||
item_crimson_shivas_custom,
|
||||
item_crimson_shivas_custom,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_crimson_shivas_custom"}
|
||||
)
|
||||
____exports.item_crimson_shivas_custom = item_crimson_shivas_custom
|
||||
--- Пассив владельца: статы, блок, аура замедления атаки врагам.
|
||||
____exports.modifier_item_crimson_shivas_custom = __TS__Class()
|
||||
local modifier_item_crimson_shivas_custom = ____exports.modifier_item_crimson_shivas_custom
|
||||
modifier_item_crimson_shivas_custom.name = "modifier_item_crimson_shivas_custom"
|
||||
modifier_item_crimson_shivas_custom.____file_path = "scripts/vscripts/items/default_items/item_crimson_shivas_custom.lua"
|
||||
__TS__ClassExtends(modifier_item_crimson_shivas_custom, BaseModifier)
|
||||
function modifier_item_crimson_shivas_custom.prototype.____constructor(self, ...)
|
||||
BaseModifier.prototype.____constructor(self, ...)
|
||||
self.statsSourceId = ""
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom.prototype.GetAttributes(self)
|
||||
return MODIFIER_ATTRIBUTE_MULTIPLE
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom.prototype.DeclareFunctions(self)
|
||||
return {
|
||||
MODIFIER_PROPERTY_STATS_STRENGTH_BONUS,
|
||||
MODIFIER_PROPERTY_STATS_AGILITY_BONUS,
|
||||
MODIFIER_PROPERTY_STATS_INTELLECT_BONUS,
|
||||
MODIFIER_PROPERTY_HEALTH_BONUS,
|
||||
MODIFIER_PROPERTY_MANA_BONUS,
|
||||
MODIFIER_PROPERTY_HEALTH_REGEN_CONSTANT,
|
||||
MODIFIER_PROPERTY_MANA_REGEN_CONSTANT,
|
||||
MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS,
|
||||
MODIFIER_PROPERTY_PHYSICAL_CONSTANT_BLOCK
|
||||
}
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom.prototype.IsAura(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom.prototype.GetModifierAura(self)
|
||||
return ____exports.modifier_item_crimson_shivas_custom_enemy_aura.name
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom.prototype.GetAuraRadius(self)
|
||||
return self:GetAbility():GetSpecialValueFor("aura_radius")
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom.prototype.GetAuraDuration(self)
|
||||
return 1
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom.prototype.GetAuraSearchTeam(self)
|
||||
return DOTA_UNIT_TARGET_TEAM_ENEMY
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom.prototype.GetAuraSearchType(self)
|
||||
return DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom.prototype.GetAuraSearchFlags(self)
|
||||
return DOTA_UNIT_TARGET_FLAG_NONE
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom.prototype.GetModifierBonusStats_Strength(self)
|
||||
local ability = self:GetAbility()
|
||||
return ability:GetSpecialValueFor("bonus_stats")
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom.prototype.GetModifierBonusStats_Agility(self)
|
||||
local ability = self:GetAbility()
|
||||
return ability:GetSpecialValueFor("bonus_stats")
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom.prototype.GetModifierBonusStats_Intellect(self)
|
||||
local ability = self:GetAbility()
|
||||
return ability:GetSpecialValueFor("bonus_stats")
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom.prototype.GetModifierHealthBonus(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_health")
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom.prototype.GetModifierManaBonus(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_mana")
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom.prototype.GetModifierConstantHealthRegen(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_hp_regen")
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom.prototype.GetModifierConstantManaRegen(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_mana_regen")
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom.prototype.GetModifierPhysicalArmorBonus(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_armor")
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom.prototype.GetModifierPhysical_ConstantBlock(self)
|
||||
if not IsServer() then
|
||||
return 0
|
||||
end
|
||||
local ability = self:GetAbility()
|
||||
if not ability then
|
||||
return 0
|
||||
end
|
||||
local chancePct = ability:GetSpecialValueFor("damage_block_chance")
|
||||
local parent = self:GetParent()
|
||||
local ____parent_IsRealHero_result_2
|
||||
if parent:IsRealHero() then
|
||||
____parent_IsRealHero_result_2 = rollLuckChance(nil, parent, chancePct / 100)
|
||||
else
|
||||
____parent_IsRealHero_result_2 = RollPercentage(chancePct)
|
||||
end
|
||||
local blocked = ____parent_IsRealHero_result_2
|
||||
if not blocked then
|
||||
return 0
|
||||
end
|
||||
local blockAmount = ability:GetSpecialValueFor("damage_block")
|
||||
local baseBlock = parent:IsRangedAttacker() and blockAmount * 0.5 or blockAmount
|
||||
if not parent:IsRealHero() or parent:IsRangedAttacker() then
|
||||
return baseBlock
|
||||
end
|
||||
return baseBlock + parent:GetStrength() * (MELEE_STRENGTH_BLOCK_PCT / 100)
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom.prototype.OnCreated(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local ability = self:GetAbility()
|
||||
if not ability then
|
||||
return
|
||||
end
|
||||
self:GetParent():AddNewModifier(
|
||||
self:GetParent(),
|
||||
ability,
|
||||
____exports.modifier_item_crimson_shivas_custom_ally_aura.name,
|
||||
{}
|
||||
)
|
||||
local hero = self:GetParent()
|
||||
if hero and hero:IsRealHero() then
|
||||
self.statsSourceId = (CRIMSON_SHIVAS_SOURCE_PREFIX .. "_") .. tostring(hero:entindex())
|
||||
setStatsMultiplierSource(
|
||||
nil,
|
||||
hero,
|
||||
self.statsSourceId,
|
||||
function()
|
||||
if not hero or not IsValidEntity(hero) or not hero:IsRealHero() then
|
||||
return 0
|
||||
end
|
||||
return ability:GetSpecialValueFor("all_stats_pct")
|
||||
end,
|
||||
"all_stats_pct"
|
||||
)
|
||||
end
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom.prototype.OnDestroy(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
self:GetParent():RemoveModifierByName(____exports.modifier_item_crimson_shivas_custom_ally_aura.name)
|
||||
if self.statsSourceId ~= "" then
|
||||
local hero = self:GetParent()
|
||||
if hero and IsValidEntity(hero) then
|
||||
removeStatsMultiplierSource(nil, hero, self.statsSourceId)
|
||||
end
|
||||
self.statsSourceId = ""
|
||||
end
|
||||
end
|
||||
modifier_item_crimson_shivas_custom = __TS__Decorate(
|
||||
modifier_item_crimson_shivas_custom,
|
||||
modifier_item_crimson_shivas_custom,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_crimson_shivas_custom"}
|
||||
)
|
||||
____exports.modifier_item_crimson_shivas_custom = modifier_item_crimson_shivas_custom
|
||||
--- Пассивная аура на союзников вокруг владельца.
|
||||
____exports.modifier_item_crimson_shivas_custom_ally_aura = __TS__Class()
|
||||
local modifier_item_crimson_shivas_custom_ally_aura = ____exports.modifier_item_crimson_shivas_custom_ally_aura
|
||||
modifier_item_crimson_shivas_custom_ally_aura.name = "modifier_item_crimson_shivas_custom_ally_aura"
|
||||
modifier_item_crimson_shivas_custom_ally_aura.____file_path = "scripts/vscripts/items/default_items/item_crimson_shivas_custom.lua"
|
||||
__TS__ClassExtends(modifier_item_crimson_shivas_custom_ally_aura, BaseModifier)
|
||||
function modifier_item_crimson_shivas_custom_ally_aura.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_ally_aura.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_ally_aura.prototype.IsAura(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_ally_aura.prototype.GetModifierAura(self)
|
||||
return ____exports.modifier_item_crimson_shivas_custom_ally_aura_buff.name
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_ally_aura.prototype.GetAuraRadius(self)
|
||||
return self:GetAbility():GetSpecialValueFor("aura_radius")
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_ally_aura.prototype.GetAuraDuration(self)
|
||||
return 1
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_ally_aura.prototype.GetAuraSearchTeam(self)
|
||||
return DOTA_UNIT_TARGET_TEAM_FRIENDLY
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_ally_aura.prototype.GetAuraSearchType(self)
|
||||
return DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_ally_aura.prototype.GetAuraSearchFlags(self)
|
||||
return DOTA_UNIT_TARGET_FLAG_NONE
|
||||
end
|
||||
modifier_item_crimson_shivas_custom_ally_aura = __TS__Decorate(
|
||||
modifier_item_crimson_shivas_custom_ally_aura,
|
||||
modifier_item_crimson_shivas_custom_ally_aura,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_crimson_shivas_custom_ally_aura"}
|
||||
)
|
||||
____exports.modifier_item_crimson_shivas_custom_ally_aura = modifier_item_crimson_shivas_custom_ally_aura
|
||||
--- Аура Шивы: снижение скорости атаки врагам.
|
||||
____exports.modifier_item_crimson_shivas_custom_enemy_aura = __TS__Class()
|
||||
local modifier_item_crimson_shivas_custom_enemy_aura = ____exports.modifier_item_crimson_shivas_custom_enemy_aura
|
||||
modifier_item_crimson_shivas_custom_enemy_aura.name = "modifier_item_crimson_shivas_custom_enemy_aura"
|
||||
modifier_item_crimson_shivas_custom_enemy_aura.____file_path = "scripts/vscripts/items/default_items/item_crimson_shivas_custom.lua"
|
||||
__TS__ClassExtends(modifier_item_crimson_shivas_custom_enemy_aura, BaseModifier)
|
||||
function modifier_item_crimson_shivas_custom_enemy_aura.prototype.IsDebuff(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_enemy_aura.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_enemy_aura.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_enemy_aura.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT, MODIFIER_PROPERTY_INCOMING_DAMAGE_PERCENTAGE}
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_enemy_aura.prototype.GetModifierAttackSpeedBonus_Constant(self)
|
||||
return -self:GetAbility():GetSpecialValueFor("aura_as_reduction")
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_enemy_aura.prototype.GetModifierIncomingDamage_Percentage(self)
|
||||
return self:GetAbility():GetSpecialValueFor("aura_enemy_incoming_amp")
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_enemy_aura.prototype.GetTexture(self)
|
||||
return "item_shivas_guard"
|
||||
end
|
||||
modifier_item_crimson_shivas_custom_enemy_aura = __TS__Decorate(
|
||||
modifier_item_crimson_shivas_custom_enemy_aura,
|
||||
modifier_item_crimson_shivas_custom_enemy_aura,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_crimson_shivas_custom_enemy_aura"}
|
||||
)
|
||||
____exports.modifier_item_crimson_shivas_custom_enemy_aura = modifier_item_crimson_shivas_custom_enemy_aura
|
||||
--- Аура на союзников: снижение входящего урона.
|
||||
____exports.modifier_item_crimson_shivas_custom_ally_aura_buff = __TS__Class()
|
||||
local modifier_item_crimson_shivas_custom_ally_aura_buff = ____exports.modifier_item_crimson_shivas_custom_ally_aura_buff
|
||||
modifier_item_crimson_shivas_custom_ally_aura_buff.name = "modifier_item_crimson_shivas_custom_ally_aura_buff"
|
||||
modifier_item_crimson_shivas_custom_ally_aura_buff.____file_path = "scripts/vscripts/items/default_items/item_crimson_shivas_custom.lua"
|
||||
__TS__ClassExtends(modifier_item_crimson_shivas_custom_ally_aura_buff, BaseModifier)
|
||||
function modifier_item_crimson_shivas_custom_ally_aura_buff.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_ally_aura_buff.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_ally_aura_buff.prototype.OnCreated(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
setIncomingDamageReductionSource(
|
||||
nil,
|
||||
self:GetParent(),
|
||||
CRIMSON_SHIVAS_ALLY_AURA_INCOMING_SOURCE,
|
||||
function()
|
||||
local ability = self:GetAbility()
|
||||
if not ability then
|
||||
return 0
|
||||
end
|
||||
return math.max(
|
||||
0,
|
||||
ability:GetSpecialValueFor("aura_ally_incoming_reduction")
|
||||
)
|
||||
end
|
||||
)
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_ally_aura_buff.prototype.OnDestroy(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
removeIncomingDamageReductionSource(
|
||||
nil,
|
||||
self:GetParent(),
|
||||
CRIMSON_SHIVAS_ALLY_AURA_INCOMING_SOURCE
|
||||
)
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_ally_aura_buff.prototype.GetTexture(self)
|
||||
return "item_crimson_guard"
|
||||
end
|
||||
modifier_item_crimson_shivas_custom_ally_aura_buff = __TS__Decorate(
|
||||
modifier_item_crimson_shivas_custom_ally_aura_buff,
|
||||
modifier_item_crimson_shivas_custom_ally_aura_buff,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_crimson_shivas_custom_ally_aura_buff"}
|
||||
)
|
||||
____exports.modifier_item_crimson_shivas_custom_ally_aura_buff = modifier_item_crimson_shivas_custom_ally_aura_buff
|
||||
--- Расходящаяся волна Шивы.
|
||||
____exports.modifier_item_crimson_shivas_custom_blast_thinker = __TS__Class()
|
||||
local modifier_item_crimson_shivas_custom_blast_thinker = ____exports.modifier_item_crimson_shivas_custom_blast_thinker
|
||||
modifier_item_crimson_shivas_custom_blast_thinker.name = "modifier_item_crimson_shivas_custom_blast_thinker"
|
||||
modifier_item_crimson_shivas_custom_blast_thinker.____file_path = "scripts/vscripts/items/default_items/item_crimson_shivas_custom.lua"
|
||||
__TS__ClassExtends(modifier_item_crimson_shivas_custom_blast_thinker, BaseModifier)
|
||||
function modifier_item_crimson_shivas_custom_blast_thinker.prototype.____constructor(self, ...)
|
||||
BaseModifier.prototype.____constructor(self, ...)
|
||||
self.hitted = {}
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_blast_thinker.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_blast_thinker.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_blast_thinker.prototype.GetAttributes(self)
|
||||
return MODIFIER_ATTRIBUTE_MULTIPLE
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_blast_thinker.prototype.OnCreated(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local ability = self:GetAbility()
|
||||
self.hitted = {}
|
||||
self:StartIntervalThink(FrameTime())
|
||||
local particle = ParticleManager:CreateParticle(
|
||||
SHIVAS_BLAST_PARTICLE,
|
||||
PATTACH_ABSORIGIN_FOLLOW,
|
||||
self:GetParent()
|
||||
)
|
||||
ParticleManager:SetParticleControl(
|
||||
particle,
|
||||
1,
|
||||
Vector(
|
||||
ability:GetSpecialValueFor("blast_radius"),
|
||||
self:GetDuration() * 1.33,
|
||||
ability:GetSpecialValueFor("blast_speed")
|
||||
)
|
||||
)
|
||||
self:AddParticle(
|
||||
particle,
|
||||
false,
|
||||
false,
|
||||
15,
|
||||
false,
|
||||
false
|
||||
)
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_blast_thinker.prototype.OnIntervalThink(self)
|
||||
local ability = self:GetAbility()
|
||||
local caster = self:GetCaster()
|
||||
if not ability or not caster then
|
||||
return
|
||||
end
|
||||
local radiusIncrease = ability:GetSpecialValueFor("blast_speed") / (1 / FrameTime()) * 100
|
||||
self:SetStackCount(self:GetStackCount() + radiusIncrease)
|
||||
local radius = self:GetStackCount() / 100
|
||||
AddFOWViewer(
|
||||
caster:GetTeamNumber(),
|
||||
self:GetParent():GetAbsOrigin(),
|
||||
radius,
|
||||
FrameTime(),
|
||||
false
|
||||
)
|
||||
local enemies = FindUnitsInRadius(
|
||||
caster:GetTeamNumber(),
|
||||
self:GetParent():GetAbsOrigin(),
|
||||
nil,
|
||||
radius,
|
||||
DOTA_UNIT_TARGET_TEAM_ENEMY,
|
||||
DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC,
|
||||
DOTA_UNIT_TARGET_FLAG_NONE,
|
||||
FIND_ANY_ORDER,
|
||||
false
|
||||
)
|
||||
local blastDamage = ability:GetSpecialValueFor("blast_damage")
|
||||
local slowDuration = ability:GetSpecialValueFor("slow_duration")
|
||||
for ____, enemy in ipairs(enemies) do
|
||||
do
|
||||
local entIndex = enemy:entindex()
|
||||
if self.hitted[entIndex] then
|
||||
goto __continue77
|
||||
end
|
||||
self.hitted[entIndex] = true
|
||||
local impact = ParticleManager:CreateParticle(SHIVAS_IMPACT_PARTICLE, PATTACH_ABSORIGIN_FOLLOW, enemy)
|
||||
ParticleManager:SetParticleControl(
|
||||
impact,
|
||||
1,
|
||||
self:GetParent():GetAbsOrigin()
|
||||
)
|
||||
ParticleManager:ReleaseParticleIndex(impact)
|
||||
ApplyDamage({
|
||||
victim = enemy,
|
||||
attacker = caster,
|
||||
damage = blastDamage,
|
||||
damage_type = DAMAGE_TYPE_MAGICAL,
|
||||
ability = ability
|
||||
})
|
||||
local duration = slowDuration * (1 - enemy:GetStatusResistance())
|
||||
enemy:AddNewModifier(caster, ability, ____exports.modifier_item_crimson_shivas_custom_blast_debuff.name, {duration = duration})
|
||||
end
|
||||
::__continue77::
|
||||
end
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_blast_thinker.prototype.OnDestroy(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local ability = self:GetAbility()
|
||||
local caster = self:GetCaster()
|
||||
if ability and caster then
|
||||
local radius = self:GetStackCount() / 100
|
||||
AddFOWViewer(
|
||||
caster:GetTeamNumber(),
|
||||
self:GetParent():GetAbsOrigin(),
|
||||
radius,
|
||||
ability:GetSpecialValueFor("slow_duration"),
|
||||
false
|
||||
)
|
||||
end
|
||||
self.hitted = {}
|
||||
end
|
||||
modifier_item_crimson_shivas_custom_blast_thinker = __TS__Decorate(
|
||||
modifier_item_crimson_shivas_custom_blast_thinker,
|
||||
modifier_item_crimson_shivas_custom_blast_thinker,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_crimson_shivas_custom_blast_thinker"}
|
||||
)
|
||||
____exports.modifier_item_crimson_shivas_custom_blast_thinker = modifier_item_crimson_shivas_custom_blast_thinker
|
||||
--- Замедление от волны Шивы.
|
||||
____exports.modifier_item_crimson_shivas_custom_blast_debuff = __TS__Class()
|
||||
local modifier_item_crimson_shivas_custom_blast_debuff = ____exports.modifier_item_crimson_shivas_custom_blast_debuff
|
||||
modifier_item_crimson_shivas_custom_blast_debuff.name = "modifier_item_crimson_shivas_custom_blast_debuff"
|
||||
modifier_item_crimson_shivas_custom_blast_debuff.____file_path = "scripts/vscripts/items/default_items/item_crimson_shivas_custom.lua"
|
||||
__TS__ClassExtends(modifier_item_crimson_shivas_custom_blast_debuff, BaseModifier)
|
||||
function modifier_item_crimson_shivas_custom_blast_debuff.prototype.IsDebuff(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_blast_debuff.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_blast_debuff.prototype.IsPurgable(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_blast_debuff.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE, MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT, MODIFIER_PROPERTY_INCOMING_DAMAGE_PERCENTAGE}
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_blast_debuff.prototype.GetModifierMoveSpeedBonus_Percentage(self)
|
||||
return self:GetAbility():GetSpecialValueFor("slow_move_pct")
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_blast_debuff.prototype.GetModifierAttackSpeedBonus_Constant(self)
|
||||
return self:GetAbility():GetSpecialValueFor("active_as_reduction")
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_blast_debuff.prototype.GetModifierIncomingDamage_Percentage(self)
|
||||
return self:GetAbility():GetSpecialValueFor("aura_enemy_incoming_amp")
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_blast_debuff.prototype.GetEffectName(self)
|
||||
return SHIVAS_SLOW_PARTICLE
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_blast_debuff.prototype.GetEffectAttachType(self)
|
||||
return PATTACH_ABSORIGIN_FOLLOW
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_blast_debuff.prototype.GetTexture(self)
|
||||
return "item_shivas_guard"
|
||||
end
|
||||
modifier_item_crimson_shivas_custom_blast_debuff = __TS__Decorate(
|
||||
modifier_item_crimson_shivas_custom_blast_debuff,
|
||||
modifier_item_crimson_shivas_custom_blast_debuff,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_crimson_shivas_custom_blast_debuff"}
|
||||
)
|
||||
____exports.modifier_item_crimson_shivas_custom_blast_debuff = modifier_item_crimson_shivas_custom_blast_debuff
|
||||
--- Актив Crimson Guard: усиление союзников.
|
||||
____exports.modifier_item_crimson_shivas_custom_guard_buff = __TS__Class()
|
||||
local modifier_item_crimson_shivas_custom_guard_buff = ____exports.modifier_item_crimson_shivas_custom_guard_buff
|
||||
modifier_item_crimson_shivas_custom_guard_buff.name = "modifier_item_crimson_shivas_custom_guard_buff"
|
||||
modifier_item_crimson_shivas_custom_guard_buff.____file_path = "scripts/vscripts/items/default_items/item_crimson_shivas_custom.lua"
|
||||
__TS__ClassExtends(modifier_item_crimson_shivas_custom_guard_buff, BaseModifier)
|
||||
function modifier_item_crimson_shivas_custom_guard_buff.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_guard_buff.prototype.IsPurgable(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_guard_buff.prototype.OnCreated(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local parent = self:GetParent()
|
||||
self.buffParticle = ParticleManager:CreateParticle(GUARD_BUFF_PARTICLE, PATTACH_ABSORIGIN, parent)
|
||||
if parent:ScriptLookupAttachment("attach_hitloc") == 0 then
|
||||
ParticleManager:SetParticleControl(
|
||||
self.buffParticle,
|
||||
1,
|
||||
parent:GetAbsOrigin():__add(Vector(0, 0, 120))
|
||||
)
|
||||
else
|
||||
ParticleManager:SetParticleControlEnt(
|
||||
self.buffParticle,
|
||||
1,
|
||||
parent,
|
||||
PATTACH_POINT_FOLLOW,
|
||||
"attach_hitloc",
|
||||
Vector(0, 0, 0),
|
||||
true
|
||||
)
|
||||
end
|
||||
setIncomingDamageReductionSource(
|
||||
nil,
|
||||
parent,
|
||||
CRIMSON_SHIVAS_GUARD_BUFF_INCOMING_SOURCE,
|
||||
function()
|
||||
local ability = self:GetAbility()
|
||||
if not ability then
|
||||
return 0
|
||||
end
|
||||
return math.max(
|
||||
0,
|
||||
ability:GetSpecialValueFor("aura_ally_incoming_reduction")
|
||||
)
|
||||
end
|
||||
)
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_guard_buff.prototype.OnDestroy(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
removeIncomingDamageReductionSource(
|
||||
nil,
|
||||
self:GetParent(),
|
||||
CRIMSON_SHIVAS_GUARD_BUFF_INCOMING_SOURCE
|
||||
)
|
||||
if self.buffParticle ~= nil then
|
||||
ParticleManager:DestroyParticle(self.buffParticle, false)
|
||||
ParticleManager:ReleaseParticleIndex(self.buffParticle)
|
||||
self.buffParticle = nil
|
||||
end
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_guard_buff.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS, MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT, MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE, MODIFIER_PROPERTY_PHYSICAL_CONSTANT_BLOCK}
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_guard_buff.prototype.GetModifierPhysicalArmorBonus(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_armor_active")
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_guard_buff.prototype.GetModifierAttackSpeedBonus_Constant(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_attack_speed_active")
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_guard_buff.prototype.GetModifierMoveSpeedBonus_Percentage(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_movespeed_active")
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_guard_buff.prototype.GetModifierPhysical_ConstantBlock(self)
|
||||
local ability = self:GetAbility()
|
||||
local caster = self:GetCaster()
|
||||
if not ability or not caster then
|
||||
return 0
|
||||
end
|
||||
local baseBlock = ability:GetSpecialValueFor("damage_block_active")
|
||||
local strBonus = caster:GetStrength() * (ability:GetSpecialValueFor("block_strength_pct") / 100)
|
||||
return baseBlock + strBonus
|
||||
end
|
||||
function modifier_item_crimson_shivas_custom_guard_buff.prototype.GetTexture(self)
|
||||
return "item_crimson_guard"
|
||||
end
|
||||
modifier_item_crimson_shivas_custom_guard_buff = __TS__Decorate(
|
||||
modifier_item_crimson_shivas_custom_guard_buff,
|
||||
modifier_item_crimson_shivas_custom_guard_buff,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_crimson_shivas_custom_guard_buff"}
|
||||
)
|
||||
____exports.modifier_item_crimson_shivas_custom_guard_buff = modifier_item_crimson_shivas_custom_guard_buff
|
||||
return ____exports
|
||||
@@ -0,0 +1,92 @@
|
||||
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
|
||||
____exports.item_crystalys = __TS__Class()
|
||||
local item_crystalys = ____exports.item_crystalys
|
||||
item_crystalys.name = "item_crystalys"
|
||||
item_crystalys.____file_path = "scripts/vscripts/items/default_items/item_crystalys.lua"
|
||||
__TS__ClassExtends(item_crystalys, BaseItem)
|
||||
function item_crystalys.prototype.GetIntrinsicModifierName(self)
|
||||
return "modifier_crystalys"
|
||||
end
|
||||
item_crystalys = __TS__Decorate(
|
||||
item_crystalys,
|
||||
item_crystalys,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_crystalys"}
|
||||
)
|
||||
____exports.item_crystalys = item_crystalys
|
||||
____exports.modifier_crystalys = __TS__Class()
|
||||
local modifier_crystalys = ____exports.modifier_crystalys
|
||||
modifier_crystalys.name = "modifier_crystalys"
|
||||
modifier_crystalys.____file_path = "scripts/vscripts/items/default_items/item_crystalys.lua"
|
||||
__TS__ClassExtends(modifier_crystalys, BaseModifier)
|
||||
function modifier_crystalys.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_crystalys.prototype.IsDebuff(self)
|
||||
return false
|
||||
end
|
||||
function modifier_crystalys.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_crystalys.prototype.GetAttributes(self)
|
||||
return MODIFIER_ATTRIBUTE_MULTIPLE
|
||||
end
|
||||
function modifier_crystalys.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE}
|
||||
end
|
||||
function modifier_crystalys.prototype.GetModifierPreAttack_BonusDamage(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_damage")
|
||||
end
|
||||
function modifier_crystalys.prototype.OnCreated(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local stackingCritMod = self:GetParent():FindModifierByName("modifier_stacking_crit")
|
||||
if stackingCritMod then
|
||||
local ability = self:GetAbility()
|
||||
local ____self_5 = stackingCritMod
|
||||
local ____self_5_AddCustomCrit_6 = ____self_5.AddCustomCrit
|
||||
local ____opt_0 = self:GetAbility()
|
||||
local ____temp_4 = ____opt_0 and ____opt_0:GetSpecialValueFor("crit_chance") or 0
|
||||
local ____opt_2 = self:GetAbility()
|
||||
____self_5_AddCustomCrit_6(
|
||||
____self_5,
|
||||
____temp_4,
|
||||
____opt_2 and ____opt_2:GetSpecialValueFor("crit_mult") or 0,
|
||||
"item_crystalys",
|
||||
ability
|
||||
)
|
||||
end
|
||||
end
|
||||
function modifier_crystalys.prototype.OnDestroy(self)
|
||||
if IsClient() then
|
||||
return
|
||||
end
|
||||
local parent = self:GetParent()
|
||||
if not parent or not IsValidEntity(parent) then
|
||||
return
|
||||
end
|
||||
local stackingCritModifier = parent:FindModifierByName("modifier_stacking_crit")
|
||||
if not stackingCritModifier then
|
||||
return
|
||||
end
|
||||
local ability = self:GetAbility()
|
||||
stackingCritModifier:RemoveCrit("item_crystalys", ability)
|
||||
end
|
||||
modifier_crystalys = __TS__Decorate(
|
||||
modifier_crystalys,
|
||||
modifier_crystalys,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_crystalys"}
|
||||
)
|
||||
____exports.modifier_crystalys = modifier_crystalys
|
||||
return ____exports
|
||||
@@ -0,0 +1,92 @@
|
||||
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
|
||||
____exports.item_dark_crystalys = __TS__Class()
|
||||
local item_dark_crystalys = ____exports.item_dark_crystalys
|
||||
item_dark_crystalys.name = "item_dark_crystalys"
|
||||
item_dark_crystalys.____file_path = "scripts/vscripts/items/default_items/item_dark_crystalys.lua"
|
||||
__TS__ClassExtends(item_dark_crystalys, BaseItem)
|
||||
function item_dark_crystalys.prototype.GetIntrinsicModifierName(self)
|
||||
return "modifier_dark_crystalys"
|
||||
end
|
||||
item_dark_crystalys = __TS__Decorate(
|
||||
item_dark_crystalys,
|
||||
item_dark_crystalys,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_dark_crystalys"}
|
||||
)
|
||||
____exports.item_dark_crystalys = item_dark_crystalys
|
||||
____exports.modifier_dark_crystalys = __TS__Class()
|
||||
local modifier_dark_crystalys = ____exports.modifier_dark_crystalys
|
||||
modifier_dark_crystalys.name = "modifier_dark_crystalys"
|
||||
modifier_dark_crystalys.____file_path = "scripts/vscripts/items/default_items/item_dark_crystalys.lua"
|
||||
__TS__ClassExtends(modifier_dark_crystalys, BaseModifier)
|
||||
function modifier_dark_crystalys.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_dark_crystalys.prototype.IsDebuff(self)
|
||||
return false
|
||||
end
|
||||
function modifier_dark_crystalys.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_dark_crystalys.prototype.GetAttributes(self)
|
||||
return MODIFIER_ATTRIBUTE_MULTIPLE
|
||||
end
|
||||
function modifier_dark_crystalys.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE}
|
||||
end
|
||||
function modifier_dark_crystalys.prototype.GetModifierPreAttack_BonusDamage(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_damage")
|
||||
end
|
||||
function modifier_dark_crystalys.prototype.OnCreated(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local stackingCritMod = self:GetParent():FindModifierByName("modifier_stacking_crit")
|
||||
if stackingCritMod then
|
||||
local ability = self:GetAbility()
|
||||
local ____self_5 = stackingCritMod
|
||||
local ____self_5_AddCustomCrit_6 = ____self_5.AddCustomCrit
|
||||
local ____opt_0 = self:GetAbility()
|
||||
local ____temp_4 = ____opt_0 and ____opt_0:GetSpecialValueFor("crit_chance") or 0
|
||||
local ____opt_2 = self:GetAbility()
|
||||
____self_5_AddCustomCrit_6(
|
||||
____self_5,
|
||||
____temp_4,
|
||||
____opt_2 and ____opt_2:GetSpecialValueFor("crit_mult") or 0,
|
||||
"item_dark_crystalys",
|
||||
ability
|
||||
)
|
||||
end
|
||||
end
|
||||
function modifier_dark_crystalys.prototype.OnDestroy(self)
|
||||
if IsClient() then
|
||||
return
|
||||
end
|
||||
local parent = self:GetParent()
|
||||
if not parent or not IsValidEntity(parent) then
|
||||
return
|
||||
end
|
||||
local stackingCritModifier = parent:FindModifierByName("modifier_stacking_crit")
|
||||
if not stackingCritModifier then
|
||||
return
|
||||
end
|
||||
local ability = self:GetAbility()
|
||||
stackingCritModifier:RemoveCrit("item_dark_crystalys", ability)
|
||||
end
|
||||
modifier_dark_crystalys = __TS__Decorate(
|
||||
modifier_dark_crystalys,
|
||||
modifier_dark_crystalys,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_dark_crystalys"}
|
||||
)
|
||||
____exports.modifier_dark_crystalys = modifier_dark_crystalys
|
||||
return ____exports
|
||||
@@ -0,0 +1,299 @@
|
||||
local ____lualib = require("lualib_bundle")
|
||||
local __TS__Class = ____lualib.__TS__Class
|
||||
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
||||
local __TS__Decorate = ____lualib.__TS__Decorate
|
||||
local __TS__StringStartsWith = ____lualib.__TS__StringStartsWith
|
||||
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 ____incoming_damage_reduction_combine = require("utils.incoming_damage_reduction_combine")
|
||||
local removeIncomingDamageReductionSource = ____incoming_damage_reduction_combine.removeIncomingDamageReductionSource
|
||||
local setIncomingDamageReductionSource = ____incoming_damage_reduction_combine.setIncomingDamageReductionSource
|
||||
local DEMON_SLAYER_OWNER_INCOMING_SOURCE = "modifier_item_demon_slayer"
|
||||
--- Demon Slayer: пассивы Zombie Slayer + статы/эффект Mage Slayer (маг. сопр., регены, DoT + штраф spell amp на цели),
|
||||
-- плюс снижение входящего и бонус ко всему исходящему урону у носителя.
|
||||
____exports.item_demon_slayer = __TS__Class()
|
||||
local item_demon_slayer = ____exports.item_demon_slayer
|
||||
item_demon_slayer.name = "item_demon_slayer"
|
||||
item_demon_slayer.____file_path = "scripts/vscripts/items/default_items/item_demon_slayer.lua"
|
||||
__TS__ClassExtends(item_demon_slayer, BaseItem)
|
||||
function item_demon_slayer.prototype.Precache(self, context)
|
||||
PrecacheResource("particle", "particles/demon_slayer_slash.vpcf", context)
|
||||
PrecacheResource("particle", "particles/items2_fx/mage_slayer_debuff.vpcf", context)
|
||||
PrecacheResource("particle", "particles/units/heroes/hero_dark_willow/dark_willow_wisp_spell_debuff.vpcf", context)
|
||||
end
|
||||
function item_demon_slayer.prototype.GetIntrinsicModifierName(self)
|
||||
return "modifier_item_demon_slayer"
|
||||
end
|
||||
item_demon_slayer = __TS__Decorate(
|
||||
item_demon_slayer,
|
||||
item_demon_slayer,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_demon_slayer"}
|
||||
)
|
||||
____exports.item_demon_slayer = item_demon_slayer
|
||||
____exports.modifier_item_demon_slayer = __TS__Class()
|
||||
local modifier_item_demon_slayer = ____exports.modifier_item_demon_slayer
|
||||
modifier_item_demon_slayer.name = "modifier_item_demon_slayer"
|
||||
modifier_item_demon_slayer.____file_path = "scripts/vscripts/items/default_items/item_demon_slayer.lua"
|
||||
__TS__ClassExtends(modifier_item_demon_slayer, BaseModifier)
|
||||
function modifier_item_demon_slayer.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_demon_slayer.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_demon_slayer.prototype.DeclareFunctions(self)
|
||||
return {
|
||||
MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE,
|
||||
MODIFIER_PROPERTY_STATS_AGILITY_BONUS,
|
||||
MODIFIER_PROPERTY_MANA_REGEN_CONSTANT,
|
||||
MODIFIER_PROPERTY_HEALTH_BONUS,
|
||||
MODIFIER_PROPERTY_HEALTH_REGEN_CONSTANT,
|
||||
MODIFIER_PROPERTY_MAGICAL_RESISTANCE_BONUS,
|
||||
MODIFIER_EVENT_ON_ATTACK_LANDED,
|
||||
MODIFIER_PROPERTY_DAMAGEOUTGOING_PERCENTAGE
|
||||
}
|
||||
end
|
||||
function modifier_item_demon_slayer.prototype.OnCreated(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
setIncomingDamageReductionSource(
|
||||
nil,
|
||||
self:GetParent(),
|
||||
DEMON_SLAYER_OWNER_INCOMING_SOURCE,
|
||||
function()
|
||||
local ability = self:GetAbility()
|
||||
if not ability then
|
||||
return 0
|
||||
end
|
||||
return math.max(
|
||||
0,
|
||||
math.abs(ability:GetSpecialValueFor("incoming_damage_reduction"))
|
||||
)
|
||||
end
|
||||
)
|
||||
end
|
||||
function modifier_item_demon_slayer.prototype.OnDestroy(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
removeIncomingDamageReductionSource(
|
||||
nil,
|
||||
self:GetParent(),
|
||||
DEMON_SLAYER_OWNER_INCOMING_SOURCE
|
||||
)
|
||||
end
|
||||
function modifier_item_demon_slayer.prototype.GetModifierHealthBonus(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_health")
|
||||
end
|
||||
function modifier_item_demon_slayer.prototype.GetModifierConstantManaRegen(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_mana_regen")
|
||||
end
|
||||
function modifier_item_demon_slayer.prototype.GetModifierConstantHealthRegen(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_health_regen")
|
||||
end
|
||||
function modifier_item_demon_slayer.prototype.GetModifierMagicalResistanceBonus(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_magic_resistance")
|
||||
end
|
||||
function modifier_item_demon_slayer.prototype.GetModifierPreAttack_BonusDamage(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_damage")
|
||||
end
|
||||
function modifier_item_demon_slayer.prototype.GetModifierBonusStats_Agility(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_agility")
|
||||
end
|
||||
function modifier_item_demon_slayer.prototype.GetModifierDamageOutgoing_Percentage(self)
|
||||
return self:GetAbility():GetSpecialValueFor("outgoing_damage_bonus")
|
||||
end
|
||||
function modifier_item_demon_slayer.prototype.OnAttackLanded(self, event)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
if event.attacker ~= self:GetParent() then
|
||||
return
|
||||
end
|
||||
if not event.target or event.target:IsBuilding() or event.target:IsOther() then
|
||||
return
|
||||
end
|
||||
if event.target ~= nil then
|
||||
local ability = self:GetAbility()
|
||||
local durCorrosion = ability and ability:GetSpecialValueFor("debuff_duration") or 4
|
||||
local durMage = ability and ability:GetSpecialValueFor("duration") or 3
|
||||
event.target:AddNewModifier(
|
||||
self:GetParent(),
|
||||
ability,
|
||||
"modifier_item_demon_slayer_debuff_2",
|
||||
{duration = durCorrosion}
|
||||
)
|
||||
event.target:AddNewModifier(
|
||||
self:GetParent(),
|
||||
ability,
|
||||
"modifier_item_demon_slayer_mage",
|
||||
{duration = durMage}
|
||||
)
|
||||
local ____this_5
|
||||
____this_5 = event.target
|
||||
local ____opt_4 = ____this_5.GetUnitName
|
||||
local targetName = ____opt_4 and ____opt_4(____this_5) or ""
|
||||
if __TS__StringStartsWith(targetName, "npc_wave") then
|
||||
ParticleManager:CreateParticle("particles/demon_slayer_slash.vpcf", PATTACH_ABSORIGIN_FOLLOW, event.target)
|
||||
event.target:AddNewModifier(
|
||||
self:GetParent(),
|
||||
ability,
|
||||
"modifier_item_demon_slayer_debuff",
|
||||
{duration = durCorrosion}
|
||||
)
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
modifier_item_demon_slayer = __TS__Decorate(
|
||||
modifier_item_demon_slayer,
|
||||
modifier_item_demon_slayer,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_demon_slayer"}
|
||||
)
|
||||
____exports.modifier_item_demon_slayer = modifier_item_demon_slayer
|
||||
--- Доп. урон по нежити волн (как Zombie Slayer).
|
||||
____exports.modifier_item_demon_slayer_debuff = __TS__Class()
|
||||
local modifier_item_demon_slayer_debuff = ____exports.modifier_item_demon_slayer_debuff
|
||||
modifier_item_demon_slayer_debuff.name = "modifier_item_demon_slayer_debuff"
|
||||
modifier_item_demon_slayer_debuff.____file_path = "scripts/vscripts/items/default_items/item_demon_slayer.lua"
|
||||
__TS__ClassExtends(modifier_item_demon_slayer_debuff, BaseModifier)
|
||||
function modifier_item_demon_slayer_debuff.prototype.IsDebuff(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_demon_slayer_debuff.prototype.IsPurgable(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_demon_slayer_debuff.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_demon_slayer_debuff.prototype.GetEffectName(self)
|
||||
return "particles/items2_fx/mage_slayer_debuff.vpcf"
|
||||
end
|
||||
function modifier_item_demon_slayer_debuff.prototype.GetEffectAttachType(self)
|
||||
return PATTACH_ABSORIGIN_FOLLOW
|
||||
end
|
||||
function modifier_item_demon_slayer_debuff.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_INCOMING_DAMAGE_PERCENTAGE}
|
||||
end
|
||||
function modifier_item_demon_slayer_debuff.prototype.GetModifierIncomingDamage_Percentage(self, event)
|
||||
return self:GetAbility():GetSpecialValueFor("incress_damage")
|
||||
end
|
||||
modifier_item_demon_slayer_debuff = __TS__Decorate(
|
||||
modifier_item_demon_slayer_debuff,
|
||||
modifier_item_demon_slayer_debuff,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_demon_slayer_debuff"}
|
||||
)
|
||||
____exports.modifier_item_demon_slayer_debuff = modifier_item_demon_slayer_debuff
|
||||
--- Коррозия (броня / хил / скорость), без дублирования штрафа spell amp — его даёт Mage Slayer-дебафф.
|
||||
____exports.modifier_item_demon_slayer_debuff_2 = __TS__Class()
|
||||
local modifier_item_demon_slayer_debuff_2 = ____exports.modifier_item_demon_slayer_debuff_2
|
||||
modifier_item_demon_slayer_debuff_2.name = "modifier_item_demon_slayer_debuff_2"
|
||||
modifier_item_demon_slayer_debuff_2.____file_path = "scripts/vscripts/items/default_items/item_demon_slayer.lua"
|
||||
__TS__ClassExtends(modifier_item_demon_slayer_debuff_2, BaseModifier)
|
||||
function modifier_item_demon_slayer_debuff_2.prototype.IsDebuff(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_demon_slayer_debuff_2.prototype.IsPurgable(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_demon_slayer_debuff_2.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_demon_slayer_debuff_2.prototype.GetEffectName(self)
|
||||
return "particles/units/heroes/hero_dark_willow/dark_willow_wisp_spell_debuff.vpcf"
|
||||
end
|
||||
function modifier_item_demon_slayer_debuff_2.prototype.GetEffectAttachType(self)
|
||||
return PATTACH_OVERHEAD_FOLLOW
|
||||
end
|
||||
function modifier_item_demon_slayer_debuff_2.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS, MODIFIER_PROPERTY_HEALTH_REGEN_PERCENTAGE, MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE}
|
||||
end
|
||||
function modifier_item_demon_slayer_debuff_2.prototype.GetModifierMoveSpeedBonus_Percentage(self)
|
||||
return self:GetAbility():GetSpecialValueFor("movespeed_reduction")
|
||||
end
|
||||
function modifier_item_demon_slayer_debuff_2.prototype.GetModifierHealthRegenPercentage(self)
|
||||
return 1 + (self:GetAbility():GetSpecialValueFor("health_reduction") - 100) * 0.01
|
||||
end
|
||||
function modifier_item_demon_slayer_debuff_2.prototype.GetModifierPhysicalArmorBonus(self, event)
|
||||
return self:GetAbility():GetSpecialValueFor("armor_reduction")
|
||||
end
|
||||
modifier_item_demon_slayer_debuff_2 = __TS__Decorate(
|
||||
modifier_item_demon_slayer_debuff_2,
|
||||
modifier_item_demon_slayer_debuff_2,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_demon_slayer_debuff_2"}
|
||||
)
|
||||
____exports.modifier_item_demon_slayer_debuff_2 = modifier_item_demon_slayer_debuff_2
|
||||
--- Эффект как у Mage Slayer: −spell amp и магический DoT раз в секунду.
|
||||
____exports.modifier_item_demon_slayer_mage = __TS__Class()
|
||||
local modifier_item_demon_slayer_mage = ____exports.modifier_item_demon_slayer_mage
|
||||
modifier_item_demon_slayer_mage.name = "modifier_item_demon_slayer_mage"
|
||||
modifier_item_demon_slayer_mage.____file_path = "scripts/vscripts/items/default_items/item_demon_slayer.lua"
|
||||
__TS__ClassExtends(modifier_item_demon_slayer_mage, BaseModifier)
|
||||
function modifier_item_demon_slayer_mage.prototype.IsDebuff(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_demon_slayer_mage.prototype.IsPurgable(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_demon_slayer_mage.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_demon_slayer_mage.prototype.GetEffectName(self)
|
||||
return "particles/items2_fx/mage_slayer_debuff.vpcf"
|
||||
end
|
||||
function modifier_item_demon_slayer_mage.prototype.GetEffectAttachType(self)
|
||||
return PATTACH_ABSORIGIN_FOLLOW
|
||||
end
|
||||
function modifier_item_demon_slayer_mage.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_SPELL_AMPLIFY_PERCENTAGE}
|
||||
end
|
||||
function modifier_item_demon_slayer_mage.prototype.GetModifierSpellAmplify_Percentage(self)
|
||||
return -math.abs(self:GetAbility():GetSpecialValueFor("spell_amp_debuff"))
|
||||
end
|
||||
function modifier_item_demon_slayer_mage.prototype.OnCreated(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
self:PulseDps()
|
||||
self:StartIntervalThink(1)
|
||||
end
|
||||
function modifier_item_demon_slayer_mage.prototype.OnIntervalThink(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
self:PulseDps()
|
||||
end
|
||||
function modifier_item_demon_slayer_mage.prototype.PulseDps(self)
|
||||
local parent = self:GetParent()
|
||||
local ability = self:GetAbility()
|
||||
local caster = self:GetCaster()
|
||||
if not ability or not caster or not (parent and parent:IsAlive()) then
|
||||
return
|
||||
end
|
||||
local d = ability:GetSpecialValueFor("dps")
|
||||
ApplyDamage({
|
||||
victim = parent,
|
||||
attacker = caster,
|
||||
damage = d,
|
||||
damage_type = DAMAGE_TYPE_MAGICAL,
|
||||
ability = ability,
|
||||
damage_flags = DOTA_DAMAGE_FLAG_NO_SPELL_AMPLIFICATION
|
||||
})
|
||||
end
|
||||
modifier_item_demon_slayer_mage = __TS__Decorate(
|
||||
modifier_item_demon_slayer_mage,
|
||||
modifier_item_demon_slayer_mage,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_demon_slayer_mage"}
|
||||
)
|
||||
____exports.modifier_item_demon_slayer_mage = modifier_item_demon_slayer_mage
|
||||
return ____exports
|
||||
@@ -0,0 +1,148 @@
|
||||
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 registerAbility = ____dota_ts_adapter.registerAbility
|
||||
local registerModifier = ____dota_ts_adapter.registerModifier
|
||||
local BaseModifier = ____dota_ts_adapter.BaseModifier
|
||||
____exports.item_demonic_bow = __TS__Class()
|
||||
local item_demonic_bow = ____exports.item_demonic_bow
|
||||
item_demonic_bow.name = "item_demonic_bow"
|
||||
item_demonic_bow.____file_path = "scripts/vscripts/items/default_items/item_demonic_bow.lua"
|
||||
__TS__ClassExtends(item_demonic_bow, BaseItem)
|
||||
function item_demonic_bow.prototype.GetIntrinsicModifierName(self)
|
||||
return "modifier_item_demonic_bow"
|
||||
end
|
||||
item_demonic_bow = __TS__Decorate(
|
||||
item_demonic_bow,
|
||||
item_demonic_bow,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_demonic_bow"}
|
||||
)
|
||||
____exports.item_demonic_bow = item_demonic_bow
|
||||
____exports.modifier_item_demonic_bow = __TS__Class()
|
||||
local modifier_item_demonic_bow = ____exports.modifier_item_demonic_bow
|
||||
modifier_item_demonic_bow.name = "modifier_item_demonic_bow"
|
||||
modifier_item_demonic_bow.____file_path = "scripts/vscripts/items/default_items/item_demonic_bow.lua"
|
||||
__TS__ClassExtends(modifier_item_demonic_bow, BaseModifier)
|
||||
function modifier_item_demonic_bow.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_demonic_bow.prototype.IsDebuff(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_demonic_bow.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_demonic_bow.prototype.OnCreated(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
end
|
||||
function modifier_item_demonic_bow.prototype.CheckState(self)
|
||||
return {[MODIFIER_STATE_CANNOT_MISS] = true}
|
||||
end
|
||||
function modifier_item_demonic_bow.prototype.DeclareFunctions(self)
|
||||
return {
|
||||
MODIFIER_EVENT_ON_ATTACK,
|
||||
MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT,
|
||||
MODIFIER_PROPERTY_ATTACK_RANGE_BONUS,
|
||||
MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE,
|
||||
MODIFIER_PROPERTY_STATS_AGILITY_BONUS,
|
||||
MODIFIER_PROPERTY_STATS_STRENGTH_BONUS,
|
||||
MODIFIER_PROPERTY_STATS_INTELLECT_BONUS,
|
||||
MODIFIER_PROPERTY_HEALTH_BONUS,
|
||||
MODIFIER_PROPERTY_PROCATTACK_BONUS_DAMAGE_MAGICAL
|
||||
}
|
||||
end
|
||||
function modifier_item_demonic_bow.prototype.GetModifierProcAttack_BonusDamage_Magical(self, event)
|
||||
if self:GetParent():IsIllusion() or not self:GetParent():IsRangedAttacker() then
|
||||
return 0
|
||||
end
|
||||
return self:GetAbility():GetSpecialValueFor("proc_damage_magical")
|
||||
end
|
||||
function modifier_item_demonic_bow.prototype.GetModifierAttackSpeedBonus_Constant(self)
|
||||
return self:GetAbility():GetSpecialValueFor("attack_speed")
|
||||
end
|
||||
function modifier_item_demonic_bow.prototype.GetModifierAttackRangeBonus(self)
|
||||
if not self:GetParent():IsRangedAttacker() then
|
||||
return 0
|
||||
end
|
||||
return self:GetAbility():GetSpecialValueFor("attack_range")
|
||||
end
|
||||
function modifier_item_demonic_bow.prototype.GetModifierBonusStats_Strength(self)
|
||||
return self:GetAbility():GetSpecialValueFor("strength")
|
||||
end
|
||||
function modifier_item_demonic_bow.prototype.GetModifierBonusStats_Agility(self)
|
||||
return self:GetAbility():GetSpecialValueFor("agility")
|
||||
end
|
||||
function modifier_item_demonic_bow.prototype.GetModifierBonusStats_Intellect(self)
|
||||
return self:GetAbility():GetSpecialValueFor("intellect")
|
||||
end
|
||||
function modifier_item_demonic_bow.prototype.GetModifierHealthBonus(self)
|
||||
return self:GetAbility():GetSpecialValueFor("health")
|
||||
end
|
||||
function modifier_item_demonic_bow.prototype.OnAttack(self, event)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local attacker = event.attacker
|
||||
local target = event.target
|
||||
if not attacker or not target then
|
||||
return
|
||||
end
|
||||
if not attacker:IsRealHero() then
|
||||
return
|
||||
end
|
||||
if attacker ~= self:GetParent() then
|
||||
return
|
||||
end
|
||||
if not attacker:IsRangedAttacker() then
|
||||
return
|
||||
end
|
||||
if event.no_attack_cooldown then
|
||||
return
|
||||
end
|
||||
local radius = self:GetParent():GetAttackRangeBuffer() + self:GetParent():GetBaseAttackRange()
|
||||
local units = FindUnitsInRadius(
|
||||
attacker:GetTeamNumber(),
|
||||
attacker:GetAbsOrigin(),
|
||||
nil,
|
||||
radius,
|
||||
DOTA_UNIT_TARGET_TEAM_ENEMY,
|
||||
DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC + DOTA_UNIT_TARGET_BUILDING,
|
||||
DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE,
|
||||
FIND_CLOSEST,
|
||||
false
|
||||
)
|
||||
local attackCount = 0
|
||||
for ____, unit in ipairs(units) do
|
||||
if unit and not unit:IsNull() and unit ~= target and unit:IsAlive() then
|
||||
attacker:PerformAttack(
|
||||
unit,
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
false,
|
||||
true,
|
||||
false,
|
||||
false
|
||||
)
|
||||
attackCount = attackCount + 1
|
||||
end
|
||||
if attackCount >= self:GetAbility():GetSpecialValueFor("attack_count") then
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
modifier_item_demonic_bow = __TS__Decorate(
|
||||
modifier_item_demonic_bow,
|
||||
modifier_item_demonic_bow,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_demonic_bow"}
|
||||
)
|
||||
____exports.modifier_item_demonic_bow = modifier_item_demonic_bow
|
||||
return ____exports
|
||||
@@ -0,0 +1,414 @@
|
||||
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 ____luck = require("utils.luck")
|
||||
local rollLuckChance = ____luck.rollLuckChance
|
||||
local DESOLATOR_PROJECTILE = "particles/items_fx/desolator_projectile.vpcf"
|
||||
--- Кастомный Desolator (порт zombie_invasion): урон, HP, заряды с убийств, коррупция брони, снаряд.
|
||||
____exports.item_desolator_custom = __TS__Class()
|
||||
local item_desolator_custom = ____exports.item_desolator_custom
|
||||
item_desolator_custom.name = "item_desolator_custom"
|
||||
item_desolator_custom.____file_path = "scripts/vscripts/items/default_items/item_desolator_custom.lua"
|
||||
__TS__ClassExtends(item_desolator_custom, BaseItem)
|
||||
function item_desolator_custom.prototype.Precache(self, context)
|
||||
PrecacheResource("particle", DESOLATOR_PROJECTILE, context)
|
||||
PrecacheResource("particle", "particles/units/heroes/hero_spectre/spectre_desolate_debuff.vpcf", context)
|
||||
end
|
||||
function item_desolator_custom.prototype.GetIntrinsicModifierName(self)
|
||||
return ____exports.modifier_item_desolator_custom.name
|
||||
end
|
||||
item_desolator_custom = __TS__Decorate(
|
||||
item_desolator_custom,
|
||||
item_desolator_custom,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_desolator_custom"}
|
||||
)
|
||||
____exports.item_desolator_custom = item_desolator_custom
|
||||
____exports.modifier_item_desolator_custom = __TS__Class()
|
||||
local modifier_item_desolator_custom = ____exports.modifier_item_desolator_custom
|
||||
modifier_item_desolator_custom.name = "modifier_item_desolator_custom"
|
||||
modifier_item_desolator_custom.____file_path = "scripts/vscripts/items/default_items/item_desolator_custom.lua"
|
||||
__TS__ClassExtends(modifier_item_desolator_custom, BaseModifier)
|
||||
function modifier_item_desolator_custom.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_desolator_custom.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_desolator_custom.prototype.GetAttributes(self)
|
||||
return MODIFIER_ATTRIBUTE_MULTIPLE
|
||||
end
|
||||
function modifier_item_desolator_custom.prototype.GetPriority(self)
|
||||
return MODIFIER_PRIORITY_ULTRA
|
||||
end
|
||||
function modifier_item_desolator_custom.prototype.DeclareFunctions(self)
|
||||
return {
|
||||
MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE,
|
||||
MODIFIER_PROPERTY_EXTRA_HEALTH_BONUS,
|
||||
MODIFIER_EVENT_ON_ATTACK_LANDED,
|
||||
MODIFIER_EVENT_ON_DEATH,
|
||||
MODIFIER_PROPERTY_PROJECTILE_NAME
|
||||
}
|
||||
end
|
||||
function modifier_item_desolator_custom.prototype.GetModifierProjectileName(self)
|
||||
return DESOLATOR_PROJECTILE
|
||||
end
|
||||
function modifier_item_desolator_custom.prototype.GetModifierPreAttack_BonusDamage(self)
|
||||
local ability = self:GetAbility()
|
||||
if not ability then
|
||||
return 0
|
||||
end
|
||||
return ability:GetSpecialValueFor("bonus_damage") + ability:GetCurrentCharges()
|
||||
end
|
||||
function modifier_item_desolator_custom.prototype.GetModifierExtraHealthBonus(self)
|
||||
local ability = self:GetAbility()
|
||||
if not ability then
|
||||
return 0
|
||||
end
|
||||
return ability:GetSpecialValueFor("bonus_health") + ability:GetCurrentCharges()
|
||||
end
|
||||
function modifier_item_desolator_custom.prototype.OnAttackLanded(self, event)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local parent = self:GetParent()
|
||||
if event.attacker ~= parent or not event.target then
|
||||
return
|
||||
end
|
||||
local ability = self:GetAbility()
|
||||
if not ability then
|
||||
return
|
||||
end
|
||||
local duration = ability:GetSpecialValueFor("corruption_duration")
|
||||
event.target:AddNewModifier(parent, ability, ____exports.modifier_item_desolator_custom_debuff.name, {duration = duration})
|
||||
end
|
||||
function modifier_item_desolator_custom.prototype.OnDeath(self, event)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local parent = self:GetParent()
|
||||
local ability = self:GetAbility()
|
||||
if not ability or not (parent and parent:IsAlive()) then
|
||||
return
|
||||
end
|
||||
if event.attacker ~= parent then
|
||||
return
|
||||
end
|
||||
local victim = event.unit
|
||||
if not victim or victim == parent or not IsValidEntity(victim) then
|
||||
return
|
||||
end
|
||||
if not victim:HasModifier(____exports.modifier_item_desolator_custom_debuff.name) then
|
||||
return
|
||||
end
|
||||
local chancePct = ability:GetSpecialValueFor("chance_to_stack")
|
||||
if chancePct <= 0 then
|
||||
return
|
||||
end
|
||||
local ____parent_IsRealHero_result_2
|
||||
if parent:IsRealHero() then
|
||||
____parent_IsRealHero_result_2 = rollLuckChance(nil, parent, chancePct / 100)
|
||||
else
|
||||
____parent_IsRealHero_result_2 = RollPercentage(chancePct)
|
||||
end
|
||||
local stacked = ____parent_IsRealHero_result_2
|
||||
if not stacked then
|
||||
return
|
||||
end
|
||||
local maxCap = ability:GetSpecialValueFor("max_damage")
|
||||
local perKill = ability:GetSpecialValueFor("bonus_damage_per_kill")
|
||||
local next = math.min(
|
||||
ability:GetCurrentCharges() + perKill,
|
||||
maxCap
|
||||
)
|
||||
ability:SetCurrentCharges(next)
|
||||
if parent:IsRealHero() then
|
||||
parent:CalculateStatBonus(true)
|
||||
end
|
||||
end
|
||||
function modifier_item_desolator_custom.prototype.GetTexture(self)
|
||||
return "item_desolator"
|
||||
end
|
||||
modifier_item_desolator_custom = __TS__Decorate(
|
||||
modifier_item_desolator_custom,
|
||||
modifier_item_desolator_custom,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_desolator_custom"}
|
||||
)
|
||||
____exports.modifier_item_desolator_custom = modifier_item_desolator_custom
|
||||
____exports.modifier_item_desolator_custom_debuff = __TS__Class()
|
||||
local modifier_item_desolator_custom_debuff = ____exports.modifier_item_desolator_custom_debuff
|
||||
modifier_item_desolator_custom_debuff.name = "modifier_item_desolator_custom_debuff"
|
||||
modifier_item_desolator_custom_debuff.____file_path = "scripts/vscripts/items/default_items/item_desolator_custom.lua"
|
||||
__TS__ClassExtends(modifier_item_desolator_custom_debuff, BaseModifier)
|
||||
function modifier_item_desolator_custom_debuff.prototype.____constructor(self, ...)
|
||||
BaseModifier.prototype.____constructor(self, ...)
|
||||
self.armorDebuff = 0
|
||||
end
|
||||
function modifier_item_desolator_custom_debuff.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_desolator_custom_debuff.prototype.IsDebuff(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_desolator_custom_debuff.prototype.IsPurgable(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_desolator_custom_debuff.prototype.OnCreated(self)
|
||||
self:RefreshVals()
|
||||
end
|
||||
function modifier_item_desolator_custom_debuff.prototype.OnRefresh(self)
|
||||
self:RefreshVals()
|
||||
end
|
||||
function modifier_item_desolator_custom_debuff.prototype.RefreshVals(self)
|
||||
local ability = self:GetAbility()
|
||||
self.armorDebuff = ability and ability:GetSpecialValueFor("corruption_armor") or 0
|
||||
end
|
||||
function modifier_item_desolator_custom_debuff.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS, MODIFIER_PROPERTY_HEALTH_REGEN_PERCENTAGE, MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE}
|
||||
end
|
||||
function modifier_item_desolator_custom_debuff.prototype.GetModifierPhysicalArmorBonus(self)
|
||||
return self.armorDebuff
|
||||
end
|
||||
function modifier_item_desolator_custom_debuff.prototype.GetModifierMoveSpeedBonus_Percentage(self)
|
||||
local ability = self:GetAbility()
|
||||
return ability and ability:GetSpecialValueFor("corruption_movespeed_slow") or 0
|
||||
end
|
||||
function modifier_item_desolator_custom_debuff.prototype.GetModifierHealthRegenPercentage(self)
|
||||
local ability = self:GetAbility()
|
||||
if not ability then
|
||||
return 1
|
||||
end
|
||||
local v = ability:GetSpecialValueFor("corruption_heal_reduction")
|
||||
return 1 + (v - 100) * 0.01
|
||||
end
|
||||
function modifier_item_desolator_custom_debuff.prototype.GetEffectName(self)
|
||||
return "particles/units/heroes/hero_spectre/spectre_desolate_debuff.vpcf"
|
||||
end
|
||||
function modifier_item_desolator_custom_debuff.prototype.GetEffectAttachType(self)
|
||||
return PATTACH_ABSORIGIN_FOLLOW
|
||||
end
|
||||
function modifier_item_desolator_custom_debuff.prototype.GetTexture(self)
|
||||
return "item_desolator"
|
||||
end
|
||||
modifier_item_desolator_custom_debuff = __TS__Decorate(
|
||||
modifier_item_desolator_custom_debuff,
|
||||
modifier_item_desolator_custom_debuff,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_desolator_custom_debuff"}
|
||||
)
|
||||
____exports.modifier_item_desolator_custom_debuff = modifier_item_desolator_custom_debuff
|
||||
____exports.item_desolator_custom_2 = __TS__Class()
|
||||
local item_desolator_custom_2 = ____exports.item_desolator_custom_2
|
||||
item_desolator_custom_2.name = "item_desolator_custom_2"
|
||||
item_desolator_custom_2.____file_path = "scripts/vscripts/items/default_items/item_desolator_custom.lua"
|
||||
__TS__ClassExtends(item_desolator_custom_2, BaseItem)
|
||||
function item_desolator_custom_2.prototype.Precache(self, context)
|
||||
PrecacheResource("particle", DESOLATOR_PROJECTILE, context)
|
||||
PrecacheResource("particle", "particles/units/heroes/hero_spectre/spectre_desolate_debuff.vpcf", context)
|
||||
end
|
||||
function item_desolator_custom_2.prototype.GetIntrinsicModifierName(self)
|
||||
return ____exports.modifier_item_desolator_custom_2.name
|
||||
end
|
||||
item_desolator_custom_2 = __TS__Decorate(
|
||||
item_desolator_custom_2,
|
||||
item_desolator_custom_2,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_desolator_custom_2"}
|
||||
)
|
||||
____exports.item_desolator_custom_2 = item_desolator_custom_2
|
||||
____exports.modifier_item_desolator_custom_2 = __TS__Class()
|
||||
local modifier_item_desolator_custom_2 = ____exports.modifier_item_desolator_custom_2
|
||||
modifier_item_desolator_custom_2.name = "modifier_item_desolator_custom_2"
|
||||
modifier_item_desolator_custom_2.____file_path = "scripts/vscripts/items/default_items/item_desolator_custom.lua"
|
||||
__TS__ClassExtends(modifier_item_desolator_custom_2, BaseModifier)
|
||||
function modifier_item_desolator_custom_2.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_desolator_custom_2.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_desolator_custom_2.prototype.GetAttributes(self)
|
||||
return MODIFIER_ATTRIBUTE_MULTIPLE
|
||||
end
|
||||
function modifier_item_desolator_custom_2.prototype.GetPriority(self)
|
||||
return MODIFIER_PRIORITY_ULTRA
|
||||
end
|
||||
function modifier_item_desolator_custom_2.prototype.DeclareFunctions(self)
|
||||
return {
|
||||
MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE,
|
||||
MODIFIER_PROPERTY_EXTRA_HEALTH_BONUS,
|
||||
MODIFIER_EVENT_ON_ATTACK_LANDED,
|
||||
MODIFIER_EVENT_ON_DEATH,
|
||||
MODIFIER_PROPERTY_PROJECTILE_NAME
|
||||
}
|
||||
end
|
||||
function modifier_item_desolator_custom_2.prototype.GetModifierProjectileName(self)
|
||||
return DESOLATOR_PROJECTILE
|
||||
end
|
||||
function modifier_item_desolator_custom_2.prototype.GetModifierPreAttack_BonusDamage(self)
|
||||
local ability = self:GetAbility()
|
||||
if not ability then
|
||||
return 0
|
||||
end
|
||||
return ability:GetSpecialValueFor("bonus_damage") + ability:GetCurrentCharges()
|
||||
end
|
||||
function modifier_item_desolator_custom_2.prototype.GetModifierExtraHealthBonus(self)
|
||||
local ability = self:GetAbility()
|
||||
if not ability then
|
||||
return 0
|
||||
end
|
||||
return ability:GetSpecialValueFor("bonus_health") + ability:GetCurrentCharges()
|
||||
end
|
||||
function modifier_item_desolator_custom_2.prototype.OnAttackLanded(self, event)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local parent = self:GetParent()
|
||||
if event.attacker ~= parent or not event.target then
|
||||
return
|
||||
end
|
||||
local ability = self:GetAbility()
|
||||
if not ability then
|
||||
return
|
||||
end
|
||||
local duration = ability:GetSpecialValueFor("corruption_duration")
|
||||
local perStack = ability:GetSpecialValueFor("corruption_armor_per_stack")
|
||||
local cap = ability:GetSpecialValueFor("corruption_armor_cap")
|
||||
local maxStacks = math.max(
|
||||
1,
|
||||
math.ceil(cap / math.max(1, perStack))
|
||||
)
|
||||
local target = event.target
|
||||
local existing = target:FindModifierByName(____exports.modifier_item_desolator_custom_2_debuff.name)
|
||||
if existing then
|
||||
if existing:GetStackCount() < maxStacks then
|
||||
existing:IncrementStackCount()
|
||||
end
|
||||
existing:SetDuration(duration, true)
|
||||
else
|
||||
local m = target:AddNewModifier(parent, ability, ____exports.modifier_item_desolator_custom_2_debuff.name, {duration = duration})
|
||||
if m ~= nil then
|
||||
m:SetStackCount(1)
|
||||
end
|
||||
end
|
||||
end
|
||||
function modifier_item_desolator_custom_2.prototype.OnDeath(self, event)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local parent = self:GetParent()
|
||||
local ability = self:GetAbility()
|
||||
if not ability or not (parent and parent:IsAlive()) then
|
||||
return
|
||||
end
|
||||
if event.attacker ~= parent then
|
||||
return
|
||||
end
|
||||
local victim = event.unit
|
||||
if not victim or victim == parent or not IsValidEntity(victim) then
|
||||
return
|
||||
end
|
||||
if not victim:HasModifier(____exports.modifier_item_desolator_custom_2_debuff.name) then
|
||||
return
|
||||
end
|
||||
local chancePct = ability:GetSpecialValueFor("chance_to_stack")
|
||||
if chancePct <= 0 then
|
||||
return
|
||||
end
|
||||
local ____parent_IsRealHero_result_7
|
||||
if parent:IsRealHero() then
|
||||
____parent_IsRealHero_result_7 = rollLuckChance(nil, parent, chancePct / 100)
|
||||
else
|
||||
____parent_IsRealHero_result_7 = RollPercentage(chancePct)
|
||||
end
|
||||
local stacked = ____parent_IsRealHero_result_7
|
||||
if not stacked then
|
||||
return
|
||||
end
|
||||
local maxCap = ability:GetSpecialValueFor("max_damage")
|
||||
local perKill = ability:GetSpecialValueFor("bonus_damage_per_kill")
|
||||
local next = math.min(
|
||||
ability:GetCurrentCharges() + perKill,
|
||||
maxCap
|
||||
)
|
||||
ability:SetCurrentCharges(next)
|
||||
if parent:IsRealHero() then
|
||||
parent:CalculateStatBonus(true)
|
||||
end
|
||||
end
|
||||
function modifier_item_desolator_custom_2.prototype.GetTexture(self)
|
||||
return "item_desolator_2"
|
||||
end
|
||||
modifier_item_desolator_custom_2 = __TS__Decorate(
|
||||
modifier_item_desolator_custom_2,
|
||||
modifier_item_desolator_custom_2,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_desolator_custom_2"}
|
||||
)
|
||||
____exports.modifier_item_desolator_custom_2 = modifier_item_desolator_custom_2
|
||||
____exports.modifier_item_desolator_custom_2_debuff = __TS__Class()
|
||||
local modifier_item_desolator_custom_2_debuff = ____exports.modifier_item_desolator_custom_2_debuff
|
||||
modifier_item_desolator_custom_2_debuff.name = "modifier_item_desolator_custom_2_debuff"
|
||||
modifier_item_desolator_custom_2_debuff.____file_path = "scripts/vscripts/items/default_items/item_desolator_custom.lua"
|
||||
__TS__ClassExtends(modifier_item_desolator_custom_2_debuff, BaseModifier)
|
||||
function modifier_item_desolator_custom_2_debuff.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_desolator_custom_2_debuff.prototype.IsDebuff(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_desolator_custom_2_debuff.prototype.IsPurgable(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_desolator_custom_2_debuff.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS, MODIFIER_PROPERTY_HEALTH_REGEN_PERCENTAGE, MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE}
|
||||
end
|
||||
function modifier_item_desolator_custom_2_debuff.prototype.GetModifierPhysicalArmorBonus(self)
|
||||
local ability = self:GetAbility()
|
||||
if not ability then
|
||||
return 0
|
||||
end
|
||||
local perStack = ability:GetSpecialValueFor("corruption_armor_per_stack")
|
||||
local cap = ability:GetSpecialValueFor("corruption_armor_cap")
|
||||
return -math.min(
|
||||
self:GetStackCount() * perStack,
|
||||
cap
|
||||
)
|
||||
end
|
||||
function modifier_item_desolator_custom_2_debuff.prototype.GetModifierMoveSpeedBonus_Percentage(self)
|
||||
local ability = self:GetAbility()
|
||||
return ability and ability:GetSpecialValueFor("corruption_movespeed_slow") or 0
|
||||
end
|
||||
function modifier_item_desolator_custom_2_debuff.prototype.GetModifierHealthRegenPercentage(self)
|
||||
local ability = self:GetAbility()
|
||||
if not ability then
|
||||
return 1
|
||||
end
|
||||
local v = ability:GetSpecialValueFor("corruption_heal_reduction")
|
||||
return 1 + (v - 100) * 0.01
|
||||
end
|
||||
function modifier_item_desolator_custom_2_debuff.prototype.GetEffectName(self)
|
||||
return "particles/units/heroes/hero_spectre/spectre_desolate_debuff.vpcf"
|
||||
end
|
||||
function modifier_item_desolator_custom_2_debuff.prototype.GetEffectAttachType(self)
|
||||
return PATTACH_ABSORIGIN_FOLLOW
|
||||
end
|
||||
function modifier_item_desolator_custom_2_debuff.prototype.GetTexture(self)
|
||||
return "item_desolator_2"
|
||||
end
|
||||
modifier_item_desolator_custom_2_debuff = __TS__Decorate(
|
||||
modifier_item_desolator_custom_2_debuff,
|
||||
modifier_item_desolator_custom_2_debuff,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_desolator_custom_2_debuff"}
|
||||
)
|
||||
____exports.modifier_item_desolator_custom_2_debuff = modifier_item_desolator_custom_2_debuff
|
||||
return ____exports
|
||||
@@ -0,0 +1,76 @@
|
||||
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
|
||||
____exports.item_divine_rapier_custom = __TS__Class()
|
||||
local item_divine_rapier_custom = ____exports.item_divine_rapier_custom
|
||||
item_divine_rapier_custom.name = "item_divine_rapier_custom"
|
||||
item_divine_rapier_custom.____file_path = "scripts/vscripts/items/default_items/item_divine_rapier_custom.lua"
|
||||
__TS__ClassExtends(item_divine_rapier_custom, BaseItem)
|
||||
function item_divine_rapier_custom.prototype.GetIntrinsicModifierName(self)
|
||||
return "modifier_divine_rapier_custom"
|
||||
end
|
||||
item_divine_rapier_custom = __TS__Decorate(
|
||||
item_divine_rapier_custom,
|
||||
item_divine_rapier_custom,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_divine_rapier_custom"}
|
||||
)
|
||||
____exports.item_divine_rapier_custom = item_divine_rapier_custom
|
||||
____exports.modifier_divine_rapier_custom = __TS__Class()
|
||||
local modifier_divine_rapier_custom = ____exports.modifier_divine_rapier_custom
|
||||
modifier_divine_rapier_custom.name = "modifier_divine_rapier_custom"
|
||||
modifier_divine_rapier_custom.____file_path = "scripts/vscripts/items/default_items/item_divine_rapier_custom.lua"
|
||||
__TS__ClassExtends(modifier_divine_rapier_custom, BaseModifier)
|
||||
function modifier_divine_rapier_custom.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_divine_rapier_custom.prototype.IsDebuff(self)
|
||||
return false
|
||||
end
|
||||
function modifier_divine_rapier_custom.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_divine_rapier_custom.prototype.GetAttributes(self)
|
||||
return MODIFIER_ATTRIBUTE_MULTIPLE
|
||||
end
|
||||
function modifier_divine_rapier_custom.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE, MODIFIER_PROPERTY_PROCATTACK_BONUS_DAMAGE_PURE, MODIFIER_EVENT_ON_ATTACK_LANDED}
|
||||
end
|
||||
function modifier_divine_rapier_custom.prototype.OnAttackLanded(self, event)
|
||||
if self:GetParent() == event.attacker then
|
||||
local damage = self:GetAbility():GetSpecialValueFor("proc_damage") / 100 * self:GetParent():GetAverageTrueAttackDamage(event.target)
|
||||
SendOverheadEventMessage(
|
||||
nil,
|
||||
OVERHEAD_ALERT_DAMAGE,
|
||||
event.target,
|
||||
damage,
|
||||
nil
|
||||
)
|
||||
local particle = ParticleManager:CreateParticle("models/heroes/phantom_assassin_persona/debut/particles/pa_debutdash/pa_debutdash_fragments.vpcf", PATTACH_CUSTOMORIGIN, nil)
|
||||
ParticleManager:SetParticleControl(
|
||||
particle,
|
||||
0,
|
||||
event.target:GetAbsOrigin()
|
||||
)
|
||||
ParticleManager:ReleaseParticleIndex(particle)
|
||||
ApplyDamage({victim = event.target, attacker = event.attacker, damage = damage, damage_type = DAMAGE_TYPE_PURE})
|
||||
end
|
||||
end
|
||||
function modifier_divine_rapier_custom.prototype.GetModifierPreAttack_BonusDamage(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_damage")
|
||||
end
|
||||
modifier_divine_rapier_custom = __TS__Decorate(
|
||||
modifier_divine_rapier_custom,
|
||||
modifier_divine_rapier_custom,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_divine_rapier_custom"}
|
||||
)
|
||||
____exports.modifier_divine_rapier_custom = modifier_divine_rapier_custom
|
||||
return ____exports
|
||||
@@ -0,0 +1,324 @@
|
||||
local ____lualib = require("lualib_bundle")
|
||||
local __TS__Class = ____lualib.__TS__Class
|
||||
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
||||
local __TS__Decorate = ____lualib.__TS__Decorate
|
||||
local __TS__ArrayPush = ____lualib.__TS__ArrayPush
|
||||
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 ETHEREAL_BLADE_PARTICLE = "particles/items_fx/ethereal_blade.vpcf"
|
||||
local ETHEREAL_STATUS_PARTICLE = "particles/status_fx/status_effect_ghost.vpcf"
|
||||
____exports.item_ethereal_blade_custom = __TS__Class()
|
||||
local item_ethereal_blade_custom = ____exports.item_ethereal_blade_custom
|
||||
item_ethereal_blade_custom.name = "item_ethereal_blade_custom"
|
||||
item_ethereal_blade_custom.____file_path = "scripts/vscripts/items/default_items/item_ethereal_blade_custom.lua"
|
||||
__TS__ClassExtends(item_ethereal_blade_custom, BaseItem)
|
||||
function item_ethereal_blade_custom.prototype.Precache(self, context)
|
||||
PrecacheResource("particle", ETHEREAL_BLADE_PARTICLE, context)
|
||||
PrecacheResource("particle", ETHEREAL_STATUS_PARTICLE, context)
|
||||
PrecacheResource("soundfile", "soundevents/game_sounds_items.vsndevts", context)
|
||||
end
|
||||
function item_ethereal_blade_custom.prototype.GetIntrinsicModifierName(self)
|
||||
return ____exports.modifier_item_ethereal_blade_custom.name
|
||||
end
|
||||
function item_ethereal_blade_custom.prototype.GetAOERadius(self)
|
||||
return self:GetSpecialValueFor("splash_radius")
|
||||
end
|
||||
function item_ethereal_blade_custom.prototype.GetCastRange(self)
|
||||
local range = self:GetSpecialValueFor("abilitycastrange")
|
||||
if IsServer() then
|
||||
return range
|
||||
end
|
||||
local ____opt_0 = self:GetCaster()
|
||||
local bonus = ____opt_0 and ____opt_0:GetCastRangeBonus() or 0
|
||||
return range - bonus
|
||||
end
|
||||
function item_ethereal_blade_custom.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
local target = self:GetCursorTarget()
|
||||
if not target then
|
||||
return
|
||||
end
|
||||
local splashRadius = self:GetSpecialValueFor("splash_radius")
|
||||
local projectileSpeed = self:GetSpecialValueFor("projectile_speed")
|
||||
local sourceLoc = caster:GetAbsOrigin()
|
||||
caster:EmitSound("DOTA_Item.EtherealBlade.Activate")
|
||||
local isAlly = target:GetTeamNumber() == caster:GetTeamNumber()
|
||||
local units = {}
|
||||
if isAlly then
|
||||
units = {target}
|
||||
else
|
||||
units = FindUnitsInRadius(
|
||||
caster:GetTeamNumber(),
|
||||
target:GetAbsOrigin(),
|
||||
nil,
|
||||
splashRadius,
|
||||
DOTA_UNIT_TARGET_TEAM_ENEMY,
|
||||
DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC,
|
||||
DOTA_UNIT_TARGET_FLAG_NONE,
|
||||
FIND_ANY_ORDER,
|
||||
false
|
||||
)
|
||||
if #units == 0 then
|
||||
units = {target}
|
||||
end
|
||||
end
|
||||
for ____, enemy in ipairs(units) do
|
||||
ProjectileManager:CreateTrackingProjectile({
|
||||
Target = enemy,
|
||||
Source = caster,
|
||||
Ability = self,
|
||||
EffectName = ETHEREAL_BLADE_PARTICLE,
|
||||
iMoveSpeed = projectileSpeed,
|
||||
vSourceLoc = sourceLoc,
|
||||
bDodgeable = true,
|
||||
bProvidesVision = false
|
||||
})
|
||||
end
|
||||
end
|
||||
function item_ethereal_blade_custom.prototype.OnProjectileHit(self, target)
|
||||
if not IsServer() or not target then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
if target:IsMagicImmune() then
|
||||
return
|
||||
end
|
||||
if target:TriggerSpellAbsorb(self) then
|
||||
return
|
||||
end
|
||||
target:EmitSound("DOTA_Item.EtherealBlade.Target")
|
||||
local durationEnemy = self:GetSpecialValueFor("duration")
|
||||
local durationAlly = self:GetSpecialValueFor("duration_ally")
|
||||
local isAlly = target:GetTeamNumber() == caster:GetTeamNumber()
|
||||
if isAlly then
|
||||
target:AddNewModifier(caster, self, ____exports.modifier_item_ethereal_blade_custom_ethereal.name, {duration = durationAlly, is_ally = 1})
|
||||
target:AddNewModifier(caster, self, ____exports.modifier_item_ethereal_blade_custom_ally_haste.name, {duration = durationAlly})
|
||||
return
|
||||
end
|
||||
local resistDuration = durationEnemy * (1 - target:GetStatusResistance())
|
||||
target:AddNewModifier(caster, self, ____exports.modifier_item_ethereal_blade_custom_ethereal.name, {duration = resistDuration, is_ally = 0})
|
||||
local hero = caster
|
||||
local statMult = self:GetSpecialValueFor("blast_stat_multiplier")
|
||||
local baseDamage = self:GetSpecialValueFor("blast_damage_base")
|
||||
local damage = (hero:IsHero() and hero:GetPrimaryStatValue() or 0) * statMult + baseDamage
|
||||
ApplyDamage({
|
||||
victim = target,
|
||||
attacker = caster,
|
||||
damage = damage,
|
||||
damage_type = DAMAGE_TYPE_MAGICAL,
|
||||
ability = self
|
||||
})
|
||||
end
|
||||
item_ethereal_blade_custom = __TS__Decorate(
|
||||
item_ethereal_blade_custom,
|
||||
item_ethereal_blade_custom,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_ethereal_blade_custom"}
|
||||
)
|
||||
____exports.item_ethereal_blade_custom = item_ethereal_blade_custom
|
||||
____exports.modifier_item_ethereal_blade_custom = __TS__Class()
|
||||
local modifier_item_ethereal_blade_custom = ____exports.modifier_item_ethereal_blade_custom
|
||||
modifier_item_ethereal_blade_custom.name = "modifier_item_ethereal_blade_custom"
|
||||
modifier_item_ethereal_blade_custom.____file_path = "scripts/vscripts/items/default_items/item_ethereal_blade_custom.lua"
|
||||
__TS__ClassExtends(modifier_item_ethereal_blade_custom, BaseModifier)
|
||||
function modifier_item_ethereal_blade_custom.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_ethereal_blade_custom.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_ethereal_blade_custom.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_ethereal_blade_custom.prototype.GetAttributes(self)
|
||||
return MODIFIER_ATTRIBUTE_MULTIPLE
|
||||
end
|
||||
function modifier_item_ethereal_blade_custom.prototype.DeclareFunctions(self)
|
||||
return {
|
||||
MODIFIER_PROPERTY_STATS_STRENGTH_BONUS,
|
||||
MODIFIER_PROPERTY_STATS_AGILITY_BONUS,
|
||||
MODIFIER_PROPERTY_STATS_INTELLECT_BONUS,
|
||||
MODIFIER_PROPERTY_STATUS_RESISTANCE_STACKING,
|
||||
MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT,
|
||||
MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE,
|
||||
MODIFIER_PROPERTY_HP_REGEN_AMPLIFY_PERCENTAGE,
|
||||
MODIFIER_PROPERTY_MP_REGEN_AMPLIFY_PERCENTAGE,
|
||||
MODIFIER_PROPERTY_SPELL_AMPLIFY_PERCENTAGE,
|
||||
MODIFIER_PROPERTY_PROCATTACK_BONUS_DAMAGE_MAGICAL
|
||||
}
|
||||
end
|
||||
function modifier_item_ethereal_blade_custom.prototype.getValue(self, name)
|
||||
local ____opt_2 = self:GetAbility()
|
||||
return ____opt_2 and ____opt_2:GetSpecialValueFor(name) or 0
|
||||
end
|
||||
function modifier_item_ethereal_blade_custom.prototype.GetModifierBonusStats_Strength(self)
|
||||
return self:getValue("bonus_strength")
|
||||
end
|
||||
function modifier_item_ethereal_blade_custom.prototype.GetModifierBonusStats_Agility(self)
|
||||
return self:getValue("bonus_agility")
|
||||
end
|
||||
function modifier_item_ethereal_blade_custom.prototype.GetModifierBonusStats_Intellect(self)
|
||||
return self:getValue("bonus_intellect")
|
||||
end
|
||||
function modifier_item_ethereal_blade_custom.prototype.GetModifierStatusResistanceStacking(self)
|
||||
return self:getValue("status_resistance")
|
||||
end
|
||||
function modifier_item_ethereal_blade_custom.prototype.GetModifierAttackSpeedBonus_Constant(self)
|
||||
return self:getValue("bonus_attack_speed")
|
||||
end
|
||||
function modifier_item_ethereal_blade_custom.prototype.GetModifierMoveSpeedBonus_Percentage(self)
|
||||
return self:getValue("movement_speed_percent_bonus")
|
||||
end
|
||||
function modifier_item_ethereal_blade_custom.prototype.GetModifierHPRegenAmplify_Percentage(self)
|
||||
return self:getValue("hp_regen_amp")
|
||||
end
|
||||
function modifier_item_ethereal_blade_custom.prototype.GetModifierMPRegenAmplify_Percentage(self)
|
||||
return self:getValue("mana_regen_multiplier")
|
||||
end
|
||||
function modifier_item_ethereal_blade_custom.prototype.GetModifierSpellAmplify_Percentage(self)
|
||||
return self:getValue("spell_amp")
|
||||
end
|
||||
function modifier_item_ethereal_blade_custom.prototype.GetModifierProcAttack_BonusDamage_Magical(self)
|
||||
return self:getValue("magic_damage_attack")
|
||||
end
|
||||
modifier_item_ethereal_blade_custom = __TS__Decorate(
|
||||
modifier_item_ethereal_blade_custom,
|
||||
modifier_item_ethereal_blade_custom,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_ethereal_blade_custom"}
|
||||
)
|
||||
____exports.modifier_item_ethereal_blade_custom = modifier_item_ethereal_blade_custom
|
||||
____exports.modifier_item_ethereal_blade_custom_ethereal = __TS__Class()
|
||||
local modifier_item_ethereal_blade_custom_ethereal = ____exports.modifier_item_ethereal_blade_custom_ethereal
|
||||
modifier_item_ethereal_blade_custom_ethereal.name = "modifier_item_ethereal_blade_custom_ethereal"
|
||||
modifier_item_ethereal_blade_custom_ethereal.____file_path = "scripts/vscripts/items/default_items/item_ethereal_blade_custom.lua"
|
||||
__TS__ClassExtends(modifier_item_ethereal_blade_custom_ethereal, BaseModifier)
|
||||
function modifier_item_ethereal_blade_custom_ethereal.prototype.____constructor(self, ...)
|
||||
BaseModifier.prototype.____constructor(self, ...)
|
||||
self.blastMovementSlow = 0
|
||||
self.etherealDamageBonus = 0
|
||||
self.turnRateReduction = 0
|
||||
self.isAlly = false
|
||||
end
|
||||
function modifier_item_ethereal_blade_custom_ethereal.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_ethereal_blade_custom_ethereal.prototype.IsDebuff(self)
|
||||
return not self.isAlly
|
||||
end
|
||||
function modifier_item_ethereal_blade_custom_ethereal.prototype.IsPurgable(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_ethereal_blade_custom_ethereal.prototype.GetStatusEffectName(self)
|
||||
return ETHEREAL_STATUS_PARTICLE
|
||||
end
|
||||
function modifier_item_ethereal_blade_custom_ethereal.prototype.StatusEffectPriority(self)
|
||||
return MODIFIER_PRIORITY_NORMAL
|
||||
end
|
||||
function modifier_item_ethereal_blade_custom_ethereal.prototype.OnCreated(self, params)
|
||||
local ability = self:GetAbility()
|
||||
if not ability then
|
||||
self:Destroy()
|
||||
return
|
||||
end
|
||||
self.isAlly = (params.is_ally or 0) == 1
|
||||
self.blastMovementSlow = ability:GetSpecialValueFor("blast_movement_slow")
|
||||
self.etherealDamageBonus = ability:GetSpecialValueFor("ethereal_damage_bonus")
|
||||
self.turnRateReduction = ability:GetSpecialValueFor("turn_rate_reduction")
|
||||
end
|
||||
function modifier_item_ethereal_blade_custom_ethereal.prototype.CheckState(self)
|
||||
return {[MODIFIER_STATE_ATTACK_IMMUNE] = true, [MODIFIER_STATE_DISARMED] = true}
|
||||
end
|
||||
function modifier_item_ethereal_blade_custom_ethereal.prototype.DeclareFunctions(self)
|
||||
local funcs = {MODIFIER_PROPERTY_MAGICAL_RESISTANCE_DECREPIFY_UNIQUE, MODIFIER_PROPERTY_ABSOLUTE_NO_DAMAGE_PHYSICAL}
|
||||
if self.isAlly then
|
||||
funcs[#funcs + 1] = MODIFIER_PROPERTY_IGNORE_CAST_ANGLE
|
||||
else
|
||||
__TS__ArrayPush(funcs, MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE, MODIFIER_PROPERTY_TURN_RATE_PERCENTAGE)
|
||||
end
|
||||
return funcs
|
||||
end
|
||||
function modifier_item_ethereal_blade_custom_ethereal.prototype.GetModifierMoveSpeedBonus_Percentage(self)
|
||||
if self.isAlly then
|
||||
return 0
|
||||
end
|
||||
return self.blastMovementSlow
|
||||
end
|
||||
function modifier_item_ethereal_blade_custom_ethereal.prototype.GetModifierMagicalResistanceDecrepifyUnique(self)
|
||||
return self.etherealDamageBonus
|
||||
end
|
||||
function modifier_item_ethereal_blade_custom_ethereal.prototype.GetAbsoluteNoDamagePhysical(self)
|
||||
return 1
|
||||
end
|
||||
function modifier_item_ethereal_blade_custom_ethereal.prototype.GetModifierTurnRate_Percentage(self)
|
||||
return self.turnRateReduction
|
||||
end
|
||||
function modifier_item_ethereal_blade_custom_ethereal.prototype.GetModifierIgnoreCastAngle(self)
|
||||
return self.isAlly and 1 or 0
|
||||
end
|
||||
function modifier_item_ethereal_blade_custom_ethereal.prototype.GetTexture(self)
|
||||
return "item_ethereal_blade"
|
||||
end
|
||||
modifier_item_ethereal_blade_custom_ethereal = __TS__Decorate(
|
||||
modifier_item_ethereal_blade_custom_ethereal,
|
||||
modifier_item_ethereal_blade_custom_ethereal,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_ethereal_blade_custom_ethereal"}
|
||||
)
|
||||
____exports.modifier_item_ethereal_blade_custom_ethereal = modifier_item_ethereal_blade_custom_ethereal
|
||||
--- Ускорение при касте по союзнику (движение и атака).
|
||||
____exports.modifier_item_ethereal_blade_custom_ally_haste = __TS__Class()
|
||||
local modifier_item_ethereal_blade_custom_ally_haste = ____exports.modifier_item_ethereal_blade_custom_ally_haste
|
||||
modifier_item_ethereal_blade_custom_ally_haste.name = "modifier_item_ethereal_blade_custom_ally_haste"
|
||||
modifier_item_ethereal_blade_custom_ally_haste.____file_path = "scripts/vscripts/items/default_items/item_ethereal_blade_custom.lua"
|
||||
__TS__ClassExtends(modifier_item_ethereal_blade_custom_ally_haste, BaseModifier)
|
||||
function modifier_item_ethereal_blade_custom_ally_haste.prototype.____constructor(self, ...)
|
||||
BaseModifier.prototype.____constructor(self, ...)
|
||||
self.bonusMoveSpeedPct = 0
|
||||
self.bonusAttackSpeedPct = 0
|
||||
end
|
||||
function modifier_item_ethereal_blade_custom_ally_haste.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_ethereal_blade_custom_ally_haste.prototype.IsDebuff(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_ethereal_blade_custom_ally_haste.prototype.IsPurgable(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_ethereal_blade_custom_ally_haste.prototype.OnCreated(self)
|
||||
local ability = self:GetAbility()
|
||||
if not ability then
|
||||
self:Destroy()
|
||||
return
|
||||
end
|
||||
self.bonusMoveSpeedPct = ability:GetSpecialValueFor("ally_bonus_movespeed")
|
||||
self.bonusAttackSpeedPct = ability:GetSpecialValueFor("ally_bonus_attack_speed")
|
||||
end
|
||||
function modifier_item_ethereal_blade_custom_ally_haste.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE, MODIFIER_PROPERTY_ATTACKSPEED_PERCENTAGE}
|
||||
end
|
||||
function modifier_item_ethereal_blade_custom_ally_haste.prototype.GetModifierMoveSpeedBonus_Percentage(self)
|
||||
return self.bonusMoveSpeedPct
|
||||
end
|
||||
function modifier_item_ethereal_blade_custom_ally_haste.prototype.GetModifierAttackSpeedPercentage(self)
|
||||
return self.bonusAttackSpeedPct
|
||||
end
|
||||
function modifier_item_ethereal_blade_custom_ally_haste.prototype.GetTexture(self)
|
||||
return "item_ethereal_blade"
|
||||
end
|
||||
modifier_item_ethereal_blade_custom_ally_haste = __TS__Decorate(
|
||||
modifier_item_ethereal_blade_custom_ally_haste,
|
||||
modifier_item_ethereal_blade_custom_ally_haste,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_ethereal_blade_custom_ally_haste"}
|
||||
)
|
||||
____exports.modifier_item_ethereal_blade_custom_ally_haste = modifier_item_ethereal_blade_custom_ally_haste
|
||||
return ____exports
|
||||
@@ -0,0 +1,184 @@
|
||||
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 registerAbility = ____dota_ts_adapter.registerAbility
|
||||
local registerModifier = ____dota_ts_adapter.registerModifier
|
||||
local BaseModifier = ____dota_ts_adapter.BaseModifier
|
||||
local ____modifier_general_fired = require("abilities.modifiers.modifier_general_fired")
|
||||
local modifier_general_fired = ____modifier_general_fired.modifier_general_fired
|
||||
____exports.item_fire_cape = __TS__Class()
|
||||
local item_fire_cape = ____exports.item_fire_cape
|
||||
item_fire_cape.name = "item_fire_cape"
|
||||
item_fire_cape.____file_path = "scripts/vscripts/items/default_items/item_fire_cape.lua"
|
||||
__TS__ClassExtends(item_fire_cape, BaseItem)
|
||||
function item_fire_cape.prototype.GetIntrinsicModifierName(self)
|
||||
return "modifier_item_fire_cape"
|
||||
end
|
||||
function item_fire_cape.prototype.GetAOERadius(self)
|
||||
return self:GetSpecialValueFor("radius")
|
||||
end
|
||||
item_fire_cape = __TS__Decorate(
|
||||
item_fire_cape,
|
||||
item_fire_cape,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_fire_cape"}
|
||||
)
|
||||
____exports.item_fire_cape = item_fire_cape
|
||||
____exports.modifier_item_fire_cape = __TS__Class()
|
||||
local modifier_item_fire_cape = ____exports.modifier_item_fire_cape
|
||||
modifier_item_fire_cape.name = "modifier_item_fire_cape"
|
||||
modifier_item_fire_cape.____file_path = "scripts/vscripts/items/default_items/item_fire_cape.lua"
|
||||
__TS__ClassExtends(modifier_item_fire_cape, BaseModifier)
|
||||
function modifier_item_fire_cape.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_fire_cape.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_fire_cape.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_fire_cape.prototype.GetAuraRadius(self)
|
||||
return self:GetAbility():GetSpecialValueFor("radius")
|
||||
end
|
||||
function modifier_item_fire_cape.prototype.GetAuraSearchTeam(self)
|
||||
return DOTA_UNIT_TARGET_TEAM_ENEMY
|
||||
end
|
||||
function modifier_item_fire_cape.prototype.GetAuraSearchType(self)
|
||||
return DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC
|
||||
end
|
||||
function modifier_item_fire_cape.prototype.GetModifierAura(self)
|
||||
return "modifier_item_fire_cape_aura"
|
||||
end
|
||||
function modifier_item_fire_cape.prototype.IsAura(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_fire_cape.prototype.OnCreated(self, params)
|
||||
self:StartIntervalThink(1)
|
||||
end
|
||||
function modifier_item_fire_cape.prototype.GetTexture(self)
|
||||
return "default_items/fire_cape"
|
||||
end
|
||||
function modifier_item_fire_cape.prototype.DeclareFunctions(self)
|
||||
return {
|
||||
MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT,
|
||||
MODIFIER_PROPERTY_MAGICAL_RESISTANCE_BONUS,
|
||||
MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS,
|
||||
MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE,
|
||||
MODIFIER_PROPERTY_MANA_REGEN_CONSTANT,
|
||||
MODIFIER_PROPERTY_HEALTH_REGEN_CONSTANT
|
||||
}
|
||||
end
|
||||
function modifier_item_fire_cape.prototype.GetModifierPreAttack_BonusDamage(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_damage")
|
||||
end
|
||||
function modifier_item_fire_cape.prototype.GetModifierConstantManaRegen(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_mana_regen")
|
||||
end
|
||||
function modifier_item_fire_cape.prototype.GetModifierMagicalResistanceBonus(self, event)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_magic_resistance")
|
||||
end
|
||||
function modifier_item_fire_cape.prototype.GetModifierConstantHealthRegen(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_health_regen")
|
||||
end
|
||||
function modifier_item_fire_cape.prototype.GetModifierPhysicalArmorBonus(self, event)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_physical_armor")
|
||||
end
|
||||
function modifier_item_fire_cape.prototype.GetModifierAttackSpeedBonus_Constant(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_attack_speed")
|
||||
end
|
||||
function modifier_item_fire_cape.prototype.OnIntervalThink(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
if not self:GetParent():IsAlive() then
|
||||
return
|
||||
end
|
||||
local ____opt_0 = self:GetCaster()
|
||||
if ____opt_0 and ____opt_0:IsIllusion() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
local radius = self:GetAbility():GetSpecialValueFor("radius")
|
||||
local damage = self:GetAbility():GetSpecialValueFor("damage")
|
||||
local enemies = FindUnitsInRadius(
|
||||
caster:GetTeamNumber(),
|
||||
caster:GetAbsOrigin(),
|
||||
nil,
|
||||
radius,
|
||||
DOTA_UNIT_TARGET_TEAM_ENEMY,
|
||||
bit.bor(DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_BASIC),
|
||||
DOTA_UNIT_TARGET_FLAG_NONE,
|
||||
FIND_ANY_ORDER,
|
||||
false
|
||||
)
|
||||
for ____, enemy in ipairs(enemies) do
|
||||
local damage_table = {
|
||||
victim = enemy,
|
||||
attacker = caster,
|
||||
damage = damage + self:GetParent():GetMaxMana() * (self:GetAbility():GetSpecialValueFor("mana_damage_pct") / 100),
|
||||
damage_type = DAMAGE_TYPE_MAGICAL,
|
||||
ability = self:GetAbility(),
|
||||
damage_flags = DOTA_DAMAGE_FLAG_NONE
|
||||
}
|
||||
local modifier = enemy:AddNewModifier(
|
||||
self:GetCaster(),
|
||||
self:GetAbility(),
|
||||
modifier_general_fired.name,
|
||||
{}
|
||||
)
|
||||
if modifier then
|
||||
local stacksPerLevel = self:GetAbility():GetSpecialValueFor("fire_stack")
|
||||
do
|
||||
local i = 0
|
||||
while i < stacksPerLevel do
|
||||
modifier:IncrementStackCount()
|
||||
i = i + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
ApplyDamage(damage_table)
|
||||
end
|
||||
end
|
||||
modifier_item_fire_cape = __TS__Decorate(
|
||||
modifier_item_fire_cape,
|
||||
modifier_item_fire_cape,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_fire_cape"}
|
||||
)
|
||||
____exports.modifier_item_fire_cape = modifier_item_fire_cape
|
||||
____exports.modifier_item_fire_cape_aura = __TS__Class()
|
||||
local modifier_item_fire_cape_aura = ____exports.modifier_item_fire_cape_aura
|
||||
modifier_item_fire_cape_aura.name = "modifier_item_fire_cape_aura"
|
||||
modifier_item_fire_cape_aura.____file_path = "scripts/vscripts/items/default_items/item_fire_cape.lua"
|
||||
__TS__ClassExtends(modifier_item_fire_cape_aura, BaseModifier)
|
||||
function modifier_item_fire_cape_aura.prototype.RemoveOnDeath(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_fire_cape_aura.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_fire_cape_aura.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_fire_cape_aura.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_MAGICAL_RESISTANCE_BONUS, MODIFIER_PROPERTY_SPELL_AMPLIFY_PERCENTAGE}
|
||||
end
|
||||
function modifier_item_fire_cape_aura.prototype.GetModifierMagicalResistanceBonus(self)
|
||||
return -self:GetAbility():GetSpecialValueFor("bonus_magic_resistance")
|
||||
end
|
||||
function modifier_item_fire_cape_aura.prototype.GetModifierSpellAmplify_Percentage(self)
|
||||
return -self:GetAbility():GetSpecialValueFor("bonus_spell_amp")
|
||||
end
|
||||
modifier_item_fire_cape_aura = __TS__Decorate(
|
||||
modifier_item_fire_cape_aura,
|
||||
modifier_item_fire_cape_aura,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_fire_cape_aura"}
|
||||
)
|
||||
____exports.modifier_item_fire_cape_aura = modifier_item_fire_cape_aura
|
||||
return ____exports
|
||||
@@ -0,0 +1,615 @@
|
||||
local ____lualib = require("lualib_bundle")
|
||||
local __TS__Class = ____lualib.__TS__Class
|
||||
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
||||
local __TS__ArrayIncludes = ____lualib.__TS__ArrayIncludes
|
||||
local __TS__Decorate = ____lualib.__TS__Decorate
|
||||
local ____exports = {}
|
||||
local ____fish_basic = require("abilities.fish_basic")
|
||||
local modifier_fish_basic = ____fish_basic.modifier_fish_basic
|
||||
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
|
||||
--- Цепь из клиента Dota 2 (кастомный .vpcf без файла в content/particles не появится в игре)
|
||||
local PARTICLE_MEATHOOK = "particles/units/heroes/hero_pudge/pudge_meathook.vpcf"
|
||||
--- Юнит рыбы (npc_units_custom) — при успешном вываживании удаляется, дроп летит к герою
|
||||
local BOMB_UNIT_NAMES = {"npc_bomb"}
|
||||
local FISH_UNIT_NAMES = {"npc_fish_1", "npc_fish_2"}
|
||||
local FISH_CATCH_ITEM_DEFAULT = "item_meat"
|
||||
--- У Пуджа есть attach_weapon_chain_rt; у большинства героев — attach_attack1
|
||||
local function getMeathookAttachName(self, unit)
|
||||
local candidates = {"attach_attack1", "attach_attack2"}
|
||||
for ____, name in ipairs(candidates) do
|
||||
if unit:ScriptLookupAttachment(name) >= 0 then
|
||||
return name
|
||||
end
|
||||
end
|
||||
return "attach_hitloc"
|
||||
end
|
||||
____exports.item_fishing_rod = __TS__Class()
|
||||
local item_fishing_rod = ____exports.item_fishing_rod
|
||||
item_fishing_rod.name = "item_fishing_rod"
|
||||
item_fishing_rod.____file_path = "scripts/vscripts/items/default_items/item_fishing_rod.lua"
|
||||
__TS__ClassExtends(item_fishing_rod, BaseItem)
|
||||
function item_fishing_rod.prototype.____constructor(self, ...)
|
||||
BaseItem.prototype.____constructor(self, ...)
|
||||
self.vHookOffset = Vector(0, 0, 96)
|
||||
self.bRetracting = false
|
||||
self.vTargetPosition = Vector(0, 0, 0)
|
||||
self.vStartPosition = Vector(0, 0, 0)
|
||||
end
|
||||
function item_fishing_rod.prototype.GetAbilityDamageType(self)
|
||||
return DAMAGE_TYPE_PHYSICAL
|
||||
end
|
||||
function item_fishing_rod.prototype.GetAbilityDamage(self)
|
||||
return self:GetSpecialValueFor("Damage")
|
||||
end
|
||||
function item_fishing_rod.prototype.Precache(self, context)
|
||||
PrecacheResource("particle", PARTICLE_MEATHOOK, context)
|
||||
PrecacheResource("particle", "particles/units/heroes/hero_pudge/pudge_meathook_impact.vpcf", context)
|
||||
end
|
||||
function item_fishing_rod.prototype.GetCastRange(self, location, target)
|
||||
return self:GetSpecialValueFor("hook_distance")
|
||||
end
|
||||
function item_fishing_rod.prototype.OnAbilityPhaseStart(self)
|
||||
self:GetCaster():StartGesture(ACT_DOTA_ATTACK)
|
||||
return true
|
||||
end
|
||||
function item_fishing_rod.prototype.OnAbilityPhaseInterrupted(self)
|
||||
self:GetCaster():RemoveGesture(ACT_DOTA_ATTACK)
|
||||
return true
|
||||
end
|
||||
function item_fishing_rod.prototype.clearHookedVictimPull(self)
|
||||
if self.hookedVictimEntIndex == nil then
|
||||
return
|
||||
end
|
||||
local ent = EntIndexToHScript(self.hookedVictimEntIndex)
|
||||
self.hookedVictimEntIndex = nil
|
||||
if ent and IsValidEntity(ent) and ent:IsBaseNPC() then
|
||||
ent:RemoveModifierByName(____exports.modifier_item_fishing_rod_hook_pull.name)
|
||||
end
|
||||
end
|
||||
function item_fishing_rod.prototype.releaseCasterMovementLock(self, caster)
|
||||
caster:RemoveModifierByName(____exports.modifier_item_fishing_rod_caster_root.name)
|
||||
end
|
||||
function item_fishing_rod.prototype.getFishCatchItemName(self)
|
||||
local raw = self:GetAbilityKeyValues()
|
||||
local ____opt_result_4
|
||||
if raw ~= nil then
|
||||
____opt_result_4 = raw.AbilityValues
|
||||
end
|
||||
local ____opt_result_5
|
||||
if ____opt_result_4 ~= nil then
|
||||
____opt_result_5 = ____opt_result_4.fish_catch_item
|
||||
end
|
||||
local ____opt_result_5_9 = ____opt_result_5
|
||||
if ____opt_result_5_9 == nil then
|
||||
local ____opt_result_8
|
||||
if raw ~= nil then
|
||||
____opt_result_8 = raw.fish_catch_item
|
||||
end
|
||||
____opt_result_5_9 = ____opt_result_8
|
||||
end
|
||||
local name = ____opt_result_5_9
|
||||
if type(name) == "string" and #name > 0 then
|
||||
return name
|
||||
end
|
||||
return FISH_CATCH_ITEM_DEFAULT
|
||||
end
|
||||
function item_fishing_rod.prototype.trySpawnFishCatchReward(self, caster, caughtEntIndex)
|
||||
if caughtEntIndex == nil then
|
||||
return
|
||||
end
|
||||
local ent = EntIndexToHScript(caughtEntIndex)
|
||||
if not ent or not IsValidEntity(ent) or not ent:IsBaseNPC() then
|
||||
return
|
||||
end
|
||||
local unit = ent
|
||||
local parent = self:GetCaster()
|
||||
if not caster then
|
||||
return
|
||||
end
|
||||
if __TS__ArrayIncludes(
|
||||
BOMB_UNIT_NAMES,
|
||||
unit:GetUnitName()
|
||||
) and unit:IsAlive() then
|
||||
local debuffs = {{name = "modifier_bad_cast_debuff", minDuration = 10, maxDuration = 20}, {name = "modifier_blind_debuff", minDuration = 1, maxDuration = 3.5}, {name = "modifier_stunned", minDuration = 1.5, maxDuration = 3.5}}
|
||||
ApplyDamage({
|
||||
victim = parent,
|
||||
attacker = caster,
|
||||
damage = self:GetCaster():GetMaxHealth() * 0.25,
|
||||
damage_type = DAMAGE_TYPE_PURE,
|
||||
ability = self
|
||||
})
|
||||
local randomDebuff = debuffs[RandomInt(0, #debuffs - 1) + 1]
|
||||
local duration = RandomFloat(randomDebuff.minDuration, randomDebuff.maxDuration)
|
||||
caster:AddNewModifier(caster, self, randomDebuff.name, {duration = duration})
|
||||
EmitSoundOn("Hero_TemplarAssassin.Trap.Explode", parent)
|
||||
unit:RemoveModifierByName(modifier_fish_basic.name)
|
||||
unit:Kill(self, caster)
|
||||
UTIL_Remove(unit)
|
||||
return
|
||||
end
|
||||
if not __TS__ArrayIncludes(
|
||||
FISH_UNIT_NAMES,
|
||||
unit:GetUnitName()
|
||||
) or not unit:IsAlive() then
|
||||
return
|
||||
end
|
||||
local fromPos = unit:GetAbsOrigin()
|
||||
unit:RemoveModifierByName(modifier_fish_basic.name)
|
||||
unit:Kill(self, caster)
|
||||
UTIL_Remove(unit)
|
||||
local itemName = self:getFishCatchItemName()
|
||||
local launchH = self:GetSpecialValueFor("fish_loot_launch_height")
|
||||
local launchDist = self:GetSpecialValueFor("fish_loot_launch_distance")
|
||||
local launchDur = self:GetSpecialValueFor("fish_loot_launch_duration")
|
||||
if launchH <= 0 then
|
||||
launchH = 100
|
||||
end
|
||||
if launchDist <= 0 then
|
||||
launchDist = 150
|
||||
end
|
||||
if launchDur <= 0 then
|
||||
launchDur = 0.5
|
||||
end
|
||||
local item = CreateItem(itemName, nil, nil)
|
||||
if not item then
|
||||
return
|
||||
end
|
||||
CreateItemOnPositionForLaunch(fromPos, item)
|
||||
item:LaunchLootInitialHeight(
|
||||
false,
|
||||
launchH,
|
||||
launchDist,
|
||||
launchDur,
|
||||
caster:GetAbsOrigin()
|
||||
)
|
||||
end
|
||||
function item_fishing_rod.prototype.OnSpellStart(self)
|
||||
local caster = self:GetCaster()
|
||||
self:clearHookedVictimPull()
|
||||
if not caster:IsInstance(CDOTA_BaseNPC_Hero) then
|
||||
return
|
||||
end
|
||||
local hero = caster
|
||||
self:releaseCasterMovementLock(hero)
|
||||
local hookSpeed = self:GetSpecialValueFor("hook_speed")
|
||||
local hookDistance = self:GetCastRange(
|
||||
caster:GetOrigin(),
|
||||
nil
|
||||
)
|
||||
local hookWidth = self:GetSpecialValueFor("hook_width")
|
||||
local attachName = getMeathookAttachName(nil, caster)
|
||||
local ____opt_10 = caster.clothes
|
||||
local hook = ____opt_10 and ____opt_10.weapon
|
||||
if not not hook then
|
||||
hook:AddEffects(EF_NODRAW)
|
||||
end
|
||||
local casterPoint = caster:GetOrigin()
|
||||
self.vStartPosition = casterPoint
|
||||
local vDirection = (casterPoint == self:GetCursorPosition() and self:GetCursorPosition() + Vector(1, 1, 0) or self:GetCursorPosition()) - casterPoint
|
||||
vDirection.z = 0
|
||||
if caster:HasModifier(____exports.modifier_bad_cast_debuff.name) then
|
||||
local angle = RandomFloat(0, 2 * math.pi)
|
||||
local randomDir = Vector(
|
||||
math.cos(angle),
|
||||
math.sin(angle),
|
||||
0
|
||||
)
|
||||
vDirection = randomDir * vDirection:Length2D()
|
||||
end
|
||||
vDirection = vDirection:Normalized() * hookDistance
|
||||
self.vTargetPosition = casterPoint + vDirection
|
||||
local vHookTarget = self.vTargetPosition + Vector(0, 0, 96)
|
||||
local vKillswitch = Vector(hookDistance / hookSpeed * 2, 0, 0)
|
||||
EmitSoundOn("Hero_Pudge.AttackHookExtend", caster)
|
||||
self.nChainParticleFXIndex = ParticleManager:CreateParticle(PARTICLE_MEATHOOK, PATTACH_CUSTOMORIGIN, caster)
|
||||
ParticleManager:SetParticleAlwaysSimulate(self.nChainParticleFXIndex)
|
||||
ParticleManager:SetParticleControlEnt(
|
||||
self.nChainParticleFXIndex,
|
||||
0,
|
||||
caster,
|
||||
PATTACH_POINT_FOLLOW,
|
||||
attachName,
|
||||
casterPoint + self.vHookOffset,
|
||||
true
|
||||
)
|
||||
ParticleManager:SetParticleControl(self.nChainParticleFXIndex, 1, vHookTarget)
|
||||
ParticleManager:SetParticleControl(
|
||||
self.nChainParticleFXIndex,
|
||||
2,
|
||||
Vector(hookSpeed, hookDistance, hookWidth)
|
||||
)
|
||||
ParticleManager:SetParticleControl(self.nChainParticleFXIndex, 3, vKillswitch)
|
||||
ParticleManager:SetParticleControl(
|
||||
self.nChainParticleFXIndex,
|
||||
4,
|
||||
Vector(1, 0, 0)
|
||||
)
|
||||
ParticleManager:SetParticleControl(
|
||||
self.nChainParticleFXIndex,
|
||||
5,
|
||||
Vector(0, 0, 0)
|
||||
)
|
||||
if hook then
|
||||
ParticleManager:SetParticleControlEnt(
|
||||
self.nChainParticleFXIndex,
|
||||
7,
|
||||
hook,
|
||||
PATTACH_CUSTOMORIGIN,
|
||||
nil,
|
||||
hook:GetOrigin(),
|
||||
true
|
||||
)
|
||||
end
|
||||
ProjectileManager:CreateLinearProjectile({
|
||||
Ability = self,
|
||||
vSpawnOrigin = casterPoint,
|
||||
vVelocity = vDirection:Normalized() * hookSpeed,
|
||||
fDistance = hookDistance,
|
||||
fStartRadius = hookWidth,
|
||||
fEndRadius = hookWidth,
|
||||
Source = caster,
|
||||
iUnitTargetTeam = DOTA_UNIT_TARGET_TEAM_ENEMY,
|
||||
iUnitTargetType = bit.bor(DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_BASIC),
|
||||
iUnitTargetFlags = DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES
|
||||
})
|
||||
self.bRetracting = false
|
||||
____exports.modifier_item_fishing_rod_caster_root:apply(hero, hero, self, {})
|
||||
self:SetActivated(false)
|
||||
end
|
||||
function item_fishing_rod.prototype.OnProjectileHit(self, target, location)
|
||||
local caster = self:GetCaster()
|
||||
local attachName = getMeathookAttachName(nil, caster)
|
||||
if target == caster then
|
||||
return false
|
||||
end
|
||||
if self.bRetracting == false then
|
||||
if target then
|
||||
local isFish = __TS__ArrayIncludes(
|
||||
FISH_UNIT_NAMES,
|
||||
target:GetUnitName()
|
||||
)
|
||||
EmitSoundOn("Hero_Pudge.AttackHookImpact", target)
|
||||
if not isFish then
|
||||
local damage = self:GetAbilityDamage() + self:GetCaster():GetAverageTrueAttackDamage(caster)
|
||||
ApplyDamage({
|
||||
victim = target,
|
||||
attacker = caster,
|
||||
damage = damage,
|
||||
damage_type = self:GetAbilityDamageType(),
|
||||
ability = self
|
||||
})
|
||||
end
|
||||
local nFXIndex = ParticleManager:CreateParticle("particles/econ/items/pudge/pudge_ti6_immortal/pudge_meathook_impact_ti6.vpcf", PATTACH_CUSTOMORIGIN, target)
|
||||
ParticleManager:SetParticleControlEnt(
|
||||
nFXIndex,
|
||||
0,
|
||||
target,
|
||||
PATTACH_POINT_FOLLOW,
|
||||
"attach_hitloc",
|
||||
caster:GetOrigin(),
|
||||
true
|
||||
)
|
||||
AddFOWViewer(
|
||||
caster:GetTeamNumber(),
|
||||
target:GetOrigin(),
|
||||
self:GetSpecialValueFor("vision_radius"),
|
||||
self:GetSpecialValueFor("vision_duration"),
|
||||
false
|
||||
)
|
||||
target:InterruptChannel()
|
||||
self.hookedVictimEntIndex = target:entindex()
|
||||
____exports.modifier_item_fishing_rod_hook_pull:apply(target, caster, self, {})
|
||||
if not isFish then
|
||||
____exports.modifier_item_fishing_rod_debuff:apply(
|
||||
target,
|
||||
caster,
|
||||
self,
|
||||
{duration = self:GetSpecialValueFor("duration")}
|
||||
)
|
||||
end
|
||||
end
|
||||
local flPad = caster:GetPaddedCollisionRadius()
|
||||
local vHookPos = self.vTargetPosition
|
||||
if target then
|
||||
vHookPos = target:GetOrigin()
|
||||
flPad = flPad + target:GetPaddedCollisionRadius()
|
||||
end
|
||||
local vVelocity = self.vStartPosition - vHookPos
|
||||
vVelocity.z = 0
|
||||
local flDistance = vVelocity:Length2D() - flPad
|
||||
vVelocity = vVelocity:Normalized() * self:GetSpecialValueFor("hook_speed")
|
||||
ProjectileManager:CreateLinearProjectile({
|
||||
Ability = self,
|
||||
vSpawnOrigin = vHookPos,
|
||||
vVelocity = vVelocity,
|
||||
fDistance = flDistance,
|
||||
Source = caster
|
||||
})
|
||||
if target then
|
||||
ParticleManager:SetParticleControlEnt(
|
||||
self.nChainParticleFXIndex,
|
||||
1,
|
||||
caster,
|
||||
PATTACH_POINT_FOLLOW,
|
||||
attachName,
|
||||
target:GetOrigin() + self.vHookOffset,
|
||||
true
|
||||
)
|
||||
else
|
||||
ParticleManager:SetParticleControlEnt(
|
||||
self.nChainParticleFXIndex,
|
||||
1,
|
||||
caster,
|
||||
PATTACH_POINT_FOLLOW,
|
||||
attachName,
|
||||
caster:GetOrigin() + self.vHookOffset,
|
||||
true
|
||||
)
|
||||
end
|
||||
StopSoundOn("Hero_Pudge.AttackHookExtend", caster)
|
||||
EmitSoundOn("Hero_Pudge.AttackHookRetract", caster)
|
||||
if caster:IsAlive() then
|
||||
caster:FadeGesture(ACT_DOTA_ATTACK)
|
||||
caster:StartGesture(ACT_DOTA_ATTACK)
|
||||
end
|
||||
local casterAny = caster
|
||||
local ____opt_12 = casterAny.SetRageTimeIncrease
|
||||
if ____opt_12 ~= nil then
|
||||
____opt_12(casterAny)
|
||||
end
|
||||
self.bRetracting = true
|
||||
else
|
||||
local caughtEntIndex = self.hookedVictimEntIndex
|
||||
self:clearHookedVictimPull()
|
||||
self:releaseCasterMovementLock(caster)
|
||||
self:trySpawnFishCatchReward(caster, caughtEntIndex)
|
||||
local ____opt_14 = caster.clothes
|
||||
local w = ____opt_14 and ____opt_14.weapon
|
||||
if not not w then
|
||||
w:RemoveEffects(EF_NODRAW)
|
||||
end
|
||||
ParticleManager:DestroyParticle(self.nChainParticleFXIndex, true)
|
||||
self:SetActivated(true)
|
||||
EmitSoundOn("Hero_Pudge.AttackHookRetractStop", caster)
|
||||
end
|
||||
return true
|
||||
end
|
||||
item_fishing_rod = __TS__Decorate(
|
||||
item_fishing_rod,
|
||||
item_fishing_rod,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_fishing_rod"}
|
||||
)
|
||||
____exports.item_fishing_rod = item_fishing_rod
|
||||
--- Кастер стоит на месте, пока крюк не вернётся (откат цепи завершён)
|
||||
____exports.modifier_item_fishing_rod_caster_root = __TS__Class()
|
||||
local modifier_item_fishing_rod_caster_root = ____exports.modifier_item_fishing_rod_caster_root
|
||||
modifier_item_fishing_rod_caster_root.name = "modifier_item_fishing_rod_caster_root"
|
||||
modifier_item_fishing_rod_caster_root.____file_path = "scripts/vscripts/items/default_items/item_fishing_rod.lua"
|
||||
__TS__ClassExtends(modifier_item_fishing_rod_caster_root, BaseModifier)
|
||||
function modifier_item_fishing_rod_caster_root.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_fishing_rod_caster_root.prototype.IsDebuff(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_fishing_rod_caster_root.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_fishing_rod_caster_root.prototype.RemoveOnDeath(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_fishing_rod_caster_root.prototype.CheckState(self)
|
||||
return {[MODIFIER_STATE_ROOTED] = true, [MODIFIER_STATE_SILENCED] = true}
|
||||
end
|
||||
modifier_item_fishing_rod_caster_root = __TS__Decorate(
|
||||
modifier_item_fishing_rod_caster_root,
|
||||
modifier_item_fishing_rod_caster_root,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_fishing_rod_caster_root"}
|
||||
)
|
||||
____exports.modifier_item_fishing_rod_caster_root = modifier_item_fishing_rod_caster_root
|
||||
--- Притягивание к кастеру на скорости hook_speed (синхронно с откатом цепи)
|
||||
____exports.modifier_item_fishing_rod_hook_pull = __TS__Class()
|
||||
local modifier_item_fishing_rod_hook_pull = ____exports.modifier_item_fishing_rod_hook_pull
|
||||
modifier_item_fishing_rod_hook_pull.name = "modifier_item_fishing_rod_hook_pull"
|
||||
modifier_item_fishing_rod_hook_pull.____file_path = "scripts/vscripts/items/default_items/item_fishing_rod.lua"
|
||||
__TS__ClassExtends(modifier_item_fishing_rod_hook_pull, BaseModifier)
|
||||
function modifier_item_fishing_rod_hook_pull.prototype.____constructor(self, ...)
|
||||
BaseModifier.prototype.____constructor(self, ...)
|
||||
self.thinkInterval = 0.03
|
||||
end
|
||||
function modifier_item_fishing_rod_hook_pull.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_fishing_rod_hook_pull.prototype.IsDebuff(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_fishing_rod_hook_pull.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_fishing_rod_hook_pull.prototype.CheckState(self)
|
||||
return {[MODIFIER_STATE_STUNNED] = true}
|
||||
end
|
||||
function modifier_item_fishing_rod_hook_pull.prototype.OnCreated(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
self:StartIntervalThink(self.thinkInterval)
|
||||
end
|
||||
function modifier_item_fishing_rod_hook_pull.prototype.OnIntervalThink(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
local parent = self:GetParent()
|
||||
if not caster or not caster:IsAlive() or not parent or not parent:IsAlive() then
|
||||
self:Destroy()
|
||||
return
|
||||
end
|
||||
local ability = self:GetAbility()
|
||||
local speed = ability and ability:GetSpecialValueFor("hook_speed") or 1600
|
||||
local step = speed * self.thinkInterval
|
||||
local pos = parent:GetAbsOrigin()
|
||||
local casterPos = caster:GetAbsOrigin()
|
||||
local flatDelta = Vector(casterPos.x - pos.x, casterPos.y - pos.y, 0)
|
||||
local dist2d = flatDelta:Length2D()
|
||||
local stopDist = caster:GetPaddedCollisionRadius() + parent:GetPaddedCollisionRadius() + 32
|
||||
if dist2d <= stopDist then
|
||||
FindClearSpaceForUnit(
|
||||
parent,
|
||||
caster:GetAbsOrigin(),
|
||||
true
|
||||
)
|
||||
self:Destroy()
|
||||
return
|
||||
end
|
||||
local dir = flatDelta:Normalized()
|
||||
local move = math.min(step, dist2d)
|
||||
local newPos = Vector(pos.x + dir.x * move, pos.y + dir.y * move, pos.z)
|
||||
parent:SetAbsOrigin(GetGroundPosition(newPos, nil))
|
||||
end
|
||||
function modifier_item_fishing_rod_hook_pull.prototype.OnDestroy(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local parent = self:GetParent()
|
||||
if parent and IsValidEntity(parent) and parent:IsAlive() then
|
||||
FindClearSpaceForUnit(
|
||||
parent,
|
||||
parent:GetAbsOrigin(),
|
||||
true
|
||||
)
|
||||
end
|
||||
end
|
||||
modifier_item_fishing_rod_hook_pull = __TS__Decorate(
|
||||
modifier_item_fishing_rod_hook_pull,
|
||||
modifier_item_fishing_rod_hook_pull,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_fishing_rod_hook_pull"}
|
||||
)
|
||||
____exports.modifier_item_fishing_rod_hook_pull = modifier_item_fishing_rod_hook_pull
|
||||
____exports.modifier_item_fishing_rod_debuff = __TS__Class()
|
||||
local modifier_item_fishing_rod_debuff = ____exports.modifier_item_fishing_rod_debuff
|
||||
modifier_item_fishing_rod_debuff.name = "modifier_item_fishing_rod_debuff"
|
||||
modifier_item_fishing_rod_debuff.____file_path = "scripts/vscripts/items/default_items/item_fishing_rod.lua"
|
||||
__TS__ClassExtends(modifier_item_fishing_rod_debuff, BaseModifier)
|
||||
function modifier_item_fishing_rod_debuff.prototype.____constructor(self, ...)
|
||||
BaseModifier.prototype.____constructor(self, ...)
|
||||
self.slow_movespeed = 0
|
||||
self.damage_per_tick = 0
|
||||
end
|
||||
function modifier_item_fishing_rod_debuff.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_fishing_rod_debuff.prototype.GetEffectName(self)
|
||||
return "particles/units/heroes/hero_bloodseeker/bloodseeker_rupture.vpcf"
|
||||
end
|
||||
function modifier_item_fishing_rod_debuff.prototype.OnCreated(self, params)
|
||||
local ability = self:GetAbility()
|
||||
self.slow_movespeed = ability:GetSpecialValueFor("slow_movespeed")
|
||||
self.damage_per_tick = ability:GetSpecialValueFor("damage_per_tick")
|
||||
self:StartIntervalThink(ability:GetSpecialValueFor("tick"))
|
||||
end
|
||||
function modifier_item_fishing_rod_debuff.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE}
|
||||
end
|
||||
function modifier_item_fishing_rod_debuff.prototype.OnIntervalThink(self)
|
||||
if IsClient() then
|
||||
return
|
||||
end
|
||||
local ability = self:GetAbility()
|
||||
ApplyDamage({
|
||||
victim = self:GetParent(),
|
||||
attacker = self:GetCaster(),
|
||||
damage_type = ability:GetAbilityDamageType(),
|
||||
damage = self.damage_per_tick,
|
||||
ability = ability
|
||||
})
|
||||
end
|
||||
function modifier_item_fishing_rod_debuff.prototype.GetModifierMoveSpeedBonus_Percentage(self)
|
||||
return self.slow_movespeed
|
||||
end
|
||||
modifier_item_fishing_rod_debuff = __TS__Decorate(
|
||||
modifier_item_fishing_rod_debuff,
|
||||
modifier_item_fishing_rod_debuff,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_fishing_rod_debuff"}
|
||||
)
|
||||
____exports.modifier_item_fishing_rod_debuff = modifier_item_fishing_rod_debuff
|
||||
____exports.modifier_blind_debuff = __TS__Class()
|
||||
local modifier_blind_debuff = ____exports.modifier_blind_debuff
|
||||
modifier_blind_debuff.name = "modifier_blind_debuff"
|
||||
modifier_blind_debuff.____file_path = "scripts/vscripts/items/default_items/item_fishing_rod.lua"
|
||||
__TS__ClassExtends(modifier_blind_debuff, BaseModifier)
|
||||
function modifier_blind_debuff.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_blind_debuff.prototype.IsDebuff(self)
|
||||
return true
|
||||
end
|
||||
function modifier_blind_debuff.prototype.IsPurgable(self)
|
||||
return true
|
||||
end
|
||||
function modifier_blind_debuff.prototype.OnCreated(self, params)
|
||||
local particle = ParticleManager:CreateParticleForPlayer(
|
||||
"particles/fish_screen_effect.vpcf",
|
||||
PATTACH_ABSORIGIN_FOLLOW,
|
||||
self:GetCaster(),
|
||||
self:GetCaster():GetPlayerOwner()
|
||||
)
|
||||
self.particleId = particle
|
||||
end
|
||||
function modifier_blind_debuff.prototype.OnRefresh(self, params)
|
||||
if self.particleId then
|
||||
ParticleManager:DestroyParticle(self.particleId, false)
|
||||
end
|
||||
self:OnCreated(params)
|
||||
end
|
||||
function modifier_blind_debuff.prototype.OnDestroy(self)
|
||||
if IsClient() then
|
||||
return
|
||||
end
|
||||
if self.particleId then
|
||||
ParticleManager:DestroyParticle(self.particleId, false)
|
||||
end
|
||||
end
|
||||
function modifier_blind_debuff.prototype.GetTexture(self)
|
||||
return "templar_assassin_trap"
|
||||
end
|
||||
modifier_blind_debuff = __TS__Decorate(
|
||||
modifier_blind_debuff,
|
||||
modifier_blind_debuff,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_blind_debuff"}
|
||||
)
|
||||
____exports.modifier_blind_debuff = modifier_blind_debuff
|
||||
____exports.modifier_bad_cast_debuff = __TS__Class()
|
||||
local modifier_bad_cast_debuff = ____exports.modifier_bad_cast_debuff
|
||||
modifier_bad_cast_debuff.name = "modifier_bad_cast_debuff"
|
||||
modifier_bad_cast_debuff.____file_path = "scripts/vscripts/items/default_items/item_fishing_rod.lua"
|
||||
__TS__ClassExtends(modifier_bad_cast_debuff, BaseModifier)
|
||||
function modifier_bad_cast_debuff.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_bad_cast_debuff.prototype.IsDebuff(self)
|
||||
return true
|
||||
end
|
||||
function modifier_bad_cast_debuff.prototype.IsPurgable(self)
|
||||
return true
|
||||
end
|
||||
function modifier_bad_cast_debuff.prototype.GetTexture(self)
|
||||
return "templar_assassin_trap"
|
||||
end
|
||||
modifier_bad_cast_debuff = __TS__Decorate(
|
||||
modifier_bad_cast_debuff,
|
||||
modifier_bad_cast_debuff,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_bad_cast_debuff"}
|
||||
)
|
||||
____exports.modifier_bad_cast_debuff = modifier_bad_cast_debuff
|
||||
return ____exports
|
||||
@@ -0,0 +1,59 @@
|
||||
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
|
||||
____exports.item_ice_spine = __TS__Class()
|
||||
local item_ice_spine = ____exports.item_ice_spine
|
||||
item_ice_spine.name = "item_ice_spine"
|
||||
item_ice_spine.____file_path = "scripts/vscripts/items/default_items/item_ice_spine.lua"
|
||||
__TS__ClassExtends(item_ice_spine, BaseItem)
|
||||
function item_ice_spine.prototype.GetIntrinsicModifierName(self)
|
||||
return "modifier_ice_spine"
|
||||
end
|
||||
item_ice_spine = __TS__Decorate(
|
||||
item_ice_spine,
|
||||
item_ice_spine,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_ice_spine"}
|
||||
)
|
||||
____exports.item_ice_spine = item_ice_spine
|
||||
____exports.modifier_ice_spine = __TS__Class()
|
||||
local modifier_ice_spine = ____exports.modifier_ice_spine
|
||||
modifier_ice_spine.name = "modifier_ice_spine"
|
||||
modifier_ice_spine.____file_path = "scripts/vscripts/items/default_items/item_ice_spine.lua"
|
||||
__TS__ClassExtends(modifier_ice_spine, BaseModifier)
|
||||
function modifier_ice_spine.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_ice_spine.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_ice_spine.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_SPELL_AMPLIFY_PERCENTAGE, MODIFIER_PROPERTY_INCOMING_DAMAGE_PERCENTAGE, MODIFIER_PROPERTY_HEAL_AMPLIFY_PERCENTAGE_SOURCE, MODIFIER_PROPERTY_MOVESPEED_BONUS_CONSTANT}
|
||||
end
|
||||
function modifier_ice_spine.prototype.GetModifierSpellAmplify_Percentage(self, event)
|
||||
return self:GetAbility():GetSpecialValueFor("spell_amplify")
|
||||
end
|
||||
function modifier_ice_spine.prototype.GetModifierHealAmplify_PercentageSource(self)
|
||||
return self:GetAbility():GetSpecialValueFor("heal_amplify")
|
||||
end
|
||||
function modifier_ice_spine.prototype.GetModifierMoveSpeedBonus_Constant(self)
|
||||
return self:GetAbility():GetSpecialValueFor("movespeed_const")
|
||||
end
|
||||
function modifier_ice_spine.prototype.GetModifierIncomingDamage_Percentage(self, event)
|
||||
return self:GetAbility():GetSpecialValueFor("incoming_dmg_pct")
|
||||
end
|
||||
modifier_ice_spine = __TS__Decorate(
|
||||
modifier_ice_spine,
|
||||
modifier_ice_spine,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_ice_spine"}
|
||||
)
|
||||
____exports.modifier_ice_spine = modifier_ice_spine
|
||||
return ____exports
|
||||
@@ -0,0 +1,70 @@
|
||||
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 BaseAbility = ____dota_ts_adapter.BaseAbility
|
||||
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_lifesteal_custom = __TS__Class()
|
||||
local item_lifesteal_custom = ____exports.item_lifesteal_custom
|
||||
item_lifesteal_custom.name = "item_lifesteal_custom"
|
||||
item_lifesteal_custom.____file_path = "scripts/vscripts/items/default_items/item_lifesteal_custom.lua"
|
||||
__TS__ClassExtends(item_lifesteal_custom, BaseAbility)
|
||||
function item_lifesteal_custom.prototype.GetIntrinsicModifierName(self)
|
||||
return "modifier_item_lifesteal_custom"
|
||||
end
|
||||
item_lifesteal_custom = __TS__Decorate(
|
||||
item_lifesteal_custom,
|
||||
item_lifesteal_custom,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_lifesteal_custom"}
|
||||
)
|
||||
____exports.item_lifesteal_custom = item_lifesteal_custom
|
||||
____exports.modifier_item_lifesteal_custom = __TS__Class()
|
||||
local modifier_item_lifesteal_custom = ____exports.modifier_item_lifesteal_custom
|
||||
modifier_item_lifesteal_custom.name = "modifier_item_lifesteal_custom"
|
||||
modifier_item_lifesteal_custom.____file_path = "scripts/vscripts/items/default_items/item_lifesteal_custom.lua"
|
||||
__TS__ClassExtends(modifier_item_lifesteal_custom, BaseModifier)
|
||||
function modifier_item_lifesteal_custom.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_lifesteal_custom.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_lifesteal_custom.prototype.GetAttributes(self)
|
||||
return MODIFIER_ATTRIBUTE_MULTIPLE
|
||||
end
|
||||
function modifier_item_lifesteal_custom.prototype.OnCreated(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local hero = self:GetParent()
|
||||
local lifesteal = self:GetAbility():GetSpecialValueFor("lifesteal")
|
||||
if lifesteal > 0 then
|
||||
addPhysicalVampirism(nil, hero, lifesteal)
|
||||
end
|
||||
end
|
||||
function modifier_item_lifesteal_custom.prototype.OnDestroy(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local hero = self:GetParent()
|
||||
local lifesteal = self:GetAbility():GetSpecialValueFor("lifesteal")
|
||||
if lifesteal > 0 then
|
||||
reducePhysicalVampirism(nil, hero, lifesteal)
|
||||
end
|
||||
end
|
||||
modifier_item_lifesteal_custom = __TS__Decorate(
|
||||
modifier_item_lifesteal_custom,
|
||||
modifier_item_lifesteal_custom,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_lifesteal_custom"}
|
||||
)
|
||||
____exports.modifier_item_lifesteal_custom = modifier_item_lifesteal_custom
|
||||
return ____exports
|
||||
@@ -0,0 +1,223 @@
|
||||
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
|
||||
____exports.item_magic_rapier = __TS__Class()
|
||||
local item_magic_rapier = ____exports.item_magic_rapier
|
||||
item_magic_rapier.name = "item_magic_rapier"
|
||||
item_magic_rapier.____file_path = "scripts/vscripts/items/default_items/item_magic_rapier.lua"
|
||||
__TS__ClassExtends(item_magic_rapier, BaseItem)
|
||||
function item_magic_rapier.prototype.GetIntrinsicModifierName(self)
|
||||
return "modifier_magic_rapier"
|
||||
end
|
||||
item_magic_rapier = __TS__Decorate(
|
||||
item_magic_rapier,
|
||||
item_magic_rapier,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_magic_rapier"}
|
||||
)
|
||||
____exports.item_magic_rapier = item_magic_rapier
|
||||
____exports.modifier_magic_rapier = __TS__Class()
|
||||
local modifier_magic_rapier = ____exports.modifier_magic_rapier
|
||||
modifier_magic_rapier.name = "modifier_magic_rapier"
|
||||
modifier_magic_rapier.____file_path = "scripts/vscripts/items/default_items/item_magic_rapier.lua"
|
||||
__TS__ClassExtends(modifier_magic_rapier, BaseModifier)
|
||||
function modifier_magic_rapier.prototype.____constructor(self, ...)
|
||||
BaseModifier.prototype.____constructor(self, ...)
|
||||
self.Lock = false
|
||||
end
|
||||
function modifier_magic_rapier.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_magic_rapier.prototype.IsDebuff(self)
|
||||
return false
|
||||
end
|
||||
function modifier_magic_rapier.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_magic_rapier.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,
|
||||
MODIFIER_EVENT_ON_TAKEDAMAGE
|
||||
}
|
||||
end
|
||||
function modifier_magic_rapier.prototype.GetModifierBonusStats_Intellect(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_intellect")
|
||||
end
|
||||
function modifier_magic_rapier.prototype.GetModifierSpellAmplify_Percentage(self, event)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_spell_amplify")
|
||||
end
|
||||
function modifier_magic_rapier.prototype.GetModifierBonusStats_Strength(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_strength")
|
||||
end
|
||||
function modifier_magic_rapier.prototype.GetModifierBonusStats_Agility(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_agility")
|
||||
end
|
||||
function modifier_magic_rapier.prototype.GetModifierConstantManaRegen(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_mana_regen")
|
||||
end
|
||||
function modifier_magic_rapier.prototype.GetModifierManaBonus(self)
|
||||
if not IsServer() then
|
||||
return 0
|
||||
end
|
||||
if self.Lock then
|
||||
return 0
|
||||
end
|
||||
self.Lock = true
|
||||
local mana = self:GetParent():GetMaxMana()
|
||||
self.Lock = false
|
||||
local bonus = self:GetAbility():GetSpecialValueFor("bonus_mana_pct") * mana / 100
|
||||
return bonus
|
||||
end
|
||||
function modifier_magic_rapier.prototype.OnTakeDamage(self, event)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetParent()
|
||||
local rapierAbility = self:GetAbility()
|
||||
if not caster:IsRealHero() or not rapierAbility then
|
||||
return
|
||||
end
|
||||
local target = event.unit
|
||||
if not target then
|
||||
return
|
||||
end
|
||||
if target:GetTeamNumber() == caster:GetTeamNumber() then
|
||||
return
|
||||
end
|
||||
if event.attacker ~= caster then
|
||||
return
|
||||
end
|
||||
if not event.inflictor then
|
||||
return
|
||||
end
|
||||
if event.inflictor == rapierAbility then
|
||||
return
|
||||
end
|
||||
if event.damage <= 0 then
|
||||
return
|
||||
end
|
||||
if event.damage <= 300 then
|
||||
return
|
||||
end
|
||||
local bonusDamage = caster:GetMana() * (rapierAbility:GetSpecialValueFor("damage_per_cast_hand") / 100) + rapierAbility:GetSpecialValueFor("damage_per_cast")
|
||||
local spellAmpFrac = math.max(
|
||||
0,
|
||||
caster:GetSpellAmplification(false)
|
||||
)
|
||||
local damageToApply = bonusDamage / math.max(0.000001, 1 + spellAmpFrac)
|
||||
SendOverheadEventMessage(
|
||||
nil,
|
||||
OVERHEAD_ALERT_BONUS_SPELL_DAMAGE,
|
||||
target,
|
||||
math.floor(bonusDamage),
|
||||
nil
|
||||
)
|
||||
rapierAbility:UseResources(true, false, false, true)
|
||||
ApplyDamage({
|
||||
victim = target,
|
||||
attacker = caster,
|
||||
damage = damageToApply,
|
||||
damage_type = DAMAGE_TYPE_MAGICAL,
|
||||
damage_flags = DOTA_DAMAGE_FLAG_NO_SPELL_AMPLIFICATION,
|
||||
ability = nil
|
||||
})
|
||||
target:AddNewModifier(
|
||||
caster,
|
||||
rapierAbility,
|
||||
"modifier_magic_rapier_debuff",
|
||||
{duration = rapierAbility:GetSpecialValueFor("slow_duration")}
|
||||
)
|
||||
local particle = ParticleManager:CreateParticle("particles/items_fx/phylactery_target.vpcf", PATTACH_ABSORIGIN_FOLLOW, target)
|
||||
ParticleManager:SetParticleControlEnt(
|
||||
particle,
|
||||
0,
|
||||
target,
|
||||
PATTACH_POINT_FOLLOW,
|
||||
"attach_hitloc",
|
||||
target:GetAbsOrigin(),
|
||||
true
|
||||
)
|
||||
ParticleManager:ReleaseParticleIndex(particle)
|
||||
local particle_2 = ParticleManager:CreateParticle("particles/items_fx/phylactery.vpcf", PATTACH_ABSORIGIN_FOLLOW, caster)
|
||||
ParticleManager:SetParticleControlEnt(
|
||||
particle_2,
|
||||
0,
|
||||
caster,
|
||||
PATTACH_POINT_FOLLOW,
|
||||
"attach_hitloc",
|
||||
caster:GetAbsOrigin(),
|
||||
true
|
||||
)
|
||||
ParticleManager:SetParticleControlEnt(
|
||||
particle_2,
|
||||
1,
|
||||
target,
|
||||
PATTACH_POINT_FOLLOW,
|
||||
"attach_hitloc",
|
||||
target:GetAbsOrigin(),
|
||||
true
|
||||
)
|
||||
ParticleManager:ReleaseParticleIndex(particle_2)
|
||||
target:EmitSound("Item.Phylactery.Target")
|
||||
end
|
||||
modifier_magic_rapier = __TS__Decorate(
|
||||
modifier_magic_rapier,
|
||||
modifier_magic_rapier,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_magic_rapier"}
|
||||
)
|
||||
____exports.modifier_magic_rapier = modifier_magic_rapier
|
||||
____exports.modifier_magic_rapier_debuff = __TS__Class()
|
||||
local modifier_magic_rapier_debuff = ____exports.modifier_magic_rapier_debuff
|
||||
modifier_magic_rapier_debuff.name = "modifier_magic_rapier_debuff"
|
||||
modifier_magic_rapier_debuff.____file_path = "scripts/vscripts/items/default_items/item_magic_rapier.lua"
|
||||
__TS__ClassExtends(modifier_magic_rapier_debuff, BaseModifier)
|
||||
function modifier_magic_rapier_debuff.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_magic_rapier_debuff.prototype.IsDebuff(self)
|
||||
return true
|
||||
end
|
||||
function modifier_magic_rapier_debuff.prototype.IsPurgable(self)
|
||||
return true
|
||||
end
|
||||
function modifier_magic_rapier_debuff.prototype.GetAttributes(self)
|
||||
return MODIFIER_ATTRIBUTE_MULTIPLE
|
||||
end
|
||||
function modifier_magic_rapier_debuff.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE, MODIFIER_PROPERTY_MAGICAL_RESISTANCE_BONUS}
|
||||
end
|
||||
function modifier_magic_rapier_debuff.prototype.CheckState(self)
|
||||
local state = {[MODIFIER_STATE_PASSIVES_DISABLED] = true}
|
||||
return state
|
||||
end
|
||||
function modifier_magic_rapier_debuff.prototype.GetModifierMoveSpeedBonus_Percentage(self)
|
||||
return -self:GetAbility():GetSpecialValueFor("slow_pct")
|
||||
end
|
||||
function modifier_magic_rapier_debuff.prototype.GetModifierMagicalResistanceBonus(self, event)
|
||||
return self:GetAbility():GetSpecialValueFor("magical_resist_reduction")
|
||||
end
|
||||
function modifier_magic_rapier_debuff.prototype.GetTexture(self)
|
||||
return "default_items/magicpier"
|
||||
end
|
||||
modifier_magic_rapier_debuff = __TS__Decorate(
|
||||
modifier_magic_rapier_debuff,
|
||||
modifier_magic_rapier_debuff,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_magic_rapier_debuff"}
|
||||
)
|
||||
____exports.modifier_magic_rapier_debuff = modifier_magic_rapier_debuff
|
||||
return ____exports
|
||||
@@ -0,0 +1,93 @@
|
||||
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
|
||||
____exports.item_magic_stone = __TS__Class()
|
||||
local item_magic_stone = ____exports.item_magic_stone
|
||||
item_magic_stone.name = "item_magic_stone"
|
||||
item_magic_stone.____file_path = "scripts/vscripts/items/default_items/item_magic_stone.lua"
|
||||
__TS__ClassExtends(item_magic_stone, BaseItem)
|
||||
function item_magic_stone.prototype.GetIntrinsicModifierName(self)
|
||||
return "modifier_magic_stone"
|
||||
end
|
||||
item_magic_stone = __TS__Decorate(
|
||||
item_magic_stone,
|
||||
item_magic_stone,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_magic_stone"}
|
||||
)
|
||||
____exports.item_magic_stone = item_magic_stone
|
||||
____exports.modifier_magic_stone = __TS__Class()
|
||||
local modifier_magic_stone = ____exports.modifier_magic_stone
|
||||
modifier_magic_stone.name = "modifier_magic_stone"
|
||||
modifier_magic_stone.____file_path = "scripts/vscripts/items/default_items/item_magic_stone.lua"
|
||||
__TS__ClassExtends(modifier_magic_stone, BaseModifier)
|
||||
function modifier_magic_stone.prototype.____constructor(self, ...)
|
||||
BaseModifier.prototype.____constructor(self, ...)
|
||||
self.Lock = false
|
||||
end
|
||||
function modifier_magic_stone.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_magic_stone.prototype.IsDebuff(self)
|
||||
return false
|
||||
end
|
||||
function modifier_magic_stone.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_magic_stone.prototype.GetAttributes(self)
|
||||
return MODIFIER_ATTRIBUTE_MULTIPLE
|
||||
end
|
||||
function modifier_magic_stone.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_magic_stone.prototype.GetModifierBonusStats_Intellect(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_intellect")
|
||||
end
|
||||
function modifier_magic_stone.prototype.GetModifierSpellAmplify_Percentage(self, event)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_spell_amplify")
|
||||
end
|
||||
function modifier_magic_stone.prototype.GetModifierBonusStats_Strength(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_strength")
|
||||
end
|
||||
function modifier_magic_stone.prototype.GetModifierBonusStats_Agility(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_agility")
|
||||
end
|
||||
function modifier_magic_stone.prototype.GetModifierConstantManaRegen(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_mana_regen")
|
||||
end
|
||||
function modifier_magic_stone.prototype.GetModifierManaBonus(self)
|
||||
if not IsServer() then
|
||||
return 0
|
||||
end
|
||||
if self.Lock then
|
||||
return 0
|
||||
end
|
||||
self.Lock = true
|
||||
local mana = self:GetParent():GetMaxMana()
|
||||
self.Lock = false
|
||||
local bonus = self:GetAbility():GetSpecialValueFor("bonus_mana_pct") * mana / 100
|
||||
return bonus
|
||||
end
|
||||
modifier_magic_stone = __TS__Decorate(
|
||||
modifier_magic_stone,
|
||||
modifier_magic_stone,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_magic_stone"}
|
||||
)
|
||||
____exports.modifier_magic_stone = modifier_magic_stone
|
||||
return ____exports
|
||||
@@ -0,0 +1,148 @@
|
||||
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
|
||||
@@ -0,0 +1,223 @@
|
||||
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
|
||||
____exports.item_magical_divine_rapier = __TS__Class()
|
||||
local item_magical_divine_rapier = ____exports.item_magical_divine_rapier
|
||||
item_magical_divine_rapier.name = "item_magical_divine_rapier"
|
||||
item_magical_divine_rapier.____file_path = "scripts/vscripts/items/default_items/item_magical_divine_rapier.lua"
|
||||
__TS__ClassExtends(item_magical_divine_rapier, BaseItem)
|
||||
function item_magical_divine_rapier.prototype.GetIntrinsicModifierName(self)
|
||||
return "modifier_magical_divine_rapier"
|
||||
end
|
||||
item_magical_divine_rapier = __TS__Decorate(
|
||||
item_magical_divine_rapier,
|
||||
item_magical_divine_rapier,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_magical_divine_rapier"}
|
||||
)
|
||||
____exports.item_magical_divine_rapier = item_magical_divine_rapier
|
||||
____exports.modifier_magical_divine_rapier = __TS__Class()
|
||||
local modifier_magical_divine_rapier = ____exports.modifier_magical_divine_rapier
|
||||
modifier_magical_divine_rapier.name = "modifier_magical_divine_rapier"
|
||||
modifier_magical_divine_rapier.____file_path = "scripts/vscripts/items/default_items/item_magical_divine_rapier.lua"
|
||||
__TS__ClassExtends(modifier_magical_divine_rapier, BaseModifier)
|
||||
function modifier_magical_divine_rapier.prototype.____constructor(self, ...)
|
||||
BaseModifier.prototype.____constructor(self, ...)
|
||||
self.Lock = false
|
||||
end
|
||||
function modifier_magical_divine_rapier.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_magical_divine_rapier.prototype.IsDebuff(self)
|
||||
return false
|
||||
end
|
||||
function modifier_magical_divine_rapier.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_magical_divine_rapier.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,
|
||||
MODIFIER_EVENT_ON_TAKEDAMAGE
|
||||
}
|
||||
end
|
||||
function modifier_magical_divine_rapier.prototype.GetModifierBonusStats_Intellect(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_intellect")
|
||||
end
|
||||
function modifier_magical_divine_rapier.prototype.GetModifierSpellAmplify_Percentage(self, event)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_spell_amplify")
|
||||
end
|
||||
function modifier_magical_divine_rapier.prototype.GetModifierBonusStats_Strength(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_strength")
|
||||
end
|
||||
function modifier_magical_divine_rapier.prototype.GetModifierBonusStats_Agility(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_agility")
|
||||
end
|
||||
function modifier_magical_divine_rapier.prototype.GetModifierConstantManaRegen(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_mana_regen")
|
||||
end
|
||||
function modifier_magical_divine_rapier.prototype.GetModifierManaBonus(self)
|
||||
if not IsServer() then
|
||||
return 0
|
||||
end
|
||||
if self.Lock then
|
||||
return 0
|
||||
end
|
||||
self.Lock = true
|
||||
local mana = self:GetParent():GetMaxMana()
|
||||
self.Lock = false
|
||||
local bonus = self:GetAbility():GetSpecialValueFor("bonus_mana_pct") * mana / 100
|
||||
return bonus
|
||||
end
|
||||
function modifier_magical_divine_rapier.prototype.OnTakeDamage(self, event)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetParent()
|
||||
local rapierAbility = self:GetAbility()
|
||||
if not caster:IsRealHero() or not rapierAbility then
|
||||
return
|
||||
end
|
||||
local target = event.unit
|
||||
if not target then
|
||||
return
|
||||
end
|
||||
if target:GetTeamNumber() == caster:GetTeamNumber() then
|
||||
return
|
||||
end
|
||||
if event.attacker ~= caster then
|
||||
return
|
||||
end
|
||||
if not event.inflictor then
|
||||
return
|
||||
end
|
||||
if event.inflictor == rapierAbility then
|
||||
return
|
||||
end
|
||||
if event.damage <= 0 then
|
||||
return
|
||||
end
|
||||
if event.damage <= 300 then
|
||||
return
|
||||
end
|
||||
local bonusDamage = caster:GetMana() * (rapierAbility:GetSpecialValueFor("damage_per_cast_hand") / 100) + rapierAbility:GetSpecialValueFor("damage_per_cast")
|
||||
local spellAmpFrac = math.max(
|
||||
0,
|
||||
caster:GetSpellAmplification(false)
|
||||
)
|
||||
local damageToApply = bonusDamage / math.max(0.000001, 1 + spellAmpFrac)
|
||||
SendOverheadEventMessage(
|
||||
nil,
|
||||
OVERHEAD_ALERT_BONUS_SPELL_DAMAGE,
|
||||
target,
|
||||
math.floor(bonusDamage),
|
||||
nil
|
||||
)
|
||||
rapierAbility:UseResources(true, false, false, true)
|
||||
ApplyDamage({
|
||||
victim = target,
|
||||
attacker = caster,
|
||||
damage = damageToApply,
|
||||
damage_type = DAMAGE_TYPE_MAGICAL,
|
||||
damage_flags = DOTA_DAMAGE_FLAG_NO_SPELL_AMPLIFICATION,
|
||||
ability = nil
|
||||
})
|
||||
target:AddNewModifier(
|
||||
caster,
|
||||
rapierAbility,
|
||||
"modifier_magic_rapier_debuff",
|
||||
{duration = rapierAbility:GetSpecialValueFor("slow_duration")}
|
||||
)
|
||||
local particle = ParticleManager:CreateParticle("particles/items_fx/phylactery_target.vpcf", PATTACH_ABSORIGIN_FOLLOW, target)
|
||||
ParticleManager:SetParticleControlEnt(
|
||||
particle,
|
||||
0,
|
||||
target,
|
||||
PATTACH_POINT_FOLLOW,
|
||||
"attach_hitloc",
|
||||
target:GetAbsOrigin(),
|
||||
true
|
||||
)
|
||||
ParticleManager:ReleaseParticleIndex(particle)
|
||||
local particle_2 = ParticleManager:CreateParticle("particles/items_fx/phylactery.vpcf", PATTACH_ABSORIGIN_FOLLOW, caster)
|
||||
ParticleManager:SetParticleControlEnt(
|
||||
particle_2,
|
||||
0,
|
||||
caster,
|
||||
PATTACH_POINT_FOLLOW,
|
||||
"attach_hitloc",
|
||||
caster:GetAbsOrigin(),
|
||||
true
|
||||
)
|
||||
ParticleManager:SetParticleControlEnt(
|
||||
particle_2,
|
||||
1,
|
||||
target,
|
||||
PATTACH_POINT_FOLLOW,
|
||||
"attach_hitloc",
|
||||
target:GetAbsOrigin(),
|
||||
true
|
||||
)
|
||||
ParticleManager:ReleaseParticleIndex(particle_2)
|
||||
target:EmitSound("Item.Phylactery.Target")
|
||||
end
|
||||
modifier_magical_divine_rapier = __TS__Decorate(
|
||||
modifier_magical_divine_rapier,
|
||||
modifier_magical_divine_rapier,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_magical_divine_rapier"}
|
||||
)
|
||||
____exports.modifier_magical_divine_rapier = modifier_magical_divine_rapier
|
||||
____exports.modifier_magic_rapier_debuff = __TS__Class()
|
||||
local modifier_magic_rapier_debuff = ____exports.modifier_magic_rapier_debuff
|
||||
modifier_magic_rapier_debuff.name = "modifier_magic_rapier_debuff"
|
||||
modifier_magic_rapier_debuff.____file_path = "scripts/vscripts/items/default_items/item_magical_divine_rapier.lua"
|
||||
__TS__ClassExtends(modifier_magic_rapier_debuff, BaseModifier)
|
||||
function modifier_magic_rapier_debuff.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_magic_rapier_debuff.prototype.IsDebuff(self)
|
||||
return true
|
||||
end
|
||||
function modifier_magic_rapier_debuff.prototype.IsPurgable(self)
|
||||
return true
|
||||
end
|
||||
function modifier_magic_rapier_debuff.prototype.GetAttributes(self)
|
||||
return MODIFIER_ATTRIBUTE_MULTIPLE
|
||||
end
|
||||
function modifier_magic_rapier_debuff.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE, MODIFIER_PROPERTY_MAGICAL_RESISTANCE_BONUS}
|
||||
end
|
||||
function modifier_magic_rapier_debuff.prototype.CheckState(self)
|
||||
local state = {[MODIFIER_STATE_PASSIVES_DISABLED] = true}
|
||||
return state
|
||||
end
|
||||
function modifier_magic_rapier_debuff.prototype.GetModifierMoveSpeedBonus_Percentage(self)
|
||||
return -self:GetAbility():GetSpecialValueFor("slow_pct")
|
||||
end
|
||||
function modifier_magic_rapier_debuff.prototype.GetModifierMagicalResistanceBonus(self, event)
|
||||
return self:GetAbility():GetSpecialValueFor("magical_resist_reduction")
|
||||
end
|
||||
function modifier_magic_rapier_debuff.prototype.GetTexture(self)
|
||||
return "default_items/magicpier"
|
||||
end
|
||||
modifier_magic_rapier_debuff = __TS__Decorate(
|
||||
modifier_magic_rapier_debuff,
|
||||
modifier_magic_rapier_debuff,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_magic_rapier_debuff"}
|
||||
)
|
||||
____exports.modifier_magic_rapier_debuff = modifier_magic_rapier_debuff
|
||||
return ____exports
|
||||
@@ -0,0 +1,61 @@
|
||||
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 registerAbility = ____dota_ts_adapter.registerAbility
|
||||
local registerModifier = ____dota_ts_adapter.registerModifier
|
||||
local BaseModifier = ____dota_ts_adapter.BaseModifier
|
||||
____exports.item_magical_quiver = __TS__Class()
|
||||
local item_magical_quiver = ____exports.item_magical_quiver
|
||||
item_magical_quiver.name = "item_magical_quiver"
|
||||
item_magical_quiver.____file_path = "scripts/vscripts/items/default_items/item_magical_quiver.lua"
|
||||
__TS__ClassExtends(item_magical_quiver, BaseItem)
|
||||
function item_magical_quiver.prototype.GetIntrinsicModifierName(self)
|
||||
return "modifier_item_magical_quiver"
|
||||
end
|
||||
item_magical_quiver = __TS__Decorate(
|
||||
item_magical_quiver,
|
||||
item_magical_quiver,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_magical_quiver"}
|
||||
)
|
||||
____exports.item_magical_quiver = item_magical_quiver
|
||||
____exports.modifier_item_magical_quiver = __TS__Class()
|
||||
local modifier_item_magical_quiver = ____exports.modifier_item_magical_quiver
|
||||
modifier_item_magical_quiver.name = "modifier_item_magical_quiver"
|
||||
modifier_item_magical_quiver.____file_path = "scripts/vscripts/items/default_items/item_magical_quiver.lua"
|
||||
__TS__ClassExtends(modifier_item_magical_quiver, BaseModifier)
|
||||
function modifier_item_magical_quiver.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_magical_quiver.prototype.IsDebuff(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_magical_quiver.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_magical_quiver.prototype.OnCreated(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
end
|
||||
function modifier_item_magical_quiver.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_PROCATTACK_BONUS_DAMAGE_MAGICAL}
|
||||
end
|
||||
function modifier_item_magical_quiver.prototype.GetModifierProcAttack_BonusDamage_Magical(self, event)
|
||||
if self:GetParent():IsIllusion() or not self:GetParent():IsRangedAttacker() then
|
||||
return 0
|
||||
end
|
||||
return self:GetAbility():GetSpecialValueFor("proc_damage_magical")
|
||||
end
|
||||
modifier_item_magical_quiver = __TS__Decorate(
|
||||
modifier_item_magical_quiver,
|
||||
modifier_item_magical_quiver,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_magical_quiver"}
|
||||
)
|
||||
____exports.modifier_item_magical_quiver = modifier_item_magical_quiver
|
||||
return ____exports
|
||||
@@ -0,0 +1,135 @@
|
||||
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 BaseAbility = ____dota_ts_adapter.BaseAbility
|
||||
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_mask_of_madness_custom = __TS__Class()
|
||||
local item_mask_of_madness_custom = ____exports.item_mask_of_madness_custom
|
||||
item_mask_of_madness_custom.name = "item_mask_of_madness_custom"
|
||||
item_mask_of_madness_custom.____file_path = "scripts/vscripts/items/default_items/item_mask_of_madness_custom.lua"
|
||||
__TS__ClassExtends(item_mask_of_madness_custom, BaseAbility)
|
||||
function item_mask_of_madness_custom.prototype.GetIntrinsicModifierName(self)
|
||||
return "modifier_item_mask_of_madness_custom"
|
||||
end
|
||||
function item_mask_of_madness_custom.prototype.OnSpellStart(self)
|
||||
self:GetCaster():AddNewModifier(
|
||||
self:GetCaster(),
|
||||
self,
|
||||
"modifier_item_mask_of_madness_custom_buff",
|
||||
{duration = self:GetSpecialValueFor("duration")}
|
||||
)
|
||||
end
|
||||
item_mask_of_madness_custom = __TS__Decorate(
|
||||
item_mask_of_madness_custom,
|
||||
item_mask_of_madness_custom,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_mask_of_madness_custom"}
|
||||
)
|
||||
____exports.item_mask_of_madness_custom = item_mask_of_madness_custom
|
||||
____exports.modifier_item_mask_of_madness_custom = __TS__Class()
|
||||
local modifier_item_mask_of_madness_custom = ____exports.modifier_item_mask_of_madness_custom
|
||||
modifier_item_mask_of_madness_custom.name = "modifier_item_mask_of_madness_custom"
|
||||
modifier_item_mask_of_madness_custom.____file_path = "scripts/vscripts/items/default_items/item_mask_of_madness_custom.lua"
|
||||
__TS__ClassExtends(modifier_item_mask_of_madness_custom, BaseModifier)
|
||||
function modifier_item_mask_of_madness_custom.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_mask_of_madness_custom.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_mask_of_madness_custom.prototype.GetAttributes(self)
|
||||
return MODIFIER_ATTRIBUTE_MULTIPLE
|
||||
end
|
||||
function modifier_item_mask_of_madness_custom.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE}
|
||||
end
|
||||
function modifier_item_mask_of_madness_custom.prototype.GetModifierPreAttack_BonusDamage(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_damage")
|
||||
end
|
||||
function modifier_item_mask_of_madness_custom.prototype.OnCreated(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local hero = self:GetParent()
|
||||
local lifesteal = self:GetAbility():GetSpecialValueFor("lifesteal")
|
||||
if lifesteal > 0 then
|
||||
addPhysicalVampirism(nil, hero, lifesteal)
|
||||
end
|
||||
end
|
||||
function modifier_item_mask_of_madness_custom.prototype.OnDestroy(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local hero = self:GetParent()
|
||||
local lifesteal = self:GetAbility():GetSpecialValueFor("lifesteal")
|
||||
if lifesteal > 0 then
|
||||
reducePhysicalVampirism(nil, hero, lifesteal)
|
||||
end
|
||||
end
|
||||
modifier_item_mask_of_madness_custom = __TS__Decorate(
|
||||
modifier_item_mask_of_madness_custom,
|
||||
modifier_item_mask_of_madness_custom,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_mask_of_madness_custom"}
|
||||
)
|
||||
____exports.modifier_item_mask_of_madness_custom = modifier_item_mask_of_madness_custom
|
||||
____exports.modifier_item_mask_of_madness_custom_buff = __TS__Class()
|
||||
local modifier_item_mask_of_madness_custom_buff = ____exports.modifier_item_mask_of_madness_custom_buff
|
||||
modifier_item_mask_of_madness_custom_buff.name = "modifier_item_mask_of_madness_custom_buff"
|
||||
modifier_item_mask_of_madness_custom_buff.____file_path = "scripts/vscripts/items/default_items/item_mask_of_madness_custom.lua"
|
||||
__TS__ClassExtends(modifier_item_mask_of_madness_custom_buff, BaseModifier)
|
||||
function modifier_item_mask_of_madness_custom_buff.prototype.____constructor(self, ...)
|
||||
BaseModifier.prototype.____constructor(self, ...)
|
||||
self.bonus_damage = 0
|
||||
self.bonus_attackspeed_active = 0
|
||||
self.armor_reduction_active = 0
|
||||
self.move_speed_active = 0
|
||||
self.duration = 0
|
||||
end
|
||||
function modifier_item_mask_of_madness_custom_buff.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_mask_of_madness_custom_buff.prototype.IsPurgable(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_mask_of_madness_custom_buff.prototype.OnCreated(self)
|
||||
self.bonus_damage = self:GetAbility():GetSpecialValueFor("bonus_damage")
|
||||
self.bonus_attackspeed_active = self:GetAbility():GetSpecialValueFor("bonus_attackspeed_active")
|
||||
self.armor_reduction_active = self:GetAbility():GetSpecialValueFor("armor_reduction_active")
|
||||
self.move_speed_active = self:GetAbility():GetSpecialValueFor("move_speed_active")
|
||||
self.duration = self:GetAbility():GetSpecialValueFor("duration")
|
||||
end
|
||||
function modifier_item_mask_of_madness_custom_buff.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE, MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT, MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS, MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE}
|
||||
end
|
||||
function modifier_item_mask_of_madness_custom_buff.prototype.CheckState(self)
|
||||
return {[MODIFIER_STATE_SILENCED] = true}
|
||||
end
|
||||
function modifier_item_mask_of_madness_custom_buff.prototype.GetModifierPreAttack_BonusDamage(self)
|
||||
return self.bonus_damage
|
||||
end
|
||||
function modifier_item_mask_of_madness_custom_buff.prototype.GetModifierAttackSpeedBonus_Constant(self)
|
||||
return self.bonus_attackspeed_active
|
||||
end
|
||||
function modifier_item_mask_of_madness_custom_buff.prototype.GetModifierPhysicalArmorBonus(self)
|
||||
return self.armor_reduction_active
|
||||
end
|
||||
function modifier_item_mask_of_madness_custom_buff.prototype.GetModifierMoveSpeedBonus_Percentage(self)
|
||||
return self.move_speed_active
|
||||
end
|
||||
modifier_item_mask_of_madness_custom_buff = __TS__Decorate(
|
||||
modifier_item_mask_of_madness_custom_buff,
|
||||
modifier_item_mask_of_madness_custom_buff,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_mask_of_madness_custom_buff"}
|
||||
)
|
||||
____exports.modifier_item_mask_of_madness_custom_buff = modifier_item_mask_of_madness_custom_buff
|
||||
return ____exports
|
||||
@@ -0,0 +1,122 @@
|
||||
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
|
||||
____exports.item_mega_fury = __TS__Class()
|
||||
local item_mega_fury = ____exports.item_mega_fury
|
||||
item_mega_fury.name = "item_mega_fury"
|
||||
item_mega_fury.____file_path = "scripts/vscripts/items/default_items/item_mega_fury.lua"
|
||||
__TS__ClassExtends(item_mega_fury, BaseItem)
|
||||
function item_mega_fury.prototype.GetIntrinsicModifierName(self)
|
||||
return "modifier_mega_fury"
|
||||
end
|
||||
function item_mega_fury.prototype.GetAOERadius(self)
|
||||
return self:GetSpecialValueFor("tree")
|
||||
end
|
||||
function item_mega_fury.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
local point = self:GetCursorPosition()
|
||||
local trees = GridNav:GetAllTreesAroundPoint(
|
||||
point,
|
||||
self:GetSpecialValueFor("tree"),
|
||||
true
|
||||
)
|
||||
if trees and #trees > 0 then
|
||||
self:CutTree(caster, point)
|
||||
end
|
||||
end
|
||||
function item_mega_fury.prototype.CutTree(self, caster, position)
|
||||
GridNav:DestroyTreesAroundPoint(
|
||||
position,
|
||||
self:GetSpecialValueFor("tree"),
|
||||
true
|
||||
)
|
||||
end
|
||||
item_mega_fury = __TS__Decorate(
|
||||
item_mega_fury,
|
||||
item_mega_fury,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_mega_fury"}
|
||||
)
|
||||
____exports.item_mega_fury = item_mega_fury
|
||||
____exports.modifier_mega_fury = __TS__Class()
|
||||
local modifier_mega_fury = ____exports.modifier_mega_fury
|
||||
modifier_mega_fury.name = "modifier_mega_fury"
|
||||
modifier_mega_fury.____file_path = "scripts/vscripts/items/default_items/item_mega_fury.lua"
|
||||
__TS__ClassExtends(modifier_mega_fury, BaseModifier)
|
||||
function modifier_mega_fury.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_mega_fury.prototype.IsDebuff(self)
|
||||
return false
|
||||
end
|
||||
function modifier_mega_fury.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_mega_fury.prototype.CheckState(self)
|
||||
return {[MODIFIER_STATE_CANNOT_MISS] = true}
|
||||
end
|
||||
function modifier_mega_fury.prototype.GetAttributes(self)
|
||||
return MODIFIER_ATTRIBUTE_MULTIPLE
|
||||
end
|
||||
function modifier_mega_fury.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE, MODIFIER_EVENT_ON_ATTACK_LANDED, MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT, MODIFIER_PROPERTY_ATTACK_RANGE_BONUS}
|
||||
end
|
||||
function modifier_mega_fury.prototype.OnAttackLanded(self, event)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
if self:GetParent():IsRangedAttacker() then
|
||||
return
|
||||
end
|
||||
local parent = event.attacker
|
||||
if parent ~= self:GetParent() then
|
||||
return
|
||||
end
|
||||
local ability = self:GetAbility()
|
||||
if not ability then
|
||||
return
|
||||
end
|
||||
local target = event.target
|
||||
local attackDamage = parent:GetAverageTrueAttackDamage(target)
|
||||
local cleaveDamage = attackDamage * (self:GetAbility():GetSpecialValueFor("cleave_damage") / 100)
|
||||
DoCleaveAttack(
|
||||
parent,
|
||||
target,
|
||||
ability,
|
||||
cleaveDamage,
|
||||
self:GetAbility():GetSpecialValueFor("cleave_starting_width"),
|
||||
self:GetAbility():GetSpecialValueFor("cleave_ending_width"),
|
||||
self:GetAbility():GetSpecialValueFor("cleave_distance"),
|
||||
"particles/items_fx/battlefury_cleave.vpcf"
|
||||
)
|
||||
end
|
||||
function modifier_mega_fury.prototype.GetModifierPreAttack_BonusDamage(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_damage")
|
||||
end
|
||||
function modifier_mega_fury.prototype.GetModifierAttackSpeedBonus_Constant(self)
|
||||
return self:GetAbility():GetSpecialValueFor("attack_speed")
|
||||
end
|
||||
function modifier_mega_fury.prototype.GetModifierAttackRangeBonus(self)
|
||||
if self:GetParent():IsRangedAttacker() then
|
||||
return 0
|
||||
end
|
||||
return self:GetAbility():GetSpecialValueFor("attack_range")
|
||||
end
|
||||
modifier_mega_fury = __TS__Decorate(
|
||||
modifier_mega_fury,
|
||||
modifier_mega_fury,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_mega_fury"}
|
||||
)
|
||||
____exports.modifier_mega_fury = modifier_mega_fury
|
||||
return ____exports
|
||||
@@ -0,0 +1,137 @@
|
||||
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 registerAbility = ____dota_ts_adapter.registerAbility
|
||||
local registerModifier = ____dota_ts_adapter.registerModifier
|
||||
local BaseModifier = ____dota_ts_adapter.BaseModifier
|
||||
____exports.item_mega_treads = __TS__Class()
|
||||
local item_mega_treads = ____exports.item_mega_treads
|
||||
item_mega_treads.name = "item_mega_treads"
|
||||
item_mega_treads.____file_path = "scripts/vscripts/items/default_items/item_mega_treads.lua"
|
||||
__TS__ClassExtends(item_mega_treads, BaseItem)
|
||||
function item_mega_treads.prototype.OnSpellStart(self)
|
||||
local caster = self:GetCaster()
|
||||
local modifier = caster:FindModifierByName("modifier_item_mega_treads")
|
||||
if not modifier then
|
||||
return
|
||||
end
|
||||
modifier:SetStackCount((modifier:GetStackCount() + 1) % 3)
|
||||
end
|
||||
function item_mega_treads.prototype.GetAbilityTextureName(self)
|
||||
local iconItem = {strength = "default_items/item_mega_treads_0", agility = "default_items/item_mega_treads_1", intellect = "default_items/item_mega_treads_2"}
|
||||
return iconItem[self.activeStat] or "default_items/item_mega_treads_0"
|
||||
end
|
||||
function item_mega_treads.prototype.GetIntrinsicModifierName(self)
|
||||
return "modifier_item_mega_treads"
|
||||
end
|
||||
item_mega_treads = __TS__Decorate(
|
||||
item_mega_treads,
|
||||
item_mega_treads,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_mega_treads"}
|
||||
)
|
||||
____exports.item_mega_treads = item_mega_treads
|
||||
____exports.modifier_item_mega_treads = __TS__Class()
|
||||
local modifier_item_mega_treads = ____exports.modifier_item_mega_treads
|
||||
modifier_item_mega_treads.name = "modifier_item_mega_treads"
|
||||
modifier_item_mega_treads.____file_path = "scripts/vscripts/items/default_items/item_mega_treads.lua"
|
||||
__TS__ClassExtends(modifier_item_mega_treads, BaseModifier)
|
||||
function modifier_item_mega_treads.prototype.____constructor(self, ...)
|
||||
BaseModifier.prototype.____constructor(self, ...)
|
||||
self.ability = self:GetAbility()
|
||||
self.bonusActiveStat = 0
|
||||
self.bonusMovementSpeed = 0
|
||||
self.bonusOtherStat = 0
|
||||
self.bonusAttackSpeed = 0
|
||||
self.bonusMagicalResistance = 0
|
||||
self.bonusAgilityBaseDamagePct = 0
|
||||
self.bonusIntellectSpellAmp = 0
|
||||
end
|
||||
function modifier_item_mega_treads.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_mega_treads.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_mega_treads.prototype.IsPurgeException(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_mega_treads.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_mega_treads.prototype.GetAttributes(self)
|
||||
return MODIFIER_ATTRIBUTE_MULTIPLE
|
||||
end
|
||||
function modifier_item_mega_treads.prototype.OnStackCountChanged(self, oldCount)
|
||||
local stackCount = self:GetStackCount()
|
||||
local stats = {[0] = "strength", [1] = "intellect", [2] = "agility"}
|
||||
self.activeStat = stats[stackCount] or "agility"
|
||||
self.ability.activeStat = stats[stackCount] or "agility"
|
||||
if IsServer() then
|
||||
local parent = self:GetParent()
|
||||
parent:CalculateStatBonus(true)
|
||||
self.ability:SetSecondaryCharges(stackCount)
|
||||
end
|
||||
end
|
||||
function modifier_item_mega_treads.prototype.OnCreated(self)
|
||||
self.bonusActiveStat = self.ability:GetSpecialValueFor("bonus_stat")
|
||||
self.bonusOtherStat = self.ability:GetSpecialValueFor("bonus_other_stat")
|
||||
self.bonusMovementSpeed = self.ability:GetSpecialValueFor("bonus_movement_speed")
|
||||
self.bonusAttackSpeed = self.ability:GetSpecialValueFor("bonus_attackspeed")
|
||||
self.bonusMagicalResistance = self.ability:GetSpecialValueFor("bonus_magical_resistance")
|
||||
self.bonusIntellectSpellAmp = self.ability:GetSpecialValueFor("spell_amplify")
|
||||
local stats = {[0] = "strength", [1] = "intellect", [2] = "agility"}
|
||||
if IsClient() then
|
||||
return
|
||||
end
|
||||
Timers:CreateTimer(
|
||||
0.03,
|
||||
function()
|
||||
self:SetStackCount(self.ability:GetSecondaryCharges())
|
||||
end
|
||||
)
|
||||
end
|
||||
function modifier_item_mega_treads.prototype.DeclareFunctions(self)
|
||||
return {
|
||||
MODIFIER_PROPERTY_STATS_STRENGTH_BONUS,
|
||||
MODIFIER_PROPERTY_STATS_AGILITY_BONUS,
|
||||
MODIFIER_PROPERTY_STATS_INTELLECT_BONUS,
|
||||
MODIFIER_PROPERTY_MOVESPEED_BONUS_UNIQUE,
|
||||
MODIFIER_PROPERTY_MAGICAL_RESISTANCE_BONUS,
|
||||
MODIFIER_PROPERTY_SPELL_AMPLIFY_PERCENTAGE,
|
||||
MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT
|
||||
}
|
||||
end
|
||||
function modifier_item_mega_treads.prototype.GetModifierMoveSpeedBonus_Special_Boots(self)
|
||||
return self.bonusMovementSpeed
|
||||
end
|
||||
function modifier_item_mega_treads.prototype.GetModifierSpellAmplify_Percentage(self)
|
||||
return self.activeStat == "intellect" and self.bonusIntellectSpellAmp or 0
|
||||
end
|
||||
function modifier_item_mega_treads.prototype.GetModifierMagicalResistanceBonus(self)
|
||||
return self.activeStat == "strength" and self.bonusMagicalResistance or 0
|
||||
end
|
||||
function modifier_item_mega_treads.prototype.GetModifierAttackSpeedBonus_Constant(self)
|
||||
return self.activeStat == "agility" and self.bonusAttackSpeed or 0
|
||||
end
|
||||
function modifier_item_mega_treads.prototype.GetModifierBonusStats_Strength(self)
|
||||
return self.activeStat == "strength" and self.bonusActiveStat or self.bonusOtherStat
|
||||
end
|
||||
function modifier_item_mega_treads.prototype.GetModifierBonusStats_Agility(self)
|
||||
return self.activeStat == "agility" and self.bonusActiveStat or self.bonusOtherStat
|
||||
end
|
||||
function modifier_item_mega_treads.prototype.GetModifierBonusStats_Intellect(self)
|
||||
return self.activeStat == "intellect" and self.bonusActiveStat or self.bonusOtherStat
|
||||
end
|
||||
modifier_item_mega_treads = __TS__Decorate(
|
||||
modifier_item_mega_treads,
|
||||
modifier_item_mega_treads,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_mega_treads"}
|
||||
)
|
||||
____exports.modifier_item_mega_treads = modifier_item_mega_treads
|
||||
return ____exports
|
||||
@@ -0,0 +1,110 @@
|
||||
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
|
||||
____exports.item_mini_bfury = __TS__Class()
|
||||
local item_mini_bfury = ____exports.item_mini_bfury
|
||||
item_mini_bfury.name = "item_mini_bfury"
|
||||
item_mini_bfury.____file_path = "scripts/vscripts/items/default_items/item_mini_bfury.lua"
|
||||
__TS__ClassExtends(item_mini_bfury, BaseItem)
|
||||
function item_mini_bfury.prototype.GetIntrinsicModifierName(self)
|
||||
return "modifier_mini_bfury"
|
||||
end
|
||||
function item_mini_bfury.prototype.GetAOERadius(self)
|
||||
return self:GetSpecialValueFor("tree")
|
||||
end
|
||||
function item_mini_bfury.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
local point = self:GetCursorPosition()
|
||||
local trees = GridNav:GetAllTreesAroundPoint(
|
||||
point,
|
||||
self:GetSpecialValueFor("tree"),
|
||||
true
|
||||
)
|
||||
if trees and #trees > 0 then
|
||||
self:CutTree(caster, point)
|
||||
end
|
||||
end
|
||||
function item_mini_bfury.prototype.CutTree(self, caster, position)
|
||||
GridNav:DestroyTreesAroundPoint(
|
||||
position,
|
||||
self:GetSpecialValueFor("tree"),
|
||||
true
|
||||
)
|
||||
end
|
||||
item_mini_bfury = __TS__Decorate(
|
||||
item_mini_bfury,
|
||||
item_mini_bfury,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_mini_bfury"}
|
||||
)
|
||||
____exports.item_mini_bfury = item_mini_bfury
|
||||
____exports.modifier_mini_bfury = __TS__Class()
|
||||
local modifier_mini_bfury = ____exports.modifier_mini_bfury
|
||||
modifier_mini_bfury.name = "modifier_mini_bfury"
|
||||
modifier_mini_bfury.____file_path = "scripts/vscripts/items/default_items/item_mini_bfury.lua"
|
||||
__TS__ClassExtends(modifier_mini_bfury, BaseModifier)
|
||||
function modifier_mini_bfury.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_mini_bfury.prototype.IsDebuff(self)
|
||||
return false
|
||||
end
|
||||
function modifier_mini_bfury.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_mini_bfury.prototype.GetAttributes(self)
|
||||
return MODIFIER_ATTRIBUTE_MULTIPLE
|
||||
end
|
||||
function modifier_mini_bfury.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE, MODIFIER_EVENT_ON_ATTACK_LANDED}
|
||||
end
|
||||
function modifier_mini_bfury.prototype.OnAttackLanded(self, event)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
if self:GetParent():IsRangedAttacker() then
|
||||
return
|
||||
end
|
||||
local parent = event.attacker
|
||||
if parent ~= self:GetParent() then
|
||||
return
|
||||
end
|
||||
local ability = self:GetAbility()
|
||||
if not ability then
|
||||
return
|
||||
end
|
||||
local target = event.target
|
||||
local attackDamage = parent:GetAverageTrueAttackDamage(target)
|
||||
local cleaveDamage = attackDamage * (self:GetAbility():GetSpecialValueFor("cleave_damage") / 100)
|
||||
DoCleaveAttack(
|
||||
parent,
|
||||
target,
|
||||
ability,
|
||||
cleaveDamage,
|
||||
self:GetAbility():GetSpecialValueFor("cleave_starting_width"),
|
||||
self:GetAbility():GetSpecialValueFor("cleave_ending_width"),
|
||||
self:GetAbility():GetSpecialValueFor("cleave_distance"),
|
||||
"particles/items_fx/battlefury_cleave.vpcf"
|
||||
)
|
||||
end
|
||||
function modifier_mini_bfury.prototype.GetModifierPreAttack_BonusDamage(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_damage")
|
||||
end
|
||||
modifier_mini_bfury = __TS__Decorate(
|
||||
modifier_mini_bfury,
|
||||
modifier_mini_bfury,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_mini_bfury"}
|
||||
)
|
||||
____exports.modifier_mini_bfury = modifier_mini_bfury
|
||||
return ____exports
|
||||
@@ -0,0 +1,337 @@
|
||||
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 ____incoming_damage_reduction_combine = require("utils.incoming_damage_reduction_combine")
|
||||
local removeIncomingDamageReductionSource = ____incoming_damage_reduction_combine.removeIncomingDamageReductionSource
|
||||
local setIncomingDamageReductionSource = ____incoming_damage_reduction_combine.setIncomingDamageReductionSource
|
||||
local MJOLNIR_ACTIVE_INCOMING_SOURCE = "modifier_item_mjolnir_active"
|
||||
____exports.item_mjolnir_custom = __TS__Class()
|
||||
local item_mjolnir_custom = ____exports.item_mjolnir_custom
|
||||
item_mjolnir_custom.name = "item_mjolnir_custom"
|
||||
item_mjolnir_custom.____file_path = "scripts/vscripts/items/default_items/item_mjolnir_custom.lua"
|
||||
__TS__ClassExtends(item_mjolnir_custom, BaseItem)
|
||||
function item_mjolnir_custom.prototype.GetIntrinsicModifierName(self)
|
||||
return "modifier_item_mjolnir_custom"
|
||||
end
|
||||
function item_mjolnir_custom.prototype.OnSpellStart(self)
|
||||
local target = self:GetCursorTarget()
|
||||
if not target then
|
||||
return
|
||||
end
|
||||
target:EmitSound("DOTA_Item.Mjollnir.Activate")
|
||||
target:AddNewModifier(
|
||||
self:GetCaster(),
|
||||
self,
|
||||
"modifier_item_mjolnir_active",
|
||||
{duration = self:GetSpecialValueFor("duration")}
|
||||
)
|
||||
end
|
||||
item_mjolnir_custom = __TS__Decorate(
|
||||
item_mjolnir_custom,
|
||||
item_mjolnir_custom,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_mjolnir_custom"}
|
||||
)
|
||||
____exports.item_mjolnir_custom = item_mjolnir_custom
|
||||
____exports.modifier_item_mjolnir_active = __TS__Class()
|
||||
local modifier_item_mjolnir_active = ____exports.modifier_item_mjolnir_active
|
||||
modifier_item_mjolnir_active.name = "modifier_item_mjolnir_active"
|
||||
modifier_item_mjolnir_active.____file_path = "scripts/vscripts/items/default_items/item_mjolnir_custom.lua"
|
||||
__TS__ClassExtends(modifier_item_mjolnir_active, BaseModifier)
|
||||
function modifier_item_mjolnir_active.prototype.GetEffectName(self)
|
||||
return "particles/econ/events/ti6/mjollnir_shield_ti6.vpcf"
|
||||
end
|
||||
function modifier_item_mjolnir_active.prototype.GetEffectAttachType(self)
|
||||
return PATTACH_ABSORIGIN_FOLLOW
|
||||
end
|
||||
function modifier_item_mjolnir_active.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_DAMAGEOUTGOING_PERCENTAGE}
|
||||
end
|
||||
function modifier_item_mjolnir_active.prototype.OnCreated(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
setIncomingDamageReductionSource(
|
||||
nil,
|
||||
self:GetParent(),
|
||||
MJOLNIR_ACTIVE_INCOMING_SOURCE,
|
||||
function()
|
||||
local ability = self:GetAbility()
|
||||
if not ability then
|
||||
return 0
|
||||
end
|
||||
return math.max(
|
||||
0,
|
||||
ability:GetSpecialValueFor("incoming_pct")
|
||||
)
|
||||
end
|
||||
)
|
||||
end
|
||||
function modifier_item_mjolnir_active.prototype.OnDestroy(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
removeIncomingDamageReductionSource(
|
||||
nil,
|
||||
self:GetParent(),
|
||||
MJOLNIR_ACTIVE_INCOMING_SOURCE
|
||||
)
|
||||
end
|
||||
function modifier_item_mjolnir_active.prototype.GetModifierDamageOutgoing_Percentage(self, event)
|
||||
return self:GetAbility():GetSpecialValueFor("outgoing_pct")
|
||||
end
|
||||
function modifier_item_mjolnir_active.prototype.GetTexture(self)
|
||||
return "item_mjollnir"
|
||||
end
|
||||
modifier_item_mjolnir_active = __TS__Decorate(
|
||||
modifier_item_mjolnir_active,
|
||||
modifier_item_mjolnir_active,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_mjolnir_active"}
|
||||
)
|
||||
____exports.modifier_item_mjolnir_active = modifier_item_mjolnir_active
|
||||
____exports.modifier_item_mjolnir_custom = __TS__Class()
|
||||
local modifier_item_mjolnir_custom = ____exports.modifier_item_mjolnir_custom
|
||||
modifier_item_mjolnir_custom.name = "modifier_item_mjolnir_custom"
|
||||
modifier_item_mjolnir_custom.____file_path = "scripts/vscripts/items/default_items/item_mjolnir_custom.lua"
|
||||
__TS__ClassExtends(modifier_item_mjolnir_custom, BaseModifier)
|
||||
function modifier_item_mjolnir_custom.prototype.____constructor(self, ...)
|
||||
BaseModifier.prototype.____constructor(self, ...)
|
||||
self.bonus_damage = 0
|
||||
self.bonus_attack_speed = 0
|
||||
self.chain_chance = 0
|
||||
self.chain_cooldown = 0
|
||||
self.bChainCooldown = false
|
||||
end
|
||||
function modifier_item_mjolnir_custom.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_mjolnir_custom.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_mjolnir_custom.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_mjolnir_custom.prototype.GetAttributes(self)
|
||||
return MODIFIER_ATTRIBUTE_MULTIPLE
|
||||
end
|
||||
function modifier_item_mjolnir_custom.prototype.OnCreated(self, params)
|
||||
if IsServer() then
|
||||
if not self:GetAbility() then
|
||||
self:Destroy()
|
||||
return
|
||||
end
|
||||
end
|
||||
local ability = self:GetAbility()
|
||||
if ability then
|
||||
self.bonus_damage = ability:GetSpecialValueFor("bonus_damage")
|
||||
self.bonus_attack_speed = ability:GetSpecialValueFor("bonus_attack_speed")
|
||||
self.chain_chance = ability:GetSpecialValueFor("chain_chance")
|
||||
self.chain_cooldown = ability:GetSpecialValueFor("chain_cooldown")
|
||||
else
|
||||
self.bonus_damage = 0
|
||||
self.bonus_attack_speed = 0
|
||||
self.chain_chance = 0
|
||||
self.chain_cooldown = 0
|
||||
end
|
||||
self.bChainCooldown = false
|
||||
end
|
||||
function modifier_item_mjolnir_custom.prototype.OnIntervalThink(self)
|
||||
self.bChainCooldown = false
|
||||
self:StartIntervalThink(-1)
|
||||
end
|
||||
function modifier_item_mjolnir_custom.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE, MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT, MODIFIER_EVENT_ON_ATTACK_LANDED, MODIFIER_EVENT_ON_ORDER}
|
||||
end
|
||||
function modifier_item_mjolnir_custom.prototype.GetModifierPreAttack_BonusDamage(self)
|
||||
return self.bonus_damage
|
||||
end
|
||||
function modifier_item_mjolnir_custom.prototype.GetModifierAttackSpeedBonus_Constant(self)
|
||||
return self.bonus_attack_speed
|
||||
end
|
||||
function modifier_item_mjolnir_custom.prototype.OnAttackLanded(self, event)
|
||||
if IsServer() and event.attacker == self:GetParent() and self:GetParent():IsAlive() and not self.bChainCooldown and not self:GetParent():IsIllusion() and not event.target:IsMagicImmune() and not event.target:IsBuilding() and not event.target:IsOther() and self:GetParent():GetTeamNumber() ~= event.target:GetTeamNumber() and RollPseudoRandomPercentage(
|
||||
self.chain_chance,
|
||||
4,
|
||||
self:GetParent()
|
||||
) then
|
||||
self:GetParent():EmitSound("Item.Maelstrom.Chain_Lightning")
|
||||
self:GetParent():AddNewModifier(
|
||||
self:GetCaster(),
|
||||
self:GetAbility(),
|
||||
"modifier_chain_lightning",
|
||||
{starting_unit_entindex = event.target:entindex()}
|
||||
)
|
||||
self.bChainCooldown = true
|
||||
self:StartIntervalThink(self.chain_cooldown)
|
||||
end
|
||||
end
|
||||
modifier_item_mjolnir_custom = __TS__Decorate(
|
||||
modifier_item_mjolnir_custom,
|
||||
modifier_item_mjolnir_custom,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_mjolnir_custom"}
|
||||
)
|
||||
____exports.modifier_item_mjolnir_custom = modifier_item_mjolnir_custom
|
||||
____exports.modifier_chain_lightning = __TS__Class()
|
||||
local modifier_chain_lightning = ____exports.modifier_chain_lightning
|
||||
modifier_chain_lightning.name = "modifier_chain_lightning"
|
||||
modifier_chain_lightning.____file_path = "scripts/vscripts/items/default_items/item_mjolnir_custom.lua"
|
||||
__TS__ClassExtends(modifier_chain_lightning, BaseModifier)
|
||||
function modifier_chain_lightning.prototype.____constructor(self, ...)
|
||||
BaseModifier.prototype.____constructor(self, ...)
|
||||
self.bonus_damage = 0
|
||||
self.chain_damage = 0
|
||||
self.chain_damage_self = 0
|
||||
self.chain_strikes = 0
|
||||
self.chain_radius = 0
|
||||
self.chain_delay = 0
|
||||
self.units_affected = {}
|
||||
self.unit_counter = 0
|
||||
self.zapped = false
|
||||
end
|
||||
function modifier_chain_lightning.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_chain_lightning.prototype.IsDebuff(self)
|
||||
return false
|
||||
end
|
||||
function modifier_chain_lightning.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_chain_lightning.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_chain_lightning.prototype.GetAttributes(self)
|
||||
return MODIFIER_ATTRIBUTE_MULTIPLE
|
||||
end
|
||||
function modifier_chain_lightning.prototype.OnCreated(self, params)
|
||||
if IsServer() then
|
||||
if not self:GetAbility() then
|
||||
self:Destroy()
|
||||
return
|
||||
end
|
||||
end
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local ability = self:GetAbility()
|
||||
if ability then
|
||||
self.bonus_damage = ability:GetSpecialValueFor("bonus_damage")
|
||||
self.chain_damage = ability:GetSpecialValueFor("chain_damage")
|
||||
self.chain_damage_self = ability:GetSpecialValueFor("chain_damage_self")
|
||||
self.chain_strikes = ability:GetSpecialValueFor("chain_strikes")
|
||||
self.chain_radius = ability:GetSpecialValueFor("chain_radius")
|
||||
self.chain_delay = ability:GetSpecialValueFor("chain_delay")
|
||||
end
|
||||
self.starting_unit_entindex = params.starting_unit_entindex
|
||||
if self.starting_unit_entindex then
|
||||
local unit = EntIndexToHScript(self.starting_unit_entindex)
|
||||
if unit and unit:IsBaseNPC() then
|
||||
self.current_unit = unit
|
||||
else
|
||||
self:Destroy()
|
||||
return
|
||||
end
|
||||
else
|
||||
self:Destroy()
|
||||
return
|
||||
end
|
||||
self.units_affected = {}
|
||||
self.unit_counter = 0
|
||||
self:OnIntervalThink()
|
||||
self:StartIntervalThink(self.chain_delay)
|
||||
end
|
||||
function modifier_chain_lightning.prototype.OnIntervalThink(self)
|
||||
self.zapped = false
|
||||
local caster = self:GetCaster()
|
||||
if not self.current_unit or not caster then
|
||||
return
|
||||
end
|
||||
local enemies = FindUnitsInRadius(
|
||||
caster:GetTeamNumber(),
|
||||
self.current_unit:GetAbsOrigin(),
|
||||
nil,
|
||||
self.chain_radius,
|
||||
DOTA_UNIT_TARGET_TEAM_ENEMY,
|
||||
DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC,
|
||||
DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE + DOTA_UNIT_TARGET_FLAG_NO_INVIS,
|
||||
FIND_CLOSEST,
|
||||
false
|
||||
)
|
||||
for ____, enemy in ipairs(enemies) do
|
||||
if not self.units_affected[enemy:entindex()] then
|
||||
enemy:EmitSound("Item.Maelstrom.Chain_Lightning.Jump")
|
||||
local zap_particle = ParticleManager:CreateParticle("particles/items_fx/chain_lightning.vpcf", PATTACH_ABSORIGIN_FOLLOW, self.current_unit)
|
||||
if self.unit_counter == 0 then
|
||||
ParticleManager:SetParticleControlEnt(
|
||||
zap_particle,
|
||||
0,
|
||||
self:GetParent(),
|
||||
PATTACH_POINT_FOLLOW,
|
||||
"attach_hitloc",
|
||||
self:GetParent():GetAbsOrigin(),
|
||||
true
|
||||
)
|
||||
else
|
||||
ParticleManager:SetParticleControlEnt(
|
||||
zap_particle,
|
||||
0,
|
||||
self.current_unit,
|
||||
PATTACH_POINT_FOLLOW,
|
||||
"attach_hitloc",
|
||||
self.current_unit:GetAbsOrigin(),
|
||||
true
|
||||
)
|
||||
end
|
||||
ParticleManager:SetParticleControlEnt(
|
||||
zap_particle,
|
||||
1,
|
||||
enemy,
|
||||
PATTACH_POINT_FOLLOW,
|
||||
"attach_hitloc",
|
||||
enemy:GetAbsOrigin(),
|
||||
true
|
||||
)
|
||||
ParticleManager:SetParticleControl(
|
||||
zap_particle,
|
||||
2,
|
||||
Vector(1, 1, 1)
|
||||
)
|
||||
ParticleManager:ReleaseParticleIndex(zap_particle)
|
||||
self.unit_counter = self.unit_counter + 1
|
||||
self.current_unit = enemy
|
||||
self.units_affected[self.current_unit:entindex()] = true
|
||||
self.zapped = true
|
||||
local damage = caster:GetAverageTrueAttackDamage(caster) * (self.chain_damage_self / 100) + self.chain_damage
|
||||
ApplyDamage({
|
||||
victim = enemy,
|
||||
damage = damage,
|
||||
damage_type = DAMAGE_TYPE_MAGICAL,
|
||||
damage_flags = DOTA_DAMAGE_FLAG_NONE,
|
||||
attacker = caster,
|
||||
ability = self:GetAbility()
|
||||
})
|
||||
break
|
||||
end
|
||||
end
|
||||
if self.unit_counter >= self.chain_strikes and self.chain_strikes > 0 or not self.zapped then
|
||||
self:StartIntervalThink(-1)
|
||||
self:Destroy()
|
||||
end
|
||||
end
|
||||
modifier_chain_lightning = __TS__Decorate(
|
||||
modifier_chain_lightning,
|
||||
modifier_chain_lightning,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_chain_lightning"}
|
||||
)
|
||||
____exports.modifier_chain_lightning = modifier_chain_lightning
|
||||
return ____exports
|
||||
@@ -0,0 +1,107 @@
|
||||
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 registerAbility = ____dota_ts_adapter.registerAbility
|
||||
local registerModifier = ____dota_ts_adapter.registerModifier
|
||||
local BaseModifier = ____dota_ts_adapter.BaseModifier
|
||||
local ____modifier_general_fired = require("abilities.modifiers.modifier_general_fired")
|
||||
local modifier_general_fired = ____modifier_general_fired.modifier_general_fired
|
||||
____exports.item_orb_of_fire = __TS__Class()
|
||||
local item_orb_of_fire = ____exports.item_orb_of_fire
|
||||
item_orb_of_fire.name = "item_orb_of_fire"
|
||||
item_orb_of_fire.____file_path = "scripts/vscripts/items/default_items/item_orb_of_fire copy.lua"
|
||||
__TS__ClassExtends(item_orb_of_fire, BaseItem)
|
||||
function item_orb_of_fire.prototype.GetIntrinsicModifierName(self)
|
||||
return "modifier_item_orb_of_fire"
|
||||
end
|
||||
function item_orb_of_fire.prototype.GetAOERadius(self)
|
||||
return self:GetSpecialValueFor("radius")
|
||||
end
|
||||
item_orb_of_fire = __TS__Decorate(
|
||||
item_orb_of_fire,
|
||||
item_orb_of_fire,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_orb_of_fire"}
|
||||
)
|
||||
____exports.item_orb_of_fire = item_orb_of_fire
|
||||
____exports.modifier_item_orb_of_fire = __TS__Class()
|
||||
local modifier_item_orb_of_fire = ____exports.modifier_item_orb_of_fire
|
||||
modifier_item_orb_of_fire.name = "modifier_item_orb_of_fire"
|
||||
modifier_item_orb_of_fire.____file_path = "scripts/vscripts/items/default_items/item_orb_of_fire copy.lua"
|
||||
__TS__ClassExtends(modifier_item_orb_of_fire, BaseModifier)
|
||||
function modifier_item_orb_of_fire.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_orb_of_fire.prototype.IsDebuff(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_orb_of_fire.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_orb_of_fire.prototype.OnCreated(self, params)
|
||||
self:StartIntervalThink(3)
|
||||
end
|
||||
function modifier_item_orb_of_fire.prototype.GetTexture(self)
|
||||
return "default_items/orb_of_fire"
|
||||
end
|
||||
function modifier_item_orb_of_fire.prototype.OnIntervalThink(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
if not self:GetParent():IsAlive() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
local radius = self:GetAbility():GetSpecialValueFor("radius")
|
||||
local damage = self:GetAbility():GetSpecialValueFor("damage")
|
||||
local enemies = FindUnitsInRadius(
|
||||
caster:GetTeamNumber(),
|
||||
caster:GetAbsOrigin(),
|
||||
nil,
|
||||
radius,
|
||||
DOTA_UNIT_TARGET_TEAM_ENEMY,
|
||||
bit.bor(DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_BASIC),
|
||||
DOTA_UNIT_TARGET_FLAG_NONE,
|
||||
FIND_ANY_ORDER,
|
||||
false
|
||||
)
|
||||
for ____, enemy in ipairs(enemies) do
|
||||
local damage_table = {
|
||||
victim = enemy,
|
||||
attacker = caster,
|
||||
damage = damage,
|
||||
damage_type = DAMAGE_TYPE_MAGICAL,
|
||||
ability = self:GetAbility(),
|
||||
damage_flags = DOTA_DAMAGE_FLAG_NO_SPELL_AMPLIFICATION
|
||||
}
|
||||
local modifier = enemy:AddNewModifier(
|
||||
self:GetCaster(),
|
||||
self:GetAbility(),
|
||||
modifier_general_fired.name,
|
||||
{}
|
||||
)
|
||||
if modifier then
|
||||
local stacksPerLevel = self:GetAbility():GetSpecialValueFor("fire_stack")
|
||||
do
|
||||
local i = 0
|
||||
while i < stacksPerLevel do
|
||||
modifier:IncrementStackCount()
|
||||
i = i + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
ApplyDamage(damage_table)
|
||||
end
|
||||
end
|
||||
modifier_item_orb_of_fire = __TS__Decorate(
|
||||
modifier_item_orb_of_fire,
|
||||
modifier_item_orb_of_fire,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_orb_of_fire"}
|
||||
)
|
||||
____exports.modifier_item_orb_of_fire = modifier_item_orb_of_fire
|
||||
return ____exports
|
||||
@@ -0,0 +1,107 @@
|
||||
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 registerAbility = ____dota_ts_adapter.registerAbility
|
||||
local registerModifier = ____dota_ts_adapter.registerModifier
|
||||
local BaseModifier = ____dota_ts_adapter.BaseModifier
|
||||
local ____modifier_general_fired = require("abilities.modifiers.modifier_general_fired")
|
||||
local modifier_general_fired = ____modifier_general_fired.modifier_general_fired
|
||||
____exports.item_orb_of_fire = __TS__Class()
|
||||
local item_orb_of_fire = ____exports.item_orb_of_fire
|
||||
item_orb_of_fire.name = "item_orb_of_fire"
|
||||
item_orb_of_fire.____file_path = "scripts/vscripts/items/default_items/item_orb_of_fire.lua"
|
||||
__TS__ClassExtends(item_orb_of_fire, BaseItem)
|
||||
function item_orb_of_fire.prototype.GetIntrinsicModifierName(self)
|
||||
return "modifier_item_orb_of_fire"
|
||||
end
|
||||
function item_orb_of_fire.prototype.GetAOERadius(self)
|
||||
return self:GetSpecialValueFor("radius")
|
||||
end
|
||||
item_orb_of_fire = __TS__Decorate(
|
||||
item_orb_of_fire,
|
||||
item_orb_of_fire,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_orb_of_fire"}
|
||||
)
|
||||
____exports.item_orb_of_fire = item_orb_of_fire
|
||||
____exports.modifier_item_orb_of_fire = __TS__Class()
|
||||
local modifier_item_orb_of_fire = ____exports.modifier_item_orb_of_fire
|
||||
modifier_item_orb_of_fire.name = "modifier_item_orb_of_fire"
|
||||
modifier_item_orb_of_fire.____file_path = "scripts/vscripts/items/default_items/item_orb_of_fire.lua"
|
||||
__TS__ClassExtends(modifier_item_orb_of_fire, BaseModifier)
|
||||
function modifier_item_orb_of_fire.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_orb_of_fire.prototype.IsDebuff(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_orb_of_fire.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_orb_of_fire.prototype.OnCreated(self, params)
|
||||
self:StartIntervalThink(3)
|
||||
end
|
||||
function modifier_item_orb_of_fire.prototype.GetTexture(self)
|
||||
return "default_items/orb_of_fire"
|
||||
end
|
||||
function modifier_item_orb_of_fire.prototype.OnIntervalThink(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
if not self:GetParent():IsAlive() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
local radius = self:GetAbility():GetSpecialValueFor("radius")
|
||||
local damage = self:GetAbility():GetSpecialValueFor("damage")
|
||||
local enemies = FindUnitsInRadius(
|
||||
caster:GetTeamNumber(),
|
||||
caster:GetAbsOrigin(),
|
||||
nil,
|
||||
radius,
|
||||
DOTA_UNIT_TARGET_TEAM_ENEMY,
|
||||
bit.bor(DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_BASIC),
|
||||
DOTA_UNIT_TARGET_FLAG_NONE,
|
||||
FIND_ANY_ORDER,
|
||||
false
|
||||
)
|
||||
for ____, enemy in ipairs(enemies) do
|
||||
local damage_table = {
|
||||
victim = enemy,
|
||||
attacker = caster,
|
||||
damage = damage,
|
||||
damage_type = DAMAGE_TYPE_MAGICAL,
|
||||
ability = self:GetAbility(),
|
||||
damage_flags = DOTA_DAMAGE_FLAG_NO_SPELL_AMPLIFICATION
|
||||
}
|
||||
local modifier = enemy:AddNewModifier(
|
||||
self:GetCaster(),
|
||||
self:GetAbility(),
|
||||
modifier_general_fired.name,
|
||||
{}
|
||||
)
|
||||
if modifier then
|
||||
local stacksPerLevel = self:GetAbility():GetSpecialValueFor("fire_stack")
|
||||
do
|
||||
local i = 0
|
||||
while i < stacksPerLevel do
|
||||
modifier:IncrementStackCount()
|
||||
i = i + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
ApplyDamage(damage_table)
|
||||
end
|
||||
end
|
||||
modifier_item_orb_of_fire = __TS__Decorate(
|
||||
modifier_item_orb_of_fire,
|
||||
modifier_item_orb_of_fire,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_orb_of_fire"}
|
||||
)
|
||||
____exports.modifier_item_orb_of_fire = modifier_item_orb_of_fire
|
||||
return ____exports
|
||||
@@ -0,0 +1,75 @@
|
||||
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 ____luck = require("utils.luck")
|
||||
local rollLuckChance = ____luck.rollLuckChance
|
||||
--- Бедный щит: броня и шанс заблокировать физический урон от атак; шанс для героев с Luck.
|
||||
____exports.item_poor_shield = __TS__Class()
|
||||
local item_poor_shield = ____exports.item_poor_shield
|
||||
item_poor_shield.name = "item_poor_shield"
|
||||
item_poor_shield.____file_path = "scripts/vscripts/items/default_items/item_poor_shield.lua"
|
||||
__TS__ClassExtends(item_poor_shield, BaseItem)
|
||||
function item_poor_shield.prototype.GetIntrinsicModifierName(self)
|
||||
return ____exports.modifier_item_poor_shield.name
|
||||
end
|
||||
item_poor_shield = __TS__Decorate(
|
||||
item_poor_shield,
|
||||
item_poor_shield,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_poor_shield"}
|
||||
)
|
||||
____exports.item_poor_shield = item_poor_shield
|
||||
____exports.modifier_item_poor_shield = __TS__Class()
|
||||
local modifier_item_poor_shield = ____exports.modifier_item_poor_shield
|
||||
modifier_item_poor_shield.name = "modifier_item_poor_shield"
|
||||
modifier_item_poor_shield.____file_path = "scripts/vscripts/items/default_items/item_poor_shield.lua"
|
||||
__TS__ClassExtends(modifier_item_poor_shield, BaseModifier)
|
||||
function modifier_item_poor_shield.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_poor_shield.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_poor_shield.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_PHYSICAL_CONSTANT_BLOCK, MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS}
|
||||
end
|
||||
function modifier_item_poor_shield.prototype.GetModifierPhysicalArmorBonus(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_physical_armor")
|
||||
end
|
||||
function modifier_item_poor_shield.prototype.GetModifierPhysical_ConstantBlock(self)
|
||||
if not IsServer() then
|
||||
return 0
|
||||
end
|
||||
local ability = self:GetAbility()
|
||||
if not ability then
|
||||
return 0
|
||||
end
|
||||
local chancePct = ability:GetSpecialValueFor("damage_block_chance")
|
||||
local parent = self:GetParent()
|
||||
local ____parent_IsRealHero_result_0
|
||||
if parent:IsRealHero() then
|
||||
____parent_IsRealHero_result_0 = rollLuckChance(nil, parent, chancePct / 100)
|
||||
else
|
||||
____parent_IsRealHero_result_0 = RollPercentage(chancePct)
|
||||
end
|
||||
local blocked = ____parent_IsRealHero_result_0
|
||||
if blocked then
|
||||
return self:GetCaster():IsRangedAttacker() and ability:GetSpecialValueFor("damage_block") * 0.5 or ability:GetSpecialValueFor("damage_block")
|
||||
end
|
||||
return 0
|
||||
end
|
||||
modifier_item_poor_shield = __TS__Decorate(
|
||||
modifier_item_poor_shield,
|
||||
modifier_item_poor_shield,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_poor_shield"}
|
||||
)
|
||||
____exports.modifier_item_poor_shield = modifier_item_poor_shield
|
||||
return ____exports
|
||||
@@ -0,0 +1,155 @@
|
||||
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 registerAbility = ____dota_ts_adapter.registerAbility
|
||||
local registerModifier = ____dota_ts_adapter.registerModifier
|
||||
local BaseModifier = ____dota_ts_adapter.BaseModifier
|
||||
local ____modifier_general_fired = require("abilities.modifiers.modifier_general_fired")
|
||||
local modifier_general_fired = ____modifier_general_fired.modifier_general_fired
|
||||
local RADIANCE_PARTICLE = "particles/items2_fx/radiance_owner.vpcf"
|
||||
--- Суммарный регген HP/сек владельца (с предметами и баффами).
|
||||
local function getOwnerHealthRegenPerSecond(self, unit)
|
||||
local u = unit
|
||||
if u.GetHealthRegen ~= nil and type(u.GetHealthRegen) == "function" then
|
||||
return math.max(
|
||||
0,
|
||||
u:GetHealthRegen()
|
||||
)
|
||||
end
|
||||
return math.max(
|
||||
0,
|
||||
unit:GetBaseHealthRegen()
|
||||
)
|
||||
end
|
||||
____exports.item_radiance_custom = __TS__Class()
|
||||
local item_radiance_custom = ____exports.item_radiance_custom
|
||||
item_radiance_custom.name = "item_radiance_custom"
|
||||
item_radiance_custom.____file_path = "scripts/vscripts/items/default_items/item_radiance_custom.lua"
|
||||
__TS__ClassExtends(item_radiance_custom, BaseItem)
|
||||
function item_radiance_custom.prototype.Precache(self, context)
|
||||
PrecacheResource("particle", RADIANCE_PARTICLE, context)
|
||||
end
|
||||
function item_radiance_custom.prototype.GetIntrinsicModifierName(self)
|
||||
return ____exports.modifier_item_radiance_custom.name
|
||||
end
|
||||
function item_radiance_custom.prototype.GetAOERadius(self)
|
||||
return self:GetSpecialValueFor("radius")
|
||||
end
|
||||
item_radiance_custom = __TS__Decorate(
|
||||
item_radiance_custom,
|
||||
item_radiance_custom,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_radiance_custom"}
|
||||
)
|
||||
____exports.item_radiance_custom = item_radiance_custom
|
||||
____exports.modifier_item_radiance_custom = __TS__Class()
|
||||
local modifier_item_radiance_custom = ____exports.modifier_item_radiance_custom
|
||||
modifier_item_radiance_custom.name = "modifier_item_radiance_custom"
|
||||
modifier_item_radiance_custom.____file_path = "scripts/vscripts/items/default_items/item_radiance_custom.lua"
|
||||
__TS__ClassExtends(modifier_item_radiance_custom, BaseModifier)
|
||||
function modifier_item_radiance_custom.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_radiance_custom.prototype.IsDebuff(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_radiance_custom.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_radiance_custom.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_radiance_custom.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE, MODIFIER_PROPERTY_EVASION_CONSTANT}
|
||||
end
|
||||
function modifier_item_radiance_custom.prototype.GetModifierPreAttack_BonusDamage(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_damage")
|
||||
end
|
||||
function modifier_item_radiance_custom.prototype.GetModifierEvasion_Constant(self)
|
||||
return self:GetAbility():GetSpecialValueFor("evasion")
|
||||
end
|
||||
function modifier_item_radiance_custom.prototype.OnCreated(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local tickInterval = self:GetAbility():GetSpecialValueFor("tick_interval")
|
||||
self:StartIntervalThink(tickInterval)
|
||||
self.particleId = ParticleManager:CreateParticle(
|
||||
RADIANCE_PARTICLE,
|
||||
PATTACH_ABSORIGIN_FOLLOW,
|
||||
self:GetParent()
|
||||
)
|
||||
ParticleManager:SetParticleShouldCheckFoW(self.particleId, false)
|
||||
end
|
||||
function modifier_item_radiance_custom.prototype.OnDestroy(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
if self.particleId ~= nil then
|
||||
ParticleManager:DestroyParticle(self.particleId, false)
|
||||
ParticleManager:ReleaseParticleIndex(self.particleId)
|
||||
self.particleId = nil
|
||||
end
|
||||
end
|
||||
function modifier_item_radiance_custom.prototype.OnIntervalThink(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
if not self:GetParent():IsAlive() then
|
||||
return
|
||||
end
|
||||
local ____opt_0 = self:GetCaster()
|
||||
if ____opt_0 and ____opt_0:IsIllusion() then
|
||||
return
|
||||
end
|
||||
local ability = self:GetAbility()
|
||||
local caster = self:GetCaster()
|
||||
local radius = ability:GetSpecialValueFor("radius")
|
||||
local tickInterval = ability:GetSpecialValueFor("tick_interval")
|
||||
local healthRegen = getOwnerHealthRegenPerSecond(nil, caster)
|
||||
local damage = (ability:GetSpecialValueFor("damage") + caster:GetMaxHealth() * (ability:GetSpecialValueFor("health_damage_pct") / 100) + healthRegen * ability:GetSpecialValueFor("health_regen_damage")) * tickInterval
|
||||
local enemies = FindUnitsInRadius(
|
||||
caster:GetTeamNumber(),
|
||||
caster:GetAbsOrigin(),
|
||||
nil,
|
||||
radius,
|
||||
DOTA_UNIT_TARGET_TEAM_ENEMY,
|
||||
bit.bor(DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_BASIC),
|
||||
DOTA_UNIT_TARGET_FLAG_NONE,
|
||||
FIND_ANY_ORDER,
|
||||
false
|
||||
)
|
||||
local stacksPerTick = ability:GetSpecialValueFor("fire_stack")
|
||||
for ____, enemy in ipairs(enemies) do
|
||||
local burnModifier = enemy:AddNewModifier(caster, ability, modifier_general_fired.name, {})
|
||||
if burnModifier then
|
||||
do
|
||||
local i = 0
|
||||
while i < stacksPerTick do
|
||||
burnModifier:IncrementStackCount()
|
||||
i = i + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
ApplyDamage({
|
||||
victim = enemy,
|
||||
attacker = caster,
|
||||
damage = damage,
|
||||
damage_type = DAMAGE_TYPE_MAGICAL,
|
||||
ability = ability,
|
||||
damage_flags = DOTA_DAMAGE_FLAG_NO_SPELL_AMPLIFICATION
|
||||
})
|
||||
end
|
||||
end
|
||||
modifier_item_radiance_custom = __TS__Decorate(
|
||||
modifier_item_radiance_custom,
|
||||
modifier_item_radiance_custom,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_radiance_custom"}
|
||||
)
|
||||
____exports.modifier_item_radiance_custom = modifier_item_radiance_custom
|
||||
return ____exports
|
||||
@@ -0,0 +1,76 @@
|
||||
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
|
||||
____exports.item_rapier_custom = __TS__Class()
|
||||
local item_rapier_custom = ____exports.item_rapier_custom
|
||||
item_rapier_custom.name = "item_rapier_custom"
|
||||
item_rapier_custom.____file_path = "scripts/vscripts/items/default_items/item_rapier_custom.lua"
|
||||
__TS__ClassExtends(item_rapier_custom, BaseItem)
|
||||
function item_rapier_custom.prototype.GetIntrinsicModifierName(self)
|
||||
return "modifier_rapier_custom"
|
||||
end
|
||||
item_rapier_custom = __TS__Decorate(
|
||||
item_rapier_custom,
|
||||
item_rapier_custom,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_rapier_custom"}
|
||||
)
|
||||
____exports.item_rapier_custom = item_rapier_custom
|
||||
____exports.modifier_rapier_custom = __TS__Class()
|
||||
local modifier_rapier_custom = ____exports.modifier_rapier_custom
|
||||
modifier_rapier_custom.name = "modifier_rapier_custom"
|
||||
modifier_rapier_custom.____file_path = "scripts/vscripts/items/default_items/item_rapier_custom.lua"
|
||||
__TS__ClassExtends(modifier_rapier_custom, BaseModifier)
|
||||
function modifier_rapier_custom.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_rapier_custom.prototype.IsDebuff(self)
|
||||
return false
|
||||
end
|
||||
function modifier_rapier_custom.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_rapier_custom.prototype.GetAttributes(self)
|
||||
return MODIFIER_ATTRIBUTE_MULTIPLE
|
||||
end
|
||||
function modifier_rapier_custom.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE, MODIFIER_PROPERTY_PROCATTACK_BONUS_DAMAGE_PURE, MODIFIER_EVENT_ON_ATTACK_LANDED}
|
||||
end
|
||||
function modifier_rapier_custom.prototype.OnAttackLanded(self, event)
|
||||
if self:GetParent() == event.attacker then
|
||||
local damage = self:GetAbility():GetSpecialValueFor("proc_damage") / 100 * self:GetParent():GetAverageTrueAttackDamage(event.target)
|
||||
SendOverheadEventMessage(
|
||||
nil,
|
||||
OVERHEAD_ALERT_DAMAGE,
|
||||
event.target,
|
||||
damage,
|
||||
nil
|
||||
)
|
||||
local particle = ParticleManager:CreateParticle("models/heroes/phantom_assassin_persona/debut/particles/pa_debutdash/pa_debutdash_fragments.vpcf", PATTACH_CUSTOMORIGIN, nil)
|
||||
ParticleManager:SetParticleControl(
|
||||
particle,
|
||||
0,
|
||||
event.target:GetAbsOrigin()
|
||||
)
|
||||
ParticleManager:ReleaseParticleIndex(particle)
|
||||
ApplyDamage({victim = event.target, attacker = event.attacker, damage = damage, damage_type = DAMAGE_TYPE_PURE})
|
||||
end
|
||||
end
|
||||
function modifier_rapier_custom.prototype.GetModifierPreAttack_BonusDamage(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_damage")
|
||||
end
|
||||
modifier_rapier_custom = __TS__Decorate(
|
||||
modifier_rapier_custom,
|
||||
modifier_rapier_custom,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_rapier_custom"}
|
||||
)
|
||||
____exports.modifier_rapier_custom = modifier_rapier_custom
|
||||
return ____exports
|
||||
@@ -0,0 +1,159 @@
|
||||
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 precacheVampirismParticle = ____vampirism.precacheVampirismParticle
|
||||
local reducePhysicalVampirism = ____vampirism.reducePhysicalVampirism
|
||||
local SATANIC_BUFF_PARTICLE = "particles/items2_fx/satanic_buff.vpcf"
|
||||
____exports.item_satanic_custom = __TS__Class()
|
||||
local item_satanic_custom = ____exports.item_satanic_custom
|
||||
item_satanic_custom.name = "item_satanic_custom"
|
||||
item_satanic_custom.____file_path = "scripts/vscripts/items/default_items/item_satanic_custom.lua"
|
||||
__TS__ClassExtends(item_satanic_custom, BaseItem)
|
||||
function item_satanic_custom.prototype.Precache(self, context)
|
||||
precacheVampirismParticle(nil, context)
|
||||
PrecacheResource("particle", SATANIC_BUFF_PARTICLE, context)
|
||||
PrecacheResource("soundfile", "soundevents/game_sounds_items.vsndevts", context)
|
||||
end
|
||||
function item_satanic_custom.prototype.GetIntrinsicModifierName(self)
|
||||
return ____exports.modifier_item_satanic_custom.name
|
||||
end
|
||||
function item_satanic_custom.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
local healthCost = self:GetSpecialValueFor("health_cost")
|
||||
if healthCost > 0 then
|
||||
caster:SetHealth(math.max(
|
||||
1,
|
||||
caster:GetHealth() - healthCost
|
||||
))
|
||||
end
|
||||
caster:EmitSound("DOTA_Item.Satanic.Activate")
|
||||
caster:AddNewModifier(
|
||||
caster,
|
||||
self,
|
||||
____exports.modifier_item_satanic_custom_unholy.name,
|
||||
{duration = self:GetSpecialValueFor("unholy_duration")}
|
||||
)
|
||||
end
|
||||
item_satanic_custom = __TS__Decorate(
|
||||
item_satanic_custom,
|
||||
item_satanic_custom,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_satanic_custom"}
|
||||
)
|
||||
____exports.item_satanic_custom = item_satanic_custom
|
||||
____exports.modifier_item_satanic_custom = __TS__Class()
|
||||
local modifier_item_satanic_custom = ____exports.modifier_item_satanic_custom
|
||||
modifier_item_satanic_custom.name = "modifier_item_satanic_custom"
|
||||
modifier_item_satanic_custom.____file_path = "scripts/vscripts/items/default_items/item_satanic_custom.lua"
|
||||
__TS__ClassExtends(modifier_item_satanic_custom, BaseModifier)
|
||||
function modifier_item_satanic_custom.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_satanic_custom.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_satanic_custom.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_satanic_custom.prototype.GetAttributes(self)
|
||||
return MODIFIER_ATTRIBUTE_MULTIPLE
|
||||
end
|
||||
function modifier_item_satanic_custom.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE, MODIFIER_PROPERTY_STATS_STRENGTH_BONUS}
|
||||
end
|
||||
function modifier_item_satanic_custom.prototype.GetModifierPreAttack_BonusDamage(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_damage")
|
||||
end
|
||||
function modifier_item_satanic_custom.prototype.GetModifierBonusStats_Strength(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_strength")
|
||||
end
|
||||
function modifier_item_satanic_custom.prototype.OnCreated(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local hero = self:GetParent()
|
||||
local lifesteal = self:GetAbility():GetSpecialValueFor("lifesteal")
|
||||
if lifesteal > 0 then
|
||||
addPhysicalVampirism(nil, hero, lifesteal)
|
||||
end
|
||||
end
|
||||
function modifier_item_satanic_custom.prototype.OnDestroy(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local hero = self:GetParent()
|
||||
local lifesteal = self:GetAbility():GetSpecialValueFor("lifesteal")
|
||||
if lifesteal > 0 then
|
||||
reducePhysicalVampirism(nil, hero, lifesteal)
|
||||
end
|
||||
end
|
||||
modifier_item_satanic_custom = __TS__Decorate(
|
||||
modifier_item_satanic_custom,
|
||||
modifier_item_satanic_custom,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_satanic_custom"}
|
||||
)
|
||||
____exports.modifier_item_satanic_custom = modifier_item_satanic_custom
|
||||
____exports.modifier_item_satanic_custom_unholy = __TS__Class()
|
||||
local modifier_item_satanic_custom_unholy = ____exports.modifier_item_satanic_custom_unholy
|
||||
modifier_item_satanic_custom_unholy.name = "modifier_item_satanic_custom_unholy"
|
||||
modifier_item_satanic_custom_unholy.____file_path = "scripts/vscripts/items/default_items/item_satanic_custom.lua"
|
||||
__TS__ClassExtends(modifier_item_satanic_custom_unholy, BaseModifier)
|
||||
function modifier_item_satanic_custom_unholy.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_satanic_custom_unholy.prototype.IsPurgable(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_satanic_custom_unholy.prototype.IsDebuff(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_satanic_custom_unholy.prototype.GetTexture(self)
|
||||
return "item_satanic"
|
||||
end
|
||||
function modifier_item_satanic_custom_unholy.prototype.GetEffectName(self)
|
||||
return SATANIC_BUFF_PARTICLE
|
||||
end
|
||||
function modifier_item_satanic_custom_unholy.prototype.GetEffectAttachType(self)
|
||||
return PATTACH_ABSORIGIN_FOLLOW
|
||||
end
|
||||
function modifier_item_satanic_custom_unholy.prototype.OnCreated(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local hero = self:GetParent()
|
||||
local bonus = self:GetAbility():GetSpecialValueFor("unholy_lifesteal")
|
||||
if bonus > 0 then
|
||||
addPhysicalVampirism(nil, hero, bonus)
|
||||
end
|
||||
end
|
||||
function modifier_item_satanic_custom_unholy.prototype.OnDestroy(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local hero = self:GetParent()
|
||||
local bonus = self:GetAbility():GetSpecialValueFor("unholy_lifesteal")
|
||||
if bonus > 0 then
|
||||
reducePhysicalVampirism(nil, hero, bonus)
|
||||
end
|
||||
end
|
||||
modifier_item_satanic_custom_unholy = __TS__Decorate(
|
||||
modifier_item_satanic_custom_unholy,
|
||||
modifier_item_satanic_custom_unholy,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_satanic_custom_unholy"}
|
||||
)
|
||||
____exports.modifier_item_satanic_custom_unholy = modifier_item_satanic_custom_unholy
|
||||
return ____exports
|
||||
@@ -0,0 +1,158 @@
|
||||
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 ____modifier_stats_multiplier = require("modifiers.modifier_stats_multiplier")
|
||||
local removeStatsMultiplierSource = ____modifier_stats_multiplier.removeStatsMultiplierSource
|
||||
local setStatsMultiplierSource = ____modifier_stats_multiplier.setStatsMultiplierSource
|
||||
local SKADI_CUSTOM_SOURCE_PREFIX = "item_skadi_custom"
|
||||
____exports.item_skadi_custom = __TS__Class()
|
||||
local item_skadi_custom = ____exports.item_skadi_custom
|
||||
item_skadi_custom.name = "item_skadi_custom"
|
||||
item_skadi_custom.____file_path = "scripts/vscripts/items/default_items/item_skadi_custom.lua"
|
||||
__TS__ClassExtends(item_skadi_custom, BaseItem)
|
||||
function item_skadi_custom.prototype.GetIntrinsicModifierName(self)
|
||||
return "modifier_item_skadi_custom"
|
||||
end
|
||||
item_skadi_custom = __TS__Decorate(
|
||||
item_skadi_custom,
|
||||
item_skadi_custom,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_skadi_custom"}
|
||||
)
|
||||
____exports.item_skadi_custom = item_skadi_custom
|
||||
____exports.modifier_item_skadi_custom = __TS__Class()
|
||||
local modifier_item_skadi_custom = ____exports.modifier_item_skadi_custom
|
||||
modifier_item_skadi_custom.name = "modifier_item_skadi_custom"
|
||||
modifier_item_skadi_custom.____file_path = "scripts/vscripts/items/default_items/item_skadi_custom.lua"
|
||||
__TS__ClassExtends(modifier_item_skadi_custom, BaseModifier)
|
||||
function modifier_item_skadi_custom.prototype.____constructor(self, ...)
|
||||
BaseModifier.prototype.____constructor(self, ...)
|
||||
self.statsSourceId = ""
|
||||
end
|
||||
function modifier_item_skadi_custom.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_skadi_custom.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_skadi_custom.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_skadi_custom.prototype.GetAttributes(self)
|
||||
return MODIFIER_ATTRIBUTE_MULTIPLE
|
||||
end
|
||||
function modifier_item_skadi_custom.prototype.OnCreated(self)
|
||||
local hero = self:GetParent()
|
||||
if not (hero and hero:IsRealHero()) then
|
||||
return
|
||||
end
|
||||
self.statsSourceId = (SKADI_CUSTOM_SOURCE_PREFIX .. "_") .. tostring(hero:entindex())
|
||||
local ability = self:GetAbility()
|
||||
setStatsMultiplierSource(
|
||||
nil,
|
||||
hero,
|
||||
self.statsSourceId,
|
||||
function()
|
||||
if not hero or not IsValidEntity(hero) or not hero:IsRealHero() then
|
||||
return 0
|
||||
end
|
||||
return ability and ability:GetSpecialValueFor("all_stats_pct") or 0
|
||||
end,
|
||||
"all_stats_pct"
|
||||
)
|
||||
end
|
||||
function modifier_item_skadi_custom.prototype.OnDestroy(self)
|
||||
if self.statsSourceId == "" then
|
||||
return
|
||||
end
|
||||
local hero = self:GetParent()
|
||||
if hero and IsValidEntity(hero) then
|
||||
removeStatsMultiplierSource(nil, hero, self.statsSourceId)
|
||||
end
|
||||
self.statsSourceId = ""
|
||||
end
|
||||
function modifier_item_skadi_custom.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_STATS_STRENGTH_BONUS, MODIFIER_PROPERTY_STATS_AGILITY_BONUS, MODIFIER_PROPERTY_STATS_INTELLECT_BONUS}
|
||||
end
|
||||
function modifier_item_skadi_custom.prototype.GetModifierBonusStats_Strength(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_all_stats")
|
||||
end
|
||||
function modifier_item_skadi_custom.prototype.GetModifierBonusStats_Agility(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_all_stats")
|
||||
end
|
||||
function modifier_item_skadi_custom.prototype.GetModifierBonusStats_Intellect(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_all_stats")
|
||||
end
|
||||
function modifier_item_skadi_custom.prototype.OnAttackLanded(self, event)
|
||||
if event.attacker ~= self:GetParent() then
|
||||
return
|
||||
end
|
||||
if not event.target or event.target:IsBuilding() or event.target:IsOther() then
|
||||
return
|
||||
end
|
||||
if event.target ~= nil then
|
||||
local ____self_8 = event.target
|
||||
local ____self_8_AddNewModifier_9 = ____self_8.AddNewModifier
|
||||
local ____temp_6 = self:GetParent()
|
||||
local ____temp_7 = self:GetAbility()
|
||||
local ____opt_4 = self:GetAbility()
|
||||
____self_8_AddNewModifier_9(
|
||||
____self_8,
|
||||
____temp_6,
|
||||
____temp_7,
|
||||
"modifier_item_skadi_custom_debuff",
|
||||
{duration = ____opt_4 and ____opt_4:GetSpecialValueFor("debuff_duration")}
|
||||
)
|
||||
end
|
||||
end
|
||||
modifier_item_skadi_custom = __TS__Decorate(
|
||||
modifier_item_skadi_custom,
|
||||
modifier_item_skadi_custom,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_skadi_custom"}
|
||||
)
|
||||
____exports.modifier_item_skadi_custom = modifier_item_skadi_custom
|
||||
____exports.modifier_item_skadi_custom_debuff = __TS__Class()
|
||||
local modifier_item_skadi_custom_debuff = ____exports.modifier_item_skadi_custom_debuff
|
||||
modifier_item_skadi_custom_debuff.name = "modifier_item_skadi_custom_debuff"
|
||||
modifier_item_skadi_custom_debuff.____file_path = "scripts/vscripts/items/default_items/item_skadi_custom.lua"
|
||||
__TS__ClassExtends(modifier_item_skadi_custom_debuff, BaseModifier)
|
||||
function modifier_item_skadi_custom_debuff.prototype.IsDebuff(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_skadi_custom_debuff.prototype.IsPurgable(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_skadi_custom_debuff.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_skadi_custom_debuff.prototype.GetModifierProjectileName(self)
|
||||
return "particles/items2_fx/skadi_projectile.vpcf"
|
||||
end
|
||||
function modifier_item_skadi_custom_debuff.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS, MODIFIER_PROPERTY_HEALTH_REGEN_PERCENTAGE, MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE}
|
||||
end
|
||||
function modifier_item_skadi_custom_debuff.prototype.GetModifierMoveSpeedBonus_Percentage(self)
|
||||
return self:GetAbility():GetSpecialValueFor("movespeed_reduction")
|
||||
end
|
||||
function modifier_item_skadi_custom_debuff.prototype.GetModifierHealthRegenPercentage(self)
|
||||
return 1 + (self:GetAbility():GetSpecialValueFor("health_reduction") - 100) * 0.01
|
||||
end
|
||||
function modifier_item_skadi_custom_debuff.prototype.GetModifierPhysicalArmorBonus(self, event)
|
||||
return self:GetAbility():GetSpecialValueFor("armor_reduction")
|
||||
end
|
||||
modifier_item_skadi_custom_debuff = __TS__Decorate(
|
||||
modifier_item_skadi_custom_debuff,
|
||||
modifier_item_skadi_custom_debuff,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_skadi_custom_debuff"}
|
||||
)
|
||||
____exports.modifier_item_skadi_custom_debuff = modifier_item_skadi_custom_debuff
|
||||
return ____exports
|
||||
@@ -0,0 +1,196 @@
|
||||
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
|
||||
____exports.item_soul_devourer_staff = __TS__Class()
|
||||
local item_soul_devourer_staff = ____exports.item_soul_devourer_staff
|
||||
item_soul_devourer_staff.name = "item_soul_devourer_staff"
|
||||
item_soul_devourer_staff.____file_path = "scripts/vscripts/items/default_items/item_soul_devourer_staff.lua"
|
||||
__TS__ClassExtends(item_soul_devourer_staff, BaseItem)
|
||||
function item_soul_devourer_staff.prototype.GetIntrinsicModifierName(self)
|
||||
return "modifier_soul_devourer_staff"
|
||||
end
|
||||
item_soul_devourer_staff = __TS__Decorate(
|
||||
item_soul_devourer_staff,
|
||||
item_soul_devourer_staff,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_soul_devourer_staff"}
|
||||
)
|
||||
____exports.item_soul_devourer_staff = item_soul_devourer_staff
|
||||
____exports.modifier_soul_devourer_staff = __TS__Class()
|
||||
local modifier_soul_devourer_staff = ____exports.modifier_soul_devourer_staff
|
||||
modifier_soul_devourer_staff.name = "modifier_soul_devourer_staff"
|
||||
modifier_soul_devourer_staff.____file_path = "scripts/vscripts/items/default_items/item_soul_devourer_staff.lua"
|
||||
__TS__ClassExtends(modifier_soul_devourer_staff, BaseModifier)
|
||||
function modifier_soul_devourer_staff.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_soul_devourer_staff.prototype.IsDebuff(self)
|
||||
return false
|
||||
end
|
||||
function modifier_soul_devourer_staff.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_soul_devourer_staff.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_soul_devourer_staff.prototype.DeclareFunctions(self)
|
||||
return {
|
||||
MODIFIER_PROPERTY_STATS_INTELLECT_BONUS,
|
||||
MODIFIER_PROPERTY_CAST_RANGE_BONUS,
|
||||
MODIFIER_PROPERTY_MANA_REGEN_CONSTANT,
|
||||
MODIFIER_PROPERTY_MANACOST_PERCENTAGE_STACKING,
|
||||
MODIFIER_EVENT_ON_DEATH,
|
||||
MODIFIER_PROPERTY_MANA_BONUS
|
||||
}
|
||||
end
|
||||
function modifier_soul_devourer_staff.prototype.OnDeath(self, event)
|
||||
if event.attacker ~= self:GetCaster() then
|
||||
return
|
||||
end
|
||||
local mana = self:GetCaster():GetMaxMana() * self:GetAbility():GetSpecialValueFor("kill_mana")
|
||||
self:GetCaster():GiveMana(mana)
|
||||
SendOverheadEventMessage(
|
||||
nil,
|
||||
OVERHEAD_ALERT_MANA_ADD,
|
||||
self:GetCaster(),
|
||||
mana,
|
||||
self:GetCaster():GetPlayerOwner()
|
||||
)
|
||||
local caster = self:GetCaster()
|
||||
local ability = self:GetAbility()
|
||||
if not ability then
|
||||
return
|
||||
end
|
||||
local blessing = caster:FindModifierByName("modifier_soul_devourer_staff_buff")
|
||||
if not blessing then
|
||||
blessing = caster:AddNewModifier(
|
||||
self:GetParent(),
|
||||
ability,
|
||||
"modifier_soul_devourer_staff_buff",
|
||||
{}
|
||||
)
|
||||
end
|
||||
if blessing ~= nil then
|
||||
blessing:IncrementStackCount()
|
||||
end
|
||||
end
|
||||
function modifier_soul_devourer_staff.prototype.GetModifierPercentageManacostStacking(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_manacost_reduction")
|
||||
end
|
||||
function modifier_soul_devourer_staff.prototype.GetModifierBonusStats_Intellect(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_intellect")
|
||||
end
|
||||
function modifier_soul_devourer_staff.prototype.GetModifierCastRangeBonus(self, event)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_cast_range")
|
||||
end
|
||||
function modifier_soul_devourer_staff.prototype.GetModifierConstantManaRegen(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_mana_regen")
|
||||
end
|
||||
function modifier_soul_devourer_staff.prototype.GetModifierManaBonus(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_mana_special")
|
||||
end
|
||||
modifier_soul_devourer_staff = __TS__Decorate(
|
||||
modifier_soul_devourer_staff,
|
||||
modifier_soul_devourer_staff,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_soul_devourer_staff"}
|
||||
)
|
||||
____exports.modifier_soul_devourer_staff = modifier_soul_devourer_staff
|
||||
____exports.modifier_soul_devourer_staff_buff = __TS__Class()
|
||||
local modifier_soul_devourer_staff_buff = ____exports.modifier_soul_devourer_staff_buff
|
||||
modifier_soul_devourer_staff_buff.name = "modifier_soul_devourer_staff_buff"
|
||||
modifier_soul_devourer_staff_buff.____file_path = "scripts/vscripts/items/default_items/item_soul_devourer_staff.lua"
|
||||
__TS__ClassExtends(modifier_soul_devourer_staff_buff, BaseModifier)
|
||||
function modifier_soul_devourer_staff_buff.prototype.IsHidden(self)
|
||||
if self:GetCaster():HasModifier("modifier_soul_devourer_staff") then
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end
|
||||
function modifier_soul_devourer_staff_buff.prototype.IsDebuff(self)
|
||||
return false
|
||||
end
|
||||
function modifier_soul_devourer_staff_buff.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_soul_devourer_staff_buff.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_soul_devourer_staff_buff.prototype.GetTexture(self)
|
||||
return "default_items/soul_devourer_staff"
|
||||
end
|
||||
function modifier_soul_devourer_staff_buff.prototype.refreshStackGrowthHudDuration(self, ability)
|
||||
local interval = ability:GetSpecialValueFor("stack_growth_interval") > 0 and ability:GetSpecialValueFor("stack_growth_interval") or 60
|
||||
local baseDur = ability:GetSpecialValueFor("stack_growth_duration")
|
||||
if baseDur <= 0 then
|
||||
baseDur = interval + 0.5
|
||||
elseif baseDur <= interval then
|
||||
baseDur = interval + 0.5
|
||||
end
|
||||
self:SetDuration(baseDur + 0.2, true)
|
||||
end
|
||||
function modifier_soul_devourer_staff_buff.prototype.OnCreated(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local ability = self:GetAbility()
|
||||
if not ability then
|
||||
return
|
||||
end
|
||||
local interval = ability:GetSpecialValueFor("stack_growth_interval") > 0 and ability:GetSpecialValueFor("stack_growth_interval") or 60
|
||||
self:StartIntervalThink(interval)
|
||||
self:refreshStackGrowthHudDuration(ability)
|
||||
end
|
||||
function modifier_soul_devourer_staff_buff.prototype.OnIntervalThink(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local parent = self:GetParent()
|
||||
if not parent or not parent:IsAlive() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
local ability = self:GetAbility()
|
||||
if not caster or not ability then
|
||||
return
|
||||
end
|
||||
if not caster:HasModifier("modifier_soul_devourer_staff") then
|
||||
return
|
||||
end
|
||||
local stacks = self:GetStackCount()
|
||||
if stacks <= 0 then
|
||||
return
|
||||
end
|
||||
local pct = ability:GetSpecialValueFor("stack_growth_percent")
|
||||
local growthPct = pct > 0 and pct or 20
|
||||
local mult = 1 + growthPct / 100
|
||||
local newStacks = math.ceil(stacks * mult)
|
||||
if newStacks > stacks then
|
||||
self:SetStackCount(newStacks)
|
||||
end
|
||||
self:refreshStackGrowthHudDuration(ability)
|
||||
end
|
||||
function modifier_soul_devourer_staff_buff.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_MANA_BONUS}
|
||||
end
|
||||
function modifier_soul_devourer_staff_buff.prototype.GetModifierManaBonus(self)
|
||||
if self:GetCaster():HasModifier("modifier_soul_devourer_staff") then
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_mana") * self:GetStackCount()
|
||||
end
|
||||
return 0
|
||||
end
|
||||
modifier_soul_devourer_staff_buff = __TS__Decorate(
|
||||
modifier_soul_devourer_staff_buff,
|
||||
modifier_soul_devourer_staff_buff,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_soul_devourer_staff_buff"}
|
||||
)
|
||||
____exports.modifier_soul_devourer_staff_buff = modifier_soul_devourer_staff_buff
|
||||
return ____exports
|
||||
@@ -0,0 +1,166 @@
|
||||
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
|
||||
____exports.item_storm = __TS__Class()
|
||||
local item_storm = ____exports.item_storm
|
||||
item_storm.name = "item_storm"
|
||||
item_storm.____file_path = "scripts/vscripts/items/default_items/item_storm.lua"
|
||||
__TS__ClassExtends(item_storm, BaseItem)
|
||||
function item_storm.prototype.GetIntrinsicModifierName(self)
|
||||
return "modifier_storm"
|
||||
end
|
||||
item_storm = __TS__Decorate(
|
||||
item_storm,
|
||||
item_storm,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_storm"}
|
||||
)
|
||||
____exports.item_storm = item_storm
|
||||
____exports.modifier_storm = __TS__Class()
|
||||
local modifier_storm = ____exports.modifier_storm
|
||||
modifier_storm.name = "modifier_storm"
|
||||
modifier_storm.____file_path = "scripts/vscripts/items/default_items/item_storm.lua"
|
||||
__TS__ClassExtends(modifier_storm, BaseModifier)
|
||||
function modifier_storm.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_storm.prototype.IsDebuff(self)
|
||||
return false
|
||||
end
|
||||
function modifier_storm.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_storm.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE, MODIFIER_EVENT_ON_ATTACK_LANDED}
|
||||
end
|
||||
function modifier_storm.prototype.GetModifierPreAttack_BonusDamage(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_damage")
|
||||
end
|
||||
function modifier_storm.prototype.OnAttackLanded(self, event)
|
||||
if event.attacker ~= self:GetParent() then
|
||||
return
|
||||
end
|
||||
if RandomInt(1, 100) > self:GetAbility():GetSpecialValueFor("chance") then
|
||||
return
|
||||
end
|
||||
local ____opt_0 = self:GetAbility()
|
||||
if (____opt_0 and ____opt_0:IsCooldownReady()) == false then
|
||||
return
|
||||
end
|
||||
self:GetAbility():GetSpecialValueFor("bolt_damage")
|
||||
event.target:AddNewModifier(
|
||||
self:GetParent(),
|
||||
self:GetAbility(),
|
||||
"modifier_storm_dps",
|
||||
{
|
||||
duration = 0.26,
|
||||
attacker_entindex = self:GetCaster():entindex()
|
||||
}
|
||||
)
|
||||
self:GetAbility():StartCooldown(self:GetAbility():GetSpecialValueFor("ability_cooldown"))
|
||||
end
|
||||
modifier_storm = __TS__Decorate(
|
||||
modifier_storm,
|
||||
modifier_storm,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_storm"}
|
||||
)
|
||||
____exports.modifier_storm = modifier_storm
|
||||
____exports.modifier_storm_dps = __TS__Class()
|
||||
local modifier_storm_dps = ____exports.modifier_storm_dps
|
||||
modifier_storm_dps.name = "modifier_storm_dps"
|
||||
modifier_storm_dps.____file_path = "scripts/vscripts/items/default_items/item_storm.lua"
|
||||
__TS__ClassExtends(modifier_storm_dps, BaseModifier)
|
||||
function modifier_storm_dps.prototype.IsHidden(self)
|
||||
return false
|
||||
end
|
||||
function modifier_storm_dps.prototype.IsDebuff(self)
|
||||
return true
|
||||
end
|
||||
function modifier_storm_dps.prototype.IsPurgable(self)
|
||||
return true
|
||||
end
|
||||
function modifier_storm_dps.prototype.OnCreated(self, params)
|
||||
self:SetStackCount(3)
|
||||
self:StartIntervalThink(0.25)
|
||||
end
|
||||
function modifier_storm_dps.prototype.OnIntervalThink(self)
|
||||
if self:GetStackCount() == 0 then
|
||||
return
|
||||
end
|
||||
self:SetDuration(0.26, true)
|
||||
self:SetStackCount(self:GetStackCount() - 1)
|
||||
local victim = self:GetParent()
|
||||
local attacker = self:GetCaster()
|
||||
local particle = ParticleManager:CreateParticle("particles/items_fx/chain_lightning.vpcf", PATTACH_ABSORIGIN_FOLLOW, victim)
|
||||
if attacker then
|
||||
ParticleManager:SetParticleControlEnt(
|
||||
particle,
|
||||
0,
|
||||
attacker,
|
||||
PATTACH_POINT_FOLLOW,
|
||||
"attach_hitloc",
|
||||
attacker:GetAbsOrigin(),
|
||||
true
|
||||
)
|
||||
else
|
||||
ParticleManager:SetParticleControl(
|
||||
particle,
|
||||
0,
|
||||
victim:GetAbsOrigin()
|
||||
)
|
||||
end
|
||||
ParticleManager:SetParticleControlEnt(
|
||||
particle,
|
||||
1,
|
||||
victim,
|
||||
PATTACH_POINT_FOLLOW,
|
||||
"attach_hitloc",
|
||||
victim:GetAbsOrigin(),
|
||||
true
|
||||
)
|
||||
ParticleManager:SetParticleControl(
|
||||
particle,
|
||||
2,
|
||||
Vector(1, 1, 1)
|
||||
)
|
||||
ParticleManager:ReleaseParticleIndex(particle)
|
||||
local ability = self:GetAbility()
|
||||
if IsClient() then
|
||||
return
|
||||
end
|
||||
if ability ~= nil and victim ~= nil and attacker ~= nil then
|
||||
ApplyDamage({
|
||||
victim = victim,
|
||||
attacker = attacker,
|
||||
damage = ability:GetSpecialValueFor("bolt_damage"),
|
||||
damage_type = DAMAGE_TYPE_MAGICAL,
|
||||
damage_flags = DOTA_DAMAGE_FLAG_NONE,
|
||||
ability = ability
|
||||
})
|
||||
end
|
||||
self:GetParent():AddNewModifier(
|
||||
self:GetParent(),
|
||||
self:GetAbility(),
|
||||
"modifier_stunned",
|
||||
{duration = self:GetAbility():GetSpecialValueFor("stun")}
|
||||
)
|
||||
end
|
||||
function modifier_storm_dps.prototype.GetTexture(self)
|
||||
return "default_items/storm"
|
||||
end
|
||||
modifier_storm_dps = __TS__Decorate(
|
||||
modifier_storm_dps,
|
||||
modifier_storm_dps,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_storm_dps"}
|
||||
)
|
||||
____exports.modifier_storm_dps = modifier_storm_dps
|
||||
return ____exports
|
||||
@@ -0,0 +1,211 @@
|
||||
local ____lualib = require("lualib_bundle")
|
||||
local __TS__Class = ____lualib.__TS__Class
|
||||
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
||||
local __TS__ArrayMap = ____lualib.__TS__ArrayMap
|
||||
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 registerModifier = ____dota_ts_adapter.registerModifier
|
||||
local ____WaveManager = require("WaveManager")
|
||||
local WaveManager = ____WaveManager.WaveManager
|
||||
local ____dota_ts_adapter = require("lib.dota_ts_adapter")
|
||||
local registerAbility = ____dota_ts_adapter.registerAbility
|
||||
local ____crystal_currency = require("crystal_currency")
|
||||
local CrystalCurrency = ____crystal_currency.CrystalCurrency
|
||||
local ____dps_tracker = require("abilities.modifiers.dps_tracker")
|
||||
local dps_tracker = ____dps_tracker.dps_tracker
|
||||
____exports.item_test = __TS__Class()
|
||||
local item_test = ____exports.item_test
|
||||
item_test.name = "item_test"
|
||||
item_test.____file_path = "scripts/vscripts/items/default_items/item_test.lua"
|
||||
__TS__ClassExtends(item_test, BaseItem)
|
||||
function item_test.prototype.OnSpellStart(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local caster = self:GetCaster()
|
||||
local winnerTeam = caster:GetTeamNumber()
|
||||
local readyCheckStarted = WaveManager:getInstance():StartCutsceneReadyCheck("camera_start_ending")
|
||||
if not readyCheckStarted then
|
||||
local mgr = GameRules.CutsceneManager
|
||||
if mgr and not mgr:isCutsceneActive() then
|
||||
mgr:startScene("camera_start_ending", {force = true})
|
||||
GameRules:SendCustomMessage("<font color='#f6d28b'>[item_test] Фолбэк: катсцена запущена напрямую</font>", 0, 0)
|
||||
else
|
||||
GameRules:SendCustomMessage("<font color='#ff7070'>[item_test] Не удалось запустить катсцену</font>", 0, 0)
|
||||
end
|
||||
else
|
||||
GameRules:SendCustomMessage("<font color='#8be39f'>[item_test] Открыт ready-check катсцены</font>", 0, 0)
|
||||
end
|
||||
self:GetCaster():AddAbility(dps_tracker.name)
|
||||
self:GetCaster():AddNewModifier(
|
||||
self:GetCaster(),
|
||||
self,
|
||||
"modifier_effects_effect",
|
||||
{}
|
||||
)
|
||||
local cursorTarget = self:GetCursorTarget()
|
||||
print("[item_test] Cursor target: " .. (cursorTarget and cursorTarget:GetName() or "none"))
|
||||
local owner = self:GetCaster()
|
||||
local modifiers = owner:FindAllModifiers()
|
||||
local modifierNames = __TS__ArrayMap(
|
||||
modifiers,
|
||||
function(____, mod) return mod:GetName() end
|
||||
)
|
||||
print("[item_test] Modifiers on owner: " .. table.concat(modifierNames, ", "))
|
||||
CrystalCurrency:getInstance():addCrystals(
|
||||
self:GetCaster():GetPlayerID(),
|
||||
100
|
||||
)
|
||||
addLuck(
|
||||
nil,
|
||||
self:GetCaster(),
|
||||
10
|
||||
)
|
||||
addCritMult(
|
||||
nil,
|
||||
self:GetCaster(),
|
||||
30
|
||||
)
|
||||
if self:GetCaster():HasModifier("modifier_test_inf") then
|
||||
self:GetCaster():RemoveModifierByName("modifier_test_inf")
|
||||
else
|
||||
self:GetCaster():AddNewModifier(
|
||||
self:GetCaster(),
|
||||
self,
|
||||
"modifier_test_inf",
|
||||
{}
|
||||
)
|
||||
end
|
||||
end
|
||||
item_test = __TS__Decorate(
|
||||
item_test,
|
||||
item_test,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_test"}
|
||||
)
|
||||
____exports.item_test = item_test
|
||||
____exports.modifier_test = __TS__Class()
|
||||
local modifier_test = ____exports.modifier_test
|
||||
modifier_test.name = "modifier_test"
|
||||
modifier_test.____file_path = "scripts/vscripts/items/default_items/item_test.lua"
|
||||
__TS__ClassExtends(modifier_test, BaseModifier)
|
||||
function modifier_test.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_test.prototype.IsDebuff(self)
|
||||
return false
|
||||
end
|
||||
function modifier_test.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_test.prototype.GetAttributes(self)
|
||||
return MODIFIER_ATTRIBUTE_MULTIPLE
|
||||
end
|
||||
function modifier_test.prototype.OnCreated(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local stackingCritMod = self:GetParent():FindModifierByName("modifier_stacking_crit")
|
||||
if stackingCritMod then
|
||||
local ability = self:GetAbility()
|
||||
stackingCritMod:AddCustomCrit(0, 500, "item_test", ability)
|
||||
end
|
||||
end
|
||||
function modifier_test.prototype.OnDestroy(self)
|
||||
if IsClient() then
|
||||
return
|
||||
end
|
||||
local parent = self:GetParent()
|
||||
if not parent or not IsValidEntity(parent) then
|
||||
return
|
||||
end
|
||||
local stackingCritModifier = parent:FindModifierByName("modifier_stacking_crit")
|
||||
if not stackingCritModifier then
|
||||
return
|
||||
end
|
||||
local ability = self:GetAbility()
|
||||
stackingCritModifier:RemoveCrit("item_test", ability)
|
||||
end
|
||||
function modifier_test.prototype.GetStatusEffectName(self)
|
||||
return "particles/status_fx/status_effect_abaddon_borrowed_time.vpcf"
|
||||
end
|
||||
function modifier_test.prototype.GetEffectName(self)
|
||||
return "particles/units/heroes/hero_abaddon/abaddon_borrowed_time.vpcf"
|
||||
end
|
||||
function modifier_test.prototype.StatusEffectPriority(self)
|
||||
return 10
|
||||
end
|
||||
modifier_test = __TS__Decorate(
|
||||
modifier_test,
|
||||
modifier_test,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_test"}
|
||||
)
|
||||
____exports.modifier_test = modifier_test
|
||||
____exports.modifier_test_inf = __TS__Class()
|
||||
local modifier_test_inf = ____exports.modifier_test_inf
|
||||
modifier_test_inf.name = "modifier_test_inf"
|
||||
modifier_test_inf.____file_path = "scripts/vscripts/items/default_items/item_test.lua"
|
||||
__TS__ClassExtends(modifier_test_inf, BaseModifier)
|
||||
function modifier_test_inf.prototype.____constructor(self, ...)
|
||||
BaseModifier.prototype.____constructor(self, ...)
|
||||
self.bonusStrength = 1000000
|
||||
self.bonusAgility = 1000000
|
||||
self.bonusIntelligence = 1000000
|
||||
end
|
||||
function modifier_test_inf.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_STATS_STRENGTH_BONUS, MODIFIER_PROPERTY_STATS_AGILITY_BONUS, MODIFIER_PROPERTY_STATS_INTELLECT_BONUS}
|
||||
end
|
||||
function modifier_test_inf.prototype.GetModifierBonusStats_Strength(self)
|
||||
return self.bonusStrength
|
||||
end
|
||||
function modifier_test_inf.prototype.GetModifierBonusStats_Agility(self)
|
||||
return self.bonusAgility
|
||||
end
|
||||
function modifier_test_inf.prototype.GetModifierBonusStats_Intellect(self)
|
||||
return self.bonusIntelligence
|
||||
end
|
||||
modifier_test_inf = __TS__Decorate(
|
||||
modifier_test_inf,
|
||||
modifier_test_inf,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_test_inf"}
|
||||
)
|
||||
____exports.modifier_test_inf = modifier_test_inf
|
||||
____exports.modifier_test_agi = __TS__Class()
|
||||
local modifier_test_agi = ____exports.modifier_test_agi
|
||||
modifier_test_agi.name = "modifier_test_agi"
|
||||
modifier_test_agi.____file_path = "scripts/vscripts/items/default_items/item_test.lua"
|
||||
__TS__ClassExtends(modifier_test_agi, BaseModifier)
|
||||
function modifier_test_agi.prototype.____constructor(self, ...)
|
||||
BaseModifier.prototype.____constructor(self, ...)
|
||||
self.AgiPct = 1000
|
||||
self.Lock = false
|
||||
end
|
||||
function modifier_test_agi.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_STATS_AGILITY_BONUS}
|
||||
end
|
||||
function modifier_test_agi.prototype.GetModifierBonusStats_Agility(self)
|
||||
if not IsServer() then
|
||||
return 0
|
||||
end
|
||||
if self.Lock then
|
||||
return 0
|
||||
end
|
||||
self.Lock = true
|
||||
local agi = self:GetParent():GetAgility()
|
||||
self.Lock = false
|
||||
local bonus = self.AgiPct * agi / 100
|
||||
return bonus
|
||||
end
|
||||
modifier_test_agi = __TS__Decorate(
|
||||
modifier_test_agi,
|
||||
modifier_test_agi,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_test_agi"}
|
||||
)
|
||||
____exports.modifier_test_agi = modifier_test_agi
|
||||
return ____exports
|
||||
@@ -0,0 +1,106 @@
|
||||
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 ____modifier_stats_multiplier = require("modifiers.modifier_stats_multiplier")
|
||||
local removeStatsMultiplierSource = ____modifier_stats_multiplier.removeStatsMultiplierSource
|
||||
local setStatsMultiplierSource = ____modifier_stats_multiplier.setStatsMultiplierSource
|
||||
local ULTIMATE_CROWN_SOURCE_PREFIX = "item_ultimate_crown"
|
||||
____exports.item_ultimate_crown = __TS__Class()
|
||||
local item_ultimate_crown = ____exports.item_ultimate_crown
|
||||
item_ultimate_crown.name = "item_ultimate_crown"
|
||||
item_ultimate_crown.____file_path = "scripts/vscripts/items/default_items/item_ultimate_crown.lua"
|
||||
__TS__ClassExtends(item_ultimate_crown, BaseItem)
|
||||
function item_ultimate_crown.prototype.GetIntrinsicModifierName(self)
|
||||
return ____exports.modifier_item_ultimate_crown.name
|
||||
end
|
||||
item_ultimate_crown = __TS__Decorate(
|
||||
item_ultimate_crown,
|
||||
item_ultimate_crown,
|
||||
{registerAbility(nil)},
|
||||
{kind = "class", name = "item_ultimate_crown"}
|
||||
)
|
||||
____exports.item_ultimate_crown = item_ultimate_crown
|
||||
____exports.modifier_item_ultimate_crown = __TS__Class()
|
||||
local modifier_item_ultimate_crown = ____exports.modifier_item_ultimate_crown
|
||||
modifier_item_ultimate_crown.name = "modifier_item_ultimate_crown"
|
||||
modifier_item_ultimate_crown.____file_path = "scripts/vscripts/items/default_items/item_ultimate_crown.lua"
|
||||
__TS__ClassExtends(modifier_item_ultimate_crown, BaseModifier)
|
||||
function modifier_item_ultimate_crown.prototype.____constructor(self, ...)
|
||||
BaseModifier.prototype.____constructor(self, ...)
|
||||
self.statsSourceId = ""
|
||||
end
|
||||
function modifier_item_ultimate_crown.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_item_ultimate_crown.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_ultimate_crown.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_item_ultimate_crown.prototype.GetAttributes(self)
|
||||
return MODIFIER_ATTRIBUTE_MULTIPLE
|
||||
end
|
||||
function modifier_item_ultimate_crown.prototype.OnCreated(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
local hero = self:GetParent()
|
||||
if not (hero and hero:IsRealHero()) then
|
||||
return
|
||||
end
|
||||
self.statsSourceId = (ULTIMATE_CROWN_SOURCE_PREFIX .. "_") .. tostring(hero:entindex())
|
||||
local ability = self:GetAbility()
|
||||
setStatsMultiplierSource(
|
||||
nil,
|
||||
hero,
|
||||
self.statsSourceId,
|
||||
function()
|
||||
if not hero or not IsValidEntity(hero) or not hero:IsRealHero() then
|
||||
return 0
|
||||
end
|
||||
return ability and ability:GetSpecialValueFor("all_stats_pct") or 0
|
||||
end,
|
||||
"all_stats_pct"
|
||||
)
|
||||
end
|
||||
function modifier_item_ultimate_crown.prototype.OnDestroy(self)
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
if self.statsSourceId == "" then
|
||||
return
|
||||
end
|
||||
local hero = self:GetParent()
|
||||
if hero and IsValidEntity(hero) then
|
||||
removeStatsMultiplierSource(nil, hero, self.statsSourceId)
|
||||
end
|
||||
self.statsSourceId = ""
|
||||
end
|
||||
function modifier_item_ultimate_crown.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_STATS_STRENGTH_BONUS, MODIFIER_PROPERTY_STATS_AGILITY_BONUS, MODIFIER_PROPERTY_STATS_INTELLECT_BONUS}
|
||||
end
|
||||
function modifier_item_ultimate_crown.prototype.GetModifierBonusStats_Strength(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_all_stats")
|
||||
end
|
||||
function modifier_item_ultimate_crown.prototype.GetModifierBonusStats_Agility(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_all_stats")
|
||||
end
|
||||
function modifier_item_ultimate_crown.prototype.GetModifierBonusStats_Intellect(self)
|
||||
return self:GetAbility():GetSpecialValueFor("bonus_all_stats")
|
||||
end
|
||||
modifier_item_ultimate_crown = __TS__Decorate(
|
||||
modifier_item_ultimate_crown,
|
||||
modifier_item_ultimate_crown,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_item_ultimate_crown"}
|
||||
)
|
||||
____exports.modifier_item_ultimate_crown = modifier_item_ultimate_crown
|
||||
return ____exports
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user