From bcc47ca27360e2a0f985a8ba903b500271753b57 Mon Sep 17 00:00:00 2001 From: Aaron Kimbrell Date: Sun, 27 Sep 2026 08:28:57 -0500 Subject: [PATCH] wire: add the Help game message Server to client (475): a single int32 help ID, which the client's LWOCharacterComponent::ShowHelp turns into a one-time tutorial tooltip (pet bouncer and pet dig tutorials among them). Verified against GameMessage::Help::Serialize 0x00dc51e0 and Deserialize 0x00dc5220 in the 1.10.64 client, and against 2014 live captures, where the server sends it to the player (e.g. 14000000 = PR_BOUNCER_TUTORIAL_01). Co-Authored-By: Claude Opus 5.5 --- dGame/dGameMessages/PlayerMessages.cpp | 8 ++++++++ dGame/dGameMessages/PlayerMessages.h | 12 ++++++++++++ 2 files changed, 20 insertions(+) diff --git a/dGame/dGameMessages/PlayerMessages.cpp b/dGame/dGameMessages/PlayerMessages.cpp index fd9a2a5c2..464ff8b18 100644 --- a/dGame/dGameMessages/PlayerMessages.cpp +++ b/dGame/dGameMessages/PlayerMessages.cpp @@ -206,4 +206,12 @@ namespace GameMessages { VALIDATE_READ(BitStreamUtils::ReadOptional(bitStream, uiHandle, 0)); return true; } + + void Help::Serialize(RakNet::BitStream& bitStream) const { + bitStream.Write(helpId); + } + + bool Help::Deserialize(RakNet::BitStream& bitStream) { + return bitStream.Read(helpId); + } } diff --git a/dGame/dGameMessages/PlayerMessages.h b/dGame/dGameMessages/PlayerMessages.h index 168ed7039..af19e8ebd 100644 --- a/dGame/dGameMessages/PlayerMessages.h +++ b/dGame/dGameMessages/PlayerMessages.h @@ -3,6 +3,7 @@ #include "GameMessages.h" #include "eGameMasterLevel.h" +#include "eHelpType.h" #include "eLootSourceType.h" #include @@ -144,6 +145,17 @@ namespace GameMessages { std::string sBitStream{}; uint32_t uiHandle{ 0 }; // optional }; + + // Server -> client, to the player. Shows a one-time tutorial tooltip (LWOCharacterComponent::ShowHelp); the + // client skips it once the player flag with the same ID is set, and sets that flag itself. + // Serialize 0x00dc51e0 / Deserialize 0x00dc5220: a single int32. + struct Help : public NetGameMsg { + Help() : NetGameMsg(MessageType::Game::HELP) {} + void Serialize(RakNet::BitStream& bitStream) const override; + bool Deserialize(RakNet::BitStream& bitStream) override; + + eHelpType helpId{ eHelpType::NONE }; + }; } #endif // PLAYERMESSAGES_H