From d76e6142b735b38d66d0ace8959d99c6f5279197 Mon Sep 17 00:00:00 2001 From: VDm Date: Sun, 13 Apr 2025 01:36:00 +0400 Subject: [PATCH] chore(glue): add skeleton of CCharacterComponent class --- lib/bc | 2 +- lib/common | 2 +- lib/squall | 2 +- lib/typhoon | 2 +- src/client/Client.cpp | 2 +- src/glue/CCharacterComponent.cpp | 1 + src/glue/CCharacterComponent.hpp | 17 +++++++++++++++++ src/glue/CCharacterCreation.cpp | 8 ++++++++ src/glue/CCharacterCreation.hpp | 25 +++++++++++++++++++++++++ src/glue/CCharacterSelection.cpp | 4 ++++ src/glue/CCharacterSelection.hpp | 1 + src/glue/CGlueMgr.cpp | 4 ++++ src/net/Types.hpp | 6 ++++++ src/ui/ScriptFunctionsCharCreate.cpp | 17 ++++++++++++++++- 14 files changed, 87 insertions(+), 6 deletions(-) create mode 100644 src/glue/CCharacterComponent.cpp create mode 100644 src/glue/CCharacterComponent.hpp create mode 100644 src/glue/CCharacterCreation.cpp create mode 100644 src/glue/CCharacterCreation.hpp diff --git a/lib/bc b/lib/bc index 4e116bd..367b814 160000 --- a/lib/bc +++ b/lib/bc @@ -1 +1 @@ -Subproject commit 4e116bd69a5d0d0c979ef43cf86cbb8181cc19c1 +Subproject commit 367b8149f36a1e4c2aad066e0cf9cd1e07ae7d88 diff --git a/lib/common b/lib/common index 0401d90..9a3b3ae 160000 --- a/lib/common +++ b/lib/common @@ -1 +1 @@ -Subproject commit 0401d901376995c7a209125b8cb12f1ceaa46fb7 +Subproject commit 9a3b3aeafd7e48194d0a5a3fbe459b965f5d12fa diff --git a/lib/squall b/lib/squall index ce9c709..af834ca 160000 --- a/lib/squall +++ b/lib/squall @@ -1 +1 @@ -Subproject commit ce9c709029f92dc5b0bed2d3739c5013e4b6b903 +Subproject commit af834cafa755de27a87b3400adb89b205e567166 diff --git a/lib/typhoon b/lib/typhoon index 0c3ceb8..328613d 160000 --- a/lib/typhoon +++ b/lib/typhoon @@ -1 +1 @@ -Subproject commit 0c3ceb876666f7b84dc8d4918eadbbc8e380cd5b +Subproject commit 328613d0e8ebc0ed46af63a1248d213be4fbf601 diff --git a/src/client/Client.cpp b/src/client/Client.cpp index 4a98693..cbc716f 100644 --- a/src/client/Client.cpp +++ b/src/client/Client.cpp @@ -471,7 +471,7 @@ int32_t InitializeGlobal() { // ); // sub_86D430(v8->m_intValue); - OsTimeStartup(SystemMethod2); + OsTimeStartup(Timing_QueryPerformanceCounter); // ConsoleCommandRegister("timingInfo", (int)sub_4032A0, 0, 0); diff --git a/src/glue/CCharacterComponent.cpp b/src/glue/CCharacterComponent.cpp new file mode 100644 index 0000000..b3e94e9 --- /dev/null +++ b/src/glue/CCharacterComponent.cpp @@ -0,0 +1 @@ +#include "glue/CCharacterComponent.cpp" diff --git a/src/glue/CCharacterComponent.hpp b/src/glue/CCharacterComponent.hpp new file mode 100644 index 0000000..22601dd --- /dev/null +++ b/src/glue/CCharacterComponent.hpp @@ -0,0 +1,17 @@ +#ifndef GLUE_C_CHARACTER_COMPONENT_HPP +#define GLUE_C_CHARACTER_COMPONENT_HPP + +#include "net/Types.hpp" +#include + +class CSimpleModelFFX; +class CM2Model; + +class CCharacterComponent { + public: + // Static variables + + // Static functions +}; + +#endif // GLUE_C_CHARACTER_COMPONENT_HPP diff --git a/src/glue/CCharacterCreation.cpp b/src/glue/CCharacterCreation.cpp new file mode 100644 index 0000000..a175055 --- /dev/null +++ b/src/glue/CCharacterCreation.cpp @@ -0,0 +1,8 @@ +#include "glue/CCharacterCreation.hpp" + +float CCharacterCreation::m_charFacing = 0.0; +CharacterCreationDisplay CCharacterCreation::m_character = {}; + +void CCharacterCreation::Initialize() { + CCharacterCreation::m_charFacing = 0.0; +} diff --git a/src/glue/CCharacterCreation.hpp b/src/glue/CCharacterCreation.hpp new file mode 100644 index 0000000..d48ad6d --- /dev/null +++ b/src/glue/CCharacterCreation.hpp @@ -0,0 +1,25 @@ +#ifndef GLUE_C_CHARACTER_CREATION_HPP +#define GLUE_C_CHARACTER_CREATION_HPP + +#include "net/Types.hpp" +#include + +class CSimpleModelFFX; +class CM2Model; + +struct CharacterCreationDisplay { + CHARACTER_CREATE_INFO m_characterInfo; + CM2Model* m_characterModel; +}; + +class CCharacterCreation { + public: + // Static variables + static float m_charFacing; + static CharacterCreationDisplay m_character; + + // Static functions + static void Initialize(); +}; + +#endif // GLUE_C_CHARACTER_CREATION_HPP diff --git a/src/glue/CCharacterSelection.cpp b/src/glue/CCharacterSelection.cpp index 889545e..b6fcc63 100644 --- a/src/glue/CCharacterSelection.cpp +++ b/src/glue/CCharacterSelection.cpp @@ -31,6 +31,10 @@ CharacterSelectionDisplay::CharacterSelectionDisplay() } +void CCharacterSelection::Initialize() { + // Empty method +} + void CCharacterSelection::RenderPrep() { // TODO } diff --git a/src/glue/CCharacterSelection.hpp b/src/glue/CCharacterSelection.hpp index f699b6f..27617dd 100644 --- a/src/glue/CCharacterSelection.hpp +++ b/src/glue/CCharacterSelection.hpp @@ -34,6 +34,7 @@ class CCharacterSelection { static int32_t m_selectionIndex; // Static functions + static void Initialize(); static void RenderPrep(); static void SetBackgroundModel(const char* modelPath); static void EnumerateCharactersCallback(CHARACTER_INFO& info, void* param); diff --git a/src/glue/CGlueMgr.cpp b/src/glue/CGlueMgr.cpp index 049efb4..b4c6be5 100644 --- a/src/glue/CGlueMgr.cpp +++ b/src/glue/CGlueMgr.cpp @@ -1,6 +1,7 @@ #include "glue/CGlueMgr.hpp" #include "glue/CRealmList.hpp" #include "glue/CCharacterSelection.hpp" +#include "glue/CCharacterCreation.hpp" #include "console/Console.hpp" #include "client/Client.hpp" #include "client/ClientServices.hpp" @@ -868,6 +869,9 @@ void CGlueMgr::Resume() { OsCreateDirectory("Logs", 0); + CCharacterSelection::Initialize(); + CCharacterCreation::Initialize(); + CWOWClientStatus status; if (!SLogCreate("Logs\\GlueXML.log", 0, &status.m_logFile)) { diff --git a/src/net/Types.hpp b/src/net/Types.hpp index 6c506b8..bd65e34 100644 --- a/src/net/Types.hpp +++ b/src/net/Types.hpp @@ -1286,6 +1286,12 @@ struct CHARACTER_INFO { uint8_t firstLogin; }; +struct CHARACTER_CREATE_INFO { + uint8_t unk[24]; + uint32_t raceID; + uint32_t sexID; +}; + struct CLIENT_NETSTATS { uint32_t bytesSent; uint32_t messagesSent; diff --git a/src/ui/ScriptFunctionsCharCreate.cpp b/src/ui/ScriptFunctionsCharCreate.cpp index b1b869e..2f49eb6 100644 --- a/src/ui/ScriptFunctionsCharCreate.cpp +++ b/src/ui/ScriptFunctionsCharCreate.cpp @@ -2,6 +2,9 @@ #include "ui/Types.hpp" #include "util/Lua.hpp" #include "util/Unimplemented.hpp" +#include "db/Db.hpp" +#include "clientobject/Unit_C.hpp" +#include "glue/CCharacterCreation.hpp" #include int32_t Script_SetCharCustomizeFrame(lua_State* L) { @@ -17,7 +20,19 @@ int32_t Script_ResetCharCustomize(lua_State* L) { } int32_t Script_GetNameForRace(lua_State* L) { - WHOA_UNIMPLEMENTED(0); + auto raceID = CCharacterCreation::m_character.m_characterInfo.raceID; + auto sexID = CCharacterCreation::m_character.m_characterInfo.sexID; + auto record = g_chrRacesDB.GetRecord(raceID); + auto raceName = CGUnit_C::GetDisplayRaceNameFromRecord(record, sexID); + if (record && raceName) { + lua_pushstring(L, raceName); + lua_pushstring(L, record->m_clientFileString); + } else { + lua_pushnil(L); + lua_pushnil(L); + } + + return 2; } int32_t Script_GetFactionForRace(lua_State* L) {