From 1ebead0e3384e1e7bf520324614a419d7dafa270 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Wed, 28 Oct 2026 19:42:41 +0000 Subject: [PATCH] Decompile fn_21632 (CGameMode::ReceiveActorNameAll) Batch #1591 by eAthena: 0 byte-identical, 1 confirmed by peer review. - fn_21632 CGameMode::ReceiveActorNameAll: logic confirmed by peer review Reviewed-by: ragnarok-clanker Adds to the build: Source/Network/ActorNamePacket.cpp --- Source/Client/Mode/CGameMode.h | 2 ++ Source/Network/ActorNamePacket.cpp | 13 +++++++++++++ Source/Network/ActorNamePacket.h | 23 +++++++++++++++++++++++ data/compile.json | 1 + 4 files changed, 39 insertions(+) create mode 100644 Source/Network/ActorNamePacket.cpp create mode 100644 Source/Network/ActorNamePacket.h diff --git a/Source/Client/Mode/CGameMode.h b/Source/Client/Mode/CGameMode.h index c56d11a6..4a135384 100644 --- a/Source/Client/Mode/CGameMode.h +++ b/Source/Client/Mode/CGameMode.h @@ -9,6 +9,7 @@ #include class CView; +struct ActorNameAllPacket; struct WorldScene; class CGameMode : public CMode { @@ -27,6 +28,7 @@ public: std::string MapName(); void WorldCell(float x, float z, int& column, int& row) const; void PlayerCell(int* column, int* row) const; + void ReceiveActorNameAll(const ActorNameAllPacket* packet); }; #if defined(_WIN32) && !defined(_WIN64) diff --git a/Source/Network/ActorNamePacket.cpp b/Source/Network/ActorNamePacket.cpp new file mode 100644 index 00000000..a1f0b39c --- /dev/null +++ b/Source/Network/ActorNamePacket.cpp @@ -0,0 +1,13 @@ +#include "Client/Mode/CGameMode.h" +#include "Network/ActorNamePacket.h" + +#include + +// OFFSET: 0x00D1DFB0 +// FUNCTION: fn_21632 +void CGameMode::ReceiveActorNameAll(const ActorNameAllPacket* packet) { + this->nameCard.Set(packet->actorId, std::string(packet->name, packet->name + sizeof(packet->name)).c_str(), + std::string(packet->partyName, packet->partyName + sizeof(packet->partyName)).c_str(), + std::string(packet->guildName, packet->guildName + sizeof(packet->guildName)).c_str(), + std::string(packet->positionName, packet->positionName + sizeof(packet->positionName)).c_str(), std::string(), std::string(), 0); +} diff --git a/Source/Network/ActorNamePacket.h b/Source/Network/ActorNamePacket.h new file mode 100644 index 00000000..242a3ebb --- /dev/null +++ b/Source/Network/ActorNamePacket.h @@ -0,0 +1,23 @@ +#ifndef RAGNAROK_SOURCE_NETWORK_ACTORNAMEPACKET_H +#define RAGNAROK_SOURCE_NETWORK_ACTORNAMEPACKET_H + +#include +#include + +#pragma pack(push, 1) +struct ActorNameAllPacket { + /* 0000 */ std::int16_t id; + /* 0002 */ std::uint32_t actorId; + /* 0006 */ char name[24]; + /* 001E */ char partyName[24]; + /* 0036 */ char guildName[24]; + /* 004E */ char positionName[24]; +}; +#pragma pack(pop) + +#if defined(_WIN32) && !defined(_WIN64) +static_assert(offsetof(ActorNameAllPacket, positionName) == 0x4E); +static_assert(sizeof(ActorNameAllPacket) == 0x66); +#endif + +#endif diff --git a/data/compile.json b/data/compile.json index afd2d88c..ede9fe23 100644 --- a/data/compile.json +++ b/data/compile.json @@ -447,6 +447,7 @@ "Source/File/MapName.cpp": 1, "Source/File/ResourcePath.cpp": 1, "Source/File/ShortcutFilename.cpp": 1, + "Source/Network/ActorNamePacket.cpp": 0, "Source/Network/ClientKeepalive.cpp": 0, "Source/Network/ClientOptionPacket.cpp": 0, "Source/Network/Connection/Connection.cpp": 0,