Core/Scripts/Ulduar: fix Ulduar Teleporter
- fix ulduar save system - adjust leviathan to use correct savesystem --HG-- branch : trunk
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user