From 3f308ea123d3e80205d482f09a6ac77a9ccc357c Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Fri, 30 Oct 2026 09:52:38 +0000 Subject: [PATCH] Decompile fn_22015 (CGameMode::ReceiveDeferredReset) Batch #5242 by eAthena: 0 byte-identical, 1 confirmed by peer review. - fn_22015 CGameMode::ReceiveDeferredReset: logic confirmed by peer review Peer-reviewed-by: eAthena, meitogi, superintelligence Accepted without human review: peers confirmed the logic ("same" ahead by at least 3, with 70% of the votes). --- Source/Client/Mode/CGameMode.h | 11 ++++++++- Source/Client/Mode/GameModeHandlers.cpp | 33 +++++++++++++++++++++++++ Source/Client/Session.h | 6 ++++- 3 files changed, 48 insertions(+), 2 deletions(-) diff --git a/Source/Client/Mode/CGameMode.h b/Source/Client/Mode/CGameMode.h index 1d146fc7..747f6d88 100644 --- a/Source/Client/Mode/CGameMode.h +++ b/Source/Client/Mode/CGameMode.h @@ -49,7 +49,9 @@ public: /* 0078 */ unsigned char unknown_0078[0x54]; /* 00CC */ CWorld* scene; /* 00D0 */ CView* camera; - /* 00D4 */ unsigned char unknown_00D4[0x44]; + /* 00D4 */ unsigned char unknown_00D4[0x28]; + /* 00FC */ int unknown_00FC; + /* 0100 */ unsigned char unknown_0100[0x18]; /* 0118 */ std::string unknown_0118; /* 0130 */ unsigned char unknown_0130[0x30]; /* 0160 */ CActorNameCardHolder nameCard; @@ -171,6 +173,13 @@ public: void ReceiveEnchantSimulation(const unsigned char* packet); void ReceivePackageSimulation(const unsigned char* packet); void ReceiveWindow154Result(std::int16_t value); + void ReceivePlayerDuration(const unsigned char* packet); + void ReceiveFailureNotice(const unsigned char* packet); + void ReceiveServerRateNotice(const unsigned char* packet); + void ReceiveRequestResult(const unsigned char* packet); + void ReceivePackageItemTest(const unsigned char* packet); + void ReceiveDeferredReset(const unsigned char* packet); + void ReceiveGradeEnchantResult(const unsigned char* packet); void UpdateUnknown0628(int id, bool add); void IgnoreRemovedPacket3(const unsigned char* packet); void IgnoreRemovedPacket4(const unsigned char* packet); diff --git a/Source/Client/Mode/GameModeHandlers.cpp b/Source/Client/Mode/GameModeHandlers.cpp index e7065983..912b2991 100644 --- a/Source/Client/Mode/GameModeHandlers.cpp +++ b/Source/Client/Mode/GameModeHandlers.cpp @@ -1,4 +1,5 @@ #include "Client/Mode/CGameMode.h" +#include "Client/Application/Launcher.h" #include "Client/Session.h" #include "Contents/CashEmotionMgr.h" #include "Contents/ClanInfo.h" @@ -6,11 +7,16 @@ #include "Contents/Actors/RenderObject.h" #include "Contents/Configuration/ServiceConfiguration.h" #include "Contents/Configuration/ServiceOptions.h" +#include "Contents/Effects/EffectLists.h" #include "Contents/GuildMgr.h" +#include "Contents/Items/ItemDescription.h" +#include "Contents/Items/ItemInfo.h" #include "Contents/Items/RuneSystem.h" #include "Contents/MessageTable.h" #include "Contents/Sound/SoundMgr.h" #include "Contents/World/World.h" +#include "Network/Connection/Connection.h" +#include "UI/UIGradeEnchantWnd.h" #include "UI/Window/UIWindow.h" #include "UI/Window/UIWindowMgr.h" #include "UI/Window/WindowDialogs.h" @@ -22,6 +28,9 @@ #include #include #include +#include +#include +#include #pragma pack(push, 1) struct ClanInfoPacket { @@ -79,6 +88,11 @@ struct RuneSetGradesPacket : RuneListPacket { struct RuneRewardStepsPacket : RuneListPacket { /* 0009 */ RuneRewardStepEntry entries[1]; }; +struct PackageItemTestEntry { + /* 0000 */ int itemId; + /* 0004 */ std::uint16_t unknown_0004; + /* 0006 */ int count; +}; #pragma pack(pop) struct GameOptionEntry { @@ -235,6 +249,10 @@ void CGameMode::ReceiveNpcBgm(const unsigned char* packet) { void CGameMode::IgnoreRemovedPacket1(const unsigned char*) { } +// OFFSET: 0x00D3D2F0 + +// OFFSET: 0x00D3DF40 + // OFFSET: 0x00D3E0B0 // FUNCTION: fn_21808 void CGameMode::IgnoreRemovedPacket2(const unsigned char*) { @@ -354,6 +372,8 @@ struct ActorMessage32 { /* 003C */ int unknown_003C; }; +// OFFSET: 0x00D3E8B0 + // OFFSET: 0x00D3F130 // FUNCTION: fn_21811 void CGameMode::ReceiveActorMessage32(const unsigned char* packet) { @@ -377,6 +397,8 @@ void CGameMode::ReceiveActorMessage32(const unsigned char* packet) { actor->SendMsg(nullptr, 32, 0, static_cast(argument), static_cast(argument >> 32), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); } +// OFFSET: 0x00D3F3E0 + // OFFSET: 0x00D3F760 // FUNCTION: fn_21813 void CGameMode::ReceiveStatusNotice(const unsigned char* packet) { @@ -496,6 +518,8 @@ void CGameMode::ReceiveResultNotice0118(const unsigned char* packet) { } } +// OFFSET: 0x00D652E0 + // OFFSET: 0x00D65730 // FUNCTION: fn_22001 void CGameMode::ReceiveClanLeave(const unsigned char* packet) { @@ -568,6 +592,13 @@ void CGameMode::ReceiveActorClanName(const unsigned char* data) { this->nameCard.SetValue3(packet->aid, std::string(packet->name, packet->name + (packet->length - 8))); } +// OFFSET: 0x00D66840 +// FUNCTION: fn_22015 +void CGameMode::ReceiveDeferredReset(const unsigned char*) { + g_session.m_options.Set(5, 0); + GetRagConnection().ResetDeferred(); +} + // OFFSET: 0x00D66A00 // FUNCTION: fn_22017 void CGameMode::ReceiveClanMemberCount(const unsigned char* data) { @@ -705,6 +736,8 @@ void CGameMode::ReceiveRuneRewardSteps(const unsigned char* data) { // OFFSET: 0x00D677C0 +// OFFSET: 0x00D679E0 + // OFFSET: 0x00D686F0 // FUNCTION: fn_22042 void CGameMode::ReceiveGuildEmblemVersion(std::uint32_t aid, int guildId, int emblemVersion) { diff --git a/Source/Client/Session.h b/Source/Client/Session.h index 030b0bb7..a9669e67 100644 --- a/Source/Client/Session.h +++ b/Source/Client/Session.h @@ -238,7 +238,11 @@ public: /* 5450 */ int unknown_5450; /* 5454 */ unsigned char unknown_5454[0x14]; /* 5468 */ int unknown_5468; - /* 546C */ unsigned char unknown_546C[0xD0]; + /* 546C */ unsigned char unknown_546C[0x34]; + /* 54A0 */ int unknown_54A0; + /* 54A4 */ int unknown_54A4; + /* 54A8 */ int unknown_54A8; + /* 54AC */ unsigned char unknown_54AC[0x90]; /* 553C */ std::string m_serverName; /* 5554 */ unsigned char unknown_5554[4]; /* 5558 */ int unknown_5558;