Files
2026-05-29 15:11:31 +07:00

156 lines
6.0 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 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