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:
@@ -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;
|
||||||
@@ -81,27 +90,30 @@ 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user