diff --git a/r5dev/game/client/vscript_client.cpp b/r5dev/game/client/vscript_client.cpp index bf420316..4d8de6b3 100644 --- a/r5dev/game/client/vscript_client.cpp +++ b/r5dev/game/client/vscript_client.cpp @@ -89,7 +89,7 @@ namespace VScriptCode g_ServerListManager.RefreshServerList(serverMessage, iCount); sq_pushinteger(v, static_cast<SQInteger>(iCount)); - return SQ_OK; + SCRIPT_CHECK_AND_RETURN(v, SQ_OK); } //----------------------------------------------------------------------------- @@ -100,7 +100,7 @@ namespace VScriptCode size_t iCount = g_ServerListManager.m_vServerList.size(); sq_pushinteger(v, static_cast<SQInteger>(iCount)); - return SQ_OK; + SCRIPT_CHECK_AND_RETURN(v, SQ_OK); } //----------------------------------------------------------------------------- @@ -111,7 +111,7 @@ namespace VScriptCode SQChar* privateToken = sq_getstring(v, 1); if (!VALID_CHARSTAR(privateToken)) - return SQ_OK; + SCRIPT_CHECK_AND_RETURN(v, SQ_OK); string hiddenServerRequestMessage; NetGameServer_t serverListing; @@ -120,28 +120,22 @@ namespace VScriptCode if (!result) { if (hiddenServerRequestMessage.empty()) - { sq_pushstring(v, "Request failed", -1); - } else { hiddenServerRequestMessage = Format("Request failed: %s", hiddenServerRequestMessage.c_str()); sq_pushstring(v, hiddenServerRequestMessage.c_str(), -1); } - return SQ_OK; + SCRIPT_CHECK_AND_RETURN(v, SQ_OK); } if (serverListing.name.empty()) { if (hiddenServerRequestMessage.empty()) - { hiddenServerRequestMessage = Format("Server listing empty"); - } else - { hiddenServerRequestMessage = Format("Server listing empty: %s", hiddenServerRequestMessage.c_str()); - } sq_pushstring(v, hiddenServerRequestMessage.c_str(), -1); } @@ -151,7 +145,7 @@ namespace VScriptCode sq_pushstring(v, hiddenServerRequestMessage.c_str(), -1); } - return SQ_OK; + SCRIPT_CHECK_AND_RETURN(v, SQ_OK); } //----------------------------------------------------------------------------- @@ -163,14 +157,12 @@ namespace VScriptCode SQInteger iServer = sq_getinteger(v, 1); if (!Script_CheckServerIndex(v, iServer)) - { - return SQ_ERROR; - } + SCRIPT_CHECK_AND_RETURN(v, SQ_ERROR); const string& serverName = g_ServerListManager.m_vServerList[iServer].name; sq_pushstring(v, serverName.c_str(), -1); - return SQ_OK; + SCRIPT_CHECK_AND_RETURN(v, SQ_OK); } //----------------------------------------------------------------------------- @@ -182,14 +174,12 @@ namespace VScriptCode SQInteger iServer = sq_getinteger(v, 1); if (!Script_CheckServerIndex(v, iServer)) - { - return SQ_ERROR; - } + SCRIPT_CHECK_AND_RETURN(v, SQ_ERROR); const string& serverDescription = g_ServerListManager.m_vServerList[iServer].description; sq_pushstring(v, serverDescription.c_str(), -1); - return SQ_OK; + SCRIPT_CHECK_AND_RETURN(v, SQ_OK); } //----------------------------------------------------------------------------- @@ -201,14 +191,12 @@ namespace VScriptCode SQInteger iServer = sq_getinteger(v, 1); if (!Script_CheckServerIndex(v, iServer)) - { - return SQ_ERROR; - } + SCRIPT_CHECK_AND_RETURN(v, SQ_ERROR); const string& svServerMapName = g_ServerListManager.m_vServerList[iServer].map; sq_pushstring(v, svServerMapName.c_str(), -1); - return SQ_OK; + SCRIPT_CHECK_AND_RETURN(v, SQ_OK); } //----------------------------------------------------------------------------- @@ -220,14 +208,12 @@ namespace VScriptCode SQInteger iServer = sq_getinteger(v, 1); if (!Script_CheckServerIndex(v, iServer)) - { - return SQ_ERROR; - } + SCRIPT_CHECK_AND_RETURN(v, SQ_ERROR); const string& serverPlaylist = g_ServerListManager.m_vServerList[iServer].playlist; sq_pushstring(v, serverPlaylist.c_str(), -1); - return SQ_OK; + SCRIPT_CHECK_AND_RETURN(v, SQ_OK); } //----------------------------------------------------------------------------- @@ -239,14 +225,12 @@ namespace VScriptCode SQInteger iServer = sq_getinteger(v, 1); if (!Script_CheckServerIndex(v, iServer)) - { - return SQ_ERROR; - } + SCRIPT_CHECK_AND_RETURN(v, SQ_ERROR); const SQInteger playerCount = g_ServerListManager.m_vServerList[iServer].numPlayers; sq_pushinteger(v, playerCount); - return SQ_OK; + SCRIPT_CHECK_AND_RETURN(v, SQ_OK); } //----------------------------------------------------------------------------- @@ -258,14 +242,12 @@ namespace VScriptCode SQInteger iServer = sq_getinteger(v, 1); if (!Script_CheckServerIndex(v, iServer)) - { - return SQ_ERROR; - } + SCRIPT_CHECK_AND_RETURN(v, SQ_ERROR); const SQInteger maxPlayers = g_ServerListManager.m_vServerList[iServer].maxPlayers; sq_pushinteger(v, maxPlayers); - return SQ_OK; + SCRIPT_CHECK_AND_RETURN(v, SQ_OK); } //----------------------------------------------------------------------------- @@ -326,7 +308,7 @@ namespace VScriptCode } sq_pushstring(v, pszPromoKey, -1); - return SQ_OK; + SCRIPT_CHECK_AND_RETURN(v, SQ_OK); } SQRESULT GetEULAContents(HSQUIRRELVM v) @@ -349,7 +331,7 @@ namespace VScriptCode sq_pushstring(v, error.c_str(), -1); } - return SQ_OK; + SCRIPT_CHECK_AND_RETURN(v, SQ_OK); } //----------------------------------------------------------------------------- @@ -361,12 +343,12 @@ namespace VScriptCode SQChar* cryptoKey = sq_getstring(v, 2); if (!VALID_CHARSTAR(ipAddress) || VALID_CHARSTAR(cryptoKey)) - return SQ_OK; + SCRIPT_CHECK_AND_RETURN(v, SQ_OK); Msg(eDLL_T::UI, "Connecting to server with ip address '%s' and encryption key '%s'\n", ipAddress, cryptoKey); g_ServerListManager.ConnectToServer(ipAddress, cryptoKey); - return SQ_OK; + SCRIPT_CHECK_AND_RETURN(v, SQ_OK); } //----------------------------------------------------------------------------- @@ -379,7 +361,7 @@ namespace VScriptCode if (!Script_CheckServerIndex(v, iServer)) { - return SQ_ERROR; + SCRIPT_CHECK_AND_RETURN(v, SQ_ERROR); } const NetGameServer_t& gameServer = g_ServerListManager.m_vServerList[iServer]; @@ -387,7 +369,7 @@ namespace VScriptCode g_ServerListManager.ConnectToServer(gameServer.address, gameServer.port, gameServer.netKey); - return SQ_OK; + SCRIPT_CHECK_AND_RETURN(v, SQ_OK); } //----------------------------------------------------------------------------- @@ -398,7 +380,7 @@ namespace VScriptCode SQChar* privateToken = sq_getstring(v, 1); if (!VALID_CHARSTAR(privateToken)) - return SQ_OK; + SCRIPT_CHECK_AND_RETURN(v, SQ_OK); string hiddenServerRequestMessage; NetGameServer_t netListing; @@ -413,7 +395,7 @@ namespace VScriptCode Warning(eDLL_T::UI, "Failed to connect to private server: %s\n", hiddenServerRequestMessage.c_str()); } - return SQ_OK; + SCRIPT_CHECK_AND_RETURN(v, SQ_OK); } //----------------------------------------------------------------------------- @@ -422,7 +404,7 @@ namespace VScriptCode SQRESULT IsClientDLL(HSQUIRRELVM v) { sq_pushbool(v, ::IsClientDLL()); - return SQ_OK; + SCRIPT_CHECK_AND_RETURN(v, SQ_OK); } } } diff --git a/r5dev/game/server/liveapi/liveapi.cpp b/r5dev/game/server/liveapi/liveapi.cpp index 8c795017..b9e338c3 100644 --- a/r5dev/game/server/liveapi/liveapi.cpp +++ b/r5dev/game/server/liveapi/liveapi.cpp @@ -1990,15 +1990,13 @@ namespace VScriptCode SQRESULT VScriptCode::Server::LiveAPI_IsValidToRun(HSQUIRRELVM v) { sq_pushbool(v, liveapi_enabled.GetBool()); - - SCRIPT_CHECK_INTERNAL_ERROR(v); - return SQ_OK; + SCRIPT_CHECK_AND_RETURN(v, SQ_OK); } SQRESULT VScriptCode::Server::LiveAPI_LogRaw(HSQUIRRELVM v) { if (!LiveAPISystem()->IsEnabled()) - return SQ_OK; + SCRIPT_CHECK_AND_RETURN(v, SQ_OK); SQRESULT result = SQ_OK; SQObjectPtr& object = v->GetUp(-2); @@ -2017,8 +2015,7 @@ SQRESULT VScriptCode::Server::LiveAPI_LogRaw(HSQUIRRELVM v) result = SQ_FAIL; } - SCRIPT_CHECK_INTERNAL_ERROR(v); - return result; + SCRIPT_CHECK_AND_RETURN(v, result); } void Script_RegisterLiveAPIFunctions(CSquirrelVM* const s) diff --git a/r5dev/game/server/vscript_server.cpp b/r5dev/game/server/vscript_server.cpp index 4984caf2..d037a9ae 100644 --- a/r5dev/game/server/vscript_server.cpp +++ b/r5dev/game/server/vscript_server.cpp @@ -58,7 +58,7 @@ namespace VScriptCode !VALID_CHARSTAR(serverMapName) || !VALID_CHARSTAR(serverPlaylist)) { - return SQ_OK; + SCRIPT_CHECK_AND_RETURN(v, SQ_OK); } // Adjust browser settings. @@ -73,10 +73,7 @@ namespace VScriptCode g_ServerHostManager.SetVisibility(serverVisibility); g_ServerHostManager.LaunchServer(g_pServer->IsActive()); - return SQ_OK; - - //v_SQVM_RaiseError(v, "\"%s\" is not supported on client builds.\n", "CreateServer"); - //return SQ_ERROR; + SCRIPT_CHECK_AND_RETURN(v, SQ_OK); } //----------------------------------------------------------------------------- // Purpose: shuts the server down and disconnects all clients @@ -86,7 +83,7 @@ namespace VScriptCode if (g_pHostState->m_bActiveGame) g_pHostState->m_iNextState = HostStates_t::HS_GAME_SHUTDOWN; - return SQ_OK; + SCRIPT_CHECK_AND_RETURN(v, SQ_OK); } //----------------------------------------------------------------------------- @@ -102,8 +99,7 @@ namespace VScriptCode reason = nullptr; g_BanSystem.KickPlayerByName(playerName, reason); - - return SQ_OK; + SCRIPT_CHECK_AND_RETURN(v, SQ_OK); } //----------------------------------------------------------------------------- @@ -119,8 +115,7 @@ namespace VScriptCode reason = nullptr; g_BanSystem.KickPlayerById(playerHandle, reason); - - return SQ_OK; + SCRIPT_CHECK_AND_RETURN(v, SQ_OK); } //----------------------------------------------------------------------------- @@ -136,8 +131,7 @@ namespace VScriptCode reason = nullptr; g_BanSystem.BanPlayerByName(playerName, reason); - - return SQ_OK; + SCRIPT_CHECK_AND_RETURN(v, SQ_OK); } //----------------------------------------------------------------------------- @@ -153,8 +147,7 @@ namespace VScriptCode reason = nullptr; g_BanSystem.BanPlayerById(playerHandle, reason); - - return SQ_OK; + SCRIPT_CHECK_AND_RETURN(v, SQ_OK); } //----------------------------------------------------------------------------- @@ -165,7 +158,7 @@ namespace VScriptCode SQChar* szCriteria = sq_getstring(v, 1); g_BanSystem.UnbanPlayer(szCriteria); - return SQ_OK; + SCRIPT_CHECK_AND_RETURN(v, SQ_OK); } //----------------------------------------------------------------------------- @@ -174,7 +167,7 @@ namespace VScriptCode SQRESULT GetNumHumanPlayers(HSQUIRRELVM v) { sq_pushinteger(v, g_pServer->GetNumHumanPlayers()); - return SQ_OK; + SCRIPT_CHECK_AND_RETURN(v, SQ_OK); } //----------------------------------------------------------------------------- @@ -183,7 +176,7 @@ namespace VScriptCode SQRESULT GetNumFakeClients(HSQUIRRELVM v) { sq_pushinteger(v, g_pServer->GetNumFakeClients()); - return SQ_OK; + SCRIPT_CHECK_AND_RETURN(v, SQ_OK); } //----------------------------------------------------------------------------- @@ -192,9 +185,9 @@ namespace VScriptCode SQRESULT IsServerActive(HSQUIRRELVM v) { bool isActive = g_pServer->IsActive(); - sq_pushbool(v, isActive); - return SQ_OK; + + SCRIPT_CHECK_AND_RETURN(v, SQ_OK); } //----------------------------------------------------------------------------- @@ -203,7 +196,7 @@ namespace VScriptCode SQRESULT IsDedicated(HSQUIRRELVM v) { sq_pushbool(v, ::IsDedicated()); - return SQ_OK; + SCRIPT_CHECK_AND_RETURN(v, SQ_OK); } } } diff --git a/r5dev/game/shared/vscript_shared.cpp b/r5dev/game/shared/vscript_shared.cpp index 46dcd47d..2ac26e93 100644 --- a/r5dev/game/shared/vscript_shared.cpp +++ b/r5dev/game/shared/vscript_shared.cpp @@ -28,7 +28,7 @@ namespace VScriptCode SQRESULT GetSDKVersion(HSQUIRRELVM v) { sq_pushstring(v, SDK_VERSION, -1); - return SQ_OK; + SCRIPT_CHECK_AND_RETURN(v, SQ_OK); } //----------------------------------------------------------------------------- @@ -39,7 +39,7 @@ namespace VScriptCode std::lock_guard<std::mutex> l(g_InstalledMapsMutex); if (g_InstalledMaps.IsEmpty()) - return SQ_OK; + SCRIPT_CHECK_AND_RETURN(v, SQ_OK); sq_newarray(v, 0); @@ -51,7 +51,7 @@ namespace VScriptCode sq_arrayappend(v, -2); } - return SQ_OK; + SCRIPT_CHECK_AND_RETURN(v, SQ_OK); } //----------------------------------------------------------------------------- @@ -62,7 +62,7 @@ namespace VScriptCode std::lock_guard<std::mutex> l(g_PlaylistsVecMutex); if (g_vAllPlaylists.empty()) - return SQ_OK; + SCRIPT_CHECK_AND_RETURN(v, SQ_OK); sq_newarray(v, 0); for (const string& it : g_vAllPlaylists) @@ -71,7 +71,7 @@ namespace VScriptCode sq_arrayappend(v, -2); } - return SQ_OK; + SCRIPT_CHECK_AND_RETURN(v, SQ_OK); } SQRESULT ScriptError(HSQUIRRELVM v) @@ -80,12 +80,10 @@ namespace VScriptCode SQInteger a4 = 0; if (SQVM_sprintf(v, 0, 1, &a4, &pString) < 0) - return SQ_ERROR; + SCRIPT_CHECK_AND_RETURN(v, SQ_ERROR); v_SQVM_ScriptError("%s", pString); - - SCRIPT_CHECK_INTERNAL_ERROR(v); - return SQ_ERROR; + SCRIPT_CHECK_AND_RETURN(v, SQ_ERROR); } } } diff --git a/r5dev/vscript/languages/squirrel_re/vsquirrel.h b/r5dev/vscript/languages/squirrel_re/vsquirrel.h index 45db493c..ec419ab7 100644 --- a/r5dev/vscript/languages/squirrel_re/vsquirrel.h +++ b/r5dev/vscript/languages/squirrel_re/vsquirrel.h @@ -94,12 +94,16 @@ inline CSquirrelVM* g_pUIScript; Error(context, EXIT_FAILURE, "Error adding enum '%s' to const table.", enumName); \ sq_endconsttable(v); \ -// Place this at the end of every script func -#define SCRIPT_CHECK_INTERNAL_ERROR(v) \ - SQSharedState* const sharedState = v->_sharedstate; \ - if (sharedState->_internal_error) { \ - CSquirrelVM__ThrowError(sharedState->_scriptvm, v); \ - return SQ_ERROR; \ +// Use this to return from any script func +#define SCRIPT_CHECK_AND_RETURN(v, val) \ + { \ + SQSharedState* const sharedState = v->_sharedstate; \ + if (sharedState->_internal_error) { \ + \ + CSquirrelVM__ThrowError(sharedState->_scriptvm, v); \ + return SQ_ERROR; \ + } \ + return val; \ } ///////////////////////////////////////////////////////////////////////////////