config-loader/scripting/config_loader.sp

119 lines
3.1 KiB
SourcePawn

#include <sourcemod>
#include <tf2_stocks>
#include <morecolors>
// ^ tf2_stocks.inc itself includes sdktools.inc and tf2.inc
#pragma semicolon 1
#pragma newdecls required
#define PLUGIN_VERSION "0.1"
public Plugin myinfo =
{
name = "Config Reminder",
author = "Rhizome",
description = "Hassles users until they exec",
version = PLUGIN_VERSION,
url = "https://rhizome.tf"
};
public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max)
{
// No need for the old GetGameFolderName setup.
EngineVersion g_engineversion = GetEngineVersion();
if (g_engineversion != Engine_TF2)
{
SetFailState("This plugin was made for use with Team Fortress 2 only.");
}
}
public void OnPluginStart()
{
/**
* @note For the love of god, please stop using FCVAR_PLUGIN.
* Console.inc even explains this above the entry for the FCVAR_PLUGIN define.
* "No logic using this flag ever existed in a released game. It only ever appeared in the first hl2sdk."
*/
CreateConVar("sm_pluginnamehere_version", PLUGIN_VERSION, "Standard plugin version ConVar. Please don't change me!", FCVAR_REPLICATED|FCVAR_NOTIFY|FCVAR_DONTRECORD);
}
public void OnMapStart()
{
/**
* @note Precache your models, sounds, etc. here!
* Not in OnConfigsExecuted! Doing so leads to issues.
*/
CreateTimer(15.0, PostReminder, 0, TIMER_REPEAT);
HookEvent("teamplay_restart_round", BlockStart, EventHookMode_Pre);
char config_name[64];
LoadConfig(config_name, sizeof(config_name));
}
Action PostReminder(Handle timer, any data)
{
CPrintToChatAll("{red}No config is applied! Ensure config is applied before starting.");
return Plugin_Handled;
}
Action BlockStart(Event event, const char[] name, bool dontBroadcast)
{
ServerCommand("mp_tournament_restart");
CPrintToChatAll("{red}Bad rollout! {default}(Did you forget to exec?)");
return Plugin_Handled;
}
bool LoadConfig(char[] config_name, int maxlength)
{
char current_map[64];
GetCurrentMap(current_map, sizeof(current_map));
char map_type[8];
if (SplitString(current_map, "_", map_type, sizeof(map_type)) == -1)
{
PrintToServer("[AUTOCONFIG] Couldn't find map prefix'");
return false;
}
KeyValues map_configs = CreateKeyValues("Map_Configs");
char config_file[256];
BuildPath(Path_SM, config_file, sizeof(config_file), "configs/config_loader.cfg");
map_configs.ImportFromFile(config_file);
if (!map_configs.JumpToKey(map_type))
{
PrintToServer("[AUTOCONFIG] Couldn't find table for '%s' maps'", map_type);
return false;
}
if (!map_configs.GotoFirstSubKey(false))
{
PrintToServer("[AUTOCONFIG] No maps listed for '%s' maps'", map_type);
return false;
}
while (true)
{
char current_key[64];
map_configs.GetSectionName(current_key, sizeof(current_key));
PrintToServer(current_key);
if (StrContains(current_map, current_key, false) != -1)
{
map_configs.GoBack()
map_configs.GetString(current_key, config_name, maxlength);
PrintToServer("[AUTOCONFIG] Found applicable config: %s", config_name);
return true;
}
if (!map_configs.GotoNextKey(false))
{
PrintToServer("[AUTOCONFIG] No match found for %s", current_map);
return false;
}
}
}