Files
2HUCardTDGame/aghanim_singleplayer/scripts/vscripts/encounters/encounter_boss_visage.lua
2021-10-24 15:36:18 -04:00

161 lines
4.9 KiB
Lua
Executable File

require( "encounters/encounter_boss_base" )
require( "aghanim_utility_functions" )
require( "spawner" )
--------------------------------------------------------------------------------
if CMapEncounter_BossVisage == nil then
CMapEncounter_BossVisage = class( {}, {}, CMapEncounter_BossBase )
end
--------------------------------------------------------------------------------
function CMapEncounter_BossVisage:constructor( hRoom, szEncounterName )
CMapEncounter_BossBase.constructor( self, hRoom, szEncounterName )
self:AddSpawner( CDotaSpawner( "spawner_boss", "spawner_boss",
{
{
EntityName = self:GetPreviewUnit(),
Team = DOTA_TEAM_BADGUYS,
Count = 1,
PositionNoise = 0.0,
},
} ) )
self:AddSpawner( CDotaSpawner( "spawner_familiar", "spawner_familiar",
{
{
EntityName = "npc_dota_boss_visage_familiar",
Team = DOTA_TEAM_BADGUYS,
Count = 1,
PositionNoise = 0.0,
},
} ) )
self:AddSpawner( CDotaSpawner( "spawner_familiar_statue_east", "spawner_familiar_statue_east",
{
{
EntityName = "npc_dota_boss_visage_familiar_statue",
Team = DOTA_TEAM_BADGUYS,
Count = 1,
PositionNoise = 0.0,
},
} ) )
self:AddSpawner( CDotaSpawner( "spawner_familiar_statue_west", "spawner_familiar_statue_west",
{
{
EntityName = "npc_dota_boss_visage_familiar_statue",
Team = DOTA_TEAM_BADGUYS,
Count = 1,
PositionNoise = 0.0,
},
} ) )
end
--------------------------------------------------------------------------------
function CMapEncounter_BossVisage:GetPreviewUnit()
return "npc_dota_boss_visage"
end
--------------------------------------------------------------------------------
function CMapEncounter_BossVisage:Precache( context )
CMapEncounter_BossBase.Precache( self, context )
PrecacheUnitByNameSync( "npc_dota_boss_visage_familiar", context, -1 )
PrecacheResource( "particle_folder", "particles/units/heroes/hero_visage", context )
PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_visage.vsndevts", context )
PrecacheResource( "soundfile", "soundevents/voscripts/game_sounds_vo_visage.vsndevts", context )
end
--------------------------------------------------------------------------------
function CMapEncounter_BossVisage:OnEncounterLoaded()
CMapEncounter_BossBase.OnEncounterLoaded( self )
self.vecFamiliars = self:GetSpawner( "spawner_familiar" ):SpawnUnits()
self.vecFamiliarStatuesWest = self:GetSpawner( "spawner_familiar_statue_west" ):SpawnUnits()
self.vecFamiliarStatuesEast = self:GetSpawner( "spawner_familiar_statue_east" ):SpawnUnits()
for _,Familiar in pairs ( self.vecFamiliars ) do
Familiar:FaceTowards( self:GetSpawner( "spawner_boss" ):GetSpawners()[1]:GetAbsOrigin() )
end
for _,StatueWest in pairs ( self.vecFamiliarStatuesWest ) do
StatueWest:SetAbsAngles( 0, 0, 0 )
end
for _,StatueEast in pairs ( self.vecFamiliarStatuesEast ) do
StatueEast:SetAbsAngles( 0, 180, 0 )
end
end
--------------------------------------------------------------------------------
function CMapEncounter_BossVisage:OnThink()
CMapEncounter_BossBase.OnThink( self )
end
--------------------------------------------------------------------------------
function CMapEncounter_BossVisage:MustKillForEncounterCompletion( hEnemyCreature )
if hEnemyCreature:GetUnitName() == "npc_dota_boss_visage_familiar" then
return false
end
if hEnemyCreature:GetUnitName() == "npc_dota_boss_visage_familiar_statue" then
return false
end
return true
end
--------------------------------------------------------------------------------
function CMapEncounter_BossVisage:OnBossSpawned( hBoss )
CMapEncounter_BossBase.OnBossSpawned( self, hBoss )
hBoss.AI:SetEncounter( self )
hBoss.WestStatues = self.vecFamiliarStatuesWest
hBoss.EastStatues = self.vecFamiliarStatuesEast
for _,Familiar in pairs ( self.vecFamiliars ) do
Familiar:FaceTowards( self:GetSpawner( "spawner_boss" ):GetSpawners()[1]:GetAbsOrigin() )
Familiar:FindAbilityByName( "boss_visage_familiar_stone_form" ):OnSpellStart()
end
for _,StatueWest in pairs ( self.vecFamiliarStatuesWest ) do
StatueWest:FindAbilityByName( "boss_visage_familiar_stone_form" ):OnSpellStart()
end
for _,StatueEast in pairs ( self.vecFamiliarStatuesEast ) do
StatueEast:FindAbilityByName( "boss_visage_familiar_stone_form" ):OnSpellStart()
end
end
---------------------------------------------------------------------------
function CMapEncounter_BossVisage:OnBossKilled( hBoss, hAttacker )
CMapEncounter_BossBase.OnBossKilled( self, hBoss, hAttacker )
for _,Familiar in pairs ( self.vecFamiliars ) do
Familiar:ForceKill( false )
end
for _,StatueWest in pairs ( self.vecFamiliarStatuesWest ) do
StatueWest:ForceKill( false )
end
for _,StatueEast in pairs ( self.vecFamiliarStatuesEast ) do
StatueEast:ForceKill( false )
end
end
--------------------------------------------------------------------------------
return CMapEncounter_BossVisage