Core/PacketIO: Added CMSG_REQUEST_WORLD_QUEST_UPDATE / SMSG_WORLD_QUEST_UPDATE opcodes

This commit is contained in:
Vincent-Michael
2016-08-27 17:11:27 +02:00
parent b0c8a9411e
commit 5577282b5e
6 changed files with 63 additions and 1 deletions

View File

@@ -435,7 +435,7 @@ void WorldSession::HandleQuestLogRemoveQuest(WorldPackets::Quest::QuestLogRemove
}
_player->TakeQuestSourceItem(questId, true); // remove quest src item from player
_player->AbandonQuest(questId); // remove all quest items player received before abandoning quest. Note, this does not remove normal drop items that happen to be quest requirements.
_player->AbandonQuest(questId); // remove all quest items player received before abandoning quest. Note, this does not remove normal drop items that happen to be quest requirements.
_player->RemoveActiveQuest(questId);
_player->RemoveCriteriaTimer(CRITERIA_TIMED_TYPE_QUEST, questId);
@@ -669,3 +669,13 @@ void WorldSession::HandleQuestgiverStatusMultipleQuery(WorldPackets::Quest::Ques
SendPacket(response.Write());
}
void WorldSession::HandleRequestWorldQuestUpdate(WorldPackets::Quest::RequestWorldQuestUpdate& /*packet*/)
{
WorldPackets::Quest::WorldQuestUpdate response;
/// @todo: 7.x Has to be implemented
//response.WorldQuestUpdates.push_back(WorldPackets::Quest::WorldQuestUpdateInfo(lastUpdate, questID, timer, variableID, value));
SendPacket(response.Write());
}

View File

@@ -576,3 +576,19 @@ WorldPacket const* WorldPackets::Quest::DailyQuestsReset::Write()
return &_worldPacket;
}
WorldPacket const* WorldPackets::Quest::WorldQuestUpdate::Write()
{
_worldPacket << uint32(WorldQuestUpdates.size());
for (WorldQuestUpdateInfo const& worldQuestUpdate : WorldQuestUpdates)
{
_worldPacket << int32(worldQuestUpdate.LastUpdate);
_worldPacket << uint32(worldQuestUpdate.QuestID);
_worldPacket << uint32(worldQuestUpdate.Timer);
_worldPacket << int32(worldQuestUpdate.VariableID);
_worldPacket << int32(worldQuestUpdate.Value);
}
return &_worldPacket;
}

View File

@@ -594,6 +594,36 @@ namespace WorldPackets
int32 Count = 0;
};
class RequestWorldQuestUpdate final : public ClientPacket
{
public:
RequestWorldQuestUpdate(WorldPacket&& packet) : ClientPacket(CMSG_REQUEST_WORLD_QUEST_UPDATE, std::move(packet)) { }
void Read() override { }
};
struct WorldQuestUpdateInfo
{
WorldQuestUpdateInfo(int32 lastUpdate, uint32 questID, uint32 timer, int32 variableID, int32 value) :
LastUpdate(lastUpdate), QuestID(questID), Timer(timer), VariableID(variableID), Value(value) { }
int32 LastUpdate;
uint32 QuestID;
uint32 Timer;
// WorldState
int32 VariableID;
int32 Value;
};
class WorldQuestUpdate final : public ServerPacket
{
public:
WorldQuestUpdate() : ServerPacket(SMSG_WORLD_QUEST_UPDATE, 100) { }
WorldPacket const* Write() override;
std::vector<WorldQuestUpdateInfo> WorldQuestUpdates;
};
}
}

View File

@@ -677,6 +677,7 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_REQUEST_VEHICLE_NEXT_SEAT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestVehicleNextSeat);
DEFINE_HANDLER(CMSG_REQUEST_VEHICLE_PREV_SEAT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestVehiclePrevSeat);
DEFINE_HANDLER(CMSG_REQUEST_VEHICLE_SWITCH_SEAT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestVehicleSwitchSeat);
DEFINE_HANDLER(CMSG_REQUEST_WORLD_QUEST_UPDATE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestWorldQuestUpdate);
DEFINE_HANDLER(CMSG_REQUEST_WOW_TOKEN_MARKET_PRICE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestWowTokenMarketPrice);
DEFINE_HANDLER(CMSG_RESET_CHALLENGE_MODE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_RESET_INSTANCES, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleResetInstancesOpcode);
@@ -1766,6 +1767,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_WEEKLY_SPELL_USAGE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_WHO, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_WHO_IS, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_WORLD_QUEST_UPDATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_WORLD_SERVER_INFO, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_WORLD_TEXT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_WOW_TOKEN_AUCTION_SOLD, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);

View File

@@ -592,6 +592,7 @@ enum OpcodeClient : uint32
CMSG_REQUEST_VEHICLE_NEXT_SEAT = 0x321C,
CMSG_REQUEST_VEHICLE_PREV_SEAT = 0x321B,
CMSG_REQUEST_VEHICLE_SWITCH_SEAT = 0x321D,
CMSG_REQUEST_WORLD_QUEST_UPDATE = 0x3323,
CMSG_REQUEST_WOW_TOKEN_MARKET_PRICE = 0x36EC,
CMSG_RESET_CHALLENGE_MODE = 0x31EB,
CMSG_RESET_INSTANCES = 0x366D,
@@ -1674,6 +1675,7 @@ enum OpcodeServer : uint32
SMSG_WEEKLY_SPELL_USAGE = 0x2C18,
SMSG_WHO = 0x2BAE,
SMSG_WHO_IS = 0x26CB,
SMSG_WORLD_QUEST_UPDATE = 0x283C,
SMSG_WORLD_SERVER_INFO = 0x25C0,
SMSG_WORLD_TEXT = 0x2824,
SMSG_WOW_TOKEN_AUCTION_SOLD = 0x2813,

View File

@@ -558,6 +558,7 @@ namespace WorldPackets
class QuestLogRemoveQuest;
class QuestPushResult;
class PushQuestToParty;
class RequestWorldQuestUpdate;
}
namespace RaF
@@ -1464,6 +1465,7 @@ class TC_GAME_API WorldSession
void HandleQuestgiverQuestAutoLaunch(WorldPacket& recvPacket);
void HandlePushQuestToParty(WorldPackets::Quest::PushQuestToParty& packet);
void HandleQuestPushResult(WorldPackets::Quest::QuestPushResult& packet);
void HandleRequestWorldQuestUpdate(WorldPackets::Quest::RequestWorldQuestUpdate& packet);
void HandleChatMessageOpcode(WorldPackets::Chat::ChatMessage& chatMessage);
void HandleChatMessageWhisperOpcode(WorldPackets::Chat::ChatMessageWhisper& chatMessageWhisper);