180 lines
4.9 KiB
SourcePawn
180 lines
4.9 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 "1.1"
|
|
|
|
ConVar g_cvarConfigName;
|
|
bool g_bConfigLoaded = false;
|
|
bool g_bBlocked = false;
|
|
Handle g_reminder_timer;
|
|
|
|
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);
|
|
g_cvarConfigName = CreateConVar("sm_configloader_cfgname", "NULL", "User-friendly name of the current loaded config");
|
|
g_cvarConfigName.AddChangeHook(ConfigNameChangeCallback);
|
|
|
|
HookEvent("teamplay_restart_round", BlockStart, EventHookMode_Pre);
|
|
}
|
|
|
|
public void OnMapStart()
|
|
{
|
|
/**
|
|
* @note Precache your models, sounds, etc. here!
|
|
* Not in OnConfigsExecuted! Doing so leads to issues.
|
|
*/
|
|
g_reminder_timer = CreateTimer(60.0, PostReminder, 0, TIMER_REPEAT);
|
|
|
|
char config_name[64];
|
|
LoadConfig(config_name, sizeof(config_name));
|
|
|
|
if (StrEqual(config_name, "variable"))
|
|
{
|
|
g_bConfigLoaded = false;
|
|
PrintToServer("[AUTOCONFIG] Config Loaded FALSE");
|
|
PrintToServer("[AUTOCONFIG] Blocking Match Start");
|
|
}
|
|
else
|
|
{
|
|
ServerCommand("exec %s", config_name);
|
|
}
|
|
}
|
|
|
|
public void OnMapEnd()
|
|
{
|
|
KillTimer(g_reminder_timer);
|
|
g_bConfigLoaded = false;
|
|
g_bBlocked = false;
|
|
g_cvarConfigName.SetString("NULL");
|
|
PrintToServer("[AUTOCONFIG] Config Loaded FALSE");
|
|
PrintToServer("[AUTOCONFIG] Blocking Match Start");
|
|
}
|
|
|
|
Action PostReminder(Handle timer, any data)
|
|
{
|
|
if (g_bConfigLoaded)
|
|
{
|
|
char config_name[64];
|
|
g_cvarConfigName.GetString(config_name, sizeof(config_name));
|
|
CPrintToChatAll("{green}Config loaded: %s", config_name);
|
|
return Plugin_Handled;
|
|
}
|
|
else
|
|
{
|
|
CPrintToChatAll("{red}No config is applied! Ensure config is applied before starting.");
|
|
return Plugin_Handled;
|
|
}
|
|
}
|
|
|
|
Action BlockStart(Event event, const char[] name, bool dontBroadcast)
|
|
{
|
|
if (g_bConfigLoaded || g_bBlocked)
|
|
{
|
|
KillTimer(g_reminder_timer);
|
|
PrintToServer("[AUTOCONFIG] Match started, going silent.");
|
|
return Plugin_Continue;
|
|
}
|
|
g_bBlocked = true;
|
|
ServerCommand("mp_tournament_restart");
|
|
CPrintToChatAll("{yellow}Bad rollout! {default}(Did you forget to exec?)");
|
|
CPrintToChatAll("{default} RUP again to ignore warning");
|
|
PrintToServer("[AUTOCONFIG] Match start blocked due to no config");
|
|
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);
|
|
delete map_configs;
|
|
return false;
|
|
}
|
|
|
|
|
|
if (!map_configs.GotoFirstSubKey(false))
|
|
{
|
|
PrintToServer("[AUTOCONFIG] No maps listed for '%s' maps'", map_type);
|
|
delete map_configs;
|
|
return false;
|
|
}
|
|
|
|
|
|
while (true)
|
|
{
|
|
char current_key[64];
|
|
map_configs.GetSectionName(current_key, sizeof(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);
|
|
delete map_configs;
|
|
return true;
|
|
}
|
|
|
|
if (!map_configs.GotoNextKey(false))
|
|
{
|
|
PrintToServer("[AUTOCONFIG] No match found for %s", current_map);
|
|
delete map_configs;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
void ConfigNameChangeCallback(ConVar convar, const char[] oldValue, const char[] newValue)
|
|
{
|
|
if (!StrEqual(newValue, "NULL"))
|
|
{
|
|
g_bConfigLoaded = true;
|
|
PrintToServer("[AUTOCONFIG] Config Loaded TRUE");
|
|
PrintToServer("[AUTOCONFIG] Unblocking Match Start");
|
|
}
|
|
} |