plugins/admin-flatfile/admin-overrides.sp
author David Anderson <dvander@alliedmods.net>
Tue Feb 06 05:07:49 2007 +0000 (2007-02-06)
changeset 437 cc8dcd9f8099
child 438 e6e11c82d87e
permissions -rw-r--r--
renamed this plugin
dvander@437
     1
#define OVERRIDE_STATE_NONE			0
dvander@437
     2
#define OVERRIDE_STATE_LEVELS		1
dvander@437
     3
#define OVERRIDE_STATE_OVERRIDES	2
dvander@437
     4
dvander@437
     5
static Handle:g_hOverrideParser = INVALID_HANDLE;
dvander@437
     6
static g_OverrideState = OVERRIDE_STATE_NONE;
dvander@437
     7
dvander@437
     8
static LogOverrideError(const String:format[], {Handle,String,Float,_}:...)
dvander@437
     9
{
dvander@437
    10
	decl String:buffer[512];
dvander@437
    11
	
dvander@437
    12
	if (!g_LoggedFileName)
dvander@437
    13
	{
dvander@437
    14
		LogError("Error(s) detected parsing admin_levels.cfg:");
dvander@437
    15
		g_LoggedFileName = true;
dvander@437
    16
	}
dvander@437
    17
	
dvander@437
    18
	VFormat(buffer, sizeof(buffer), format, 2);
dvander@437
    19
	
dvander@437
    20
	LogError(" (%d) %s", ++g_ErrorCount, buffer);
dvander@437
    21
}
dvander@437
    22
dvander@437
    23
dvander@437
    24
public SMCResult:ReadOverrides_NewSection(Handle:smc, const String:name[], bool:opt_quotes)
dvander@437
    25
{
dvander@437
    26
	if (g_OverrideState == OVERRIDE_STATE_NONE)
dvander@437
    27
	{
dvander@437
    28
		if (StrEqual(name, "Levels"))
dvander@437
    29
		{
dvander@437
    30
			g_OverrideState = OVERRIDE_STATE_LEVELS;
dvander@437
    31
		}
dvander@437
    32
	} else if (g_OverrideState == OVERRIDE_STATE_LEVELS) {
dvander@437
    33
		if (StrEqual(name, "Overrides"))
dvander@437
    34
		{
dvander@437
    35
			g_OverrideState = OVERRIDE_STATE_OVERRIDES;
dvander@437
    36
		}
dvander@437
    37
	}
dvander@437
    38
	
dvander@437
    39
	return SMCParse_Continue;
dvander@437
    40
}
dvander@437
    41
dvander@437
    42
public SMCResult:ReadOverrides_KeyValue(Handle:smc, 
dvander@437
    43
										const String:key[], 
dvander@437
    44
										const String:value[], 
dvander@437
    45
										bool:key_quotes, 
dvander@437
    46
										bool:value_quotes)
dvander@437
    47
{
dvander@437
    48
	if (g_OverrideState != OVERRIDE_STATE_OVERRIDES)
dvander@437
    49
	{
dvander@437
    50
		return SMCParse_Continue;
dvander@437
    51
	}
dvander@437
    52
	
dvander@437
    53
	new AdminFlag:flag = Admin_None;
dvander@437
    54
	
dvander@437
    55
	if (strlen(value) > 1)
dvander@437
    56
	{
dvander@437
    57
		LogOverrideError("Unrecognized access level: %s", value);
dvander@437
    58
		return SMCParse_Continue;
dvander@437
    59
	}
dvander@437
    60
	
dvander@437
    61
	if (value[0] >= 'a' && value[0] <= 'z')
dvander@437
    62
	{
dvander@437
    63
		flag = g_FlagLetters[value[0] - 'a'];
dvander@437
    64
	}
dvander@437
    65
	
dvander@437
    66
	if (key[0] == '@')
dvander@437
    67
	{
dvander@437
    68
		AddCommandOverride(key[1], Override_CommandGroup, flag);
dvander@437
    69
	} else {
dvander@437
    70
		AddCommandOverride(key, Override_Command, flag);
dvander@437
    71
	}
dvander@437
    72
	
dvander@437
    73
	return SMCParse_Continue;
dvander@437
    74
}
dvander@437
    75
dvander@437
    76
public SMCResult:ReadOverrides_EndSection(Handle:smc)
dvander@437
    77
{
dvander@437
    78
	if (g_OverrideState == OVERRIDE_STATE_LEVELS)
dvander@437
    79
	{
dvander@437
    80
		g_OverrideState = OVERRIDE_STATE_NONE;
dvander@437
    81
	} else if (g_OverrideState == OVERRIDE_STATE_OVERRIDES) {
dvander@437
    82
		/* We're totally done parsing */
dvander@437
    83
		g_OverrideState = OVERRIDE_STATE_LEVELS;
dvander@437
    84
		return SMCParse_Halt;
dvander@437
    85
	}
dvander@437
    86
	
dvander@437
    87
	return SMCParse_Continue;
dvander@437
    88
}
dvander@437
    89
dvander@437
    90
static InitializeOverrideParser()
dvander@437
    91
{
dvander@437
    92
	if (g_hOverrideParser == INVALID_HANDLE)
dvander@437
    93
	{
dvander@437
    94
		g_hOverrideParser = SMC_CreateParser();
dvander@437
    95
		SMC_SetReaders(g_hOverrideParser,
dvander@437
    96
					   ReadOverrides_NewSection,
dvander@437
    97
					   ReadOverrides_KeyValue,
dvander@437
    98
					   ReadOverrides_EndSection);
dvander@437
    99
	}
dvander@437
   100
}
dvander@437
   101
dvander@437
   102
ReadOverrides()
dvander@437
   103
{
dvander@437
   104
	new String:path[PLATFORM_MAX_PATH];
dvander@437
   105
	
dvander@437
   106
	InitializeOverrideParser();
dvander@437
   107
	
dvander@437
   108
	BuildPath(Path_SM, path, sizeof(path), "configs/admin_levels.cfg");
dvander@437
   109
	
dvander@437
   110
	/* Set states */
dvander@437
   111
	g_OverrideState = OVERRIDE_STATE_NONE;
dvander@437
   112
	g_LoggedFileName = false;
dvander@437
   113
	g_ErrorCount = 0;
dvander@437
   114
		
dvander@437
   115
	new SMCError:err = SMC_ParseFile(g_hOverrideParser, path);
dvander@437
   116
	if (err != SMCError_Okay)
dvander@437
   117
	{
dvander@437
   118
		decl String:buffer[64];
dvander@437
   119
		if (SMC_GetErrorString(err, buffer, sizeof(buffer)))
dvander@437
   120
		{
dvander@437
   121
			LogOverrideError("%s", buffer);
dvander@437
   122
		} else {
dvander@437
   123
			LogOverrideError("Fatal parse error");
dvander@437
   124
		}
dvander@437
   125
	}
dvander@437
   126
}
dvander@437
   127