mirror of
https://codeberg.org/spire/sm_whitelist.git
synced 2026-06-03 18:24:06 +02:00
initial version
This commit is contained in:
commit
80e3f4c5c6
3 changed files with 129 additions and 0 deletions
21
README.md
Normal file
21
README.md
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
# Sourcemod Whitelist Downloader
|
||||
|
||||
Download and execute whitelists from [whitelist.tf](http://whitelist.tf/)
|
||||
|
||||
## Installation
|
||||
|
||||
Requires [`curl`](https://forums.alliedmods.net/showthread.php?t=152216)
|
||||
|
||||
## Usage
|
||||
|
||||
To load a pre-made whitelist
|
||||
|
||||
```
|
||||
sm_whitelist_id etf2l_6v6_s22
|
||||
```
|
||||
|
||||
To load a custom whitelist
|
||||
|
||||
```
|
||||
sm_whitelist_id 4874
|
||||
```
|
||||
BIN
plugin/whitelisttf.smx
Normal file
BIN
plugin/whitelisttf.smx
Normal file
Binary file not shown.
108
plugin/whitelisttf.sp
Normal file
108
plugin/whitelisttf.sp
Normal file
|
|
@ -0,0 +1,108 @@
|
|||
#pragma semicolon 1
|
||||
#include <sourcemod>
|
||||
#include <cURL>
|
||||
#include <tf2>
|
||||
|
||||
public Plugin:myinfo =
|
||||
{
|
||||
name = "whitelist.tf downloader",
|
||||
author = "Icewind",
|
||||
description = "Download whitelists from whitelist.tf",
|
||||
version = "0.1",
|
||||
url = "https://whitelist.tf"
|
||||
};
|
||||
|
||||
new CURL_Default_opt[][2] = {
|
||||
{_:CURLOPT_NOSIGNAL,1},
|
||||
{_:CURLOPT_NOPROGRESS,1},
|
||||
{_:CURLOPT_TIMEOUT,30},
|
||||
{_:CURLOPT_CONNECTTIMEOUT,60},
|
||||
{_:CURLOPT_USE_SSL,CURLUSESSL_TRY},
|
||||
{_:CURLOPT_SSL_VERIFYPEER,0},
|
||||
{_:CURLOPT_SSL_VERIFYHOST,0},
|
||||
{_:CURLOPT_VERBOSE,0}
|
||||
};
|
||||
|
||||
#define CURL_DEFAULT_OPT(%1) curl_easy_setopt_int_array(%1, CURL_Default_opt, sizeof(CURL_Default_opt))
|
||||
|
||||
new Handle:g_hCvarUrl = INVALID_HANDLE;
|
||||
new Handle:output_file = INVALID_HANDLE;
|
||||
|
||||
new String:lastId[128] = "";
|
||||
new bool:execLast = true;
|
||||
|
||||
public OnPluginStart()
|
||||
{
|
||||
g_hCvarUrl = CreateConVar("sm_whitelist_tf_base", "http://whitelist.tf/download", "whitelist.tf download endpoint", FCVAR_PROTECTED);
|
||||
|
||||
RegConsoleCmd("sm_whitelist_id", DownloadWhiteListAction, "Download and execute a whitelist");
|
||||
}
|
||||
|
||||
public Action:DownloadWhiteListAction(client, args)
|
||||
{
|
||||
new String:arg[128];
|
||||
|
||||
if(args != 1) {
|
||||
PrintToServer("Usage: sm_whitelist_tf %whitelistid%");
|
||||
}
|
||||
|
||||
GetCmdArg(1, arg, sizeof(arg));
|
||||
|
||||
new intId = StringToInt(arg);
|
||||
if(intId > 0) {
|
||||
Format(arg, sizeof(arg), "custom_whitelist_%s", arg);
|
||||
}
|
||||
PrintToChatAll("Loading whitelist %s", arg);
|
||||
DownloadWhiteList(arg, true);
|
||||
return Plugin_Handled;
|
||||
}
|
||||
|
||||
public DownloadWhiteList(String:whiteListId[128], bool:exec)
|
||||
{
|
||||
execLast = exec;
|
||||
lastId = whiteListId;
|
||||
decl String:fullUrl[512];
|
||||
decl String:targetPath[128];
|
||||
decl String:BaseUrl[128];
|
||||
GetConVarString(g_hCvarUrl, BaseUrl, sizeof(BaseUrl));
|
||||
new Handle:curl = curl_easy_init();
|
||||
CURL_DEFAULT_OPT(curl);
|
||||
|
||||
Format(fullUrl, sizeof(fullUrl), "%s/%s.txt", BaseUrl, whiteListId);
|
||||
|
||||
Format(targetPath, sizeof(targetPath), "cfg/%s.txt", whiteListId);
|
||||
|
||||
output_file = curl_OpenFile(targetPath, "w");
|
||||
curl_easy_setopt_handle(curl, CURLOPT_WRITEDATA, output_file);
|
||||
curl_easy_setopt_string(curl, CURLOPT_URL, fullUrl);
|
||||
curl_easy_perform_thread(curl, onComplete);
|
||||
}
|
||||
|
||||
public onComplete(Handle:hndl, CURLcode:code)
|
||||
{
|
||||
CloseHandle(hndl);
|
||||
if(code != CURLE_OK)
|
||||
{
|
||||
PrintToChatAll("Error downloading whitelist %s", lastId);
|
||||
PrintToChatAll("cURLCode error: %d", code);
|
||||
}
|
||||
else
|
||||
{
|
||||
decl String:targetPath[128];
|
||||
Format(targetPath, sizeof(targetPath), "cfg/%s.txt", lastId);
|
||||
if(execLast) {
|
||||
execWhiteList(targetPath);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
public execWhiteList(String:whitelist[128])
|
||||
{
|
||||
decl String:command[512];
|
||||
PrintToChatAll("Whitelist loaded");
|
||||
Format(command, sizeof(command), "mp_tournament_whitelist %s", whitelist);
|
||||
ServerCommand(command, sizeof(command));
|
||||
command = "mp_tournament_restart";
|
||||
ServerCommand(command, sizeof(command));
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue