diff options
3 files changed, 857 insertions, 796 deletions
diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp index fa9576f476b..18cd75b256e 100644 --- a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp +++ b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp @@ -36,443 +36,489 @@ EndContentData */ # npc_millhouse_manastorm #####*/ -#define SAY_INTRO_1 -1552010 -#define SAY_INTRO_2 -1552011 -#define SAY_WATER -1552012 -#define SAY_BUFFS -1552013 -#define SAY_DRINK -1552014 -#define SAY_READY -1552015 -#define SAY_KILL_1 -1552016 -#define SAY_KILL_2 -1552017 -#define SAY_PYRO -1552018 -#define SAY_ICEBLOCK -1552019 -#define SAY_LOWHP -1552020 -#define SAY_DEATH -1552021 -#define SAY_COMPLETE -1552022 - -#define SPELL_CONJURE_WATER 36879 -#define SPELL_ARCANE_INTELLECT 36880 -#define SPELL_ICE_ARMOR 36881 - -#define SPELL_ARCANE_MISSILES 33833 -#define SPELL_CONE_OF_COLD 12611 -#define SPELL_FIRE_BLAST 13341 -#define SPELL_FIREBALL 14034 -#define SPELL_FROSTBOLT 15497 -#define SPELL_PYROBLAST 33975 - -struct npc_millhouse_manastormAI : public ScriptedAI +enum eMillhouseSays { - npc_millhouse_manastormAI(Creature *c) : ScriptedAI(c) - { - pInstance = c->GetInstanceData(); - } - - ScriptedInstance* pInstance; - - uint32 EventProgress_Timer; - uint32 Phase; - bool Init; - bool LowHp; - - uint32 Pyroblast_Timer; - uint32 Fireball_Timer; + SAY_INTRO_1 = -1552010, + SAY_INTRO_2 = -1552011, + SAY_WATER = -1552012, + SAY_BUFFS = -1552013, + SAY_DRINK = -1552014, + SAY_READY = -1552015, + SAY_KILL_1 = -1552016, + SAY_KILL_2 = -1552017, + SAY_PYRO = -1552018, + SAY_ICEBLOCK = -1552019, + SAY_LOWHP = -1552020, + SAY_DEATH = -1552021, + SAY_COMPLETE = -1552022, +}; - void Reset() - { - EventProgress_Timer = 2000; - LowHp = false; - Init = false; - Phase = 1; +enum eMillhouseSpells +{ + SPELL_CONJURE_WATER = 36879, + SPELL_ARCANE_INTELLECT = 36880, + SPELL_ICE_ARMOR = 36881, + SPELL_ARCANE_MISSILES = 33833, + SPELL_CONE_OF_COLD = 12611, + SPELL_FIRE_BLAST = 13341, + SPELL_FIREBALL = 14034, + SPELL_FROSTBOLT = 15497, + SPELL_PYROBLAST = 33975, +}; - Pyroblast_Timer = 1000; - Fireball_Timer = 2500; +class npc_millhouse_manastorm : public CreatureScript +{ + public: - if (pInstance) + npc_millhouse_manastorm() + : CreatureScript("npc_millhouse_manastorm") { - if (pInstance->GetData(TYPE_WARDEN_2) == DONE) - Init = true; - - if (pInstance->GetData(TYPE_HARBINGERSKYRISS) == DONE) + } + struct npc_millhouse_manastormAI : public ScriptedAI + { + npc_millhouse_manastormAI(Creature* pCreature) : ScriptedAI(pCreature) { - DoScriptText(SAY_COMPLETE, me); + pInstance = pCreature->GetInstanceData(); } - } - } + + ScriptedInstance* pInstance; + + uint32 EventProgress_Timer; + uint32 Phase; + bool Init; + bool LowHp; + + uint32 Pyroblast_Timer; + uint32 Fireball_Timer; + + void Reset() + { + EventProgress_Timer = 2000; + LowHp = false; + Init = false; + Phase = 1; - void AttackStart(Unit* pWho) - { - if (me->Attack(pWho, true)) - { - me->AddThreat(pWho, 0.0f); - me->SetInCombatWith(pWho); - pWho->SetInCombatWith(me); + Pyroblast_Timer = 1000; + Fireball_Timer = 2500; - me->GetMotionMaster()->MoveChase(pWho, 25.0f); - } - } + if (pInstance) + { + if (pInstance->GetData(TYPE_WARDEN_2) == DONE) + Init = true; - void EnterCombat(Unit * /*who*/) - { - } + if (pInstance->GetData(TYPE_HARBINGERSKYRISS) == DONE) + DoScriptText(SAY_COMPLETE, me); + } + } + + void AttackStart(Unit* pWho) + { + if (me->Attack(pWho, true)) + { + me->AddThreat(pWho, 0.0f); + me->SetInCombatWith(pWho); + pWho->SetInCombatWith(me); + me->GetMotionMaster()->MoveChase(pWho, 25.0f); + } + } - void KilledUnit(Unit * /*victim*/) - { - DoScriptText(RAND(SAY_KILL_1,SAY_KILL_2), me); - } + void EnterCombat(Unit * /*who*/){} - void JustDied(Unit * /*victim*/) - { - DoScriptText(SAY_DEATH, me); + void KilledUnit(Unit * /*victim*/) + { + DoScriptText(RAND(SAY_KILL_1,SAY_KILL_2), me); + } - /*for questId 10886 (heroic mode only) - if (pInstance && pInstance->GetData(TYPE_HARBINGERSKYRISS) != DONE) - ->FailQuest();*/ - } + void JustDied(Unit * /*victim*/) + { + DoScriptText(SAY_DEATH, me); - void UpdateAI(const uint32 diff) - { - if (!Init) - { - if (EventProgress_Timer <= diff) + /*for questId 10886 (heroic mode only) + if (pInstance && pInstance->GetData(TYPE_HARBINGERSKYRISS) != DONE) + ->FailQuest();*/ + } + + void UpdateAI(const uint32 diff) { - if (Phase < 8) + if (!Init) { - switch(Phase) + if (EventProgress_Timer <= diff) { - case 1: - DoScriptText(SAY_INTRO_1, me); - EventProgress_Timer = 18000; - break; - case 2: - DoScriptText(SAY_INTRO_2, me); - EventProgress_Timer = 18000; - break; - case 3: - DoScriptText(SAY_WATER, me); - DoCast(me, SPELL_CONJURE_WATER); - EventProgress_Timer = 7000; - break; - case 4: - DoScriptText(SAY_BUFFS, me); - DoCast(me, SPELL_ICE_ARMOR); - EventProgress_Timer = 7000; - break; - case 5: - DoScriptText(SAY_DRINK, me); - DoCast(me, SPELL_ARCANE_INTELLECT); - EventProgress_Timer = 7000; - break; - case 6: - DoScriptText(SAY_READY, me); - EventProgress_Timer = 6000; - break; - case 7: - if (pInstance) - pInstance->SetData(TYPE_WARDEN_2,DONE); - Init = true; - break; - } - ++Phase; + if (Phase < 8) + { + switch(Phase) + { + case 1: + DoScriptText(SAY_INTRO_1, me); + EventProgress_Timer = 18000; + break; + case 2: + DoScriptText(SAY_INTRO_2, me); + EventProgress_Timer = 18000; + break; + case 3: + DoScriptText(SAY_WATER, me); + DoCast(me, SPELL_CONJURE_WATER); + EventProgress_Timer = 7000; + break; + case 4: + DoScriptText(SAY_BUFFS, me); + DoCast(me, SPELL_ICE_ARMOR); + EventProgress_Timer = 7000; + break; + case 5: + DoScriptText(SAY_DRINK, me); + DoCast(me, SPELL_ARCANE_INTELLECT); + EventProgress_Timer = 7000; + break; + case 6: + DoScriptText(SAY_READY, me); + EventProgress_Timer = 6000; + break; + case 7: + if (pInstance) + pInstance->SetData(TYPE_WARDEN_2,DONE); + Init = true; + break; + } + ++Phase; + } + } + else + EventProgress_Timer -= diff; } - } else EventProgress_Timer -= diff; - } - if (!UpdateVictim()) - return; + if (!UpdateVictim()) + return; + if (!LowHp && ((me->GetHealth()*100 / me->GetMaxHealth()) < 20)) + { + DoScriptText(SAY_LOWHP, me); + LowHp = true; + } - if (!LowHp && ((me->GetHealth()*100 / me->GetMaxHealth()) < 20)) - { - DoScriptText(SAY_LOWHP, me); - LowHp = true; - } + if (Pyroblast_Timer <= diff) + { + if (me->IsNonMeleeSpellCasted(false)) + return; - if (Pyroblast_Timer <= diff) - { - if (me->IsNonMeleeSpellCasted(false)) - return; + DoScriptText(SAY_PYRO, me); - DoScriptText(SAY_PYRO, me); + DoCast(me->getVictim(), SPELL_PYROBLAST); + Pyroblast_Timer = 40000; + } + else + Pyroblast_Timer -=diff; - DoCast(me->getVictim(), SPELL_PYROBLAST); - Pyroblast_Timer = 40000; - } else Pyroblast_Timer -=diff; + if (Fireball_Timer <= diff) + { + DoCast(me->getVictim(), SPELL_FIREBALL); + Fireball_Timer = 4000; + } + else + Fireball_Timer -=diff; - if (Fireball_Timer <= diff) - { - DoCast(me->getVictim(), SPELL_FIREBALL); - Fireball_Timer = 4000; - } else Fireball_Timer -=diff; + DoMeleeAttackIfReady(); + } + }; - DoMeleeAttackIfReady(); - } + CreatureAI* OnGetAI(Creature* creature) const + { + return new npc_millhouse_manastormAI(creature); + } }; - -CreatureAI* GetAI_npc_millhouse_manastorm(Creature* pCreature) -{ - return new npc_millhouse_manastormAI (pCreature); -} - /*##### # npc_warden_mellichar #####*/ -#define YELL_INTRO1 -1552023 -#define YELL_INTRO2 -1552024 -#define YELL_RELEASE1 -1552025 -#define YELL_RELEASE2A -1552026 -#define YELL_RELEASE2B -1552027 -#define YELL_RELEASE3 -1552028 -#define YELL_RELEASE4 -1552029 -#define YELL_WELCOME -1552030 - -//phase 2(acid mobs) -#define ENTRY_TRICKSTER 20905 -#define ENTRY_PH_HUNTER 20906 -//phase 3 -#define ENTRY_MILLHOUSE 20977 -//phase 4(acid mobs) -#define ENTRY_AKKIRIS 20908 -#define ENTRY_SULFURON 20909 -//phase 5(acid mobs) -#define ENTRY_TW_DRAK 20910 -#define ENTRY_BL_DRAK 20911 -//phase 6 -#define ENTRY_SKYRISS 20912 - -//TARGET_SCRIPT -#define SPELL_TARGET_ALPHA 36856 -#define SPELL_TARGET_BETA 36854 -#define SPELL_TARGET_DELTA 36857 -#define SPELL_TARGET_GAMMA 36858 -#define SPELL_TARGET_OMEGA 36852 -#define SPELL_BUBBLE_VISUAL 36849 - -struct npc_warden_mellicharAI : public ScriptedAI +enum eWardenSays { - npc_warden_mellicharAI(Creature *c) : ScriptedAI(c) - { - pInstance = c->GetInstanceData(); - } + YELL_INTRO1 = -1552023, + YELL_INTRO2 = -1552024, + YELL_RELEASE1 = -1552025, + YELL_RELEASE2A = -1552026, + YELL_RELEASE2B = -1552027, + YELL_RELEASE3 = -1552028, + YELL_RELEASE4 = -1552029, + YELL_WELCOME = -1552030, +}; - ScriptedInstance* pInstance; +enum eWardenUnits +{ + //phase 2(acid mobs) + ENTRY_TRICKSTER = 20905, + ENTRY_PH_HUNTER = 20906, + //phase 3 + ENTRY_MILLHOUSE = 20977, + //phase 4(acid mobs) + ENTRY_AKKIRIS = 20908, + ENTRY_SULFURON = 20909, + //phase 5(acid mobs) + ENTRY_TW_DRAK = 20910, + ENTRY_BL_DRAK = 20911, + //phase 6 + ENTRY_SKYRISS = 20912, +}; - bool IsRunning; - bool CanSpawn; +enum eWardenSpells +{ + //TARGET_SCRIPT + SPELL_TARGET_ALPHA = 36856, + SPELL_TARGET_BETA = 36854, + SPELL_TARGET_DELTA = 36857, + SPELL_TARGET_GAMMA = 36858, + SPELL_TARGET_OMEGA = 36852, + SPELL_BUBBLE_VISUAL = 36849, +}; - uint32 EventProgress_Timer; - uint32 Phase; +class npc_warden_mellichar : public CreatureScript +{ + public: - void Reset() - { - IsRunning = false; - CanSpawn = false; + npc_warden_mellichar() + : CreatureScript("npc_warden_mellichar") + { + } + struct npc_warden_mellicharAI : public ScriptedAI + { + npc_warden_mellicharAI(Creature* pCreature) : ScriptedAI(pCreature) + { + pInstance = pCreature->GetInstanceData(); + } - EventProgress_Timer = 22000; - Phase = 1; + ScriptedInstance* pInstance; - me->SetFlag(UNIT_FIELD_FLAGS,UNIT_FLAG_NON_ATTACKABLE); - DoCast(me, SPELL_TARGET_OMEGA); + bool IsRunning; + bool CanSpawn; - if (pInstance) - pInstance->SetData(TYPE_HARBINGERSKYRISS,NOT_STARTED); - } + uint32 EventProgress_Timer; + uint32 Phase; - void AttackStart(Unit* /*who*/) {} + void Reset() + { + IsRunning = false; + CanSpawn = false; - void MoveInLineOfSight(Unit *who) - { - if (IsRunning) - return; + EventProgress_Timer = 22000; + Phase = 1; - if (!me->getVictim() && who->isTargetableForAttack() && (me->IsHostileTo(who)) && who->isInAccessiblePlaceFor(me)) - { - if (!me->canFly() && me->GetDistanceZ(who) > CREATURE_Z_ATTACK_RANGE) - return; - if (who->GetTypeId() != TYPEID_PLAYER) - return; - - float attackRadius = me->GetAttackDistance(who)/10; - if (me->IsWithinDistInMap(who, attackRadius) && me->IsWithinLOSInMap(who)) - EnterCombat(who); - } - } + me->SetFlag(UNIT_FIELD_FLAGS,UNIT_FLAG_NON_ATTACKABLE); + DoCast(me, SPELL_TARGET_OMEGA); - void EnterCombat(Unit * /*who*/) - { - DoScriptText(YELL_INTRO1, me); - DoCast(me, SPELL_BUBBLE_VISUAL); + if (pInstance) + pInstance->SetData(TYPE_HARBINGERSKYRISS,NOT_STARTED); + } - if (pInstance) - { - pInstance->SetData(TYPE_HARBINGERSKYRISS,IN_PROGRESS); - pInstance->HandleGameObject(pInstance->GetData64(DATA_SPHERE_SHIELD), false); - IsRunning = true; - } - } + void AttackStart(Unit* /*who*/) {} - bool CanProgress() - { - if (pInstance) - { - if (Phase == 7 && pInstance->GetData(TYPE_WARDEN_4) == DONE) - return true; - if (Phase == 6 && pInstance->GetData(TYPE_WARDEN_3) == DONE) - return true; - if (Phase == 5 && pInstance->GetData(TYPE_WARDEN_2) == DONE) - return true; - if (Phase == 4) - return true; - if (Phase == 3 && pInstance->GetData(TYPE_WARDEN_1) == DONE) - return true; - if (Phase == 2 && pInstance->GetData(TYPE_HARBINGERSKYRISS) == IN_PROGRESS) - return true; - if (Phase == 1 && pInstance->GetData(TYPE_HARBINGERSKYRISS) == IN_PROGRESS) - return true; - return false; - } - return false; - } + void MoveInLineOfSight(Unit *who) + { + if (IsRunning) + return; - void DoPrepareForPhase() - { - if (pInstance) - { - me->InterruptNonMeleeSpells(true); - me->RemoveAurasByType(SPELL_AURA_DUMMY); + if (!me->getVictim() && who->isTargetableForAttack() && (me->IsHostileTo(who)) && who->isInAccessiblePlaceFor(me)) + { + if (!me->canFly() && me->GetDistanceZ(who) > CREATURE_Z_ATTACK_RANGE) + return; + if (who->GetTypeId() != TYPEID_PLAYER) + return; + + float attackRadius = me->GetAttackDistance(who)/10; + if (me->IsWithinDistInMap(who, attackRadius) && me->IsWithinLOSInMap(who)) + EnterCombat(who); + } + } - switch(Phase) + void EnterCombat(Unit * /*who*/) { - case 2: - DoCast(me, SPELL_TARGET_ALPHA); - pInstance->SetData(TYPE_WARDEN_1,IN_PROGRESS); + DoScriptText(YELL_INTRO1, me); + DoCast(me, SPELL_BUBBLE_VISUAL); + + if (pInstance) + { + pInstance->SetData(TYPE_HARBINGERSKYRISS,IN_PROGRESS); pInstance->HandleGameObject(pInstance->GetData64(DATA_SPHERE_SHIELD), false); - break; - case 3: - DoCast(me, SPELL_TARGET_BETA); - pInstance->SetData(TYPE_WARDEN_2,IN_PROGRESS); - break; - case 5: - DoCast(me, SPELL_TARGET_DELTA); - pInstance->SetData(TYPE_WARDEN_3,IN_PROGRESS); - break; - case 6: - DoCast(me, SPELL_TARGET_GAMMA); - pInstance->SetData(TYPE_WARDEN_4,IN_PROGRESS); - break; - case 7: - pInstance->SetData(TYPE_WARDEN_5,IN_PROGRESS); - break; + IsRunning = true; + } } - CanSpawn = true; - } - } - - void UpdateAI(const uint32 diff) - { - if (!IsRunning) - return; - if (EventProgress_Timer <= diff) - { - if (pInstance) + bool CanProgress() { - if (pInstance->GetData(TYPE_HARBINGERSKYRISS) == FAIL) + if (pInstance) { - Reset(); - return; + if (Phase == 7 && pInstance->GetData(TYPE_WARDEN_4) == DONE) + return true; + if (Phase == 6 && pInstance->GetData(TYPE_WARDEN_3) == DONE) + return true; + if (Phase == 5 && pInstance->GetData(TYPE_WARDEN_2) == DONE) + return true; + if (Phase == 4) + return true; + if (Phase == 3 && pInstance->GetData(TYPE_WARDEN_1) == DONE) + return true; + if (Phase == 2 && pInstance->GetData(TYPE_HARBINGERSKYRISS) == IN_PROGRESS) + return true; + if (Phase == 1 && pInstance->GetData(TYPE_HARBINGERSKYRISS) == IN_PROGRESS) + return true; + return false; } + return false; } - if (CanSpawn) + void DoPrepareForPhase() { - //continue beam omega pod, unless we are about to summon skyriss - if (Phase != 7) - DoCast(me, SPELL_TARGET_OMEGA); - - switch(Phase) + if (pInstance) { + me->InterruptNonMeleeSpells(true); + me->RemoveAurasByType(SPELL_AURA_DUMMY); + + switch(Phase) + { case 2: - switch (urand(0,1)) - { - case 0: me->SummonCreature(ENTRY_TRICKSTER,478.326,-148.505,42.56,3.19,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,600000); break; - case 1: me->SummonCreature(ENTRY_PH_HUNTER,478.326,-148.505,42.56,3.19,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,600000); break; - } + DoCast(me, SPELL_TARGET_ALPHA); + pInstance->SetData(TYPE_WARDEN_1,IN_PROGRESS); + pInstance->HandleGameObject(pInstance->GetData64(DATA_SPHERE_SHIELD), false); break; case 3: - me->SummonCreature(ENTRY_MILLHOUSE,413.292,-148.378,42.56,6.27,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,600000); - break; - case 4: - DoScriptText(YELL_RELEASE2B, me); + DoCast(me, SPELL_TARGET_BETA); + pInstance->SetData(TYPE_WARDEN_2,IN_PROGRESS); break; case 5: - switch (urand(0,1)) - { - case 0: me->SummonCreature(ENTRY_AKKIRIS,420.179,-174.396,42.58,0.02,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,600000); break; - case 1: me->SummonCreature(ENTRY_SULFURON,420.179,-174.396,42.58,0.02,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,600000); break; - } + DoCast(me, SPELL_TARGET_DELTA); + pInstance->SetData(TYPE_WARDEN_3,IN_PROGRESS); break; case 6: - switch (urand(0,1)) - { - case 0: me->SummonCreature(ENTRY_TW_DRAK,471.795,-174.58,42.58,3.06,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,600000); break; - case 1: me->SummonCreature(ENTRY_BL_DRAK,471.795,-174.58,42.58,3.06,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,600000); break; - } + DoCast(me, SPELL_TARGET_GAMMA); + pInstance->SetData(TYPE_WARDEN_4,IN_PROGRESS); break; case 7: - me->SummonCreature(ENTRY_SKYRISS,445.763,-191.639,44.64,1.60,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,600000); - DoScriptText(YELL_WELCOME, me); + pInstance->SetData(TYPE_WARDEN_5,IN_PROGRESS); break; + } + CanSpawn = true; } - CanSpawn = false; - ++Phase; } - if (CanProgress()) + + void UpdateAI(const uint32 diff) { - switch(Phase) + if (!IsRunning) + return; + + if (EventProgress_Timer <= diff) { - case 1: - DoScriptText(YELL_INTRO2, me); - EventProgress_Timer = 10000; + if (pInstance) + { + if (pInstance->GetData(TYPE_HARBINGERSKYRISS) == FAIL) + { + Reset(); + return; + } + } + + if (CanSpawn) + { + //continue beam omega pod, unless we are about to summon skyriss + if (Phase != 7) + DoCast(me, SPELL_TARGET_OMEGA); + + switch(Phase) + { + case 2: + switch (urand(0,1)) + { + case 0: + me->SummonCreature(ENTRY_TRICKSTER,478.326,-148.505,42.56,3.19,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,600000); + break; + case 1: + me->SummonCreature(ENTRY_PH_HUNTER,478.326,-148.505,42.56,3.19,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,600000); + break; + } + break; + case 3: + me->SummonCreature(ENTRY_MILLHOUSE,413.292,-148.378,42.56,6.27,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,600000); + break; + case 4: + DoScriptText(YELL_RELEASE2B, me); + break; + case 5: + switch (urand(0,1)) + { + case 0: + me->SummonCreature(ENTRY_AKKIRIS,420.179,-174.396,42.58,0.02,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,600000); + break; + case 1: + me->SummonCreature(ENTRY_SULFURON,420.179,-174.396,42.58,0.02,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,600000); + break; + } + break; + case 6: + switch (urand(0,1)) + { + case 0: + me->SummonCreature(ENTRY_TW_DRAK,471.795,-174.58,42.58,3.06,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,600000); + break; + case 1: + me->SummonCreature(ENTRY_BL_DRAK,471.795,-174.58,42.58,3.06,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,600000); + break; + } + break; + case 7: + me->SummonCreature(ENTRY_SKYRISS,445.763,-191.639,44.64,1.60,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,600000); + DoScriptText(YELL_WELCOME, me); + break; + } + CanSpawn = false; ++Phase; - break; - case 2: - DoScriptText(YELL_RELEASE1, me); - DoPrepareForPhase(); - EventProgress_Timer = 7000; - break; - case 3: - DoScriptText(YELL_RELEASE2A, me); - DoPrepareForPhase(); - EventProgress_Timer = 10000; - break; - case 4: - DoPrepareForPhase(); - EventProgress_Timer = 15000; - break; - case 5: - DoScriptText(YELL_RELEASE3, me); - DoPrepareForPhase(); - EventProgress_Timer = 15000; - break; - case 6: - DoScriptText(YELL_RELEASE4, me); - DoPrepareForPhase(); - EventProgress_Timer = 15000; - break; - case 7: - DoPrepareForPhase(); - EventProgress_Timer = 15000; - break; - } + } + if (CanProgress()) + { + switch(Phase) + { + case 1: + DoScriptText(YELL_INTRO2, me); + EventProgress_Timer = 10000; + ++Phase; + break; + case 2: + DoScriptText(YELL_RELEASE1, me); + DoPrepareForPhase(); + EventProgress_Timer = 7000; + break; + case 3: + DoScriptText(YELL_RELEASE2A, me); + DoPrepareForPhase(); + EventProgress_Timer = 10000; + break; + case 4: + DoPrepareForPhase(); + EventProgress_Timer = 15000; + break; + case 5: + DoScriptText(YELL_RELEASE3, me); + DoPrepareForPhase(); + EventProgress_Timer = 15000; + break; + case 6: + DoScriptText(YELL_RELEASE4, me); + DoPrepareForPhase(); + EventProgress_Timer = 15000; + break; + case 7: + DoPrepareForPhase(); + EventProgress_Timer = 15000; + break; + } + } + } + else + EventProgress_Timer -= diff; } - } else EventProgress_Timer -= diff; - } + }; + + CreatureAI* OnGetAI(Creature* creature) const + { + return new npc_warden_mellicharAI(creature); + } }; -CreatureAI* GetAI_npc_warden_mellichar(Creature* pCreature) -{ - return new npc_warden_mellicharAI (pCreature); -} /*##### # mob_zerekethvoidzone (this script probably not needed in future -> `creature_template_addon`.`auras`='36120 0') @@ -480,43 +526,39 @@ CreatureAI* GetAI_npc_warden_mellichar(Creature* pCreature) #define SPELL_VOID_ZONE_DAMAGE 36120 -struct mob_zerekethvoidzoneAI : public ScriptedAI +class mob_zerekethvoidzone : public CreatureScript { - mob_zerekethvoidzoneAI(Creature *c) : ScriptedAI(c) {} + public: - void Reset() - { - me->SetUInt32Value(UNIT_NPC_FLAGS,0); - me->setFaction(16); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - - DoCast(me, SPELL_VOID_ZONE_DAMAGE); - } + mob_zerekethvoidzone() + : CreatureScript("mob_zerekethvoidzone") + { + } + struct mob_zerekethvoidzoneAI : public ScriptedAI + { + mob_zerekethvoidzoneAI(Creature* pCreature) : ScriptedAI(pCreature) {} - void EnterCombat(Unit* /*who*/) {} + void Reset() + { + me->SetUInt32Value(UNIT_NPC_FLAGS,0); + me->setFaction(16); + me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + + DoCast(me, SPELL_VOID_ZONE_DAMAGE); + } + + void EnterCombat(Unit* /*who*/) {} + }; + + CreatureAI* OnGetAI(Creature* creature) const + { + return new mob_zerekethvoidzoneAI(creature); + } }; -CreatureAI* GetAI_mob_zerekethvoidzoneAI(Creature* pCreature) -{ - return new mob_zerekethvoidzoneAI (pCreature); -} - void AddSC_arcatraz() { - Script *newscript; - - newscript = new Script; - newscript->Name = "npc_millhouse_manastorm"; - newscript->GetAI = &GetAI_npc_millhouse_manastorm; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name = "npc_warden_mellichar"; - newscript->GetAI = &GetAI_npc_warden_mellichar; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name = "mob_zerekethvoidzone"; - newscript->GetAI = &GetAI_mob_zerekethvoidzoneAI; - newscript->RegisterSelf(); + new npc_millhouse_manastorm(); + new npc_warden_mellichar(); + new mob_zerekethvoidzone(); } diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp index 5821e7e4f77..63e522ad63d 100644 --- a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp +++ b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp @@ -31,265 +31,284 @@ EndContentData */ #include "ScriptPCH.h" #include "arcatraz.h" -#define SAY_INTRO -1552000 -#define SAY_AGGRO -1552001 -#define SAY_KILL_1 -1552002 -#define SAY_KILL_2 -1552003 -#define SAY_MIND_1 -1552004 -#define SAY_MIND_2 -1552005 -#define SAY_FEAR_1 -1552006 -#define SAY_FEAR_2 -1552007 -#define SAY_IMAGE -1552008 -#define SAY_DEATH -1552009 - -#define SPELL_FEAR 39415 - -#define SPELL_MIND_REND 36924 -#define H_SPELL_MIND_REND 39017 - -#define SPELL_DOMINATION 37162 -#define H_SPELL_DOMINATION 39019 +enum eSays +{ + SAY_INTRO = -1552000, + SAY_AGGRO = -1552001, + SAY_KILL_1 = -1552002, + SAY_KILL_2 = -1552003, + SAY_MIND_1 = -1552004, + SAY_MIND_2 = -1552005, + SAY_FEAR_1 = -1552006, + SAY_FEAR_2 = -1552007, + SAY_IMAGE = -1552008, + SAY_DEATH = -1552009, +}; -#define H_SPELL_MANA_BURN 39020 +enum eSpells +{ + SPELL_FEAR = 39415, + SPELL_MIND_REND = 36924, + H_SPELL_MIND_REND = 39017, + SPELL_DOMINATION = 37162, + H_SPELL_DOMINATION = 39019, + H_SPELL_MANA_BURN = 39020, + SPELL_66_ILLUSION = 36931, //entry 21466 + SPELL_33_ILLUSION = 36932, //entry 21467 +}; -#define SPELL_66_ILLUSION 36931 //entry 21466 -#define SPELL_33_ILLUSION 36932 //entry 21467 -struct boss_harbinger_skyrissAI : public ScriptedAI +class boss_harbinger_skyriss : public CreatureScript { - boss_harbinger_skyrissAI(Creature *c) : ScriptedAI(c) - { - pInstance = c->GetInstanceData(); - Intro = false; - } - - ScriptedInstance *pInstance; - - bool Intro; - bool IsImage33; - bool IsImage66; - - uint32 Intro_Phase; - uint32 Intro_Timer; - uint32 MindRend_Timer; - uint32 Fear_Timer; - uint32 Domination_Timer; - uint32 ManaBurn_Timer; - - void Reset() - { - if (!Intro) - me->SetFlag(UNIT_FIELD_FLAGS,UNIT_FLAG_OOC_NOT_ATTACKABLE); - - IsImage33 = false; - IsImage66 = false; - - Intro_Phase = 1; - Intro_Timer = 5000; - MindRend_Timer = 3000; - Fear_Timer = 15000; - Domination_Timer = 30000; - ManaBurn_Timer = 25000; - } - - void MoveInLineOfSight(Unit *who) - { - if (!Intro) + public: + + boss_harbinger_skyriss() + : CreatureScript("boss_harbinger_skyriss") { - return; } - ScriptedAI::MoveInLineOfSight(who); - } - - void EnterCombat(Unit * /*who*/) {} - - void JustDied(Unit* /*Killer*/) - { - DoScriptText(SAY_DEATH, me); - if (pInstance) - pInstance->SetData(TYPE_HARBINGERSKYRISS,DONE); - } - - void JustSummoned(Creature *summon) - { - if (!summon) - return; - if (IsImage66) - summon->SetHealth((summon->GetMaxHealth()*33)/100); - else - summon->SetHealth((summon->GetMaxHealth()*66)/100); - if (me->getVictim()) - if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) - summon->AI()->AttackStart(pTarget); - } - - void KilledUnit(Unit* victim) - { - //won't yell killing pet/other unit - if (victim->GetEntry() == 21436) - return; - - DoScriptText(RAND(SAY_KILL_1,SAY_KILL_2), me); - } - - void DoSplit(uint32 val) - { - if (me->IsNonMeleeSpellCasted(false)) - me->InterruptNonMeleeSpells(false); - - DoScriptText(SAY_IMAGE, me); - - if (val == 66) - DoCast(me, SPELL_66_ILLUSION); - else - DoCast(me, SPELL_33_ILLUSION); - } - - void UpdateAI(const uint32 diff) - { - if (!Intro) + struct boss_harbinger_skyrissAI : public ScriptedAI { - if (!pInstance) - return; + boss_harbinger_skyrissAI(Creature* pCreature) : ScriptedAI(pCreature) + { + pInstance = pCreature->GetInstanceData(); + Intro = false; + } + + ScriptedInstance *pInstance; + + bool Intro; + bool IsImage33; + bool IsImage66; + + uint32 Intro_Phase; + uint32 Intro_Timer; + uint32 MindRend_Timer; + uint32 Fear_Timer; + uint32 Domination_Timer; + uint32 ManaBurn_Timer; + + void Reset() + { + if (!Intro) + me->SetFlag(UNIT_FIELD_FLAGS,UNIT_FLAG_OOC_NOT_ATTACKABLE); + + IsImage33 = false; + IsImage66 = false; + + Intro_Phase = 1; + Intro_Timer = 5000; + MindRend_Timer = 3000; + Fear_Timer = 15000; + Domination_Timer = 30000; + ManaBurn_Timer = 25000; + } + + void MoveInLineOfSight(Unit *who) + { + if (!Intro) + return; + + ScriptedAI::MoveInLineOfSight(who); + } + + void EnterCombat(Unit * /*who*/) {} - if (Intro_Timer <= diff) + void JustDied(Unit* /*Killer*/) { - switch(Intro_Phase) + DoScriptText(SAY_DEATH, me); + if (pInstance) + pInstance->SetData(TYPE_HARBINGERSKYRISS,DONE); + } + + void JustSummoned(Creature *summon) + { + if (!summon) + return; + if (IsImage66) + summon->SetHealth((summon->GetMaxHealth()*33)/100); + else + summon->SetHealth((summon->GetMaxHealth()*66)/100); + if (me->getVictim()) + if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) + summon->AI()->AttackStart(pTarget); + } + + void KilledUnit(Unit* victim) + { + //won't yell killing pet/other unit + if (victim->GetEntry() == 21436) + return; + + DoScriptText(RAND(SAY_KILL_1,SAY_KILL_2), me); + } + + void DoSplit(uint32 val) + { + if (me->IsNonMeleeSpellCasted(false)) + me->InterruptNonMeleeSpells(false); + + DoScriptText(SAY_IMAGE, me); + + if (val == 66) + DoCast(me, SPELL_66_ILLUSION); + else + DoCast(me, SPELL_33_ILLUSION); + } + + void UpdateAI(const uint32 diff) + { + if (!Intro) { - case 1: - DoScriptText(SAY_INTRO, me); - pInstance->HandleGameObject(pInstance->GetData64(DATA_SPHERE_SHIELD), true); - ++Intro_Phase; - Intro_Timer = 25000; - break; - case 2: - DoScriptText(SAY_AGGRO, me); - if (Unit *mellic = Unit::GetUnit(*me,pInstance->GetData64(DATA_MELLICHAR))) + if (!pInstance) + return; + + if (Intro_Timer <= diff) + { + switch(Intro_Phase) { - //should have a better way to do this. possibly spell exist. - mellic->setDeathState(JUST_DIED); - mellic->SetHealth(0); - pInstance->SetData(TYPE_SHIELD_OPEN,IN_PROGRESS); + case 1: + DoScriptText(SAY_INTRO, me); + pInstance->HandleGameObject(pInstance->GetData64(DATA_SPHERE_SHIELD), true); + ++Intro_Phase; + Intro_Timer = 25000; + break; + case 2: + DoScriptText(SAY_AGGRO, me); + if (Unit *mellic = Unit::GetUnit(*me,pInstance->GetData64(DATA_MELLICHAR))) + { + //should have a better way to do this. possibly spell exist. + mellic->setDeathState(JUST_DIED); + mellic->SetHealth(0); + pInstance->SetData(TYPE_SHIELD_OPEN,IN_PROGRESS); + } + ++Intro_Phase; + Intro_Timer = 3000; + break; + case 3: + me->RemoveFlag(UNIT_FIELD_FLAGS,UNIT_FLAG_OOC_NOT_ATTACKABLE); + Intro = true; + break; } - ++Intro_Phase; - Intro_Timer = 3000; - break; - case 3: - me->RemoveFlag(UNIT_FIELD_FLAGS,UNIT_FLAG_OOC_NOT_ATTACKABLE); - Intro = true; - break; + } + else + Intro_Timer -=diff; } - } else Intro_Timer -=diff; - } - - if (!UpdateVictim()) - return; + if (!UpdateVictim()) + return; - if (!IsImage66 && ((me->GetHealth()*100) / me->GetMaxHealth() <= 66)) - { - DoSplit(66); - IsImage66 = true; - } - if (!IsImage33 && ((me->GetHealth()*100) / me->GetMaxHealth() <= 33)) - { - DoSplit(33); - IsImage33 = true; - } + if (!IsImage66 && ((me->GetHealth()*100) / me->GetMaxHealth() <= 66)) + { + DoSplit(66); + IsImage66 = true; + } + if (!IsImage33 && ((me->GetHealth()*100) / me->GetMaxHealth() <= 33)) + { + DoSplit(33); + IsImage33 = true; + } - if (MindRend_Timer <= diff) - { - if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,1)) - DoCast(pTarget, SPELL_MIND_REND); - else - DoCast(me->getVictim(), SPELL_MIND_REND); + if (MindRend_Timer <= diff) + { + if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,1)) + DoCast(pTarget, SPELL_MIND_REND); + else + DoCast(me->getVictim(), SPELL_MIND_REND); - MindRend_Timer = 8000; - } else MindRend_Timer -=diff; + MindRend_Timer = 8000; + } + else + MindRend_Timer -=diff; - if (Fear_Timer <= diff) - { - if (me->IsNonMeleeSpellCasted(false)) - return; + if (Fear_Timer <= diff) + { + if (me->IsNonMeleeSpellCasted(false)) + return; - DoScriptText(RAND(SAY_FEAR_1,SAY_FEAR_2), me); + DoScriptText(RAND(SAY_FEAR_1,SAY_FEAR_2), me); - if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,1)) - DoCast(pTarget, SPELL_FEAR); - else - DoCast(me->getVictim(), SPELL_FEAR); + if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,1)) + DoCast(pTarget, SPELL_FEAR); + else + DoCast(me->getVictim(), SPELL_FEAR); - Fear_Timer = 25000; - } else Fear_Timer -=diff; + Fear_Timer = 25000; + } + else + Fear_Timer -=diff; - if (Domination_Timer <= diff) - { - if (me->IsNonMeleeSpellCasted(false)) - return; + if (Domination_Timer <= diff) + { + if (me->IsNonMeleeSpellCasted(false)) + return; - DoScriptText(RAND(SAY_MIND_1,SAY_MIND_2), me); + DoScriptText(RAND(SAY_MIND_1,SAY_MIND_2), me); - if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,1)) - DoCast(pTarget, SPELL_DOMINATION); - else - DoCast(me->getVictim(), SPELL_DOMINATION); + if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,1)) + DoCast(pTarget, SPELL_DOMINATION); + else + DoCast(me->getVictim(), SPELL_DOMINATION); - Domination_Timer = 16000+rand()%16000; - } else Domination_Timer -=diff; + Domination_Timer = 16000+rand()%16000; + } + else + Domination_Timer -=diff; - if (IsHeroic()) + if (IsHeroic()) + { + if (ManaBurn_Timer <= diff) + { + if (me->IsNonMeleeSpellCasted(false)) + return; + + if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,1)) + DoCast(pTarget, H_SPELL_MANA_BURN); + + ManaBurn_Timer = 16000+rand()%16000; + } + else + ManaBurn_Timer -=diff; + } + DoMeleeAttackIfReady(); + } + }; + + CreatureAI* GetAI_boss_harbinger_skyriss(Creature* pCreature) { - if (ManaBurn_Timer <= diff) - { - if (me->IsNonMeleeSpellCasted(false)) - return; - - if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,1)) - DoCast(pTarget, H_SPELL_MANA_BURN); - - ManaBurn_Timer = 16000+rand()%16000; - } else ManaBurn_Timer -=diff; + return new boss_harbinger_skyrissAI (pCreature); } - - DoMeleeAttackIfReady(); - } }; -CreatureAI* GetAI_boss_harbinger_skyriss(Creature* pCreature) -{ - return new boss_harbinger_skyrissAI (pCreature); -} #define SPELL_MIND_REND_IMAGE 36929 #define H_SPELL_MIND_REND_IMAGE 39021 -struct boss_harbinger_skyriss_illusionAI : public ScriptedAI +class boss_harbinger_skyriss_illusion : public CreatureScript { - boss_harbinger_skyriss_illusionAI(Creature *c) : ScriptedAI(c) - { - } + public: + + boss_harbinger_skyriss_illusion() + : CreatureScript("boss_harbinger_skyriss_illusion") + { + } + struct boss_harbinger_skyriss_illusionAI : public ScriptedAI + { + boss_harbinger_skyriss_illusionAI(Creature* pCreature) : ScriptedAI(pCreature) {} - void Reset() { } + void Reset() { } + + void EnterCombat(Unit * /*who*/) { } + }; - void EnterCombat(Unit * /*who*/) { } + CreatureAI* GetAI(Creature* creature) const + { + return new boss_harbinger_skyriss_illusionAI(creature); + } }; -CreatureAI* GetAI_boss_harbinger_skyriss_illusion(Creature* pCreature) -{ - return new boss_harbinger_skyriss_illusionAI (pCreature); -} void AddSC_boss_harbinger_skyriss() { - Script *newscript; - - newscript = new Script; - newscript->Name = "boss_harbinger_skyriss"; - newscript->GetAI = &GetAI_boss_harbinger_skyriss; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name = "boss_harbinger_skyriss_illusion"; - newscript->GetAI = &GetAI_boss_harbinger_skyriss_illusion; - newscript->RegisterSelf(); + new boss_harbinger_skyriss(); + new boss_harbinger_skyriss_illusion(); } diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp index 4d257d4b4c2..2a064897167 100644 --- a/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp +++ b/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp @@ -28,17 +28,21 @@ EndScriptData */ #define MAX_ENCOUNTER 9 -#define CONTAINMENT_CORE_SECURITY_FIELD_ALPHA 184318 //door opened when Wrath-Scryer Soccothrates dies -#define CONTAINMENT_CORE_SECURITY_FIELD_BETA 184319 //door opened when Dalliah the Doomsayer dies -#define POD_ALPHA 183961 //pod first boss wave -#define POD_BETA 183963 //pod second boss wave -#define POD_DELTA 183964 //pod third boss wave -#define POD_GAMMA 183962 //pod fourth boss wave -#define POD_OMEGA 183965 //pod fifth boss wave -#define WARDENS_SHIELD 184802 // warden shield -#define SEAL_SPHERE 184802 //shield 'protecting' mellichar - -#define MELLICHAR 20904 //skyriss will kill this unit +enum eUnits +{ + CONTAINMENT_CORE_SECURITY_FIELD_ALPHA = 184318,//door opened when Wrath-Scryer Soccothrates dies + CONTAINMENT_CORE_SECURITY_FIELD_BETA = 184319,//door opened when Dalliah the Doomsayer dies + POD_ALPHA = 183961,//pod first boss wave + POD_BETA = 183963,//pod second boss wave + POD_DELTA = 183964,//pod third boss wave + POD_GAMMA = 183962,//pod fourth boss wave + POD_OMEGA = 183965,//pod fifth boss wave + WARDENS_SHIELD = 184802,// warden shield + SEAL_SPHERE = 184802,//shield 'protecting' mellichar + + MELLICHAR = 20904,//skyriss will kill this unit +}; + /* Arcatraz encounters: 1 - Zereketh the Unbound event @@ -47,196 +51,192 @@ EndScriptData */ 4 - Harbinger Skyriss event, 5 sub-events */ -struct instance_arcatraz : public ScriptedInstance +class instance_arcatraz : public InstanceMapScript { - instance_arcatraz(Map* pMap) : ScriptedInstance(pMap) {Initialize();}; - - uint32 m_auiEncounter[MAX_ENCOUNTER]; - - uint64 Containment_Core_Security_Field_AlphaGUID; - uint64 Containment_Core_Security_Field_BetaGUID; - uint64 Pod_AlphaGUID; - uint64 Pod_GammaGUID; - uint64 Pod_BetaGUID; - uint64 Pod_DeltaGUID; - uint64 Pod_OmegaGUID; - uint64 Wardens_ShieldGUID; - uint64 GoSphereGUID; - uint64 MellicharGUID; - - void Initialize() - { - memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); - - Containment_Core_Security_Field_AlphaGUID = 0; - Containment_Core_Security_Field_BetaGUID = 0; - Pod_AlphaGUID = 0; - Pod_GammaGUID = 0; - Pod_BetaGUID = 0; - Pod_DeltaGUID = 0; - Pod_OmegaGUID = 0; - Wardens_ShieldGUID = 0; - GoSphereGUID = 0; - MellicharGUID = 0; - } - - bool IsEncounterInProgress() const - { - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) - if (m_auiEncounter[i] == IN_PROGRESS) return true; - - return false; - } - - void OnGameObjectCreate(GameObject* pGo, bool /*add*/) - { - switch(pGo->GetEntry()) + public: + instance_arcatraz() + : InstanceMapScript("instance_arcatraz") { - case CONTAINMENT_CORE_SECURITY_FIELD_ALPHA: Containment_Core_Security_Field_AlphaGUID = pGo->GetGUID(); break; - case CONTAINMENT_CORE_SECURITY_FIELD_BETA: Containment_Core_Security_Field_BetaGUID = pGo->GetGUID(); break; - case POD_ALPHA: Pod_AlphaGUID = pGo->GetGUID(); break; - case POD_GAMMA: Pod_GammaGUID = pGo->GetGUID(); break; - case POD_BETA: Pod_BetaGUID = pGo->GetGUID(); break; - case POD_DELTA: Pod_DeltaGUID = pGo->GetGUID(); break; - case POD_OMEGA: Pod_OmegaGUID = pGo->GetGUID(); break; - case SEAL_SPHERE: GoSphereGUID = pGo->GetGUID(); break; - //case WARDENS_SHIELD: Wardens_ShieldGUID = pGo->GetGUID(); break; } - } - - void OnCreatureCreate(Creature* pCreature, bool /*add*/) - { - if (pCreature->GetEntry() == MELLICHAR) - MellicharGUID = pCreature->GetGUID(); - } - - void SetData(uint32 type, uint32 data) - { - switch(type) + struct instance_arcatraz_InstanceMapScript : public ScriptedInstance { - case TYPE_ZEREKETH: - m_auiEncounter[0] = data; - break; - - case TYPE_DALLIAH: - if (data == DONE) - { - if (GameObject *pGo = instance->GetGameObject(Containment_Core_Security_Field_BetaGUID)) - pGo->UseDoorOrButton(); - } - m_auiEncounter[1] = data; - break; - - case TYPE_SOCCOTHRATES: - if (data == DONE) - { - if (GameObject *pGo = instance->GetGameObject(Containment_Core_Security_Field_AlphaGUID)) - pGo->UseDoorOrButton(); - } - m_auiEncounter[2] = data; - break; - - case TYPE_HARBINGERSKYRISS: - if (data == NOT_STARTED || data == FAIL) - { - m_auiEncounter[4] = NOT_STARTED; - m_auiEncounter[5] = NOT_STARTED; - m_auiEncounter[6] = NOT_STARTED; - m_auiEncounter[7] = NOT_STARTED; - m_auiEncounter[8] = NOT_STARTED; - } - m_auiEncounter[3] = data; - break; - - case TYPE_WARDEN_1: - if (data == IN_PROGRESS) - if (GameObject *pGo = instance->GetGameObject(Pod_AlphaGUID)) - pGo->UseDoorOrButton(); - m_auiEncounter[4] = data; - break; - - case TYPE_WARDEN_2: - if (data == IN_PROGRESS) + instance_arcatraz_InstanceMapScript(Map* pMap) : ScriptedInstance(pMap) { Initialize(); }; + + uint32 m_auiEncounter[MAX_ENCOUNTER]; + + uint64 Containment_Core_Security_Field_AlphaGUID; + uint64 Containment_Core_Security_Field_BetaGUID; + uint64 Pod_AlphaGUID; + uint64 Pod_GammaGUID; + uint64 Pod_BetaGUID; + uint64 Pod_DeltaGUID; + uint64 Pod_OmegaGUID; + uint64 Wardens_ShieldGUID; + uint64 GoSphereGUID; + uint64 MellicharGUID; + + void Initialize() + { + memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); + + Containment_Core_Security_Field_AlphaGUID = 0; + Containment_Core_Security_Field_BetaGUID = 0; + Pod_AlphaGUID = 0; + Pod_GammaGUID = 0; + Pod_BetaGUID = 0; + Pod_DeltaGUID = 0; + Pod_OmegaGUID = 0; + Wardens_ShieldGUID = 0; + GoSphereGUID = 0; + MellicharGUID = 0; + } + + bool IsEncounterInProgress() const + { + for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) + if (m_auiEncounter[i] == IN_PROGRESS) return true; + + return false; + } + + + void OnGameObjectCreate(GameObject* pGo, bool /*add*/) + { + switch(pGo->GetEntry()) { - if (GameObject *pGo = instance->GetGameObject(Pod_BetaGUID)) - pGo->UseDoorOrButton(); + case CONTAINMENT_CORE_SECURITY_FIELD_ALPHA: Containment_Core_Security_Field_AlphaGUID = pGo->GetGUID(); break; + case CONTAINMENT_CORE_SECURITY_FIELD_BETA: Containment_Core_Security_Field_BetaGUID = pGo->GetGUID(); break; + case POD_ALPHA: Pod_AlphaGUID = pGo->GetGUID(); break; + case POD_GAMMA: Pod_GammaGUID = pGo->GetGUID(); break; + case POD_BETA: Pod_BetaGUID = pGo->GetGUID(); break; + case POD_DELTA: Pod_DeltaGUID = pGo->GetGUID(); break; + case POD_OMEGA: Pod_OmegaGUID = pGo->GetGUID(); break; + case SEAL_SPHERE: GoSphereGUID = pGo->GetGUID(); break; + //case WARDENS_SHIELD: Wardens_ShieldGUID = pGo->GetGUID(); break; } - m_auiEncounter[5] = data; - break; + } - case TYPE_WARDEN_3: - if (data == IN_PROGRESS) - { - if (GameObject *pGo = instance->GetGameObject(Pod_DeltaGUID)) - pGo->UseDoorOrButton(); - } - m_auiEncounter[6] = data; - break; + void OnCreatureCreate(Creature* pCreature, bool /*add*/) + { + if (pCreature->GetEntry() == MELLICHAR) + MellicharGUID = pCreature->GetGUID(); + } - case TYPE_WARDEN_4: - if (data == IN_PROGRESS) + void SetData(uint32 type, uint32 data) + { + switch(type) { - if (GameObject *pGo = instance->GetGameObject(Pod_GammaGUID)) - pGo->UseDoorOrButton(); - } - m_auiEncounter[7] = data; - break; - - case TYPE_WARDEN_5: - if (data == IN_PROGRESS) + case TYPE_ZEREKETH: + m_auiEncounter[0] = data; + break; + case TYPE_DALLIAH: + if (data == DONE) + { + if (GameObject *pGo = instance->GetGameObject(Containment_Core_Security_Field_BetaGUID)) + pGo->UseDoorOrButton(); + } + m_auiEncounter[1] = data; + break; + case TYPE_SOCCOTHRATES: + if (data == DONE) + { + if (GameObject *pGo = instance->GetGameObject(Containment_Core_Security_Field_AlphaGUID)) + pGo->UseDoorOrButton(); + } + m_auiEncounter[2] = data; + break; + case TYPE_HARBINGERSKYRISS: + if (data == NOT_STARTED || data == FAIL) + { + m_auiEncounter[4] = NOT_STARTED; + m_auiEncounter[5] = NOT_STARTED; + m_auiEncounter[6] = NOT_STARTED; + m_auiEncounter[7] = NOT_STARTED; + m_auiEncounter[8] = NOT_STARTED; + } + m_auiEncounter[3] = data; + break; + case TYPE_WARDEN_1: + if (data == IN_PROGRESS) + if (GameObject *pGo = instance->GetGameObject(Pod_AlphaGUID)) + pGo->UseDoorOrButton(); + m_auiEncounter[4] = data; + break; + case TYPE_WARDEN_2: + if (data == IN_PROGRESS) + { + if (GameObject *pGo = instance->GetGameObject(Pod_BetaGUID)) + pGo->UseDoorOrButton(); + } + m_auiEncounter[5] = data; + break; + case TYPE_WARDEN_3: + if (data == IN_PROGRESS) + { + if (GameObject *pGo = instance->GetGameObject(Pod_DeltaGUID)) + pGo->UseDoorOrButton(); + } + m_auiEncounter[6] = data; + break; + case TYPE_WARDEN_4: + if (data == IN_PROGRESS) + { + if (GameObject *pGo = instance->GetGameObject(Pod_GammaGUID)) + pGo->UseDoorOrButton(); + } + m_auiEncounter[7] = data; + break; + case TYPE_WARDEN_5: + if (data == IN_PROGRESS) + { + if (GameObject *pGo = instance->GetGameObject(Pod_OmegaGUID)) + pGo->UseDoorOrButton(); + } + m_auiEncounter[8] = data; + break; + case TYPE_SHIELD_OPEN: + if (data == IN_PROGRESS) + { + if (GameObject *pGo = instance->GetGameObject(Wardens_ShieldGUID)) + pGo->UseDoorOrButton(); + } + break; + } + } + + uint32 GetData(uint32 type) + { + switch(type) { - if (GameObject *pGo = instance->GetGameObject(Pod_OmegaGUID)) - pGo->UseDoorOrButton(); + case TYPE_HARBINGERSKYRISS: return m_auiEncounter[3]; + case TYPE_WARDEN_1: return m_auiEncounter[4]; + case TYPE_WARDEN_2: return m_auiEncounter[5]; + case TYPE_WARDEN_3: return m_auiEncounter[6]; + case TYPE_WARDEN_4: return m_auiEncounter[7]; + case TYPE_WARDEN_5: return m_auiEncounter[8]; } - m_auiEncounter[8] = data; - break; - - case TYPE_SHIELD_OPEN: - if (data == IN_PROGRESS) + return 0; + } + + uint64 GetData64(uint32 data) + { + switch(data) { - if (GameObject *pGo = instance->GetGameObject(Wardens_ShieldGUID)) - pGo->UseDoorOrButton(); + case DATA_MELLICHAR: return MellicharGUID; + case DATA_SPHERE_SHIELD: return GoSphereGUID; } - break; - } - } + return 0; + } + }; - uint32 GetData(uint32 type) - { - switch(type) + InstanceData* OnGetInstanceData(InstanceMap* pMap) { - case TYPE_HARBINGERSKYRISS: return m_auiEncounter[3]; - case TYPE_WARDEN_1: return m_auiEncounter[4]; - case TYPE_WARDEN_2: return m_auiEncounter[5]; - case TYPE_WARDEN_3: return m_auiEncounter[6]; - case TYPE_WARDEN_4: return m_auiEncounter[7]; - case TYPE_WARDEN_5: return m_auiEncounter[8]; + return new instance_arcatraz_InstanceMapScript(pMap); } - return 0; - } - - uint64 GetData64(uint32 data) - { - switch(data) - { - case DATA_MELLICHAR: return MellicharGUID; - case DATA_SPHERE_SHIELD: return GoSphereGUID; - } - return 0; - } }; -InstanceData* GetInstanceData_instance_arcatraz(Map* pMap) -{ - return new instance_arcatraz(pMap); -} - void AddSC_instance_arcatraz() { - Script *newscript; - newscript = new Script; - newscript->Name = "instance_arcatraz"; - newscript->GetInstanceData = &GetInstanceData_instance_arcatraz; - newscript->RegisterSelf(); + new instance_arcatraz; } |