SourcePawn:AdminCheats

From Devicenull's Code

Jump to: navigation, search

This plugin allows admins to use commands that have the FCVAR_CHEAT flag

#pragma semicolon 1
 
#include <sourcemod>
 
#define PLUGIN_VERSION "0.1"
public Plugin:myinfo =
{
	name = "AdminCheats",
	author = "devicenull",
	description = "Allow admins to use cheat commands",
	version = PLUGIN_VERSION,
	url = "http://www.sourcemod.net/"
};
 
#define MAX_COMMANDS 512
 
new String:hooked[MAX_COMMANDS][128];
new nextHooked=0;
new Handle:cCheatOverride;
 
public OnPluginStart()
{
	cCheatOverride = CreateConVar("sm_admin_cheats_level","z","Level required to execute cheat commands",FCVAR_PLUGIN);
	CreateConVar("sm_admin_cheats_version",PLUGIN_VERSION,"Version Information",FCVAR_REPLICATED|FCVAR_NOTIFY);
 
	new String:cmdname[128];
	new bool:iscmd, cmdflags;
	new Handle:cmds = FindFirstConCommand(cmdname,128,iscmd,cmdflags);
	do
	{
		if (cmdflags&FCVAR_CHEAT && iscmd && nextHooked < MAX_COMMANDS)
		{
			RegConsoleCmd(cmdname,cheatcommand);
			SetCommandFlags(cmdname,GetCommandFlags(cmdname)^FCVAR_CHEAT);
			strcopy(hooked[nextHooked++],128,cmdname);
		}
	}
	while (FindNextConCommand(cmds,cmdname,128,iscmd,cmdflags));
	PrintToServer("admincheats hooked %i commands",nextHooked);
	if (nextHooked >= MAX_COMMANDS)
	{
		LogToGame("[admincheats] WARNING: Too many cheat commands to hook them all, increase MAX_COMMANDS");
	}
}
 
public OnPluginEnd()
{
	PrintToServer("admincheats unloaded, restoring cheat flags");
	for (new i=0;i<nextHooked;i++)
	{
		SetCommandFlags(hooked[i],GetCommandFlags(hooked[i])|FCVAR_CHEAT);
	}
}
 
public Action:cheatcommand(client, args)
{
	new String:access[8];
	GetConVarString(cCheatOverride,access,8);
	new String:argstring[256];
	GetCmdArg(0,argstring,256);
	if (client == 0)
	{
		LogAction(0,-1,"%L ran cheat command '%s'",0,argstring);
		return Plugin_Continue;
	}
	if (GetUserFlagBits(client)&ReadFlagString(access) > 0 || GetUserFlagBits(client)&ADMFLAG_ROOT > 0)
	{
		LogAction(client,-1,"%L ran cheat command '%s'",client,argstring);
		return Plugin_Continue;
	}
	LogAction(client,-1,"%L was prevented from running cheat command '%s'",0,argstring);
	return Plugin_Handled;
}
Personal tools