aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp16
-rw-r--r--src/server/scripts/Northrend/Ulduar/ulduar/ulduar.h2
-rw-r--r--src/server/scripts/Northrend/Ulduar/ulduar/ulduar_teleporter.cpp56
3 files changed, 44 insertions, 30 deletions
diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp b/src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp
index 9762ca7c560..1491944dacc 100644
--- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp
+++ b/src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp
@@ -240,10 +240,6 @@ public:
void Reset()
{
_Reset();
- /*me->SetLootMode(LOOT_MODE_HARD_MODE_4);
- me->SetLootMode(LOOT_MODE_HARD_MODE_3);
- me->SetLootMode(LOOT_MODE_HARD_MODE_2);
- me->SetLootMode(LOOT_MODE_HARD_MODE_1);*/
pInstance->SetData(TYPE_LEVIATHAN, NOT_STARTED);
me->SetReactState(REACT_DEFENSIVE);
InstallAdds(true);
@@ -252,7 +248,7 @@ public:
void EnterCombat(Unit* /*who*/)
{
_EnterCombat();
- pInstance->SetData(TYPE_LEVIATHAN, IN_PROGRESS); //_Reset doesnt do this correctly
+ pInstance->SetData(TYPE_LEVIATHAN, IN_PROGRESS);
me->SetReactState(REACT_AGGRESSIVE);
events.ScheduleEvent(EVENT_PURSUE, 30*IN_MILLISECONDS);
events.ScheduleEvent(EVENT_MISSILE, 1500);
@@ -458,7 +454,7 @@ public:
case EVENT_SPEED:
DoCastAOE(SPELL_GATHERING_SPEED);
events.RepeatEvent(15*IN_MILLISECONDS);
- return;
+ break;
case EVENT_SUMMON:
if (summons.size() < 15) // 4seat+1turret+10lift
if (Creature* pLift = DoSummonFlyer(MOB_MECHANOLIFT, me, 30.0f, 50.0f, 0))
@@ -770,9 +766,9 @@ public:
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
if (Unit* pPlayer = me->GetVehicle()->GetPassenger(SEAT_PLAYER))
{
- pPlayer->ExitVehicle();
me->GetVehicleBase()->CastSpell(pPlayer, SPELL_SMOKE_TRAIL, true);
pPlayer->GetMotionMaster()->MoveKnockbackFrom(me->GetVehicleBase()->GetPositionX(), me->GetVehicleBase()->GetPositionY(), 30, 30);
+ pPlayer->ExitVehicle();
}
}
}
@@ -937,6 +933,12 @@ public:
{
if (pInstance)
pInstance->SetData(TYPE_COLOSSUS,pInstance->GetData(TYPE_COLOSSUS)+1);
+
+ if (pInstance)
+ {
+ if (pInstance->GetData(TYPE_COLOSSUS == 2))
+ pInstance->SetBossState(DATA_PRELEVIATHAN, DONE); // Unlocks the Teleport 2nd Location
+ }
}
}
diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/ulduar.h b/src/server/scripts/Northrend/Ulduar/ulduar/ulduar.h
index df3f4375bc1..dea6686f206 100644
--- a/src/server/scripts/Northrend/Ulduar/ulduar/ulduar.h
+++ b/src/server/scripts/Northrend/Ulduar/ulduar/ulduar.h
@@ -43,6 +43,7 @@ enum eTypes
DATA_BRUNDIR = 22,
DATA_RUNEMASTER_MOLGEIM = 23,
DATA_STORMCALLER_BRUNDIR = 24,
+ DATA_PRELEVIATHAN = 25,
NPC_LEVIATHAN = 33113,
NPC_IGNIS = 33118,
@@ -66,5 +67,4 @@ enum eTypes
EVENT_TOWER_OF_FLAMES_DESTROYED = 21033,
EVENT_TOWER_OF_LIFE_DESTROYED = 21030
};
-
#endif
diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/ulduar_teleporter.cpp b/src/server/scripts/Northrend/Ulduar/ulduar/ulduar_teleporter.cpp
index 0ceed03dd36..d70c3906597 100644
--- a/src/server/scripts/Northrend/Ulduar/ulduar/ulduar_teleporter.cpp
+++ b/src/server/scripts/Northrend/Ulduar/ulduar/ulduar_teleporter.cpp
@@ -47,32 +47,41 @@ public:
bool OnGossipSelect(Player *pPlayer, GameObject * /*pGO*/, uint32 sender, uint32 action)
{
pPlayer->PlayerTalkClass->ClearMenus();
- if (sender != GOSSIP_SENDER_MAIN) return true;
- if (!pPlayer->getAttackers().empty()) return true;
+ if (sender != GOSSIP_SENDER_MAIN)
+ return false;
+ if (!pPlayer->getAttackers().empty())
+ return false;
switch(action)
{
case BASE_CAMP:
pPlayer->TeleportTo(603, -706.122f, -92.6024f, 429.876f, 0.0f);
- pPlayer->CLOSE_GOSSIP_MENU(); break;
+ pPlayer->CLOSE_GOSSIP_MENU();
+ break;
case GROUNDS:
pPlayer->TeleportTo(603, 131.248f, -35.3802f, 409.804f, 0.0f);
- pPlayer->CLOSE_GOSSIP_MENU(); break;
+ pPlayer->CLOSE_GOSSIP_MENU();
+ break;
case FORGE:
pPlayer->TeleportTo(603, 553.233f, -12.3247f, 409.679f, 0.0f);
- pPlayer->CLOSE_GOSSIP_MENU(); break;
+ pPlayer->CLOSE_GOSSIP_MENU();
+ break;
case SCRAPYARD:
pPlayer->TeleportTo(603, 926.292f, -11.4635f, 418.595f, 0.0f);
- pPlayer->CLOSE_GOSSIP_MENU(); break;
+ pPlayer->CLOSE_GOSSIP_MENU();
+ break;
case ANTECHAMBER:
pPlayer->TeleportTo(603, 1498.09f, -24.246f, 420.967f, 0.0f);
- pPlayer->CLOSE_GOSSIP_MENU(); break;
+ pPlayer->CLOSE_GOSSIP_MENU();
+ break;
case WALKWAY:
pPlayer->TeleportTo(603, 1859.45f, -24.1f, 448.9f, 0.0f);
- pPlayer->CLOSE_GOSSIP_MENU(); break;
+ pPlayer->CLOSE_GOSSIP_MENU();
+ break;
case CONSERVATORY:
pPlayer->TeleportTo(603, 2086.27f, -24.3134f, 421.239f, 0.0f);
- pPlayer->CLOSE_GOSSIP_MENU(); break;
+ pPlayer->CLOSE_GOSSIP_MENU();
+ break;
}
return true;
@@ -80,28 +89,31 @@ public:
bool OnGossipHello(Player *pPlayer, GameObject *pGO)
{
- InstanceScript *pInstance = pGO->GetInstanceScript();
- if (!pInstance) return true;
+ InstanceScript* pInstance = pGO->GetInstanceScript();
+ if (!pInstance)
+ return false;
pPlayer->ADD_GOSSIP_ITEM(0, "Teleport to the Expedition Base Camp", GOSSIP_SENDER_MAIN, BASE_CAMP);
- pPlayer->ADD_GOSSIP_ITEM(0, "Teleport to the Formation Grounds", GOSSIP_SENDER_MAIN, GROUNDS);
- if (pInstance->GetData(TYPE_LEVIATHAN) == DONE)
+ if (pInstance->GetBossState(DATA_PRELEVIATHAN) == DONE || pPlayer->isGameMaster())
{
- pPlayer->ADD_GOSSIP_ITEM(0, "Teleport to the Colossal Forge", GOSSIP_SENDER_MAIN, FORGE);
- if (pInstance->GetData(TYPE_XT002) == DONE)
+ pPlayer->ADD_GOSSIP_ITEM(0, "Teleport to the Formation Grounds", GOSSIP_SENDER_MAIN, GROUNDS);
+ if (pInstance->GetBossState(TYPE_LEVIATHAN) == DONE || pPlayer->isGameMaster())
{
- pPlayer->ADD_GOSSIP_ITEM(0, "Teleport to the Scrapyard", GOSSIP_SENDER_MAIN, SCRAPYARD);
- pPlayer->ADD_GOSSIP_ITEM(0, "Teleport to the Antechamber of Ulduar", GOSSIP_SENDER_MAIN, ANTECHAMBER);
- if (pInstance->GetData(TYPE_KOLOGARN) == DONE)
+ pPlayer->ADD_GOSSIP_ITEM(0, "Teleport to the Colossal Forge", GOSSIP_SENDER_MAIN, FORGE);
+ if (pInstance->GetBossState(TYPE_XT002) == DONE || pPlayer->isGameMaster())
{
- pPlayer->ADD_GOSSIP_ITEM(0, "Teleport to the Shattered Walkway", GOSSIP_SENDER_MAIN, WALKWAY);
- if (pInstance->GetData(TYPE_AURIAYA) == DONE)
- pPlayer->ADD_GOSSIP_ITEM(0, "Teleport to the Conservatory of Life", GOSSIP_SENDER_MAIN, CONSERVATORY);
+ pPlayer->ADD_GOSSIP_ITEM(0, "Teleport to the Scrapyard", GOSSIP_SENDER_MAIN, SCRAPYARD);
+ pPlayer->ADD_GOSSIP_ITEM(0, "Teleport to the Antechamber of Ulduar", GOSSIP_SENDER_MAIN, ANTECHAMBER);
+ if (pInstance->GetBossState(TYPE_KOLOGARN) == DONE || pPlayer->isGameMaster())
+ {
+ pPlayer->ADD_GOSSIP_ITEM(0, "Teleport to the Shattered Walkway", GOSSIP_SENDER_MAIN, WALKWAY);
+ if (pInstance->GetBossState(TYPE_AURIAYA) == DONE || pPlayer->isGameMaster())
+ pPlayer->ADD_GOSSIP_ITEM(0, "Teleport to the Conservatory of Life", GOSSIP_SENDER_MAIN, CONSERVATORY);
+ }
}
}
}
pPlayer->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, pGO->GetGUID());
-
return true;
}