plugins/basecommands.sp
changeset 2775 8a4cfe1215a7
parent 2289 44045ead61cd
child 3362 fb501ca9b4d3
     1.1 --- a/plugins/basecommands.sp	Thu Aug 20 03:02:43 2009 -0400
     1.2 +++ b/plugins/basecommands.sp	Mon Aug 24 08:55:34 2009 +1200
     1.3 @@ -67,6 +67,7 @@
     1.4  	RegAdminCmd("sm_map", Command_Map, ADMFLAG_CHANGEMAP, "sm_map <map>");
     1.5  	RegAdminCmd("sm_rcon", Command_Rcon, ADMFLAG_RCON, "sm_rcon <args>");
     1.6  	RegAdminCmd("sm_cvar", Command_Cvar, ADMFLAG_CONVARS, "sm_cvar <cvar> [value]");
     1.7 +	RegAdminCmd("sm_resetcvar", Command_ResetCvar, ADMFLAG_CONVARS, "sm_resetcvar <cvar>");
     1.8  	RegAdminCmd("sm_execcfg", Command_ExecCfg, ADMFLAG_CONFIG, "sm_execcfg <filename>");
     1.9  	RegAdminCmd("sm_who", Command_Who, ADMFLAG_GENERIC, "sm_who [#userid|name]");
    1.10  	RegAdminCmd("sm_reloadadmins", Command_ReloadAdmins, ADMFLAG_BAN, "sm_reloadadmins");
    1.11 @@ -115,6 +116,36 @@
    1.12  	return GetTrieValue(g_ProtectedVars, cvar, dummy_value);
    1.13  }
    1.14  
    1.15 +bool:IsClientAllowedToChangeCvar(client, const String:cvarname[])
    1.16 +{
    1.17 +	new Handle:hndl = FindConVar(cvarname);
    1.18 +
    1.19 +	new bool:allowed = false;
    1.20 +	new client_flags = client == 0 ? ADMFLAG_ROOT : GetUserFlagBits(client);
    1.21 +	
    1.22 +	if (client_flags & ADMFLAG_ROOT)
    1.23 +	{
    1.24 +		allowed = true;
    1.25 +	}
    1.26 +	else
    1.27 +	{
    1.28 +		if (GetConVarFlags(hndl) & FCVAR_PROTECTED)
    1.29 +		{
    1.30 +			allowed = ((client_flags & ADMFLAG_PASSWORD) == ADMFLAG_PASSWORD);
    1.31 +		}
    1.32 +		else if (StrEqual(cvarname, "sv_cheats"))
    1.33 +		{
    1.34 +			allowed = ((client_flags & ADMFLAG_CHEATS) == ADMFLAG_CHEATS);
    1.35 +		}
    1.36 +		else if (!IsVarProtected(cvarname))
    1.37 +		{
    1.38 +			allowed = true;
    1.39 +		}
    1.40 +	}
    1.41 +
    1.42 +	return allowed;
    1.43 +}
    1.44 +
    1.45  public OnAdminMenuReady(Handle:topmenu)
    1.46  {
    1.47  	/* Block us from being called twice */
    1.48 @@ -295,31 +326,8 @@
    1.49  		ReplyToCommand(client, "[SM] %t", "Unable to find cvar", cvarname);
    1.50  		return Plugin_Handled;
    1.51  	}
    1.52 -	
    1.53 -	new bool:allowed = false;
    1.54 -	new client_flags = client == 0 ? ADMFLAG_ROOT : GetUserFlagBits(client);
    1.55 -	
    1.56 -	if (client_flags & ADMFLAG_ROOT)
    1.57 -	{
    1.58 -		allowed = true;
    1.59 -	}
    1.60 -	else
    1.61 -	{
    1.62 -		if (GetConVarFlags(hndl) & FCVAR_PROTECTED)
    1.63 -		{
    1.64 -			allowed = ((client_flags & ADMFLAG_PASSWORD) == ADMFLAG_PASSWORD);
    1.65 -		}
    1.66 -		else if (StrEqual(cvarname, "sv_cheats"))
    1.67 -		{
    1.68 -			allowed = ((client_flags & ADMFLAG_CHEATS) == ADMFLAG_CHEATS);
    1.69 -		}
    1.70 -		else if (!IsVarProtected(cvarname))
    1.71 -		{
    1.72 -			allowed = true;
    1.73 -		}
    1.74 -	}
    1.75 -	
    1.76 -	if (!allowed)
    1.77 +
    1.78 +	if (!IsClientAllowedToChangeCvar(client, cvarname))
    1.79  	{
    1.80  		ReplyToCommand(client, "[SM] %t", "No access to cvar");
    1.81  		return Plugin_Handled;
    1.82 @@ -352,6 +360,50 @@
    1.83  	return Plugin_Handled;
    1.84  }
    1.85  
    1.86 +public Action:Command_ResetCvar(client, args)
    1.87 +{
    1.88 +	if (args < 1)
    1.89 +	{
    1.90 +		ReplyToCommand(client, "[SM] Usage: sm_resetcvar <cvar>");
    1.91 +
    1.92 +		return Plugin_Handled;
    1.93 +	}
    1.94 +
    1.95 +	decl String:cvarname[64];
    1.96 +	GetCmdArg(1, cvarname, sizeof(cvarname));
    1.97 +	
    1.98 +	new Handle:hndl = FindConVar(cvarname);
    1.99 +	if (hndl == INVALID_HANDLE)
   1.100 +	{
   1.101 +		ReplyToCommand(client, "[SM] %t", "Unable to find cvar", cvarname);
   1.102 +		return Plugin_Handled;
   1.103 +	}
   1.104 +	
   1.105 +	if (!IsClientAllowedToChangeCvar(client, cvarname))
   1.106 +	{
   1.107 +		ReplyToCommand(client, "[SM] %t", "No access to cvar");
   1.108 +		return Plugin_Handled;
   1.109 +	}
   1.110 +
   1.111 +	ResetConVar(hndl);
   1.112 +
   1.113 +	decl String:value[255];
   1.114 +	GetConVarString(hndl, value, sizeof(value));
   1.115 +
   1.116 +	if ((GetConVarFlags(hndl) & FCVAR_PROTECTED) != FCVAR_PROTECTED)
   1.117 +	{
   1.118 +		ShowActivity2(client, "[SM] ", "%t", "Cvar changed", cvarname, value);
   1.119 +	}
   1.120 +	else
   1.121 +	{
   1.122 +		ReplyToCommand(client, "[SM] %t", "Cvar changed", cvarname, value);
   1.123 +	}
   1.124 +
   1.125 +	LogAction(client, -1, "\"%L\" reset cvar (cvar \"%s\") (value \"%s\")", client, cvarname, value);
   1.126 +
   1.127 +	return Plugin_Handled;
   1.128 +}
   1.129 +
   1.130  public Action:Command_Rcon(client, args)
   1.131  {
   1.132  	if (args < 1)