rodecomp/Source/Contents/Items/RuneSystem.cpp
ragnarok-clanker a957bc9fa6 Decompile 15 functions in Source/Contents/Items/RuneSystem.cpp, Source/Contents/Items/RuneSystem.h
Batch #3398 by eAthena: 14 byte-identical, 1 confirmed by peer review.

- fn_08117 CRuneSystemMgr::GetTagCount: byte-identical
- fn_08118 CRuneSystemMgr::GetOwnedDecomItemCount: byte-identical
- fn_08119 CRuneSystemMgr::IsInitialized: byte-identical
- fn_08122 RuneSetData::CountSlots: logic confirmed by peer review
- fn_08124 RuneData::GetName: byte-identical
- fn_08127 CRuneSystemMgr::GetCurRuneSet: byte-identical
- fn_08128 CRuneSystemMgr::GetCurSlotCount: byte-identical
- fn_08130 RuneData::GetId: byte-identical
- fn_08139 CRuneSystemMgr::GetSelectTag: byte-identical
- fn_08140 RuneData::GetTagId: byte-identical
- fn_08141 RuneData::GetActiveType: byte-identical
- fn_08142 RuneSetData::GetGradeValue: byte-identical
- fn_08144 CRuneSystemMgr::IsRequestPending: byte-identical
- fn_08145 RuneData::GetResName: byte-identical
- fn_08148 CRuneSystemMgr::ClearCurRuneSet: byte-identical

Accepted without human review: peers confirmed the logic ("same" ahead by at least 3, with 70% of the votes).
Adds to the build: Source/Contents/Items/RuneSystem.cpp
2026-10-29 21:47:18 +00:00

248 lines
4 KiB
C++

#include "Contents/Items/RuneSystem.h"
#include "Client/Application/ApplicationWindow.h"
#include "Client/Session.h"
#include "Contents/Items/ItemInfo.h"
#include "Network/Connection/Connection.h"
#include "Network/Packets/PacketLengths.h"
#include "Script/LuaScript.h"
#include "Utility/Text/FormatString.h"
extern "C" {
#include <lua.h>
}
#include <format>
#include <new>
// GLOBAL: gl_24845
CRuneSystemMgr* g_runeSystemMgr;
namespace {
struct RuneTagPacket {
/* 0000 */ std::uint16_t id;
/* 0002 */ std::uint16_t tagId;
};
struct RuneItemPacket {
/* 0000 */ std::uint16_t id;
/* 0002 */ std::uint16_t tagId;
/* 0004 */ int runeId;
};
struct RuneSelectPacket {
/* 0000 */ std::uint16_t id;
/* 0002 */ std::uint16_t tagId;
/* 0004 */ int runeId;
/* 0008 */ std::uint8_t value;
};
struct RuneIdPacket {
/* 0000 */ std::uint16_t id;
/* 0004 */ int runeId;
};
struct RuneHeaderPacket {
/* 0000 */ std::uint16_t id;
};
}
// OFFSET: 0x00764C30
// OFFSET: 0x00764DE0
// OFFSET: 0x007657D0
// OFFSET: 0x007659C0
// OFFSET: 0x00765B10
// OFFSET: 0x007660C0
// OFFSET: 0x00766920
// OFFSET: 0x00766970
// OFFSET: 0x00766A10
// OFFSET: 0x00766A30
// OFFSET: 0x00766A70
// FUNCTION: fn_08117
int CRuneSystemMgr::GetTagCount() const {
return static_cast<int>(this->m_tags.size());
}
// OFFSET: 0x00766A80
// FUNCTION: fn_08118
int CRuneSystemMgr::GetOwnedDecomItemCount() const {
return static_cast<int>(this->m_ownedDecomItems.size());
}
// OFFSET: 0x00766B10
// FUNCTION: fn_08119
bool CRuneSystemMgr::IsInitialized() const {
return this->m_initialized;
}
// OFFSET: 0x00766B20
// OFFSET: 0x00766B60
// OFFSET: 0x00766B90
// FUNCTION: fn_08122
int RuneSetData::CountSlots() const {
int count = 0;
for (RuneData* rune : this->m_slots) {
if (rune) {
++count;
}
}
return count;
}
// OFFSET: 0x00766C70
// OFFSET: 0x00766CA0
// FUNCTION: fn_08124
const char* RuneData::GetName() const {
return this->m_name.c_str();
}
// OFFSET: 0x00766CB0
// OFFSET: 0x00766CE0
// OFFSET: 0x00766DB0
// FUNCTION: fn_08127
RuneSetData* CRuneSystemMgr::GetCurRuneSet() const {
return this->m_curRuneSet;
}
// OFFSET: 0x00766DC0
// FUNCTION: fn_08128
int CRuneSystemMgr::GetCurSlotCount() const {
return this->m_curSlotCount;
}
// OFFSET: 0x00766DD0
// OFFSET: 0x00766E40
// FUNCTION: fn_08130
std::int64_t RuneData::GetId() const {
return this->m_id;
}
// OFFSET: 0x00766E50
// OFFSET: 0x00766E60
// OFFSET: 0x00766EB0
// OFFSET: 0x00766F00
// OFFSET: 0x00766F60
// OFFSET: 0x00766F80
// OFFSET: 0x00767070
// OFFSET: 0x007670C0
// OFFSET: 0x00767130
// FUNCTION: fn_08139
int CRuneSystemMgr::GetSelectTag() const {
return this->m_selectTag;
}
// OFFSET: 0x00767140
// FUNCTION: fn_08140
int RuneData::GetTagId() const {
return this->m_tagId;
}
// OFFSET: 0x00767150
// FUNCTION: fn_08141
int RuneData::GetActiveType() const {
return this->m_activeType;
}
// OFFSET: 0x00767160
// FUNCTION: fn_08142
int RuneSetData::GetGradeValue() const {
if (this->m_grade < 15) {
return this->m_gradeList[this->m_grade];
}
return 0;
}
// OFFSET: 0x00767180
// OFFSET: 0x00767230
// FUNCTION: fn_08144
bool CRuneSystemMgr::IsRequestPending() const {
return this->m_requestPending;
}
// OFFSET: 0x00767240
// FUNCTION: fn_08145
const char* RuneData::GetResName() const {
return this->m_resName.c_str();
}
// OFFSET: 0x00767D20
// OFFSET: 0x00767E60
// FUNCTION: fn_08148
void CRuneSystemMgr::ClearCurRuneSet() {
this->m_curRuneSet = nullptr;
}
// OFFSET: 0x00767E70
// OFFSET: 0x00767FA0
// OFFSET: 0x00767FF0
// OFFSET: 0x00768240
// OFFSET: 0x00768780
// OFFSET: 0x007688A0
// OFFSET: 0x00768920
// OFFSET: 0x00768960
// OFFSET: 0x00768A00
// OFFSET: 0x00769240
// OFFSET: 0x00769440
// OFFSET: 0x00769640
// OFFSET: 0x007698F0
// OFFSET: 0x00769B80
// OFFSET: 0x00769EE0
// OFFSET: 0x0076A240
// OFFSET: 0x0076A470
// OFFSET: 0x0076A690
// OFFSET: 0x0076A940
// OFFSET: 0x0076AA40
// OFFSET: 0x0076AC70
// OFFSET: 0x0076AFE0
// OFFSET: 0x0076B280
// OFFSET: 0x0076B4B0