diff options
author | DJScias <djscias@gmail.com> | 2015-04-22 23:26:31 +0200 |
---|---|---|
committer | DJScias <djscias@gmail.com> | 2015-04-23 00:56:35 +0200 |
commit | 1c13154e0b2268f817f7eb9892ce9e6d6ec5b6d6 (patch) | |
tree | ecec9a90a5ea8d7b83b497289f1825f526824722 | |
parent | 209bf6b4e6d1936634848dd877874fdf0798809c (diff) |
Core/PacketIO: Updated and enabled CMSG_SET_FACTION_AT_WAR, CMSG_SET_FACTION_INACTIVE, CMSG_SET_FACTION_NOT_AT_WAR, CMSG_SET_WATCHED_FACTION, SMSG_SET_FACTION_NOT_VISIBLE and SMSG_SET_FACTION_VISIBLE
Documentation used:
- Thanks @Carbenium for all the help in regards to this (https://github.com/TrinityCore/WowPacketParser/commit/66a2baff13c381d107aad12ea7b583f5af67c275 & https://github.com/TrinityCore/WowPacketParser/commit/cfd48eb2eea9f7e9c9ded483e8a5ac47d0b73949)
- SetWatchedFaction is used for CMSG_SET_WATCHED_FACTION (returns uint32 FactionIndex), confirmed in-game and with http://wow.gamepedia.com/API_GetWatchedFactionInfo (See Patch History Patch 5.0.4)
- SetFactionVisible is used for SMSG_SET_FACTION_VISIBLE and SMSG_SET_FACTION_NOT_VISIBLE (uint32 FactionIndex, confirmed)
-rw-r--r-- | src/server/game/Handlers/CharacterHandler.cpp | 27 | ||||
-rw-r--r-- | src/server/game/Reputation/ReputationMgr.cpp | 9 | ||||
-rw-r--r-- | src/server/game/Server/Packets/CharacterPackets.cpp | 27 | ||||
-rw-r--r-- | src/server/game/Server/Packets/CharacterPackets.h | 51 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 12 | ||||
-rw-r--r-- | src/server/game/Server/WorldSession.h | 11 |
6 files changed, 107 insertions, 30 deletions
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 173b64ae245..e776edb6bea 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -1156,15 +1156,14 @@ void WorldSession::SendFeatureSystemStatus() SendPacket(features.Write()); } -void WorldSession::HandleSetFactionAtWar(WorldPacket& recvData) +void WorldSession::HandleSetFactionAtWar(WorldPackets::Character::SetFactionAtWar& packet) { - uint32 repListID; - uint8 flag; - - recvData >> repListID; - recvData >> flag; + GetPlayer()->GetReputationMgr().SetAtWar(packet.FactionIndex, true); +} - GetPlayer()->GetReputationMgr().SetAtWar(repListID, flag != 0); +void WorldSession::HandleSetFactionNotAtWar(WorldPackets::Character::SetFactionNotAtWar& packet) +{ + GetPlayer()->GetReputationMgr().SetAtWar(packet.FactionIndex, false); } //I think this function is never used :/ I dunno, but i guess this opcode not exists @@ -1205,20 +1204,14 @@ void WorldSession::HandleTutorialFlag(WorldPackets::Misc::TutorialSetFlag& packe } } -void WorldSession::HandleSetWatchedFactionOpcode(WorldPacket& recvData) +void WorldSession::HandleSetWatchedFactionOpcode(WorldPackets::Character::SetWatchedFaction& packet) { - uint32 fact; - recvData >> fact; - GetPlayer()->SetUInt32Value(PLAYER_FIELD_WATCHED_FACTION_INDEX, fact); + GetPlayer()->SetUInt32Value(PLAYER_FIELD_WATCHED_FACTION_INDEX, packet.FactionIndex); } -void WorldSession::HandleSetFactionInactiveOpcode(WorldPacket& recvData) +void WorldSession::HandleSetFactionInactiveOpcode(WorldPackets::Character::SetFactionInactive& packet) { - uint32 replistid; - uint8 inactive; - recvData >> replistid >> inactive; - - _player->GetReputationMgr().SetInactive(replistid, inactive != 0); + _player->GetReputationMgr().SetInactive(packet.Index, packet.State); } void WorldSession::HandleRequestForcedReactionsOpcode(WorldPackets::Reputation::RequestForcedReactions& /*requestForcedReactions*/) diff --git a/src/server/game/Reputation/ReputationMgr.cpp b/src/server/game/Reputation/ReputationMgr.cpp index 48f3bf79088..5fea62655b3 100644 --- a/src/server/game/Reputation/ReputationMgr.cpp +++ b/src/server/game/Reputation/ReputationMgr.cpp @@ -27,6 +27,7 @@ #include "ScriptMgr.h" #include "Opcodes.h" #include "WorldSession.h" +#include "CharacterPackets.h" const int32 ReputationMgr::PointsInRank[MAX_REPUTATION_RANK] = {36000, 3000, 3000, 3000, 6000, 12000, 21000, 1000}; @@ -225,15 +226,15 @@ void ReputationMgr::SendStates() SendState(&(itr->second)); } -void ReputationMgr::SendVisible(FactionState const* faction, bool visible /* = true*/) const +void ReputationMgr::SendVisible(FactionState const* faction, bool visible) const { if (_player->GetSession()->PlayerLoading()) return; // make faction visible/not visible in reputation list at client - WorldPacket data(visible ? SMSG_SET_FACTION_VISIBLE : SMSG_SET_FACTION_NOT_VISIBLE, 4); - data << faction->ReputationListID; - _player->SendDirectMessage(&data); + WorldPackets::Character::SetFactionVisible packet(visible); + packet.FactionIndex = faction->ReputationListID; + _player->SendDirectMessage(packet.Write()); } void ReputationMgr::Initialize() diff --git a/src/server/game/Server/Packets/CharacterPackets.cpp b/src/server/game/Server/Packets/CharacterPackets.cpp index 8d6a54aed40..be84b41cf08 100644 --- a/src/server/game/Server/Packets/CharacterPackets.cpp +++ b/src/server/game/Server/Packets/CharacterPackets.cpp @@ -464,3 +464,30 @@ WorldPacket const* WorldPackets::Character::TitleEarned::Write() return &_worldPacket; } + +void WorldPackets::Character::SetFactionAtWar::Read() +{ + _worldPacket >> FactionIndex; +} + +void WorldPackets::Character::SetFactionNotAtWar::Read() +{ + _worldPacket >> FactionIndex; +} + +void WorldPackets::Character::SetFactionInactive::Read() +{ + _worldPacket >> Index; + State = _worldPacket.ReadBit(); +} + +void WorldPackets::Character::SetWatchedFaction::Read() +{ + _worldPacket >> FactionIndex; +} + +WorldPacket const* WorldPackets::Character::SetFactionVisible::Write() +{ + _worldPacket << FactionIndex; + return &_worldPacket; +} diff --git a/src/server/game/Server/Packets/CharacterPackets.h b/src/server/game/Server/Packets/CharacterPackets.h index 52d4d946db6..cee4f5edb5c 100644 --- a/src/server/game/Server/Packets/CharacterPackets.h +++ b/src/server/game/Server/Packets/CharacterPackets.h @@ -635,6 +635,57 @@ namespace WorldPackets uint32 Index = 0; }; + + class SetFactionAtWar final : public ClientPacket + { + public: + SetFactionAtWar(WorldPacket&& packet) : ClientPacket(CMSG_SET_FACTION_AT_WAR, std::move(packet)) { } + + void Read() override; + + uint8 FactionIndex = 0; + }; + + class SetFactionNotAtWar final : public ClientPacket + { + public: + SetFactionNotAtWar(WorldPacket&& packet) : ClientPacket(CMSG_SET_FACTION_NOT_AT_WAR, std::move(packet)) { } + + void Read() override; + + uint8 FactionIndex = 0; + }; + + class SetFactionInactive final : public ClientPacket + { + public: + SetFactionInactive(WorldPacket&& packet) : ClientPacket(CMSG_SET_FACTION_INACTIVE, std::move(packet)) { } + + void Read() override; + + uint32 Index = 0; + bool State = false; + }; + + class SetWatchedFaction final : public ClientPacket + { + public: + SetWatchedFaction(WorldPacket&& packet) : ClientPacket(CMSG_SET_WATCHED_FACTION, std::move(packet)) { } + + void Read() override; + + uint32 FactionIndex = 0; + }; + + class SetFactionVisible : public ServerPacket + { + public: + SetFactionVisible(bool visible) : ServerPacket(visible ? SMSG_SET_FACTION_VISIBLE : SMSG_SET_FACTION_NOT_VISIBLE, 4) { } + + WorldPacket const* Write() override; + + uint32 FactionIndex = 0; + }; } } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 97c583287ca..37358fd9759 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -723,9 +723,9 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_SET_DIFFICULTY_ID, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SET_DUNGEON_DIFFICULTY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Misc::SetDungeonDifficulty, &WorldSession::HandleSetDungeonDifficultyOpcode); DEFINE_HANDLER(CMSG_SET_EVERYONE_IS_ASSISTANT, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL); - DEFINE_OPCODE_HANDLER_OLD(CMSG_SET_FACTION_AT_WAR, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleSetFactionAtWar ); - DEFINE_OPCODE_HANDLER_OLD(CMSG_SET_FACTION_INACTIVE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleSetFactionInactiveOpcode ); - DEFINE_HANDLER(CMSG_SET_FACTION_NOT_AT_WAR, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_SET_FACTION_AT_WAR, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Character::SetFactionAtWar, &WorldSession::HandleSetFactionAtWar); + DEFINE_HANDLER(CMSG_SET_FACTION_INACTIVE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Character::SetFactionInactive, &WorldSession::HandleSetFactionInactiveOpcode); + DEFINE_HANDLER(CMSG_SET_FACTION_NOT_AT_WAR, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Character::SetFactionNotAtWar, &WorldSession::HandleSetFactionNotAtWar); DEFINE_HANDLER(CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SET_LFG_BONUS_FACTION_ID, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL); DEFINE_OPCODE_HANDLER_OLD(CMSG_SET_LOOT_METHOD, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleLootMethodOpcode ); @@ -749,7 +749,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_SET_TRADE_GOLD, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Trade::SetTradeGold, &WorldSession::HandleSetTradeGoldOpcode); DEFINE_HANDLER(CMSG_SET_TRADE_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Trade::SetTradeItem, &WorldSession::HandleSetTradeItemOpcode); DEFINE_HANDLER(CMSG_SET_USING_PARTY_GARRISON, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL); - DEFINE_OPCODE_HANDLER_OLD(CMSG_SET_WATCHED_FACTION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleSetWatchedFactionOpcode ); + DEFINE_HANDLER(CMSG_SET_WATCHED_FACTION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Character::SetWatchedFaction, &WorldSession::HandleSetWatchedFactionOpcode); DEFINE_HANDLER(CMSG_SHOWING_CLOAK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Character::ShowingCloak, &WorldSession::HandleShowingCloakOpcode); DEFINE_HANDLER(CMSG_SHOWING_HELM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Character::ShowingHelm, &WorldSession::HandleShowingHelmOpcode); DEFINE_HANDLER(CMSG_SHOW_TRADE_SKILL, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL); @@ -1609,9 +1609,9 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_DF_FAST_LAUNCH_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_DUNGEON_DIFFICULTY, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_FACTION_AT_WAR, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_FACTION_NOT_VISIBLE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_FACTION_NOT_VISIBLE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_FACTION_STANDING, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_FACTION_VISIBLE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_FACTION_VISIBLE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_FLAT_SPELL_MODIFIER, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_FORCED_REACTIONS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_ITEM_PURCHASE_DATA, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 97db720c32e..efa3a7cb90e 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -152,6 +152,10 @@ namespace WorldPackets class ShowingCloak; class ShowingHelm; class SetTitle; + class SetFactionAtWar; + class SetFactionNotAtWar; + class SetFactionInactive; + class SetWatchedFaction; enum class LoginFailureReason : uint8; } @@ -991,10 +995,11 @@ class WorldSession void HandleAreaTriggerOpcode(WorldPackets::Misc::AreaTrigger& packet); - void HandleSetFactionAtWar(WorldPacket& recvData); + void HandleSetFactionAtWar(WorldPackets::Character::SetFactionAtWar& packet); + void HandleSetFactionNotAtWar(WorldPackets::Character::SetFactionNotAtWar& packet); void HandleSetFactionCheat(WorldPacket& recvData); - void HandleSetWatchedFactionOpcode(WorldPacket& recvData); - void HandleSetFactionInactiveOpcode(WorldPacket& recvData); + void HandleSetWatchedFactionOpcode(WorldPackets::Character::SetWatchedFaction& packet); + void HandleSetFactionInactiveOpcode(WorldPackets::Character::SetFactionInactive& packet); void HandleRequestForcedReactionsOpcode(WorldPackets::Reputation::RequestForcedReactions& requestForcedReactions); void HandleUpdateAccountData(WorldPackets::ClientConfig::UserClientUpdateAccountData& packet); |