diff options
-rw-r--r-- | src/server/game/Handlers/QuestHandler.cpp | 13 | ||||
-rw-r--r-- | src/server/game/Miscellaneous/SharedDefines.h | 83 | ||||
-rw-r--r-- | src/server/game/Server/Packets/NPCPackets.cpp | 10 | ||||
-rw-r--r-- | src/server/game/Server/Packets/NPCPackets.h | 11 | ||||
-rw-r--r-- | src/server/game/Server/Packets/QuestPackets.cpp | 5 | ||||
-rw-r--r-- | src/server/game/Server/Packets/QuestPackets.h | 10 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 12 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.h | 4 | ||||
-rw-r--r-- | src/server/game/Server/WorldSession.h | 9 |
9 files changed, 96 insertions, 61 deletions
diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp index a13145394e5..56126fb9250 100644 --- a/src/server/game/Handlers/QuestHandler.cpp +++ b/src/server/game/Handlers/QuestHandler.cpp @@ -373,16 +373,13 @@ void WorldSession::HandleQuestLogSwapQuest(WorldPacket& recvData) GetPlayer()->SwapQuestSlot(slot1, slot2); } -void WorldSession::HandleQuestLogRemoveQuest(WorldPacket& recvData) +void WorldSession::HandleQuestLogRemoveQuest(WorldPackets::Quest::QuestLogRemoveQuest& packet) { - uint8 slot; - recvData >> slot; + TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTLOG_REMOVE_QUEST slot = %u", packet.Entry); - TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTLOG_REMOVE_QUEST slot = %u", slot); - - if (slot < MAX_QUEST_LOG_SIZE) + if (packet.Entry < MAX_QUEST_LOG_SIZE) { - if (uint32 questId = _player->GetQuestSlotQuestId(slot)) + if (uint32 questId = _player->GetQuestSlotQuestId(packet.Entry)) { if (!_player->TakeQuestSourceItem(questId, true)) return; // can't un-equip some items, reject quest cancel @@ -417,7 +414,7 @@ void WorldSession::HandleQuestLogRemoveQuest(WorldPacket& recvData) } } - _player->SetQuestSlot(slot, 0); + _player->SetQuestSlot(packet.Entry, 0); _player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_QUEST_ABANDONED, 1); } diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index 851cbbc27a8..5142eebbaa2 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -4461,47 +4461,48 @@ enum ResponseCodes CHAR_CREATE_CHARACTER_GOLD_LIMIT = 68, CHAR_CREATE_FORCE_LOGIN = 69, CHAR_CREATE_TRIAL = 70, - - CHAR_DELETE_IN_PROGRESS = 71, - CHAR_DELETE_SUCCESS = 72, - CHAR_DELETE_FAILED = 73, - CHAR_DELETE_FAILED_LOCKED_FOR_TRANSFER = 74, - CHAR_DELETE_FAILED_GUILD_LEADER = 75, - CHAR_DELETE_FAILED_ARENA_CAPTAIN = 76, - CHAR_DELETE_FAILED_HAS_HEIRLOOM_OR_MAIL = 77, - - CHAR_LOGIN_IN_PROGRESS = 78, - CHAR_LOGIN_SUCCESS = 79, - CHAR_LOGIN_NO_WORLD = 80, - CHAR_LOGIN_DUPLICATE_CHARACTER = 81, - CHAR_LOGIN_NO_INSTANCES = 82, - CHAR_LOGIN_FAILED = 83, - CHAR_LOGIN_DISABLED = 84, - CHAR_LOGIN_NO_CHARACTER = 85, - CHAR_LOGIN_LOCKED_FOR_TRANSFER = 86, - CHAR_LOGIN_LOCKED_BY_BILLING = 87, - CHAR_LOGIN_LOCKED_BY_MOBILE_AH = 88, - CHAR_LOGIN_TEMPORARY_GM_LOCK = 89, - CHAR_LOGIN_LOCKED_BY_CHARACTER_UPGRADE = 90, - CHAR_LOGIN_LOCKED_BY_REVOKED_CHARACTER_UPGRADE = 91, - - CHAR_NAME_SUCCESS = 92, - CHAR_NAME_FAILURE = 93, - CHAR_NAME_NO_NAME = 94, - CHAR_NAME_TOO_SHORT = 95, - CHAR_NAME_TOO_LONG = 96, - CHAR_NAME_INVALID_CHARACTER = 97, - CHAR_NAME_MIXED_LANGUAGES = 98, - CHAR_NAME_PROFANE = 99, - CHAR_NAME_RESERVED = 100, - CHAR_NAME_INVALID_APOSTROPHE = 101, - CHAR_NAME_MULTIPLE_APOSTROPHES = 102, - CHAR_NAME_THREE_CONSECUTIVE = 103, - CHAR_NAME_INVALID_SPACE = 104, - CHAR_NAME_CONSECUTIVE_SPACES = 105, - CHAR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS = 106, - CHAR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END = 107, - CHAR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME = 108 + CHAR_CREATE_VETERAN = 71, + + CHAR_DELETE_IN_PROGRESS = 72, + CHAR_DELETE_SUCCESS = 73, + CHAR_DELETE_FAILED = 74, + CHAR_DELETE_FAILED_LOCKED_FOR_TRANSFER = 75, + CHAR_DELETE_FAILED_GUILD_LEADER = 76, + CHAR_DELETE_FAILED_ARENA_CAPTAIN = 77, + CHAR_DELETE_FAILED_HAS_HEIRLOOM_OR_MAIL = 78, + + CHAR_LOGIN_IN_PROGRESS = 79, + CHAR_LOGIN_SUCCESS = 80, + CHAR_LOGIN_NO_WORLD = 81, + CHAR_LOGIN_DUPLICATE_CHARACTER = 82, + CHAR_LOGIN_NO_INSTANCES = 83, + CHAR_LOGIN_FAILED = 84, + CHAR_LOGIN_DISABLED = 85, + CHAR_LOGIN_NO_CHARACTER = 86, + CHAR_LOGIN_LOCKED_FOR_TRANSFER = 87, + CHAR_LOGIN_LOCKED_BY_BILLING = 88, + CHAR_LOGIN_LOCKED_BY_MOBILE_AH = 89, + CHAR_LOGIN_TEMPORARY_GM_LOCK = 90, + CHAR_LOGIN_LOCKED_BY_CHARACTER_UPGRADE = 91, + CHAR_LOGIN_LOCKED_BY_REVOKED_CHARACTER_UPGRADE = 92, + + CHAR_NAME_SUCCESS = 93, + CHAR_NAME_FAILURE = 94, + CHAR_NAME_NO_NAME = 95, + CHAR_NAME_TOO_SHORT = 96, + CHAR_NAME_TOO_LONG = 97, + CHAR_NAME_INVALID_CHARACTER = 98, + CHAR_NAME_MIXED_LANGUAGES = 99, + CHAR_NAME_PROFANE = 100, + CHAR_NAME_RESERVED = 101, + CHAR_NAME_INVALID_APOSTROPHE = 102, + CHAR_NAME_MULTIPLE_APOSTROPHES = 103, + CHAR_NAME_THREE_CONSECUTIVE = 104, + CHAR_NAME_INVALID_SPACE = 105, + CHAR_NAME_CONSECUTIVE_SPACES = 106, + CHAR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS = 107, + CHAR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END = 108, + CHAR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME = 109 }; enum CharacterUndeleteResult diff --git a/src/server/game/Server/Packets/NPCPackets.cpp b/src/server/game/Server/Packets/NPCPackets.cpp index 7bf96b03bab..33e33bece55 100644 --- a/src/server/game/Server/Packets/NPCPackets.cpp +++ b/src/server/game/Server/Packets/NPCPackets.cpp @@ -134,9 +134,19 @@ void WorldPackets::NPC::GossipSelectOption::Read() uint32 length = _worldPacket.ReadBits(8); PromotionCode = _worldPacket.ReadString(length); } + WorldPacket const* WorldPackets::NPC::PlayerTabardVendorActivate::Write() { _worldPacket << Vendor; return &_worldPacket; } + +WorldPacket const* WorldPackets::NPC::SuppressNPCGreetings::Write() +{ + _worldPacket << UnitGUID; + _worldPacket.WriteBit(SuppressNPCGreeting); + _worldPacket.FlushBits(); + + return &_worldPacket; +} diff --git a/src/server/game/Server/Packets/NPCPackets.h b/src/server/game/Server/Packets/NPCPackets.h index e02fd21dd39..b4c7a377187 100644 --- a/src/server/game/Server/Packets/NPCPackets.h +++ b/src/server/game/Server/Packets/NPCPackets.h @@ -168,6 +168,17 @@ namespace WorldPackets ObjectGuid Vendor; }; + + class SuppressNPCGreetings final : public ServerPacket + { + public: + SuppressNPCGreetings() : ServerPacket(SMSG_SUPPRESS_NPC_GREETINGS, 16 + 1) { } + + WorldPacket const* Write() override; + + ObjectGuid UnitGUID; + bool SuppressNPCGreeting = false; + }; } } diff --git a/src/server/game/Server/Packets/QuestPackets.cpp b/src/server/game/Server/Packets/QuestPackets.cpp index 8b14366b334..9801db09844 100644 --- a/src/server/game/Server/Packets/QuestPackets.cpp +++ b/src/server/game/Server/Packets/QuestPackets.cpp @@ -433,3 +433,8 @@ void WorldPackets::Quest::QuestGiverAcceptQuest::Read() _worldPacket >> QuestID; StartCheat = _worldPacket.ReadBit(); } + +void WorldPackets::Quest::QuestLogRemoveQuest::Read() +{ + _worldPacket >> Entry; +} diff --git a/src/server/game/Server/Packets/QuestPackets.h b/src/server/game/Server/Packets/QuestPackets.h index 3c20ead28ae..440c8ea5478 100644 --- a/src/server/game/Server/Packets/QuestPackets.h +++ b/src/server/game/Server/Packets/QuestPackets.h @@ -417,6 +417,16 @@ namespace WorldPackets int32 QuestID = 0; bool StartCheat = false; }; + + class QuestLogRemoveQuest final : public ClientPacket + { + public: + QuestLogRemoveQuest(WorldPacket&& packet) : ClientPacket(CMSG_QUESTLOG_REMOVE_QUEST, std::move(packet)) { } + + void Read() override; + + uint8 Entry = 0; + }; } } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 5328d1a21c9..7a22c3384c2 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -291,7 +291,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_CHANNEL_VOICE_ON, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, WorldPackets::Channel::ChannelPlayerCommand, &WorldSession::HandleChannelCommand<&Channel::Voice>); DEFINE_HANDLER(CMSG_CHAR_CREATE, STATUS_AUTHED, PROCESS_THREADUNSAFE, WorldPackets::Character::CreateChar, &WorldSession::HandleCharCreateOpcode); DEFINE_HANDLER(CMSG_CHAR_CUSTOMIZE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, WorldPackets::Character::CharCustomize, &WorldSession::HandleCharCustomizeOpcode); - DEFINE_HANDLER(CMSG_CHAR_DELETE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, WorldPackets::Character::DeleteChar, &WorldSession::HandleCharDeleteOpcode); + DEFINE_HANDLER(CMSG_CHAR_DELETE, STATUS_AUTHED, PROCESS_THREADUNSAFE, WorldPackets::Character::DeleteChar, &WorldSession::HandleCharDeleteOpcode); DEFINE_HANDLER(CMSG_CHAR_ENUM, STATUS_AUTHED, PROCESS_THREADUNSAFE, WorldPackets::Character::EnumCharacters, &WorldSession::HandleCharEnumOpcode); DEFINE_HANDLER(CMSG_CHAR_RACE_OR_FACTION_CHANGE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, WorldPackets::Character::CharRaceOrFactionChange, &WorldSession::HandleCharRaceOrFactionChangeOpcode); DEFINE_HANDLER(CMSG_CHAR_RENAME, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, WorldPackets::Character::CharacterRenameRequest, &WorldSession::HandleCharRenameOpcode); @@ -662,15 +662,15 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_QUERY_TIME, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Query::QueryTime, &WorldSession::HandleQueryTimeOpcode); DEFINE_HANDLER(CMSG_QUESTGIVER_ACCEPT_QUEST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Quest::QuestGiverAcceptQuest, &WorldSession::HandleQuestgiverAcceptQuestOpcode); DEFINE_OPCODE_HANDLER_OLD(CMSG_QUESTGIVER_CANCEL, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); - DEFINE_HANDLER(CMSG_QUESTGIVER_CHOOSE_REWARD, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, WorldPackets::Quest::QuestGiverChooseReward, &WorldSession::HandleQuestgiverChooseRewardOpcode); - DEFINE_HANDLER(CMSG_QUESTGIVER_COMPLETE_QUEST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, WorldPackets::Quest::QuestGiverCompleteQuest, &WorldSession::HandleQuestgiverCompleteQuest); + DEFINE_HANDLER(CMSG_QUESTGIVER_CHOOSE_REWARD, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Quest::QuestGiverChooseReward, &WorldSession::HandleQuestgiverChooseRewardOpcode); + DEFINE_HANDLER(CMSG_QUESTGIVER_COMPLETE_QUEST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Quest::QuestGiverCompleteQuest, &WorldSession::HandleQuestgiverCompleteQuest); DEFINE_HANDLER(CMSG_QUESTGIVER_HELLO, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, WorldPackets::Quest::QuestGiverHello, &WorldSession::HandleQuestgiverHelloOpcode); DEFINE_HANDLER(CMSG_QUESTGIVER_QUERY_QUEST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Quest::QuestGiverQueryQuest, &WorldSession::HandleQuestgiverQueryQuestOpcode); DEFINE_OPCODE_HANDLER_OLD(CMSG_QUESTGIVER_QUEST_AUTOLAUNCH, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); DEFINE_HANDLER(CMSG_QUESTGIVER_REQUEST_REWARD, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, WorldPackets::Quest::QuestGiverRequestReward, &WorldSession::HandleQuestgiverRequestRewardOpcode); DEFINE_HANDLER(CMSG_QUESTGIVER_STATUS_MULTIPLE_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Quest::QuestGiverStatusMultipleQuery, &WorldSession::HandleQuestgiverStatusMultipleQuery); DEFINE_HANDLER(CMSG_QUESTGIVER_STATUS_QUERY, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Quest::QuestGiverStatusQuery, &WorldSession::HandleQuestgiverStatusQueryOpcode); - DEFINE_OPCODE_HANDLER_OLD(CMSG_QUESTLOG_REMOVE_QUEST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleQuestLogRemoveQuest ); + DEFINE_HANDLER(CMSG_QUESTLOG_REMOVE_QUEST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Quest::QuestLogRemoveQuest, &WorldSession::HandleQuestLogRemoveQuest); DEFINE_OPCODE_HANDLER_OLD(CMSG_QUESTLOG_SWAP_QUEST, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); DEFINE_OPCODE_HANDLER_OLD(CMSG_QUEST_CONFIRM_ACCEPT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleQuestConfirmAccept ); DEFINE_OPCODE_HANDLER_OLD(CMSG_QUERY_QUEST_COMPLETION_NPCS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleQuestNPCQuery ); @@ -1073,7 +1073,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAR_CREATE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAR_CUSTOMIZE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAR_CUSTOMIZE_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAR_DELETE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAR_DELETE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAR_ENUM, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAR_FACTION_CHANGE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAR_RENAME, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1801,7 +1801,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_SUMMON_RAID_MEMBER_VALIDATE_FAILED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SUMMON_REQUEST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SUPERCEDED_SPELL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_SUPPRESS_NPC_GREETINGS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_SUPPRESS_NPC_GREETINGS, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SUSPEND_COMMS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SUSPEND_TOKEN, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_TABARD_VENDOR_ACTIVATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index 35ebc54c25e..da7adf5d748 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -580,7 +580,7 @@ enum OpcodeClient : uint32 CMSG_QUESTGIVER_REQUEST_REWARD = 0xBADD, CMSG_QUESTGIVER_STATUS_MULTIPLE_QUERY = 0x0A39, CMSG_QUESTGIVER_STATUS_QUERY = 0x0A7B, - CMSG_QUESTLOG_REMOVE_QUEST = 0xBADD, + CMSG_QUESTLOG_REMOVE_QUEST = 0x04C3, CMSG_QUESTLOG_SWAP_QUEST = 0xBADD, CMSG_QUEST_CONFIRM_ACCEPT = 0xBADD, CMSG_QUEST_POI_QUERY = 0x1B2A, @@ -986,7 +986,7 @@ enum OpcodeServer : uint32 SMSG_CHAR_CREATE = 0x13E4, SMSG_CHAR_CUSTOMIZE = 0xBADD, SMSG_CHAR_CUSTOMIZE_RESULT = 0xBADD, - SMSG_CHAR_DELETE = 0xBADD, + SMSG_CHAR_DELETE = 0x01C2, SMSG_CHAR_ENUM = 0x13F2, SMSG_CHAR_FACTION_CHANGE = 0x0A64, SMSG_CHAR_RENAME = 0xBADD, diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 7d7591c7aef..71ce6546d3c 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -332,6 +332,7 @@ namespace WorldPackets class QuestGiverRequestReward; class QuestGiverQueryQuest; class QuestGiverAcceptQuest; + class QuestLogRemoveQuest; } namespace Social @@ -409,9 +410,9 @@ enum AccountDataType enum TutorialAction { - TUTORIAL_ACTION_UPDATE = 0, - TUTORIAL_ACTION_CLEAR = 1, - TUTORIAL_ACTION_RESET = 2 + TUTORIAL_ACTION_CLEAR = 1, + TUTORIAL_ACTION_UPDATE = 2, + TUTORIAL_ACTION_RESET = 3 }; /* @@ -1102,7 +1103,7 @@ class WorldSession void HandleQuestQueryOpcode(WorldPackets::Quest::QueryQuestInfo& packet); void HandleQuestgiverCancel(WorldPacket& recvData); void HandleQuestLogSwapQuest(WorldPacket& recvData); - void HandleQuestLogRemoveQuest(WorldPacket& recvData); + void HandleQuestLogRemoveQuest(WorldPackets::Quest::QuestLogRemoveQuest& packet); void HandleQuestConfirmAccept(WorldPacket& recvData); void HandleQuestgiverCompleteQuest(WorldPackets::Quest::QuestGiverCompleteQuest& packet); void HandleQuestgiverQuestAutoLaunch(WorldPacket& recvPacket); |