From 0962e5952e14ffda0836e05a914acf4c41c70a23 Mon Sep 17 00:00:00 2001 From: fallenoak Date: Mon, 2 Feb 2026 20:30:52 -0600 Subject: [PATCH] feat(ui): implement Script_FillLocalizedClassList --- src/ui/game/ScriptEvents.cpp | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/ui/game/ScriptEvents.cpp b/src/ui/game/ScriptEvents.cpp index 25d33a3..f58cce5 100644 --- a/src/ui/game/ScriptEvents.cpp +++ b/src/ui/game/ScriptEvents.cpp @@ -1,11 +1,13 @@ #include "ui/game/ScriptEvents.hpp" -#include "object/client/ObjMgr.hpp" +#include "db/Db.hpp" +#include "object/Client.hpp" #include "ui/FrameScript.hpp" #include "ui/ScriptFunctionsSystem.hpp" #include "ui/game/CGGameUI.hpp" #include "ui/game/ScriptUtil.hpp" #include "util/GUID.hpp" #include "util/Lua.hpp" +#include "util/StringTo.hpp" #include "util/Unimplemented.hpp" namespace { @@ -707,7 +709,29 @@ int32_t Script_IsXPUserDisabled(lua_State* L) { } int32_t Script_FillLocalizedClassList(lua_State* L) { - WHOA_UNIMPLEMENTED(0); + if (lua_type(L, 1) != LUA_TTABLE) { + luaL_error(L, "Usage: FillLocalizedClassList(classTable[, isFemale])"); + return 0; + } + + auto isFemale = StringToBOOL(L, 2, 0); + auto sex = isFemale ? UNITSEX_FEMALE : UNITSEX_MALE; + + lua_settop(L, 1); + + for (int32_t i = 0; i < g_chrClassesDB.GetNumRecords(); ++i) { + auto classRec = g_chrClassesDB.GetRecordByIndex(i); + if (classRec) { + auto displayName = CGUnit_C::GetDisplayClassNameFromRecord(classRec, sex, 0); + + lua_pushstring(L, classRec->m_filename); + lua_pushstring(L, displayName); + + lua_settable(L, -3); + } + } + + return 1; } }