From 31d8a6106277507dae836d436574942890c8059e Mon Sep 17 00:00:00 2001 From: fallenoak Date: Tue, 30 Dec 2025 10:24:27 -0600 Subject: [PATCH] feat(glue): implement Script_GetAvailableClasses --- src/glue/CCharacterCreationScript.cpp | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/glue/CCharacterCreationScript.cpp b/src/glue/CCharacterCreationScript.cpp index 154cb60..ca6b966 100644 --- a/src/glue/CCharacterCreationScript.cpp +++ b/src/glue/CCharacterCreationScript.cpp @@ -150,7 +150,30 @@ int32_t Script_GetAvailableRaces(lua_State* L) { } int32_t Script_GetAvailableClasses(lua_State* L) { - WHOA_UNIMPLEMENTED(0); + for (int32_t i = 0; i < g_chrClassesDB.GetNumRecords(); i++) { + auto classRec = g_chrClassesDB.GetRecordByIndex(i); + + auto displayName = CGUnit_C::GetDisplayClassNameFromRecord( + classRec, + static_cast(CCharacterCreation::s_character->m_data.sexID), + nullptr + ); + + int32_t accountExpansion = ClientServices::Connection()->m_accountExpansion; + int32_t requiredExpansion = classRec->m_requiredExpansion; + + if (displayName) { + lua_pushstring(L, displayName); + lua_pushstring(L, classRec->m_filename); + lua_pushnumber(L, accountExpansion >= requiredExpansion); + } else { + lua_pushnil(L); + lua_pushnil(L); + lua_pushnil(L); + } + } + + return g_chrClassesDB.GetNumRecords() * 3; } int32_t Script_GetClassesForRace(lua_State* L) {