From 3830bd03cabc82aa06dfc92300e9836842593c8c Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Sat, 31 Oct 2026 01:27:57 +0000 Subject: [PATCH] Decompile fn_03940 (`CCharacterLinkedUserDataMgr::Save'::`8'::SaveUseSkillLevel::operator()) Batch #6629 by System4z: 0 byte-identical, 1 confirmed by peer review. - fn_03940 `CCharacterLinkedUserDataMgr::Save'::`8'::SaveUseSkillLevel::operator(): logic confirmed by peer review Peer-reviewed-by: alisonrag, SapitoSucio, vinnyamancio Accepted without human review: peers confirmed the logic ("same" ahead by at least 3, with 70% of the votes). --- .../Contents/UserData/CharacterConfigSave.cpp | 28 ++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/Source/Contents/UserData/CharacterConfigSave.cpp b/Source/Contents/UserData/CharacterConfigSave.cpp index 6d7d1c01..32736e57 100644 --- a/Source/Contents/UserData/CharacterConfigSave.cpp +++ b/Source/Contents/UserData/CharacterConfigSave.cpp @@ -43,19 +43,27 @@ void CCharacterLinkedUserDataMgr::Save(CharacterConfigSave& context, const char* if (g_session.GetOption(7) != 0) { Json::Value values; - context.skills.ForEachGrouped([&](CSkillInfo* skill) { - const int id = static_cast(skill->id); - const int level = context.UseLevel(id); + struct SaveUseSkillLevel { + const CharacterConfigSave* context; + Json::Value* values; - if (level != 0) { - Json::Value value; - value["SKID"] = id; - value["SKLv"] = level; - values.append(value); + // OFFSET: 0x005E7AE0 + // FUNCTION: fn_03940 + bool operator()(CSkillInfo* skill) const { + const int id = static_cast(skill->id); + const int level = reinterpret_cast(&g_session)->UseLevel(id); + if (level != 0) { + Json::Value value; + value["SKID"] = id; + value["SKLv"] = level; + this->values->append(value); + } + + return true; } + }; - return true; - }); + context.skills.ForEachGrouped(SaveUseSkillLevel{&context, &values}); data["UseSkillInfo"] = values; }