From edca875fc85b3271fd384f9b5e78d97666d0d492 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Fri, 30 Oct 2026 15:18:28 +0000 Subject: [PATCH] Decompile 2 functions in Source/Contents/EnchantMgr.cpp, Source/Contents/EnchantMgr.h Batch #5749 by eAthena: 0 byte-identical, 2 confirmed by peer review. - fn_05542 CEnchantMgr::ConvertMaterials: logic confirmed by peer review - fn_05566 L_AddPerfectEnchant: logic confirmed by peer review Peer-reviewed-by: ragnarok-clanker, tayoba, SapitoSucio Accepted without human review: peers confirmed the logic ("same" ahead by at least 3, with 70% of the votes). --- Source/Contents/EnchantMgr.cpp | 58 ++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/Source/Contents/EnchantMgr.cpp b/Source/Contents/EnchantMgr.cpp index 7e4bff41..d42d56dc 100644 --- a/Source/Contents/EnchantMgr.cpp +++ b/Source/Contents/EnchantMgr.cpp @@ -505,12 +505,70 @@ EnchantInfo* CEnchantMgr::GetEnchantInfo(uint64_t group) { } // OFFSET: 0x00682A00 +// FUNCTION: fn_05542 +std::map CEnchantMgr::ConvertMaterials(std::map materials) { + std::map result; + for (auto it = materials.begin(); it != materials.end(); ++it) { + int itemId = CItemDBToIDMgr::GetInstance()->GetItemID(it->first); + if (itemId != 0) { + result[itemId] = it->second; + } + } + return result; +} // OFFSET: 0x00682D10 // OFFSET: 0x006845C0 // OFFSET: 0x006864D0 +// FUNCTION: fn_05566 +int L_AddPerfectEnchant(lua_State* L) { + if (!lua_isnumber(L, -5)) { + lua_pushboolean(L, 0); + lua_pushstring(L, "L_AddPerfectEnchant : 1th argument must be number"); + return 2; + } + + if (!lua_isnumber(L, -4)) { + lua_pushboolean(L, 0); + lua_pushstring(L, "L_AddPerfectEnchant : 2th argument must be number"); + return 2; + } + + if (!lua_isstring(L, -3)) { + lua_pushboolean(L, 0); + lua_pushstring(L, "L_AddPerfectEnchant : 3th argument must be string"); + return 2; + } + + if (!lua_isnumber(L, -2)) { + lua_pushboolean(L, 0); + lua_pushstring(L, "L_AddPerfectEnchant : 4th argument must be number"); + return 2; + } + + if (lua_type(L, -1) != LUA_TTABLE) { + lua_pushboolean(L, 0); + lua_pushstring(L, "L_AddPerfectEnchant : 5th argument must be table"); + return 2; + } + + uint64_t id = static_cast(lua_tonumber(L, -5)); + uint32_t optionKey = static_cast(lua_tonumber(L, -4)); + std::string itemName(lua_tostring(L, -3)); + uint64_t cost = static_cast(lua_tonumber(L, -2)); + std::map materials; + lua_pushnil(L); + while (lua_next(L, -2) != 0) { + uint32_t count = static_cast(lua_tonumber(L, -1)); + materials[lua_tostring(L, -2)] = count; + lua_pop(L, 1); + } + + CEnchantMgr::GetInstance()->AddPerfectEnchant(id, optionKey, itemName, cost, materials); + return 2; +} // OFFSET: 0x00686830