Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
- index 26d5f41..f3d5719 100644
- --- a/src/server/game/Entities/Player/Player.cpp
- +++ b/src/server/game/Entities/Player/Player.cpp
- @@ -18162,13 +18162,47 @@ void Player::SendRaidInfo()
- {
- if (itr->second.perm)
- {
- - InstanceSave *save = itr->second.save;
- + /*InstanceSave *save = itr->second.save;
- data << uint32(save->GetMapId()); // map id
- data << uint32(save->GetDifficulty()); // difficulty
- data << uint64(save->GetInstanceId()); // instance id
- data << uint8(1); // expired = 0
- data << uint8(0); // extended = 1
- data << uint32(save->GetResetTime() - now); // reset time
- + ++counter;*/
- + InstanceSave *save = itr->second.save;
- + uint32 completedEncounterMask = sInstanceSaveMgr->GetCompletedEncounters(save->GetInstanceId());
- + MapEntry const* mapEntry = sMapStore.LookupEntry(save->GetMapId());
- + Difficulty difficulty = save->GetDifficulty();
- + bool isHeroic = false;
- + if (mapEntry && mapEntry->IsRaid())
- + {
- + switch (difficulty)
- + {
- + case RAID_DIFFICULTY_10MAN_HEROIC:
- + difficulty = RAID_DIFFICULTY_10MAN_NORMAL;
- + isHeroic = true;
- + break;
- + case RAID_DIFFICULTY_25MAN_HEROIC:
- + difficulty = RAID_DIFFICULTY_25MAN_NORMAL;
- + isHeroic = true;
- + break;
- + }
- + }
- + // NOTE: not sure about DUNGEON_DIFFICULTY_EPIC
- + //else
- + //{
- + // if (difficulty == DUNGEON_DIFFICULTY_EPIC)
- + // difficulty = DUNGEON_DIFFICULTY_NORMAL;
- + //}
- + data << uint32(save->GetMapId()); // map id
- + data << uint32(difficulty); // difficulty
- + data << uint32(isHeroic); // is heroic
- + data << uint64(save->GetInstanceId()); // instance id
- + data << uint8(1); // expired = 0
- + data << uint8(0); // extended = 1
- + data << uint32(save->GetResetTime() - now); // reset time
- + data << uint32(completedEncounterMask); // completed encounter mask
- ++counter;
- }
- }
- diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h
- index 5d162e5..cf0e79c 100644
- --- a/src/server/game/Globals/ObjectMgr.h
- +++ b/src/server/game/Globals/ObjectMgr.h
- @@ -854,8 +854,15 @@ class ObjectMgr
- DungeonEncounterList const* GetDungeonEncounterList(uint32 mapId, Difficulty difficulty)
- {
- UNORDERED_MAP<uint32, DungeonEncounterList>::const_iterator itr = mDungeonEncounters.find(MAKE_PAIR32(mapId, difficulty));
- - if (itr != mDungeonEncounters.end())
- + //hack for cataclysm dangeons
- + if (itr != mDungeonEncounters.end())
- return &itr->second;
- + else
- + {
- + UNORDERED_MAP<uint32, DungeonEncounterList>::const_iterator itr = mDungeonEncounters.find(MAKE_PAIR32(mapId, -1));
- + if (itr != mDungeonEncounters.end())
- + return &itr->second;
- + }
- return NULL;
- }
- diff --git a/src/server/game/Instances/InstanceSaveMgr.cpp b/src/server/game/Instances/InstanceSaveMgr.cpp
- index 86a33b0..846d89a 100644
- --- a/src/server/game/Instances/InstanceSaveMgr.cpp
- +++ b/src/server/game/Instances/InstanceSaveMgr.cpp
- @@ -265,6 +265,12 @@ void InstanceSaveManager::LoadInstances()
- sLog->outString(">> Loaded instances in %u ms", GetMSTimeDiffToNow(oldMSTime));
- sLog->outString();
- +
- + oldMSTime = getMSTime();
- + sInstanceSaveMgr->LoadCompletedEncounters();
- +
- + sLog->outString(">> Loaded instance completed encounters in %u ms", GetMSTimeDiffToNow(oldMSTime));
- + sLog->outString();
- }
- void InstanceSaveManager::LoadResetTimes()
- @@ -416,6 +422,30 @@ void InstanceSaveManager::LoadResetTimes()
- }
- }
- +void InstanceSaveManager::LoadCompletedEncounters()
- +{
- + m_completedEncounters.clear();
- +
- + QueryResult result = CharacterDatabase.Query("SELECT id, map, difficulty, completedEncounters FROM instance");
- + if (result)
- + {
- + do
- + {
- + Field* fields = result->Fetch();
- +
- + uint32 instanceId = fields[0].GetUInt32();
- + uint32 mapid = fields[1].GetUInt16();
- + uint32 difficulty = fields[2].GetUInt8();
- + uint32 completedEncounters = fields[3].GetUInt32();
- +
- + InstanceEncounter encounter(mapid, Difficulty(difficulty), completedEncounters);
- +
- + m_completedEncounters.insert(InstanceCompletedEncounters::value_type(instanceId, encounter));
- + }
- + while (result->NextRow());
- + }
- +}
- +
- void InstanceSaveManager::ScheduleReset(bool add, time_t time, InstResetEvent event)
- {
- if (!add)
- diff --git a/src/server/game/Instances/InstanceSaveMgr.h b/src/server/game/Instances/InstanceSaveMgr.h
- index d38f60e..3fba1fb 100644
- --- a/src/server/game/Instances/InstanceSaveMgr.h
- +++ b/src/server/game/Instances/InstanceSaveMgr.h
- @@ -144,6 +144,40 @@ class InstanceSaveManager
- };
- typedef std::multimap<time_t /*resetTime*/, InstResetEvent> ResetTimeQueue;
- + struct InstanceEncounter
- + {
- + uint16 mapid;
- + Difficulty difficulty:16;
- + uint32 completedEncounters;
- + InstanceEncounter() : mapid(0), difficulty(DUNGEON_DIFFICULTY_NORMAL), completedEncounters(0) {}
- + InstanceEncounter(uint32 m, Difficulty d, uint32 e) : mapid(m), difficulty(d), completedEncounters(e) {}
- + };
- + typedef std::map<uint32, InstanceEncounter> InstanceCompletedEncounters;
- +
- + void LoadCompletedEncounters();
- + uint32 GetCompletedEncounters(uint32 instanceId)
- + {
- + InstanceCompletedEncounters::const_iterator itr = m_completedEncounters.find(instanceId);
- + return itr != m_completedEncounters.end() ? itr->second.completedEncounters : 0;
- + }
- + void SetCompletedEncounters(uint32 instanceId, uint16 mapid, uint32 difficulty, uint32 encounters)
- + {
- + InstanceCompletedEncounters::iterator itr = m_completedEncounters.find(instanceId);
- + if (itr != m_completedEncounters.end())
- + itr->second.completedEncounters = encounters;
- + else
- + {
- + InstanceEncounter encounter(mapid, Difficulty(difficulty), encounters);
- + m_completedEncounters.insert(InstanceCompletedEncounters::value_type(instanceId, encounter));
- + }
- + }
- + void DeleteCompletedEncounters(uint32 instanceId)
- + {
- + InstanceCompletedEncounters::iterator itr = m_completedEncounters.find(instanceId);
- + if (itr != m_completedEncounters.end())
- + m_completedEncounters.erase(itr);
- + }
- +
- void LoadInstances();
- void LoadResetTimes();
- @@ -190,6 +224,7 @@ class InstanceSaveManager
- // fast lookup for reset times (always use existed functions for access/set)
- ResetTimeByMapDifficultyMap m_resetTimeByMapDifficulty;
- ResetTimeQueue m_resetTimeQueue;
- + InstanceCompletedEncounters m_completedEncounters;
- };
- #define sInstanceSaveMgr ACE_Singleton<InstanceSaveManager, ACE_Thread_Mutex>::instance()
- diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h
- index ad781dd..c138b07 100644
- --- a/src/server/game/Server/Protocol/Opcodes.h
- +++ b/src/server/game/Server/Protocol/Opcodes.h
- @@ -337,7 +337,7 @@ enum Opcodes
- SMSG_AI_REACTION = 0x031CC, // 4.0.6a 13623
- CMSG_SET_SELECTION = 0x06488, // 4.0.6a 13623
- CMSG_EQUIPMENT_SET_DELETE = 0x0AEA0, // 4.0.6a 13623
- - CMSG_INSTANCE_LOCK_WARNING_RESPONSE = 0x0E476, //
- + CMSG_INSTANCE_LOCK_WARNING_RESPONSE = 0x034C4, // 0x0E476, //
- CMSG_UNUSED2 = 0x10058, //
- CMSG_ATTACKSWING = 0x074A8, // 4.0.6a 13623
- CMSG_ATTACKSTOP = 0x062C4, // 4.0.6a 13623
- @@ -345,7 +345,7 @@ enum Opcodes
- SMSG_ATTACKSTOP = 0x06DCC, // 4.0.6a 13623
- SMSG_ATTACKSWING_NOTINRANGE = 0x036C4, // 4.0.6a 13623
- SMSG_ATTACKSWING_BADFACING = 0x067A8, // 4.0.6a 13623
- - SMSG_INSTANCE_LOCK_WARNING_QUERY = 0x0B574, //
- + SMSG_INSTANCE_LOCK_WARNING_QUERY = 0x07488, // 0x0B574, //
- SMSG_ATTACKSWING_DEADTARGET = 0x0A7C4, // 4.0.6a 13623
- SMSG_ATTACKSWING_CANT_ATTACK = 0x06188, // 4.0.6a 13623
- SMSG_ATTACKERSTATEUPDATE = 0x0BBC0, // 4.0.6a 13623
- @@ -718,7 +718,7 @@ enum Opcodes
- CMSG_MOVE_SPLINE_DONE = 0x069E8, // 4.0.6a 13623
- CMSG_MOVE_FALL_RESET = 0x100E6, //
- SMSG_INSTANCE_SAVE_CREATED = 0x0BBC4, // 4.0.6a 13623
- - SMSG_RAID_INSTANCE_INFO = 0x100E7, // 4.0.6a 13623
- + SMSG_RAID_INSTANCE_INFO = 0x0A18C, // 0x100E7, // 4.0.6a 13623
- CMSG_REQUEST_RAID_INFO = 0x03DE4, // 4.0.6a 13623
- CMSG_MOVE_TIME_SKIPPED = 0x0E180, // 4.0.6a 13623
- CMSG_MOVE_FEATHER_FALL_ACK = 0x06EA8, // 4.0.6a 13623
- @@ -835,7 +835,7 @@ enum Opcodes
- SMSG_CHARACTER_PROFILE = 0x1012D, //
- SMSG_CHARACTER_PROFILE_REALM_CONNECTED = 0x1012E, //
- SMSG_DEFENSE_MESSAGE = 0x065EC, // 4.0.6a 13623
- - SMSG_INSTANCE_DIFFICULTY = 0x0A55E, //
- + SMSG_INSTANCE_DIFFICULTY = 0x0FFE4, // 0x0A55E, //
- MSG_GM_RESETINSTANCELIMIT = 0x1012F, //
- SMSG_MOTD = 0x077C0, // 4.0.6a 13623
- SMSG_MOVE_SET_FLIGHT = 0x0C57F, //
- @@ -866,7 +866,7 @@ enum Opcodes
- CMSG_BATTLEMASTER_JOIN_ARENA = 0x00311, // 4.0.6a 13623
- MSG_MOVE_START_ASCEND = 0x0BDC0, // 4.0.6a 13623
- MSG_MOVE_STOP_ASCEND = 0x0FCA8, // 4.0.6a 13623
- - SMSG_ARENA_TEAM_STATS = 0x09F5F, //
- + SMSG_ARENA_TEAM_STATS = 0x0FA80, // 0x09F5F, //
- CMSG_LFG_JOIN = 0x063C0, // 4.0.6a 13623
- CMSG_LFG_LEAVE = 0x03688, // 4.0.6a 13623
- CMSG_SEARCH_LFG_JOIN = 0x061CC, // 4.0.6a 13623
Advertisement
Add Comment
Please, Sign In to add comment