273 lines
12 KiB
Lua
273 lines
12 KiB
Lua
local ____lualib = require("lualib_bundle")
|
|
local __TS__Class = ____lualib.__TS__Class
|
|
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
|
local __TS__Decorate = ____lualib.__TS__Decorate
|
|
local ____exports = {}
|
|
local ____dota_ts_adapter = require("lib.dota_ts_adapter")
|
|
local BaseItem = ____dota_ts_adapter.BaseItem
|
|
local BaseModifier = ____dota_ts_adapter.BaseModifier
|
|
local registerAbility = ____dota_ts_adapter.registerAbility
|
|
local registerModifier = ____dota_ts_adapter.registerModifier
|
|
local ____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
|