Scripts/Trial of the Crusader: Made instance script a more readable, fixed early despawning of worm boss

Closes issue #3915.

--HG--
branch : trunk
extra : rebase_source : 7c086f0859bec23e53b2f9f9b2c458c48b9940df
This commit is contained in:
Shauren
2010-12-27 18:19:49 +01:00
parent 8b99f28e29
commit 8865d367c6
8 changed files with 1354 additions and 1240 deletions
@@ -187,7 +187,7 @@ public:
{ {
if (pWho->GetTypeId() == TYPEID_PLAYER) if (pWho->GetTypeId() == TYPEID_PLAYER)
{ {
DoScriptText(urand(0,1) ? SAY_KILL1 : SAY_KILL2,me); DoScriptText(urand(0, 1) ? SAY_KILL1 : SAY_KILL2, me);
if (m_pInstance) if (m_pInstance)
m_pInstance->SetData(DATA_TRIBUTE_TO_IMMORTALITY_ELEGIBLE, 0); m_pInstance->SetData(DATA_TRIBUTE_TO_IMMORTALITY_ELEGIBLE, 0);
} }
@@ -197,7 +197,7 @@ public:
{ {
if (!m_bIntro) if (!m_bIntro)
{ {
DoScriptText(SAY_INTRO,me); DoScriptText(SAY_INTRO, me);
m_bIntro = false; m_bIntro = false;
} }
} }
@@ -208,14 +208,14 @@ public:
m_pInstance->SetData(TYPE_ANUBARAK, FAIL); m_pInstance->SetData(TYPE_ANUBARAK, FAIL);
//Summon Scarab Swarms neutral at random places //Summon Scarab Swarms neutral at random places
for (int i=0; i < 10; i++) for (int i=0; i < 10; i++)
if (Creature* pTemp = me->SummonCreature(NPC_SCARAB,AnubarakLoc[1].GetPositionX()+urand(0,50)-25,AnubarakLoc[1].GetPositionY()+urand(0,50)-25,AnubarakLoc[1].GetPositionZ())) if (Creature* pTemp = me->SummonCreature(NPC_SCARAB, AnubarakLoc[1].GetPositionX()+urand(0, 50)-25, AnubarakLoc[1].GetPositionY()+urand(0, 50)-25, AnubarakLoc[1].GetPositionZ()))
pTemp->setFaction(31); pTemp->setFaction(31);
} }
void JustDied(Unit* /*pKiller*/) void JustDied(Unit* /*pKiller*/)
{ {
Summons.DespawnAll(); Summons.DespawnAll();
DoScriptText(SAY_DEATH,me); DoScriptText(SAY_DEATH, me);
if (m_pInstance) if (m_pInstance)
m_pInstance->SetData(TYPE_ANUBARAK, DONE); m_pInstance->SetData(TYPE_ANUBARAK, DONE);
} }
@@ -223,16 +223,16 @@ public:
void JustSummoned(Creature* pSummoned) void JustSummoned(Creature* pSummoned)
{ {
Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM); Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM);
switch(pSummoned->GetEntry()) switch (pSummoned->GetEntry())
{ {
case NPC_BURROW: case NPC_BURROW:
m_vBurrowGUID.push_back(pSummoned->GetGUID()); m_vBurrowGUID.push_back(pSummoned->GetGUID());
pSummoned->SetReactState(REACT_PASSIVE); pSummoned->SetReactState(REACT_PASSIVE);
pSummoned->CastSpell(pSummoned,SPELL_CHURNING_GROUND,false); pSummoned->CastSpell(pSummoned, SPELL_CHURNING_GROUND, false);
break; break;
case NPC_SPIKE: case NPC_SPIKE:
pSummoned->CombatStart(pTarget); pSummoned->CombatStart(pTarget);
DoScriptText(EMOTE_SPIKE,me,pTarget); DoScriptText(EMOTE_SPIKE, me, pTarget);
break; break;
} }
Summons.Summon(pSummoned); Summons.Summon(pSummoned);
@@ -240,7 +240,7 @@ public:
void SummonedCreatureDespawn(Creature* pSummoned) void SummonedCreatureDespawn(Creature* pSummoned)
{ {
switch(pSummoned->GetEntry()) switch (pSummoned->GetEntry())
{ {
case NPC_SPIKE: case NPC_SPIKE:
m_uiPursuingSpikeTimer = 2*IN_MILLISECONDS; m_uiPursuingSpikeTimer = 2*IN_MILLISECONDS;
@@ -250,19 +250,19 @@ public:
void EnterCombat(Unit* /*pWho*/) void EnterCombat(Unit* /*pWho*/)
{ {
DoScriptText(SAY_AGGRO,me); DoScriptText(SAY_AGGRO, me);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
me->SetInCombatWithZone(); me->SetInCombatWithZone();
if (m_pInstance) if (m_pInstance)
m_pInstance->SetData(TYPE_ANUBARAK, IN_PROGRESS); m_pInstance->SetData(TYPE_ANUBARAK, IN_PROGRESS);
//Despawn Scarab Swarms neutral //Despawn Scarab Swarms neutral
Summons.DoAction(NPC_SCARAB,ACTION_SCARAB_SUBMERGE); Summons.DoAction(NPC_SCARAB, ACTION_SCARAB_SUBMERGE);
//Spawn Burrow //Spawn Burrow
for (int i=0; i < 4; i++) for (int i=0; i < 4; i++)
me->SummonCreature(NPC_BURROW,AnubarakLoc[i+2]); me->SummonCreature(NPC_BURROW, AnubarakLoc[i+2]);
//Spawn Frost Spheres //Spawn Frost Spheres
for (int i=0; i < 6; i++) for (int i=0; i < 6; i++)
if (Unit *pSummoned = me->SummonCreature(NPC_FROST_SPHERE,SphereSpawn[i])) if (Unit *pSummoned = me->SummonCreature(NPC_FROST_SPHERE, SphereSpawn[i]))
m_aSphereGUID[i] = pSummoned->GetGUID(); m_aSphereGUID[i] = pSummoned->GetGUID();
} }
@@ -271,7 +271,7 @@ public:
if (!UpdateVictim()) if (!UpdateVictim())
return; return;
switch(m_uiStage) switch (m_uiStage)
{ {
case 0: case 0:
if (m_uiFreezeSlashTimer <= uiDiff) if (m_uiFreezeSlashTimer <= uiDiff)
@@ -282,19 +282,19 @@ public:
if (m_uiPenetratingColdTimer <= uiDiff) if (m_uiPenetratingColdTimer <= uiDiff)
{ {
me->CastCustomSpell(SPELL_PENETRATING_COLD, SPELLVALUE_MAX_TARGETS, RAID_MODE(2,5)); me->CastCustomSpell(SPELL_PENETRATING_COLD, SPELLVALUE_MAX_TARGETS, RAID_MODE(2, 5));
m_uiPenetratingColdTimer = 20*IN_MILLISECONDS; m_uiPenetratingColdTimer = 20*IN_MILLISECONDS;
} else m_uiPenetratingColdTimer -= uiDiff; } else m_uiPenetratingColdTimer -= uiDiff;
if (m_uiSummonNerubianTimer <= uiDiff && (IsHeroic() || !m_bReachedPhase3)) if (m_uiSummonNerubianTimer <= uiDiff && (IsHeroic() || !m_bReachedPhase3))
{ {
me->CastCustomSpell(SPELL_SUMMON_BURROWER, SPELLVALUE_MAX_TARGETS, RAID_MODE(1,2,2,4)); me->CastCustomSpell(SPELL_SUMMON_BURROWER, SPELLVALUE_MAX_TARGETS, RAID_MODE(1, 2, 2, 4));
m_uiSummonNerubianTimer = 45*IN_MILLISECONDS; m_uiSummonNerubianTimer = 45*IN_MILLISECONDS;
} else m_uiSummonNerubianTimer -= uiDiff; } else m_uiSummonNerubianTimer -= uiDiff;
if (IsHeroic() && m_uiNerubianShadowStrikeTimer <= uiDiff) if (IsHeroic() && m_uiNerubianShadowStrikeTimer <= uiDiff)
{ {
Summons.DoAction(NPC_BURROWER,ACTION_SHADOW_STRIKE); Summons.DoAction(NPC_BURROWER, ACTION_SHADOW_STRIKE);
m_uiNerubianShadowStrikeTimer = 30*IN_MILLISECONDS; m_uiNerubianShadowStrikeTimer = 30*IN_MILLISECONDS;
} else m_uiNerubianShadowStrikeTimer -= uiDiff; } else m_uiNerubianShadowStrikeTimer -= uiDiff;
@@ -305,10 +305,10 @@ public:
} else m_uiSubmergeTimer -= uiDiff; } else m_uiSubmergeTimer -= uiDiff;
break; break;
case 1: case 1:
DoCast(me,SPELL_SUBMERGE_ANUBARAK); DoCast(me, SPELL_SUBMERGE_ANUBARAK);
DoCast(me,SPELL_CLEAR_ALL_DEBUFFS); DoCast(me, SPELL_CLEAR_ALL_DEBUFFS);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
DoScriptText(SAY_BURROWER,me); DoScriptText(SAY_BURROWER, me);
m_uiScarabSummoned = 0; m_uiScarabSummoned = 0;
m_uiSummonScarabTimer = 4*IN_MILLISECONDS; m_uiSummonScarabTimer = 4*IN_MILLISECONDS;
m_uiStage = 2; m_uiStage = 2;
@@ -327,14 +327,14 @@ public:
* - The correct implementation is more likely the comment below but it needs spell knowledge * - The correct implementation is more likely the comment below but it needs spell knowledge
*/ */
std::list<uint64>::iterator i = m_vBurrowGUID.begin(); std::list<uint64>::iterator i = m_vBurrowGUID.begin();
uint32 at = urand(0,m_vBurrowGUID.size()-1); uint32 at = urand(0, m_vBurrowGUID.size()-1);
for (uint32 k = 0; k < at; k++) for (uint32 k = 0; k < at; k++)
++i; ++i;
if (Creature *pBurrow = Unit::GetCreature(*me, *i)) if (Creature *pBurrow = Unit::GetCreature(*me, *i))
pBurrow->CastSpell(pBurrow,66340,false); pBurrow->CastSpell(pBurrow, 66340, false);
m_uiScarabSummoned++; m_uiScarabSummoned++;
m_uiSummonScarabTimer = 4*IN_MILLISECONDS; m_uiSummonScarabTimer = 4*IN_MILLISECONDS;
if (m_uiScarabSummoned == 4) m_uiSummonScarabTimer = RAID_MODE(4,20)*IN_MILLISECONDS; if (m_uiScarabSummoned == 4) m_uiSummonScarabTimer = RAID_MODE(4, 20)*IN_MILLISECONDS;
/*It seems that this spell have something more that needs to be taken into account /*It seems that this spell have something more that needs to be taken into account
//Need more sniff info //Need more sniff info
@@ -354,8 +354,8 @@ public:
DoCast(SPELL_SPIKE_TELE); DoCast(SPELL_SPIKE_TELE);
Summons.DespawnEntry(NPC_SPIKE); Summons.DespawnEntry(NPC_SPIKE);
me->RemoveAurasDueToSpell(SPELL_SUBMERGE_ANUBARAK); me->RemoveAurasDueToSpell(SPELL_SUBMERGE_ANUBARAK);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
DoCast(me,SPELL_EMERGE_ANUBARAK); DoCast(me, SPELL_EMERGE_ANUBARAK);
me->GetMotionMaster()->MoveChase(me->getVictim()); me->GetMotionMaster()->MoveChase(me->getVictim());
m_uiSummonNerubianTimer = 10*IN_MILLISECONDS; m_uiSummonNerubianTimer = 10*IN_MILLISECONDS;
m_uiNerubianShadowStrikeTimer = 30*IN_MILLISECONDS; m_uiNerubianShadowStrikeTimer = 30*IN_MILLISECONDS;
@@ -367,22 +367,22 @@ public:
{ {
if (m_uiSummonFrostSphereTimer <= uiDiff) if (m_uiSummonFrostSphereTimer <= uiDiff)
{ {
uint8 startAt = urand(0,5); uint8 startAt = urand(0, 5);
uint8 i = startAt; uint8 i = startAt;
do do
{ {
if (Unit *pSphere = Unit::GetCreature(*me,m_aSphereGUID[i])) if (Unit *pSphere = Unit::GetCreature(*me, m_aSphereGUID[i]))
{ {
if (!pSphere->HasAura(SPELL_FROST_SPHERE)) if (!pSphere->HasAura(SPELL_FROST_SPHERE))
{ {
if (Creature *pSummon = me->SummonCreature(NPC_FROST_SPHERE,SphereSpawn[i])) if (Creature *pSummon = me->SummonCreature(NPC_FROST_SPHERE, SphereSpawn[i]))
m_aSphereGUID[i] = pSummon->GetGUID(); m_aSphereGUID[i] = pSummon->GetGUID();
break; break;
} }
} }
i = (i+1)%6; i = (i+1)%6;
} while (i != startAt); } while (i != startAt);
m_uiSummonFrostSphereTimer = urand(20,30)*IN_MILLISECONDS; m_uiSummonFrostSphereTimer = urand(20, 30)*IN_MILLISECONDS;
} else m_uiSummonFrostSphereTimer -= uiDiff; } else m_uiSummonFrostSphereTimer -= uiDiff;
} }
@@ -390,13 +390,13 @@ public:
{ {
m_bReachedPhase3 = true; m_bReachedPhase3 = true;
DoCastAOE(SPELL_LEECHING_SWARM); DoCastAOE(SPELL_LEECHING_SWARM);
DoScriptText(EMOTE_LEECHING_SWARM,me); DoScriptText(EMOTE_LEECHING_SWARM, me);
DoScriptText(SAY_LEECHING_SWARM,me); DoScriptText(SAY_LEECHING_SWARM, me);
} }
if (m_uiBerserkTimer <= uiDiff && !me->HasAura(SPELL_BERSERK)) if (m_uiBerserkTimer <= uiDiff && !me->HasAura(SPELL_BERSERK))
{ {
DoCast(me,SPELL_BERSERK); DoCast(me, SPELL_BERSERK);
} else m_uiBerserkTimer -= uiDiff; } else m_uiBerserkTimer -= uiDiff;
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
@@ -430,18 +430,18 @@ public:
void Reset() void Reset()
{ {
me->SetCorpseDelay(0); me->SetCorpseDelay(0);
m_uiDeterminationTimer = urand(5*IN_MILLISECONDS,60*IN_MILLISECONDS); m_uiDeterminationTimer = urand(5*IN_MILLISECONDS, 60*IN_MILLISECONDS);
DoCast(me,SPELL_ACID_MANDIBLE); DoCast(me, SPELL_ACID_MANDIBLE);
me->SetInCombatWithZone(); me->SetInCombatWithZone();
if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM)) if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM))
me->AddThreat(pTarget,20000.0f); me->AddThreat(pTarget, 20000.0f);
if (!me->isInCombat()) if (!me->isInCombat())
me->DisappearAndDie(); me->DisappearAndDie();
} }
void DoAction(const int32 actionId) void DoAction(const int32 actionId)
{ {
switch(actionId) switch (actionId)
{ {
case ACTION_SCARAB_SUBMERGE: case ACTION_SCARAB_SUBMERGE:
DoCast(SPELL_SUBMERGE_EFFECT); DoCast(SPELL_SUBMERGE_EFFECT);
@@ -452,7 +452,7 @@ public:
void JustDied(Unit* pKiller) void JustDied(Unit* pKiller)
{ {
DoCast(pKiller,RAID_MODE(SPELL_TRAITOR_KING_10,SPELL_TRAITOR_KING_25)); DoCast(pKiller, RAID_MODE(SPELL_TRAITOR_KING_10, SPELL_TRAITOR_KING_25));
} }
void UpdateAI(const uint32 uiDiff) void UpdateAI(const uint32 uiDiff)
@@ -463,8 +463,8 @@ public:
/* Bosskillers don't recognize */ /* Bosskillers don't recognize */
if (m_uiDeterminationTimer <= uiDiff) if (m_uiDeterminationTimer <= uiDiff)
{ {
DoCast(me,SPELL_DETERMINATION); DoCast(me, SPELL_DETERMINATION);
m_uiDeterminationTimer = urand(10*IN_MILLISECONDS,60*IN_MILLISECONDS); m_uiDeterminationTimer = urand(10*IN_MILLISECONDS, 60*IN_MILLISECONDS);
} else m_uiDeterminationTimer -= uiDiff; } else m_uiDeterminationTimer -= uiDiff;
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
@@ -499,10 +499,10 @@ public:
void Reset() void Reset()
{ {
me->SetCorpseDelay(0); me->SetCorpseDelay(0);
m_uiSpiderFrenzyTimer = urand(10*IN_MILLISECONDS,20*IN_MILLISECONDS); m_uiSpiderFrenzyTimer = urand(10*IN_MILLISECONDS, 20*IN_MILLISECONDS);
m_uiSubmergeTimer = 30*IN_MILLISECONDS; m_uiSubmergeTimer = 30*IN_MILLISECONDS;
DoCast(me,SPELL_EXPOSE_WEAKNESS); DoCast(me, SPELL_EXPOSE_WEAKNESS);
DoCast(me,SPELL_SPIDER_FRENZY); DoCast(me, SPELL_SPIDER_FRENZY);
me->SetInCombatWithZone(); me->SetInCombatWithZone();
if (!me->isInCombat()) if (!me->isInCombat())
me->DisappearAndDie(); me->DisappearAndDie();
@@ -510,11 +510,11 @@ public:
void DoAction(const int32 actionId) void DoAction(const int32 actionId)
{ {
switch(actionId) switch (actionId)
{ {
case ACTION_SHADOW_STRIKE: case ACTION_SHADOW_STRIKE:
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0)) if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget,SPELL_SHADOW_STRIKE); DoCast(pTarget, SPELL_SHADOW_STRIKE);
break; break;
} }
} }
@@ -529,16 +529,16 @@ public:
if (me->HasAura(SPELL_SUBMERGE_EFFECT)) if (me->HasAura(SPELL_SUBMERGE_EFFECT))
{ {
me->RemoveAurasDueToSpell(SPELL_SUBMERGE_EFFECT); me->RemoveAurasDueToSpell(SPELL_SUBMERGE_EFFECT);
DoCast(me,SPELL_EMERGE_EFFECT); DoCast(me, SPELL_EMERGE_EFFECT);
me->RemoveFlag(UNIT_FIELD_FLAGS,UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_OOC_NOT_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
me->CombatStart(me->SelectNearestTarget()); me->CombatStart(me->SelectNearestTarget());
} }
else else
{ {
if (!me->HasAura(SPELL_PERMAFROST)) if (!me->HasAura(SPELL_PERMAFROST))
{ {
DoCast(me,SPELL_SUBMERGE_EFFECT); DoCast(me, SPELL_SUBMERGE_EFFECT);
me->SetFlag(UNIT_FIELD_FLAGS,UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_OOC_NOT_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
me->CombatStop(); me->CombatStop();
} }
} }
@@ -593,7 +593,7 @@ public:
m_bFall = true; m_bFall = true;
me->SetFlying(false); me->SetFlying(false);
me->GetMotionMaster()->MoveIdle(); me->GetMotionMaster()->MoveIdle();
me->SetFlag(UNIT_FIELD_FLAGS,UNIT_FLAG_NOT_SELECTABLE); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
//At hit the ground //At hit the ground
me->GetMotionMaster()->MoveFall(142.2f, 0); me->GetMotionMaster()->MoveFall(142.2f, 0);
//me->FallGround(); //need correct vmap use (i believe it isn't working properly right now) //me->FallGround(); //need correct vmap use (i believe it isn't working properly right now)
@@ -665,7 +665,7 @@ public:
void EnterCombat(Unit *pWho) void EnterCombat(Unit *pWho)
{ {
m_uiTargetGUID = pWho->GetGUID(); m_uiTargetGUID = pWho->GetGUID();
DoCast(pWho,SPELL_MARK); DoCast(pWho, SPELL_MARK);
me->SetSpeed(MOVE_RUN, 0.5f); me->SetSpeed(MOVE_RUN, 0.5f);
m_uiSpeed = 0; m_uiSpeed = 0;
m_uiIncreaseSpeedTimer = 1*IN_MILLISECONDS; m_uiIncreaseSpeedTimer = 1*IN_MILLISECONDS;
@@ -682,8 +682,8 @@ public:
Unit* pTarget = Unit::GetPlayer(*me, m_uiTargetGUID); Unit* pTarget = Unit::GetPlayer(*me, m_uiTargetGUID);
if (!pTarget || !pTarget->isAlive() || !pTarget->HasAura(SPELL_MARK)) if (!pTarget || !pTarget->isAlive() || !pTarget->HasAura(SPELL_MARK))
{ {
if (Creature* pAnubarak = Unit::GetCreature((*me),m_pInstance->GetData64(NPC_ANUBARAK))) if (Creature* pAnubarak = Unit::GetCreature((*me), m_pInstance->GetData64(NPC_ANUBARAK)))
pAnubarak->CastSpell(pAnubarak,SPELL_SPIKE_TELE,false); pAnubarak->CastSpell(pAnubarak, SPELL_SPIKE_TELE, false);
me->DisappearAndDie(); me->DisappearAndDie();
return; return;
} }
@@ -695,18 +695,18 @@ public:
switch (m_uiSpeed) switch (m_uiSpeed)
{ {
case 0: case 0:
DoCast(me,SPELL_SPIKE_SPEED1); DoCast(me, SPELL_SPIKE_SPEED1);
DoCast(me,SPELL_SPIKE_TRAIL); DoCast(me, SPELL_SPIKE_TRAIL);
m_uiSpeed = 1; m_uiSpeed = 1;
m_uiIncreaseSpeedTimer = 7*IN_MILLISECONDS; m_uiIncreaseSpeedTimer = 7*IN_MILLISECONDS;
break; break;
case 1: case 1:
DoCast(me,SPELL_SPIKE_SPEED2); DoCast(me, SPELL_SPIKE_SPEED2);
m_uiSpeed = 2; m_uiSpeed = 2;
m_uiIncreaseSpeedTimer = 7*IN_MILLISECONDS; m_uiIncreaseSpeedTimer = 7*IN_MILLISECONDS;
break; break;
case 2: case 2:
DoCast(me,SPELL_SPIKE_SPEED3); DoCast(me, SPELL_SPIKE_SPEED3);
m_uiIncreaseSpeedTimer = 0; m_uiIncreaseSpeedTimer = 0;
break; break;
} }
@@ -101,7 +101,7 @@ public:
{ {
boss_jaraxxusAI(Creature* pCreature) : ScriptedAI(pCreature), Summons(me) boss_jaraxxusAI(Creature* pCreature) : ScriptedAI(pCreature), Summons(me)
{ {
m_pInstance = (InstanceScript*)pCreature->GetInstanceScript(); m_pInstance = pCreature->GetInstanceScript();
Reset(); Reset();
} }
@@ -124,11 +124,11 @@ public:
m_pInstance->SetData(TYPE_JARAXXUS, NOT_STARTED); m_pInstance->SetData(TYPE_JARAXXUS, NOT_STARTED);
SetEquipmentSlots(false, EQUIP_MAIN, EQUIP_OFFHAND, EQUIP_RANGED); SetEquipmentSlots(false, EQUIP_MAIN, EQUIP_OFFHAND, EQUIP_RANGED);
m_uiFelFireballTimer = 5*IN_MILLISECONDS; m_uiFelFireballTimer = 5*IN_MILLISECONDS;
m_uiFelLightningTimer = urand(10*IN_MILLISECONDS,15*IN_MILLISECONDS); m_uiFelLightningTimer = urand(10*IN_MILLISECONDS, 15*IN_MILLISECONDS);
m_uiIncinerateFleshTimer = urand(20*IN_MILLISECONDS,25*IN_MILLISECONDS); m_uiIncinerateFleshTimer = urand(20*IN_MILLISECONDS, 25*IN_MILLISECONDS);
m_uiNetherPowerTimer = 40*IN_MILLISECONDS; m_uiNetherPowerTimer = 40*IN_MILLISECONDS;
m_uiLegionFlameTimer = 30*IN_MILLISECONDS; m_uiLegionFlameTimer = 30*IN_MILLISECONDS;
m_uiTouchOfJaraxxusTimer = urand(10*IN_MILLISECONDS,15*IN_MILLISECONDS); m_uiTouchOfJaraxxusTimer = urand(10*IN_MILLISECONDS, 15*IN_MILLISECONDS);
m_uiSummonNetherPortalTimer = 1*MINUTE*IN_MILLISECONDS; m_uiSummonNetherPortalTimer = 1*MINUTE*IN_MILLISECONDS;
m_uiSummonInfernalEruptionTimer = 2*MINUTE*IN_MILLISECONDS; m_uiSummonInfernalEruptionTimer = 2*MINUTE*IN_MILLISECONDS;
Summons.DespawnAll(); Summons.DespawnAll();
@@ -138,7 +138,7 @@ public:
{ {
if (m_pInstance) if (m_pInstance)
m_pInstance->SetData(TYPE_JARAXXUS, FAIL); m_pInstance->SetData(TYPE_JARAXXUS, FAIL);
DoCast(me,SPELL_JARAXXUS_CHAINS); DoCast(me, SPELL_JARAXXUS_CHAINS);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
me->SetReactState(REACT_PASSIVE); me->SetReactState(REACT_PASSIVE);
} }
@@ -155,7 +155,7 @@ public:
void JustDied(Unit* /*pKiller*/) void JustDied(Unit* /*pKiller*/)
{ {
Summons.DespawnAll(); Summons.DespawnAll();
DoScriptText(SAY_DEATH,me); DoScriptText(SAY_DEATH, me);
if (m_pInstance) if (m_pInstance)
m_pInstance->SetData(TYPE_JARAXXUS, DONE); m_pInstance->SetData(TYPE_JARAXXUS, DONE);
} }
@@ -170,7 +170,7 @@ public:
me->SetInCombatWithZone(); me->SetInCombatWithZone();
if (m_pInstance) if (m_pInstance)
m_pInstance->SetData(TYPE_JARAXXUS, IN_PROGRESS); m_pInstance->SetData(TYPE_JARAXXUS, IN_PROGRESS);
DoScriptText(SAY_AGGRO,me); DoScriptText(SAY_AGGRO, me);
} }
void UpdateAI(const uint32 uiDiff) void UpdateAI(const uint32 uiDiff)
@@ -180,67 +180,67 @@ public:
if (m_uiSummonInfernalEruptionTimer <= uiDiff) if (m_uiSummonInfernalEruptionTimer <= uiDiff)
{ {
DoScriptText(EMOTE_INFERNAL_ERUPTION,me); DoScriptText(EMOTE_INFERNAL_ERUPTION, me);
DoScriptText(SAY_INFERNAL_ERUPTION,me); DoScriptText(SAY_INFERNAL_ERUPTION, me);
uint8 i = urand(2,3); uint8 i = urand(2, 3);
me->SummonCreature(NPC_INFERNAL_VOLCANO,JaraxxusLoc[i].GetPositionX(),JaraxxusLoc[i].GetPositionY(),JaraxxusLoc[i].GetPositionZ(),TEMPSUMMON_CORPSE_DESPAWN); me->SummonCreature(NPC_INFERNAL_VOLCANO, JaraxxusLoc[i].GetPositionX(), JaraxxusLoc[i].GetPositionY(), JaraxxusLoc[i].GetPositionZ(), TEMPSUMMON_CORPSE_DESPAWN);
m_uiSummonInfernalEruptionTimer = 2*MINUTE*IN_MILLISECONDS; m_uiSummonInfernalEruptionTimer = 2*MINUTE*IN_MILLISECONDS;
} else m_uiSummonInfernalEruptionTimer -= uiDiff; } else m_uiSummonInfernalEruptionTimer -= uiDiff;
if (m_uiSummonNetherPortalTimer <= uiDiff) if (m_uiSummonNetherPortalTimer <= uiDiff)
{ {
DoScriptText(EMOTE_NETHER_PORTAL,me); DoScriptText(EMOTE_NETHER_PORTAL, me);
DoScriptText(SAY_NETHER_PORTAL,me); DoScriptText(SAY_NETHER_PORTAL, me);
uint8 i = urand(2,3); uint8 i = urand(2, 3);
me->SummonCreature(NPC_NETHER_PORTAL,JaraxxusLoc[i].GetPositionX(),JaraxxusLoc[i].GetPositionY(),JaraxxusLoc[i].GetPositionZ(),TEMPSUMMON_CORPSE_DESPAWN); me->SummonCreature(NPC_NETHER_PORTAL, JaraxxusLoc[i].GetPositionX(), JaraxxusLoc[i].GetPositionY(), JaraxxusLoc[i].GetPositionZ(), TEMPSUMMON_CORPSE_DESPAWN);
m_uiSummonNetherPortalTimer = 2*MINUTE*IN_MILLISECONDS; m_uiSummonNetherPortalTimer = 2*MINUTE*IN_MILLISECONDS;
} else m_uiSummonNetherPortalTimer -= uiDiff; } else m_uiSummonNetherPortalTimer -= uiDiff;
if (m_uiFelFireballTimer <= uiDiff) if (m_uiFelFireballTimer <= uiDiff)
{ {
DoCastVictim(SPELL_FEL_FIREBALL); DoCastVictim(SPELL_FEL_FIREBALL);
m_uiFelFireballTimer = urand(10*IN_MILLISECONDS,15*IN_MILLISECONDS); m_uiFelFireballTimer = urand(10*IN_MILLISECONDS, 15*IN_MILLISECONDS);
} else m_uiFelFireballTimer -= uiDiff; } else m_uiFelFireballTimer -= uiDiff;
if (m_uiFelLightningTimer <= uiDiff) if (m_uiFelLightningTimer <= uiDiff)
{ {
if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM)) if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM))
DoCast(pTarget,SPELL_FEL_LIGHTING); DoCast(pTarget, SPELL_FEL_LIGHTING);
m_uiFelLightningTimer = urand(10*IN_MILLISECONDS,15*IN_MILLISECONDS); m_uiFelLightningTimer = urand(10*IN_MILLISECONDS, 15*IN_MILLISECONDS);
} else m_uiFelLightningTimer -= uiDiff; } else m_uiFelLightningTimer -= uiDiff;
if (m_uiIncinerateFleshTimer <= uiDiff) if (m_uiIncinerateFleshTimer <= uiDiff)
{ {
if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM,1)) if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 1))
{ {
DoScriptText(EMOTE_INCINERATE,me,pTarget); DoScriptText(EMOTE_INCINERATE, me, pTarget);
DoScriptText(SAY_INCINERATE,me); DoScriptText(SAY_INCINERATE, me);
DoCast(pTarget,SPELL_INCINERATE_FLESH); DoCast(pTarget, SPELL_INCINERATE_FLESH);
} }
m_uiIncinerateFleshTimer = urand(20*IN_MILLISECONDS,25*IN_MILLISECONDS); m_uiIncinerateFleshTimer = urand(20*IN_MILLISECONDS, 25*IN_MILLISECONDS);
} else m_uiIncinerateFleshTimer -= uiDiff; } else m_uiIncinerateFleshTimer -= uiDiff;
if (m_uiNetherPowerTimer <= uiDiff) if (m_uiNetherPowerTimer <= uiDiff)
{ {
DoCast(me,SPELL_NETHER_POWER); DoCast(me, SPELL_NETHER_POWER);
m_uiNetherPowerTimer = 40*IN_MILLISECONDS; m_uiNetherPowerTimer = 40*IN_MILLISECONDS;
} else m_uiNetherPowerTimer -= uiDiff; } else m_uiNetherPowerTimer -= uiDiff;
if (m_uiLegionFlameTimer <= uiDiff) if (m_uiLegionFlameTimer <= uiDiff)
{ {
if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM,1)) if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 1))
{ {
DoScriptText(EMOTE_LEGION_FLAME,me,pTarget); DoScriptText(EMOTE_LEGION_FLAME, me, pTarget);
DoCast(pTarget,SPELL_LEGION_FLAME); DoCast(pTarget, SPELL_LEGION_FLAME);
} }
m_uiLegionFlameTimer = 30*IN_MILLISECONDS; m_uiLegionFlameTimer = 30*IN_MILLISECONDS;
} else m_uiLegionFlameTimer -= uiDiff; } else m_uiLegionFlameTimer -= uiDiff;
if (getDifficulty() == RAID_DIFFICULTY_25MAN_HEROIC && m_uiTouchOfJaraxxusTimer <= uiDiff) if (getDifficulty() == RAID_DIFFICULTY_25MAN_HEROIC && m_uiTouchOfJaraxxusTimer <= uiDiff)
{ {
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0)) if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget,SPELL_TOUCH_OF_JARAXXUS); DoCast(pTarget, SPELL_TOUCH_OF_JARAXXUS);
m_uiTouchOfJaraxxusTimer = urand(10*IN_MILLISECONDS,15*IN_MILLISECONDS); m_uiTouchOfJaraxxusTimer = urand(10*IN_MILLISECONDS, 15*IN_MILLISECONDS);
} else m_uiTouchOfJaraxxusTimer -= uiDiff; } else m_uiTouchOfJaraxxusTimer -= uiDiff;
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
@@ -249,7 +249,6 @@ public:
}; };
class mob_legion_flame : public CreatureScript class mob_legion_flame : public CreatureScript
{ {
public: public:
@@ -269,21 +268,19 @@ public:
void Reset() void Reset()
{ {
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
me->SetInCombatWithZone(); me->SetInCombatWithZone();
DoCast(SPELL_LEGION_FLAME_EFFECT); DoCast(SPELL_LEGION_FLAME_EFFECT);
} }
void UpdateAI(const uint32 /*uiDiff*/) void UpdateAI(const uint32 /*uiDiff*/)
{ {
if (!UpdateVictim()) UpdateVictim();
return;
} }
}; };
}; };
class mob_infernal_volcano : public CreatureScript class mob_infernal_volcano : public CreatureScript
{ {
public: public:
@@ -354,14 +351,12 @@ public:
m_Timer = 5*IN_MILLISECONDS; m_Timer = 5*IN_MILLISECONDS;
} else m_Timer -= uiDiff; } else m_Timer -= uiDiff;
if (!UpdateVictim()) UpdateVictim();
return;
} }
}; };
}; };
class mob_fel_infernal : public CreatureScript class mob_fel_infernal : public CreatureScript
{ {
public: public:
@@ -405,8 +400,8 @@ public:
if (m_uiFelStreakTimer <= uiDiff) if (m_uiFelStreakTimer <= uiDiff)
{ {
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0)) if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget,SPELL_FEL_STREAK); DoCast(pTarget, SPELL_FEL_STREAK);
m_uiFelStreakTimer = 30*IN_MILLISECONDS; m_uiFelStreakTimer = 30*IN_MILLISECONDS;
} else m_uiFelStreakTimer -= uiDiff; } else m_uiFelStreakTimer -= uiDiff;
@@ -416,7 +411,6 @@ public:
}; };
class mob_nether_portal : public CreatureScript class mob_nether_portal : public CreatureScript
{ {
public: public:
@@ -481,14 +475,12 @@ public:
m_Timer = 15*IN_MILLISECONDS; m_Timer = 15*IN_MILLISECONDS;
} else m_Timer -= uiDiff; } else m_Timer -= uiDiff;
if (!UpdateVictim()) UpdateVictim();
return;
} }
}; };
}; };
class mob_mistress_of_pain : public CreatureScript class mob_mistress_of_pain : public CreatureScript
{ {
public: public:
@@ -544,15 +536,15 @@ public:
if (m_uiSpinningStrikeTimer <= uiDiff) if (m_uiSpinningStrikeTimer <= uiDiff)
{ {
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0)) if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget,SPELL_SPINNING_STRIKE); DoCast(pTarget, SPELL_SPINNING_STRIKE);
m_uiSpinningStrikeTimer = 30*IN_MILLISECONDS; m_uiSpinningStrikeTimer = 30*IN_MILLISECONDS;
} else m_uiSpinningStrikeTimer -= uiDiff; } else m_uiSpinningStrikeTimer -= uiDiff;
if (IsHeroic() && m_uiMistressKissTimer <= uiDiff) if (IsHeroic() && m_uiMistressKissTimer <= uiDiff)
{ {
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0)) if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget,SPELL_MISTRESS_KISS); DoCast(pTarget, SPELL_MISTRESS_KISS);
m_uiMistressKissTimer = 30*IN_MILLISECONDS; m_uiMistressKissTimer = 30*IN_MILLISECONDS;
} else m_uiMistressKissTimer -= uiDiff; } else m_uiMistressKissTimer -= uiDiff;
@@ -562,7 +554,6 @@ public:
}; };
void AddSC_boss_jaraxxus() void AddSC_boss_jaraxxus()
{ {
new boss_jaraxxus(); new boss_jaraxxus();
@@ -136,9 +136,9 @@ public:
void Reset() void Reset()
{ {
m_uiImpaleTimer = urand(8*IN_MILLISECONDS,10*IN_MILLISECONDS); m_uiImpaleTimer = urand(8*IN_MILLISECONDS, 10*IN_MILLISECONDS);
m_uiStaggeringStompTimer = 15*IN_MILLISECONDS; m_uiStaggeringStompTimer = 15*IN_MILLISECONDS;
m_uiSummonTimer = urand(15*IN_MILLISECONDS,30*IN_MILLISECONDS);; m_uiSummonTimer = urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS);;
if (getDifficulty() == RAID_DIFFICULTY_25MAN_NORMAL || if (getDifficulty() == RAID_DIFFICULTY_25MAN_NORMAL ||
getDifficulty() == RAID_DIFFICULTY_25MAN_HEROIC) getDifficulty() == RAID_DIFFICULTY_25MAN_HEROIC)
@@ -152,20 +152,20 @@ public:
void JustDied(Unit* /*pKiller*/) void JustDied(Unit* /*pKiller*/)
{ {
if (m_pInstance) if (m_pInstance)
m_pInstance->SetData(TYPE_NORTHREND_BEASTS,GORMOK_DONE); m_pInstance->SetData(TYPE_NORTHREND_BEASTS, GORMOK_DONE);
} }
void JustReachedHome() void JustReachedHome()
{ {
if (m_pInstance) if (m_pInstance)
m_pInstance->SetData(TYPE_NORTHREND_BEASTS,FAIL); m_pInstance->SetData(TYPE_NORTHREND_BEASTS, FAIL);
me->ForcedDespawn(); me->ForcedDespawn();
} }
void EnterCombat(Unit* /*pWho*/) void EnterCombat(Unit* /*pWho*/)
{ {
me->SetInCombatWithZone(); me->SetInCombatWithZone();
m_pInstance->SetData(TYPE_NORTHREND_BEASTS,GORMOK_IN_PROGRESS); m_pInstance->SetData(TYPE_NORTHREND_BEASTS, GORMOK_IN_PROGRESS);
} }
void JustSummoned(Creature* summon) void JustSummoned(Creature* summon)
@@ -197,24 +197,24 @@ public:
if (m_uiImpaleTimer <= uiDiff) if (m_uiImpaleTimer <= uiDiff)
{ {
DoCast(me->getVictim(),SPELL_IMPALE); DoCast(me->getVictim(), SPELL_IMPALE);
m_uiImpaleTimer = urand(8*IN_MILLISECONDS,10*IN_MILLISECONDS); m_uiImpaleTimer = urand(8*IN_MILLISECONDS, 10*IN_MILLISECONDS);
} else m_uiImpaleTimer -= uiDiff; } else m_uiImpaleTimer -= uiDiff;
if (m_uiStaggeringStompTimer <= uiDiff) if (m_uiStaggeringStompTimer <= uiDiff)
{ {
DoCast(me->getVictim(),SPELL_STAGGERING_STOMP); DoCast(me->getVictim(), SPELL_STAGGERING_STOMP);
m_uiStaggeringStompTimer = urand(20*IN_MILLISECONDS,25*IN_MILLISECONDS); m_uiStaggeringStompTimer = urand(20*IN_MILLISECONDS, 25*IN_MILLISECONDS);
} else m_uiStaggeringStompTimer -= uiDiff; } else m_uiStaggeringStompTimer -= uiDiff;
if (m_uiSummonTimer <= uiDiff) if (m_uiSummonTimer <= uiDiff)
{ {
if (m_uiSummonCount > 0) if (m_uiSummonCount > 0)
{ {
me->SummonCreature(NPC_SNOBOLD_VASSAL,me->GetPositionX(),me->GetPositionY(),me->GetPositionZ(),0,TEMPSUMMON_CORPSE_DESPAWN); me->SummonCreature(NPC_SNOBOLD_VASSAL, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0, TEMPSUMMON_CORPSE_DESPAWN);
DoScriptText(SAY_SNOBOLLED,me); DoScriptText(SAY_SNOBOLLED, me);
} }
m_uiSummonTimer = urand(15*IN_MILLISECONDS,30*IN_MILLISECONDS); m_uiSummonTimer = urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS);
} else m_uiSummonTimer -= uiDiff; } else m_uiSummonTimer -= uiDiff;
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
@@ -262,7 +262,7 @@ public:
if (m_pInstance) if (m_pInstance)
m_uiBossGUID = m_pInstance->GetData64(NPC_GORMOK); m_uiBossGUID = m_pInstance->GetData64(NPC_GORMOK);
//Workaround for Snobold //Workaround for Snobold
me->RemoveFlag(UNIT_FIELD_FLAGS,UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_OOC_NOT_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
} }
void EnterCombat(Unit *pWho) void EnterCombat(Unit *pWho)
@@ -293,7 +293,7 @@ public:
void JustDied(Unit* /*pKiller*/) void JustDied(Unit* /*pKiller*/)
{ {
if (Unit *pTarget = Unit::GetPlayer(*me,m_uiTargetGUID)) if (Unit *pTarget = Unit::GetPlayer(*me, m_uiTargetGUID))
if (pTarget->isAlive()) if (pTarget->isAlive())
pTarget->RemoveAurasDueToSpell(SPELL_SNOBOLLED); pTarget->RemoveAurasDueToSpell(SPELL_SNOBOLLED);
if (m_pInstance) if (m_pInstance)
@@ -305,23 +305,23 @@ public:
if (m_bTargetDied || !UpdateVictim()) if (m_bTargetDied || !UpdateVictim())
return; return;
if (Unit* pTarget = Unit::GetPlayer(*me,m_uiTargetGUID)) if (Unit* pTarget = Unit::GetPlayer(*me, m_uiTargetGUID))
if (!pTarget->isAlive()) if (!pTarget->isAlive())
if (m_pInstance) if (m_pInstance)
if (Unit* pGormok = Unit::GetCreature(*me,m_pInstance->GetData64(NPC_GORMOK))) if (Unit* pGormok = Unit::GetCreature(*me, m_pInstance->GetData64(NPC_GORMOK)))
{ {
if (pGormok->isAlive()) if (pGormok->isAlive())
{ {
SetCombatMovement(false); SetCombatMovement(false);
m_bTargetDied = true; m_bTargetDied = true;
me->GetMotionMaster()->MoveJump(pGormok->GetPositionX(),pGormok->GetPositionY(),pGormok->GetPositionZ(),15.0f,15.0f); me->GetMotionMaster()->MoveJump(pGormok->GetPositionX(), pGormok->GetPositionY(), pGormok->GetPositionZ(), 15.0f, 15.0f);
} }
else else
{ {
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
{ {
m_uiTargetGUID = pTarget->GetGUID(); m_uiTargetGUID = pTarget->GetGUID();
me->GetMotionMaster()->MoveJump(pTarget->GetPositionX(),pTarget->GetPositionY(),pTarget->GetPositionZ(),15.0f,15.0f); me->GetMotionMaster()->MoveJump(pTarget->GetPositionX(), pTarget->GetPositionY(), pTarget->GetPositionZ(), 15.0f, 15.0f);
} }
} }
} }
@@ -336,7 +336,7 @@ public:
if (m_uiBatterTimer < uiDiff) if (m_uiBatterTimer < uiDiff)
{ {
if (Unit *pTarget = Unit::GetPlayer(*me,m_uiTargetGUID)) if (Unit *pTarget = Unit::GetPlayer(*me, m_uiTargetGUID))
DoCast(pTarget, SPELL_BATTER); DoCast(pTarget, SPELL_BATTER);
m_uiBatterTimer = 10000; m_uiBatterTimer = 10000;
} }
@@ -344,7 +344,7 @@ public:
if (m_uiHeadCrackTimer < uiDiff) if (m_uiHeadCrackTimer < uiDiff)
{ {
if (Unit *pTarget = Unit::GetPlayer(*me,m_uiTargetGUID)) if (Unit *pTarget = Unit::GetPlayer(*me, m_uiTargetGUID))
DoCast(pTarget, SPELL_HEAD_CRACK); DoCast(pTarget, SPELL_HEAD_CRACK);
m_uiHeadCrackTimer = 35000; m_uiHeadCrackTimer = 35000;
} }
@@ -359,208 +359,225 @@ public:
struct boss_jormungarAI : public ScriptedAI struct boss_jormungarAI : public ScriptedAI
{ {
boss_jormungarAI(Creature* pCreature) : ScriptedAI(pCreature) boss_jormungarAI(Creature* creature) : ScriptedAI(creature)
{ {
m_pInstance = (InstanceScript*)pCreature->GetInstanceScript(); instanceScript = creature->GetInstanceScript();
} }
InstanceScript* m_pInstance;
uint32 m_uiSisterID;
uint32 m_uiModelStationary;
uint32 m_uiModelMobile;
uint32 m_uiBiteSpell;
uint32 m_uiSpewSpell;
uint32 m_uiSpitSpell;
uint32 m_uiSpraySpell;
uint32 m_uiBiteTimer;
uint32 m_uiSpewTimer;
uint32 m_uiSlimePoolTimer;
uint32 m_uiSpitTimer;
uint32 m_uiSprayTimer;
uint32 m_uiSweepTimer;
uint32 m_uiSubmergeTimer;
uint8 m_uiStage;
bool m_bEnraged;
void Reset() void Reset()
{ {
m_bEnraged = false; enraged = false;
m_uiBiteTimer = urand(15*IN_MILLISECONDS,30*IN_MILLISECONDS); biteTimer = urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS);
m_uiSpewTimer = urand(15*IN_MILLISECONDS,30*IN_MILLISECONDS); spewTimer = urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS);
m_uiSlimePoolTimer = 15*IN_MILLISECONDS; slimePoolTimer = 15*IN_MILLISECONDS;
m_uiSpitTimer = urand(15*IN_MILLISECONDS,30*IN_MILLISECONDS); spitTimer = urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS);
m_uiSprayTimer = urand(15*IN_MILLISECONDS,30*IN_MILLISECONDS); sprayTimer = urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS);
m_uiSweepTimer = urand(15*IN_MILLISECONDS,30*IN_MILLISECONDS); sweepTimer = urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS);
} }
void JustDied(Unit* /*pKiller*/) void JustDied(Unit* /*pKiller*/)
{ {
if (m_pInstance) if (instanceScript)
{ {
if (Creature* pSister = Unit::GetCreature((*me),m_pInstance->GetData64(m_uiSisterID))) if (Creature* otherWorm = Unit::GetCreature(*me, instanceScript->GetData64(otherWormEntry)))
{ {
if (!pSister->isAlive()) if (!otherWorm->isAlive())
m_pInstance->SetData(TYPE_NORTHREND_BEASTS, SNAKES_DONE); {
instanceScript->SetData(TYPE_NORTHREND_BEASTS, SNAKES_DONE);
if (TempSummon* summ = me->ToTempSummon())
summ->UnSummon();
else
me->ForcedDespawn();
if (TempSummon* summ = otherWorm->ToTempSummon())
summ->UnSummon();
else
otherWorm->ForcedDespawn();
}
else else
m_pInstance->SetData(TYPE_NORTHREND_BEASTS, SNAKES_SPECIAL); instanceScript->SetData(TYPE_NORTHREND_BEASTS, SNAKES_SPECIAL);
} }
} }
} }
void JustReachedHome() void JustReachedHome()
{ {
if (m_pInstance && m_pInstance->GetData(TYPE_NORTHREND_BEASTS) != FAIL) if (instanceScript && instanceScript->GetData(TYPE_NORTHREND_BEASTS) != FAIL)
m_pInstance->SetData(TYPE_NORTHREND_BEASTS, FAIL); instanceScript->SetData(TYPE_NORTHREND_BEASTS, FAIL);
me->ForcedDespawn();
if (TempSummon* summ = me->ToTempSummon())
summ->UnSummon();
else
me->ForcedDespawn();
} }
void KilledUnit(Unit *pWho) void KilledUnit(Unit *pWho)
{ {
if (pWho->GetTypeId() == TYPEID_PLAYER) if (pWho->GetTypeId() == TYPEID_PLAYER)
{ {
if (m_pInstance) if (instanceScript)
m_pInstance->SetData(DATA_TRIBUTE_TO_IMMORTALITY_ELEGIBLE, 0); instanceScript->SetData(DATA_TRIBUTE_TO_IMMORTALITY_ELEGIBLE, 0);
} }
} }
void EnterCombat(Unit* /*pWho*/) void EnterCombat(Unit* /*pWho*/)
{ {
me->SetInCombatWithZone(); me->SetInCombatWithZone();
if (m_pInstance) if (instanceScript)
m_pInstance->SetData(TYPE_NORTHREND_BEASTS, SNAKES_IN_PROGRESS); instanceScript->SetData(TYPE_NORTHREND_BEASTS, SNAKES_IN_PROGRESS);
} }
void UpdateAI(const uint32 uiDiff) void UpdateAI(const uint32 uiDiff)
{ {
if (!UpdateVictim()) return; if (!UpdateVictim()) return;
if (m_pInstance && m_pInstance->GetData(TYPE_NORTHREND_BEASTS) == SNAKES_SPECIAL && !m_bEnraged) if (instanceScript && instanceScript->GetData(TYPE_NORTHREND_BEASTS) == SNAKES_SPECIAL && !enraged)
{ {
DoScriptText(SAY_EMERGE,me); DoScriptText(SAY_EMERGE, me);
me->RemoveAurasDueToSpell(SPELL_SUBMERGE_0); me->RemoveAurasDueToSpell(SPELL_SUBMERGE_0);
me->RemoveFlag(UNIT_FIELD_FLAGS,UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_OOC_NOT_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
DoCast(SPELL_ENRAGE); DoCast(SPELL_ENRAGE);
m_bEnraged = true; enraged = true;
DoScriptText(SAY_BERSERK,me); DoScriptText(SAY_BERSERK, me);
switch (m_uiStage) switch (stage)
{ {
case 0: break; case 0:
break;
case 4: case 4:
m_uiStage = 5; stage = 5;
m_uiSubmergeTimer = 5*IN_MILLISECONDS; submergeTimer = 5*IN_MILLISECONDS;
break; break;
default: default:
m_uiStage = 7; stage = 7;
} }
} }
switch (m_uiStage) switch (stage)
{ {
case 0: // Mobile case 0: // Mobile
if (m_uiBiteTimer <= uiDiff) if (biteTimer <= uiDiff)
{ {
DoCastVictim(m_uiBiteSpell); DoCastVictim(biteSpell);
m_uiBiteTimer = urand(15*IN_MILLISECONDS,30*IN_MILLISECONDS); biteTimer = urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS);
} else m_uiBiteTimer -= uiDiff; } else biteTimer -= uiDiff;
if (m_uiSpewTimer <= uiDiff) if (spewTimer <= uiDiff)
{ {
DoCastAOE(m_uiSpewSpell); DoCastAOE(spewSpell);
m_uiSpewTimer = urand(15*IN_MILLISECONDS,30*IN_MILLISECONDS); spewTimer = urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS);
} else m_uiSpewTimer -= uiDiff; } else spewTimer -= uiDiff;
if (m_uiSlimePoolTimer <= uiDiff) if (slimePoolTimer <= uiDiff)
{ {
/* Spell summon has only 30s duration */ /* Spell summon has only 30s duration */
//DoCast(SUMMON_SLIME_POOL); //DoCast(SUMMON_SLIME_POOL);
me->SummonCreature(NPC_SLIME_POOL,me->GetPositionX(),me->GetPositionY(),me->GetPositionZ(),0); me->SummonCreature(NPC_SLIME_POOL, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0);
m_uiSlimePoolTimer = 30*IN_MILLISECONDS; slimePoolTimer = 30*IN_MILLISECONDS;
} else m_uiSlimePoolTimer -= uiDiff; } else slimePoolTimer -= uiDiff;
if (m_uiSubmergeTimer <= uiDiff && !m_bEnraged) if (submergeTimer <= uiDiff && !enraged)
{ {
m_uiStage = 1; stage = 1;
m_uiSubmergeTimer = 5*IN_MILLISECONDS; submergeTimer = 5*IN_MILLISECONDS;
} else m_uiSubmergeTimer -= uiDiff; } else submergeTimer -= uiDiff;
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
break; break;
case 1: // Submerge case 1: // Submerge
me->SetFlag(UNIT_FIELD_FLAGS,UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_OOC_NOT_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
DoCast(me,SPELL_SUBMERGE_0); DoCast(me, SPELL_SUBMERGE_0);
DoScriptText(SAY_SUBMERGE,me); DoScriptText(SAY_SUBMERGE, me);
me->GetMotionMaster()->MovePoint(0,ToCCommonLoc[1].GetPositionX()+urand(0,80)-40,ToCCommonLoc[1].GetPositionY()+urand(0,80)-40,ToCCommonLoc[1].GetPositionZ()); me->GetMotionMaster()->MovePoint(0, ToCCommonLoc[1].GetPositionX()+urand(0, 80)-40, ToCCommonLoc[1].GetPositionY()+urand(0, 80)-40, ToCCommonLoc[1].GetPositionZ());
m_uiStage = 2; stage = 2;
case 2: // Wait til emerge case 2: // Wait til emerge
if (m_uiSubmergeTimer <= uiDiff) if (submergeTimer <= uiDiff)
{ {
m_uiStage = 3; stage = 3;
m_uiSubmergeTimer = 50*IN_MILLISECONDS; submergeTimer = 50*IN_MILLISECONDS;
} else m_uiSubmergeTimer -= uiDiff; } else submergeTimer -= uiDiff;
break; break;
case 3: // Emerge case 3: // Emerge
me->SetDisplayId(m_uiModelStationary); me->SetDisplayId(modelStationary);
DoScriptText(SAY_EMERGE,me); DoScriptText(SAY_EMERGE, me);
me->RemoveAurasDueToSpell(SPELL_SUBMERGE_0); me->RemoveAurasDueToSpell(SPELL_SUBMERGE_0);
DoCast(me,SPELL_EMERGE_0); DoCast(me, SPELL_EMERGE_0);
me->RemoveFlag(UNIT_FIELD_FLAGS,UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_OOC_NOT_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
me->SetFlag(UNIT_FIELD_FLAGS,UNIT_FLAG_DISABLE_MOVE); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
SetCombatMovement(false); SetCombatMovement(false);
me->GetMotionMaster()->MoveIdle(); me->GetMotionMaster()->MoveIdle();
m_uiStage = 4; stage = 4;
break; break;
case 4: // Stationary case 4: // Stationary
if (m_uiSprayTimer <= uiDiff) if (sprayTimer <= uiDiff)
{ {
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0)) if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget,m_uiSpraySpell); DoCast(pTarget, spraySpell);
m_uiSprayTimer = urand(15*IN_MILLISECONDS,30*IN_MILLISECONDS); sprayTimer = urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS);
} else m_uiSprayTimer -= uiDiff; } else sprayTimer -= uiDiff;
if (m_uiSweepTimer <= uiDiff) if (sweepTimer <= uiDiff)
{ {
DoCastAOE(SPELL_SWEEP_0); DoCastAOE(SPELL_SWEEP_0);
m_uiSweepTimer = urand(15*IN_MILLISECONDS,30*IN_MILLISECONDS); sweepTimer = urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS);
} else m_uiSweepTimer -= uiDiff; } else sweepTimer -= uiDiff;
if (m_uiSubmergeTimer <= uiDiff) if (submergeTimer <= uiDiff)
{ {
m_uiStage = 5; stage = 5;
m_uiSubmergeTimer = 10*IN_MILLISECONDS; submergeTimer = 10*IN_MILLISECONDS;
} else m_uiSubmergeTimer -= uiDiff; } else submergeTimer -= uiDiff;
DoSpellAttackIfReady(m_uiSpitSpell); DoSpellAttackIfReady(spitSpell);
break; break;
case 5: // Submerge case 5: // Submerge
me->SetFlag(UNIT_FIELD_FLAGS,UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_OOC_NOT_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
DoCast(me,SPELL_SUBMERGE_0); DoCast(me, SPELL_SUBMERGE_0);
DoScriptText(SAY_SUBMERGE,me); DoScriptText(SAY_SUBMERGE, me);
me->GetMotionMaster()->MovePoint(0,ToCCommonLoc[1].GetPositionX()+urand(0,80)-40,ToCCommonLoc[1].GetPositionY()+urand(0,80)-40,ToCCommonLoc[1].GetPositionZ()); me->GetMotionMaster()->MovePoint(0, ToCCommonLoc[1].GetPositionX()+urand(0, 80)-40, ToCCommonLoc[1].GetPositionY()+urand(0, 80)-40, ToCCommonLoc[1].GetPositionZ());
m_uiStage = 6; stage = 6;
case 6: // Wait til emerge case 6: // Wait til emerge
if (m_uiSubmergeTimer <= uiDiff) if (submergeTimer <= uiDiff)
{ {
m_uiStage = 7; stage = 7;
m_uiSubmergeTimer = 45*IN_MILLISECONDS; submergeTimer = 45*IN_MILLISECONDS;
} else m_uiSubmergeTimer -= uiDiff; } else submergeTimer -= uiDiff;
break; break;
case 7: // Emerge case 7: // Emerge
me->SetDisplayId(m_uiModelMobile); me->SetDisplayId(modelMobile);
DoScriptText(SAY_EMERGE,me); DoScriptText(SAY_EMERGE, me);
me->RemoveAurasDueToSpell(SPELL_SUBMERGE_0); me->RemoveAurasDueToSpell(SPELL_SUBMERGE_0);
DoCast(me,SPELL_EMERGE_0); DoCast(me, SPELL_EMERGE_0);
me->RemoveFlag(UNIT_FIELD_FLAGS,UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_OOC_NOT_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
me->RemoveFlag(UNIT_FIELD_FLAGS,UNIT_FLAG_DISABLE_MOVE); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
SetCombatMovement(true); SetCombatMovement(true);
me->GetMotionMaster()->MoveChase(me->getVictim()); me->GetMotionMaster()->MoveChase(me->getVictim());
m_uiStage = 0; stage = 0;
break; break;
} }
} }
InstanceScript* instanceScript;
uint32 otherWormEntry;
uint32 modelStationary;
uint32 modelMobile;
uint32 biteSpell;
uint32 spewSpell;
uint32 spitSpell;
uint32 spraySpell;
uint32 biteTimer;
uint32 spewTimer;
uint32 slimePoolTimer;
uint32 spitTimer;
uint32 sprayTimer;
uint32 sweepTimer;
uint32 submergeTimer;
uint8 stage;
bool enraged;
}; };
@@ -569,11 +586,6 @@ class boss_acidmaw : public CreatureScript
public: public:
boss_acidmaw() : CreatureScript("boss_acidmaw") { } boss_acidmaw() : CreatureScript("boss_acidmaw") { }
CreatureAI* GetAI(Creature* pCreature) const
{
return new boss_acidmawAI(pCreature);
}
struct boss_acidmawAI : public boss_jormungarAI struct boss_acidmawAI : public boss_jormungarAI
{ {
boss_acidmawAI(Creature* pCreature) : boss_jormungarAI(pCreature) { } boss_acidmawAI(Creature* pCreature) : boss_jormungarAI(pCreature) { }
@@ -581,20 +593,24 @@ class boss_acidmaw : public CreatureScript
void Reset() void Reset()
{ {
boss_jormungarAI::Reset(); boss_jormungarAI::Reset();
m_uiBiteSpell = SPELL_PARALYTIC_BITE; biteSpell = SPELL_PARALYTIC_BITE;
m_uiSpewSpell = SPELL_ACID_SPEW; spewSpell = SPELL_ACID_SPEW;
m_uiSpitSpell = SPELL_ACID_SPIT; spitSpell = SPELL_ACID_SPIT;
m_uiSpraySpell = SPELL_PARALYTIC_SPRAY; spraySpell = SPELL_PARALYTIC_SPRAY;
m_uiModelStationary = MODEL_ACIDMAW_STATIONARY; modelStationary = MODEL_ACIDMAW_STATIONARY;
m_uiModelMobile = MODEL_ACIDMAW_MOBILE; modelMobile = MODEL_ACIDMAW_MOBILE;
m_uiSisterID = NPC_DREADSCALE; otherWormEntry = NPC_DREADSCALE;
m_uiSubmergeTimer = 500; submergeTimer = 500;
DoCast(me,SPELL_SUBMERGE_0); DoCast(me, SPELL_SUBMERGE_0);
m_uiStage = 2; stage = 2;
} }
}; };
CreatureAI* GetAI(Creature* creature) const
{
return new boss_acidmawAI(creature);
}
}; };
@@ -603,11 +619,6 @@ class boss_dreadscale : public CreatureScript
public: public:
boss_dreadscale() : CreatureScript("boss_dreadscale") { } boss_dreadscale() : CreatureScript("boss_dreadscale") { }
CreatureAI* GetAI(Creature* pCreature) const
{
return new boss_dreadscaleAI(pCreature);
}
struct boss_dreadscaleAI : public boss_jormungarAI struct boss_dreadscaleAI : public boss_jormungarAI
{ {
boss_dreadscaleAI(Creature* pCreature) : boss_jormungarAI(pCreature) { } boss_dreadscaleAI(Creature* pCreature) : boss_jormungarAI(pCreature) { }
@@ -615,19 +626,23 @@ public:
void Reset() void Reset()
{ {
boss_jormungarAI::Reset(); boss_jormungarAI::Reset();
m_uiBiteSpell = SPELL_BURNING_BITE; biteSpell = SPELL_BURNING_BITE;
m_uiSpewSpell = SPELL_MOLTEN_SPEW; spewSpell = SPELL_MOLTEN_SPEW;
m_uiSpitSpell = SPELL_FIRE_SPIT; spitSpell = SPELL_FIRE_SPIT;
m_uiSpraySpell = SPELL_BURNING_SPRAY; spraySpell = SPELL_BURNING_SPRAY;
m_uiModelStationary = MODEL_DREADSCALE_STATIONARY; modelStationary = MODEL_DREADSCALE_STATIONARY;
m_uiModelMobile = MODEL_DREADSCALE_MOBILE; modelMobile = MODEL_DREADSCALE_MOBILE;
m_uiSisterID = NPC_ACIDMAW; otherWormEntry = NPC_ACIDMAW;
m_uiSubmergeTimer = 45*IN_MILLISECONDS; submergeTimer = 45 * IN_MILLISECONDS;
m_uiStage = 0; stage = 0;
} }
}; };
CreatureAI* GetAI(Creature* pCreature) const
{
return new boss_dreadscaleAI(pCreature);
}
}; };
@@ -660,7 +675,7 @@ public:
if (!casted) if (!casted)
{ {
casted = true; casted = true;
DoCast(me,SPELL_SLIME_POOL_EFFECT); DoCast(me, SPELL_SLIME_POOL_EFFECT);
} }
} }
}; };
@@ -691,7 +706,7 @@ public:
uint32 m_uiWhirlTimer; uint32 m_uiWhirlTimer;
uint32 m_uiMassiveCrashTimer; uint32 m_uiMassiveCrashTimer;
uint32 m_uiTrampleTimer; uint32 m_uiTrampleTimer;
float m_fTrampleTargetX,m_fTrampleTargetY,m_fTrampleTargetZ; float m_fTrampleTargetX, m_fTrampleTargetY, m_fTrampleTargetZ;
uint64 m_uiTrampleTargetGUID; uint64 m_uiTrampleTargetGUID;
bool m_bMovementStarted; bool m_bMovementStarted;
bool m_bMovementFinish; bool m_bMovementFinish;
@@ -701,9 +716,9 @@ public:
void Reset() void Reset()
{ {
m_uiFerociousButtTimer = urand(15*IN_MILLISECONDS,30*IN_MILLISECONDS); m_uiFerociousButtTimer = urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS);
m_uiArticBreathTimer = urand(25*IN_MILLISECONDS,40*IN_MILLISECONDS); m_uiArticBreathTimer = urand(25*IN_MILLISECONDS, 40*IN_MILLISECONDS);
m_uiWhirlTimer = urand(15*IN_MILLISECONDS,30*IN_MILLISECONDS); m_uiWhirlTimer = urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS);
m_uiMassiveCrashTimer = 30*IN_MILLISECONDS; m_uiMassiveCrashTimer = 30*IN_MILLISECONDS;
m_uiTrampleTimer = IN_MILLISECONDS; m_uiTrampleTimer = IN_MILLISECONDS;
m_bMovementStarted = false; m_bMovementStarted = false;
@@ -729,7 +744,7 @@ public:
switch (uiId) switch (uiId)
{ {
case 0: // JUMP!? Fuck! THAT'S BEEZARR! Would someone PLEASE make MotionMaster->Move* work better? case 0: // JUMP!? Fuck! THAT'S BEEZARR! Would someone PLEASE make MotionMaster->Move* work better?
if (me->GetDistance2d(ToCCommonLoc[1].GetPositionX(),ToCCommonLoc[1].GetPositionY()) < 6.0f) if (me->GetDistance2d(ToCCommonLoc[1].GetPositionX(), ToCCommonLoc[1].GetPositionY()) < 6.0f)
{ {
// Middle of the room // Middle of the room
m_uiStage = 1; m_uiStage = 1;
@@ -737,7 +752,7 @@ public:
else else
{ {
// Landed from Hop backwards (start trample) // Landed from Hop backwards (start trample)
if (Unit::GetPlayer(*me,m_uiTrampleTargetGUID)) if (Unit::GetPlayer(*me, m_uiTrampleTargetGUID))
{ {
m_uiStage = 4; m_uiStage = 4;
} else m_uiStage = 6; } else m_uiStage = 6;
@@ -795,25 +810,25 @@ public:
if (m_uiFerociousButtTimer <= uiDiff) if (m_uiFerociousButtTimer <= uiDiff)
{ {
DoCastVictim(SPELL_FEROCIOUS_BUTT); DoCastVictim(SPELL_FEROCIOUS_BUTT);
m_uiFerociousButtTimer = urand(15*IN_MILLISECONDS,30*IN_MILLISECONDS); m_uiFerociousButtTimer = urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS);
} else m_uiFerociousButtTimer -= uiDiff; } else m_uiFerociousButtTimer -= uiDiff;
if (m_uiArticBreathTimer <= uiDiff) if (m_uiArticBreathTimer <= uiDiff)
{ {
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0)) if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget,SPELL_ARCTIC_BREATH); DoCast(pTarget, SPELL_ARCTIC_BREATH);
m_uiArticBreathTimer = urand(25*IN_MILLISECONDS,40*IN_MILLISECONDS); m_uiArticBreathTimer = urand(25*IN_MILLISECONDS, 40*IN_MILLISECONDS);
} else m_uiArticBreathTimer -= uiDiff; } else m_uiArticBreathTimer -= uiDiff;
if (m_uiWhirlTimer <= uiDiff) if (m_uiWhirlTimer <= uiDiff)
{ {
DoCastAOE(SPELL_WHIRL); DoCastAOE(SPELL_WHIRL);
m_uiWhirlTimer = urand(15*IN_MILLISECONDS,30*IN_MILLISECONDS); m_uiWhirlTimer = urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS);
} else m_uiWhirlTimer -= uiDiff; } else m_uiWhirlTimer -= uiDiff;
if (m_uiMassiveCrashTimer <= uiDiff) if (m_uiMassiveCrashTimer <= uiDiff)
{ {
me->GetMotionMaster()->MoveJump(ToCCommonLoc[1].GetPositionX(),ToCCommonLoc[1].GetPositionY(),ToCCommonLoc[1].GetPositionZ(),10.0f,20.0f); // 1: Middle of the room me->GetMotionMaster()->MoveJump(ToCCommonLoc[1].GetPositionX(), ToCCommonLoc[1].GetPositionY(), ToCCommonLoc[1].GetPositionZ(), 10.0f, 20.0f); // 1: Middle of the room
m_uiStage = 7; //Invalid (Do nothing more than move) m_uiStage = 7; //Invalid (Do nothing more than move)
m_uiMassiveCrashTimer = 30*IN_MILLISECONDS; m_uiMassiveCrashTimer = 30*IN_MILLISECONDS;
} else m_uiMassiveCrashTimer -= uiDiff; } else m_uiMassiveCrashTimer -= uiDiff;
@@ -825,11 +840,11 @@ public:
m_uiStage = 2; m_uiStage = 2;
break; break;
case 2: case 2:
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0)) if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
{ {
m_uiTrampleTargetGUID = pTarget->GetGUID(); m_uiTrampleTargetGUID = pTarget->GetGUID();
me->SetUInt64Value(UNIT_FIELD_TARGET, m_uiTrampleTargetGUID); me->SetUInt64Value(UNIT_FIELD_TARGET, m_uiTrampleTargetGUID);
DoScriptText(SAY_TRAMPLE_STARE,me,pTarget); DoScriptText(SAY_TRAMPLE_STARE, me, pTarget);
m_bTrampleCasted = false; m_bTrampleCasted = false;
SetCombatMovement(false); SetCombatMovement(false);
me->GetMotionMaster()->MoveIdle(); me->GetMotionMaster()->MoveIdle();
@@ -841,7 +856,7 @@ public:
case 3: case 3:
if (m_uiTrampleTimer <= uiDiff) if (m_uiTrampleTimer <= uiDiff)
{ {
if (Unit* pTarget = Unit::GetPlayer(*me,m_uiTrampleTargetGUID)) if (Unit* pTarget = Unit::GetPlayer(*me, m_uiTrampleTargetGUID))
{ {
m_bTrampleCasted = false; m_bTrampleCasted = false;
m_bMovementStarted = true; m_bMovementStarted = true;
@@ -851,14 +866,14 @@ public:
me->GetMotionMaster()->MoveJump(2*me->GetPositionX()-m_fTrampleTargetX, me->GetMotionMaster()->MoveJump(2*me->GetPositionX()-m_fTrampleTargetX,
2*me->GetPositionY()-m_fTrampleTargetY, 2*me->GetPositionY()-m_fTrampleTargetY,
me->GetPositionZ(), me->GetPositionZ(),
10.0f,20.0f); // 2: Hop Backwards 10.0f, 20.0f); // 2: Hop Backwards
m_uiStage = 7; //Invalid (Do nothing more than move) m_uiStage = 7; //Invalid (Do nothing more than move)
} else m_uiStage = 6; } else m_uiStage = 6;
} else m_uiTrampleTimer -= uiDiff; } else m_uiTrampleTimer -= uiDiff;
break; break;
case 4: case 4:
DoScriptText(SAY_TRAMPLE_START,me); DoScriptText(SAY_TRAMPLE_START, me);
me->GetMotionMaster()->MoveCharge(m_fTrampleTargetX,m_fTrampleTargetY,m_fTrampleTargetZ+2, 42, 1); me->GetMotionMaster()->MoveCharge(m_fTrampleTargetX, m_fTrampleTargetY, m_fTrampleTargetZ+2, 42, 1);
me->SetUInt64Value(UNIT_FIELD_TARGET, 0); me->SetUInt64Value(UNIT_FIELD_TARGET, 0);
m_uiStage = 5; m_uiStage = 5;
break; break;
@@ -888,8 +903,8 @@ public:
case 6: case 6:
if (!m_bTrampleCasted) if (!m_bTrampleCasted)
{ {
DoCast(me,SPELL_STAGGERED_DAZE); DoCast(me, SPELL_STAGGERED_DAZE);
DoScriptText(SAY_TRAMPLE_FAIL,me); DoScriptText(SAY_TRAMPLE_FAIL, me);
} }
m_bMovementStarted = false; m_bMovementStarted = false;
me->GetMotionMaster()->MovementExpired(); me->GetMotionMaster()->MovementExpired();
@@ -145,7 +145,7 @@ struct boss_twin_baseAI : public ScriptedAI
Position EssenceLocation[2]; Position EssenceLocation[2];
void Reset() { void Reset() {
me->SetFlag(UNIT_FIELD_FLAGS,UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_OOC_NOT_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
me->SetReactState(REACT_PASSIVE); me->SetReactState(REACT_PASSIVE);
/* Uncomment this once that they are flying above the ground /* Uncomment this once that they are flying above the ground
me->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING); me->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
@@ -156,7 +156,7 @@ struct boss_twin_baseAI : public ScriptedAI
m_uiColorballsTimer = 15*IN_MILLISECONDS; m_uiColorballsTimer = 15*IN_MILLISECONDS;
m_uiSpecialAbilityTimer = MINUTE*IN_MILLISECONDS; m_uiSpecialAbilityTimer = MINUTE*IN_MILLISECONDS;
m_uiSpikeTimer = 20*IN_MILLISECONDS; m_uiSpikeTimer = 20*IN_MILLISECONDS;
m_uiTouchTimer = urand(10,15)*IN_MILLISECONDS; m_uiTouchTimer = urand(10, 15)*IN_MILLISECONDS;
m_uiBerserkTimer = IsHeroic() ? 6*MINUTE*IN_MILLISECONDS : 10*MINUTE*IN_MILLISECONDS; m_uiBerserkTimer = IsHeroic() ? 6*MINUTE*IN_MILLISECONDS : 10*MINUTE*IN_MILLISECONDS;
Summons.DespawnAll(); Summons.DespawnAll();
@@ -183,7 +183,7 @@ struct boss_twin_baseAI : public ScriptedAI
me->SetHomePosition(HomeLocation); me->SetHomePosition(HomeLocation);
break; break;
case 1: case 1:
me->RemoveFlag(UNIT_FIELD_FLAGS,UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_OOC_NOT_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
me->SetReactState(REACT_AGGRESSIVE); me->SetReactState(REACT_AGGRESSIVE);
me->SetInCombatWithZone(); me->SetInCombatWithZone();
break; break;
@@ -194,7 +194,7 @@ struct boss_twin_baseAI : public ScriptedAI
{ {
if (pWho->GetTypeId() == TYPEID_PLAYER) if (pWho->GetTypeId() == TYPEID_PLAYER)
{ {
DoScriptText(urand(0,1) ? SAY_KILL1 : SAY_KILL2,me); DoScriptText(urand(0, 1) ? SAY_KILL1 : SAY_KILL2, me);
if (m_pInstance) if (m_pInstance)
m_pInstance->SetData(DATA_TRIBUTE_TO_IMMORTALITY_ELEGIBLE, 0); m_pInstance->SetData(DATA_TRIBUTE_TO_IMMORTALITY_ELEGIBLE, 0);
} }
@@ -202,7 +202,7 @@ struct boss_twin_baseAI : public ScriptedAI
void JustSummoned(Creature* pSummoned) void JustSummoned(Creature* pSummoned)
{ {
switch(pSummoned->GetEntry()) switch (pSummoned->GetEntry())
{ {
case NPC_UNLEASHED_DARK: case NPC_UNLEASHED_DARK:
case NPC_UNLEASHED_LIGHT: case NPC_UNLEASHED_LIGHT:
@@ -214,7 +214,7 @@ struct boss_twin_baseAI : public ScriptedAI
void SummonedCreatureDespawn(Creature* pSummoned) void SummonedCreatureDespawn(Creature* pSummoned)
{ {
switch(pSummoned->GetEntry()) switch (pSummoned->GetEntry())
{ {
case NPC_LIGHT_ESSENCE: case NPC_LIGHT_ESSENCE:
case NPC_DARK_ESSENCE: case NPC_DARK_ESSENCE:
@@ -273,17 +273,17 @@ struct boss_twin_baseAI : public ScriptedAI
for (uint8 i = 0; i < quantity; i++) for (uint8 i = 0; i < quantity; i++)
{ {
float x = float(urand(uint32(x0 - r), uint32(x0 + r))); float x = float(urand(uint32(x0 - r), uint32(x0 + r)));
if (urand(0,1)) if (urand(0, 1))
y = y0 + sqrt(pow(r,2) - pow((x-x0),2)); y = y0 + sqrt(pow(r, 2) - pow((x-x0), 2));
else else
y = y0 - sqrt(pow(r,2) - pow((x-x0),2)); y = y0 - sqrt(pow(r, 2) - pow((x-x0), 2));
me->SummonCreature(m_uiColorballNpcId,x,y,me->GetPositionZ(),TEMPSUMMON_CORPSE_DESPAWN); me->SummonCreature(m_uiColorballNpcId, x, y, me->GetPositionZ(), TEMPSUMMON_CORPSE_DESPAWN);
} }
} }
void JustDied(Unit* /*pKiller*/) void JustDied(Unit* /*pKiller*/)
{ {
DoScriptText(SAY_DEATH,me); DoScriptText(SAY_DEATH, me);
if (m_pInstance) if (m_pInstance)
{ {
m_pInstance->SetData(DATA_HEALTH_TWIN_SHARED, 0); m_pInstance->SetData(DATA_HEALTH_TWIN_SHARED, 0);
@@ -303,7 +303,7 @@ struct boss_twin_baseAI : public ScriptedAI
// Called when sister pointer needed // Called when sister pointer needed
Creature* GetSister() Creature* GetSister()
{ {
return Unit::GetCreature((*me),m_pInstance->GetData64(m_uiSisterNpcId)); return Unit::GetCreature((*me), m_pInstance->GetData64(m_uiSisterNpcId));
} }
void EnterCombat(Unit* /*pWho*/) void EnterCombat(Unit* /*pWho*/)
@@ -319,20 +319,20 @@ struct boss_twin_baseAI : public ScriptedAI
me->SummonCreature(m_uiEssenceNpcId, EssenceLocation[0].GetPositionX(), EssenceLocation[0].GetPositionY(), EssenceLocation[0].GetPositionZ()); me->SummonCreature(m_uiEssenceNpcId, EssenceLocation[0].GetPositionX(), EssenceLocation[0].GetPositionY(), EssenceLocation[0].GetPositionZ());
me->SummonCreature(m_uiEssenceNpcId, EssenceLocation[1].GetPositionX(), EssenceLocation[1].GetPositionY(), EssenceLocation[1].GetPositionZ()); me->SummonCreature(m_uiEssenceNpcId, EssenceLocation[1].GetPositionX(), EssenceLocation[1].GetPositionY(), EssenceLocation[1].GetPositionZ());
} }
DoScriptText(SAY_AGGRO,me); DoScriptText(SAY_AGGRO, me);
DoCast(me,m_uiSurgeSpellId); DoCast(me, m_uiSurgeSpellId);
} }
void DoAction(const int32 action) void DoAction(const int32 action)
{ {
switch(action) switch (action)
{ {
case ACTION_VORTEX: case ACTION_VORTEX:
m_uiStage = me->GetEntry() == NPC_LIGHTBANE ? 2 : 1; m_uiStage = me->GetEntry() == NPC_LIGHTBANE ? 2 : 1;
break; break;
case ACTION_PACT: case ACTION_PACT:
m_uiStage = me->GetEntry() == NPC_LIGHTBANE ? 1 : 2; m_uiStage = me->GetEntry() == NPC_LIGHTBANE ? 1 : 2;
DoCast(me,SPELL_TWIN_POWER); DoCast(me, SPELL_TWIN_POWER);
break; break;
} }
} }
@@ -356,8 +356,8 @@ struct boss_twin_baseAI : public ScriptedAI
{ {
if (Creature* pSister = GetSister()) if (Creature* pSister = GetSister())
pSister->AI()->DoAction(ACTION_VORTEX); pSister->AI()->DoAction(ACTION_VORTEX);
DoScriptText(m_uiVortexEmote,me); DoScriptText(m_uiVortexEmote, me);
DoScriptText(m_uiVortexSay,me); DoScriptText(m_uiVortexSay, me);
DoCastAOE(m_uiVortexSpellId); DoCastAOE(m_uiVortexSpellId);
m_uiStage = 0; m_uiStage = 0;
m_uiSpecialAbilityTimer = MINUTE*IN_MILLISECONDS; m_uiSpecialAbilityTimer = MINUTE*IN_MILLISECONDS;
@@ -368,10 +368,10 @@ struct boss_twin_baseAI : public ScriptedAI
{ {
if (Creature* pSister = GetSister()) if (Creature* pSister = GetSister())
pSister->AI()->DoAction(ACTION_PACT); pSister->AI()->DoAction(ACTION_PACT);
DoScriptText(EMOTE_SHIELD,me); DoScriptText(EMOTE_SHIELD, me);
DoScriptText(SAY_SHIELD,me); DoScriptText(SAY_SHIELD, me);
DoCast(me,m_uiShieldSpellId); DoCast(me, m_uiShieldSpellId);
DoCast(me,m_uiTwinPactSpellId); DoCast(me, m_uiTwinPactSpellId);
m_uiStage = 0; m_uiStage = 0;
m_uiSpecialAbilityTimer = MINUTE*IN_MILLISECONDS; m_uiSpecialAbilityTimer = MINUTE*IN_MILLISECONDS;
} m_uiSpecialAbilityTimer -= uiDiff; } m_uiSpecialAbilityTimer -= uiDiff;
@@ -388,9 +388,9 @@ struct boss_twin_baseAI : public ScriptedAI
if (IsHeroic() && m_uiTouchTimer <= uiDiff) if (IsHeroic() && m_uiTouchTimer <= uiDiff)
{ {
if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM,0,200,true,m_uiOtherEssenceSpellId)) if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 200, true, m_uiOtherEssenceSpellId))
DoCast(pTarget,m_uiTouchSpellId); DoCast(pTarget, m_uiTouchSpellId);
m_uiTouchTimer = urand(10,15)*IN_MILLISECONDS; m_uiTouchTimer = urand(10, 15)*IN_MILLISECONDS;
} m_uiTouchTimer -= uiDiff; } m_uiTouchTimer -= uiDiff;
if (m_uiColorballsTimer <= uiDiff) if (m_uiColorballsTimer <= uiDiff)
@@ -410,8 +410,8 @@ struct boss_twin_baseAI : public ScriptedAI
if (!m_bIsBerserk && m_uiBerserkTimer <= uiDiff) if (!m_bIsBerserk && m_uiBerserkTimer <= uiDiff)
{ {
DoCast(me,SPELL_BERSERK); DoCast(me, SPELL_BERSERK);
DoScriptText(SAY_BERSERK,me); DoScriptText(SAY_BERSERK, me);
m_bIsBerserk = true; m_bIsBerserk = true;
} else m_uiBerserkTimer -= uiDiff; } else m_uiBerserkTimer -= uiDiff;
@@ -566,16 +566,16 @@ struct mob_unleashed_ballAI : public ScriptedAI
float x0 = ToCCommonLoc[1].GetPositionX(), y0 = ToCCommonLoc[1].GetPositionY(), r = 47.0f; float x0 = ToCCommonLoc[1].GetPositionX(), y0 = ToCCommonLoc[1].GetPositionY(), r = 47.0f;
float y = y0; float y = y0;
float x = float(urand(uint32(x0 - r), uint32(x0 + r))); float x = float(urand(uint32(x0 - r), uint32(x0 + r)));
if (urand(0,1)) if (urand(0, 1))
y = y0 + sqrt(pow(r,2) - pow((x-x0),2)); y = y0 + sqrt(pow(r, 2) - pow((x-x0), 2));
else else
y = y0 - sqrt(pow(r,2) - pow((x-x0),2)); y = y0 - sqrt(pow(r, 2) - pow((x-x0), 2));
me->GetMotionMaster()->MovePoint(0,x,y,me->GetPositionZ()); me->GetMotionMaster()->MovePoint(0, x, y, me->GetPositionZ());
} }
void Reset() void Reset()
{ {
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_OOC_NOT_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
me->SetReactState(REACT_PASSIVE); me->SetReactState(REACT_PASSIVE);
me->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING); me->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
me->SetFlying(true); me->SetFlying(true);
@@ -591,7 +591,7 @@ struct mob_unleashed_ballAI : public ScriptedAI
switch (uiId) switch (uiId)
{ {
case 0: case 0:
if (urand(0,3) == 0) if (urand(0, 3) == 0)
MoveToNextPoint(); MoveToNextPoint();
else else
me->DisappearAndDie(); me->DisappearAndDie();
@@ -83,12 +83,12 @@ struct _Messages
static _Messages _GossipMessage[]= static _Messages _GossipMessage[]=
{ {
{MSG_BEASTS,GOSSIP_ACTION_INFO_DEF+1,false,TYPE_BEASTS}, {MSG_BEASTS, GOSSIP_ACTION_INFO_DEF+1, false, TYPE_BEASTS},
{MSG_JARAXXUS,GOSSIP_ACTION_INFO_DEF+2,false,TYPE_JARAXXUS}, {MSG_JARAXXUS, GOSSIP_ACTION_INFO_DEF+2, false, TYPE_JARAXXUS},
{MSG_CRUSADERS,GOSSIP_ACTION_INFO_DEF+3,false,TYPE_CRUSADERS}, {MSG_CRUSADERS, GOSSIP_ACTION_INFO_DEF+3, false, TYPE_CRUSADERS},
{MSG_VALKIRIES,GOSSIP_ACTION_INFO_DEF+4,false,TYPE_VALKIRIES}, {MSG_VALKIRIES, GOSSIP_ACTION_INFO_DEF+4, false, TYPE_VALKIRIES},
{MSG_LICH_KING,GOSSIP_ACTION_INFO_DEF+5,false,TYPE_ANUBARAK}, {MSG_LICH_KING, GOSSIP_ACTION_INFO_DEF+5, false, TYPE_ANUBARAK},
{MSG_ANUBARAK,GOSSIP_ACTION_INFO_DEF+6,true,TYPE_ANUBARAK} {MSG_ANUBARAK, GOSSIP_ACTION_INFO_DEF+6, true, TYPE_ANUBARAK}
}; };
enum enum
@@ -254,7 +254,7 @@ class boss_lich_king_toc : public CreatureScript
pSummoned->CastSpell(pSummoned, 51807, false); pSummoned->CastSpell(pSummoned, 51807, false);
pSummoned->SetDisplayId(11686); pSummoned->SetDisplayId(11686);
} }
if (m_pInstance) m_pInstance->SetData(TYPE_LICH_KING,IN_PROGRESS); if (m_pInstance) m_pInstance->SetData(TYPE_LICH_KING, IN_PROGRESS);
me->AddUnitMovementFlag(MOVEMENTFLAG_WALKING); me->AddUnitMovementFlag(MOVEMENTFLAG_WALKING);
} }
@@ -265,10 +265,10 @@ class boss_lich_king_toc : public CreatureScript
switch (uiId) switch (uiId)
{ {
case 0: case 0:
m_pInstance->SetData(TYPE_EVENT,5030); m_pInstance->SetData(TYPE_EVENT, 5030);
break; break;
case 1: case 1:
m_pInstance->SetData(TYPE_EVENT,5050); m_pInstance->SetData(TYPE_EVENT, 5050);
break; break;
} }
} }
@@ -284,49 +284,49 @@ class boss_lich_king_toc : public CreatureScript
switch (m_pInstance->GetData(TYPE_EVENT)) switch (m_pInstance->GetData(TYPE_EVENT))
{ {
case 5010: case 5010:
DoScriptText(SAY_STAGE_4_02,me); DoScriptText(SAY_STAGE_4_02, me);
m_uiUpdateTimer = 3000; m_uiUpdateTimer = 3000;
me->GetMotionMaster()->MovePoint(0,LichKingLoc[0]); me->GetMotionMaster()->MovePoint(0, LichKingLoc[0]);
m_pInstance->SetData(TYPE_EVENT,5020); m_pInstance->SetData(TYPE_EVENT, 5020);
break; break;
case 5030: case 5030:
DoScriptText(SAY_STAGE_4_04,me); DoScriptText(SAY_STAGE_4_04, me);
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_TALK); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_TALK);
m_uiUpdateTimer = 10000; m_uiUpdateTimer = 10000;
m_pInstance->SetData(TYPE_EVENT,5040); m_pInstance->SetData(TYPE_EVENT, 5040);
break; break;
case 5040: case 5040:
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
me->GetMotionMaster()->MovePoint(1,LichKingLoc[1]); me->GetMotionMaster()->MovePoint(1, LichKingLoc[1]);
m_uiUpdateTimer = 1000; m_uiUpdateTimer = 1000;
m_pInstance->SetData(TYPE_EVENT,0); m_pInstance->SetData(TYPE_EVENT, 0);
break; break;
case 5050: case 5050:
me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION);
m_uiUpdateTimer = 3000; m_uiUpdateTimer = 3000;
m_pInstance->SetData(TYPE_EVENT,5060); m_pInstance->SetData(TYPE_EVENT, 5060);
break; break;
case 5060: case 5060:
DoScriptText(SAY_STAGE_4_05,me); DoScriptText(SAY_STAGE_4_05, me);
me->HandleEmoteCommand(EMOTE_ONESHOT_KNEEL); me->HandleEmoteCommand(EMOTE_ONESHOT_KNEEL);
m_uiUpdateTimer = 2500; m_uiUpdateTimer = 2500;
m_pInstance->SetData(TYPE_EVENT,5070); m_pInstance->SetData(TYPE_EVENT, 5070);
break; break;
case 5070: case 5070:
me->CastSpell(me,68198,false); me->CastSpell(me, 68198, false);
m_uiUpdateTimer = 1500; m_uiUpdateTimer = 1500;
m_pInstance->SetData(TYPE_EVENT,5080); m_pInstance->SetData(TYPE_EVENT, 5080);
break; break;
case 5080: case 5080:
if (GameObject* pGoFloor = m_pInstance->instance->GetGameObject(m_pInstance->GetData64(GO_ARGENT_COLISEUM_FLOOR))) if (GameObject* pGoFloor = m_pInstance->instance->GetGameObject(m_pInstance->GetData64(GO_ARGENT_COLISEUM_FLOOR)))
pGoFloor->TakenDamage(1000000); pGoFloor->TakenDamage(1000000);
me->CastSpell(me,69016,false); me->CastSpell(me, 69016, false);
if (m_pInstance) m_pInstance->SetData(TYPE_LICH_KING,DONE); if (m_pInstance) m_pInstance->SetData(TYPE_LICH_KING, DONE);
Creature* pTemp = Unit::GetCreature((*me),m_pInstance->GetData64(NPC_ANUBARAK)); Creature* pTemp = Unit::GetCreature((*me), m_pInstance->GetData64(NPC_ANUBARAK));
if (!pTemp || !pTemp->isAlive()) if (!pTemp || !pTemp->isAlive())
pTemp = me->SummonCreature(NPC_ANUBARAK, AnubarakLoc[0].GetPositionX(), AnubarakLoc[0].GetPositionY(), AnubarakLoc[0].GetPositionZ(), 3, TEMPSUMMON_CORPSE_TIMED_DESPAWN, DESPAWN_TIME); pTemp = me->SummonCreature(NPC_ANUBARAK, AnubarakLoc[0].GetPositionX(), AnubarakLoc[0].GetPositionY(), AnubarakLoc[0].GetPositionZ(), 3, TEMPSUMMON_CORPSE_TIMED_DESPAWN, DESPAWN_TIME);
me->ForcedDespawn(); me->ForcedDespawn();
m_pInstance->SetData(TYPE_EVENT,0); m_pInstance->SetData(TYPE_EVENT, 0);
m_uiUpdateTimer = 20000; m_uiUpdateTimer = 20000;
break; break;
} }
@@ -364,7 +364,7 @@ class npc_fizzlebang_toc : public CreatureScript
{ {
DoScriptText(SAY_STAGE_1_06, me, pKiller); DoScriptText(SAY_STAGE_1_06, me, pKiller);
m_pInstance->SetData(TYPE_EVENT, 1180); m_pInstance->SetData(TYPE_EVENT, 1180);
if (Creature* pTemp = Unit::GetCreature(*me,m_pInstance->GetData64(NPC_JARAXXUS))) if (Creature* pTemp = Unit::GetCreature(*me, m_pInstance->GetData64(NPC_JARAXXUS)))
{ {
pTemp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); pTemp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
pTemp->SetReactState(REACT_AGGRESSIVE); pTemp->SetReactState(REACT_AGGRESSIVE);
@@ -447,7 +447,7 @@ class npc_fizzlebang_toc : public CreatureScript
{ {
pPortal->SetReactState(REACT_PASSIVE); pPortal->SetReactState(REACT_PASSIVE);
pPortal->SetFloatValue(OBJECT_FIELD_SCALE_X, 2.0f); pPortal->SetFloatValue(OBJECT_FIELD_SCALE_X, 2.0f);
pPortal->CastSpell(pPortal,SPELL_WILFRED_PORTAL,false); pPortal->CastSpell(pPortal, SPELL_WILFRED_PORTAL, false);
m_uiPortalGUID = pPortal->GetGUID(); m_uiPortalGUID = pPortal->GetGUID();
} }
m_uiUpdateTimer = 4000; m_uiUpdateTimer = 4000;
@@ -463,32 +463,32 @@ class npc_fizzlebang_toc : public CreatureScript
{ {
pTemp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); pTemp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
pTemp->SetReactState(REACT_PASSIVE); pTemp->SetReactState(REACT_PASSIVE);
pTemp->GetMotionMaster()->MovePoint(0,ToCCommonLoc[1].GetPositionX(), ToCCommonLoc[1].GetPositionY()-10, ToCCommonLoc[1].GetPositionZ()); pTemp->GetMotionMaster()->MovePoint(0, ToCCommonLoc[1].GetPositionX(), ToCCommonLoc[1].GetPositionY()-10, ToCCommonLoc[1].GetPositionZ());
} }
m_pInstance->SetData(TYPE_EVENT, 1142); m_pInstance->SetData(TYPE_EVENT, 1142);
m_uiUpdateTimer = 5000; m_uiUpdateTimer = 5000;
break; break;
case 1142: case 1142:
if (Creature* pTemp = Unit::GetCreature(*me,m_pInstance->GetData64(NPC_JARAXXUS))) if (Creature* pTemp = Unit::GetCreature(*me, m_pInstance->GetData64(NPC_JARAXXUS)))
pTemp->SetUInt64Value(UNIT_FIELD_TARGET, me->GetGUID()); pTemp->SetUInt64Value(UNIT_FIELD_TARGET, me->GetGUID());
if (Creature* pTrigger = Unit::GetCreature(*me,m_uiTriggerGUID)) if (Creature* pTrigger = Unit::GetCreature(*me, m_uiTriggerGUID))
pTrigger->ForcedDespawn(); pTrigger->ForcedDespawn();
if (Creature* pPortal = Unit::GetCreature(*me,m_uiPortalGUID)) if (Creature* pPortal = Unit::GetCreature(*me, m_uiPortalGUID))
pPortal->ForcedDespawn(); pPortal->ForcedDespawn();
m_pInstance->SetData(TYPE_EVENT, 1144); m_pInstance->SetData(TYPE_EVENT, 1144);
m_uiUpdateTimer = 10000; m_uiUpdateTimer = 10000;
break; break;
case 1144: case 1144:
if (Creature* pTemp = Unit::GetCreature(*me,m_pInstance->GetData64(NPC_JARAXXUS))) if (Creature* pTemp = Unit::GetCreature(*me, m_pInstance->GetData64(NPC_JARAXXUS)))
DoScriptText(SAY_STAGE_1_05,pTemp); DoScriptText(SAY_STAGE_1_05, pTemp);
m_pInstance->SetData(TYPE_EVENT, 1150); m_pInstance->SetData(TYPE_EVENT, 1150);
m_uiUpdateTimer = 5000; m_uiUpdateTimer = 5000;
break; break;
case 1150: case 1150:
if (Creature* pTemp = Unit::GetCreature(*me,m_pInstance->GetData64(NPC_JARAXXUS))) if (Creature* pTemp = Unit::GetCreature(*me, m_pInstance->GetData64(NPC_JARAXXUS)))
{ {
//1-shot Fizzlebang //1-shot Fizzlebang
pTemp->CastSpell(me,67888,false); pTemp->CastSpell(me, 67888, false);
me->SetInCombatWith(pTemp); me->SetInCombatWith(pTemp);
pTemp->AddThreat(me, 1000.0f); pTemp->AddThreat(me, 1000.0f);
pTemp->AI()->AttackStart(me); pTemp->AI()->AttackStart(me);
@@ -542,13 +542,13 @@ class npc_tirion_toc : public CreatureScript
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_TALK); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_TALK);
DoScriptText(SAY_STAGE_0_01, me); DoScriptText(SAY_STAGE_0_01, me);
m_uiUpdateTimer = 22000; m_uiUpdateTimer = 22000;
m_pInstance->SetData(TYPE_EVENT,120); m_pInstance->SetData(TYPE_EVENT, 120);
break; break;
case 140: case 140:
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_TALK); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_TALK);
DoScriptText(SAY_STAGE_0_02, me); DoScriptText(SAY_STAGE_0_02, me);
m_uiUpdateTimer = 5000; m_uiUpdateTimer = 5000;
m_pInstance->SetData(TYPE_EVENT,150); m_pInstance->SetData(TYPE_EVENT, 150);
m_pInstance->DoUseDoorOrButton(m_pInstance->GetData64(GO_MAIN_GATE_DOOR)); m_pInstance->DoUseDoorOrButton(m_pInstance->GetData64(GO_MAIN_GATE_DOOR));
break; break;
case 150: case 150:
@@ -556,259 +556,259 @@ class npc_tirion_toc : public CreatureScript
if (m_pInstance->GetData(TYPE_BEASTS) != DONE) if (m_pInstance->GetData(TYPE_BEASTS) != DONE)
{ {
me->SummonCreature(NPC_GORMOK, ToCCommonLoc[10].GetPositionX(), ToCCommonLoc[10].GetPositionY(), ToCCommonLoc[10].GetPositionZ(), 5, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30*IN_MILLISECONDS); me->SummonCreature(NPC_GORMOK, ToCCommonLoc[10].GetPositionX(), ToCCommonLoc[10].GetPositionY(), ToCCommonLoc[10].GetPositionZ(), 5, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30*IN_MILLISECONDS);
if (Creature* pTemp = Unit::GetCreature((*me),m_pInstance->GetData64(NPC_GORMOK))) if (Creature* pTemp = Unit::GetCreature((*me), m_pInstance->GetData64(NPC_GORMOK)))
{ {
pTemp->GetMotionMaster()->MovePoint(0, ToCCommonLoc[5].GetPositionX(), ToCCommonLoc[5].GetPositionY(), ToCCommonLoc[5].GetPositionZ()); pTemp->GetMotionMaster()->MovePoint(0, ToCCommonLoc[5].GetPositionX(), ToCCommonLoc[5].GetPositionY(), ToCCommonLoc[5].GetPositionZ());
pTemp->AddUnitMovementFlag(MOVEMENTFLAG_WALKING); pTemp->AddUnitMovementFlag(MOVEMENTFLAG_WALKING);
pTemp->SetFlag(UNIT_FIELD_FLAGS,UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_OOC_NOT_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE); pTemp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
pTemp->SetReactState(REACT_PASSIVE); pTemp->SetReactState(REACT_PASSIVE);
} }
} }
m_uiUpdateTimer = 3000; m_uiUpdateTimer = 3000;
m_pInstance->SetData(TYPE_EVENT,155); m_pInstance->SetData(TYPE_EVENT, 155);
break; break;
case 155: case 155:
if (Creature* pTemp = Unit::GetCreature((*me),m_pInstance->GetData64(NPC_GORMOK))) if (Creature* pTemp = Unit::GetCreature((*me), m_pInstance->GetData64(NPC_GORMOK)))
{ {
pTemp->RemoveFlag(UNIT_FIELD_FLAGS,UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_OOC_NOT_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE); pTemp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
pTemp->SetReactState(REACT_AGGRESSIVE); pTemp->SetReactState(REACT_AGGRESSIVE);
pTemp->SetInCombatWithZone(); pTemp->SetInCombatWithZone();
} }
m_pInstance->DoUseDoorOrButton(m_pInstance->GetData64(GO_MAIN_GATE_DOOR)); m_pInstance->DoUseDoorOrButton(m_pInstance->GetData64(GO_MAIN_GATE_DOOR));
m_pInstance->SetData(TYPE_BEASTS,IN_PROGRESS); m_pInstance->SetData(TYPE_BEASTS, IN_PROGRESS);
m_uiUpdateTimer = 5000; m_uiUpdateTimer = 5000;
m_pInstance->SetData(TYPE_EVENT,160); m_pInstance->SetData(TYPE_EVENT, 160);
break; break;
case 200: case 200:
DoScriptText(SAY_STAGE_0_04, me); DoScriptText(SAY_STAGE_0_04, me);
m_uiUpdateTimer = 8000; m_uiUpdateTimer = 8000;
m_pInstance->SetData(TYPE_EVENT,205); m_pInstance->SetData(TYPE_EVENT, 205);
break; break;
case 205: case 205:
m_uiUpdateTimer = 3000; m_uiUpdateTimer = 3000;
m_pInstance->SetData(TYPE_EVENT,210); m_pInstance->SetData(TYPE_EVENT, 210);
m_pInstance->DoUseDoorOrButton(m_pInstance->GetData64(GO_MAIN_GATE_DOOR)); m_pInstance->DoUseDoorOrButton(m_pInstance->GetData64(GO_MAIN_GATE_DOOR));
break; break;
case 210: case 210:
if (m_pInstance->GetData(TYPE_BEASTS) != DONE) if (m_pInstance->GetData(TYPE_BEASTS) != DONE)
{ {
me->SummonCreature(NPC_DREADSCALE, ToCCommonLoc[3].GetPositionX(), ToCCommonLoc[3].GetPositionY(), ToCCommonLoc[3].GetPositionZ(), 5, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30*IN_MILLISECONDS); me->SummonCreature(NPC_DREADSCALE, ToCCommonLoc[3].GetPositionX(), ToCCommonLoc[3].GetPositionY(), ToCCommonLoc[3].GetPositionZ(), 5, TEMPSUMMON_MANUAL_DESPAWN);
me->SummonCreature(NPC_ACIDMAW, ToCCommonLoc[4].GetPositionX(), ToCCommonLoc[4].GetPositionY(), ToCCommonLoc[4].GetPositionZ(), 5, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30*IN_MILLISECONDS); me->SummonCreature(NPC_ACIDMAW, ToCCommonLoc[4].GetPositionX(), ToCCommonLoc[4].GetPositionY(), ToCCommonLoc[4].GetPositionZ(), 5, TEMPSUMMON_MANUAL_DESPAWN);
if (Creature* pTemp = Unit::GetCreature((*me),m_pInstance->GetData64(NPC_DREADSCALE))) if (Creature* pTemp = Unit::GetCreature((*me), m_pInstance->GetData64(NPC_DREADSCALE)))
{ {
pTemp->GetMotionMaster()->MovePoint(0, ToCCommonLoc[8].GetPositionX(), ToCCommonLoc[8].GetPositionY(), ToCCommonLoc[8].GetPositionZ()); pTemp->GetMotionMaster()->MovePoint(0, ToCCommonLoc[8].GetPositionX(), ToCCommonLoc[8].GetPositionY(), ToCCommonLoc[8].GetPositionZ());
pTemp->AddUnitMovementFlag(MOVEMENTFLAG_WALKING); pTemp->AddUnitMovementFlag(MOVEMENTFLAG_WALKING);
pTemp->SetFlag(UNIT_FIELD_FLAGS,UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_OOC_NOT_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE); pTemp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
pTemp->SetReactState(REACT_PASSIVE); pTemp->SetReactState(REACT_PASSIVE);
} }
if (Creature* pTemp = Unit::GetCreature((*me),m_pInstance->GetData64(NPC_ACIDMAW))) if (Creature* pTemp = Unit::GetCreature((*me), m_pInstance->GetData64(NPC_ACIDMAW)))
{ {
pTemp->GetMotionMaster()->MovePoint(0, ToCCommonLoc[9].GetPositionX(), ToCCommonLoc[9].GetPositionY(), ToCCommonLoc[9].GetPositionZ()); pTemp->GetMotionMaster()->MovePoint(0, ToCCommonLoc[9].GetPositionX(), ToCCommonLoc[9].GetPositionY(), ToCCommonLoc[9].GetPositionZ());
pTemp->AddUnitMovementFlag(MOVEMENTFLAG_WALKING); pTemp->AddUnitMovementFlag(MOVEMENTFLAG_WALKING);
pTemp->SetFlag(UNIT_FIELD_FLAGS,UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_OOC_NOT_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE); pTemp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
pTemp->SetReactState(REACT_PASSIVE); pTemp->SetReactState(REACT_PASSIVE);
} }
} }
m_uiUpdateTimer = 5000; m_uiUpdateTimer = 5000;
m_pInstance->SetData(TYPE_EVENT,220); m_pInstance->SetData(TYPE_EVENT, 220);
break; break;
case 220: case 220:
if (Creature* pTemp = Unit::GetCreature((*me),m_pInstance->GetData64(NPC_DREADSCALE))) if (Creature* pTemp = Unit::GetCreature((*me), m_pInstance->GetData64(NPC_DREADSCALE)))
{ {
pTemp->RemoveFlag(UNIT_FIELD_FLAGS,UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_OOC_NOT_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE); pTemp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
pTemp->SetReactState(REACT_AGGRESSIVE); pTemp->SetReactState(REACT_AGGRESSIVE);
pTemp->SetInCombatWithZone(); pTemp->SetInCombatWithZone();
} }
if (Creature* pTemp = Unit::GetCreature((*me),m_pInstance->GetData64(NPC_ACIDMAW))) if (Creature* pTemp = Unit::GetCreature((*me), m_pInstance->GetData64(NPC_ACIDMAW)))
{ {
pTemp->RemoveFlag(UNIT_FIELD_FLAGS,UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_OOC_NOT_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE); pTemp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
pTemp->SetReactState(REACT_AGGRESSIVE); pTemp->SetReactState(REACT_AGGRESSIVE);
pTemp->SetInCombatWithZone(); pTemp->SetInCombatWithZone();
} }
m_pInstance->SetData(TYPE_EVENT,230); m_pInstance->SetData(TYPE_EVENT, 230);
m_pInstance->DoUseDoorOrButton(m_pInstance->GetData64(GO_MAIN_GATE_DOOR)); m_pInstance->DoUseDoorOrButton(m_pInstance->GetData64(GO_MAIN_GATE_DOOR));
break; break;
case 300: case 300:
DoScriptText(SAY_STAGE_0_05, me); DoScriptText(SAY_STAGE_0_05, me);
m_uiUpdateTimer = 8000; m_uiUpdateTimer = 8000;
m_pInstance->SetData(TYPE_EVENT,305); m_pInstance->SetData(TYPE_EVENT, 305);
break; break;
case 305: case 305:
m_uiUpdateTimer = 3000; m_uiUpdateTimer = 3000;
m_pInstance->SetData(TYPE_EVENT,310); m_pInstance->SetData(TYPE_EVENT, 310);
m_pInstance->DoUseDoorOrButton(m_pInstance->GetData64(GO_MAIN_GATE_DOOR)); m_pInstance->DoUseDoorOrButton(m_pInstance->GetData64(GO_MAIN_GATE_DOOR));
break; break;
case 310: case 310:
if (m_pInstance->GetData(TYPE_BEASTS) != DONE) if (m_pInstance->GetData(TYPE_BEASTS) != DONE)
{ {
me->SummonCreature(NPC_ICEHOWL, ToCCommonLoc[10].GetPositionX(), ToCCommonLoc[10].GetPositionY(), ToCCommonLoc[10].GetPositionZ(), 5, TEMPSUMMON_DEAD_DESPAWN); me->SummonCreature(NPC_ICEHOWL, ToCCommonLoc[10].GetPositionX(), ToCCommonLoc[10].GetPositionY(), ToCCommonLoc[10].GetPositionZ(), 5, TEMPSUMMON_DEAD_DESPAWN);
if (Creature* pTemp = Unit::GetCreature((*me),m_pInstance->GetData64(NPC_ICEHOWL))) if (Creature* pTemp = Unit::GetCreature((*me), m_pInstance->GetData64(NPC_ICEHOWL)))
{ {
pTemp->GetMotionMaster()->MovePoint(0, ToCCommonLoc[5].GetPositionX(), ToCCommonLoc[5].GetPositionY(), ToCCommonLoc[5].GetPositionZ()); pTemp->GetMotionMaster()->MovePoint(0, ToCCommonLoc[5].GetPositionX(), ToCCommonLoc[5].GetPositionY(), ToCCommonLoc[5].GetPositionZ());
pTemp->SetInCombatWithZone(); pTemp->SetInCombatWithZone();
} }
} }
m_uiUpdateTimer = 5000; m_uiUpdateTimer = 5000;
m_pInstance->SetData(TYPE_EVENT,315); m_pInstance->SetData(TYPE_EVENT, 315);
break; break;
case 315: case 315:
m_pInstance->DoUseDoorOrButton(m_pInstance->GetData64(GO_MAIN_GATE_DOOR)); m_pInstance->DoUseDoorOrButton(m_pInstance->GetData64(GO_MAIN_GATE_DOOR));
m_pInstance->SetData(TYPE_EVENT,320); m_pInstance->SetData(TYPE_EVENT, 320);
break; break;
case 400: case 400:
DoScriptText(SAY_STAGE_0_06, me); DoScriptText(SAY_STAGE_0_06, me);
m_uiUpdateTimer = 5000; m_uiUpdateTimer = 5000;
m_pInstance->SetData(TYPE_EVENT,0); m_pInstance->SetData(TYPE_EVENT, 0);
break; break;
case 666: case 666:
DoScriptText(SAY_STAGE_0_WIPE, me); DoScriptText(SAY_STAGE_0_WIPE, me);
m_uiUpdateTimer = 5000; m_uiUpdateTimer = 5000;
m_pInstance->SetData(TYPE_EVENT,0); m_pInstance->SetData(TYPE_EVENT, 0);
break; break;
case 1010: case 1010:
DoScriptText(SAY_STAGE_1_01, me); DoScriptText(SAY_STAGE_1_01, me);
m_uiUpdateTimer = 7000; m_uiUpdateTimer = 7000;
m_pInstance->DoUseDoorOrButton(m_pInstance->GetData64(GO_MAIN_GATE_DOOR)); m_pInstance->DoUseDoorOrButton(m_pInstance->GetData64(GO_MAIN_GATE_DOOR));
me->SummonCreature(NPC_FIZZLEBANG, ToCCommonLoc[10].GetPositionX(), ToCCommonLoc[10].GetPositionY(), ToCCommonLoc[10].GetPositionZ(), 2, TEMPSUMMON_CORPSE_TIMED_DESPAWN, DESPAWN_TIME); me->SummonCreature(NPC_FIZZLEBANG, ToCCommonLoc[10].GetPositionX(), ToCCommonLoc[10].GetPositionY(), ToCCommonLoc[10].GetPositionZ(), 2, TEMPSUMMON_CORPSE_TIMED_DESPAWN, DESPAWN_TIME);
m_pInstance->SetData(TYPE_EVENT,0); m_pInstance->SetData(TYPE_EVENT, 0);
break; break;
case 1180: case 1180:
DoScriptText(SAY_STAGE_1_07, me); DoScriptText(SAY_STAGE_1_07, me);
m_uiUpdateTimer = 3000; m_uiUpdateTimer = 3000;
m_pInstance->SetData(TYPE_EVENT,0); m_pInstance->SetData(TYPE_EVENT, 0);
break; break;
case 2000: case 2000:
DoScriptText(SAY_STAGE_1_08, me); DoScriptText(SAY_STAGE_1_08, me);
m_uiUpdateTimer = 18000; m_uiUpdateTimer = 18000;
m_pInstance->SetData(TYPE_EVENT,2010); m_pInstance->SetData(TYPE_EVENT, 2010);
break; break;
case 2030: case 2030:
DoScriptText(SAY_STAGE_1_11, me); DoScriptText(SAY_STAGE_1_11, me);
m_uiUpdateTimer = 5000; m_uiUpdateTimer = 5000;
m_pInstance->SetData(TYPE_EVENT,0); m_pInstance->SetData(TYPE_EVENT, 0);
break; break;
case 3000: case 3000:
DoScriptText(SAY_STAGE_2_01, me); DoScriptText(SAY_STAGE_2_01, me);
m_uiUpdateTimer = 12000; m_uiUpdateTimer = 12000;
m_pInstance->SetData(TYPE_EVENT,3050); m_pInstance->SetData(TYPE_EVENT, 3050);
break; break;
case 3001: case 3001:
DoScriptText(SAY_STAGE_2_01, me); DoScriptText(SAY_STAGE_2_01, me);
m_uiUpdateTimer = 12000; m_uiUpdateTimer = 12000;
m_pInstance->SetData(TYPE_EVENT,3051); m_pInstance->SetData(TYPE_EVENT, 3051);
break; break;
case 3060: case 3060:
DoScriptText(SAY_STAGE_2_03, me); DoScriptText(SAY_STAGE_2_03, me);
m_uiUpdateTimer = 5000; m_uiUpdateTimer = 5000;
m_pInstance->SetData(TYPE_EVENT,3070); m_pInstance->SetData(TYPE_EVENT, 3070);
break; break;
case 3061: case 3061:
DoScriptText(SAY_STAGE_2_03, me); DoScriptText(SAY_STAGE_2_03, me);
m_uiUpdateTimer = 5000; m_uiUpdateTimer = 5000;
m_pInstance->SetData(TYPE_EVENT,3071); m_pInstance->SetData(TYPE_EVENT, 3071);
break; break;
//Summoning crusaders //Summoning crusaders
case 3091: case 3091:
me->SummonCreature(NPC_CHAMPIONS_CONTROLLER, ToCCommonLoc[1]); me->SummonCreature(NPC_CHAMPIONS_CONTROLLER, ToCCommonLoc[1]);
if (Creature* pChampionController = Unit::GetCreature((*me),m_pInstance->GetData64(NPC_CHAMPIONS_CONTROLLER))) if (Creature* pChampionController = Unit::GetCreature((*me), m_pInstance->GetData64(NPC_CHAMPIONS_CONTROLLER)))
pChampionController->AI()->SetData(0,HORDE); pChampionController->AI()->SetData(0, HORDE);
m_uiUpdateTimer = 3000; m_uiUpdateTimer = 3000;
m_pInstance->SetData(TYPE_EVENT,3092); m_pInstance->SetData(TYPE_EVENT, 3092);
break; break;
//Summoning crusaders //Summoning crusaders
case 3090: case 3090:
me->SummonCreature(NPC_CHAMPIONS_CONTROLLER, ToCCommonLoc[1]); me->SummonCreature(NPC_CHAMPIONS_CONTROLLER, ToCCommonLoc[1]);
if (Creature* pChampionController = Unit::GetCreature((*me),m_pInstance->GetData64(NPC_CHAMPIONS_CONTROLLER))) if (Creature* pChampionController = Unit::GetCreature((*me), m_pInstance->GetData64(NPC_CHAMPIONS_CONTROLLER)))
pChampionController->AI()->SetData(0,ALLIANCE); pChampionController->AI()->SetData(0, ALLIANCE);
m_uiUpdateTimer = 3000; m_uiUpdateTimer = 3000;
m_pInstance->SetData(TYPE_EVENT,3092); m_pInstance->SetData(TYPE_EVENT, 3092);
break; break;
case 3092: case 3092:
if (Creature* pChampionController = Unit::GetCreature((*me),m_pInstance->GetData64(NPC_CHAMPIONS_CONTROLLER))) if (Creature* pChampionController = Unit::GetCreature((*me), m_pInstance->GetData64(NPC_CHAMPIONS_CONTROLLER)))
pChampionController->AI()->SetData(1,NOT_STARTED); pChampionController->AI()->SetData(1, NOT_STARTED);
m_pInstance->SetData(TYPE_EVENT,3095); m_pInstance->SetData(TYPE_EVENT, 3095);
break; break;
//Crusaders battle end //Crusaders battle end
case 3100: case 3100:
DoScriptText(SAY_STAGE_2_06, me); DoScriptText(SAY_STAGE_2_06, me);
m_uiUpdateTimer = 5000; m_uiUpdateTimer = 5000;
m_pInstance->SetData(TYPE_EVENT,0); m_pInstance->SetData(TYPE_EVENT, 0);
break; break;
case 4000: case 4000:
DoScriptText(SAY_STAGE_3_01, me); DoScriptText(SAY_STAGE_3_01, me);
m_uiUpdateTimer = 13000; m_uiUpdateTimer = 13000;
m_pInstance->SetData(TYPE_EVENT,4010); m_pInstance->SetData(TYPE_EVENT, 4010);
break; break;
case 4010: case 4010:
DoScriptText(SAY_STAGE_3_02, me); DoScriptText(SAY_STAGE_3_02, me);
m_pInstance->DoUseDoorOrButton(m_pInstance->GetData64(GO_MAIN_GATE_DOOR)); m_pInstance->DoUseDoorOrButton(m_pInstance->GetData64(GO_MAIN_GATE_DOOR));
m_uiUpdateTimer = 3000; m_uiUpdateTimer = 3000;
m_pInstance->SetData(TYPE_EVENT,4015); m_pInstance->SetData(TYPE_EVENT, 4015);
break; break;
case 4015: case 4015:
me->SummonCreature(NPC_LIGHTBANE, ToCCommonLoc[3].GetPositionX(), ToCCommonLoc[3].GetPositionY(), ToCCommonLoc[3].GetPositionZ(), 5, TEMPSUMMON_CORPSE_TIMED_DESPAWN, DESPAWN_TIME); me->SummonCreature(NPC_LIGHTBANE, ToCCommonLoc[3].GetPositionX(), ToCCommonLoc[3].GetPositionY(), ToCCommonLoc[3].GetPositionZ(), 5, TEMPSUMMON_CORPSE_TIMED_DESPAWN, DESPAWN_TIME);
if (Creature* pTemp = Unit::GetCreature((*me),m_pInstance->GetData64(NPC_LIGHTBANE))) if (Creature* pTemp = Unit::GetCreature((*me), m_pInstance->GetData64(NPC_LIGHTBANE)))
{ {
pTemp->GetMotionMaster()->MovePoint(0, ToCCommonLoc[6].GetPositionX(), ToCCommonLoc[6].GetPositionY(), ToCCommonLoc[6].GetPositionZ()); pTemp->GetMotionMaster()->MovePoint(0, ToCCommonLoc[6].GetPositionX(), ToCCommonLoc[6].GetPositionY(), ToCCommonLoc[6].GetPositionZ());
pTemp->AddUnitMovementFlag(MOVEMENTFLAG_WALKING); pTemp->AddUnitMovementFlag(MOVEMENTFLAG_WALKING);
me->SetReactState(REACT_PASSIVE); me->SetReactState(REACT_PASSIVE);
} }
me->SummonCreature(NPC_DARKBANE, ToCCommonLoc[4].GetPositionX(), ToCCommonLoc[4].GetPositionY(), ToCCommonLoc[4].GetPositionZ(), 5, TEMPSUMMON_CORPSE_TIMED_DESPAWN, DESPAWN_TIME); me->SummonCreature(NPC_DARKBANE, ToCCommonLoc[4].GetPositionX(), ToCCommonLoc[4].GetPositionY(), ToCCommonLoc[4].GetPositionZ(), 5, TEMPSUMMON_CORPSE_TIMED_DESPAWN, DESPAWN_TIME);
if (Creature* pTemp = Unit::GetCreature((*me),m_pInstance->GetData64(NPC_DARKBANE))) if (Creature* pTemp = Unit::GetCreature((*me), m_pInstance->GetData64(NPC_DARKBANE)))
{ {
pTemp->GetMotionMaster()->MovePoint(0, ToCCommonLoc[7].GetPositionX(), ToCCommonLoc[7].GetPositionY(), ToCCommonLoc[7].GetPositionZ()); pTemp->GetMotionMaster()->MovePoint(0, ToCCommonLoc[7].GetPositionX(), ToCCommonLoc[7].GetPositionY(), ToCCommonLoc[7].GetPositionZ());
pTemp->AddUnitMovementFlag(MOVEMENTFLAG_WALKING); pTemp->AddUnitMovementFlag(MOVEMENTFLAG_WALKING);
me->SetReactState(REACT_PASSIVE); me->SetReactState(REACT_PASSIVE);
} }
m_uiUpdateTimer = 5000; m_uiUpdateTimer = 5000;
m_pInstance->SetData(TYPE_EVENT,4016); m_pInstance->SetData(TYPE_EVENT, 4016);
break; break;
case 4016: case 4016:
m_pInstance->SetData(TYPE_EVENT,4017); m_pInstance->SetData(TYPE_EVENT, 4017);
m_pInstance->DoUseDoorOrButton(m_pInstance->GetData64(GO_MAIN_GATE_DOOR)); m_pInstance->DoUseDoorOrButton(m_pInstance->GetData64(GO_MAIN_GATE_DOOR));
break; break;
case 4040: case 4040:
m_uiUpdateTimer = 60000; m_uiUpdateTimer = 60000;
m_pInstance->SetData(TYPE_EVENT,5000); m_pInstance->SetData(TYPE_EVENT, 5000);
break; break;
case 5000: case 5000:
DoScriptText(SAY_STAGE_4_01, me); DoScriptText(SAY_STAGE_4_01, me);
m_uiUpdateTimer = 10000; m_uiUpdateTimer = 10000;
m_pInstance->SetData(TYPE_EVENT,5005); m_pInstance->SetData(TYPE_EVENT, 5005);
break; break;
case 5005: case 5005:
m_uiUpdateTimer = 8000; m_uiUpdateTimer = 8000;
m_pInstance->SetData(TYPE_EVENT,5010); m_pInstance->SetData(TYPE_EVENT, 5010);
me->SummonCreature(NPC_LICH_KING_1, ToCCommonLoc[2].GetPositionX(), ToCCommonLoc[2].GetPositionY(), ToCCommonLoc[2].GetPositionZ(), 5); me->SummonCreature(NPC_LICH_KING_1, ToCCommonLoc[2].GetPositionX(), ToCCommonLoc[2].GetPositionY(), ToCCommonLoc[2].GetPositionZ(), 5);
break; break;
case 5020: case 5020:
DoScriptText(SAY_STAGE_4_03, me); DoScriptText(SAY_STAGE_4_03, me);
m_uiUpdateTimer = 1000; m_uiUpdateTimer = 1000;
m_pInstance->SetData(TYPE_EVENT,0); m_pInstance->SetData(TYPE_EVENT, 0);
break; break;
case 6000: case 6000:
me->NearTeleportTo(AnubarakLoc[0].GetPositionX(), AnubarakLoc[0].GetPositionY(), AnubarakLoc[0].GetPositionZ(), 4.0f); me->NearTeleportTo(AnubarakLoc[0].GetPositionX(), AnubarakLoc[0].GetPositionY(), AnubarakLoc[0].GetPositionZ(), 4.0f);
m_uiUpdateTimer = 20000; m_uiUpdateTimer = 20000;
m_pInstance->SetData(TYPE_EVENT,6005); m_pInstance->SetData(TYPE_EVENT, 6005);
break; break;
case 6005: case 6005:
DoScriptText(SAY_STAGE_4_06, me); DoScriptText(SAY_STAGE_4_06, me);
m_uiUpdateTimer = 20000; m_uiUpdateTimer = 20000;
m_pInstance->SetData(TYPE_EVENT,6010); m_pInstance->SetData(TYPE_EVENT, 6010);
break; break;
case 6010: case 6010:
if (IsHeroic()) if (IsHeroic())
{ {
DoScriptText(SAY_STAGE_4_07, me); DoScriptText(SAY_STAGE_4_07, me);
m_uiUpdateTimer = 60000; m_uiUpdateTimer = 60000;
m_pInstance->SetData(TYPE_ANUBARAK,SPECIAL); m_pInstance->SetData(TYPE_ANUBARAK, SPECIAL);
m_pInstance->SetData(TYPE_EVENT,6020); m_pInstance->SetData(TYPE_EVENT, 6020);
} else m_pInstance->SetData(TYPE_EVENT,6030); } else m_pInstance->SetData(TYPE_EVENT, 6030);
break; break;
case 6020: case 6020:
me->ForcedDespawn(); me->ForcedDespawn();
m_uiUpdateTimer = 5000; m_uiUpdateTimer = 5000;
m_pInstance->SetData(TYPE_EVENT,6030); m_pInstance->SetData(TYPE_EVENT, 6030);
break; break;
} }
} else m_uiUpdateTimer -= uiDiff; } else m_uiUpdateTimer -= uiDiff;
@@ -856,37 +856,37 @@ class npc_garrosh_toc : public CreatureScript
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_TALK); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_TALK);
DoScriptText(SAY_STAGE_0_03h, me); DoScriptText(SAY_STAGE_0_03h, me);
m_uiUpdateTimer = 3000; m_uiUpdateTimer = 3000;
m_pInstance->SetData(TYPE_EVENT,132); m_pInstance->SetData(TYPE_EVENT, 132);
break; break;
case 132: case 132:
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE);
m_uiUpdateTimer = 5000; m_uiUpdateTimer = 5000;
m_pInstance->SetData(TYPE_EVENT,140); m_pInstance->SetData(TYPE_EVENT, 140);
break; break;
case 2010: case 2010:
DoScriptText(SAY_STAGE_1_09, me); DoScriptText(SAY_STAGE_1_09, me);
m_uiUpdateTimer = 9000; m_uiUpdateTimer = 9000;
m_pInstance->SetData(TYPE_EVENT,2020); m_pInstance->SetData(TYPE_EVENT, 2020);
break; break;
case 3050: case 3050:
DoScriptText(SAY_STAGE_2_02h, me); DoScriptText(SAY_STAGE_2_02h, me);
m_uiUpdateTimer = 15000; m_uiUpdateTimer = 15000;
m_pInstance->SetData(TYPE_EVENT,3060); m_pInstance->SetData(TYPE_EVENT, 3060);
break; break;
case 3070: case 3070:
DoScriptText(SAY_STAGE_2_04h, me); DoScriptText(SAY_STAGE_2_04h, me);
m_uiUpdateTimer = 6000; m_uiUpdateTimer = 6000;
m_pInstance->SetData(TYPE_EVENT,3080); m_pInstance->SetData(TYPE_EVENT, 3080);
break; break;
case 3081: case 3081:
DoScriptText(SAY_STAGE_2_05h, me); DoScriptText(SAY_STAGE_2_05h, me);
m_uiUpdateTimer = 3000; m_uiUpdateTimer = 3000;
m_pInstance->SetData(TYPE_EVENT,3091); m_pInstance->SetData(TYPE_EVENT, 3091);
break; break;
case 4030: case 4030:
DoScriptText(SAY_STAGE_3_03h, me); DoScriptText(SAY_STAGE_3_03h, me);
m_uiUpdateTimer = 5000; m_uiUpdateTimer = 5000;
m_pInstance->SetData(TYPE_EVENT,4040); m_pInstance->SetData(TYPE_EVENT, 4040);
break; break;
} }
} else m_uiUpdateTimer -= uiDiff; } else m_uiUpdateTimer -= uiDiff;
@@ -934,41 +934,41 @@ class npc_varian_toc : public CreatureScript
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_TALK); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_TALK);
DoScriptText(SAY_STAGE_0_03a, me); DoScriptText(SAY_STAGE_0_03a, me);
m_uiUpdateTimer = 2000; m_uiUpdateTimer = 2000;
m_pInstance->SetData(TYPE_EVENT,122); m_pInstance->SetData(TYPE_EVENT, 122);
break; break;
case 122: case 122:
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE);
m_uiUpdateTimer = 3000; m_uiUpdateTimer = 3000;
m_pInstance->SetData(TYPE_EVENT,130); m_pInstance->SetData(TYPE_EVENT, 130);
break; break;
case 2020: case 2020:
DoScriptText(SAY_STAGE_1_10, me); DoScriptText(SAY_STAGE_1_10, me);
m_uiUpdateTimer = 5000; m_uiUpdateTimer = 5000;
m_pInstance->SetData(TYPE_EVENT,2030); m_pInstance->SetData(TYPE_EVENT, 2030);
break; break;
case 3051: case 3051:
DoScriptText(SAY_STAGE_2_02a, me); DoScriptText(SAY_STAGE_2_02a, me);
m_uiUpdateTimer = 10000; m_uiUpdateTimer = 10000;
m_pInstance->SetData(TYPE_EVENT,3061); m_pInstance->SetData(TYPE_EVENT, 3061);
break; break;
case 3071: case 3071:
DoScriptText(SAY_STAGE_2_04a, me); DoScriptText(SAY_STAGE_2_04a, me);
m_uiUpdateTimer = 5000; m_uiUpdateTimer = 5000;
m_pInstance->SetData(TYPE_EVENT,3081); m_pInstance->SetData(TYPE_EVENT, 3081);
break; break;
case 3080: case 3080:
DoScriptText(SAY_STAGE_2_05a, me); DoScriptText(SAY_STAGE_2_05a, me);
m_uiUpdateTimer = 3000; m_uiUpdateTimer = 3000;
m_pInstance->SetData(TYPE_EVENT,3090); m_pInstance->SetData(TYPE_EVENT, 3090);
break; break;
case 4020: case 4020:
DoScriptText(SAY_STAGE_3_03a, me); DoScriptText(SAY_STAGE_3_03a, me);
m_uiUpdateTimer = 5000; m_uiUpdateTimer = 5000;
m_pInstance->SetData(TYPE_EVENT,4040); m_pInstance->SetData(TYPE_EVENT, 4040);
break; break;
} }
} else m_uiUpdateTimer -= uiDiff; } else m_uiUpdateTimer -= uiDiff;
m_pInstance->SetData(TYPE_EVENT_TIMER,m_uiUpdateTimer); m_pInstance->SetData(TYPE_EVENT_TIMER, m_uiUpdateTimer);
} }
}; };
@@ -76,28 +76,28 @@ const Position JaraxxusLoc[]=
const Position FactionChampionLoc[]= const Position FactionChampionLoc[]=
{ {
{514.231f,105.569f,418.234f, 0}, // 0 - Horde Initial Pos 0 {514.231f, 105.569f, 418.234f, 0}, // 0 - Horde Initial Pos 0
{508.334f,115.377f,418.234f, 0}, // 1 - Horde Initial Pos 1 {508.334f, 115.377f, 418.234f, 0}, // 1 - Horde Initial Pos 1
{506.454f,126.291f,418.234f, 0}, // 2 - Horde Initial Pos 2 {506.454f, 126.291f, 418.234f, 0}, // 2 - Horde Initial Pos 2
{506.243f,106.596f,421.592f, 0}, // 3 - Horde Initial Pos 3 {506.243f, 106.596f, 421.592f, 0}, // 3 - Horde Initial Pos 3
{499.885f,117.717f,421.557f, 0}, // 4 - Horde Initial Pos 4 {499.885f, 117.717f, 421.557f, 0}, // 4 - Horde Initial Pos 4
{613.127f,100.443f,419.74f, 0}, // 5 - Ally Initial Pos 0 {613.127f, 100.443f, 419.74f, 0}, // 5 - Ally Initial Pos 0
{621.126f,128.042f,418.231f, 0}, // 6 - Ally Initial Pos 1 {621.126f, 128.042f, 418.231f, 0}, // 6 - Ally Initial Pos 1
{618.829f,113.606f,418.232f, 0}, // 7 - Ally Initial Pos 2 {618.829f, 113.606f, 418.232f, 0}, // 7 - Ally Initial Pos 2
{625.845f,112.914f,421.575f, 0}, // 8 - Ally Initial Pos 3 {625.845f, 112.914f, 421.575f, 0}, // 8 - Ally Initial Pos 3
{615.566f,109.653f,418.234f, 0}, // 9 - Ally Initial Pos 4 {615.566f, 109.653f, 418.234f, 0}, // 9 - Ally Initial Pos 4
{535.469f,113.012f,394.66f, 0}, // 10 - Horde Final Pos 0 {535.469f, 113.012f, 394.66f, 0}, // 10 - Horde Final Pos 0
{526.417f,137.465f,394.749f, 0}, // 11 - Horde Final Pos 1 {526.417f, 137.465f, 394.749f, 0}, // 11 - Horde Final Pos 1
{528.108f,111.057f,395.289f, 0}, // 12 - Horde Final Pos 2 {528.108f, 111.057f, 395.289f, 0}, // 12 - Horde Final Pos 2
{519.92f,134.285f,395.289f, 0}, // 13 - Horde Final Pos 3 {519.92f, 134.285f, 395.289f, 0}, // 13 - Horde Final Pos 3
{533.648f,119.148f,394.646f, 0}, // 14 - Horde Final Pos 4 {533.648f, 119.148f, 394.646f, 0}, // 14 - Horde Final Pos 4
{531.399f,125.63f,394.708f, 0}, // 15 - Horde Final Pos 5 {531.399f, 125.63f, 394.708f, 0}, // 15 - Horde Final Pos 5
{528.958f,131.47f,394.73f, 0}, // 16 - Horde Final Pos 6 {528.958f, 131.47f, 394.73f, 0}, // 16 - Horde Final Pos 6
{526.309f,116.667f,394.833f, 0}, // 17 - Horde Final Pos 7 {526.309f, 116.667f, 394.833f, 0}, // 17 - Horde Final Pos 7
{524.238f,122.411f,394.819f, 0}, // 18 - Horde Final Pos 8 {524.238f, 122.411f, 394.819f, 0}, // 18 - Horde Final Pos 8
{521.901f,128.488f,394.832f, 0}, // 19 - Horde Final Pos 9 {521.901f, 128.488f, 394.832f, 0}, // 19 - Horde Final Pos 9
}; };
const Position TwinValkyrsLoc[]= const Position TwinValkyrsLoc[]=