diff options
-rw-r--r-- | src/server/game/Handlers/MiscHandler.cpp | 15 | ||||
-rw-r--r-- | src/server/game/Server/Packets/CharacterPackets.cpp | 14 | ||||
-rw-r--r-- | src/server/game/Server/Packets/CharacterPackets.h | 22 | ||||
-rw-r--r-- | src/server/game/Server/WorldSession.h | 3 |
4 files changed, 44 insertions, 10 deletions
diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index 3b507697b1a..1cd701e39ff 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -947,16 +947,13 @@ void WorldSession::HandleSetActionBarToggles(WorldPacket& recvData) GetPlayer()->SetByteValue(PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_ACTION_BAR_TOGGLES, actionBar); } -void WorldSession::HandlePlayedTime(WorldPacket& recvData) +void WorldSession::HandlePlayedTime(WorldPackets::Character::PlayedTimeClient& packet) { - uint8 unk1; - recvData >> unk1; // 0 or 1 expected - - WorldPacket data(SMSG_PLAYED_TIME, 4 + 4 + 1); - data << uint32(_player->GetTotalPlayedTime()); - data << uint32(_player->GetLevelPlayedTime()); - data << uint8(unk1); // 0 - will not show in chat frame - SendPacket(&data); + WorldPackets::Character::PlayedTime playedTime; + playedTime.TotalTime = _player->GetTotalPlayedTime(); + playedTime.LevelTime = _player->GetLevelPlayedTime(); + playedTime.TriggerScriptEvent = packet.TriggerScriptEvent; // 0-1 - will not show in chat frame + SendPacket(playedTime.Write()); } void WorldSession::HandleInspectOpcode(WorldPacket& recvData) diff --git a/src/server/game/Server/Packets/CharacterPackets.cpp b/src/server/game/Server/Packets/CharacterPackets.cpp index 14963c52ccd..06e729df184 100644 --- a/src/server/game/Server/Packets/CharacterPackets.cpp +++ b/src/server/game/Server/Packets/CharacterPackets.cpp @@ -40,3 +40,17 @@ WorldPacket const* WorldPackets::Character::LogoutResponse::Write() _worldPacket << uint8(Instant); return &_worldPacket; } + +void WorldPackets::Character::PlayedTimeClient::Read() +{ + _worldPacket >> TriggerScriptEvent; +} + +WorldPacket const* WorldPackets::Character::PlayedTime::Write() +{ + _worldPacket << uint32(TotalTime); + _worldPacket << uint32(LevelTime); + _worldPacket << uint8(TriggerScriptEvent); + + return &_worldPacket; +} diff --git a/src/server/game/Server/Packets/CharacterPackets.h b/src/server/game/Server/Packets/CharacterPackets.h index 15f76305232..eb12646aa8a 100644 --- a/src/server/game/Server/Packets/CharacterPackets.h +++ b/src/server/game/Server/Packets/CharacterPackets.h @@ -106,6 +106,28 @@ namespace WorldPackets void Read() override { } }; + + class PlayedTimeClient final : public ClientPacket + { + public: + PlayedTimeClient(WorldPacket&& packet) : ClientPacket(CMSG_PLAYED_TIME, std::move(packet)) { } + + void Read() override; + + bool TriggerScriptEvent = false; + }; + + class PlayedTime final : public ServerPacket + { + public: + PlayedTime() : ServerPacket(SMSG_PLAYED_TIME, 9) { } + + WorldPacket const* Write() override; + + uint32 TotalTime = 0; + uint32 LevelTime = 0; + bool TriggerScriptEvent = false; + }; } } diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 5b2348db8f3..e26b6b0f811 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -85,6 +85,7 @@ namespace WorldPackets class ShowingCloak; class ShowingHelm; class PlayerLogout; + class PlayedTimeClient; } namespace Chat @@ -586,7 +587,7 @@ class TC_GAME_API WorldSession void SendBarberShopResult(BarberShopResult result); // played time - void HandlePlayedTime(WorldPacket& recvPacket); + void HandlePlayedTime(WorldPackets::Character::PlayedTimeClient& packet); // new void HandleMoveUnRootAck(WorldPacket& recvPacket); |