From 2af3c01a236578e2ab5aa15f10076ce6ce07a113 Mon Sep 17 00:00:00 2001 From: arrai Date: Wed, 29 Oct 2008 21:44:55 +0100 Subject: [PATCH] Implemented achievement inspection --- src/game/AchievementMgr.cpp | 6 ++++-- src/game/MiscHandler.cpp | 16 ++++++++++++++++ src/game/Opcodes.cpp | 2 +- src/game/WorldSession.h | 1 + 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/game/AchievementMgr.cpp b/src/game/AchievementMgr.cpp index 998a10cb6..e4a82c638 100644 --- a/src/game/AchievementMgr.cpp +++ b/src/game/AchievementMgr.cpp @@ -220,7 +220,7 @@ void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement) void AchievementMgr::SendAllAchievementData() { // since we don't know the exact size of the packed GUIDs this is just an approximation - WorldPacket data(SMSG_ALL_ACHIEVEMENT_DATA,4*2+m_completedAchievements.size()*4*2+m_completedAchievements.size()*7*4); + WorldPacket data(SMSG_ALL_ACHIEVEMENT_DATA, 4*2+m_completedAchievements.size()*4*2+m_completedAchievements.size()*7*4); BuildAllDataPacket(&data); GetPlayer()->GetSession()->SendPacket(&data); } @@ -228,7 +228,7 @@ void AchievementMgr::SendAllAchievementData() void AchievementMgr::SendRespondInspectAchievements(Player* player) { // since we don't know the exact size of the packed GUIDs this is just an approximation - WorldPacket data(SMSG_ALL_ACHIEVEMENT_DATA,4+4*2+m_completedAchievements.size()*4*2+m_completedAchievements.size()*7*4); + WorldPacket data(SMSG_RESPOND_INSPECT_ACHIEVEMENTS, 4+4*2+m_completedAchievements.size()*4*2+m_completedAchievements.size()*7*4); data.append(GetPlayer()->GetPackGUID()); BuildAllDataPacket(&data); player->GetSession()->SendPacket(&data); @@ -245,6 +245,7 @@ void AchievementMgr::BuildAllDataPacket(WorldPacket *data) *data << uint32(secsToTimeBitFields(iter->second)); } *data << int32(-1); + for(CriteriaProgressMap::iterator iter = m_criteriaProgress.begin(); iter!=m_criteriaProgress.end(); ++iter) { *data << uint32(iter->first); @@ -255,6 +256,7 @@ void AchievementMgr::BuildAllDataPacket(WorldPacket *data) *data << uint32(0); *data << uint32(0); } + *data << int32(-1); } diff --git a/src/game/MiscHandler.cpp b/src/game/MiscHandler.cpp index 68b5dce0b..24c2e37f1 100644 --- a/src/game/MiscHandler.cpp +++ b/src/game/MiscHandler.cpp @@ -40,6 +40,7 @@ #include "SpellAuras.h" #include "Pet.h" #include "SocialMgr.h" +#include "Tools.h" void WorldSession::HandleRepopRequestOpcode( WorldPacket & /*recv_data*/ ) { @@ -1850,3 +1851,18 @@ void WorldSession::HandleSpellClick( WorldPacket & recv_data ) _player->SetUInt64Value(UNIT_FIELD_CHARM, guid); _player->SetUInt64Value(PLAYER_FARSIGHT, guid); } + +void WorldSession::HandleInspectAchievements( WorldPacket & recv_data ) +{ + sLog.outString("WorldSession::HandleInspectAchievements"); + uint64 guid; + if(!readGUID(recv_data, guid)) + return; + + Player *player = objmgr.GetPlayer(guid); + if(!player) + return; + + player->GetAchievementMgr().SendRespondInspectAchievements(_player); +} + diff --git a/src/game/Opcodes.cpp b/src/game/Opcodes.cpp index 7ccccdeeb..ce4c9d159 100644 --- a/src/game/Opcodes.cpp +++ b/src/game/Opcodes.cpp @@ -1157,7 +1157,7 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] = /*0x468*/ { "SMSG_ACHIEVEMENT_EARNED", STATUS_NEVER, &WorldSession::Handle_ServerSide }, /*0x469*/ { "SMSG_DYNAMIC_DROP_ROLL_RESULT", STATUS_NEVER, &WorldSession::Handle_ServerSide }, /*0x46A*/ { "SMSG_CRITERIA_UPDATE", STATUS_NEVER, &WorldSession::Handle_ServerSide }, - /*0x46B*/ { "CMSG_QUERY_INSPECT_ACHIEVEMENTS", STATUS_NEVER, &WorldSession::Handle_NULL }, + /*0x46B*/ { "CMSG_QUERY_INSPECT_ACHIEVEMENTS", STATUS_LOGGEDIN, &WorldSession::HandleInspectAchievements }, /*0x46C*/ { "SMSG_RESPOND_INSPECT_ACHIEVEMENTS",STATUS_NEVER, &WorldSession::Handle_ServerSide }, /*0x46D*/ { "CMSG_DISMISS_CONTROLLED_VEHICLE", STATUS_NEVER, &WorldSession::Handle_NULL }, /*0x46E*/ { "CMSG_COMPLETE_ACHIEVEMENT_CHEAT", STATUS_NEVER, &WorldSession::Handle_NULL }, diff --git a/src/game/WorldSession.h b/src/game/WorldSession.h index 58549d797..e63f87b58 100644 --- a/src/game/WorldSession.h +++ b/src/game/WorldSession.h @@ -654,6 +654,7 @@ class MANGOS_DLL_SPEC WorldSession void HandleSpellClick(WorldPacket& recv_data); void HandleAlterAppearance(WorldPacket& recv_data); void HandleRemoveGlyph(WorldPacket& recv_data); + void HandleInspectAchievements(WorldPacket& recv_data); private: // private trade methods void moveItems(Item* myItems[], Item* hisItems[]);