From 8056824bb4e274d6cbb70026f253d4fcfd95bf1a Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Thu, 5 Nov 2026 12:25:50 +0000 Subject: [PATCH] Decompile 3 functions in Source/Contents/Items/ItemInfo.cpp Batch #12228 by Yommy: 0 byte-identical, 3 confirmed by peer review. - fn_06612 ITEM_INFO::Deserialize: logic confirmed by peer review - fn_06614 LoadItemIntegerTable: logic confirmed by peer review - fn_23386 LookupClientItem: logic confirmed by peer review Peer-reviewed-by: KWDev, Tanke, Toshiro Accepted without human review: peers confirmed the logic ("same" ahead by at least 3, with 70% of the votes). --- Source/Contents/Items/ItemInfo.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/Source/Contents/Items/ItemInfo.cpp b/Source/Contents/Items/ItemInfo.cpp index 5acb0d24..c4b9535b 100644 --- a/Source/Contents/Items/ItemInfo.cpp +++ b/Source/Contents/Items/ItemInfo.cpp @@ -194,6 +194,10 @@ void ITEM_INFO::Reset() { // OFFSET: 0x00DDD4E0 // FUNCTION: fn_23386 ITEM_INFO LookupClientItem(const std::list& values, int id, unsigned char requireIdentified) { + if (values.empty()) { + return ITEM_INFO(0); + } + for (const ITEM_INFO& value : values) { if (std::atoi(value.itemId.c_str()) == id && (!requireIdentified || value.identified != 0)) { return value; @@ -304,14 +308,14 @@ std::uint32_t ITEM_INFO::Deserialize(const std::vector& data) { } std::uint32_t offset = 6; - ItemRecordHeader header{}; - std::memcpy(&header, data.data(), sizeof(header)); + ItemRecordHeader header; + header.Read(data.data()); if (header.id != 281) { return 0xFFFFFFFF; } while (offset < data.size()) { - std::memcpy(&header, data.data() + offset, sizeof(header)); + header.Read(data.data() + offset); offset += 6; const unsigned char* source = data.data() + offset; switch (header.id) { @@ -579,7 +583,7 @@ bool LoadItemIntegerTable(std::vector& values, const char* name) { } const unsigned int size = file.GetSize(); - char* buffer = static_cast(std::malloc(size + 1)); + char* buffer = new char[size + 1]; if (values.capacity() < size) { values.reserve(size); } @@ -612,7 +616,7 @@ bool LoadItemIntegerTable(std::vector& values, const char* name) { break; } } - std::free(buffer); + delete[] buffer; std::vector(values).swap(values); return true; }