plugins/admin-base.sp
author David Anderson <dvander@alliedmods.net>
Sat Jan 27 04:50:48 2007 +0000 (2007-01-27)
changeset 398 626ce2e591ad
parent 362 78a0af090a1d
permissions -rw-r--r--
fixed a bug in the admin plugin
dvander@349
     1
#include <sourcemod>
dvander@349
     2
#include <textparse>
dvander@349
     3
dvander@349
     4
public Plugin:myinfo = 
dvander@349
     5
{
dvander@349
     6
	name = "Admin Base",
dvander@349
     7
	author = "AlliedModders LLC",
dvander@349
     8
	description = "Reads admin files",
dvander@349
     9
	version = "1.0.0.0",
dvander@349
    10
	url = "http://www.sourcemod.net/"
dvander@349
    11
};
dvander@349
    12
dvander@349
    13
#define LEVEL_STATE_NONE		0
dvander@349
    14
#define LEVEL_STATE_LEVELS		1
dvander@349
    15
#define LEVEL_STATE_FLAGS		2
dvander@349
    16
#define LEVEL_STATE_OVERRIDES	3
dvander@349
    17
dvander@349
    18
dvander@349
    19
/** Parser handles */
dvander@349
    20
new Handle:g_hLevelParser = INVALID_HANDLE;
dvander@349
    21
dvander@349
    22
/** Parser states */
dvander@349
    23
new g_LevelState = LEVEL_STATE_NONE;
dvander@349
    24
dvander@349
    25
/** Globals for levels */
dvander@349
    26
new AdminFlag:g_FlagLetters[26];			/* Maps the flag letters */		
dvander@349
    27
new bool:g_ReadOverrides = false;			/* Whether or not to read overrides */
dvander@349
    28
new bool:g_LoggedFileName = false;			/* Whether or not the file name has been logged */
dvander@349
    29
dvander@349
    30
dvander@349
    31
public OnPluginStart()
dvander@349
    32
{
dvander@398
    33
	g_hLevelParser = SMC_CreateParser();
dvander@349
    34
	SMC_SetReaders(g_hLevelParser, 
dvander@349
    35
				   ReadLevels_NewSection,
dvander@349
    36
				   ReadLevels_KeyValue,
dvander@349
    37
				   ReadLevels_EndSection);
dvander@349
    38
}
dvander@349
    39
dvander@349
    40
LoadDefaultLetters()
dvander@349
    41
{
dvander@349
    42
	g_FlagLetters['a'-'a'] = Admin_Reservation;
dvander@349
    43
	g_FlagLetters['b'-'a'] = Admin_Kick;
dvander@349
    44
	g_FlagLetters['c'-'a'] = Admin_Ban;
dvander@349
    45
	g_FlagLetters['d'-'a'] = Admin_Unban;
dvander@349
    46
	g_FlagLetters['e'-'a'] = Admin_Slay;
dvander@349
    47
	g_FlagLetters['f'-'a'] = Admin_Changemap;
dvander@349
    48
	g_FlagLetters['g'-'a'] = Admin_Convars;
dvander@349
    49
	g_FlagLetters['h'-'a'] = Admin_Configs;
dvander@349
    50
	g_FlagLetters['i'-'a'] = Admin_Chat;
dvander@349
    51
	g_FlagLetters['j'-'a'] = Admin_Vote;
dvander@349
    52
	g_FlagLetters['h'-'a'] = Admin_Password;
dvander@349
    53
	g_FlagLetters['i'-'a'] = Admin_RCON;
dvander@349
    54
	g_FlagLetters['j'-'a'] = Admin_Cheats;
dvander@349
    55
	g_FlagLetters['z'-'a'] = Admin_Root;
dvander@349
    56
}
dvander@349
    57
dvander@349
    58
public SMCResult:ReadLevels_NewSection(Handle:smc, const String:name[], bool:opt_quotes)
dvander@349
    59
{
dvander@349
    60
	if (g_LevelState == LEVEL_STATE_NONE)
dvander@349
    61
	{
dvander@349
    62
		if (StrEqual(name, "Levels"))
dvander@349
    63
		{
dvander@349
    64
			g_LevelState = LEVEL_STATE_LEVELS;
dvander@349
    65
		} else {
dvander@349
    66
			/* :TODO: log error */
dvander@349
    67
		}
dvander@349
    68
	} else if (g_LevelState == LEVEL_STATE_LEVELS) {
dvander@349
    69
		if (StrEqual(name, "Flags"))
dvander@349
    70
		{
dvander@349
    71
			g_LevelState = LEVEL_STATE_FLAGS;
dvander@349
    72
		} else if (StrEqual(name, "Overrides")) {
dvander@349
    73
			g_LevelState = LEVEL_STATE_OVERRIDES;
dvander@349
    74
		} else {
dvander@349
    75
			/* :TODO: log error */
dvander@349
    76
		}
dvander@349
    77
	} else {
dvander@349
    78
		/* :TODO: Log error */
dvander@349
    79
	}
dvander@349
    80
	
dvander@349
    81
	return SMCParse_Continue;
dvander@349
    82
}
dvander@349
    83
dvander@349
    84
public SMCResult:ReadLevels_KeyValue(Handle:smc, const String:key[], const String:value[], bool:key_quotes, bool:value_quotes)
dvander@349
    85
{
dvander@349
    86
	if (g_LevelState == LEVEL_STATE_FLAGS)
dvander@349
    87
	{
dvander@349
    88
		new chr = value[0];
dvander@349
    89
		
dvander@349
    90
		if (chr < 'a' || chr > 'z')
dvander@349
    91
		{
dvander@349
    92
			/* :TODO: log error */
dvander@349
    93
			return SMCParse_Continue;
dvander@349
    94
		}
dvander@349
    95
		
dvander@349
    96
		chr -= 'a';
dvander@349
    97
		
dvander@349
    98
		new AdminFlag:flag = Admin_None;
dvander@349
    99
		
dvander@349
   100
		if (StrEqual(key, "reservation"))
dvander@349
   101
		{
dvander@349
   102
			flag = Admin_Reservation;
dvander@349
   103
		} else if (StrEqual(key, "kick")) {
dvander@349
   104
			flag = Admin_Kick;
dvander@349
   105
		} else if (StrEqual(key, "ban")) {
dvander@349
   106
			flag = Admin_Ban;
dvander@349
   107
		} else if (StrEqual(key, "unban")) {
dvander@349
   108
			flag = Admin_Unban;
dvander@349
   109
		} else if (StrEqual(key, "slay")) {
dvander@349
   110
			flag = Admin_Slay;
dvander@349
   111
		} else if (StrEqual(key, "changemap")) {
dvander@349
   112
			flag = Admin_Changemap;
dvander@349
   113
		} else if (StrEqual(key, "cvars")) {
dvander@349
   114
			flag = Admin_Convars;
dvander@349
   115
		} else if (StrEqual(key, "configs")) {
dvander@349
   116
			flag = Admin_Configs;
dvander@349
   117
		} else if (StrEqual(key, "chat")) {
dvander@349
   118
			flag = Admin_Chat;
dvander@349
   119
		} else if (StrEqual(key, "vote")) {
dvander@349
   120
			flag = Admin_Vote;
dvander@349
   121
		} else if (StrEqual(key, "password")) {
dvander@349
   122
			flag = Admin_Password;
dvander@349
   123
		} else if (StrEqual(key, "rcon")) {
dvander@349
   124
			flag = Admin_RCON;
dvander@349
   125
		} else if (StrEqual(key, "cheats")) {
dvander@349
   126
			flag = Admin_Cheats;
dvander@349
   127
		} else if (StrEqual(key, "root")) {
dvander@349
   128
			flag = Admin_Root;
dvander@349
   129
		} else {
dvander@349
   130
			/* :TODO: log error */
dvander@349
   131
		}
dvander@349
   132
		
dvander@349
   133
		g_FlagLetters[chr] = flag;
dvander@349
   134
		
dvander@349
   135
	
dvander@349
   136
	} else if (g_LevelState == LEVEL_STATE_OVERRIDES) {
dvander@349
   137
		if (!g_ReadOverrides)
dvander@349
   138
		{
dvander@349
   139
			return SMCParse_Continue;
dvander@349
   140
		}
dvander@349
   141
	}
dvander@349
   142
	
dvander@349
   143
	return SMCParse_Continue;
dvander@349
   144
}
dvander@349
   145
dvander@349
   146
public SMCResult:ReadLevels_EndSection(Handle:smc)
dvander@349
   147
{
dvander@349
   148
	if (g_LevelState == LEVEL_STATE_FLAGS)
dvander@349
   149
	{
dvander@349
   150
		g_LevelState = LEVEL_STATE_LEVELS;
dvander@349
   151
	} else if (g_LevelState == LEVEL_STATE_OVERRIDES) {
dvander@349
   152
		g_LevelState = LEVEL_STATE_OVERRIDES;
dvander@349
   153
	} else if (g_LevelState == LEVEL_STATE_LEVELS) {
dvander@349
   154
		g_LevelState = LEVEL_STATE_NONE;
dvander@349
   155
	}
dvander@349
   156
}
dvander@349
   157
dvander@349
   158
public OnRebuildAdminCache(cache_flags)
dvander@349
   159
{
dvander@349
   160
	if (cache_flags & ADMIN_CACHE_OVERRIDES)
dvander@349
   161
	{
dvander@349
   162
		g_ReadOverrides = true;
dvander@349
   163
	} else {
dvander@349
   164
		g_ReadOverrides = false;
dvander@349
   165
	}
dvander@349
   166
	
dvander@349
   167
	RefreshLevels();
dvander@349
   168
}
dvander@349
   169
dvander@349
   170
RefreshLevels()
dvander@349
   171
{
dvander@349
   172
	new String:path[PLATFORM_MAX_PATH];
dvander@349
   173
	
dvander@349
   174
	LoadDefaultLetters();
dvander@349
   175
	
dvander@349
   176
	BuildPath(Path_SM, path, sizeof(path), "configs/admin_levels.cfg");
dvander@349
   177
	
dvander@349
   178
	/* Set states */
dvander@349
   179
	g_LevelState = LEVEL_STATE_NONE;
dvander@349
   180
	g_LoggedFileName = false;
dvander@349
   181
		
dvander@349
   182
	new SMCError:err = SMC_ParseFile(g_hLevelParser, path);
dvander@349
   183
	if (err != SMCError_Okay)
dvander@349
   184
	{
dvander@349
   185
		/* :TODO: log error */
dvander@349
   186
	}
dvander@349
   187
}