From 833db84d604ba2f425cc75957e5770eda4e5e6c0 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Thu, 29 Oct 2026 09:55:21 +0000 Subject: [PATCH] Decompile fn_23772 (CSession::CountProhibitionLog) Batch #2037 by ragnarok-clanker: 0 byte-identical, 1 confirmed by peer review. - fn_23772 CSession::CountProhibitionLog: logic confirmed by peer review Reviewed-by: ragnarok-clanker --- Source/Client/Session.h | 4 +++- Source/Contents/Skills/ClientSkills.cpp | 23 +++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/Source/Client/Session.h b/Source/Client/Session.h index 23bf45ea..ccd65b7d 100644 --- a/Source/Client/Session.h +++ b/Source/Client/Session.h @@ -72,7 +72,8 @@ public: /* 06F9 */ unsigned char unknown_06F9[0x23]; /* 071C */ std::vector m_homunSkillLevels; /* 0728 */ std::vector m_mercSkillLevels; - /* 0734 */ unsigned char unknown_0734[0x20]; + /* 0734 */ unsigned char unknown_0734[0x1C]; + /* 0750 */ std::uint32_t m_prohibitionTarget; /* 0754 */ std::vector m_prohibitionLog; /* 0760 */ std::string m_accountName; /* 0778 */ std::vector> unknown_0778; @@ -277,6 +278,7 @@ public: int FindUnknown0778(int key) const; CSkillInfo AdditionalSkillAt(int index) const; CSkillInfo HomunSkillAt(int index) const; + int CountProhibitionLog(std::uint32_t aid); void DeleteProhibitionLog(std::uint32_t aid, std::uint32_t minutes, WindowDialogs& dialogs); int IsAdminSubMode(int subMode); void GetMonsterSkillInfo(const char* monster, int skill, int* action, int* loopType, WindowDialogs& dialogs); diff --git a/Source/Contents/Skills/ClientSkills.cpp b/Source/Contents/Skills/ClientSkills.cpp index a9f1e7f2..2f56ad2b 100644 --- a/Source/Contents/Skills/ClientSkills.cpp +++ b/Source/Contents/Skills/ClientSkills.cpp @@ -2,6 +2,7 @@ #include "Client/Mode/ActiveGameMode.h" #include "Client/Mode/CGameMode.h" #include "Client/Session.h" +#include "Contents/Actors/RenderObject.h" #include "Contents/ClientState.h" #include "Contents/Jobs/JobId.h" #include "Contents/Jobs/JobInheritance.h" @@ -439,6 +440,28 @@ void CSession::EraseUnknownKey(std::int64_t key) { } } +// OFFSET: 0x00E08D50 +// FUNCTION: fn_23772 +int CSession::CountProhibitionLog(std::uint32_t aid) { + const int count = static_cast(this->m_prohibitionLog.size()); + const CRenderObject* actor = static_cast(g_world.ActiveGameMode())->scene->GetGameActorByAID(aid); + if (!actor) { + return -1; + } + + const std::uint32_t accountId = actor->render.accountId; + this->m_prohibitionTarget = accountId; + int matches = 0; + for (int index = 0; index < count; ++index) { + const ProhibitionLogEntry& entry = this->m_prohibitionLog[index]; + if (std::strcmp(entry.ownerName, this->m_serverName.c_str()) == 0 && entry.accountId == accountId) { + ++matches; + } + } + + return matches; +} + // OFFSET: 0x00E085A0 // FUNCTION: fn_23763 void CSession::DeleteProhibitionLog(std::uint32_t aid, std::uint32_t minutes, WindowDialogs& dialogs) {