Scripts/Ulduar: Ulduar Teleporter

- add check for formation grounds thanks to silentstormpt
- fix gossip for ulduar teleporter

--HG--
branch : trunk
This commit is contained in:
Supabad
2010-09-04 15:42:43 +02:00
parent c05d0722f4
commit a0585adb37
3 changed files with 44 additions and 30 deletions
@@ -240,10 +240,6 @@ public:
void Reset() void Reset()
{ {
_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); pInstance->SetData(TYPE_LEVIATHAN, NOT_STARTED);
me->SetReactState(REACT_DEFENSIVE); me->SetReactState(REACT_DEFENSIVE);
InstallAdds(true); InstallAdds(true);
@@ -252,7 +248,7 @@ public:
void EnterCombat(Unit* /*who*/) void EnterCombat(Unit* /*who*/)
{ {
_EnterCombat(); _EnterCombat();
pInstance->SetData(TYPE_LEVIATHAN, IN_PROGRESS); //_Reset doesnt do this correctly pInstance->SetData(TYPE_LEVIATHAN, IN_PROGRESS);
me->SetReactState(REACT_AGGRESSIVE); me->SetReactState(REACT_AGGRESSIVE);
events.ScheduleEvent(EVENT_PURSUE, 30*IN_MILLISECONDS); events.ScheduleEvent(EVENT_PURSUE, 30*IN_MILLISECONDS);
events.ScheduleEvent(EVENT_MISSILE, 1500); events.ScheduleEvent(EVENT_MISSILE, 1500);
@@ -458,7 +454,7 @@ public:
case EVENT_SPEED: case EVENT_SPEED:
DoCastAOE(SPELL_GATHERING_SPEED); DoCastAOE(SPELL_GATHERING_SPEED);
events.RepeatEvent(15*IN_MILLISECONDS); events.RepeatEvent(15*IN_MILLISECONDS);
return; break;
case EVENT_SUMMON: case EVENT_SUMMON:
if (summons.size() < 15) // 4seat+1turret+10lift if (summons.size() < 15) // 4seat+1turret+10lift
if (Creature* pLift = DoSummonFlyer(MOB_MECHANOLIFT, me, 30.0f, 50.0f, 0)) 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); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
if (Unit* pPlayer = me->GetVehicle()->GetPassenger(SEAT_PLAYER)) if (Unit* pPlayer = me->GetVehicle()->GetPassenger(SEAT_PLAYER))
{ {
pPlayer->ExitVehicle();
me->GetVehicleBase()->CastSpell(pPlayer, SPELL_SMOKE_TRAIL, true); me->GetVehicleBase()->CastSpell(pPlayer, SPELL_SMOKE_TRAIL, true);
pPlayer->GetMotionMaster()->MoveKnockbackFrom(me->GetVehicleBase()->GetPositionX(), me->GetVehicleBase()->GetPositionY(), 30, 30); pPlayer->GetMotionMaster()->MoveKnockbackFrom(me->GetVehicleBase()->GetPositionX(), me->GetVehicleBase()->GetPositionY(), 30, 30);
pPlayer->ExitVehicle();
} }
} }
} }
@@ -937,6 +933,12 @@ public:
{ {
if (pInstance) if (pInstance)
pInstance->SetData(TYPE_COLOSSUS,pInstance->GetData(TYPE_COLOSSUS)+1); 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
}
} }
} }
@@ -43,6 +43,7 @@ enum eTypes
DATA_BRUNDIR = 22, DATA_BRUNDIR = 22,
DATA_RUNEMASTER_MOLGEIM = 23, DATA_RUNEMASTER_MOLGEIM = 23,
DATA_STORMCALLER_BRUNDIR = 24, DATA_STORMCALLER_BRUNDIR = 24,
DATA_PRELEVIATHAN = 25,
NPC_LEVIATHAN = 33113, NPC_LEVIATHAN = 33113,
NPC_IGNIS = 33118, NPC_IGNIS = 33118,
@@ -66,5 +67,4 @@ enum eTypes
EVENT_TOWER_OF_FLAMES_DESTROYED = 21033, EVENT_TOWER_OF_FLAMES_DESTROYED = 21033,
EVENT_TOWER_OF_LIFE_DESTROYED = 21030 EVENT_TOWER_OF_LIFE_DESTROYED = 21030
}; };
#endif #endif
@@ -47,32 +47,41 @@ public:
bool OnGossipSelect(Player *pPlayer, GameObject * /*pGO*/, uint32 sender, uint32 action) bool OnGossipSelect(Player *pPlayer, GameObject * /*pGO*/, uint32 sender, uint32 action)
{ {
pPlayer->PlayerTalkClass->ClearMenus(); pPlayer->PlayerTalkClass->ClearMenus();
if (sender != GOSSIP_SENDER_MAIN) return true; if (sender != GOSSIP_SENDER_MAIN)
if (!pPlayer->getAttackers().empty()) return true; return false;
if (!pPlayer->getAttackers().empty())
return false;
switch(action) switch(action)
{ {
case BASE_CAMP: case BASE_CAMP:
pPlayer->TeleportTo(603, -706.122f, -92.6024f, 429.876f, 0.0f); pPlayer->TeleportTo(603, -706.122f, -92.6024f, 429.876f, 0.0f);
pPlayer->CLOSE_GOSSIP_MENU(); break; pPlayer->CLOSE_GOSSIP_MENU();
break;
case GROUNDS: case GROUNDS:
pPlayer->TeleportTo(603, 131.248f, -35.3802f, 409.804f, 0.0f); pPlayer->TeleportTo(603, 131.248f, -35.3802f, 409.804f, 0.0f);
pPlayer->CLOSE_GOSSIP_MENU(); break; pPlayer->CLOSE_GOSSIP_MENU();
break;
case FORGE: case FORGE:
pPlayer->TeleportTo(603, 553.233f, -12.3247f, 409.679f, 0.0f); pPlayer->TeleportTo(603, 553.233f, -12.3247f, 409.679f, 0.0f);
pPlayer->CLOSE_GOSSIP_MENU(); break; pPlayer->CLOSE_GOSSIP_MENU();
break;
case SCRAPYARD: case SCRAPYARD:
pPlayer->TeleportTo(603, 926.292f, -11.4635f, 418.595f, 0.0f); pPlayer->TeleportTo(603, 926.292f, -11.4635f, 418.595f, 0.0f);
pPlayer->CLOSE_GOSSIP_MENU(); break; pPlayer->CLOSE_GOSSIP_MENU();
break;
case ANTECHAMBER: case ANTECHAMBER:
pPlayer->TeleportTo(603, 1498.09f, -24.246f, 420.967f, 0.0f); pPlayer->TeleportTo(603, 1498.09f, -24.246f, 420.967f, 0.0f);
pPlayer->CLOSE_GOSSIP_MENU(); break; pPlayer->CLOSE_GOSSIP_MENU();
break;
case WALKWAY: case WALKWAY:
pPlayer->TeleportTo(603, 1859.45f, -24.1f, 448.9f, 0.0f); pPlayer->TeleportTo(603, 1859.45f, -24.1f, 448.9f, 0.0f);
pPlayer->CLOSE_GOSSIP_MENU(); break; pPlayer->CLOSE_GOSSIP_MENU();
break;
case CONSERVATORY: case CONSERVATORY:
pPlayer->TeleportTo(603, 2086.27f, -24.3134f, 421.239f, 0.0f); pPlayer->TeleportTo(603, 2086.27f, -24.3134f, 421.239f, 0.0f);
pPlayer->CLOSE_GOSSIP_MENU(); break; pPlayer->CLOSE_GOSSIP_MENU();
break;
} }
return true; return true;
@@ -80,28 +89,31 @@ public:
bool OnGossipHello(Player *pPlayer, GameObject *pGO) bool OnGossipHello(Player *pPlayer, GameObject *pGO)
{ {
InstanceScript *pInstance = pGO->GetInstanceScript(); InstanceScript* pInstance = pGO->GetInstanceScript();
if (!pInstance) return true; 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 Expedition Base Camp", GOSSIP_SENDER_MAIN, BASE_CAMP);
if (pInstance->GetBossState(DATA_PRELEVIATHAN) == DONE || pPlayer->isGameMaster())
{
pPlayer->ADD_GOSSIP_ITEM(0, "Teleport to the Formation Grounds", GOSSIP_SENDER_MAIN, GROUNDS); pPlayer->ADD_GOSSIP_ITEM(0, "Teleport to the Formation Grounds", GOSSIP_SENDER_MAIN, GROUNDS);
if (pInstance->GetData(TYPE_LEVIATHAN) == DONE) if (pInstance->GetBossState(TYPE_LEVIATHAN) == DONE || pPlayer->isGameMaster())
{ {
pPlayer->ADD_GOSSIP_ITEM(0, "Teleport to the Colossal Forge", GOSSIP_SENDER_MAIN, FORGE); pPlayer->ADD_GOSSIP_ITEM(0, "Teleport to the Colossal Forge", GOSSIP_SENDER_MAIN, FORGE);
if (pInstance->GetData(TYPE_XT002) == DONE) if (pInstance->GetBossState(TYPE_XT002) == DONE || pPlayer->isGameMaster())
{ {
pPlayer->ADD_GOSSIP_ITEM(0, "Teleport to the Scrapyard", GOSSIP_SENDER_MAIN, SCRAPYARD); 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); pPlayer->ADD_GOSSIP_ITEM(0, "Teleport to the Antechamber of Ulduar", GOSSIP_SENDER_MAIN, ANTECHAMBER);
if (pInstance->GetData(TYPE_KOLOGARN) == DONE) if (pInstance->GetBossState(TYPE_KOLOGARN) == DONE || pPlayer->isGameMaster())
{ {
pPlayer->ADD_GOSSIP_ITEM(0, "Teleport to the Shattered Walkway", GOSSIP_SENDER_MAIN, WALKWAY); pPlayer->ADD_GOSSIP_ITEM(0, "Teleport to the Shattered Walkway", GOSSIP_SENDER_MAIN, WALKWAY);
if (pInstance->GetData(TYPE_AURIAYA) == DONE) if (pInstance->GetBossState(TYPE_AURIAYA) == DONE || pPlayer->isGameMaster())
pPlayer->ADD_GOSSIP_ITEM(0, "Teleport to the Conservatory of Life", GOSSIP_SENDER_MAIN, CONSERVATORY); pPlayer->ADD_GOSSIP_ITEM(0, "Teleport to the Conservatory of Life", GOSSIP_SENDER_MAIN, CONSERVATORY);
} }
} }
} }
}
pPlayer->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, pGO->GetGUID()); pPlayer->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, pGO->GetGUID());
return true; return true;
} }