initial commit
This commit is contained in:
146
aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghanim_spell_swap.lua
Executable file
146
aghanim_singleplayer/scripts/vscripts/abilities/creatures/aghanim_spell_swap.lua
Executable file
@@ -0,0 +1,146 @@
|
||||
|
||||
aghanim_spell_swap = class({})
|
||||
|
||||
LinkLuaModifier( "modifier_aghanim_spell_swap", "modifiers/creatures/modifier_aghanim_spell_swap", LUA_MODIFIER_MOTION_NONE )
|
||||
LinkLuaModifier( "modifier_aghanim_spell_swap_crystal", "modifiers/creatures/modifier_aghanim_spell_swap_crystal", LUA_MODIFIER_MOTION_BOTH )
|
||||
|
||||
----------------------------------------------------------------------------------------
|
||||
|
||||
function aghanim_spell_swap:Precache( context )
|
||||
PrecacheResource( "particle", "particles/creatures/aghanim/aghanim_beam_channel.vpcf", context )
|
||||
PrecacheResource( "particle", "particles/creatures/aghanim/aghanim_spell_swap_beam.vpcf", context )
|
||||
PrecacheResource( "particle", "particles/units/heroes/hero_wisp/wisp_tether_hit.vpcf", context )
|
||||
PrecacheResource( "particle", "particles/units/heroes/hero_wisp/wisp_guardian_explosion.vpcf", context )
|
||||
PrecacheResource( "particle", "particles/creatures/aghanim/aghanim_crystal_spellswap_replenish.vpcf", context )
|
||||
PrecacheResource( "particle", "particles/creatures/aghanim/aghanim_crystal_spellswap_ambient.vpcf", context )
|
||||
PrecacheResource( "particle", "particles/creatures/aghanim/aghanim_crystal_destroy.vpcf", context )
|
||||
PrecacheResource( "particle", "particles/creatures/aghanim/aghanim_crystal_impact.vpcf", context )
|
||||
|
||||
PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_warlock.vsndevts", context )
|
||||
PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_pugna.vsndevts", context )
|
||||
PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_wisp.vsndevts", context )
|
||||
|
||||
PrecacheResource( "model", "models/gameplay/aghanim_crystal.vmdl", context )
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
function aghanim_spell_swap:ProcsMagicStick()
|
||||
return false
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
function aghanim_spell_swap:OnAbilityPhaseStart()
|
||||
if IsServer() then
|
||||
self.nChannelFX = ParticleManager:CreateParticle( "particles/creatures/aghanim/aghanim_beam_channel.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetCaster() )
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
function aghanim_spell_swap:GetChannelTime()
|
||||
if IsServer() then
|
||||
local flChannelTime = self.BaseClass.GetChannelTime( self )
|
||||
local nHealthPct = self:GetCaster():GetHealthPercent()
|
||||
if nHealthPct < 50 then
|
||||
flChannelTime = flChannelTime - 1.0
|
||||
end
|
||||
if nHealthPct < 25 then
|
||||
flChannelTime = flChannelTime - 1.0
|
||||
end
|
||||
return flChannelTime
|
||||
end
|
||||
return self.BaseClass.GetChannelTime( self )
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
function aghanim_spell_swap:OnChannelThink( flInterval )
|
||||
if IsServer() then
|
||||
end
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
function aghanim_spell_swap:OnChannelFinish( bInterrupted )
|
||||
if IsServer() then
|
||||
ParticleManager:DestroyParticle( self.nChannelFX, false )
|
||||
|
||||
for _,nFXIndex in pairs ( self.nBeamFXIndices ) do
|
||||
ParticleManager:DestroyParticle( nFXIndex, true )
|
||||
end
|
||||
|
||||
StopSoundOn( "Hero_Pugna.LifeDrain.Loop", self:GetCaster() )
|
||||
|
||||
for k,hHero in pairs ( self.Heroes ) do
|
||||
if hHero ~= nil and hHero:IsRealHero() then
|
||||
hHero:RemoveModifierByName( "modifier_arc_warden_spark_wraith_purge" )
|
||||
hHero:AddNewModifier( self:GetCaster(), self, "modifier_aghanim_spell_swap", {} )
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
function aghanim_spell_swap:OnSpellStart()
|
||||
if IsServer() then
|
||||
self.nBeamFXIndices = {}
|
||||
|
||||
local hSummonPortals = self:GetCaster():FindAbilityByName( "aghanim_summon_portals" )
|
||||
if hSummonPortals then
|
||||
local kv =
|
||||
{
|
||||
duration = self:GetChannelTime(),
|
||||
mode = hSummonPortals.PORTAL_MODE_ALL_ENEMIES,
|
||||
depth = 0,
|
||||
target_entindex = -1,
|
||||
}
|
||||
|
||||
local vRightPos = self:GetCaster():GetAbsOrigin() + self:GetCaster():GetRightVector() * 300
|
||||
local vLeftPos = self:GetCaster():GetAbsOrigin() - self:GetCaster():GetRightVector() * 300
|
||||
CreateModifierThinker( self:GetCaster(), self, "modifier_aghanim_summon_portals_thinker", kv, vRightPos, self:GetCaster():GetTeamNumber(), false )
|
||||
CreateModifierThinker( self:GetCaster(), self, "modifier_aghanim_summon_portals_thinker", kv, vLeftPos, self:GetCaster():GetTeamNumber(), false )
|
||||
end
|
||||
|
||||
EmitSoundOn( "Hero_Pugna.LifeDrain.Cast", self:GetCaster() )
|
||||
EmitSoundOn( "Hero_Pugna.LifeDrain.Loop", self:GetCaster() )
|
||||
|
||||
self.Heroes = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), self:GetCaster():GetAbsOrigin(), nil, 5000, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_INVULNERABLE, FIND_CLOSEST, false )
|
||||
for k,hHero in pairs ( self.Heroes ) do
|
||||
if hHero ~= nil and hHero:IsRealHero() then
|
||||
|
||||
local nNumAghDummies = 0
|
||||
for j=1,4 do
|
||||
local szName = tostring( "aghanim_empty_spell" .. j )
|
||||
local hDummyAbility = hHero:FindAbilityByName( szName )
|
||||
if hDummyAbility then
|
||||
nNumAghDummies = nNumAghDummies + 1
|
||||
end
|
||||
end
|
||||
|
||||
if nNumAghDummies == 4 then
|
||||
print( "I have 4 agh dummies! Getting slowed." )
|
||||
hHero:AddNewModifier( self:GetCaster(), self, "modifier_arc_warden_spark_wraith_purge", { duration = self:GetChannelTime() } )
|
||||
end
|
||||
|
||||
local nBeamFX = ParticleManager:CreateParticle( "particles/creatures/aghanim/aghanim_spell_swap_beam.vpcf", PATTACH_CUSTOMORIGIN, self:GetCaster() )
|
||||
|
||||
local szAttachment = "attach_hand_R"
|
||||
if RandomInt( 0, 1 ) == 1 then
|
||||
szAttachment = "attach_lower_hand_R"
|
||||
end
|
||||
ParticleManager:SetParticleControlEnt( nBeamFX, 0, self:GetCaster(), PATTACH_POINT_FOLLOW, szAttachment, self:GetCaster():GetAbsOrigin(), true )
|
||||
ParticleManager:SetParticleControlEnt( nBeamFX, 1, hHero, PATTACH_POINT_FOLLOW, "attach_hitloc", hHero:GetAbsOrigin(), true )
|
||||
ParticleManager:SetParticleControl( nBeamFX, 11, Vector( 1, 0, 0 ) )
|
||||
|
||||
table.insert( self.nBeamFXIndices, nBeamFX )
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
Reference in New Issue
Block a user