sourcemod 1.13 upgrade. moved all plugins from steamworks to ripext. added smjanson and asyncsocket.inc an extra time so its easier to find. updated plugins that would not compile with 1.13

This commit is contained in:
jenz
2026-09-22 01:55:09 +02:00
parent 789b8ebef9
commit 2947bef434
17 changed files with 2131 additions and 462 deletions
+33 -44
View File
@@ -1,7 +1,6 @@
#include <sourcemod>
#include <SteamWorks>
#include <ripext>
#include <multicolors>
#include <json>
#undef REQUIRE_PLUGIN
#tryinclude <PlayerManager>
@@ -151,72 +150,63 @@ public void SQL_OnQueryCompleted(Database db, DBResultSet results, const char[]
GetClientIP(client, sIP, sizeof(sIP));
char sRequest[256];
FormatEx(sRequest, sizeof(sRequest), "use a url here", sIP, APIKEY);
FormatEx(sRequest, sizeof(sRequest), "use a url here", sIP, APIKEY);
//PrintToConsoleAll(sRequest);
Handle hRequest = SteamWorks_CreateHTTPRequest(k_EHTTPMethodGET, sRequest);
if (!hRequest ||
!SteamWorks_SetHTTPCallbacks(hRequest, OnTransferComplete) ||
!SteamWorks_SetHTTPRequestContextValue(hRequest, iSerial) ||
!SteamWorks_SendHTTPRequest(hRequest))
{
delete hRequest;
}
HTTPRequest hRequest = new HTTPRequest(sRequest);
hRequest.Get(OnTransferComplete, iSerial);
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public int OnTransferComplete(Handle hRequest, bool bFailure, bool bSuccessful, EHTTPStatusCode eStatusCode, int iSerial)
public void OnTransferComplete(HTTPResponse response, any iSerial)
{
int client = GetClientFromSerial(iSerial);
if (!client) //Player disconnected.
{
delete hRequest;
return 0;
}
return;
if (bFailure || !bSuccessful || eStatusCode != k_EHTTPStatusCode200OK)
if (response.Status != HTTPStatus_OK || response.Data == null)
{
delete hRequest;
g_bStatus[client] = STATUS_ERROR;
LogError("Request-Error: %d", eStatusCode);
return 0;
LogError("Request-Error: %d", response.Status);
return;
}
SteamWorks_GetHTTPResponseBodyCallback(hRequest, OnTransferResponse, iSerial);
return 0;
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public int OnTransferResponse(char[] sData, int iSerial)
{
int client = GetClientFromSerial(iSerial);
if (!client) //Player disconnected.
return 0;
char sIP[32];
GetClientIP(client, sIP, sizeof(sIP));
JSON_Object obj = json_decode(sData);
// ripext already decodes the JSON body for us as a native JSONObject; no
JSONObject obj = view_as<JSONObject>(response.Data);
char sStatus[32];
obj.GetString("status", sStatus, sizeof(sStatus));
if (!obj.GetString("status", sStatus, sizeof(sStatus)))
sStatus[0] = '\0';
if (!StrEqual(sStatus, "ok") && !StrEqual(sStatus, "warning"))
{
char sMessage[256];
obj.GetString("message", sMessage, sizeof(sMessage));
if (!obj.GetString("message", sMessage, sizeof(sMessage)))
sMessage[0] = '\0';
LogError("API-Response: %s: %s", sStatus, sMessage);
g_bStatus[client] = STATUS_ERROR;
json_cleanup_and_delete(obj);
return 0;
delete obj;
return;
}
JSON_Object ipobj = obj.GetObject(sIP);
if (!obj.HasKey(sIP))
{
LogError("API-Response: no entry for IP %s", sIP);
g_bStatus[client] = STATUS_ERROR;
delete obj;
return;
}
JSONObject ipobj = view_as<JSONObject>(obj.Get(sIP));
char sProxy[16];
ipobj.GetString("proxy", sProxy, sizeof(sProxy));
if (!ipobj.GetString("proxy", sProxy, sizeof(sProxy)))
sProxy[0] = '\0';
if (StrEqual(sProxy, "no"))
g_bStatus[client] = STATUS_SAFE;
else
@@ -238,10 +228,8 @@ public int OnTransferResponse(char[] sData, int iSerial)
Format(sQuery, sizeof(sQuery), "INSERT INTO ip_table (ip, type, last_check) VALUES ('%s', '%d', '%d') ON DUPLICATE KEY UPDATE type='%d', last_check='%d';", sIP, g_bStatus[client], iCurrentTime, g_bStatus[client], iCurrentTime);
g_hDatabase.Query(SQL_OnQueryCompleted, sQuery, _, DBPrio_Low);
//https://github.com/clugg/sm-json/blob/master/addons/sourcemod/scripting/json_test.sp#L446
//as far as i can tell i just need to call json_cleanup_and_delete() on the most outer json object, all its children should get cleaned and deleted as well.
json_cleanup_and_delete(obj);
return 0;
delete ipobj;
delete obj;
}
//----------------------------------------------------------------------------------------------------
@@ -405,3 +393,4 @@ public void OnLibraryRemoved(const char[] sName)
if (strcmp(sName, "PlayerManager", false) == 0)
g_bPMLoaded = false;
}