diff --git a/src/client/Client.cpp b/src/client/Client.cpp index 66919f3..8863218 100644 --- a/src/client/Client.cpp +++ b/src/client/Client.cpp @@ -9,7 +9,7 @@ #include "console/Screen.hpp" #include "db/Db.hpp" #include "glue/CGlueMgr.hpp" -#include "glue/GlueScript.hpp" +#include "glue/GlueScriptEvents.hpp" #include "gx/Screen.hpp" #include "gx/Texture.hpp" #include "model/Model2.hpp" diff --git a/src/ui/ScriptFunctionsCharCreate.cpp b/src/glue/CCharacterCreationScript.cpp similarity index 92% rename from src/ui/ScriptFunctionsCharCreate.cpp rename to src/glue/CCharacterCreationScript.cpp index b1b869e..35f77c0 100644 --- a/src/ui/ScriptFunctionsCharCreate.cpp +++ b/src/glue/CCharacterCreationScript.cpp @@ -1,4 +1,5 @@ -#include "ui/ScriptFunctions.hpp" +#include "glue/CCharacterCreationScript.hpp" +#include "ui/FrameScript.hpp" #include "ui/Types.hpp" #include "util/Lua.hpp" #include "util/Unimplemented.hpp" @@ -132,7 +133,7 @@ int32_t Script_GetCreateBackgroundModel(lua_State* L) { WHOA_UNIMPLEMENTED(0); } -FrameScript_Method FrameScript::s_ScriptFunctions_CharCreate[NUM_SCRIPT_FUNCTIONS_CHAR_CREATE] = { +static FrameScript_Method s_ScriptFunctions[NUM_SCRIPT_FUNCTIONS_CHAR_CREATE] = { { "SetCharCustomizeFrame", &Script_SetCharCustomizeFrame }, { "SetCharCustomizeBackground", &Script_SetCharCustomizeBackground }, { "ResetCharCustomize", &Script_ResetCharCustomize }, @@ -166,3 +167,12 @@ FrameScript_Method FrameScript::s_ScriptFunctions_CharCreate[NUM_SCRIPT_FUNCTION { "IsRaceClassRestricted", &Script_IsRaceClassRestricted }, { "GetCreateBackgroundModel", &Script_GetCreateBackgroundModel } }; + +void CharacterCreateRegisterScriptFunctions() { + for (int32_t i = 0; i < NUM_SCRIPT_FUNCTIONS_CHAR_CREATE; ++i) { + FrameScript_RegisterFunction( + s_ScriptFunctions[i].name, + s_ScriptFunctions[i].method + ); + } +} diff --git a/src/glue/CCharacterCreationScript.hpp b/src/glue/CCharacterCreationScript.hpp new file mode 100644 index 0000000..804ce18 --- /dev/null +++ b/src/glue/CCharacterCreationScript.hpp @@ -0,0 +1,8 @@ +#ifndef GLUE_C_CHARACTER_CREATION_SCRIPT_HPP +#define GLUE_C_CHARACTER_CREATION_SCRIPT_HPP + +#define NUM_SCRIPT_FUNCTIONS_CHAR_CREATE 32 + +void CharacterCreateRegisterScriptFunctions(); + +#endif diff --git a/src/ui/ScriptFunctionsCharSelect.cpp b/src/glue/CCharacterSelectionScript.cpp similarity index 94% rename from src/ui/ScriptFunctionsCharSelect.cpp rename to src/glue/CCharacterSelectionScript.cpp index 059178e..72cc6ae 100644 --- a/src/ui/ScriptFunctionsCharSelect.cpp +++ b/src/glue/CCharacterSelectionScript.cpp @@ -1,7 +1,7 @@ +#include "glue/CCharacterSelectionScript.hpp" #include "db/Db.hpp" #include "glue/CCharacterSelection.hpp" #include "object/client/Unit_C.hpp" -#include "ui/ScriptFunctions.hpp" #include "ui/Types.hpp" #include "ui/simple/CSimpleModelFFX.hpp" #include "util/Lua.hpp" @@ -259,7 +259,7 @@ int32_t Script_GetSelectBackgroundModel(lua_State* L) { return 1; } -FrameScript_Method FrameScript::s_ScriptFunctions_CharSelect[NUM_SCRIPT_FUNCTIONS_CHAR_SELECT] = { +static FrameScript_Method s_ScriptFunctions[NUM_SCRIPT_FUNCTIONS_CHAR_SELECT] = { { "SetCharSelectModelFrame", &Script_SetCharSelectModelFrame }, { "SetCharSelectBackground", &Script_SetCharSelectBackground }, { "GetCharacterListUpdate", &Script_GetCharacterListUpdate }, @@ -274,3 +274,12 @@ FrameScript_Method FrameScript::s_ScriptFunctions_CharSelect[NUM_SCRIPT_FUNCTION { "SetCharacterSelectFacing", &Script_SetCharacterSelectFacing }, { "GetSelectBackgroundModel", &Script_GetSelectBackgroundModel } }; + +void CharSelectRegisterScriptFunctions() { + for (int32_t i = 0; i < NUM_SCRIPT_FUNCTIONS_CHAR_SELECT; ++i) { + FrameScript_RegisterFunction( + s_ScriptFunctions[i].name, + s_ScriptFunctions[i].method + ); + } +} diff --git a/src/glue/CCharacterSelectionScript.hpp b/src/glue/CCharacterSelectionScript.hpp new file mode 100644 index 0000000..8632843 --- /dev/null +++ b/src/glue/CCharacterSelectionScript.hpp @@ -0,0 +1,8 @@ +#ifndef GLUE_C_CHARACTER_SELECTION_SCRIPT_HPP +#define GLUE_C_CHARACTER_SELECTION_SCRIPT_HPP + +#define NUM_SCRIPT_FUNCTIONS_CHAR_SELECT 13 + +void CharSelectRegisterScriptFunctions(); + +#endif diff --git a/src/glue/CGlueMgr.cpp b/src/glue/CGlueMgr.cpp index 220540a..e92ddb9 100644 --- a/src/glue/CGlueMgr.cpp +++ b/src/glue/CGlueMgr.cpp @@ -5,10 +5,14 @@ #include "console/CVar.hpp" #include "db/Db.hpp" #include "ffx/Effect.hpp" +#include "glue/CCharacterCreationScript.hpp" #include "glue/CCharacterSelection.hpp" +#include "glue/CCharacterSelectionScript.hpp" #include "glue/CRealmList.hpp" +#include "glue/CRealmListScript.hpp" #include "glue/Character.hpp" #include "glue/GlueScript.hpp" +#include "glue/GlueScriptEvents.hpp" #include "glue/Types.hpp" #include "gx/Coordinate.hpp" #include "gx/Device.hpp" diff --git a/src/ui/ScriptFunctionsRealmList.cpp b/src/glue/CRealmListScript.cpp similarity index 96% rename from src/ui/ScriptFunctionsRealmList.cpp rename to src/glue/CRealmListScript.cpp index 95a6dee..10d7349 100644 --- a/src/ui/ScriptFunctionsRealmList.cpp +++ b/src/glue/CRealmListScript.cpp @@ -1,9 +1,10 @@ -#include "ui/ScriptFunctions.hpp" +#include "glue/CRealmListScript.hpp" #include "client/ClientServices.hpp" #include "db/Db.hpp" #include "glue/CGlueMgr.hpp" #include "glue/CRealmList.hpp" #include "util/StringTo.hpp" +#include "ui/FrameScript.hpp" #include "ui/Types.hpp" #include "util/Lua.hpp" #include "util/Unimplemented.hpp" @@ -341,7 +342,7 @@ int32_t Script_IsInvalidLocale(lua_State* L) { WHOA_UNIMPLEMENTED(0); } -FrameScript_Method FrameScript::s_ScriptFunctions_RealmList[NUM_SCRIPT_FUNCTIONS_REALM_LIST] = { +static FrameScript_Method s_ScriptFunctions[NUM_SCRIPT_FUNCTIONS_REALM_LIST] = { { "RequestRealmList", &Script_RequestRealmList }, { "RealmListUpdateRate", &Script_RealmListUpdateRate }, { "CancelRealmListQuery", &Script_CancelRealmListQuery }, @@ -357,3 +358,12 @@ FrameScript_Method FrameScript::s_ScriptFunctions_RealmList[NUM_SCRIPT_FUNCTIONS { "IsTournamentRealmCategory", &Script_IsTournamentRealmCategory }, { "IsInvalidLocale", &Script_IsInvalidLocale } }; + +void RealmListRegisterScriptFunctions() { + for (int32_t i = 0; i < NUM_SCRIPT_FUNCTIONS_REALM_LIST; ++i) { + FrameScript_RegisterFunction( + s_ScriptFunctions[i].name, + s_ScriptFunctions[i].method + ); + } +} diff --git a/src/glue/CRealmListScript.hpp b/src/glue/CRealmListScript.hpp new file mode 100644 index 0000000..a1e0f99 --- /dev/null +++ b/src/glue/CRealmListScript.hpp @@ -0,0 +1,8 @@ +#ifndef GLUE_C_REALM_LIST_SCRIPT_HPP +#define GLUE_C_REALM_LIST_SCRIPT_HPP + +#define NUM_SCRIPT_FUNCTIONS_REALM_LIST 14 + +void RealmListRegisterScriptFunctions(); + +#endif diff --git a/src/glue/GlueScript.cpp b/src/glue/GlueScript.cpp index 38f0680..1730888 100644 --- a/src/glue/GlueScript.cpp +++ b/src/glue/GlueScript.cpp @@ -1,48 +1,912 @@ #include "glue/GlueScript.hpp" -#include "glue/Types.hpp" +#include "client/Client.hpp" +#include "client/ClientServices.hpp" +#include "console/CVar.hpp" +#include "db/Db.hpp" +#include "glue/CGlueMgr.hpp" +#include "gx/Coordinate.hpp" +#include "net/connection/ClientConnection.hpp" +#include "sound/Interface.hpp" +#include "ui/FrameScript.hpp" +#include "ui/ScriptFunctionsShared.hpp" +#include "ui/Types.hpp" +#include "ui/simple/CSimpleTop.hpp" +#include "util/Lua.hpp" +#include "util/SFile.hpp" +#include "util/Unimplemented.hpp" +#include -const char* g_glueScriptEvents[NUM_GLUESCRIPTEVENTS]; - -void GlueScriptEventsInitialize() { - g_glueScriptEvents[SET_GLUE_SCREEN] = "SET_GLUE_SCREEN"; - g_glueScriptEvents[START_GLUE_MUSIC] = "START_GLUE_MUSIC"; - g_glueScriptEvents[DISCONNECTED_FROM_SERVER] = "DISCONNECTED_FROM_SERVER"; - g_glueScriptEvents[OPEN_STATUS_DIALOG] = "OPEN_STATUS_DIALOG"; - g_glueScriptEvents[UPDATE_STATUS_DIALOG] = "UPDATE_STATUS_DIALOG"; - g_glueScriptEvents[CLOSE_STATUS_DIALOG] = "CLOSE_STATUS_DIALOG"; - g_glueScriptEvents[ADDON_LIST_UPDATE] = "ADDON_LIST_UPDATE"; - g_glueScriptEvents[CHARACTER_LIST_UPDATE] = "CHARACTER_LIST_UPDATE"; - g_glueScriptEvents[UPDATE_SELECTED_CHARACTER] = "UPDATE_SELECTED_CHARACTER"; - g_glueScriptEvents[OPEN_REALM_LIST] = "OPEN_REALM_LIST"; - g_glueScriptEvents[GET_PREFERRED_REALM_INFO] = "GET_PREFERRED_REALM_INFO"; - g_glueScriptEvents[UPDATE_SELECTED_RACE] = "UPDATE_SELECTED_RACE"; - g_glueScriptEvents[SELECT_LAST_CHARACTER] = "SELECT_LAST_CHARACTER"; - g_glueScriptEvents[SELECT_FIRST_CHARACTER] = "SELECT_FIRST_CHARACTER"; - g_glueScriptEvents[GLUE_SCREENSHOT_SUCCEEDED] = "GLUE_SCREENSHOT_SUCCEEDED"; - g_glueScriptEvents[GLUE_SCREENSHOT_FAILED] = "GLUE_SCREENSHOT_FAILED"; - g_glueScriptEvents[PATCH_UPDATE_PROGRESS] = "PATCH_UPDATE_PROGRESS"; - g_glueScriptEvents[PATCH_DOWNLOADED] = "PATCH_DOWNLOADED"; - g_glueScriptEvents[SUGGEST_REALM] = "SUGGEST_REALM"; - g_glueScriptEvents[SUGGEST_REALM_WRONG_PVP] = "SUGGEST_REALM_WRONG_PVP"; - g_glueScriptEvents[SUGGEST_REALM_WRONG_CATEGORY] = "SUGGEST_REALM_WRONG_CATEGORY"; - g_glueScriptEvents[SHOW_SERVER_ALERT] = "SHOW_SERVER_ALERT"; - g_glueScriptEvents[FRAMES_LOADED] = "FRAMES_LOADED"; - g_glueScriptEvents[FORCE_RENAME_CHARACTER] = "FORCE_RENAME_CHARACTER"; - g_glueScriptEvents[FORCE_DECLINE_CHARACTER] = "FORCE_DECLINE_CHARACTER"; - g_glueScriptEvents[SHOW_SURVEY_NOTIFICATION] = "SHOW_SURVEY_NOTIFICATION"; - g_glueScriptEvents[PLAYER_ENTER_PIN] = "PLAYER_ENTER_PIN"; - g_glueScriptEvents[CLIENT_ACCOUNT_MISMATCH] = "CLIENT_ACCOUNT_MISMATCH"; - g_glueScriptEvents[PLAYER_ENTER_MATRIX] = "PLAYER_ENTER_MATRIX"; - g_glueScriptEvents[SCANDLL_ERROR] = "SCANDLL_ERROR"; - g_glueScriptEvents[SCANDLL_DOWNLOADING] = "SCANDLL_DOWNLOADING"; - g_glueScriptEvents[SCANDLL_FINISHED] = "SCANDLL_FINISHED"; - g_glueScriptEvents[SERVER_SPLIT_NOTICE] = "SERVER_SPLIT_NOTICE"; - g_glueScriptEvents[TIMER_ALERT] = "TIMER_ALERT"; - g_glueScriptEvents[ACCOUNT_MESSAGES_AVAILABLE] = "ACCOUNT_MESSAGES_AVAILABLE"; - g_glueScriptEvents[ACCOUNT_MESSAGES_HEADERS_LOADED] = "ACCOUNT_MESSAGES_HEADERS_LOADED"; - g_glueScriptEvents[ACCOUNT_MESSAGES_BODY_LOADED] = "ACCOUNT_MESSAGES_BODY_LOADED"; - g_glueScriptEvents[CLIENT_TRIAL] = "CLIENT_TRIAL"; - g_glueScriptEvents[PLAYER_ENTER_TOKEN] = "PLAYER_ENTER_TOKEN"; - g_glueScriptEvents[GAME_ACCOUNTS_UPDATED] = "GAME_ACCOUNTS_UPDATED"; - g_glueScriptEvents[CLIENT_CONVERTED] = "CLIENT_CONVERTED"; +int32_t Script_IsShiftKeyDown(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_GetBuildInfo(lua_State* L) { + // TODO use compile-time defines to control these values + + auto versionText = FrameScript_GetText("VERSION", -1, GENDER_NOT_APPLICABLE); + lua_pushstring(L, versionText); + + auto releaseText = FrameScript_GetText("RELEASE_BUILD", -1, GENDER_NOT_APPLICABLE); + lua_pushstring(L, releaseText); + + lua_pushstring(L, "3.3.5"); + lua_pushstring(L, "12340"); + lua_pushstring(L, "Jun 24 2010"); + + return 5; +} + +int32_t Script_GetLocale(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_GetSavedAccountName(lua_State* L) { + lua_pushstring(L, Client::g_accountNameVar->GetString()); + + return 1; +} + +int32_t Script_SetSavedAccountName(lua_State* L) { + if (!lua_isstring(L, 1)) { + return luaL_error(L, "Usage: SetSavedAccountName(\"accountName\")"); + } + + const char* accountName = lua_tostring(L, 1); + + Client::g_accountNameVar->Set(accountName, true, false, false, true); + + return 0; +} + +int32_t Script_GetUsesToken(lua_State* L) { + // TODO + lua_pushboolean(L, 0); + + return 1; +} + +int32_t Script_SetUsesToken(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_GetSavedAccountList(lua_State* L) { + lua_pushstring(L, Client::g_accountListVar->GetString()); + return 1; +} + +int32_t Script_SetSavedAccountList(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_SetCurrentScreen(lua_State* L) { + if (!lua_isstring(L, 1)) { + return luaL_error(L, "Usage: SetCurrentScreen(\"screen\")"); + } + + auto screen = lua_tostring(L, 1); + CGlueMgr::UpdateCurrentScreen(screen); + + // TODO + // if (!Blizzard::Streaming::IsStreamingMode()) { + // Sub4BAE10(); + // } + + return 0; +} + +int32_t Script_QuitGame(lua_State* L) { + CGlueMgr::QuitGame(); + + return 0; +} + +int32_t Script_QuitGameAndRunLauncher(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_PlayGlueMusic(lua_State* L) { + if (!lua_isstring(L, 1)) { + return luaL_error(L, "Usage: PlayGlueMusic(\"filename\")"); + } + + auto name = lua_tostring(L, 1); + + SI2::StartGlueMusic(name); + + return 0; +} + +int32_t Script_PlayCreditsMusic(lua_State* L) { + if (!lua_isstring(L, 1)) { + return luaL_error(L, "Usage: PlayCreditsMusic( \"Sound kit name\" )"); + } + + auto name = lua_tostring(L, 1); + + SI2::StartCreditsMusic(name); + + return 0; +} + +int32_t Script_StopGlueMusic(lua_State* L) { + SI2::StopCreditsMusic(); + SI2::StopGlueMusic(-1.0f); + + return 0; +} + +int32_t Script_GetMovieResolution(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_GetScreenWidth(lua_State* L) { + float v1 = NDCToDDCWidth(1.0); + float v2 = CoordinateGetAspectCompensation() * 1024.0 * v1; + float v3 = DDCToNDCWidth(v2); + + lua_pushnumber(L, v3); + + return 1; +} + +int32_t Script_GetScreenHeight(lua_State* L) { + float v1 = NDCToDDCHeight(1.0); + float v2 = CoordinateGetAspectCompensation() * 1024.0 * v1; + float v3 = DDCToNDCWidth(v2); + + lua_pushnumber(L, v3); + + return 1; +} + +int32_t Script_LaunchURL(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_ShowTOSNotice(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_TOSAccepted(lua_State* L) { + // TODO + lua_pushboolean(L, 1); + + return 1; +} + +int32_t Script_AcceptTOS(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_ShowEULANotice(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_EULAAccepted(lua_State* L) { + // TODO + lua_pushboolean(L, 1); + + return 1; +} + +int32_t Script_AcceptEULA(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_ShowTerminationWithoutNoticeNotice(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_TerminationWithoutNoticeAccepted(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_AcceptTerminationWithoutNotice(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_ShowScanningNotice(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_ScanningAccepted(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_AcceptScanning(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_ShowContestNotice(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_ContestAccepted(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_AcceptContest(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_DefaultServerLogin(lua_State* L) { + if (!lua_isstring(L, 1) || !lua_isstring(L, 2)) { + luaL_error(L, "Usage: DefaultServerLogin(\"accountName\", \"password\")"); + } + + auto accountName = lua_tostring(L, 1); + auto password = lua_tostring(L, 2); + + CGlueMgr::LoginServerLogin(accountName, password); + + return 0; +} + +int32_t Script_StatusDialogClick(lua_State* L) { + CGlueMgr::StatusDialogClick(); + + return 0; +} + +int32_t Script_GetServerName(lua_State* L) { + auto selectedRealmName = ClientServices::GetSelectedRealmName(); + auto selectedRealm = ClientServices::GetSelectedRealm(); + + auto pvp = false; + auto rp = false; + + // default down to true: if realm config isn't found, consider realm down + auto down = true; + + if (selectedRealm) { + for (int32_t i = 0; i < g_cfg_ConfigsDB.GetNumRecords(); i++) { + auto config = g_cfg_ConfigsDB.GetRecordByIndex(i); + + if (config->m_realmType == selectedRealm->type) { + pvp = config->m_playerKillingAllowed != 0; + rp = config->m_roleplaying != 0; + down = selectedRealm->flags & 0x2; + + break; + } + } + } + + // name + lua_pushstring(L, selectedRealmName); + + // pvp + if (pvp) { + lua_pushnumber(L, 1.0); + } else { + lua_pushnil(L); + } + + // rp + if (rp) { + lua_pushnumber(L, 1.0); + } else { + lua_pushnil(L); + } + + // down + if (down) { + lua_pushnumber(L, 1.0); + } else { + lua_pushnil(L); + } + + return 4; +} + +int32_t Script_DisconnectFromServer(lua_State* L) { + if (ClientServices::IsConnected()) { + CGlueMgr::m_disconnectPending = 1; + ClientServices::Disconnect(); + } + + ClientServices::LoginConnection()->Logoff(); + + return 0; +} + +int32_t Script_IsConnectedToServer(lua_State* L) { + if (ClientServices::IsConnected()) { + lua_pushnumber(L, 1.0); + } else { + lua_pushnil(L); + } + + return 1; +} + +int32_t Script_EnterWorld(lua_State* L) { + CGlueMgr::EnterWorld(); + + return 0; +} + +int32_t Script_Screenshot(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_PatchDownloadProgress(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_PatchDownloadCancel(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_PatchDownloadApply(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_GetNumAddOns(lua_State* L) { + // TODO + lua_pushnumber(L, 0); + + return 1; +} + +int32_t Script_GetAddOnInfo(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_LaunchAddOnURL(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_GetAddOnDependencies(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_GetAddOnEnableState(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_EnableAddOn(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_EnableAllAddOns(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_DisableAddOn(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_DisableAllAddOns(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_SaveAddOns(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_ResetAddOns(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_IsAddonVersionCheckEnabled(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_SetAddonVersionCheck(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_GetCursorPosition(lua_State* L) { + float cursorX = 0.0f; + float cursorY = 0.0f; + + NDCToDDC( + CSimpleTop::s_instance->m_mousePosition.x, + CSimpleTop::s_instance->m_mousePosition.y, + &cursorX, + &cursorY + ); + + float v1 = (CoordinateGetAspectCompensation() * 1024.0f) * cursorX; + float v2 = DDCToNDCWidth(v1); + lua_pushnumber(L, v2); + + float v3 = (CoordinateGetAspectCompensation() * 1024.0f) * cursorY; + float v4 = DDCToNDCWidth(v3); + lua_pushnumber(L, v4); + + return 2; +} + +int32_t Script_ShowCursor(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_HideCursor(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_GetBillingTimeRemaining(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_GetBillingPlan(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_GetBillingTimeRested(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_SurveyNotificationDone(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_PINEntered(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_PlayGlueAmbience(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_StopGlueAmbience(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_GetCreditsText(lua_State* L) { + if (!lua_isnumber(L, 1)) { + luaL_error(L, "Usage: Script_GetCreditText(versionIndex)"); + } + + auto versionIndex = static_cast(lua_tonumber(L, 1)); + + const char* filename; + if (versionIndex == 1) { + filename = "credits.html"; + } else if (versionIndex == 2) { + filename = "credits_BC.html"; + } else { + filename = "credits_LK.html"; + } + + void* data; + if (SFile::Load(nullptr, filename, &data, nullptr, 1, 0x1, nullptr)) { + lua_pushstring(L, static_cast(data)); + SFile::Unload(data); + } + + return 1; +} + +int32_t Script_GetClientExpansionLevel(lua_State* L) { + // TODO + // v1 = sub_402A40(); + + int32_t v1 = 2; + + lua_pushnumber(L, v1 + 1); + + return 1; +} + +int32_t Script_MatrixEntered(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_MatrixRevert(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_MatrixCommit(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_GetMatrixCoordinates(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_ScanDLLStart(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_ScanDLLContinueAnyway(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_IsScanDLLFinished(lua_State* L) { + // TODO + lua_pushboolean(L, 1); + + return 1; +} + +int32_t Script_IsWindowsClient(lua_State* L) { +#if defined(WHOA_SYSTEM_WIN) + lua_pushnumber(L, 1.0); +#else + lua_pushnil(L); +#endif + + return 1; +} + +int32_t Script_IsMacClient(lua_State* L) { +#if defined(WHOA_SYSTEM_MAC) + lua_pushnumber(L, 1.0); +#else + lua_pushnil(L); +#endif + + return 1; +} + +int32_t Script_IsLinuxClient(lua_State* L) { +#if defined(WHOA_SYSTEM_LINUX) + lua_pushnumber(L, 1.0); +#else + lua_pushnil(L); +#endif + + return 1; +} + +int32_t Script_SetRealmSplitState(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_RequestRealmSplitInfo(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_CancelLogin(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_GetCVar(lua_State* L) { + if (!lua_isstring(L, 1)) { + return luaL_error(L, "Usage: GetCVar(\"cvar\")"); + } + + auto name = lua_tostring(L, 1); + auto var = CVar::LookupRegistered(name); + + if (!var) { + return luaL_error(L, "Couldn't find CVar named '%s'", name); + } + + lua_pushstring(L, var->GetString()); + + return 1; +} + +int32_t Script_GetCVarBool(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_SetCVar(lua_State* L) { + if (!lua_isstring(L, 1)) { + return luaL_error(L, "Usage: SetCVar(\"cvar\", value [, \"scriptCvar\")"); + } + + auto varName = lua_tostring(L, 1); + auto var = CVar::LookupRegistered(varName); + + if (!var) { + return luaL_error(L, "Couldn't find CVar named '%s'", varName); + } + + if (var->m_flags & 0x4) { + return luaL_error(L, "\"%s\" is read-only", varName); + } + + auto value = lua_tostring(L, 2); + if (!value) { + value = "0"; + } + + var->Set(value, true, false, false, true); + + return 0; +} + +int32_t Script_GetCVarDefault(lua_State* L) { + if (!lua_isstring(L, 1)) { + return luaL_error(L, "Usage: GetCVarDefault(\"cvar\")"); + } + + auto varName = lua_tostring(L, 1); + auto var = CVar::LookupRegistered(varName); + + if (!var) { + return luaL_error(L, "Couldn't find CVar named '%s'", varName); + } + + auto defaultValue = var->GetDefaultValue(); + + if (defaultValue) { + lua_pushstring(L, defaultValue); + } else { + lua_pushnil(L); + } + + return 1; +} + +int32_t Script_GetCVarMin(lua_State* L) { + if (!lua_isstring(L, 1)) { + return luaL_error(L, "Usage: GetCVarMin(\"cvar\")"); + } + + auto varName = lua_tostring(L, 1); + auto var = CVar::LookupRegistered(varName); + + if (!var) { + return luaL_error(L, "Couldn't find CVar named '%s'", varName); + } + + if (!SStrCmpI(var->m_key.GetString(), "extShadowQuality")) { + lua_pushnumber(L, 0.0); + } else if (!SStrCmpI(var->m_key.GetString(), "farclip")) { + lua_pushnumber(L, 177.0); + } else { + lua_pushnil(L); + } + + return 1; +} + +int32_t Script_GetCVarMax(lua_State* L) { + if (!lua_isstring(L, 1)) { + return luaL_error(L, "Usage: GetCVarMax(\"cvar\")"); + } + + auto varName = lua_tostring(L, 1); + auto var = CVar::LookupRegistered(varName); + + if (!var) { + return luaL_error(L, "Couldn't find CVar named '%s'", varName); + } + + if (!SStrCmpI(var->m_key.GetString(), "extShadowQuality")) { + // TODO CGxDevice calls to determine max shadow quality + lua_pushnumber(L, 5.0); + } else if (!SStrCmpI(var->m_key.GetString(), "farclip")) { + lua_pushnumber(L, 1277.0); + } else { + lua_pushnil(L); + } + + return 1; +} + +int32_t Script_GetCVarAbsoluteMin(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_GetCVarAbsoluteMax(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_GetChangedOptionWarnings(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_AcceptChangedOptionWarnings(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_ShowChangedOptionWarnings(lua_State* L) { + // TODO + lua_pushnil(L); + + return 1; +} + +int32_t Script_TokenEntered(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_GetNumDeclensionSets(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_DeclineName(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_GetNumGameAccounts(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_GetGameAccountInfo(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_SetGameAccount(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_StopAllSFX(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_SetClearConfigData(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_RestartGx(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_RestoreVideoResolutionDefaults(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_RestoreVideoEffectsDefaults(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_RestoreVideoStereoDefaults(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_IsStreamingMode(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_IsStreamingTrial(lua_State* L) { + return SFile::IsStreamingTrial(); +} + +int32_t Script_IsConsoleActive(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_RunScript(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_ReadyForAccountDataTimes(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +int32_t Script_IsTrialAccount(lua_State* L) { + // TODO + + lua_pushnil(L); + return 1; +} + +int32_t Script_IsSystemSupported(lua_State* L) { + // TODO + + lua_pushboolean(L, 1); + return 1; +} + +static FrameScript_Method s_ScriptFunctions[NUM_SCRIPT_FUNCTIONS_GLUE_SCRIPT_EVENTS] = { + { "IsShiftKeyDown", &Script_IsShiftKeyDown }, + { "GetBuildInfo", &Script_GetBuildInfo }, + { "GetLocale", &Script_GetLocale }, + { "GetSavedAccountName", &Script_GetSavedAccountName }, + { "SetSavedAccountName", &Script_SetSavedAccountName }, + { "GetUsesToken", &Script_GetUsesToken }, + { "SetUsesToken", &Script_SetUsesToken }, + { "GetSavedAccountList", &Script_GetSavedAccountList }, + { "SetSavedAccountList", &Script_SetSavedAccountList }, + { "SetCurrentScreen", &Script_SetCurrentScreen }, + { "QuitGame", &Script_QuitGame }, + { "QuitGameAndRunLauncher", &Script_QuitGameAndRunLauncher }, + { "PlayGlueMusic", &Script_PlayGlueMusic }, + { "PlayCreditsMusic", &Script_PlayCreditsMusic }, + { "StopGlueMusic", &Script_StopGlueMusic }, + { "GetMovieResolution", &Script_GetMovieResolution }, + { "GetScreenWidth", &Script_GetScreenWidth }, + { "GetScreenHeight", &Script_GetScreenHeight }, + { "LaunchURL", &Script_LaunchURL }, + { "ShowTOSNotice", &Script_ShowTOSNotice }, + { "TOSAccepted", &Script_TOSAccepted }, + { "AcceptTOS", &Script_AcceptTOS }, + { "ShowEULANotice", &Script_ShowEULANotice }, + { "EULAAccepted", &Script_EULAAccepted }, + { "AcceptEULA", &Script_AcceptEULA }, + { "ShowTerminationWithoutNoticeNotice", &Script_ShowTerminationWithoutNoticeNotice }, + { "TerminationWithoutNoticeAccepted", &Script_TerminationWithoutNoticeAccepted }, + { "AcceptTerminationWithoutNotice", &Script_AcceptTerminationWithoutNotice }, + { "ShowScanningNotice", &Script_ShowScanningNotice }, + { "ScanningAccepted", &Script_ScanningAccepted }, + { "AcceptScanning", &Script_AcceptScanning }, + { "ShowContestNotice", &Script_ShowContestNotice }, + { "ContestAccepted", &Script_ContestAccepted }, + { "AcceptContest", &Script_AcceptContest }, + { "DefaultServerLogin", &Script_DefaultServerLogin }, + { "StatusDialogClick", &Script_StatusDialogClick }, + { "GetServerName", &Script_GetServerName }, + { "DisconnectFromServer", &Script_DisconnectFromServer }, + { "IsConnectedToServer", &Script_IsConnectedToServer }, + { "EnterWorld", &Script_EnterWorld }, + { "Screenshot", &Script_Screenshot }, + { "PatchDownloadProgress", &Script_PatchDownloadProgress }, + { "PatchDownloadCancel", &Script_PatchDownloadCancel }, + { "PatchDownloadApply", &Script_PatchDownloadApply }, + { "GetNumAddOns", &Script_GetNumAddOns }, + { "GetAddOnInfo", &Script_GetAddOnInfo }, + { "LaunchAddOnURL", &Script_LaunchAddOnURL }, + { "GetAddOnDependencies", &Script_GetAddOnDependencies }, + { "GetAddOnEnableState", &Script_GetAddOnEnableState }, + { "EnableAddOn", &Script_EnableAddOn }, + { "EnableAllAddOns", &Script_EnableAllAddOns }, + { "DisableAddOn", &Script_DisableAddOn }, + { "DisableAllAddOns", &Script_DisableAllAddOns }, + { "SaveAddOns", &Script_SaveAddOns }, + { "ResetAddOns", &Script_ResetAddOns }, + { "IsAddonVersionCheckEnabled", &Script_IsAddonVersionCheckEnabled }, + { "SetAddonVersionCheck", &Script_SetAddonVersionCheck }, + { "GetCursorPosition", &Script_GetCursorPosition }, + { "ShowCursor", &Script_ShowCursor }, + { "HideCursor", &Script_HideCursor }, + { "GetBillingTimeRemaining", &Script_GetBillingTimeRemaining }, + { "GetBillingPlan", &Script_GetBillingPlan }, + { "GetBillingTimeRested", &Script_GetBillingTimeRested }, + { "SurveyNotificationDone", &Script_SurveyNotificationDone }, + { "PINEntered", &Script_PINEntered }, + { "PlayGlueAmbience", &Script_PlayGlueAmbience }, + { "StopGlueAmbience", &Script_StopGlueAmbience }, + { "GetCreditsText", &Script_GetCreditsText }, + { "GetAccountExpansionLevel", &Script_GetAccountExpansionLevel }, // shared + { "GetClientExpansionLevel", &Script_GetClientExpansionLevel }, // guessed name + { "MatrixEntered", &Script_MatrixEntered }, + { "MatrixRevert", &Script_MatrixRevert }, + { "MatrixCommit", &Script_MatrixCommit }, + { "GetMatrixCoordinates", &Script_GetMatrixCoordinates }, + { "ScanDLLStart", &Script_ScanDLLStart }, + { "ScanDLLContinueAnyway", &Script_ScanDLLContinueAnyway }, + { "IsScanDLLFinished", &Script_IsScanDLLFinished }, + { "IsWindowsClient", &Script_IsWindowsClient }, + { "IsMacClient", &Script_IsMacClient }, + { "IsLinuxClient", &Script_IsLinuxClient }, + { "SetRealmSplitState", &Script_SetRealmSplitState }, + { "RequestRealmSplitInfo", &Script_RequestRealmSplitInfo }, + { "CancelLogin", &Script_CancelLogin }, + { "GetCVar", &Script_GetCVar }, + { "GetCVarBool", &Script_GetCVarBool }, + { "SetCVar", &Script_SetCVar }, + { "GetCVarDefault", &Script_GetCVarDefault }, + { "GetCVarMin", &Script_GetCVarMin }, // guessed name + { "GetCVarMax", &Script_GetCVarMax }, // guessed name + { "GetCVarAbsoluteMin", &Script_GetCVarAbsoluteMin }, // guessed name + { "GetCVarAbsoluteMax", &Script_GetCVarAbsoluteMax }, // guessed name + { "GetChangedOptionWarnings", &Script_GetChangedOptionWarnings }, + { "AcceptChangedOptionWarnings", &Script_AcceptChangedOptionWarnings }, + { "ShowChangedOptionWarnings", &Script_ShowChangedOptionWarnings }, + { "TokenEntered", &Script_TokenEntered }, + { "GetNumDeclensionSets", &Script_GetNumDeclensionSets }, + { "DeclineName", &Script_DeclineName }, + { "GetNumGameAccounts", &Script_GetNumGameAccounts }, + { "GetGameAccountInfo", &Script_GetGameAccountInfo }, + { "SetGameAccount", &Script_SetGameAccount }, + { "StopAllSFX", &Script_StopAllSFX }, + { "SetClearConfigData", &Script_SetClearConfigData }, + { "RestartGx", &Script_RestartGx }, + { "RestoreVideoResolutionDefaults", &Script_RestoreVideoResolutionDefaults }, // guessed name + { "RestoreVideoEffectsDefaults", &Script_RestoreVideoEffectsDefaults }, // guessed name + { "RestoreVideoStereoDefaults", &Script_RestoreVideoStereoDefaults }, // guessed name + { "IsStreamingMode", &Script_IsStreamingMode }, + { "IsStreamingTrial", &Script_IsStreamingTrial }, + { "IsConsoleActive", &Script_IsConsoleActive }, + { "RunScript", &Script_RunScript }, + { "ReadyForAccountDataTimes", &Script_ReadyForAccountDataTimes }, + { "IsTrialAccount", &Script_IsTrialAccount }, // guessed name + { "IsSystemSupported", &Script_IsSystemSupported } +}; + +void GlueScriptEventsRegisterFunctions() { + for (int32_t i = 0; i < NUM_SCRIPT_FUNCTIONS_GLUE_SCRIPT_EVENTS; ++i) { + FrameScript_RegisterFunction( + s_ScriptFunctions[i].name, + s_ScriptFunctions[i].method + ); + } } diff --git a/src/glue/GlueScript.hpp b/src/glue/GlueScript.hpp index 265bbd4..adc0725 100644 --- a/src/glue/GlueScript.hpp +++ b/src/glue/GlueScript.hpp @@ -1,8 +1,8 @@ #ifndef GLUE_GLUE_SCRIPT_HPP #define GLUE_GLUE_SCRIPT_HPP -extern const char* g_glueScriptEvents[]; +#define NUM_SCRIPT_FUNCTIONS_GLUE_SCRIPT_EVENTS 113 -void GlueScriptEventsInitialize(); +void GlueScriptEventsRegisterFunctions(); #endif diff --git a/src/glue/GlueScriptEvents.cpp b/src/glue/GlueScriptEvents.cpp new file mode 100644 index 0000000..19c725c --- /dev/null +++ b/src/glue/GlueScriptEvents.cpp @@ -0,0 +1,48 @@ +#include "glue/GlueScriptEvents.hpp" +#include "glue/Types.hpp" + +const char* g_glueScriptEvents[NUM_GLUESCRIPTEVENTS]; + +void GlueScriptEventsInitialize() { + g_glueScriptEvents[SET_GLUE_SCREEN] = "SET_GLUE_SCREEN"; + g_glueScriptEvents[START_GLUE_MUSIC] = "START_GLUE_MUSIC"; + g_glueScriptEvents[DISCONNECTED_FROM_SERVER] = "DISCONNECTED_FROM_SERVER"; + g_glueScriptEvents[OPEN_STATUS_DIALOG] = "OPEN_STATUS_DIALOG"; + g_glueScriptEvents[UPDATE_STATUS_DIALOG] = "UPDATE_STATUS_DIALOG"; + g_glueScriptEvents[CLOSE_STATUS_DIALOG] = "CLOSE_STATUS_DIALOG"; + g_glueScriptEvents[ADDON_LIST_UPDATE] = "ADDON_LIST_UPDATE"; + g_glueScriptEvents[CHARACTER_LIST_UPDATE] = "CHARACTER_LIST_UPDATE"; + g_glueScriptEvents[UPDATE_SELECTED_CHARACTER] = "UPDATE_SELECTED_CHARACTER"; + g_glueScriptEvents[OPEN_REALM_LIST] = "OPEN_REALM_LIST"; + g_glueScriptEvents[GET_PREFERRED_REALM_INFO] = "GET_PREFERRED_REALM_INFO"; + g_glueScriptEvents[UPDATE_SELECTED_RACE] = "UPDATE_SELECTED_RACE"; + g_glueScriptEvents[SELECT_LAST_CHARACTER] = "SELECT_LAST_CHARACTER"; + g_glueScriptEvents[SELECT_FIRST_CHARACTER] = "SELECT_FIRST_CHARACTER"; + g_glueScriptEvents[GLUE_SCREENSHOT_SUCCEEDED] = "GLUE_SCREENSHOT_SUCCEEDED"; + g_glueScriptEvents[GLUE_SCREENSHOT_FAILED] = "GLUE_SCREENSHOT_FAILED"; + g_glueScriptEvents[PATCH_UPDATE_PROGRESS] = "PATCH_UPDATE_PROGRESS"; + g_glueScriptEvents[PATCH_DOWNLOADED] = "PATCH_DOWNLOADED"; + g_glueScriptEvents[SUGGEST_REALM] = "SUGGEST_REALM"; + g_glueScriptEvents[SUGGEST_REALM_WRONG_PVP] = "SUGGEST_REALM_WRONG_PVP"; + g_glueScriptEvents[SUGGEST_REALM_WRONG_CATEGORY] = "SUGGEST_REALM_WRONG_CATEGORY"; + g_glueScriptEvents[SHOW_SERVER_ALERT] = "SHOW_SERVER_ALERT"; + g_glueScriptEvents[FRAMES_LOADED] = "FRAMES_LOADED"; + g_glueScriptEvents[FORCE_RENAME_CHARACTER] = "FORCE_RENAME_CHARACTER"; + g_glueScriptEvents[FORCE_DECLINE_CHARACTER] = "FORCE_DECLINE_CHARACTER"; + g_glueScriptEvents[SHOW_SURVEY_NOTIFICATION] = "SHOW_SURVEY_NOTIFICATION"; + g_glueScriptEvents[PLAYER_ENTER_PIN] = "PLAYER_ENTER_PIN"; + g_glueScriptEvents[CLIENT_ACCOUNT_MISMATCH] = "CLIENT_ACCOUNT_MISMATCH"; + g_glueScriptEvents[PLAYER_ENTER_MATRIX] = "PLAYER_ENTER_MATRIX"; + g_glueScriptEvents[SCANDLL_ERROR] = "SCANDLL_ERROR"; + g_glueScriptEvents[SCANDLL_DOWNLOADING] = "SCANDLL_DOWNLOADING"; + g_glueScriptEvents[SCANDLL_FINISHED] = "SCANDLL_FINISHED"; + g_glueScriptEvents[SERVER_SPLIT_NOTICE] = "SERVER_SPLIT_NOTICE"; + g_glueScriptEvents[TIMER_ALERT] = "TIMER_ALERT"; + g_glueScriptEvents[ACCOUNT_MESSAGES_AVAILABLE] = "ACCOUNT_MESSAGES_AVAILABLE"; + g_glueScriptEvents[ACCOUNT_MESSAGES_HEADERS_LOADED] = "ACCOUNT_MESSAGES_HEADERS_LOADED"; + g_glueScriptEvents[ACCOUNT_MESSAGES_BODY_LOADED] = "ACCOUNT_MESSAGES_BODY_LOADED"; + g_glueScriptEvents[CLIENT_TRIAL] = "CLIENT_TRIAL"; + g_glueScriptEvents[PLAYER_ENTER_TOKEN] = "PLAYER_ENTER_TOKEN"; + g_glueScriptEvents[GAME_ACCOUNTS_UPDATED] = "GAME_ACCOUNTS_UPDATED"; + g_glueScriptEvents[CLIENT_CONVERTED] = "CLIENT_CONVERTED"; +} diff --git a/src/glue/GlueScriptEvents.hpp b/src/glue/GlueScriptEvents.hpp new file mode 100644 index 0000000..858615b --- /dev/null +++ b/src/glue/GlueScriptEvents.hpp @@ -0,0 +1,8 @@ +#ifndef GLUE_GLUE_SCRIPT_EVENTS_HPP +#define GLUE_GLUE_SCRIPT_EVENTS_HPP + +extern const char* g_glueScriptEvents[]; + +void GlueScriptEventsInitialize(); + +#endif diff --git a/src/ui/ScriptFunctions.cpp b/src/ui/ScriptFunctions.cpp index 6ccc29b..977956f 100644 --- a/src/ui/ScriptFunctions.cpp +++ b/src/ui/ScriptFunctions.cpp @@ -13,42 +13,6 @@ #include "ui/simple/CSimpleSlider.hpp" #include "ui/simple/CSimpleTexture.hpp" -void CharacterCreateRegisterScriptFunctions() { - for (int32_t i = 0; i < NUM_SCRIPT_FUNCTIONS_CHAR_CREATE; ++i) { - FrameScript_RegisterFunction( - FrameScript::s_ScriptFunctions_CharCreate[i].name, - FrameScript::s_ScriptFunctions_CharCreate[i].method - ); - } -} - -void CharSelectRegisterScriptFunctions() { - for (int32_t i = 0; i < NUM_SCRIPT_FUNCTIONS_CHAR_SELECT; ++i) { - FrameScript_RegisterFunction( - FrameScript::s_ScriptFunctions_CharSelect[i].name, - FrameScript::s_ScriptFunctions_CharSelect[i].method - ); - } -} - -void GlueScriptEventsRegisterFunctions() { - for (int32_t i = 0; i < NUM_SCRIPT_FUNCTIONS_GLUE_SCRIPT_EVENTS; ++i) { - FrameScript_RegisterFunction( - FrameScript::s_ScriptFunctions_GlueScriptEvents[i].name, - FrameScript::s_ScriptFunctions_GlueScriptEvents[i].method - ); - } -} - -void RealmListRegisterScriptFunctions() { - for (int32_t i = 0; i < NUM_SCRIPT_FUNCTIONS_REALM_LIST; ++i) { - FrameScript_RegisterFunction( - FrameScript::s_ScriptFunctions_RealmList[i].name, - FrameScript::s_ScriptFunctions_RealmList[i].method - ); - } -} - void RegisterSimpleFrameScriptMethods() { for (int32_t i = 0; i < NUM_SCRIPT_FUNCTIONS_SIMPLE_FRAME; ++i) { FrameScript_RegisterFunction( diff --git a/src/ui/ScriptFunctions.hpp b/src/ui/ScriptFunctions.hpp index f7d9fb6..bfbce2b 100644 --- a/src/ui/ScriptFunctions.hpp +++ b/src/ui/ScriptFunctions.hpp @@ -6,30 +6,14 @@ struct lua_State; -#define NUM_SCRIPT_FUNCTIONS_CHAR_CREATE 32 -#define NUM_SCRIPT_FUNCTIONS_CHAR_SELECT 13 -#define NUM_SCRIPT_FUNCTIONS_GLUE_SCRIPT_EVENTS 113 -#define NUM_SCRIPT_FUNCTIONS_REALM_LIST 14 #define NUM_SCRIPT_FUNCTIONS_SIMPLE_FRAME 7 #define NUM_SCRIPT_FUNCTIONS_SYSTEM 7 namespace FrameScript { - extern FrameScript_Method s_ScriptFunctions_CharCreate[NUM_SCRIPT_FUNCTIONS_CHAR_CREATE]; - extern FrameScript_Method s_ScriptFunctions_CharSelect[NUM_SCRIPT_FUNCTIONS_CHAR_SELECT]; - extern FrameScript_Method s_ScriptFunctions_GlueScriptEvents[NUM_SCRIPT_FUNCTIONS_GLUE_SCRIPT_EVENTS]; - extern FrameScript_Method s_ScriptFunctions_RealmList[NUM_SCRIPT_FUNCTIONS_REALM_LIST]; extern FrameScript_Method s_ScriptFunctions_SimpleFrame[NUM_SCRIPT_FUNCTIONS_SIMPLE_FRAME]; extern FrameScript_Method s_ScriptFunctions_System[NUM_SCRIPT_FUNCTIONS_SYSTEM]; } -void CharacterCreateRegisterScriptFunctions(); - -void CharSelectRegisterScriptFunctions(); - -void GlueScriptEventsRegisterFunctions(); - -void RealmListRegisterScriptFunctions(); - void RegisterSimpleFrameScriptMethods(); void SystemRegisterFunctions(); diff --git a/src/ui/ScriptFunctionsGlueScriptEvents.cpp b/src/ui/ScriptFunctionsGlueScriptEvents.cpp deleted file mode 100644 index 6d17426..0000000 --- a/src/ui/ScriptFunctionsGlueScriptEvents.cpp +++ /dev/null @@ -1,902 +0,0 @@ -#include "client/Client.hpp" -#include "client/ClientServices.hpp" -#include "console/CVar.hpp" -#include "db/Db.hpp" -#include "glue/CGlueMgr.hpp" -#include "gx/Coordinate.hpp" -#include "net/connection/ClientConnection.hpp" -#include "sound/Interface.hpp" -#include "ui/ScriptFunctions.hpp" -#include "ui/ScriptFunctionsShared.hpp" -#include "ui/Types.hpp" -#include "ui/simple/CSimpleTop.hpp" -#include "util/Lua.hpp" -#include "util/SFile.hpp" -#include "util/Unimplemented.hpp" -#include - -int32_t Script_IsShiftKeyDown(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_GetBuildInfo(lua_State* L) { - // TODO use compile-time defines to control these values - - auto versionText = FrameScript_GetText("VERSION", -1, GENDER_NOT_APPLICABLE); - lua_pushstring(L, versionText); - - auto releaseText = FrameScript_GetText("RELEASE_BUILD", -1, GENDER_NOT_APPLICABLE); - lua_pushstring(L, releaseText); - - lua_pushstring(L, "3.3.5"); - lua_pushstring(L, "12340"); - lua_pushstring(L, "Jun 24 2010"); - - return 5; -} - -int32_t Script_GetLocale(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_GetSavedAccountName(lua_State* L) { - lua_pushstring(L, Client::g_accountNameVar->GetString()); - - return 1; -} - -int32_t Script_SetSavedAccountName(lua_State* L) { - if (!lua_isstring(L, 1)) { - return luaL_error(L, "Usage: SetSavedAccountName(\"accountName\")"); - } - - const char* accountName = lua_tostring(L, 1); - - Client::g_accountNameVar->Set(accountName, true, false, false, true); - - return 0; -} - -int32_t Script_GetUsesToken(lua_State* L) { - // TODO - lua_pushboolean(L, 0); - - return 1; -} - -int32_t Script_SetUsesToken(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_GetSavedAccountList(lua_State* L) { - lua_pushstring(L, Client::g_accountListVar->GetString()); - return 1; -} - -int32_t Script_SetSavedAccountList(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_SetCurrentScreen(lua_State* L) { - if (!lua_isstring(L, 1)) { - return luaL_error(L, "Usage: SetCurrentScreen(\"screen\")"); - } - - auto screen = lua_tostring(L, 1); - CGlueMgr::UpdateCurrentScreen(screen); - - // TODO - // if (!Blizzard::Streaming::IsStreamingMode()) { - // Sub4BAE10(); - // } - - return 0; -} - -int32_t Script_QuitGame(lua_State* L) { - CGlueMgr::QuitGame(); - - return 0; -} - -int32_t Script_QuitGameAndRunLauncher(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_PlayGlueMusic(lua_State* L) { - if (!lua_isstring(L, 1)) { - return luaL_error(L, "Usage: PlayGlueMusic(\"filename\")"); - } - - auto name = lua_tostring(L, 1); - - SI2::StartGlueMusic(name); - - return 0; -} - -int32_t Script_PlayCreditsMusic(lua_State* L) { - if (!lua_isstring(L, 1)) { - return luaL_error(L, "Usage: PlayCreditsMusic( \"Sound kit name\" )"); - } - - auto name = lua_tostring(L, 1); - - SI2::StartCreditsMusic(name); - - return 0; -} - -int32_t Script_StopGlueMusic(lua_State* L) { - SI2::StopCreditsMusic(); - SI2::StopGlueMusic(-1.0f); - - return 0; -} - -int32_t Script_GetMovieResolution(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_GetScreenWidth(lua_State* L) { - float v1 = NDCToDDCWidth(1.0); - float v2 = CoordinateGetAspectCompensation() * 1024.0 * v1; - float v3 = DDCToNDCWidth(v2); - - lua_pushnumber(L, v3); - - return 1; -} - -int32_t Script_GetScreenHeight(lua_State* L) { - float v1 = NDCToDDCHeight(1.0); - float v2 = CoordinateGetAspectCompensation() * 1024.0 * v1; - float v3 = DDCToNDCWidth(v2); - - lua_pushnumber(L, v3); - - return 1; -} - -int32_t Script_LaunchURL(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_ShowTOSNotice(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_TOSAccepted(lua_State* L) { - // TODO - lua_pushboolean(L, 1); - - return 1; -} - -int32_t Script_AcceptTOS(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_ShowEULANotice(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_EULAAccepted(lua_State* L) { - // TODO - lua_pushboolean(L, 1); - - return 1; -} - -int32_t Script_AcceptEULA(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_ShowTerminationWithoutNoticeNotice(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_TerminationWithoutNoticeAccepted(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_AcceptTerminationWithoutNotice(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_ShowScanningNotice(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_ScanningAccepted(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_AcceptScanning(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_ShowContestNotice(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_ContestAccepted(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_AcceptContest(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_DefaultServerLogin(lua_State* L) { - if (!lua_isstring(L, 1) || !lua_isstring(L, 2)) { - luaL_error(L, "Usage: DefaultServerLogin(\"accountName\", \"password\")"); - } - - auto accountName = lua_tostring(L, 1); - auto password = lua_tostring(L, 2); - - CGlueMgr::LoginServerLogin(accountName, password); - - return 0; -} - -int32_t Script_StatusDialogClick(lua_State* L) { - CGlueMgr::StatusDialogClick(); - - return 0; -} - -int32_t Script_GetServerName(lua_State* L) { - auto selectedRealmName = ClientServices::GetSelectedRealmName(); - auto selectedRealm = ClientServices::GetSelectedRealm(); - - auto pvp = false; - auto rp = false; - - // default down to true: if realm config isn't found, consider realm down - auto down = true; - - if (selectedRealm) { - for (int32_t i = 0; i < g_cfg_ConfigsDB.GetNumRecords(); i++) { - auto config = g_cfg_ConfigsDB.GetRecordByIndex(i); - - if (config->m_realmType == selectedRealm->type) { - pvp = config->m_playerKillingAllowed != 0; - rp = config->m_roleplaying != 0; - down = selectedRealm->flags & 0x2; - - break; - } - } - } - - // name - lua_pushstring(L, selectedRealmName); - - // pvp - if (pvp) { - lua_pushnumber(L, 1.0); - } else { - lua_pushnil(L); - } - - // rp - if (rp) { - lua_pushnumber(L, 1.0); - } else { - lua_pushnil(L); - } - - // down - if (down) { - lua_pushnumber(L, 1.0); - } else { - lua_pushnil(L); - } - - return 4; -} - -int32_t Script_DisconnectFromServer(lua_State* L) { - if (ClientServices::IsConnected()) { - CGlueMgr::m_disconnectPending = 1; - ClientServices::Disconnect(); - } - - ClientServices::LoginConnection()->Logoff(); - - return 0; -} - -int32_t Script_IsConnectedToServer(lua_State* L) { - if (ClientServices::IsConnected()) { - lua_pushnumber(L, 1.0); - } else { - lua_pushnil(L); - } - - return 1; -} - -int32_t Script_EnterWorld(lua_State* L) { - CGlueMgr::EnterWorld(); - - return 0; -} - -int32_t Script_Screenshot(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_PatchDownloadProgress(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_PatchDownloadCancel(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_PatchDownloadApply(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_GetNumAddOns(lua_State* L) { - // TODO - lua_pushnumber(L, 0); - - return 1; -} - -int32_t Script_GetAddOnInfo(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_LaunchAddOnURL(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_GetAddOnDependencies(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_GetAddOnEnableState(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_EnableAddOn(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_EnableAllAddOns(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_DisableAddOn(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_DisableAllAddOns(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_SaveAddOns(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_ResetAddOns(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_IsAddonVersionCheckEnabled(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_SetAddonVersionCheck(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_GetCursorPosition(lua_State* L) { - float cursorX = 0.0f; - float cursorY = 0.0f; - - NDCToDDC( - CSimpleTop::s_instance->m_mousePosition.x, - CSimpleTop::s_instance->m_mousePosition.y, - &cursorX, - &cursorY - ); - - float v1 = (CoordinateGetAspectCompensation() * 1024.0f) * cursorX; - float v2 = DDCToNDCWidth(v1); - lua_pushnumber(L, v2); - - float v3 = (CoordinateGetAspectCompensation() * 1024.0f) * cursorY; - float v4 = DDCToNDCWidth(v3); - lua_pushnumber(L, v4); - - return 2; -} - -int32_t Script_ShowCursor(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_HideCursor(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_GetBillingTimeRemaining(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_GetBillingPlan(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_GetBillingTimeRested(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_SurveyNotificationDone(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_PINEntered(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_PlayGlueAmbience(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_StopGlueAmbience(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_GetCreditsText(lua_State* L) { - if (!lua_isnumber(L, 1)) { - luaL_error(L, "Usage: Script_GetCreditText(versionIndex)"); - } - - auto versionIndex = static_cast(lua_tonumber(L, 1)); - - const char* filename; - if (versionIndex == 1) { - filename = "credits.html"; - } else if (versionIndex == 2) { - filename = "credits_BC.html"; - } else { - filename = "credits_LK.html"; - } - - void* data; - if (SFile::Load(nullptr, filename, &data, nullptr, 1, 0x1, nullptr)) { - lua_pushstring(L, static_cast(data)); - SFile::Unload(data); - } - - return 1; -} - -int32_t Script_GetClientExpansionLevel(lua_State* L) { - // TODO - // v1 = sub_402A40(); - - int32_t v1 = 2; - - lua_pushnumber(L, v1 + 1); - - return 1; -} - -int32_t Script_MatrixEntered(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_MatrixRevert(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_MatrixCommit(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_GetMatrixCoordinates(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_ScanDLLStart(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_ScanDLLContinueAnyway(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_IsScanDLLFinished(lua_State* L) { - // TODO - lua_pushboolean(L, 1); - - return 1; -} - -int32_t Script_IsWindowsClient(lua_State* L) { -#if defined(WHOA_SYSTEM_WIN) - lua_pushnumber(L, 1.0); -#else - lua_pushnil(L); -#endif - - return 1; -} - -int32_t Script_IsMacClient(lua_State* L) { -#if defined(WHOA_SYSTEM_MAC) - lua_pushnumber(L, 1.0); -#else - lua_pushnil(L); -#endif - - return 1; -} - -int32_t Script_IsLinuxClient(lua_State* L) { -#if defined(WHOA_SYSTEM_LINUX) - lua_pushnumber(L, 1.0); -#else - lua_pushnil(L); -#endif - - return 1; -} - -int32_t Script_SetRealmSplitState(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_RequestRealmSplitInfo(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_CancelLogin(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_GetCVar(lua_State* L) { - if (!lua_isstring(L, 1)) { - return luaL_error(L, "Usage: GetCVar(\"cvar\")"); - } - - auto name = lua_tostring(L, 1); - auto var = CVar::LookupRegistered(name); - - if (!var) { - return luaL_error(L, "Couldn't find CVar named '%s'", name); - } - - lua_pushstring(L, var->GetString()); - - return 1; -} - -int32_t Script_GetCVarBool(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_SetCVar(lua_State* L) { - if (!lua_isstring(L, 1)) { - return luaL_error(L, "Usage: SetCVar(\"cvar\", value [, \"scriptCvar\")"); - } - - auto varName = lua_tostring(L, 1); - auto var = CVar::LookupRegistered(varName); - - if (!var) { - return luaL_error(L, "Couldn't find CVar named '%s'", varName); - } - - if (var->m_flags & 0x4) { - return luaL_error(L, "\"%s\" is read-only", varName); - } - - auto value = lua_tostring(L, 2); - if (!value) { - value = "0"; - } - - var->Set(value, true, false, false, true); - - return 0; -} - -int32_t Script_GetCVarDefault(lua_State* L) { - if (!lua_isstring(L, 1)) { - return luaL_error(L, "Usage: GetCVarDefault(\"cvar\")"); - } - - auto varName = lua_tostring(L, 1); - auto var = CVar::LookupRegistered(varName); - - if (!var) { - return luaL_error(L, "Couldn't find CVar named '%s'", varName); - } - - auto defaultValue = var->GetDefaultValue(); - - if (defaultValue) { - lua_pushstring(L, defaultValue); - } else { - lua_pushnil(L); - } - - return 1; -} - -int32_t Script_GetCVarMin(lua_State* L) { - if (!lua_isstring(L, 1)) { - return luaL_error(L, "Usage: GetCVarMin(\"cvar\")"); - } - - auto varName = lua_tostring(L, 1); - auto var = CVar::LookupRegistered(varName); - - if (!var) { - return luaL_error(L, "Couldn't find CVar named '%s'", varName); - } - - if (!SStrCmpI(var->m_key.GetString(), "extShadowQuality")) { - lua_pushnumber(L, 0.0); - } else if (!SStrCmpI(var->m_key.GetString(), "farclip")) { - lua_pushnumber(L, 177.0); - } else { - lua_pushnil(L); - } - - return 1; -} - -int32_t Script_GetCVarMax(lua_State* L) { - if (!lua_isstring(L, 1)) { - return luaL_error(L, "Usage: GetCVarMax(\"cvar\")"); - } - - auto varName = lua_tostring(L, 1); - auto var = CVar::LookupRegistered(varName); - - if (!var) { - return luaL_error(L, "Couldn't find CVar named '%s'", varName); - } - - if (!SStrCmpI(var->m_key.GetString(), "extShadowQuality")) { - // TODO CGxDevice calls to determine max shadow quality - lua_pushnumber(L, 5.0); - } else if (!SStrCmpI(var->m_key.GetString(), "farclip")) { - lua_pushnumber(L, 1277.0); - } else { - lua_pushnil(L); - } - - return 1; -} - -int32_t Script_GetCVarAbsoluteMin(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_GetCVarAbsoluteMax(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_GetChangedOptionWarnings(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_AcceptChangedOptionWarnings(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_ShowChangedOptionWarnings(lua_State* L) { - // TODO - lua_pushnil(L); - - return 1; -} - -int32_t Script_TokenEntered(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_GetNumDeclensionSets(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_DeclineName(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_GetNumGameAccounts(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_GetGameAccountInfo(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_SetGameAccount(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_StopAllSFX(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_SetClearConfigData(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_RestartGx(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_RestoreVideoResolutionDefaults(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_RestoreVideoEffectsDefaults(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_RestoreVideoStereoDefaults(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_IsStreamingMode(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_IsStreamingTrial(lua_State* L) { - return SFile::IsStreamingTrial(); -} - -int32_t Script_IsConsoleActive(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_RunScript(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_ReadyForAccountDataTimes(lua_State* L) { - WHOA_UNIMPLEMENTED(0); -} - -int32_t Script_IsTrialAccount(lua_State* L) { - // TODO - - lua_pushnil(L); - return 1; -} - -int32_t Script_IsSystemSupported(lua_State* L) { - // TODO - - lua_pushboolean(L, 1); - return 1; -} - -FrameScript_Method FrameScript::s_ScriptFunctions_GlueScriptEvents[NUM_SCRIPT_FUNCTIONS_GLUE_SCRIPT_EVENTS] = { - { "IsShiftKeyDown", &Script_IsShiftKeyDown }, - { "GetBuildInfo", &Script_GetBuildInfo }, - { "GetLocale", &Script_GetLocale }, - { "GetSavedAccountName", &Script_GetSavedAccountName }, - { "SetSavedAccountName", &Script_SetSavedAccountName }, - { "GetUsesToken", &Script_GetUsesToken }, - { "SetUsesToken", &Script_SetUsesToken }, - { "GetSavedAccountList", &Script_GetSavedAccountList }, - { "SetSavedAccountList", &Script_SetSavedAccountList }, - { "SetCurrentScreen", &Script_SetCurrentScreen }, - { "QuitGame", &Script_QuitGame }, - { "QuitGameAndRunLauncher", &Script_QuitGameAndRunLauncher }, - { "PlayGlueMusic", &Script_PlayGlueMusic }, - { "PlayCreditsMusic", &Script_PlayCreditsMusic }, - { "StopGlueMusic", &Script_StopGlueMusic }, - { "GetMovieResolution", &Script_GetMovieResolution }, - { "GetScreenWidth", &Script_GetScreenWidth }, - { "GetScreenHeight", &Script_GetScreenHeight }, - { "LaunchURL", &Script_LaunchURL }, - { "ShowTOSNotice", &Script_ShowTOSNotice }, - { "TOSAccepted", &Script_TOSAccepted }, - { "AcceptTOS", &Script_AcceptTOS }, - { "ShowEULANotice", &Script_ShowEULANotice }, - { "EULAAccepted", &Script_EULAAccepted }, - { "AcceptEULA", &Script_AcceptEULA }, - { "ShowTerminationWithoutNoticeNotice", &Script_ShowTerminationWithoutNoticeNotice }, - { "TerminationWithoutNoticeAccepted", &Script_TerminationWithoutNoticeAccepted }, - { "AcceptTerminationWithoutNotice", &Script_AcceptTerminationWithoutNotice }, - { "ShowScanningNotice", &Script_ShowScanningNotice }, - { "ScanningAccepted", &Script_ScanningAccepted }, - { "AcceptScanning", &Script_AcceptScanning }, - { "ShowContestNotice", &Script_ShowContestNotice }, - { "ContestAccepted", &Script_ContestAccepted }, - { "AcceptContest", &Script_AcceptContest }, - { "DefaultServerLogin", &Script_DefaultServerLogin }, - { "StatusDialogClick", &Script_StatusDialogClick }, - { "GetServerName", &Script_GetServerName }, - { "DisconnectFromServer", &Script_DisconnectFromServer }, - { "IsConnectedToServer", &Script_IsConnectedToServer }, - { "EnterWorld", &Script_EnterWorld }, - { "Screenshot", &Script_Screenshot }, - { "PatchDownloadProgress", &Script_PatchDownloadProgress }, - { "PatchDownloadCancel", &Script_PatchDownloadCancel }, - { "PatchDownloadApply", &Script_PatchDownloadApply }, - { "GetNumAddOns", &Script_GetNumAddOns }, - { "GetAddOnInfo", &Script_GetAddOnInfo }, - { "LaunchAddOnURL", &Script_LaunchAddOnURL }, - { "GetAddOnDependencies", &Script_GetAddOnDependencies }, - { "GetAddOnEnableState", &Script_GetAddOnEnableState }, - { "EnableAddOn", &Script_EnableAddOn }, - { "EnableAllAddOns", &Script_EnableAllAddOns }, - { "DisableAddOn", &Script_DisableAddOn }, - { "DisableAllAddOns", &Script_DisableAllAddOns }, - { "SaveAddOns", &Script_SaveAddOns }, - { "ResetAddOns", &Script_ResetAddOns }, - { "IsAddonVersionCheckEnabled", &Script_IsAddonVersionCheckEnabled }, - { "SetAddonVersionCheck", &Script_SetAddonVersionCheck }, - { "GetCursorPosition", &Script_GetCursorPosition }, - { "ShowCursor", &Script_ShowCursor }, - { "HideCursor", &Script_HideCursor }, - { "GetBillingTimeRemaining", &Script_GetBillingTimeRemaining }, - { "GetBillingPlan", &Script_GetBillingPlan }, - { "GetBillingTimeRested", &Script_GetBillingTimeRested }, - { "SurveyNotificationDone", &Script_SurveyNotificationDone }, - { "PINEntered", &Script_PINEntered }, - { "PlayGlueAmbience", &Script_PlayGlueAmbience }, - { "StopGlueAmbience", &Script_StopGlueAmbience }, - { "GetCreditsText", &Script_GetCreditsText }, - { "GetAccountExpansionLevel", &Script_GetAccountExpansionLevel }, // shared - { "GetClientExpansionLevel", &Script_GetClientExpansionLevel }, // guessed name - { "MatrixEntered", &Script_MatrixEntered }, - { "MatrixRevert", &Script_MatrixRevert }, - { "MatrixCommit", &Script_MatrixCommit }, - { "GetMatrixCoordinates", &Script_GetMatrixCoordinates }, - { "ScanDLLStart", &Script_ScanDLLStart }, - { "ScanDLLContinueAnyway", &Script_ScanDLLContinueAnyway }, - { "IsScanDLLFinished", &Script_IsScanDLLFinished }, - { "IsWindowsClient", &Script_IsWindowsClient }, - { "IsMacClient", &Script_IsMacClient }, - { "IsLinuxClient", &Script_IsLinuxClient }, - { "SetRealmSplitState", &Script_SetRealmSplitState }, - { "RequestRealmSplitInfo", &Script_RequestRealmSplitInfo }, - { "CancelLogin", &Script_CancelLogin }, - { "GetCVar", &Script_GetCVar }, - { "GetCVarBool", &Script_GetCVarBool }, - { "SetCVar", &Script_SetCVar }, - { "GetCVarDefault", &Script_GetCVarDefault }, - { "GetCVarMin", &Script_GetCVarMin }, // guessed name - { "GetCVarMax", &Script_GetCVarMax }, // guessed name - { "GetCVarAbsoluteMin", &Script_GetCVarAbsoluteMin }, // guessed name - { "GetCVarAbsoluteMax", &Script_GetCVarAbsoluteMax }, // guessed name - { "GetChangedOptionWarnings", &Script_GetChangedOptionWarnings }, - { "AcceptChangedOptionWarnings", &Script_AcceptChangedOptionWarnings }, - { "ShowChangedOptionWarnings", &Script_ShowChangedOptionWarnings }, - { "TokenEntered", &Script_TokenEntered }, - { "GetNumDeclensionSets", &Script_GetNumDeclensionSets }, - { "DeclineName", &Script_DeclineName }, - { "GetNumGameAccounts", &Script_GetNumGameAccounts }, - { "GetGameAccountInfo", &Script_GetGameAccountInfo }, - { "SetGameAccount", &Script_SetGameAccount }, - { "StopAllSFX", &Script_StopAllSFX }, - { "SetClearConfigData", &Script_SetClearConfigData }, - { "RestartGx", &Script_RestartGx }, - { "RestoreVideoResolutionDefaults", &Script_RestoreVideoResolutionDefaults }, // guessed name - { "RestoreVideoEffectsDefaults", &Script_RestoreVideoEffectsDefaults }, // guessed name - { "RestoreVideoStereoDefaults", &Script_RestoreVideoStereoDefaults }, // guessed name - { "IsStreamingMode", &Script_IsStreamingMode }, - { "IsStreamingTrial", &Script_IsStreamingTrial }, - { "IsConsoleActive", &Script_IsConsoleActive }, - { "RunScript", &Script_RunScript }, - { "ReadyForAccountDataTimes", &Script_ReadyForAccountDataTimes }, - { "IsTrialAccount", &Script_IsTrialAccount }, // guessed name - { "IsSystemSupported", &Script_IsSystemSupported } -};