aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2013-05-24 20:06:58 +0200
committerShauren <shauren.trinity@gmail.com>2013-05-24 20:06:58 +0200
commitb8d75db4f160c3044e9b9602962067b9d59ab78b (patch)
treef1d308f00ce5071ca81468c7ff55d3838425b207 /src
parentf6241a07a35f9814b8c4022c911a2c2f43f47280 (diff)
Scripts/Halls of Reflection: Fixed gauntlet event
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Player/Player.cpp12
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp2
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp214
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h2
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp234
5 files changed, 216 insertions, 248 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 55dcb21db4a..4b2c5e29d35 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -7691,7 +7691,7 @@ void Player::DuelComplete(DuelCompleteType type)
// Honor points after duel (the winner) - ImpConfig
if (uint32 amount = sWorld->getIntConfig(CONFIG_HONOR_AFTER_DUEL))
duel->opponent->RewardHonor(NULL, 1, amount);
-
+
break;
default:
break;
@@ -9671,6 +9671,16 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid)
bf->FillInitialWorldStates(data);
break;
}
+ case 4820:
+ if (instance && mapid == 668)
+ instance->FillInitialWorldStates(data);
+ else
+ {
+ data << uint32(4884) << uint32(0); // 9 WORLD_STATE_HOR_WAVES_ENABLED
+ data << uint32(4882) << uint32(0); // 10 WORLD_STATE_HOR_WAVE_COUNT
+ }
+ break;
+
// No break here, intended.
default:
data << uint32(0x914) << uint32(0x0); // 7
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index a8b17fbf097..9adcbdd9365 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -12454,7 +12454,7 @@ void Unit::setDeathState(DeathState s)
SetPower(getPowerType(), 0);
// players in instance don't have ZoneScript, but they have InstanceScript
- if (ZoneScript* zoneScript = GetZoneScript() ? GetZoneScript() : (ZoneScript*)GetInstanceScript())
+ if (ZoneScript* zoneScript = GetZoneScript() ? GetZoneScript() : GetInstanceScript())
zoneScript->OnUnitDeath(this);
}
else if (s == JUST_RESPAWNED)
diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
index c694508969b..a64f2cf5467 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
@@ -539,7 +539,6 @@ class npc_jaina_or_sylvanas_hor : public CreatureScript
{
instance->SetData(DATA_INTRO_EVENT, DONE);
instance->ProcessEvent(0, EVENT_SPAWN_WAVES);
- //instance->SetData(DATA_WAVE_COUNT, SPECIAL); // start first wave
}
// Loralen or Koreln disappearAndDie()
if (Creature* lichking = me->GetCreature(*me, lichkingGUID))
@@ -655,7 +654,22 @@ enum TrashEvents
struct npc_gauntlet_trash : public ScriptedAI
{
- npc_gauntlet_trash(Creature* creature) : ScriptedAI(creature) { }
+ npc_gauntlet_trash(Creature* creature) : ScriptedAI(creature),
+ instance(creature->GetInstanceScript())
+ {
+ }
+
+ void Reset()
+ {
+ me->CastSpell(me, SPELL_WELL_OF_SOULS, true);
+ events.Reset();
+ }
+
+ void EnterEvadeMode()
+ {
+ if (instance->GetData(DATA_WAVE_COUNT) != NOT_STARTED)
+ instance->SetData(DATA_WAVE_COUNT, NOT_STARTED);
+ }
void SetData(uint32 type, uint32 value)
{
@@ -674,6 +688,8 @@ struct npc_gauntlet_trash : public ScriptedAI
}
protected:
+ EventMap events;
+ InstanceScript* instance;
uint32 InternalWaveId;
};
@@ -682,28 +698,10 @@ class npc_ghostly_priest : public CreatureScript
public:
npc_ghostly_priest() : CreatureScript("npc_ghostly_priest") { }
- CreatureAI* GetAI(Creature* creature) const
- {
- return new npc_ghostly_priestAI(creature);
- }
-
struct npc_ghostly_priestAI : public npc_gauntlet_trash
{
npc_ghostly_priestAI(Creature* creature) : npc_gauntlet_trash(creature)
{
- instance = me->GetInstanceScript();
- me->CastSpell(me, SPELL_WELL_OF_SOULS, true);
- }
-
- InstanceScript* instance;
-
- EventMap events;
-
- void Reset()
- {
- events.Reset();
- if (instance->GetData(DATA_WAVE_COUNT) != NOT_STARTED)
- instance->SetData(DATA_WAVE_COUNT, NOT_STARTED);
}
void EnterCombat(Unit* /*who*/)
@@ -760,6 +758,10 @@ public:
}
};
+ CreatureAI* GetAI(Creature* creature) const
+ {
+ return new npc_ghostly_priestAI(creature);
+ }
};
class npc_phantom_mage : public CreatureScript
@@ -767,28 +769,10 @@ class npc_phantom_mage : public CreatureScript
public:
npc_phantom_mage() : CreatureScript("npc_phantom_mage") { }
- CreatureAI* GetAI(Creature* creature) const
- {
- return new npc_phantom_mageAI(creature);
- }
-
struct npc_phantom_mageAI : public npc_gauntlet_trash
{
npc_phantom_mageAI(Creature* creature) : npc_gauntlet_trash(creature)
{
- instance = me->GetInstanceScript();
- me->CastSpell(me, SPELL_WELL_OF_SOULS, true);
- }
-
- InstanceScript* instance;
-
- EventMap events;
-
- void Reset()
- {
- events.Reset();
- if (instance->GetData(DATA_WAVE_COUNT) != NOT_STARTED)
- instance->SetData(DATA_WAVE_COUNT, NOT_STARTED);
}
void EnterCombat(Unit* /*who*/)
@@ -840,6 +824,10 @@ public:
}
};
+ CreatureAI* GetAI(Creature* creature) const
+ {
+ return new npc_phantom_mageAI(creature);
+ }
};
class npc_phantom_hallucination : public CreatureScript
@@ -847,11 +835,6 @@ class npc_phantom_hallucination : public CreatureScript
public:
npc_phantom_hallucination() : CreatureScript("npc_phantom_hallucination") { }
- CreatureAI* GetAI(Creature* creature) const
- {
- return new npc_phantom_hallucinationAI(creature);
- }
-
struct npc_phantom_hallucinationAI : public npc_phantom_mage::npc_phantom_mageAI
{
npc_phantom_hallucinationAI(Creature* creature) : npc_phantom_mage::npc_phantom_mageAI(creature) {}
@@ -862,6 +845,10 @@ public:
}
};
+ CreatureAI* GetAI(Creature* creature) const
+ {
+ return new npc_phantom_hallucinationAI(creature);
+ }
};
class npc_shadowy_mercenary : public CreatureScript
@@ -869,28 +856,10 @@ class npc_shadowy_mercenary : public CreatureScript
public:
npc_shadowy_mercenary() : CreatureScript("npc_shadowy_mercenary") { }
- CreatureAI* GetAI(Creature* creature) const
- {
- return new npc_shadowy_mercenaryAI(creature);
- }
-
struct npc_shadowy_mercenaryAI : public npc_gauntlet_trash
{
npc_shadowy_mercenaryAI(Creature* creature) : npc_gauntlet_trash(creature)
{
- instance = me->GetInstanceScript();
- me->CastSpell(me, SPELL_WELL_OF_SOULS, true);
- }
-
- InstanceScript* instance;
-
- EventMap events;
-
- void Reset()
- {
- events.Reset();
- if (instance->GetData(DATA_WAVE_COUNT) != NOT_STARTED)
- instance->SetData(DATA_WAVE_COUNT, NOT_STARTED);
}
void EnterCombat(Unit* /*who*/)
@@ -936,6 +905,10 @@ public:
}
};
+ CreatureAI* GetAI(Creature* creature) const
+ {
+ return new npc_shadowy_mercenaryAI(creature);
+ }
};
class npc_spectral_footman : public CreatureScript
@@ -943,28 +916,10 @@ class npc_spectral_footman : public CreatureScript
public:
npc_spectral_footman() : CreatureScript("npc_spectral_footman") { }
- CreatureAI* GetAI(Creature* creature) const
- {
- return new npc_spectral_footmanAI(creature);
- }
-
struct npc_spectral_footmanAI : public npc_gauntlet_trash
{
npc_spectral_footmanAI(Creature* creature) : npc_gauntlet_trash(creature)
{
- instance = me->GetInstanceScript();
- me->CastSpell(me, SPELL_WELL_OF_SOULS, true);
- }
-
- InstanceScript* instance;
-
- EventMap events;
-
- void Reset()
- {
- events.Reset();
- if (instance->GetData(DATA_WAVE_COUNT) != NOT_STARTED)
- instance->SetData(DATA_WAVE_COUNT, NOT_STARTED);
}
void EnterCombat(Unit* /*who*/)
@@ -1004,6 +959,10 @@ public:
}
};
+ CreatureAI* GetAI(Creature* creature) const
+ {
+ return new npc_spectral_footmanAI(creature);
+ }
};
class npc_tortured_rifleman : public CreatureScript
@@ -1011,28 +970,10 @@ class npc_tortured_rifleman : public CreatureScript
public:
npc_tortured_rifleman() : CreatureScript("npc_tortured_rifleman") { }
- CreatureAI* GetAI(Creature* creature) const
- {
- return new npc_tortured_riflemanAI(creature);
- }
-
struct npc_tortured_riflemanAI : public npc_gauntlet_trash
{
npc_tortured_riflemanAI(Creature* creature) : npc_gauntlet_trash(creature)
{
- instance = me->GetInstanceScript();
- me->CastSpell(me, SPELL_WELL_OF_SOULS, true);
- }
-
- InstanceScript* instance;
-
- EventMap events;
-
- void Reset()
- {
- events.Reset();
- if (instance->GetData(DATA_WAVE_COUNT) != NOT_STARTED)
- instance->SetData(DATA_WAVE_COUNT, NOT_STARTED);
}
void EnterCombat(Unit* /*who*/)
@@ -1080,6 +1021,10 @@ public:
}
};
+ CreatureAI* GetAI(Creature* creature) const
+ {
+ return new npc_tortured_riflemanAI(creature);
+ }
};
@@ -1191,6 +1136,7 @@ public:
}
};
+
CreatureAI* GetAI(Creature* creature) const
{
return new npc_frostworn_generalAI(creature);
@@ -1247,6 +1193,7 @@ public:
DoMeleeAttackIfReady();
}
};
+
CreatureAI* GetAI(Creature* creature) const
{
return new npc_spiritual_reflectionAI(creature);
@@ -1255,58 +1202,57 @@ public:
class at_hor_intro_start : public AreaTriggerScript
{
- public:
- at_hor_intro_start() : AreaTriggerScript("at_hor_intro_start") {}
-
- bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/)
- {
- InstanceScript* instance = player->GetInstanceScript();
-
- if (player->isGameMaster())
- return true;
+public:
+ at_hor_intro_start() : AreaTriggerScript("at_hor_intro_start") {}
- if (instance->GetData(DATA_INTRO_EVENT) == NOT_STARTED)
- {
- instance->SetData(DATA_INTRO_EVENT, IN_PROGRESS);
- }
+ bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/)
+ {
+ InstanceScript* instance = player->GetInstanceScript();
+ if (player->isGameMaster())
return true;
+
+ if (instance->GetData(DATA_INTRO_EVENT) == NOT_STARTED)
+ {
+ instance->SetData(DATA_INTRO_EVENT, IN_PROGRESS);
}
+
+ return true;
+ }
};
class at_hor_waves_restarter : public AreaTriggerScript
{
- public:
- at_hor_waves_restarter() : AreaTriggerScript("at_hor_waves_restarter") {}
+public:
+ at_hor_waves_restarter() : AreaTriggerScript("at_hor_waves_restarter") {}
- bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/)
- {
- InstanceScript* instance = player->GetInstanceScript();
+ bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/)
+ {
+ InstanceScript* instance = player->GetInstanceScript();
- if (player->isGameMaster())
- return true;
+ if (player->isGameMaster())
+ return true;
+
+ if (instance->GetData(DATA_WAVE_COUNT))
+ return true;
- if (instance->GetData(DATA_WAVE_COUNT))
- return true;
+ if (instance->GetData(DATA_INTRO_EVENT) == DONE && instance->GetBossState(DATA_MARWYN_EVENT) != DONE)
+ {
+ instance->ProcessEvent(0, EVENT_SPAWN_WAVES);
- if (instance->GetData(DATA_INTRO_EVENT) == DONE && instance->GetBossState(DATA_MARWYN_EVENT) != DONE && instance->GetData(DATA_WAVE_COUNT) == NOT_STARTED)
+ if (Creature* falric = player->GetCreature(*player, instance->GetData64(DATA_FALRIC_EVENT)))
{
- instance->ProcessEvent(0, EVENT_SPAWN_WAVES);
- //instance->SetData(DATA_WAVE_COUNT, SPECIAL);
-
- if (Creature* falric = player->GetCreature(*player, instance->GetData64(DATA_FALRIC_EVENT)))
- {
- falric->CastSpell(falric, SPELL_BOSS_SPAWN_AURA, true);
- falric->SetVisible(true);
- }
- if (Creature* marwyn = player->GetCreature(*player, instance->GetData64(DATA_MARWYN_EVENT)))
- {
- marwyn->CastSpell(marwyn, SPELL_BOSS_SPAWN_AURA, true);
- marwyn->SetVisible(true);
- }
+ falric->CastSpell(falric, SPELL_BOSS_SPAWN_AURA, true);
+ falric->SetVisible(true);
+ }
+ if (Creature* marwyn = player->GetCreature(*player, instance->GetData64(DATA_MARWYN_EVENT)))
+ {
+ marwyn->CastSpell(marwyn, SPELL_BOSS_SPAWN_AURA, true);
+ marwyn->SetVisible(true);
}
- return true;
}
+ return true;
+ }
};
void AddSC_halls_of_reflection()
diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h
index 958ecc24aa1..4787a6b9fdc 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h
@@ -94,7 +94,7 @@ enum GameObjects
enum HorWorldStates
{
- WORLD_STATE_HOR = 4884,
+ WORLD_STATE_HOR_WAVES_ENABLED = 4884,
WORLD_STATE_HOR_WAVE_COUNT = 4882,
};
diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp
index 88a36926512..43d065d5f7d 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp
@@ -98,7 +98,7 @@ public:
void OnCreatureCreate(Creature* creature)
{
- Map::PlayerList const &players = instance->GetPlayers();
+ Map::PlayerList const& players = instance->GetPlayers();
if (!players.isEmpty())
if (Player* player = players.begin()->getSource())
_teamInInstance = player->GetTeam();
@@ -176,6 +176,12 @@ public:
}
}
+ void FillInitialWorldStates(WorldPacket& data)
+ {
+ data << uint32(WORLD_STATE_HOR_WAVES_ENABLED) << uint32(0);
+ data << uint32(WORLD_STATE_HOR_WAVE_COUNT) << uint32(0);
+ }
+
bool SetBossState(uint32 type, EncounterState state)
{
if (!InstanceScript::SetBossState(type, state))
@@ -185,7 +191,10 @@ public:
{
case DATA_FALRIC_EVENT:
if (state == DONE)
+ {
+ ++_waveCount;
events.ScheduleEvent(EVENT_NEXT_WAVE, 60000);
+ }
break;
case DATA_MARWYN_EVENT:
if (state == DONE)
@@ -207,9 +216,6 @@ public:
void SetData(uint32 type, uint32 data)
{
- if (_waveCount && data == NOT_STARTED)
- ProcessEvent(NULL, EVENT_DO_WIPE);
-
switch (type)
{
case DATA_INTRO_EVENT:
@@ -226,8 +232,8 @@ public:
_introEvent = data;
break;
case DATA_WAVE_COUNT:
- if (data == SPECIAL)
- events.ScheduleEvent(EVENT_NEXT_WAVE, 10000);
+ if (_waveCount && data == NOT_STARTED)
+ ProcessEvent(NULL, EVENT_DO_WIPE);
break;
case DATA_FROSWORN_EVENT:
if (data == DONE)
@@ -243,102 +249,6 @@ public:
SaveToDB();
}
- uint32 GetData(uint32 type) const
- {
- switch (type)
- {
- case DATA_WAVE_COUNT:
- return _waveCount;
- case DATA_TEAM_IN_INSTANCE:
- return _teamInInstance;
- case DATA_INTRO_EVENT:
- return _introEvent;
- case DATA_FROSWORN_EVENT:
- return _frostwornGeneral;
- default:
- break;
- }
-
- return 0;
- }
-
- uint64 GetData64(uint32 type) const
- {
- switch (type)
- {
- case DATA_FALRIC_EVENT:
- return _falricGUID;
- case DATA_MARWYN_EVENT:
- return _marwynGUID;
- case DATA_FROSWORN_EVENT:
- return _frostwornGeneralGUID;
- case DATA_FROSTWORN_DOOR:
- return _frostwornDoorGUID;
- case DATA_FROSTMOURNE:
- return _frostmourneGUID;
- default:
- break;
- }
-
- return 0;
- }
-
- std::string GetSaveData()
- {
- OUT_SAVE_INST_DATA;
-
- std::ostringstream saveStream;
- saveStream << "H R " << GetBossSaveData() << _introEvent << ' ' << _frostwornGeneral;
-
- OUT_SAVE_INST_DATA_COMPLETE;
- return saveStream.str();
- }
-
- void Load(const char* in)
- {
- if (!in)
- {
- OUT_LOAD_INST_DATA_FAIL;
- return;
- }
-
- OUT_LOAD_INST_DATA(in);
-
- char dataHead1, dataHead2;
-
- std::istringstream loadStream(in);
- loadStream >> dataHead1 >> dataHead2;
-
- if (dataHead1 == 'H' && dataHead2 == 'R')
- {
- for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
- {
- uint32 tmpState;
- loadStream >> tmpState;
- if (tmpState == IN_PROGRESS || tmpState > SPECIAL)
- tmpState = NOT_STARTED;
-
- SetBossState(i, EncounterState(tmpState));
- }
-
- uint32 temp = 0;
- loadStream >> temp;
- if (temp == DONE)
- SetData(DATA_INTRO_EVENT, DONE);
- else
- SetData(DATA_INTRO_EVENT, NOT_STARTED);
-
- loadStream >> temp;
- if (temp == DONE)
- SetData(DATA_FROSWORN_EVENT, DONE);
- else
- SetData(DATA_FROSWORN_EVENT, NOT_STARTED);
- }
- else
- OUT_LOAD_INST_DATA_FAIL;
-
- OUT_LOAD_INST_DATA_COMPLETE;
- }
// wave scheduling,checked when wave npcs die
void OnUnitDeath(Unit* unit)
@@ -367,7 +277,10 @@ public:
// because the current npc returns isAlive when OnUnitDeath happens
// we check if the number of dead npcs is equal to the list-1
if (deadNpcs == waveGuidList[internalWaveId].size() - 1)
+ {
+ ++_waveCount;
events.ScheduleEvent(EVENT_NEXT_WAVE, 10000);
+ }
break;
}
}
@@ -383,7 +296,6 @@ public:
switch (events.ExecuteEvent())
{
case EVENT_NEXT_WAVE:
- ++_waveCount;
ProcessEvent(NULL, EVENT_ADD_WAVE);
break;
}
@@ -395,7 +307,8 @@ public:
{
// spawning all wave npcs at once
case EVENT_SPAWN_WAVES:
- DoUpdateWorldState(WORLD_STATE_HOR, 1);
+ _waveCount = 1;
+ DoUpdateWorldState(WORLD_STATE_HOR_WAVES_ENABLED, 1);
DoUpdateWorldState(WORLD_STATE_HOR_WAVE_COUNT, _waveCount);
{
std::list<uint32> possibilityList, tempList;
@@ -434,10 +347,10 @@ public:
}
}
}
- SetData(DATA_WAVE_COUNT, SPECIAL);
+ events.ScheduleEvent(EVENT_NEXT_WAVE, 10000);
break;
case EVENT_ADD_WAVE:
- DoUpdateWorldState(WORLD_STATE_HOR, 1);
+ DoUpdateWorldState(WORLD_STATE_HOR_WAVES_ENABLED, 1);
DoUpdateWorldState(WORLD_STATE_HOR_WAVE_COUNT, _waveCount);
HandleGameObject(_entranceDoorGUID, false);
@@ -459,19 +372,21 @@ public:
uint32 bossIndex = (_waveCount / 5) - 1;
if (GetBossState(DATA_FALRIC_EVENT + bossIndex) != DONE)
{
- if (Creature* boss = instance->GetCreature(bossIndex ? _marwynGUID :_falricGUID))
+ if (Creature* boss = instance->GetCreature(bossIndex ? _marwynGUID : _falricGUID))
if (boss->AI())
boss->AI()->DoAction(ACTION_ENTER_COMBAT);
}
else if (_waveCount != 10)
+ {
+ ++_waveCount;
events.ScheduleEvent(EVENT_NEXT_WAVE, 10000);
+ }
}
break;
case EVENT_DO_WIPE:
- //SetData(DATA_WAVE_COUNT, NOT_STARTED);
_waveCount = 0;
events.Reset();
- DoUpdateWorldState(WORLD_STATE_HOR, 1);
+ DoUpdateWorldState(WORLD_STATE_HOR_WAVES_ENABLED, 1);
DoUpdateWorldState(WORLD_STATE_HOR_WAVE_COUNT, _waveCount);
HandleGameObject(_entranceDoorGUID, true);
@@ -481,11 +396,11 @@ public:
marwyn->SetVisible(false);
//despawn wave npcs
- for (uint8 i = 0; i < 8; i++)
+ for (uint8 i = 0; i < 8; ++i)
{
for (std::set<uint64>::const_iterator itr = waveGuidList[i].begin(); itr != waveGuidList[i].end(); ++itr)
if (Creature* creature = instance->GetCreature(*itr))
- creature->DespawnOrUnsummon();
+ creature->DespawnOrUnsummon(1);
waveGuidList[i].clear();
}
@@ -493,6 +408,103 @@ public:
}
}
+ uint32 GetData(uint32 type) const
+ {
+ switch (type)
+ {
+ case DATA_WAVE_COUNT:
+ return _waveCount;
+ case DATA_TEAM_IN_INSTANCE:
+ return _teamInInstance;
+ case DATA_INTRO_EVENT:
+ return _introEvent;
+ case DATA_FROSWORN_EVENT:
+ return _frostwornGeneral;
+ default:
+ break;
+ }
+
+ return 0;
+ }
+
+ uint64 GetData64(uint32 type) const
+ {
+ switch (type)
+ {
+ case DATA_FALRIC_EVENT:
+ return _falricGUID;
+ case DATA_MARWYN_EVENT:
+ return _marwynGUID;
+ case DATA_FROSWORN_EVENT:
+ return _frostwornGeneralGUID;
+ case DATA_FROSTWORN_DOOR:
+ return _frostwornDoorGUID;
+ case DATA_FROSTMOURNE:
+ return _frostmourneGUID;
+ default:
+ break;
+ }
+
+ return 0;
+ }
+
+ std::string GetSaveData()
+ {
+ OUT_SAVE_INST_DATA;
+
+ std::ostringstream saveStream;
+ saveStream << "H R " << GetBossSaveData() << _introEvent << ' ' << _frostwornGeneral;
+
+ OUT_SAVE_INST_DATA_COMPLETE;
+ return saveStream.str();
+ }
+
+ void Load(char const* in)
+ {
+ if (!in)
+ {
+ OUT_LOAD_INST_DATA_FAIL;
+ return;
+ }
+
+ OUT_LOAD_INST_DATA(in);
+
+ char dataHead1, dataHead2;
+
+ std::istringstream loadStream(in);
+ loadStream >> dataHead1 >> dataHead2;
+
+ if (dataHead1 == 'H' && dataHead2 == 'R')
+ {
+ for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
+ {
+ uint32 tmpState;
+ loadStream >> tmpState;
+ if (tmpState == IN_PROGRESS || tmpState > SPECIAL)
+ tmpState = NOT_STARTED;
+
+ SetBossState(i, EncounterState(tmpState));
+ }
+
+ uint32 temp = 0;
+ loadStream >> temp;
+ if (temp == DONE)
+ SetData(DATA_INTRO_EVENT, DONE);
+ else
+ SetData(DATA_INTRO_EVENT, NOT_STARTED);
+
+ loadStream >> temp;
+ if (temp == DONE)
+ SetData(DATA_FROSWORN_EVENT, DONE);
+ else
+ SetData(DATA_FROSWORN_EVENT, NOT_STARTED);
+ }
+ else
+ OUT_LOAD_INST_DATA_FAIL;
+
+ OUT_LOAD_INST_DATA_COMPLETE;
+ }
+
private:
uint64 _falricGUID;
uint64 _marwynGUID;