1
0
Fork 0
mirror of https://codeberg.org/demostf/plugin.git synced 2026-06-04 00:54:08 +02:00

Update the latest version of the plugin

This commit is contained in:
⭐ B3none 2019-10-09 20:53:12 +01:00 committed by GitHub
commit 9edc80d509
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1,25 +1,27 @@
#pragma semicolon 1
#include <sourcemod> #include <sourcemod>
#include <cURL> #include <cURL>
public Plugin:myinfo = #pragma semicolon 1
#pragma newdecls required
public Plugin myinfo =
{ {
name = "demos.tf uploader", name = "demos.tf uploader",
author = "Icewind", author = "Icewind, B3none",
description = "Auto-upload match stv to demos.tf", description = "Auto-upload match stv to demos.tf",
version = "0.2", version = "0.3",
url = "https://demos.tf" url = "https://demos.tf"
}; };
new CURL_Default_opt[][2] = { CURL_Default_opt[][2] = {
{_:CURLOPT_NOSIGNAL,1}, {view_as<int>(CURLOPT_NOSIGNAL), 1},
{_:CURLOPT_NOPROGRESS,1}, {view_as<int>(CURLOPT_NOPROGRESS), 1},
{_:CURLOPT_TIMEOUT,120}, {view_as<int>(CURLOPT_TIMEOUT), 120},
{_:CURLOPT_CONNECTTIMEOUT,120}, {view_as<int>(CURLOPT_CONNECTTIMEOUT), 120},
{_:CURLOPT_USE_SSL,CURLUSESSL_TRY}, {view_as<int>(CURLOPT_USE_SSL),CURLUSESSL_TRY},
{_:CURLOPT_SSL_VERIFYPEER,0}, {view_as<int>(CURLOPT_SSL_VERIFYPEER), 0},
{_:CURLOPT_SSL_VERIFYHOST,0}, {view_as<int>(CURLOPT_SSL_VERIFYHOST), 0},
{_:CURLOPT_VERBOSE,0} {view_as<int>(CURLOPT_VERBOSE), 0}
}; };
/** /**
@ -28,26 +30,26 @@ new CURL_Default_opt[][2] = {
* @param buffer String to convert * @param buffer String to convert
* @noreturn * @noreturn
*/ */
public CStrToLower(String:buffer[]) { public void CStrToLower(char[] buffer) {
new len = strlen(buffer); int len = strlen(buffer);
for(new i = 0; i < len; i++) { for (int i = 0; i < len; i++) {
buffer[i] = CharToLower(buffer[i]); buffer[i] = CharToLower(buffer[i]);
} }
} }
#define CURL_DEFAULT_OPT(%1) curl_easy_setopt_int_array(%1, CURL_Default_opt, sizeof(CURL_Default_opt)) #define CURL_DEFAULT_OPT(%1) curl_easy_setopt_int_array(%1, CURL_Default_opt, sizeof(CURL_Default_opt))
new String:g_sDemoName[256] = ""; char g_sDemoName[256] = "";
new String:g_sLastDemoName[256] = ""; char g_sLastDemoName[256] = "";
new Handle:g_hCvarAPIKey = INVALID_HANDLE; Handle g_hCvarAPIKey = null;
new Handle:g_hCvarUrl = INVALID_HANDLE; Handle g_hCvarUrl = null;
new Handle:output_file = INVALID_HANDLE; Handle output_file = null;
new Handle:postForm = INVALID_HANDLE; Handle postForm = null;
new Handle:g_hCvarRedTeamName = INVALID_HANDLE; Handle g_hCvarRedTeamName = null;
new Handle:g_hCvarBlueTeamName = INVALID_HANDLE; Handle g_hCvarBlueTeamName = null;
public OnPluginStart() public void OnPluginStart()
{ {
g_hCvarAPIKey = CreateConVar("sm_demostf_apikey", "", "API key for demos.tf", FCVAR_PROTECTED); g_hCvarAPIKey = CreateConVar("sm_demostf_apikey", "", "API key for demos.tf", FCVAR_PROTECTED);
g_hCvarUrl = CreateConVar("sm_demostf_url", "https://demos.tf", "demos.tf url", FCVAR_PROTECTED); g_hCvarUrl = CreateConVar("sm_demostf_url", "https://demos.tf", "demos.tf url", FCVAR_PROTECTED);
@ -58,48 +60,51 @@ public OnPluginStart()
RegServerCmd("tv_stoprecord", Command_StopRecord); RegServerCmd("tv_stoprecord", Command_StopRecord);
} }
public Action:Command_StartRecord(args) public Action Command_StartRecord(int args)
{ {
if (strlen(g_sDemoName) == 0) { if (strlen(g_sDemoName) == 0) {
GetCmdArgString(g_sDemoName, sizeof(g_sDemoName)); GetCmdArgString(g_sDemoName, sizeof(g_sDemoName));
StripQuotes(g_sDemoName); StripQuotes(g_sDemoName);
CStrToLower(g_sDemoName); CStrToLower(g_sDemoName);
} }
return Plugin_Continue; return Plugin_Continue;
} }
public Action:Command_StopRecord(args) public Action Command_StopRecord(int args)
{ {
TrimString(g_sDemoName); TrimString(g_sDemoName);
if (strlen(g_sDemoName) != 0) { if (strlen(g_sDemoName) != 0) {
PrintToChatAll("[demos.tf]: Demo recording completed"); PrintToChatAll("[demos.tf]: Demo recording completed");
g_sLastDemoName = g_sDemoName; g_sLastDemoName = g_sDemoName;
g_sDemoName = ""; g_sDemoName = "";
CreateTimer(3.0, StartDemoUpload); CreateTimer(3.0, StartDemoUpload);
} }
return Plugin_Continue; return Plugin_Continue;
} }
public Action:StartDemoUpload(Handle:timer) public Action StartDemoUpload(Handle timer)
{ {
decl String:fullPath[128]; char fullPath[128];
Format(fullPath, sizeof(fullPath), "%s.dem", g_sLastDemoName); Format(fullPath, sizeof(fullPath), "%s.dem", g_sLastDemoName);
UploadDemo(fullPath); UploadDemo(fullPath);
} }
UploadDemo(const String:fullPath[]) void UploadDemo(const char[] fullPath)
{ {
decl String:APIKey[128]; char APIKey[128];
GetConVarString(g_hCvarAPIKey, APIKey, sizeof(APIKey)); GetConVarString(g_hCvarAPIKey, APIKey, sizeof(APIKey));
decl String:BaseUrl[64]; char BaseUrl[64];
GetConVarString(g_hCvarUrl, BaseUrl, sizeof(BaseUrl)); GetConVarString(g_hCvarUrl, BaseUrl, sizeof(BaseUrl));
new String:Map[64]; char Map[64];
GetCurrentMap(Map, sizeof(Map)); GetCurrentMap(Map, sizeof(Map));
PrintToChatAll("[demos.tf]: Uploading demo %s", fullPath); PrintToChatAll("[demos.tf]: Uploading demo %s", fullPath);
new Handle:curl = curl_easy_init(); Handle curl = curl_easy_init();
CURL_DEFAULT_OPT(curl); CURL_DEFAULT_OPT(curl);
decl String:bluname[128]; char bluname[128];
decl String:redname[128]; char redname[128];
GetConVarString(g_hCvarRedTeamName, redname, sizeof(redname)); GetConVarString(g_hCvarRedTeamName, redname, sizeof(redname));
GetConVarString(g_hCvarBlueTeamName, bluname, sizeof(bluname)); GetConVarString(g_hCvarBlueTeamName, bluname, sizeof(bluname));
@ -113,37 +118,33 @@ UploadDemo(const String:fullPath[])
output_file = curl_OpenFile("output_demo.json", "w"); output_file = curl_OpenFile("output_demo.json", "w");
curl_easy_setopt_handle(curl, CURLOPT_WRITEDATA, output_file); curl_easy_setopt_handle(curl, CURLOPT_WRITEDATA, output_file);
decl String:fullUrl[128]; char fullUrl[128];
Format(fullUrl, sizeof(fullUrl), "%s/upload", BaseUrl); Format(fullUrl, sizeof(fullUrl), "%s/upload", BaseUrl);
curl_easy_setopt_string(curl, CURLOPT_URL, fullUrl); curl_easy_setopt_string(curl, CURLOPT_URL, fullUrl);
curl_easy_perform_thread(curl, onComplete); curl_easy_perform_thread(curl, onComplete);
} }
public onComplete(Handle:hndl, CURLcode:code) public bool onComplete(Handle hndl, CURLcode code)
{ {
if(code != CURLE_OK) if (code != CURLE_OK) {
{ char error_buffer[256];
new String:error_buffer[256];
curl_easy_strerror(code, error_buffer, sizeof(error_buffer)); curl_easy_strerror(code, error_buffer, sizeof(error_buffer));
CloseHandle(output_file); CloseHandle(output_file);
CloseHandle(hndl); CloseHandle(hndl);
PrintToChatAll("cURLCode error: %d", code); PrintToChatAll("cURLCode error: %d", code);
} } else {
else
{
CloseHandle(output_file); CloseHandle(output_file);
CloseHandle(hndl); CloseHandle(hndl);
ShowResponse(); ShowResponse();
} }
CloseHandle(postForm); CloseHandle(postForm);
return;
} }
public ShowResponse() public void ShowResponse()
{ {
new Handle:resultFile = OpenFile("output_demo.json", "r"); Handle resultFile = OpenFile("output_demo.json", "r");
new String:output[512]; char output[512];
ReadFileString(resultFile, output, sizeof(output)); ReadFileString(resultFile, output, sizeof(output));
PrintToChatAll("[demos.tf]: %s", output); PrintToChatAll("[demos.tf]: %s", output);
return;
} }