diff options
author | Supabad <none@none> | 2010-09-04 15:42:43 +0200 |
---|---|---|
committer | Supabad <none@none> | 2010-09-04 15:42:43 +0200 |
commit | a0585adb37544aae973ab3f547ccadb4315c8eae (patch) | |
tree | e1dc93d869554673978b6019b9246450c59e72e0 | |
parent | c05d0722f4f6ee9a15c8877139ab5efda80db988 (diff) |
Scripts/Ulduar: Ulduar Teleporter
- add check for formation grounds thanks to silentstormpt
- fix gossip for ulduar teleporter
--HG--
branch : trunk
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; } |