Decompile 2 functions in Source/Contents/Skills/SkillInfo.cpp, Source/Contents/Skills/SkillInfo.h
Batch #1707 by ragnarok-clanker: 0 byte-identical, 2 confirmed by peer review. - fn_08322 Sub773CD0: logic confirmed by peer review - fn_08413 CSkillActionMgr::Sub77B4A0: logic confirmed by peer review Reviewed-by: ragnarok-clanker
This commit is contained in:
parent
e9fdd5f24b
commit
21ea249664
2 changed files with 204 additions and 0 deletions
|
|
@ -3,6 +3,13 @@
|
|||
#include "Script/LuaScript.h"
|
||||
|
||||
#include <cstring>
|
||||
#include <memory>
|
||||
|
||||
// GLOBAL: gl_24640
|
||||
CSkillActionMgr* g_skillActionMgr;
|
||||
|
||||
// INLINED
|
||||
CSkillActionMgr::~CSkillActionMgr() = default;
|
||||
|
||||
// OFFSET: 0x00773480
|
||||
// FUNCTION: fn_08311
|
||||
|
|
@ -184,6 +191,164 @@ bool Sub773CB0(int skillId) {
|
|||
}
|
||||
|
||||
// OFFSET: 0x00773CD0
|
||||
// FUNCTION: fn_08322
|
||||
bool Sub773CD0(int skillId) {
|
||||
switch (skillId) {
|
||||
case 0x4:
|
||||
case 0x1C:
|
||||
case 0x1D:
|
||||
case 0x22:
|
||||
case 0x23:
|
||||
case 0x35:
|
||||
case 0x36:
|
||||
case 0x42:
|
||||
case 0x43:
|
||||
case 0x44:
|
||||
case 0x47:
|
||||
case 0x48:
|
||||
case 0x49:
|
||||
case 0x6C:
|
||||
case 0x8A:
|
||||
case 0x8B:
|
||||
case 0xE7:
|
||||
case 0xEA:
|
||||
case 0xEB:
|
||||
case 0xEC:
|
||||
case 0xED:
|
||||
case 0xFF:
|
||||
case 0x100:
|
||||
case 0x106:
|
||||
case 0x118:
|
||||
case 0x119:
|
||||
case 0x11A:
|
||||
case 0x11B:
|
||||
case 0x169:
|
||||
case 0x1BD:
|
||||
case 0x1BE:
|
||||
case 0x1BF:
|
||||
case 0x1C0:
|
||||
case 0x1C1:
|
||||
case 0x1C2:
|
||||
case 0x1C3:
|
||||
case 0x1C4:
|
||||
case 0x1C5:
|
||||
case 0x1C6:
|
||||
case 0x1C7:
|
||||
case 0x1C8:
|
||||
case 0x1C9:
|
||||
case 0x1CA:
|
||||
case 0x1CC:
|
||||
case 0x1CD:
|
||||
case 0x1CE:
|
||||
case 0x1CF:
|
||||
case 0x1D0:
|
||||
case 0x1D1:
|
||||
case 0x1DF:
|
||||
case 0x1EE:
|
||||
case 0x234:
|
||||
case 0x23C:
|
||||
case 0x23D:
|
||||
case 0x23E:
|
||||
case 0x23F:
|
||||
case 0x241:
|
||||
case 0x251:
|
||||
case 0x26D:
|
||||
case 0x26E:
|
||||
case 0x272:
|
||||
case 0x27C:
|
||||
case 0x27D:
|
||||
case 0x281:
|
||||
case 0x282:
|
||||
case 0x283:
|
||||
case 0x285:
|
||||
case 0x286:
|
||||
case 0x2B0:
|
||||
case 0x2B1:
|
||||
case 0x2B2:
|
||||
case 0x2B3:
|
||||
case 0x2B6:
|
||||
case 0x2D9:
|
||||
case 0x3F7:
|
||||
case 0x7D1:
|
||||
case 0x7DC:
|
||||
case 0x7EA:
|
||||
case 0x7F9:
|
||||
case 0x7FA:
|
||||
case 0x7FB:
|
||||
case 0x802:
|
||||
case 0x803:
|
||||
case 0x804:
|
||||
case 0x805:
|
||||
case 0x8E3:
|
||||
case 0x8EF:
|
||||
case 0x912:
|
||||
case 0x925:
|
||||
case 0x929:
|
||||
case 0x92B:
|
||||
case 0x92C:
|
||||
case 0x94F:
|
||||
case 0x975:
|
||||
case 0x979:
|
||||
case 0x993:
|
||||
case 0x9B0:
|
||||
case 0x9B2:
|
||||
case 0x9D3:
|
||||
case 0x9E9:
|
||||
case 0xA24:
|
||||
case 0xA25:
|
||||
case 0xA26:
|
||||
case 0xA27:
|
||||
case 0xA30:
|
||||
case 0xA34:
|
||||
case 0xBD1:
|
||||
case 0xBD2:
|
||||
case 0xBD3:
|
||||
case 0xBD7:
|
||||
case 0xBD8:
|
||||
case 0xBD9:
|
||||
case 0xBDA:
|
||||
case 0x13AB:
|
||||
case 0x13AE:
|
||||
case 0x13AF:
|
||||
case 0x13B0:
|
||||
case 0x13B1:
|
||||
case 0x13C8:
|
||||
case 0x1494:
|
||||
case 0x1495:
|
||||
case 0x1497:
|
||||
case 0x1498:
|
||||
case 0x149B:
|
||||
case 0x14A0:
|
||||
case 0x14A1:
|
||||
case 0x14A2:
|
||||
case 0x14B2:
|
||||
case 0x14B3:
|
||||
case 0x14DB:
|
||||
case 0x14F6:
|
||||
case 0x14F8:
|
||||
case 0x1F55:
|
||||
case 0x2022:
|
||||
case 0x2023:
|
||||
case 0x2024:
|
||||
case 0x2025:
|
||||
case 0x2026:
|
||||
case 0x2027:
|
||||
case 0x202E:
|
||||
case 0x202F:
|
||||
case 0x2030:
|
||||
return true;
|
||||
default:
|
||||
return CSkillActionMgr::GetInstance()->Sub77B4A0(skillId);
|
||||
}
|
||||
}
|
||||
|
||||
// OFFSET: 0x0077B4A0
|
||||
// FUNCTION: fn_08413
|
||||
bool CSkillActionMgr::Sub77B4A0(int skillId) {
|
||||
auto it = this->m_skillActions.find(skillId);
|
||||
std::unique_ptr<CSkillAction> action(it != this->m_skillActions.end() ? it->second() : nullptr);
|
||||
return action ? action->Slot00() : false;
|
||||
}
|
||||
|
||||
// OFFSET: 0x007737C0
|
||||
// FUNCTION: fn_08316
|
||||
|
|
|
|||
|
|
@ -3,10 +3,21 @@
|
|||
|
||||
#include <cstddef>
|
||||
#include <cstdint>
|
||||
#include <functional>
|
||||
#include <map>
|
||||
#include <new>
|
||||
#include <vector>
|
||||
|
||||
class CEfstAction;
|
||||
class CSkillObjectAction;
|
||||
class LuaScript;
|
||||
struct NormalItemSlot;
|
||||
|
||||
class CSkillAction {
|
||||
public:
|
||||
virtual bool Slot00() = 0;
|
||||
};
|
||||
|
||||
struct SkillInfoEntry {
|
||||
/* 0000 */ std::uint32_t unknown_0000;
|
||||
/* 0004 */ std::uint32_t unknown_0004;
|
||||
|
|
@ -45,6 +56,30 @@ public:
|
|||
/* 0038 */ std::vector<SkillInfoEntry> entries;
|
||||
};
|
||||
|
||||
// VTABLE: vt_00159
|
||||
class CSkillActionMgr {
|
||||
public:
|
||||
/* 0004 */ std::map<int, std::function<CSkillAction*()>> m_skillActions;
|
||||
/* 000C */ std::map<int, std::function<CEfstAction*()>> m_efstActions;
|
||||
/* 0014 */ std::map<int, std::function<CSkillObjectAction*()>> m_skillObjectActions;
|
||||
|
||||
virtual ~CSkillActionMgr();
|
||||
|
||||
static CSkillActionMgr* GetInstance();
|
||||
|
||||
bool Sub77B4A0(int skillId);
|
||||
};
|
||||
|
||||
extern CSkillActionMgr* g_skillActionMgr;
|
||||
|
||||
inline CSkillActionMgr* CSkillActionMgr::GetInstance() {
|
||||
if (!g_skillActionMgr) {
|
||||
g_skillActionMgr = new (std::nothrow) CSkillActionMgr;
|
||||
}
|
||||
|
||||
return g_skillActionMgr;
|
||||
}
|
||||
|
||||
void __stdcall Sub7739F0();
|
||||
bool Sub773A00(int skillId);
|
||||
bool Sub773CB0(int skillId);
|
||||
|
|
@ -54,6 +89,10 @@ static_assert(sizeof(SkillInfoEntry) == 8);
|
|||
#if defined(_WIN32) && !defined(_WIN64)
|
||||
static_assert(offsetof(SkillInfoEntry, unknown_0004) == 0x4);
|
||||
static_assert(sizeof(CSkillInfo) == 68);
|
||||
static_assert(offsetof(CSkillActionMgr, m_efstActions) == 0x0C);
|
||||
static_assert(offsetof(CSkillActionMgr, m_skillObjectActions) == 0x14);
|
||||
static_assert(sizeof(CSkillActionMgr) == 0x1C);
|
||||
static_assert(sizeof(CSkillAction) == 4);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue