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 ____luna_lucent_beam_shared = require("abilities.heroes.luna.luna_lucent_beam_shared") local applyLucentBeamHit = ____luna_lucent_beam_shared.applyLucentBeamHit local getLunaLucentBeamAbility = ____luna_lucent_beam_shared.getLunaLucentBeamAbility ____exports.ability_luna_eclipse_custom = __TS__Class() local ability_luna_eclipse_custom = ____exports.ability_luna_eclipse_custom ability_luna_eclipse_custom.name = "ability_luna_eclipse_custom" ability_luna_eclipse_custom.____file_path = "scripts/vscripts/abilities/heroes/luna/ability_luna_eclipse_custom.lua" __TS__ClassExtends(ability_luna_eclipse_custom, BaseAbility) function ability_luna_eclipse_custom.prototype.Precache(self, context) PrecacheResource("particle", "particles/units/heroes/hero_luna/luna_eclipse.vpcf", context) PrecacheResource("particle", "particles/units/heroes/hero_luna/luna_lucent_beam.vpcf", context) end function ability_luna_eclipse_custom.prototype.GetBehavior(self) return DOTA_ABILITY_BEHAVIOR_NO_TARGET end function ability_luna_eclipse_custom.prototype.OnUpgrade(self) if not IsServer() then return end local caster = self:GetCaster() local lucentBeam = getLunaLucentBeamAbility(nil, caster) if not lucentBeam or lucentBeam:GetLevel() > 0 then return end if self:GetLevel() > 0 then self:SetLevel(0) if caster:IsRealHero() then local heroCaster = caster heroCaster:SetAbilityPoints(heroCaster:GetAbilityPoints() + 1) end end end function ability_luna_eclipse_custom.prototype.OnSpellStart(self) if not IsServer() then return end local caster = self:GetCaster() local duration = self:GetSpecialValueFor("eclipse_duration") local radius = self:GetSpecialValueFor("eclipse_radius") local eclipsePfx = ParticleManager:CreateParticle("particles/units/heroes/hero_luna/luna_eclipse.vpcf", PATTACH_ABSORIGIN_FOLLOW, caster) ParticleManager:SetParticleControl( eclipsePfx, 0, caster:GetAbsOrigin() ) ParticleManager:SetParticleControl( eclipsePfx, 1, Vector(radius, 0, 0) ) Timers:CreateTimer( duration + 0.5, function() ParticleManager:DestroyParticle(eclipsePfx, false) ParticleManager:ReleaseParticleIndex(eclipsePfx) return nil end ) caster:AddNewModifier(caster, self, ____exports.modifier_luna_eclipse_active.name, {duration = duration}) EmitSoundOn("Hero_Luna.Eclipse", caster) end ability_luna_eclipse_custom = __TS__Decorate( ability_luna_eclipse_custom, ability_luna_eclipse_custom, {registerAbility(nil)}, {kind = "class", name = "ability_luna_eclipse_custom"} ) ____exports.ability_luna_eclipse_custom = ability_luna_eclipse_custom ____exports.modifier_luna_eclipse_active = __TS__Class() local modifier_luna_eclipse_active = ____exports.modifier_luna_eclipse_active modifier_luna_eclipse_active.name = "modifier_luna_eclipse_active" modifier_luna_eclipse_active.____file_path = "scripts/vscripts/abilities/heroes/luna/ability_luna_eclipse_custom.lua" __TS__ClassExtends(modifier_luna_eclipse_active, BaseModifier) function modifier_luna_eclipse_active.prototype.____constructor(self, ...) BaseModifier.prototype.____constructor(self, ...) self.beamsDone = 0 end function modifier_luna_eclipse_active.prototype.IsHidden(self) return false end function modifier_luna_eclipse_active.prototype.IsPurgable(self) return false end function modifier_luna_eclipse_active.prototype.GetAttributes(self) return MODIFIER_ATTRIBUTE_MULTIPLE end function modifier_luna_eclipse_active.prototype.OnCreated(self) if not IsServer() then return end local interval = self:GetAbility():GetSpecialValueFor("beam_interval") self:StartIntervalThink(interval) self:OnIntervalThink() end function modifier_luna_eclipse_active.prototype.OnIntervalThink(self) if not IsServer() then return end local ability = self:GetAbility() local parent = self:GetParent() if not ability or not parent then self:Destroy() return end local facetWaves = parent:HasScepter() and math.floor(ability:GetSpecialValueFor("eclipse_facet_wave_count")) or 0 local maxBeams = facetWaves > 0 and facetWaves or math.floor(ability:GetSpecialValueFor("eclipse_beam_count")) if self.beamsDone >= maxBeams then self:Destroy() return end local radius = ability:GetSpecialValueFor("eclipse_radius") local lucentBeam = getLunaLucentBeamAbility(nil, parent) local hasLeveledLucentBeam = not not lucentBeam and lucentBeam:GetLevel() > 0 local damage = hasLeveledLucentBeam and lucentBeam:GetSpecialValueFor("lucent_beam_damage") or 0 local stun = hasLeveledLucentBeam and lucentBeam:GetSpecialValueFor("stun_duration") or 0 local enemies = FindUnitsInRadius( parent:GetTeamNumber(), parent: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 ) if #enemies == 0 then self.beamsDone = self.beamsDone + 1 return end if facetWaves > 0 then for ____, victim in ipairs(enemies) do do if not victim or not victim:IsAlive() then goto __continue23 end applyLucentBeamHit( nil, parent, ability, victim, damage, stun ) end ::__continue23:: end else local victim = enemies[RandomInt(0, #enemies - 1) + 1] if not victim or not victim:IsAlive() then self.beamsDone = self.beamsDone + 1 return end applyLucentBeamHit( nil, parent, ability, victim, damage, stun ) end self.beamsDone = self.beamsDone + 1 end modifier_luna_eclipse_active = __TS__Decorate( modifier_luna_eclipse_active, modifier_luna_eclipse_active, {registerModifier(nil)}, {kind = "class", name = "modifier_luna_eclipse_active"} ) ____exports.modifier_luna_eclipse_active = modifier_luna_eclipse_active return ____exports