aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Instances/InstanceScript.h16
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/ahnkahet.h84
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_amanitar.cpp177
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp53
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp12
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp37
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp81
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp510
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/AzjolNerub/azjol_nerub.h9
-rw-r--r--src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h9
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/halls_of_lightning.h9
-rw-r--r--src/server/scripts/Outland/BlackTemple/black_temple.h6
12 files changed, 471 insertions, 532 deletions
diff --git a/src/server/game/Instances/InstanceScript.h b/src/server/game/Instances/InstanceScript.h
index 1e349207b2f..943ae672046 100644
--- a/src/server/game/Instances/InstanceScript.h
+++ b/src/server/game/Instances/InstanceScript.h
@@ -22,8 +22,6 @@
#include "ZoneScript.h"
#include "World.h"
#include "ObjectMgr.h"
-//#include "GameObject.h"
-//#include "Map.h"
#define OUT_SAVE_INST_DATA TC_LOG_DEBUG(LOG_FILTER_TSCR, "Saving Instance Data for Instance %s (Map %d, Instance Id %d)", instance->GetMapName(), instance->GetId(), instance->GetInstanceId())
#define OUT_SAVE_INST_DATA_COMPLETE TC_LOG_DEBUG(LOG_FILTER_TSCR, "Saving Instance Data for Instance %s (Map %d, Instance Id %d) completed.", instance->GetMapName(), instance->GetId(), instance->GetInstanceId())
@@ -235,4 +233,16 @@ class InstanceScript : public ZoneScript
MinionInfoMap minions;
uint32 completedEncounters; // completed encounter mask, bit indexes are DungeonEncounter.dbc boss numbers, used for packets
};
-#endif
+
+template<class AI, class T>
+AI* GetInstanceAI(T* obj, char const* scriptName)
+{
+ if (InstanceMap* instance = obj->GetMap()->ToInstanceMap())
+ if (instance->GetInstanceScript())
+ if (instance->GetScriptId() == sObjectMgr->GetScriptId(scriptName))
+ return new AI(obj);
+
+ return NULL;
+}
+
+#endif // TRINITY_INSTANCE_DATA_H
diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/ahnkahet.h b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/ahnkahet.h
index 8473ee1d39d..5b8cf0a4d44 100644
--- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/ahnkahet.h
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/ahnkahet.h
@@ -18,33 +18,71 @@
#ifndef AHNKAHET_H_
#define AHNKAHET_H_
-enum Data64
+#define AhnKahetScriptName "instance_ahnkahet"
+
+uint32 const EncounterCount = 5;
+
+enum DataTypes
+{
+ // Encounter States/Boss GUIDs
+ DATA_ELDER_NADOX = 0,
+ DATA_PRINCE_TALDARAM = 1,
+ DATA_JEDOGA_SHADOWSEEKER = 2,
+ DATA_AMANITAR = 3,
+ DATA_HERALD_VOLAZJ = 4,
+
+ // Additional Data
+ DATA_SPHERE_1 = 5,
+ DATA_SPHERE_2 = 6,
+ DATA_PRINCE_TALDARAM_PLATFORM = 7,
+ DATA_PL_JEDOGA_TARGET = 8,
+ DATA_ADD_JEDOGA_OPFER = 9,
+ DATA_ADD_JEDOGA_INITIAND = 10,
+ DATA_JEDOGA_TRIGGER_SWITCH = 11,
+ DATA_JEDOGA_RESET_INITIANDS = 12,
+ DATA_ALL_INITIAND_DEAD = 13
+};
+
+enum CreatureIds
{
- DATA_ELDER_NADOX,
- DATA_PRINCE_TALDARAM,
- DATA_JEDOGA_SHADOWSEEKER,
- DATA_HERALD_VOLAZJ,
- DATA_AMANITAR,
- DATA_SPHERE1,
- DATA_SPHERE2,
- DATA_PRINCE_TALDARAM_PLATFORM,
- DATA_PL_JEDOGA_TARGET,
- DATA_ADD_JEDOGA_OPFER,
- DATA_ADD_JEDOGA_INITIAND
+ NPC_ELDER_NADOX = 29309,
+ NPC_PRINCE_TALDARAM = 29308,
+ NPC_JEDOGA_SHADOWSEEKER = 29310,
+ NPC_AMANITAR = 30258,
+ NPC_HERALD_VOLAZJ = 29311,
+
+ // Elder Nadox
+ NPC_AHNKAHAR_GUARDIAN = 30176,
+ NPC_AHNKAHAR_SWARMER = 30178,
+
+ // Jedoga Shadowseeker
+ NPC_INITIAND = 30114,
+ NPC_JEDOGA_CONTROLLER = 30181,
+
+ // Amanitar
+ NPC_HEALTHY_MUSHROOM = 30391,
+ NPC_POISONOUS_MUSHROOM = 30435,
+
+ // Herald Volazj
+ //NPC_TWISTED_VISAGE_1 = 30621,
+ //NPC_TWISTED_VISAGE_2 = 30622,
+ //NPC_TWISTED_VISAGE_3 = 30623,
+ //NPC_TWISTED_VISAGE_4 = 30624,
+ NPC_TWISTED_VISAGE = 30625
};
-enum Data
+enum GameObjectIds
{
- DATA_ELDER_NADOX_EVENT,
- DATA_PRINCE_TALDARAM_EVENT,
- DATA_JEDOGA_SHADOWSEEKER_EVENT,
- DATA_HERALD_VOLAZJ_EVENT,
- DATA_AMANITAR_EVENT,
- DATA_SPHERE1_EVENT,
- DATA_SPHERE2_EVENT,
- DATA_JEDOGA_TRIGGER_SWITCH,
- DATA_JEDOGA_RESET_INITIANDS,
- DATA_ALL_INITIAND_DEAD
+ GO_PRINCE_TALDARAM_GATE = 192236,
+ GO_PRINCE_TALDARAM_PLATFORM = 193564,
+ GO_SPHERE_1 = 193093,
+ GO_SPHERE_2 = 193094
};
+template<class AI>
+AI* GetAhnKahetAI(Creature* creature)
+{
+ return GetInstanceAI<AI>(creature, AhnKahetScriptName);
+}
+
#endif // AHNKAHET_H_
diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_amanitar.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_amanitar.cpp
index 7a20d1f581c..7132ba825f1 100644
--- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_amanitar.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_amanitar.cpp
@@ -35,8 +35,6 @@ enum Spells
enum Creatures
{
- NPC_HEALTHY_MUSHROOM = 30391,
- NPC_POISONOUS_MUSHROOM = 30435,
NPC_TRIGGER = 19656
};
@@ -52,129 +50,112 @@ enum Events
class boss_amanitar : public CreatureScript
{
-public:
- boss_amanitar() : CreatureScript("boss_amanitar") { }
-
- struct boss_amanitarAI : public BossAI
- {
- boss_amanitarAI(Creature* creature) : BossAI(creature, DATA_AMANITAR) { }
+ public:
+ boss_amanitar() : CreatureScript("boss_amanitar") { }
- void Reset() OVERRIDE
+ struct boss_amanitarAI : public BossAI
{
- _Reset();
+ boss_amanitarAI(Creature* creature) : BossAI(creature, DATA_AMANITAR) { }
- me->SetMeleeDamageSchool(SPELL_SCHOOL_NATURE);
- me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, true);
- summons.DespawnAll();
+ void Reset() OVERRIDE
+ {
+ _Reset();
+ me->SetMeleeDamageSchool(SPELL_SCHOOL_NATURE);
+ me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, true);
+ }
- if (instance)
+ void EnterCombat(Unit* /*who*/) OVERRIDE
{
- instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_MINI);
- instance->SetData(DATA_AMANITAR_EVENT, NOT_STARTED);
+ _EnterCombat();
+
+ events.ScheduleEvent(EVENT_ROOT, urand(5, 9) * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_BASH, urand(10, 14) * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_BOLT, urand(15, 20) * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_MINI, urand(12, 18) * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_SPAWN, 5 * IN_MILLISECONDS);
}
- }
- void JustDied(Unit* /*Killer*/) OVERRIDE
- {
- if (instance)
+ void JustDied(Unit* /*killer*/) OVERRIDE
{
_JustDied();
- instance->SetData(DATA_AMANITAR_EVENT, DONE);
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_MINI);
- summons.DespawnAll();
}
- }
-
- void EnterCombat(Unit* /*who*/) OVERRIDE
- {
- _EnterCombat();
-
- events.ScheduleEvent(EVENT_ROOT, urand(5, 9) * IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_BASH, urand(10, 14) * IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_BOLT, urand(15, 20) * IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_MINI, urand(12, 18) * IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_SPAWN, 5 * IN_MILLISECONDS);
- me->SetInCombatWithZone();
- if (instance)
- instance->SetData(DATA_AMANITAR_EVENT, IN_PROGRESS);
- }
-
- void SpawnAdds()
- {
- uint8 u = 0;
-
- for (uint8 i = 0; i < 30; ++i)
+ void SpawnAdds()
{
- Position pos;
- me->GetPosition(&pos);
- me->GetRandomNearPosition(pos, 30.0f);
- pos.m_positionZ = me->GetMap()->GetHeight(pos.GetPositionX(), pos.GetPositionY(), MAX_HEIGHT) + 2.0f;
+ uint8 u = 0;
- if (Creature* trigger = me->SummonCreature(NPC_TRIGGER, pos))
+ for (uint8 i = 0; i < 30; ++i)
{
- Creature* temp1 = trigger->FindNearestCreature(NPC_HEALTHY_MUSHROOM, 4.0f, true);
- Creature* temp2 = trigger->FindNearestCreature(NPC_POISONOUS_MUSHROOM, 4.0f, true);
- if (temp1 || temp2)
- {
- trigger->DisappearAndDie();
- }
- else
+ Position pos;
+ me->GetPosition(&pos);
+ me->GetRandomNearPosition(pos, 30.0f);
+ pos.m_positionZ = me->GetMap()->GetHeight(pos.GetPositionX(), pos.GetPositionY(), MAX_HEIGHT) + 2.0f;
+
+ if (Creature* trigger = me->SummonCreature(NPC_TRIGGER, pos))
{
- u = 1 - u;
- trigger->DisappearAndDie();
- me->SummonCreature(u > 0 ? NPC_POISONOUS_MUSHROOM : NPC_HEALTHY_MUSHROOM, pos, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 60 * IN_MILLISECONDS);
+ Creature* temp1 = trigger->FindNearestCreature(NPC_HEALTHY_MUSHROOM, 4.0f, true);
+ Creature* temp2 = trigger->FindNearestCreature(NPC_POISONOUS_MUSHROOM, 4.0f, true);
+ if (temp1 || temp2)
+ {
+ trigger->DisappearAndDie();
+ }
+ else
+ {
+ u = 1 - u;
+ trigger->DisappearAndDie();
+ me->SummonCreature(u > 0 ? NPC_POISONOUS_MUSHROOM : NPC_HEALTHY_MUSHROOM, pos, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 60 * IN_MILLISECONDS);
+ }
}
}
}
- }
- void UpdateAI(uint32 diff) OVERRIDE
- {
- if (!UpdateVictim())
- return;
+ void UpdateAI(uint32 diff) OVERRIDE
+ {
+ if (!UpdateVictim())
+ return;
- events.Update(diff);
+ events.Update(diff);
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
+ while (uint32 eventId = events.ExecuteEvent())
{
- case EVENT_SPAWN:
- SpawnAdds();
- events.ScheduleEvent(EVENT_SPAWN, 20 * IN_MILLISECONDS);
- break;
- case EVENT_MINI:
- DoCast(SPELL_MINI);
- events.ScheduleEvent(EVENT_MINI, urand(25, 30) * IN_MILLISECONDS);
- break;
- case EVENT_ROOT:
- DoCast(SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true), SPELL_ENTANGLING_ROOTS, true);
- events.ScheduleEvent(EVENT_ROOT, urand(10, 15) * IN_MILLISECONDS);
- break;
- case EVENT_BASH:
- DoCastVictim(SPELL_BASH);
- events.ScheduleEvent(EVENT_BASH, urand(7, 12) * IN_MILLISECONDS);
- break;
- case EVENT_BOLT:
- DoCast(SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true), SPELL_VENOM_BOLT_VOLLEY, true);
- events.ScheduleEvent(EVENT_BOLT, urand(18, 22) * IN_MILLISECONDS);
- break;
- default:
- break;
+ switch (eventId)
+ {
+ case EVENT_SPAWN:
+ SpawnAdds();
+ events.ScheduleEvent(EVENT_SPAWN, 20 * IN_MILLISECONDS);
+ break;
+ case EVENT_MINI:
+ DoCast(SPELL_MINI);
+ events.ScheduleEvent(EVENT_MINI, urand(25, 30) * IN_MILLISECONDS);
+ break;
+ case EVENT_ROOT:
+ DoCast(SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true), SPELL_ENTANGLING_ROOTS, true);
+ events.ScheduleEvent(EVENT_ROOT, urand(10, 15) * IN_MILLISECONDS);
+ break;
+ case EVENT_BASH:
+ DoCastVictim(SPELL_BASH);
+ events.ScheduleEvent(EVENT_BASH, urand(7, 12) * IN_MILLISECONDS);
+ break;
+ case EVENT_BOLT:
+ DoCast(SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true), SPELL_VENOM_BOLT_VOLLEY, true);
+ events.ScheduleEvent(EVENT_BOLT, urand(18, 22) * IN_MILLISECONDS);
+ break;
+ default:
+ break;
+ }
}
+ DoMeleeAttackIfReady();
}
- DoMeleeAttackIfReady();
- }
- };
+ };
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new boss_amanitarAI(creature);
- }
+ CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ {
+ return GetAhnKahetAI<boss_amanitarAI>(creature);
+ }
};
class npc_amanitar_mushrooms : public CreatureScript
diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp
index 057ee41a3a0..c549de9dda1 100644
--- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp
@@ -41,12 +41,6 @@ enum Spells
SPELL_GUARDIAN_AURA = 56151
};
-enum Creatures
-{
- NPC_AHNKAHAR_SWARMER = 30178,
- NPC_AHNKAHAR_GUARDIAN = 30176
-};
-
enum Events
{
EVENT_PLAGUE = 1,
@@ -62,38 +56,22 @@ class boss_elder_nadox : public CreatureScript
public:
boss_elder_nadox() : CreatureScript("boss_elder_nadox") { }
- struct boss_elder_nadoxAI : public ScriptedAI
+ struct boss_elder_nadoxAI : public BossAI
{
- boss_elder_nadoxAI(Creature* creature) : ScriptedAI(creature), summons(me)
- {
- instance = creature->GetInstanceScript();
- }
-
- bool GuardianDied;
- uint8 AmountHealthModifier;
- InstanceScript* instance;
- SummonList summons;
- EventMap events;
+ boss_elder_nadoxAI(Creature* creature) : BossAI(creature, DATA_ELDER_NADOX) { }
void Reset() OVERRIDE
{
- events.Reset();
- summons.DespawnAll();
-
+ _Reset();
AmountHealthModifier = 1;
GuardianDied = false;
-
- if (instance)
- instance->SetData(DATA_ELDER_NADOX_EVENT, NOT_STARTED);
}
void EnterCombat(Unit* /*who*/) OVERRIDE
{
+ _EnterCombat();
Talk(SAY_AGGRO);
- if (instance)
- instance->SetData(DATA_ELDER_NADOX_EVENT, IN_PROGRESS);
-
events.ScheduleEvent(EVENT_PLAGUE, 13 * IN_MILLISECONDS);
events.ScheduleEvent(EVENT_SUMMON_SWARMER, 10 * IN_MILLISECONDS);
@@ -104,12 +82,6 @@ class boss_elder_nadox : public CreatureScript
}
}
- void JustSummoned(Creature* summon) OVERRIDE
- {
- summons.Summon(summon);
- summon->AI()->DoZoneInCombat();
- }
-
void SummonedCreatureDies(Creature* summon, Unit* /*killer*/) OVERRIDE
{
if (summon->GetEntry() == NPC_AHNKAHAR_GUARDIAN)
@@ -124,19 +96,16 @@ class boss_elder_nadox : public CreatureScript
return 0;
}
- void KilledUnit(Unit* /*victim*/) OVERRIDE
+ void KilledUnit(Unit* who) OVERRIDE
{
- Talk(SAY_SLAY);
+ if (who->GetTypeId() == TYPEID_PLAYER)
+ Talk(SAY_SLAY);
}
void JustDied(Unit* /*killer*/) OVERRIDE
{
+ _JustDied();
Talk(SAY_DEATH);
-
- summons.DespawnAll();
-
- if (instance)
- instance->SetData(DATA_ELDER_NADOX_EVENT, DONE);
}
void UpdateAI(uint32 diff) OVERRIDE
@@ -185,11 +154,15 @@ class boss_elder_nadox : public CreatureScript
DoMeleeAttackIfReady();
}
+
+ private:
+ bool GuardianDied;
+ uint8 AmountHealthModifier;
};
CreatureAI* GetAI(Creature* creature) const OVERRIDE
{
- return new boss_elder_nadoxAI(creature);
+ return GetAhnKahetAI<boss_elder_nadoxAI>(creature);
}
};
diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp
index 481df79c890..5bb68a4c886 100644
--- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp
@@ -41,12 +41,6 @@ enum Spells
SPELL_INSANITY_PHASING_5 = 57512
};
-enum Creatures
-{
- NPC_TWISTED_VISAGE = 30625
-};
-
-
enum Yells
{
SAY_AGGRO = 0,
@@ -157,7 +151,7 @@ public:
if (instance)
{
- instance->SetData(DATA_HERALD_VOLAZJ, NOT_STARTED);
+ instance->SetBossState(DATA_HERALD_VOLAZJ, NOT_STARTED);
instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_QUICK_DEMISE_START_EVENT);
}
@@ -180,7 +174,7 @@ public:
if (instance)
{
- instance->SetData(DATA_HERALD_VOLAZJ, IN_PROGRESS);
+ instance->SetBossState(DATA_HERALD_VOLAZJ, IN_PROGRESS);
instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_QUICK_DEMISE_START_EVENT);
}
}
@@ -302,7 +296,7 @@ public:
Talk(SAY_DEATH);
if (instance)
- instance->SetData(DATA_HERALD_VOLAZJ, DONE);
+ instance->SetBossState(DATA_HERALD_VOLAZJ, DONE);
Summons.DespawnAll();
ResetPlayersPhaseMask();
diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp
index 5095f590fdb..1e1a08817ef 100644
--- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp
@@ -46,11 +46,6 @@ enum Spells
SPELL_THUNDERSHOCK_H = 60029 // 30Y
};
-enum Creatures
-{
- NPC_JEDOGA_CONTROLLER = 30181
-};
-
const Position JedogaPosition[2] =
{
{372.330994f, -705.278015f, -0.624178f, 5.427970f},
@@ -109,7 +104,7 @@ public:
if (instance)
{
if (!bFirstTime)
- instance->SetData(DATA_JEDOGA_SHADOWSEEKER_EVENT, FAIL);
+ instance->SetBossState(DATA_JEDOGA_SHADOWSEEKER, FAIL);
instance->SetData64(DATA_PL_JEDOGA_TARGET, 0);
instance->SetData64(DATA_ADD_JEDOGA_OPFER, 0);
@@ -127,7 +122,7 @@ public:
Talk(TEXT_AGGRO);
me->SetInCombatWithZone();
- instance->SetData(DATA_JEDOGA_SHADOWSEEKER_EVENT, IN_PROGRESS);
+ instance->SetBossState(DATA_JEDOGA_SHADOWSEEKER, IN_PROGRESS);
}
void AttackStart(Unit* who) OVERRIDE
@@ -150,7 +145,7 @@ public:
{
Talk(TEXT_DEATH);
if (instance)
- instance->SetData(DATA_JEDOGA_SHADOWSEEKER_EVENT, DONE);
+ instance->SetBossState(DATA_JEDOGA_SHADOWSEEKER, DONE);
}
void DoAction(int32 action) OVERRIDE
@@ -168,7 +163,6 @@ public:
}
void MoveInLineOfSight(Unit* who) OVERRIDE
-
{
if (!instance || !who || (who->GetTypeId() == TYPEID_UNIT && who->GetEntry() == NPC_JEDOGA_CONTROLLER))
return;
@@ -179,7 +173,7 @@ public:
bPreDone = true;
}
- if (instance->GetData(DATA_JEDOGA_SHADOWSEEKER_EVENT) != IN_PROGRESS || !bOnGround)
+ if (instance->GetBossState(DATA_JEDOGA_SHADOWSEEKER) != IN_PROGRESS || !bOnGround)
return;
if (!me->GetVictim() && me->CanCreatureAttack(who))
@@ -229,7 +223,7 @@ public:
{
AttackStart(target);
instance->SetData(DATA_JEDOGA_RESET_INITIANDS, 0);
- if (instance->GetData(DATA_JEDOGA_SHADOWSEEKER_EVENT) != IN_PROGRESS)
+ if (instance->GetBossState(DATA_JEDOGA_SHADOWSEEKER) != IN_PROGRESS)
EnterCombat(target);
}
else if (!me->IsInCombat())
@@ -252,7 +246,8 @@ public:
me->GetMotionMaster()->MovePoint(0, JedogaPosition[0]);
instance->SetData(DATA_JEDOGA_TRIGGER_SWITCH, 1);
- if (instance->GetData(DATA_JEDOGA_SHADOWSEEKER_EVENT) == IN_PROGRESS) OpferRufen();
+ if (instance->GetBossState(DATA_JEDOGA_SHADOWSEEKER) == IN_PROGRESS)
+ OpferRufen();
bOnGround = false;
uiOpFerTimer = urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS);
@@ -289,7 +284,7 @@ public:
if (!instance)
return;
- if (instance->GetData(DATA_JEDOGA_SHADOWSEEKER_EVENT) != IN_PROGRESS && instance->GetData(DATA_ALL_INITIAND_DEAD))
+ if (instance->GetBossState(DATA_JEDOGA_SHADOWSEEKER) != IN_PROGRESS && instance->GetData(DATA_ALL_INITIAND_DEAD))
MoveDown();
if (bOpFerok && !bOnGround && !bCanDown) Opfern();
@@ -372,7 +367,7 @@ public:
bWalking = false;
bCheckTimer = 2*IN_MILLISECONDS;
- if (instance->GetData(DATA_JEDOGA_SHADOWSEEKER_EVENT) != IN_PROGRESS)
+ if (instance->GetBossState(DATA_JEDOGA_SHADOWSEEKER) != IN_PROGRESS)
{
me->RemoveAurasDueToSpell(SPELL_SPHERE_VISUAL);
me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, false);
@@ -414,13 +409,11 @@ public:
void EnterCombat(Unit* who) OVERRIDE
{
- if ((instance && instance->GetData(DATA_JEDOGA_SHADOWSEEKER_EVENT) == IN_PROGRESS) || !who)
- return;
}
void AttackStart(Unit* victim) OVERRIDE
{
- if ((instance && instance->GetData(DATA_JEDOGA_SHADOWSEEKER_EVENT) == IN_PROGRESS) || !victim)
+ if ((instance && instance->GetBossState(DATA_JEDOGA_SHADOWSEEKER) == IN_PROGRESS) || !victim)
return;
ScriptedAI::AttackStart(victim);
@@ -429,7 +422,7 @@ public:
void MoveInLineOfSight(Unit* who) OVERRIDE
{
- if ((instance && instance->GetData(DATA_JEDOGA_SHADOWSEEKER_EVENT) == IN_PROGRESS) || !who)
+ if ((instance && instance->GetBossState(DATA_JEDOGA_SHADOWSEEKER) == IN_PROGRESS) || !who)
return;
ScriptedAI::MoveInLineOfSight(who);
@@ -482,14 +475,14 @@ public:
}
if (!bWalking)
{
- if (instance->GetData(DATA_JEDOGA_SHADOWSEEKER_EVENT) != IN_PROGRESS && me->HasAura(SPELL_SPHERE_VISUAL))
+ if (instance->GetBossState(DATA_JEDOGA_SHADOWSEEKER) != IN_PROGRESS && me->HasAura(SPELL_SPHERE_VISUAL))
{
me->RemoveAurasDueToSpell(SPELL_SPHERE_VISUAL);
me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, false);
me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, false);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE + UNIT_FLAG_NON_ATTACKABLE);
}
- if (instance->GetData(DATA_JEDOGA_SHADOWSEEKER_EVENT) == IN_PROGRESS && !me->HasAura(SPELL_SPHERE_VISUAL))
+ if (instance->GetBossState(DATA_JEDOGA_SHADOWSEEKER) == IN_PROGRESS && !me->HasAura(SPELL_SPHERE_VISUAL))
{
DoCast(me, SPELL_SPHERE_VISUAL, false);
me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, true);
@@ -561,7 +554,7 @@ public:
if (!bRemoved && me->GetPositionX() > 440.0f)
{
- if (instance->GetData(DATA_PRINCE_TALDARAM_EVENT) == DONE)
+ if (instance->GetBossState(DATA_PRINCE_TALDARAM) == DONE)
{
me->InterruptNonMeleeSpells(true);
bRemoved = true;
@@ -585,7 +578,7 @@ public:
me->InterruptNonMeleeSpells(true);
bCasted2 = false;
}
- if (!bRemoved2 && instance->GetData(DATA_JEDOGA_SHADOWSEEKER_EVENT) == DONE)
+ if (!bRemoved2 && instance->GetBossState(DATA_JEDOGA_SHADOWSEEKER) == DONE)
{
me->InterruptNonMeleeSpells(true);
bRemoved2 = true;
diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp
index 2cfc714c1f7..2f01cc734e6 100644
--- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp
@@ -69,11 +69,6 @@ enum CombatPhase
VANISHED,
FEEDING
};
-enum GameObjects
-{
- GO_SPHERE1 = 193093,
- GO_SPHERE2 = 193094
-};
class boss_taldaram : public CreatureScript
{
@@ -113,13 +108,13 @@ public:
uiPhaseTimer = 0;
uiEmbraceTarget = 0;
if (instance)
- instance->SetData(DATA_PRINCE_TALDARAM_EVENT, NOT_STARTED);
+ instance->SetBossState(DATA_PRINCE_TALDARAM, NOT_STARTED);
}
void EnterCombat(Unit* /*who*/) OVERRIDE
{
if (instance)
- instance->SetData(DATA_PRINCE_TALDARAM_EVENT, IN_PROGRESS);
+ instance->SetBossState(DATA_PRINCE_TALDARAM, IN_PROGRESS);
Talk(SAY_AGGRO);
}
@@ -267,7 +262,7 @@ public:
Talk(SAY_DEATH);
if (instance)
- instance->SetData(DATA_PRINCE_TALDARAM_EVENT, DONE);
+ instance->SetBossState(DATA_PRINCE_TALDARAM, DONE);
}
void KilledUnit(Unit* victim) OVERRIDE
@@ -287,21 +282,10 @@ public:
bool CheckSpheres()
{
- if (!instance)
- return false;
-
- uint64 uiSphereGuids[2];
- uiSphereGuids[0] = instance->GetData64(DATA_SPHERE1);
- uiSphereGuids[1] = instance->GetData64(DATA_SPHERE2);
-
- for (uint8 i=0; i < 2; ++i)
- {
- GameObject* pSpheres = instance->instance->GetGameObject(uiSphereGuids[i]);
- if (!pSpheres)
+ for (uint8 i = 0; i < 2; ++i)
+ if (!instance->GetData(DATA_SPHERE_1 + i))
return false;
- if (pSpheres->GetGoState() != GO_STATE_ACTIVE)
- return false;
- }
+
RemovePrison();
return true;
}
@@ -332,7 +316,7 @@ public:
CreatureAI* GetAI(Creature* creature) const OVERRIDE
{
- return new boss_taldaramAI(creature);
+ return GetAhnKahetAI<boss_taldaramAI>(creature);
}
};
@@ -390,39 +374,38 @@ public:
class prince_taldaram_sphere : public GameObjectScript
{
-public:
- prince_taldaram_sphere() : GameObjectScript("prince_taldaram_sphere") { }
-
- bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE
- {
- InstanceScript* instance = go->GetInstanceScript();
- if (!instance)
- return true;
+ public:
+ prince_taldaram_sphere() : GameObjectScript("prince_taldaram_sphere") { }
- Creature* pPrinceTaldaram = Unit::GetCreature(*go, instance->GetData64(DATA_PRINCE_TALDARAM));
- if (pPrinceTaldaram && pPrinceTaldaram->IsAlive())
+ bool OnGossipHello(Player* /*player*/, GameObject* go)
{
- // maybe these are hacks :(
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
- go->SetGoState(GO_STATE_ACTIVE);
+ InstanceScript* instance = go->GetInstanceScript();
+ if (!instance)
+ return false;
- switch (go->GetEntry())
+ Creature* PrinceTaldaram = ObjectAccessor::GetCreature(*go, instance->GetData64(DATA_PRINCE_TALDARAM));
+ if (PrinceTaldaram && PrinceTaldaram->IsAlive())
{
- case GO_SPHERE1:
- instance->SetData(DATA_SPHERE1_EVENT, IN_PROGRESS);
- pPrinceTaldaram->AI()->Talk(SAY_1);
- break;
+ // maybe these are hacks :(
+ go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->SetGoState(GO_STATE_ACTIVE);
- case GO_SPHERE2:
- instance->SetData(DATA_SPHERE2_EVENT, IN_PROGRESS);
- pPrinceTaldaram->AI()->Talk(SAY_1);
- break;
- }
+ switch (go->GetEntry())
+ {
+ case GO_SPHERE_1:
+ instance->SetData(DATA_SPHERE_1, IN_PROGRESS);
+ PrinceTaldaram->AI()->Talk(SAY_1);
+ break;
+ case GO_SPHERE_2:
+ instance->SetData(DATA_SPHERE_2, IN_PROGRESS);
+ PrinceTaldaram->AI()->Talk(SAY_1);
+ break;
+ }
- CAST_AI(boss_taldaram::boss_taldaramAI, pPrinceTaldaram->AI())->CheckSpheres();
+ CAST_AI(boss_taldaram::boss_taldaramAI, PrinceTaldaram->AI())->CheckSpheres();
+ }
+ return true;
}
- return true;
- }
};
void AddSC_boss_taldaram()
diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp
index a7b82583d08..432aa99af99 100644
--- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp
@@ -20,321 +20,313 @@
#include "InstanceScript.h"
#include "ahnkahet.h"
-/* Ahn'kahet encounters:
-0 - Elder Nadox
-1 - Prince Taldaram
-2 - Jedoga Shadowseeker
-3 - Herald Volazj
-4 - Amanitar (Heroic only)
-*/
-
-#define MAX_ENCOUNTER 5
-
-enum Achievements
+DoorData const doorData[] =
{
- ACHIEV_VOLUNTEER_WORK = 2056
+ { GO_PRINCE_TALDARAM_GATE, DATA_PRINCE_TALDARAM, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
+ { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END
};
class instance_ahnkahet : public InstanceMapScript
{
-public:
- instance_ahnkahet() : InstanceMapScript("instance_ahnkahet", 619) { }
-
- struct instance_ahnkahet_InstanceScript : public InstanceScript
- {
- instance_ahnkahet_InstanceScript(Map* map) : InstanceScript(map) {}
-
- uint64 Elder_Nadox;
- uint64 Prince_Taldaram;
- uint64 Jedoga_Shadowseeker;
- uint64 Herald_Volazj;
- uint64 Amanitar;
-
- uint64 Prince_TaldaramSpheres[2];
- uint64 Prince_TaldaramPlatform;
- uint64 Prince_TaldaramGate;
-
- std::set<uint64> InitiandGUIDs;
- uint64 JedogaSacrifices;
- uint64 JedogaTarget;
+ public:
+ instance_ahnkahet() : InstanceMapScript(AhnKahetScriptName, 619) { }
- uint32 m_auiEncounter[MAX_ENCOUNTER];
- uint32 spheres[2];
+ struct instance_ahnkahet_InstanceScript : public InstanceScript
+ {
+ instance_ahnkahet_InstanceScript(Map* map) : InstanceScript(map)
+ {
+ SetBossNumber(EncounterCount);
+ LoadDoorData(doorData);
- uint8 InitiandCnt;
- uint8 switchtrigger;
+ ElderNadoxGUID = 0;
+ PrinceTaldaramGUID = 0;
+ JedogaShadowseekerGUID = 0;
+ AmanitarGUID = 0;
+ HeraldVolazjGUID = 0;
- std::string str_data;
+ PrinceTaldaramPlatformGUID = 0;
+ JedogaSacrifices = 0;
+ JedogaTarget = 0;
+ SwitchTrigger = 0;
- void Initialize() OVERRIDE
- {
- memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
- InitiandGUIDs.clear();
-
- Elder_Nadox =0;
- Prince_Taldaram =0;
- Jedoga_Shadowseeker =0;
- Herald_Volazj =0;
- Amanitar =0;
-
- spheres[0] = NOT_STARTED;
- spheres[1] = NOT_STARTED;
-
- InitiandCnt = 0;
- switchtrigger = 0;
- JedogaSacrifices = 0;
- JedogaTarget = 0;
- }
+ InitiandGUIDs.clear();
- bool IsEncounterInProgress() const OVERRIDE
- {
- for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
- if (m_auiEncounter[i] == IN_PROGRESS)
- return true;
+ memset(SpheresState, 0, 2 * sizeof(uint64));
+ }
- return false;
- }
+ void OnCreatureCreate(Creature* creature) OVERRIDE
+ {
+ switch (creature->GetEntry())
+ {
+ case NPC_ELDER_NADOX:
+ ElderNadoxGUID = creature->GetGUID();
+ break;
+ case NPC_PRINCE_TALDARAM:
+ PrinceTaldaramGUID = creature->GetGUID();
+ break;
+ case NPC_JEDOGA_SHADOWSEEKER:
+ JedogaShadowseekerGUID = creature->GetGUID();
+ break;
+ case NPC_AMANITAR:
+ AmanitarGUID = creature->GetGUID();
+ break;
+ case NPC_HERALD_VOLAZJ:
+ HeraldVolazjGUID = creature->GetGUID();
+ break;
+ case NPC_INITIAND:
+ InitiandGUIDs.insert(creature->GetGUID());
+ break;
+ default:
+ break;
+ }
+ }
- void OnCreatureCreate(Creature* creature) OVERRIDE
- {
- switch (creature->GetEntry())
+ void OnGameObjectCreate(GameObject* go) OVERRIDE
{
- case 29309: Elder_Nadox = creature->GetGUID(); break;
- case 29308: Prince_Taldaram = creature->GetGUID(); break;
- case 29310: Jedoga_Shadowseeker = creature->GetGUID(); break;
- case 29311: Herald_Volazj = creature->GetGUID(); break;
- case 30258: Amanitar = creature->GetGUID(); break;
- case 30114: InitiandGUIDs.insert(creature->GetGUID()); break;
+ switch (go->GetEntry())
+ {
+ case GO_PRINCE_TALDARAM_PLATFORM:
+ PrinceTaldaramPlatformGUID = go->GetGUID();
+ if (GetBossState(DATA_PRINCE_TALDARAM) == DONE)
+ HandleGameObject(0, true, go);
+ break;
+ case GO_SPHERE_1:
+ if (SpheresState[0])
+ {
+ go->SetGoState(GO_STATE_ACTIVE);
+ go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ }
+ else
+ go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ break;
+ case GO_SPHERE_2:
+ if (SpheresState[1])
+ {
+ go->SetGoState(GO_STATE_ACTIVE);
+ go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ }
+ else
+ go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ break;
+ case GO_PRINCE_TALDARAM_GATE:
+ AddDoor(go, true);
+ break;
+ default:
+ break;
+ }
}
- }
- void OnGameObjectCreate(GameObject* go) OVERRIDE
- {
- switch (go->GetEntry())
+ void OnGameObjectRemove(GameObject* go) OVERRIDE
{
- case 193564:
- Prince_TaldaramPlatform = go->GetGUID();
- if (m_auiEncounter[1] == DONE)
- HandleGameObject(0, true, go);
- break;
-
- case 193093:
- Prince_TaldaramSpheres[0] = go->GetGUID();
- if (spheres[0] == IN_PROGRESS)
- {
- go->SetGoState(GO_STATE_ACTIVE);
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
- }
- else
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
- break;
- case 193094:
- Prince_TaldaramSpheres[1] = go->GetGUID();
- if (spheres[1] == IN_PROGRESS)
- {
- go->SetGoState(GO_STATE_ACTIVE);
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
- }
- else
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
- break;
- case 192236:
- Prince_TaldaramGate = go->GetGUID(); // Web gate past Prince Taldaram
- if (m_auiEncounter[1] == DONE)
- HandleGameObject(0, true, go);
- break;
+ switch (go->GetEntry())
+ {
+ case GO_PRINCE_TALDARAM_GATE:
+ AddDoor(go, false);
+ break;
+ default:
+ break;
+ }
}
- }
- void SetData64(uint32 idx, uint64 guid) OVERRIDE
- {
- switch (idx)
+ void SetData(uint32 type, uint32 data) OVERRIDE
{
- case DATA_ADD_JEDOGA_OPFER:
- JedogaSacrifices = guid;
- break;
+ switch (type)
+ {
+ case DATA_SPHERE_1:
+ case DATA_SPHERE_2:
+ SpheresState[type - DATA_SPHERE_1] = data;
+ break;
+ case DATA_JEDOGA_TRIGGER_SWITCH:
+ SwitchTrigger = data;
+ break;
+ case DATA_JEDOGA_RESET_INITIANDS:
+ for (std::set<uint64>::const_iterator itr = InitiandGUIDs.begin(); itr != InitiandGUIDs.end(); ++itr)
+ {
+ if (Creature* creature = instance->GetCreature(*itr))
+ {
+ creature->Respawn();
+ if (!creature->IsInEvadeMode())
+ creature->AI()->EnterEvadeMode();
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ }
- case DATA_PL_JEDOGA_TARGET:
- JedogaTarget = guid;
- break;
+ uint32 GetData(uint32 type) const OVERRIDE
+ {
+ switch (type)
+ {
+ case DATA_SPHERE_1:
+ case DATA_SPHERE_2:
+ return SpheresState[type - DATA_SPHERE_1];
+ case DATA_ALL_INITIAND_DEAD:
+ for (std::set<uint64>::const_iterator itr = InitiandGUIDs.begin(); itr != InitiandGUIDs.end(); ++itr)
+ {
+ Creature* cr = instance->GetCreature(*itr);
+ if (!cr || cr->IsAlive())
+ return 0;
+ }
+ return 1;
+ case DATA_JEDOGA_TRIGGER_SWITCH:
+ return SwitchTrigger;
+ default:
+ break;
+ }
+ return 0;
}
- }
- uint64 GetData64(uint32 identifier) const OVERRIDE
- {
- switch (identifier)
+ void SetData64(uint32 type, uint64 guid) OVERRIDE
{
- case DATA_ELDER_NADOX: return Elder_Nadox;
- case DATA_PRINCE_TALDARAM: return Prince_Taldaram;
- case DATA_JEDOGA_SHADOWSEEKER: return Jedoga_Shadowseeker;
- case DATA_HERALD_VOLAZJ: return Herald_Volazj;
- case DATA_AMANITAR: return Amanitar;
- case DATA_SPHERE1: return Prince_TaldaramSpheres[0];
- case DATA_SPHERE2: return Prince_TaldaramSpheres[1];
- case DATA_PRINCE_TALDARAM_PLATFORM: return Prince_TaldaramPlatform;
- case DATA_ADD_JEDOGA_INITIAND:
+ switch (type)
{
- std::vector<uint64> vInitiands;
- vInitiands.clear();
- for (std::set<uint64>::const_iterator itr = InitiandGUIDs.begin(); itr != InitiandGUIDs.end(); ++itr)
- {
- Creature* cr = instance->GetCreature(*itr);
- if (cr && cr->IsAlive())
- vInitiands.push_back(*itr);
- }
- if (vInitiands.empty())
- return 0;
- uint8 j = urand(0, vInitiands.size() -1);
- return vInitiands[j];
+ case DATA_ADD_JEDOGA_OPFER:
+ JedogaSacrifices = guid;
+ break;
+ case DATA_PL_JEDOGA_TARGET:
+ JedogaTarget = guid;
+ break;
+ default:
+ break;
}
- case DATA_ADD_JEDOGA_OPFER: return JedogaSacrifices;
- case DATA_PL_JEDOGA_TARGET: return JedogaTarget;
}
- return 0;
- }
- void SetData(uint32 type, uint32 data) OVERRIDE
- {
- switch (type)
+ uint64 GetData64(uint32 type) const OVERRIDE
{
- case DATA_ELDER_NADOX_EVENT:
- m_auiEncounter[0] = data;
- break;
- case DATA_PRINCE_TALDARAM_EVENT:
- if (data == DONE)
- HandleGameObject(Prince_TaldaramGate, true);
- m_auiEncounter[1] = data;
- break;
- case DATA_JEDOGA_SHADOWSEEKER_EVENT:
- m_auiEncounter[2] = data;
- if (data == DONE)
+ switch (type)
+ {
+ case DATA_ELDER_NADOX:
+ return ElderNadoxGUID;
+ case DATA_PRINCE_TALDARAM:
+ return PrinceTaldaramGUID;
+ case DATA_JEDOGA_SHADOWSEEKER:
+ return JedogaShadowseekerGUID;
+ case DATA_AMANITAR:
+ return AmanitarGUID;
+ case DATA_HERALD_VOLAZJ:
+ return HeraldVolazjGUID;
+ case DATA_PRINCE_TALDARAM_PLATFORM:
+ return PrinceTaldaramPlatformGUID;
+ case DATA_ADD_JEDOGA_INITIAND:
{
+ std::vector<uint64> vInitiands;
+ vInitiands.clear();
for (std::set<uint64>::const_iterator itr = InitiandGUIDs.begin(); itr != InitiandGUIDs.end(); ++itr)
{
Creature* cr = instance->GetCreature(*itr);
if (cr && cr->IsAlive())
- {
- cr->SetVisible(false);
- cr->setDeathState(JUST_DIED);
- cr->RemoveCorpse();
- }
+ vInitiands.push_back(*itr);
}
+ if (vInitiands.empty())
+ return 0;
+
+ return Trinity::Containers::SelectRandomContainerElement(vInitiands);
}
- break;
- case DATA_HERALD_VOLAZJ_EVENT:
- m_auiEncounter[3] = data;
- break;
- case DATA_AMANITAR_EVENT:
- m_auiEncounter[4] = data;
- break;
- case DATA_SPHERE1_EVENT:
- spheres[0] = data;
- break;
- case DATA_SPHERE2_EVENT:
- spheres[1] = data;
- break;
- case DATA_JEDOGA_TRIGGER_SWITCH:
- switchtrigger = data;
- break;
- case DATA_JEDOGA_RESET_INITIANDS:
- for (std::set<uint64>::const_iterator itr = InitiandGUIDs.begin(); itr != InitiandGUIDs.end(); ++itr)
- {
- Creature* cr = instance->GetCreature(*itr);
- if (cr)
+ case DATA_ADD_JEDOGA_OPFER:
+ return JedogaSacrifices;
+ case DATA_PL_JEDOGA_TARGET:
+ return JedogaTarget;
+ default:
+ break;
+ }
+ return 0;
+ }
+
+ bool SetBossState(uint32 type, EncounterState state) OVERRIDE
+ {
+ if (!InstanceScript::SetBossState(type, state))
+ return false;
+
+ switch (type)
+ {
+ case DATA_JEDOGA_SHADOWSEEKER:
+ if (state == DONE)
{
- cr->Respawn();
- if (!cr->IsInEvadeMode()) cr->AI()->EnterEvadeMode();
+ for (std::set<uint64>::const_iterator itr = InitiandGUIDs.begin(); itr != InitiandGUIDs.end(); ++itr)
+ {
+ if (Creature* cr = instance->GetCreature(*itr))
+ cr->DespawnOrUnsummon();
+ }
}
- }
- break;
+ break;
+ default:
+ break;
+ }
+ return true;
}
- if (data == DONE)
- SaveToDB();
- }
- uint32 GetData(uint32 type) const OVERRIDE
- {
- switch (type)
+ std::string GetSaveData() OVERRIDE
{
- case DATA_ELDER_NADOX_EVENT: return m_auiEncounter[0];
- case DATA_PRINCE_TALDARAM_EVENT: return m_auiEncounter[1];
- case DATA_JEDOGA_SHADOWSEEKER_EVENT: return m_auiEncounter[2];
- case DATA_HERALD_VOLAZJ: return m_auiEncounter[3];
- case DATA_AMANITAR_EVENT: return m_auiEncounter[4];
- case DATA_SPHERE1_EVENT: return spheres[0];
- case DATA_SPHERE2_EVENT: return spheres[1];
- case DATA_ALL_INITIAND_DEAD:
- for (std::set<uint64>::const_iterator itr = InitiandGUIDs.begin(); itr != InitiandGUIDs.end(); ++itr)
- {
- Creature* cr = instance->GetCreature(*itr);
- if (!cr || (cr && cr->IsAlive()))
- return 0;
- }
- return 1;
- case DATA_JEDOGA_TRIGGER_SWITCH: return switchtrigger;
- }
- return 0;
- }
+ OUT_SAVE_INST_DATA;
- std::string GetSaveData() OVERRIDE
- {
- OUT_SAVE_INST_DATA;
+ std::ostringstream saveStream;
+ saveStream << "A K " << GetBossSaveData() << SpheresState[0] << ' ' << SpheresState[1];
- std::ostringstream saveStream;
- saveStream << "A K " << m_auiEncounter[0] << ' ' << m_auiEncounter[1] << ' '
- << m_auiEncounter[2] << ' ' << m_auiEncounter[3] << ' ' << m_auiEncounter[4] << ' '
- << spheres[0] << ' ' << spheres[1];
+ OUT_SAVE_INST_DATA_COMPLETE;
+ return saveStream.str();
+ }
- str_data = saveStream.str();
+ void Load(char const* str) OVERRIDE
+ {
+ if (!str)
+ {
+ OUT_LOAD_INST_DATA_FAIL;
+ return;
+ }
- OUT_SAVE_INST_DATA_COMPLETE;
- return str_data;
- }
+ OUT_LOAD_INST_DATA(str);
- void Load(const char* in) OVERRIDE
- {
- if (!in)
- {
- OUT_LOAD_INST_DATA_FAIL;
- return;
- }
+ char dataHead1, dataHead2;
- OUT_LOAD_INST_DATA(in);
+ std::istringstream loadStream(str);
+ loadStream >> dataHead1 >> dataHead2;
+
+ if (dataHead1 == 'A' && dataHead2 == 'K')
+ {
+ for (uint32 i = 0; i < EncounterCount; ++i)
+ {
+ uint32 tmpState;
+ loadStream >> tmpState;
+ if (tmpState == IN_PROGRESS || tmpState > SPECIAL)
+ tmpState = NOT_STARTED;
+ SetBossState(i, EncounterState(tmpState));
+ }
- char dataHead1, dataHead2;
- uint16 data0, data1, data2, data3, data4, data5, data6;
+ loadStream >> SpheresState[0];
+ loadStream >> SpheresState[1];
+ }
+ else
+ OUT_LOAD_INST_DATA_FAIL;
- std::istringstream loadStream(in);
- loadStream >> dataHead1 >> dataHead2 >> data0 >> data1 >> data2 >> data3 >> data4 >> data5 >> data6;
+ OUT_LOAD_INST_DATA_COMPLETE;
+ }
- if (dataHead1 == 'A' && dataHead2 == 'K')
- {
- m_auiEncounter[0] = data0;
- m_auiEncounter[1] = data1;
- m_auiEncounter[2] = data2;
- m_auiEncounter[3] = data3;
- m_auiEncounter[4] = data4;
+ protected:
+ uint64 ElderNadoxGUID;
+ uint64 PrinceTaldaramGUID;
+ uint64 JedogaShadowseekerGUID;
+ uint64 AmanitarGUID;
+ uint64 HeraldVolazjGUID;
- for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
- if (m_auiEncounter[i] == IN_PROGRESS)
- m_auiEncounter[i] = NOT_STARTED;
+ uint64 PrinceTaldaramPlatformGUID;
+ uint64 JedogaSacrifices;
+ uint64 JedogaTarget;
- spheres[0] = data5;
- spheres[1] = data6;
+ std::set<uint64> InitiandGUIDs;
- } else OUT_LOAD_INST_DATA_FAIL;
+ uint8 SpheresState[2];
+ uint8 SwitchTrigger;
+ };
- OUT_LOAD_INST_DATA_COMPLETE;
+ InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ {
+ return new instance_ahnkahet_InstanceScript(map);
}
- };
-
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
- {
- return new instance_ahnkahet_InstanceScript(map);
- }
};
void AddSC_instance_ahnkahet()
{
- new instance_ahnkahet();
+ new instance_ahnkahet();
}
diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/azjol_nerub.h b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/azjol_nerub.h
index ea0382cdd80..5087ed0cec3 100644
--- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/azjol_nerub.h
+++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/azjol_nerub.h
@@ -18,9 +18,6 @@
#ifndef AZJOL_NERUB_H_
#define AZJOL_NERUB_H_
-#include "Map.h"
-#include "Creature.h"
-
#define AzjolNerubScriptName "instance_azjol_nerub"
uint32 const EncounterCount = 3;
@@ -60,11 +57,7 @@ enum GameObjectIds
template<class AI>
AI* GetAzjolNerubAI(Creature* creature)
{
- if (InstanceMap* instance = creature->GetMap()->ToInstanceMap())
- if (instance->GetInstanceScript())
- if (instance->GetScriptId() == sObjectMgr->GetScriptId(AzjolNerubScriptName))
- return new AI(creature);
- return NULL;
+ return GetInstanceAI<AI>(creature, AzjolNerubScriptName);
}
#endif // AZJOL_NERUB_H_
diff --git a/src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h b/src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h
index 072a5f2f534..c2d957b7c0a 100644
--- a/src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h
+++ b/src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h
@@ -18,9 +18,6 @@
#ifndef DRAK_THARON_KEEP_H_
#define DRAK_THARON_KEEP_H_
-#include "Map.h"
-#include "Creature.h"
-
#define DrakTharonKeepScriptName "instance_drak_tharon_keep"
uint32 const EncounterCount = 4;
@@ -89,11 +86,7 @@ enum GameObjectIds
template<class AI>
AI* GetDrakTharonKeepAI(Creature* creature)
{
- if (InstanceMap* instance = creature->GetMap()->ToInstanceMap())
- if (instance->GetInstanceScript())
- if (instance->GetScriptId() == sObjectMgr->GetScriptId(DrakTharonKeepScriptName))
- return new AI(creature);
- return NULL;
+ return GetInstanceAI<AI>(creature, DrakTharonKeepScriptName);
}
#endif // DRAK_THARON_KEEP_H_
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/halls_of_lightning.h b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/halls_of_lightning.h
index 3659f53752c..17c049e8292 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/halls_of_lightning.h
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/halls_of_lightning.h
@@ -18,9 +18,6 @@
#ifndef HALLS_OF_LIGHTNING_H_
#define HALLS_OF_LIGHTNING_H_
-#include "Map.h"
-#include "Creature.h"
-
#define HoLScriptName "instance_halls_of_lightning"
uint32 const EncounterCount = 4;
@@ -54,11 +51,7 @@ enum GameObjectIds
template<class AI>
AI* GetHallsOfLightningAI(Creature* creature)
{
- if (InstanceMap* instance = creature->GetMap()->ToInstanceMap())
- if (instance->GetInstanceScript())
- if (instance->GetScriptId() == sObjectMgr->GetScriptId(HoLScriptName))
- return new AI(creature);
- return NULL;
+ return GetInstanceAI<AI>(creature, HoLScriptName);
}
#endif // HALLS_OF_LIGHTNING_H_
diff --git a/src/server/scripts/Outland/BlackTemple/black_temple.h b/src/server/scripts/Outland/BlackTemple/black_temple.h
index 1d3c3c3edd6..fb529a6b522 100644
--- a/src/server/scripts/Outland/BlackTemple/black_temple.h
+++ b/src/server/scripts/Outland/BlackTemple/black_temple.h
@@ -88,11 +88,7 @@ enum GameObjectIds
template<class AI>
AI* GetBlackTempleAI(Creature* creature)
{
- if (InstanceMap* instance = creature->GetMap()->ToInstanceMap())
- if (instance->GetInstanceScript())
- if (instance->GetScriptId() == sObjectMgr->GetScriptId(BTScriptName))
- return new AI(creature);
- return NULL;
+ return GetInstanceAI<AI>(creature, BTScriptName);
}
#endif // BLACK_TEMPLE_H_