mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-24 10:56:38 +01:00
Scripting/Sethekk Halls: Move Boss Anzu from EAI to CPP and some cleanup.
This commit is contained in:
8
sql/updates/world/2013_08_07_04_world_misc.sql
Normal file
8
sql/updates/world/2013_08_07_04_world_misc.sql
Normal file
@@ -0,0 +1,8 @@
|
||||
-- Move boss_anzu from EAI to CPP
|
||||
UPDATE `creature_template` SET `AIName`= '', `ScriptName`= 'boss_anzu' WHERE `entry`=23035;
|
||||
DELETE FROM creature_ai_scripts WHERE `creature_id`=23035;
|
||||
DELETE FROM `creature_text` WHERE `entry`=23035;
|
||||
INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`) VALUES
|
||||
(23035, 0, 0, 'Awaken, my children and assist your master!', 14, 0, 100, 0, 0, 0, 'Anzu - Summon Brood'),
|
||||
(23035, 1, 0, 'Your spells... ke-kaw... are weak magics... easy to turn against you...', 15, 0, 100, 0, 0, 0, 'Anzu - Spell Bomb'),
|
||||
(23035, 1, 1, 'Yes... cast your precious little spells, ak-a-ak!', 15, 0, 100, 0, 0, 0, 'Anzu - Spell Bomb');
|
||||
@@ -535,6 +535,7 @@ void AddSC_boss_nexusprince_shaffar(); //Auchindoun Mana Tombs
|
||||
void AddSC_boss_pandemonius();
|
||||
void AddSC_boss_darkweaver_syth(); //Auchindoun Sekketh Halls
|
||||
void AddSC_boss_talon_king_ikiss();
|
||||
void AddSC_boss_anzu();
|
||||
void AddSC_instance_sethekk_halls();
|
||||
void AddSC_instance_shadow_labyrinth(); //Auchindoun Shadow Labyrinth
|
||||
void AddSC_boss_ambassador_hellmaw();
|
||||
@@ -1027,6 +1028,7 @@ void AddOutlandScripts()
|
||||
AddSC_boss_pandemonius();
|
||||
AddSC_boss_darkweaver_syth(); //Auchindoun Sekketh Halls
|
||||
AddSC_boss_talon_king_ikiss();
|
||||
AddSC_boss_anzu();
|
||||
AddSC_instance_sethekk_halls();
|
||||
AddSC_instance_shadow_labyrinth(); //Auchindoun Shadow Labyrinth
|
||||
AddSC_boss_ambassador_hellmaw();
|
||||
|
||||
172
src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp
Normal file
172
src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp
Normal file
@@ -0,0 +1,172 @@
|
||||
/*
|
||||
* Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; either version 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*
|
||||
Name: Boss_Anzu
|
||||
%Complete: 80%
|
||||
Comment:
|
||||
Category: Auchindoun, Sethekk Halls
|
||||
*/
|
||||
|
||||
#include "ScriptMgr.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "sethekk_halls.h"
|
||||
|
||||
enum Says
|
||||
{
|
||||
SAY_SUMMON_BROOD = 0,
|
||||
SAY_SPELL_BOMB = 1
|
||||
};
|
||||
|
||||
enum Spells
|
||||
{
|
||||
SPELL_PARALYZING_SCREECH = 40184,
|
||||
SPELL_SPELL_BOMB = 40303,
|
||||
SPELL_CYCLONE_OF_FEATHERS = 40321,
|
||||
SPELL_BANISH_SELF = 42354,
|
||||
SPELL_FLESH_RIP = 40199
|
||||
};
|
||||
|
||||
enum Events
|
||||
{
|
||||
EVENT_PARALYZING_SCREECH = 1,
|
||||
EVENT_SPELL_BOMB = 2,
|
||||
EVENT_CYCLONE_OF_FEATHERS = 3,
|
||||
EVENT_SUMMON = 4
|
||||
};
|
||||
|
||||
Position const PosSummonBrood[7] =
|
||||
{
|
||||
{ -118.1717f, 284.5299f, 121.2287f, 2.775074f },
|
||||
{ -98.15528f, 293.4469f, 109.2385f, 0.174533f },
|
||||
{ -99.70160f, 270.1699f, 98.27389f, 6.178465f },
|
||||
{ -69.25543f, 303.0768f, 97.84479f, 5.532694f },
|
||||
{ -87.59662f, 263.5181f, 92.70478f, 1.658063f },
|
||||
{ -73.54323f, 276.6267f, 94.25807f, 2.802979f },
|
||||
{ -81.70527f, 280.8776f, 44.58830f, 0.526849f },
|
||||
};
|
||||
|
||||
class boss_anzu : public CreatureScript
|
||||
{
|
||||
public:
|
||||
boss_anzu() : CreatureScript("boss_anzu") { }
|
||||
|
||||
struct boss_anzuAI : public BossAI
|
||||
{
|
||||
boss_anzuAI(Creature* creature) : BossAI(creature, DATA_ANZU) { }
|
||||
|
||||
void Reset() OVERRIDE
|
||||
{
|
||||
summon66 = false;
|
||||
summon33 = false;
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* /*who*/) OVERRIDE
|
||||
{
|
||||
events.ScheduleEvent(EVENT_PARALYZING_SCREECH, 14000);
|
||||
events.ScheduleEvent(EVENT_CYCLONE_OF_FEATHERS, 5000);
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) OVERRIDE
|
||||
{
|
||||
if (instance)
|
||||
instance->SetData(DATA_ANZU, DONE);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* /*victim*/) OVERRIDE {}
|
||||
|
||||
void UpdateAI(uint32 diff) OVERRIDE
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
events.Update(diff);
|
||||
|
||||
while (uint32 eventId = events.ExecuteEvent())
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_PARALYZING_SCREECH:
|
||||
DoCastVictim(SPELL_PARALYZING_SCREECH);
|
||||
events.ScheduleEvent(EVENT_PARALYZING_SCREECH, 26000);
|
||||
break;
|
||||
|
||||
case EVENT_CYCLONE_OF_FEATHERS:
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
|
||||
DoCast(target, SPELL_CYCLONE_OF_FEATHERS);
|
||||
events.ScheduleEvent(EVENT_CYCLONE_OF_FEATHERS, 21000);
|
||||
break;
|
||||
case EVENT_SUMMON:
|
||||
// TODO: Add pathing for Brood of Anzu
|
||||
me->SummonCreature(NPC_BROOD_OF_ANZU, PosSummonBrood[0], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 46000);
|
||||
me->SummonCreature(NPC_BROOD_OF_ANZU, PosSummonBrood[1], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 46000);
|
||||
me->SummonCreature(NPC_BROOD_OF_ANZU, PosSummonBrood[2], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 46000);
|
||||
me->SummonCreature(NPC_BROOD_OF_ANZU, PosSummonBrood[3], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 46000);
|
||||
me->SummonCreature(NPC_BROOD_OF_ANZU, PosSummonBrood[4], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 46000);
|
||||
me->SummonCreature(NPC_BROOD_OF_ANZU, PosSummonBrood[5], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 46000);
|
||||
me->SummonCreature(NPC_BROOD_OF_ANZU, PosSummonBrood[6], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 46000);
|
||||
DoCast(me, SPELL_BANISH_SELF);
|
||||
events.ScheduleEvent(EVENT_SPELL_BOMB, 12000);
|
||||
break;
|
||||
case EVENT_SPELL_BOMB:
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
|
||||
{
|
||||
if (target->getPowerType() == POWER_MANA)
|
||||
{
|
||||
DoCast(target, SPELL_SPELL_BOMB);
|
||||
Talk(SAY_SPELL_BOMB, target->GetGUID());
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (HealthBelowPct(66) && !summon66)
|
||||
{
|
||||
summon66 = true;
|
||||
Talk(SAY_SUMMON_BROOD);
|
||||
events.ScheduleEvent(EVENT_SUMMON, 3000);
|
||||
}
|
||||
|
||||
if (HealthBelowPct(33) && !summon33)
|
||||
{
|
||||
summon33 = true;
|
||||
Talk(SAY_SUMMON_BROOD);
|
||||
events.ScheduleEvent(EVENT_SUMMON, 3000);
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
private:
|
||||
bool summon66;
|
||||
bool summon33;
|
||||
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const OVERRIDE
|
||||
{
|
||||
return new boss_anzuAI(creature);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_anzu()
|
||||
{
|
||||
new boss_anzu();
|
||||
}
|
||||
@@ -25,14 +25,18 @@ EndScriptData */
|
||||
|
||||
#include "ScriptMgr.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "sethekk_halls.h"
|
||||
|
||||
enum DarkweaverSyth
|
||||
enum Says
|
||||
{
|
||||
SAY_SUMMON = 0,
|
||||
SAY_AGGRO = 1,
|
||||
SAY_SLAY = 2,
|
||||
SAY_DEATH = 3,
|
||||
SAY_DEATH = 3
|
||||
};
|
||||
|
||||
enum Spells
|
||||
{
|
||||
SPELL_FROST_SHOCK = 21401, //37865
|
||||
SPELL_FLAME_SHOCK = 34354,
|
||||
SPELL_SHADOW_SHOCK = 30138,
|
||||
@@ -51,40 +55,26 @@ enum DarkweaverSyth
|
||||
SPELL_SHADOW_BUFFET = 33529
|
||||
};
|
||||
|
||||
enum Events
|
||||
{
|
||||
EVENT_FLAME_SHOCK = 1,
|
||||
EVENT_ARCANE_SHOCK = 2,
|
||||
EVENT_FROST_SHOCK = 3,
|
||||
EVENT_SHADOW_SHOCK = 4,
|
||||
EVENT_CHAIN_LIGHTNING = 5
|
||||
};
|
||||
|
||||
class boss_darkweaver_syth : public CreatureScript
|
||||
{
|
||||
public:
|
||||
boss_darkweaver_syth() : CreatureScript("boss_darkweaver_syth") { }
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const OVERRIDE
|
||||
struct boss_darkweaver_sythAI : public BossAI
|
||||
{
|
||||
return new boss_darkweaver_sythAI(creature);
|
||||
}
|
||||
|
||||
struct boss_darkweaver_sythAI : public ScriptedAI
|
||||
{
|
||||
boss_darkweaver_sythAI(Creature* creature) : ScriptedAI(creature)
|
||||
{
|
||||
}
|
||||
|
||||
uint32 flameshock_timer;
|
||||
uint32 arcaneshock_timer;
|
||||
uint32 frostshock_timer;
|
||||
uint32 shadowshock_timer;
|
||||
uint32 chainlightning_timer;
|
||||
|
||||
bool summon90;
|
||||
bool summon50;
|
||||
bool summon10;
|
||||
boss_darkweaver_sythAI(Creature* creature) : BossAI(creature, DATA_DARKWEAVER_SYTH) { }
|
||||
|
||||
void Reset() OVERRIDE
|
||||
{
|
||||
flameshock_timer = 2000;
|
||||
arcaneshock_timer = 4000;
|
||||
frostshock_timer = 6000;
|
||||
shadowshock_timer = 8000;
|
||||
chainlightning_timer = 15000;
|
||||
|
||||
summon90 = false;
|
||||
summon50 = false;
|
||||
summon10 = false;
|
||||
@@ -92,12 +82,21 @@ public:
|
||||
|
||||
void EnterCombat(Unit* /*who*/) OVERRIDE
|
||||
{
|
||||
events.ScheduleEvent(EVENT_FLAME_SHOCK, 2000);
|
||||
events.ScheduleEvent(EVENT_ARCANE_SHOCK, 4000);
|
||||
events.ScheduleEvent(EVENT_FROST_SHOCK, 6000);
|
||||
events.ScheduleEvent(EVENT_SHADOW_SHOCK, 8000);
|
||||
events.ScheduleEvent(EVENT_CHAIN_LIGHTNING, 15000);
|
||||
|
||||
Talk(SAY_AGGRO);
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) OVERRIDE
|
||||
{
|
||||
Talk(SAY_DEATH);
|
||||
|
||||
if (instance)
|
||||
instance->SetData(DATA_DARKWEAVER_SYTH, DONE);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* /*victim*/) OVERRIDE
|
||||
@@ -132,6 +131,42 @@ public:
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
events.Update(diff);
|
||||
|
||||
while (uint32 eventId = events.ExecuteEvent())
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_FLAME_SHOCK:
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
|
||||
DoCast(target, SPELL_FLAME_SHOCK);
|
||||
events.ScheduleEvent(EVENT_FLAME_SHOCK, urand(10000, 15000));
|
||||
break;
|
||||
case EVENT_ARCANE_SHOCK:
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
|
||||
DoCast(target, SPELL_ARCANE_SHOCK);
|
||||
events.ScheduleEvent(EVENT_ARCANE_SHOCK, urand(10000, 15000));
|
||||
break;
|
||||
case EVENT_FROST_SHOCK:
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
|
||||
DoCast(target, SPELL_FROST_SHOCK);
|
||||
events.ScheduleEvent(EVENT_FROST_SHOCK, urand(10000, 15000));
|
||||
break;
|
||||
case EVENT_SHADOW_SHOCK:
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
|
||||
DoCast(target, SPELL_SHADOW_SHOCK);
|
||||
events.ScheduleEvent(EVENT_SHADOW_SHOCK, urand(10000, 15000));
|
||||
break;
|
||||
case EVENT_CHAIN_LIGHTNING:
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
|
||||
DoCast(target, SPELL_CHAIN_LIGHTNING);
|
||||
events.ScheduleEvent(EVENT_CHAIN_LIGHTNING, 25000);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (HealthBelowPct(90) && !summon90)
|
||||
{
|
||||
SythSummoning();
|
||||
@@ -150,50 +185,19 @@ public:
|
||||
summon10 = true;
|
||||
}
|
||||
|
||||
if (flameshock_timer <= diff)
|
||||
{
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
|
||||
DoCast(target, SPELL_FLAME_SHOCK);
|
||||
|
||||
flameshock_timer = urand(10000, 15000);
|
||||
} else flameshock_timer -= diff;
|
||||
|
||||
if (arcaneshock_timer <= diff)
|
||||
{
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
|
||||
DoCast(target, SPELL_ARCANE_SHOCK);
|
||||
|
||||
arcaneshock_timer = urand(10000, 15000);
|
||||
} else arcaneshock_timer -= diff;
|
||||
|
||||
if (frostshock_timer <= diff)
|
||||
{
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
|
||||
DoCast(target, SPELL_FROST_SHOCK);
|
||||
|
||||
frostshock_timer = urand(10000, 15000);
|
||||
} else frostshock_timer -= diff;
|
||||
|
||||
if (shadowshock_timer <= diff)
|
||||
{
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
|
||||
DoCast(target, SPELL_SHADOW_SHOCK);
|
||||
|
||||
shadowshock_timer = urand(10000, 15000);
|
||||
} else shadowshock_timer -= diff;
|
||||
|
||||
if (chainlightning_timer <= diff)
|
||||
{
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
|
||||
DoCast(target, SPELL_CHAIN_LIGHTNING);
|
||||
|
||||
chainlightning_timer = 25000;
|
||||
} else chainlightning_timer -= diff;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
private:
|
||||
bool summon90;
|
||||
bool summon50;
|
||||
bool summon10;
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const OVERRIDE
|
||||
{
|
||||
return new boss_darkweaver_sythAI(creature);
|
||||
}
|
||||
};
|
||||
|
||||
/* ELEMENTALS */
|
||||
|
||||
@@ -27,14 +27,17 @@ EndScriptData */
|
||||
#include "ScriptedCreature.h"
|
||||
#include "sethekk_halls.h"
|
||||
|
||||
enum TailonkingIkiss
|
||||
enum Says
|
||||
{
|
||||
SAY_INTRO = 0,
|
||||
SAY_AGGRO = 1,
|
||||
SAY_SLAY = 2,
|
||||
SAY_DEATH = 3,
|
||||
EMOTE_ARCANE_EXP = 4,
|
||||
EMOTE_ARCANE_EXP = 4
|
||||
};
|
||||
|
||||
enum Spells
|
||||
{
|
||||
SPELL_BLINK = 38194,
|
||||
SPELL_BLINK_TELEPORT = 38203,
|
||||
SPELL_MANA_SHIELD = 38151,
|
||||
@@ -53,28 +56,9 @@ class boss_talon_king_ikiss : public CreatureScript
|
||||
public:
|
||||
boss_talon_king_ikiss() : CreatureScript("boss_talon_king_ikiss") { }
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const OVERRIDE
|
||||
struct boss_talon_king_ikissAI : public BossAI
|
||||
{
|
||||
return new boss_talon_king_ikissAI(creature);
|
||||
}
|
||||
|
||||
struct boss_talon_king_ikissAI : public ScriptedAI
|
||||
{
|
||||
boss_talon_king_ikissAI(Creature* creature) : ScriptedAI(creature)
|
||||
{
|
||||
instance = creature->GetInstanceScript();
|
||||
}
|
||||
|
||||
InstanceScript* instance;
|
||||
|
||||
uint32 ArcaneVolley_Timer;
|
||||
uint32 Sheep_Timer;
|
||||
uint32 Blink_Timer;
|
||||
uint32 Slow_Timer;
|
||||
|
||||
bool ManaShield;
|
||||
bool Blink;
|
||||
bool Intro;
|
||||
boss_talon_king_ikissAI(Creature* creature) : BossAI(creature, DATA_TALON_KING_IKISS) { }
|
||||
|
||||
void Reset() OVERRIDE
|
||||
{
|
||||
@@ -120,7 +104,7 @@ public:
|
||||
Talk(SAY_DEATH);
|
||||
|
||||
if (instance)
|
||||
instance->SetData(DATA_IKISSDOOREVENT, DONE);
|
||||
instance->SetData(DATA_TALON_KING_IKISS, DONE);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* /*victim*/) OVERRIDE
|
||||
@@ -204,8 +188,22 @@ public:
|
||||
if (!Blink)
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
private:
|
||||
uint32 ArcaneVolley_Timer;
|
||||
uint32 Sheep_Timer;
|
||||
uint32 Blink_Timer;
|
||||
uint32 Slow_Timer;
|
||||
|
||||
bool ManaShield;
|
||||
bool Blink;
|
||||
bool Intro;
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const OVERRIDE
|
||||
{
|
||||
return new boss_talon_king_ikissAI(creature);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_talon_king_ikiss()
|
||||
|
||||
@@ -27,16 +27,6 @@ EndScriptData */
|
||||
#include "InstanceScript.h"
|
||||
#include "sethekk_halls.h"
|
||||
|
||||
enum Creatures
|
||||
{
|
||||
NPC_ANZU = 23035
|
||||
};
|
||||
|
||||
enum GameObjects
|
||||
{
|
||||
GO_IKISS_DOOR = 177203
|
||||
};
|
||||
|
||||
class instance_sethekk_halls : public InstanceMapScript
|
||||
{
|
||||
public:
|
||||
@@ -49,49 +39,102 @@ public:
|
||||
|
||||
struct instance_sethekk_halls_InstanceMapScript : public InstanceScript
|
||||
{
|
||||
instance_sethekk_halls_InstanceMapScript(Map* map) : InstanceScript(map) {}
|
||||
|
||||
uint32 AnzuEncounter;
|
||||
uint64 m_uiIkissDoorGUID;
|
||||
instance_sethekk_halls_InstanceMapScript(Map* map) : InstanceScript(map)
|
||||
{
|
||||
SetBossNumber(EncounterCount);
|
||||
}
|
||||
|
||||
void Initialize()
|
||||
{
|
||||
AnzuEncounter = NOT_STARTED;
|
||||
m_uiIkissDoorGUID = 0;
|
||||
SetBossState(DATA_ANZU, NOT_STARTED);
|
||||
iIkissDoorGUID = 0;
|
||||
}
|
||||
|
||||
void OnCreatureCreate(Creature* creature)
|
||||
{
|
||||
if (creature->GetEntry() == NPC_ANZU)
|
||||
{
|
||||
if (AnzuEncounter >= IN_PROGRESS)
|
||||
if (GetBossState(DATA_ANZU) == DONE)
|
||||
creature->DisappearAndDie();
|
||||
else
|
||||
AnzuEncounter = IN_PROGRESS;
|
||||
SetBossState(DATA_ANZU, IN_PROGRESS);
|
||||
}
|
||||
}
|
||||
|
||||
void OnGameObjectCreate(GameObject* go)
|
||||
{
|
||||
if (go->GetEntry() == GO_IKISS_DOOR)
|
||||
m_uiIkissDoorGUID = go->GetGUID();
|
||||
iIkissDoorGUID = go->GetGUID();
|
||||
}
|
||||
|
||||
void SetData(uint32 type, uint32 data) OVERRIDE
|
||||
bool SetBossState(uint32 type, EncounterState state)
|
||||
{
|
||||
if (!InstanceScript::SetBossState(type, state))
|
||||
return false;
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case DATA_IKISSDOOREVENT:
|
||||
if (data == DONE)
|
||||
DoUseDoorOrButton(m_uiIkissDoorGUID, DAY*IN_MILLISECONDS);
|
||||
case DATA_DARKWEAVER_SYTH:
|
||||
break;
|
||||
case TYPE_ANZU_ENCOUNTER:
|
||||
AnzuEncounter = data;
|
||||
case DATA_TALON_KING_IKISS:
|
||||
if (state == DONE)
|
||||
DoUseDoorOrButton(iIkissDoorGUID, DAY*IN_MILLISECONDS);
|
||||
break;
|
||||
case DATA_ANZU:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
std::string GetSaveData()
|
||||
{
|
||||
OUT_SAVE_INST_DATA;
|
||||
|
||||
std::ostringstream saveStream;
|
||||
saveStream << "S H " << GetBossSaveData();
|
||||
|
||||
OUT_SAVE_INST_DATA_COMPLETE;
|
||||
return saveStream.str();
|
||||
}
|
||||
|
||||
void Load(const char* str)
|
||||
{
|
||||
if (!str)
|
||||
{
|
||||
OUT_LOAD_INST_DATA_FAIL;
|
||||
return;
|
||||
}
|
||||
|
||||
OUT_LOAD_INST_DATA(str);
|
||||
|
||||
char dataHead1, dataHead2;
|
||||
|
||||
std::istringstream loadStream(str);
|
||||
loadStream >> dataHead1 >> dataHead2;
|
||||
|
||||
if (dataHead1 == 'S' && dataHead2 == 'H')
|
||||
{
|
||||
for (uint32 i = 0; i < EncounterCount; ++i)
|
||||
{
|
||||
uint32 tmpState;
|
||||
loadStream >> tmpState;
|
||||
if (tmpState == IN_PROGRESS || tmpState > SPECIAL)
|
||||
tmpState = NOT_STARTED;
|
||||
SetBossState(i, EncounterState(tmpState));
|
||||
}
|
||||
}
|
||||
else
|
||||
OUT_LOAD_INST_DATA_FAIL;
|
||||
|
||||
OUT_LOAD_INST_DATA_COMPLETE;
|
||||
}
|
||||
|
||||
protected:
|
||||
uint64 iIkissDoorGUID;
|
||||
};
|
||||
};
|
||||
|
||||
void AddSC_instance_sethekk_halls()
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/>
|
||||
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
@@ -19,10 +18,24 @@
|
||||
#ifndef DEF_SETHEKK_HALLS_H
|
||||
#define DEF_SETHEKK_HALLS_H
|
||||
|
||||
uint32 const EncounterCount = 3;
|
||||
|
||||
enum DataTypes
|
||||
{
|
||||
DATA_IKISSDOOREVENT = 1,
|
||||
TYPE_ANZU_ENCOUNTER = 2,
|
||||
DATA_DARKWEAVER_SYTH = 0,
|
||||
DATA_TALON_KING_IKISS = 1,
|
||||
DATA_ANZU = 2
|
||||
};
|
||||
#endif
|
||||
|
||||
enum CreatureIds
|
||||
{
|
||||
NPC_ANZU = 23035,
|
||||
NPC_BROOD_OF_ANZU = 23132
|
||||
};
|
||||
|
||||
enum GameObjectIds
|
||||
{
|
||||
GO_IKISS_DOOR = 177203
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -76,6 +76,7 @@ set(scripts_STAT_SRCS
|
||||
Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp
|
||||
Outland/Auchindoun/SethekkHalls/boss_tailonking_ikiss.cpp
|
||||
Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp
|
||||
Outland/Auchindoun/SethekkHalls/boss_anzu.cpp
|
||||
Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp
|
||||
Outland/Auchindoun/SethekkHalls/sethekk_halls.h
|
||||
Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp
|
||||
|
||||
Reference in New Issue
Block a user