Core/Scripts/Ulduar: fix Ulduar Teleporter

- fix ulduar save system
- adjust leviathan to use correct savesystem

--HG--
branch : trunk
This commit is contained in:
Supabad
2010-10-04 15:11:01 +02:00
parent 729e618baa
commit 5adaf5887e
4 changed files with 79 additions and 110 deletions
@@ -212,7 +212,6 @@ public:
boss_flame_leviathanAI(Creature* pCreature) : BossAI(pCreature, TYPE_LEVIATHAN), vehicle(pCreature->GetVehicleKit()) boss_flame_leviathanAI(Creature* pCreature) : BossAI(pCreature, TYPE_LEVIATHAN), vehicle(pCreature->GetVehicleKit())
{ {
assert(vehicle); assert(vehicle);
pInstance = me->GetInstanceScript();
uiActiveTowers = 4; uiActiveTowers = 4;
uiShutdown = 0; uiShutdown = 0;
ActiveTowers = false; ActiveTowers = false;
@@ -220,14 +219,13 @@ public:
towerOfLife = false; towerOfLife = false;
towerOfFlames = false; towerOfFlames = false;
towerOfFrost = false; towerOfFrost = false;
me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK, true); me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK, true);
me->ApplySpellImmune(0, IMMUNITY_ID, 49560, true); //deathgrip me->ApplySpellImmune(0, IMMUNITY_ID, 49560, true); //deathgrip
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED);
me->SetReactState(REACT_PASSIVE); me->SetReactState(REACT_PASSIVE);
} }
InstanceScript* pInstance;
Vehicle* vehicle; Vehicle* vehicle;
uint8 uiActiveTowers; uint8 uiActiveTowers;
uint8 uiShutdown; uint8 uiShutdown;
@@ -240,7 +238,6 @@ public:
void Reset() void Reset()
{ {
_Reset(); _Reset();
pInstance->SetData(TYPE_LEVIATHAN, NOT_STARTED);
me->SetReactState(REACT_DEFENSIVE); me->SetReactState(REACT_DEFENSIVE);
InstallAdds(true); InstallAdds(true);
} }
@@ -248,7 +245,6 @@ public:
void EnterCombat(Unit* /*who*/) void EnterCombat(Unit* /*who*/)
{ {
_EnterCombat(); _EnterCombat();
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);
@@ -347,7 +343,6 @@ public:
void JustDied(Unit* /*victim*/) void JustDied(Unit* /*victim*/)
{ {
_JustDied(); _JustDied();
pInstance->SetData(TYPE_LEVIATHAN, DONE); //_Reset doesnt do this correctly
DoScriptText(SAY_DEATH, me); DoScriptText(SAY_DEATH, me);
if (ActiveTowers) if (ActiveTowers)
@@ -355,13 +350,13 @@ public:
switch (uiActiveTowers) switch (uiActiveTowers)
{ {
case 4: case 4:
pInstance->DoCompleteAchievement(RAID_MODE(ACHIEV_10_ORBIT_UARY, ACHIEV_25_ORBIT_UARY)); instance->DoCompleteAchievement(RAID_MODE(ACHIEV_10_ORBIT_UARY, ACHIEV_25_ORBIT_UARY));
case 3: case 3:
pInstance->DoCompleteAchievement(RAID_MODE(ACHIEV_10_NUKED_FROM_ORBIT, ACHIEV_25_NUKED_FROM_ORBIT)); instance->DoCompleteAchievement(RAID_MODE(ACHIEV_10_NUKED_FROM_ORBIT, ACHIEV_25_NUKED_FROM_ORBIT));
case 2: case 2:
pInstance->DoCompleteAchievement(RAID_MODE(ACHIEV_10_ORBITAL_DEVASTATION, ACHIEV_25_ORBITAL_DEVASTATION)); instance->DoCompleteAchievement(RAID_MODE(ACHIEV_10_ORBITAL_DEVASTATION, ACHIEV_25_ORBITAL_DEVASTATION));
case 1: case 1:
pInstance->DoCompleteAchievement(RAID_MODE(ACHIEV_10_ORBITAL_BOMBARDMENT, ACHIEV_25_ORBITAL_BOMBARDMENT)); instance->DoCompleteAchievement(RAID_MODE(ACHIEV_10_ORBITAL_BOMBARDMENT, ACHIEV_25_ORBITAL_BOMBARDMENT));
} }
} }
} }
@@ -751,10 +746,10 @@ public:
{ {
boss_flame_leviathan_overload_deviceAI(Creature* pCreature) : PassiveAI(pCreature) boss_flame_leviathan_overload_deviceAI(Creature* pCreature) : PassiveAI(pCreature)
{ {
pInstance = pCreature->GetInstanceScript(); instance = pCreature->GetInstanceScript();
} }
InstanceScript *pInstance; InstanceScript *instance;
void DoAction(const int32 param) void DoAction(const int32 param)
{ {
@@ -922,24 +917,15 @@ public:
{ {
npc_colossusAI(Creature* pCreature) : ScriptedAI(pCreature) npc_colossusAI(Creature* pCreature) : ScriptedAI(pCreature)
{ {
pInstance = pCreature->GetInstanceScript(); instance = pCreature->GetInstanceScript();
} }
InstanceScript *pInstance; InstanceScript *instance;
void JustDied(Unit* /*Who*/) void JustDied(Unit* /*Who*/)
{ {
if (me->GetHomePosition().IsInDist(Center,50.f)) if (me->GetHomePosition().IsInDist(Center,50.f))
{ instance->SetData(TYPE_COLOSSUS,instance->GetData(TYPE_COLOSSUS)+1);
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
}
}
} }
void UpdateAI(const uint32 /*diff*/) void UpdateAI(const uint32 /*diff*/)
@@ -1197,14 +1183,14 @@ public:
bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction) bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
{ {
pPlayer->PlayerTalkClass->ClearMenus(); pPlayer->PlayerTalkClass->ClearMenus();
InstanceScript* pInstance = pCreature->GetInstanceScript(); InstanceScript* instance = pCreature->GetInstanceScript();
switch(uiAction) switch(uiAction)
{ {
case GOSSIP_ACTION_INFO_DEF+1: case GOSSIP_ACTION_INFO_DEF+1:
if (pPlayer) if (pPlayer)
{ {
pPlayer->PrepareGossipMenu(pCreature); pPlayer->PrepareGossipMenu(pCreature);
pInstance->instance->LoadGrid(364,-16); //make sure leviathan is loaded instance->instance->LoadGrid(364,-16); //make sure leviathan is loaded
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT,GOSSIP_ITEM_2,GOSSIP_SENDER_MAIN,GOSSIP_ACTION_INFO_DEF+2); pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT,GOSSIP_ITEM_2,GOSSIP_SENDER_MAIN,GOSSIP_ACTION_INFO_DEF+2);
@@ -1215,7 +1201,7 @@ public:
if (pPlayer) if (pPlayer)
pPlayer->CLOSE_GOSSIP_MENU(); pPlayer->CLOSE_GOSSIP_MENU();
if (Creature* pLeviathan = pInstance->instance->GetCreature(pInstance->GetData64(TYPE_LEVIATHAN))) if (Creature* pLeviathan = instance->instance->GetCreature(instance->GetData64(TYPE_LEVIATHAN)))
{ {
CAST_AI(boss_flame_leviathan::boss_flame_leviathanAI, (pLeviathan->AI()))->DoAction(0); //enable hard mode activating the 4 additional events spawning additional vehicles CAST_AI(boss_flame_leviathan::boss_flame_leviathanAI, (pLeviathan->AI()))->DoAction(0); //enable hard mode activating the 4 additional events spawning additional vehicles
pCreature->SetVisibility(VISIBILITY_OFF); pCreature->SetVisibility(VISIBILITY_OFF);
@@ -1236,8 +1222,8 @@ public:
bool OnGossipHello(Player* pPlayer, Creature* pCreature) bool OnGossipHello(Player* pPlayer, Creature* pCreature)
{ {
InstanceScript* pInstance = pCreature->GetInstanceScript(); InstanceScript* instance = pCreature->GetInstanceScript();
if (pInstance && pInstance->GetData(TYPE_LEVIATHAN) !=DONE && pPlayer) if (instance && instance->GetData(TYPE_LEVIATHAN) !=DONE && pPlayer)
{ {
pPlayer->PrepareGossipMenu(pCreature); pPlayer->PrepareGossipMenu(pCreature);
@@ -1256,10 +1242,10 @@ public:
{ {
npc_lorekeeperAI(Creature* pCreature) : ScriptedAI(pCreature) npc_lorekeeperAI(Creature* pCreature) : ScriptedAI(pCreature)
{ {
pInstance = pCreature->GetInstanceScript(); instance = pCreature->GetInstanceScript();
} }
InstanceScript* pInstance; InstanceScript* instance;
void DoAction(const int32 uiAction) void DoAction(const int32 uiAction)
{ {
@@ -1314,8 +1300,8 @@ public:
//} //}
//bool OnGossipHello(Player* pPlayer, Creature* pCreature) //bool OnGossipHello(Player* pPlayer, Creature* pCreature)
//{ //{
// InstanceScript* pInstance = pCreature->GetInstanceScript(); // InstanceScript* instance = pCreature->GetInstanceScript();
// if (pInstance && pInstance->GetData(TYPE_LEVIATHAN) !=DONE) // if (instance && instance->GetData(TYPE_LEVIATHAN) !=DONE)
// { // {
// pPlayer->PrepareGossipMenu(pCreature); // pPlayer->PrepareGossipMenu(pCreature);
// //
@@ -1335,22 +1321,22 @@ public:
void OnDestroyed(Player* /*pPlayer*/, GameObject* pGO, uint32 /*value*/) void OnDestroyed(Player* /*pPlayer*/, GameObject* pGO, uint32 /*value*/)
{ {
InstanceScript* pInstance = pGO->GetInstanceScript(); InstanceScript* instance = pGO->GetInstanceScript();
if (pGO->GetGOValue()->building.health == 0) if (pGO->GetGOValue()->building.health == 0)
{ {
switch(pGO->GetEntry()) switch(pGO->GetEntry())
{ {
case GO_TOWER_OF_STORMS: case GO_TOWER_OF_STORMS:
pInstance->ProcessEvent(pGO, EVENT_TOWER_OF_STORM_DESTROYED); instance->ProcessEvent(pGO, EVENT_TOWER_OF_STORM_DESTROYED);
break; break;
case GO_TOWER_OF_FLAMES: case GO_TOWER_OF_FLAMES:
pInstance->ProcessEvent(pGO, EVENT_TOWER_OF_FLAMES_DESTROYED); instance->ProcessEvent(pGO, EVENT_TOWER_OF_FLAMES_DESTROYED);
break; break;
case GO_TOWER_OF_FROST: case GO_TOWER_OF_FROST:
pInstance->ProcessEvent(pGO, EVENT_TOWER_OF_FROST_DESTROYED); instance->ProcessEvent(pGO, EVENT_TOWER_OF_FROST_DESTROYED);
break; break;
case GO_TOWER_OF_LIFE: case GO_TOWER_OF_LIFE:
pInstance->ProcessEvent(pGO, EVENT_TOWER_OF_LIFE_DESTROYED); instance->ProcessEvent(pGO, EVENT_TOWER_OF_LIFE_DESTROYED);
break; break;
} }
} }
@@ -74,6 +74,7 @@ public:
void Initialize() void Initialize()
{ {
SetBossNumber(MAX_ENCOUNTER);
uiIgnisGUID = 0; uiIgnisGUID = 0;
uiRazorscaleGUID = 0; uiRazorscaleGUID = 0;
uiXT002GUID = 0; uiXT002GUID = 0;
@@ -211,7 +212,6 @@ public:
switch(uiEventId) switch(uiEventId)
{ {
case EVENT_TOWER_OF_STORM_DESTROYED: case EVENT_TOWER_OF_STORM_DESTROYED:
//pGO->GetInstanceScript()->SetData(DATA_TOWER_STORMS,DESTROYED);
pFlameLeviathan->AI()->DoAction(1); pFlameLeviathan->AI()->DoAction(1);
break; break;
case EVENT_TOWER_OF_FROST_DESTROYED: case EVENT_TOWER_OF_FROST_DESTROYED:
@@ -226,21 +226,15 @@ public:
} }
} }
void SetData(uint32 type, uint32 data) bool SetBossState(uint32 type, EncounterState state)
{
switch(type)
{ {
/*case TYPE_IGNIS: if (!InstanceScript::SetBossState(type, state))
case TYPE_RAZORSCALE: return false;
case TYPE_XT002:
case TYPE_ASSEMBLY: switch (type)
case TYPE_AURIAYA: {
case TYPE_MIMIRON:
case TYPE_VEZAX:
case TYPE_YOGGSARON:
break;*/
case TYPE_LEVIATHAN: case TYPE_LEVIATHAN:
if (data == IN_PROGRESS) if (state == IN_PROGRESS)
{ {
for (uint8 uiI = 0; uiI < 7; ++uiI) for (uint8 uiI = 0; uiI < 7; ++uiI)
HandleGameObject(uiLeviathanDoor[uiI],false); HandleGameObject(uiLeviathanDoor[uiI],false);
@@ -251,26 +245,44 @@ public:
HandleGameObject(uiLeviathanDoor[uiI],true); HandleGameObject(uiLeviathanDoor[uiI],true);
} }
break; break;
case TYPE_IGNIS:
case TYPE_RAZORSCALE:
case TYPE_XT002:
case TYPE_ASSEMBLY:
case TYPE_AURIAYA:
case TYPE_MIMIRON:
case TYPE_VEZAX:
case TYPE_YOGGSARON:
break;
case TYPE_KOLOGARN: case TYPE_KOLOGARN:
if (data == DONE) if (state == DONE)
if (GameObject* pGO = instance->GetGameObject(uiKologarnChestGUID)) if (GameObject* pGO = instance->GetGameObject(uiKologarnChestGUID))
pGO->SetRespawnTime(pGO->GetRespawnDelay()); pGO->SetRespawnTime(pGO->GetRespawnDelay());
break; break;
case TYPE_HODIR: case TYPE_HODIR:
if (data == DONE) if (state == DONE)
if (GameObject* pGO = instance->GetGameObject(uiHodirChestGUID)) if (GameObject* pGO = instance->GetGameObject(uiHodirChestGUID))
pGO->SetRespawnTime(pGO->GetRespawnDelay()); pGO->SetRespawnTime(pGO->GetRespawnDelay());
break; break;
case TYPE_THORIM: case TYPE_THORIM:
if (data == DONE) if (state == DONE)
if (GameObject* pGO = instance->GetGameObject(uiThorimChestGUID)) if (GameObject* pGO = instance->GetGameObject(uiThorimChestGUID))
pGO->SetRespawnTime(pGO->GetRespawnDelay()); pGO->SetRespawnTime(pGO->GetRespawnDelay());
break; break;
case TYPE_FREYA: case TYPE_FREYA:
if (data == DONE) if (state == DONE)
if (GameObject* pGO = instance->GetGameObject(uiFreyaChestGUID)) if (GameObject* pGO = instance->GetGameObject(uiFreyaChestGUID))
pGO->SetRespawnTime(pGO->GetRespawnDelay()); pGO->SetRespawnTime(pGO->GetRespawnDelay());
break; break;
}
return true;
}
void SetData(uint32 type, uint32 data)
{
switch(type)
{
case TYPE_COLOSSUS: case TYPE_COLOSSUS:
uiEncounter[TYPE_COLOSSUS] = data; uiEncounter[TYPE_COLOSSUS] = data;
if (data == 2) if (data == 2)
@@ -279,14 +291,12 @@ public:
pBoss->AI()->DoAction(10); pBoss->AI()->DoAction(10);
if (GameObject* pGate = instance->GetGameObject(uiLeviathanGateGUID)) if (GameObject* pGate = instance->GetGameObject(uiLeviathanGateGUID))
pGate->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE); pGate->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
SaveToDB();
} }
break; break;
default: default:
break; break;
} }
if (data == DONE)
SaveToDB();
} }
uint64 GetData64(uint32 data) uint64 GetData64(uint32 data)
@@ -320,20 +330,6 @@ public:
{ {
switch(type) switch(type)
{ {
case TYPE_LEVIATHAN:
case TYPE_IGNIS:
case TYPE_RAZORSCALE:
case TYPE_XT002:
case TYPE_ASSEMBLY:
case TYPE_KOLOGARN:
case TYPE_AURIAYA:
case TYPE_MIMIRON:
case TYPE_HODIR:
case TYPE_THORIM:
case TYPE_FREYA:
case TYPE_VEZAX:
case TYPE_YOGGSARON:
case TYPE_ALGALON:
case TYPE_COLOSSUS: case TYPE_COLOSSUS:
return uiEncounter[type]; return uiEncounter[type];
} }
@@ -346,15 +342,10 @@ public:
OUT_SAVE_INST_DATA; OUT_SAVE_INST_DATA;
std::ostringstream saveStream; std::ostringstream saveStream;
saveStream << "U U " << uiEncounter[0] << " " << uiEncounter[1] << " " << uiEncounter[2] << " " << uiEncounter[3] saveStream << "U U " << GetBossSaveData() << " " << uiEncounter[14];
<< " " << uiEncounter[4] << " " << uiEncounter[5] << " " << uiEncounter[6] << " " << uiEncounter[7]
<< " " << uiEncounter[8] << " " << uiEncounter[9] << " " << uiEncounter[10] << " " << uiEncounter[11]
<< " " << uiEncounter[12] << " " << uiEncounter[13] << " " << uiEncounter[14];
m_strInstData = saveStream.str();
OUT_SAVE_INST_DATA_COMPLETE; OUT_SAVE_INST_DATA_COMPLETE;
return m_strInstData; return saveStream.str();
} }
void Load(const char* strIn) void Load(const char* strIn)
@@ -368,21 +359,21 @@ public:
OUT_LOAD_INST_DATA(strIn); OUT_LOAD_INST_DATA(strIn);
char dataHead1, dataHead2; char dataHead1, dataHead2;
uint32 data0, data1, data2, data3, data4, data5, data6, uint32 data14;
data7, data8, data9, data10, data11, data12, data13, data14;
std::istringstream loadStream(strIn); std::istringstream loadStream(strIn);
loadStream >> dataHead1 >> dataHead2 >> data0 >> data1 >> data2 >> data3 >> data4 >> data5 >> data6 loadStream >> dataHead1 >> dataHead2 >> data14;
>> data7 >> data8 >> data9 >> data10 >> data11 >> data12 >> data13 >> data14;
if (dataHead1 == 'U' && dataHead2 == 'U') if (dataHead1 == 'U' && dataHead2 == 'U')
{ {
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
{ {
loadStream >> uiEncounter[i]; uint32 tmpState;
loadStream >> tmpState;
if (uiEncounter[i] == IN_PROGRESS) loadStream >> uiEncounter[data14]; //colossus pre leviathan
uiEncounter[i] = NOT_STARTED; if (tmpState == IN_PROGRESS || tmpState > SPECIAL)
tmpState = NOT_STARTED;
SetBossState(i, EncounterState(tmpState));
} }
} }
OUT_LOAD_INST_DATA_COMPLETE; OUT_LOAD_INST_DATA_COMPLETE;
@@ -43,7 +43,6 @@ 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,
@@ -89,31 +89,24 @@ public:
bool OnGossipHello(Player *pPlayer, GameObject *pGO) bool OnGossipHello(Player *pPlayer, GameObject *pGO)
{ {
InstanceScript* pInstance = pGO->GetInstanceScript(); pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Expedition Base Camp", GOSSIP_SENDER_MAIN, BASE_CAMP);
if (!pInstance) if (InstanceScript* pInstance = pGO->GetInstanceScript())
return false;
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); if (pInstance->GetData(TYPE_COLOSSUS) == 2) //count of 2 collossus death
if (pInstance->GetBossState(TYPE_LEVIATHAN) == DONE || pPlayer->isGameMaster()) pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Formation Grounds", GOSSIP_SENDER_MAIN, GROUNDS);
if (pInstance->GetBossState(TYPE_LEVIATHAN) == DONE)
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Colossal Forge", GOSSIP_SENDER_MAIN, FORGE);
if (pInstance->GetBossState(TYPE_XT002) == DONE)
{ {
pPlayer->ADD_GOSSIP_ITEM(0, "Teleport to the Colossal Forge", GOSSIP_SENDER_MAIN, FORGE); pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Scrapyard", GOSSIP_SENDER_MAIN, SCRAPYARD);
if (pInstance->GetBossState(TYPE_XT002) == DONE || pPlayer->isGameMaster()) pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Antechamber of Ulduar", GOSSIP_SENDER_MAIN, ANTECHAMBER);
{
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);
}
}
} }
if (pInstance->GetBossState(TYPE_KOLOGARN) == DONE)
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Shattered Walkway", GOSSIP_SENDER_MAIN, WALKWAY);
if (pInstance->GetBossState(TYPE_AURIAYA) == DONE)
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Conservatory of Life", GOSSIP_SENDER_MAIN, CONSERVATORY);
} }
pPlayer->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, pGO->GetGUID()); pPlayer->SEND_GOSSIP_MENU(pGO->GetGOInfo()->GetGossipMenuId(), pGO->GetGUID());
return true; return true;
} }