plugins/basecommands/execcfg.sp
author Matt Woodrow <pred@alliedmods.net>
Mon Nov 12 21:51:54 2007 +0000 (2007-11-12)
changeset 1676 df6b4e53cca0
parent 1623 382af42756e3
child 1789 55172f6df9a4
permissions -rw-r--r--
Fixed amb1154 and another kick bug with sm_reserve_type 1
dvander@1592
     1
new Handle:g_ConfigMenu = INVALID_HANDLE;
dvander@1592
     2
pred@1536
     3
PerformExec(client, String:path[])
pred@1536
     4
{
pred@1536
     5
	if (!FileExists(path))
pred@1536
     6
	{
pred@1536
     7
		ReplyToCommand(client, "[SM] %t", "Config not found", path[4]);
pred@1536
     8
		return;
pred@1536
     9
	}
pred@1536
    10
dvander@1623
    11
	ShowActivity2(client, "[SM] ", "%t", "Executed config", path[4]);
pred@1536
    12
pred@1536
    13
	LogAction(client, -1, "\"%L\" executed config (file \"%s\")", client, path[4]);
pred@1536
    14
pred@1536
    15
	ServerCommand("exec \"%s\"", path[4]);
pred@1536
    16
}
pred@1536
    17
pred@1536
    18
public AdminMenu_ExecCFG(Handle:topmenu, 
pred@1536
    19
					  TopMenuAction:action,
pred@1536
    20
					  TopMenuObject:object_id,
pred@1536
    21
					  param,
pred@1536
    22
					  String:buffer[],
pred@1536
    23
					  maxlength)
pred@1536
    24
{
pred@1536
    25
	if (action == TopMenuAction_DisplayOption)
pred@1536
    26
	{
pred@1536
    27
		Format(buffer, maxlength, "%T", "Exec CFG", param);
pred@1536
    28
	}
pred@1536
    29
	else if (action == TopMenuAction_SelectOption)
pred@1536
    30
	{
dvander@1592
    31
		DisplayMenu(g_ConfigMenu, param, MENU_TIME_FOREVER);
pred@1536
    32
	}
pred@1536
    33
}
pred@1536
    34
pred@1536
    35
public MenuHandler_ExecCFG(Handle:menu, MenuAction:action, param1, param2)
pred@1536
    36
{
pred@1536
    37
	if (action == MenuAction_Cancel)
pred@1536
    38
	{
pred@1536
    39
		if (param2 == MenuCancel_ExitBack && hTopMenu != INVALID_HANDLE)
pred@1536
    40
		{
pred@1536
    41
			DisplayTopMenu(hTopMenu, param1, TopMenuPosition_LastCategory);
pred@1536
    42
		}
pred@1536
    43
	}
pred@1536
    44
	else if (action == MenuAction_Select)
pred@1536
    45
	{
pred@1536
    46
		decl String:path[256];
pred@1536
    47
		
pred@1536
    48
		GetMenuItem(menu, param2, path, sizeof(path));
pred@1536
    49
	
pred@1536
    50
		PerformExec(param1, path);
pred@1536
    51
	}
pred@1536
    52
}
pred@1536
    53
pred@1536
    54
public Action:Command_ExecCfg(client, args)
pred@1536
    55
{
pred@1536
    56
	if (args < 1)
pred@1536
    57
	{
pred@1536
    58
		ReplyToCommand(client, "[SM] Usage: sm_execcfg <filename>");
pred@1536
    59
		return Plugin_Handled;
pred@1536
    60
	}
pred@1536
    61
pred@1536
    62
	new String:path[64] = "cfg/";
pred@1536
    63
	GetCmdArg(1, path[4], sizeof(path)-4);
pred@1536
    64
pred@1536
    65
	PerformExec(client, path);
pred@1536
    66
pred@1536
    67
	return Plugin_Handled;
pred@1536
    68
}
pred@1536
    69
dvander@1592
    70
new Handle:config_parser = INVALID_HANDLE;
pred@1536
    71
ParseConfigs()
pred@1536
    72
{
dvander@1592
    73
	if (config_parser == INVALID_HANDLE)
dvander@1592
    74
	{
dvander@1592
    75
		config_parser = SMC_CreateParser();
dvander@1592
    76
	}
dvander@1592
    77
	
dvander@1592
    78
	SMC_SetReaders(config_parser, NewSection, KeyValue, EndSection);
pred@1536
    79
	
dvander@1592
    80
	if (g_ConfigMenu != INVALID_HANDLE)
dvander@1592
    81
	{
dvander@1592
    82
		CloseHandle(g_ConfigMenu);
dvander@1592
    83
	}
dvander@1592
    84
	
dvander@1592
    85
	g_ConfigMenu = CreateMenu(MenuHandler_ExecCFG);
dvander@1592
    86
	SetMenuTitle(g_ConfigMenu, "Choose Config");
dvander@1592
    87
	SetMenuExitBackButton(g_ConfigMenu, true);
pred@1536
    88
	
pred@1536
    89
	decl String:configPath[256];
dvander@1592
    90
	BuildPath(Path_SM, configPath, sizeof(configPath), "configs/adminmenu_cfgs.txt");
pred@1536
    91
	
pred@1536
    92
	if (!FileExists(configPath))
pred@1536
    93
	{
pred@1536
    94
		LogError("Unable to locate exec config file, no maps loaded.");
pred@1536
    95
			
pred@1536
    96
		return;		
pred@1536
    97
	}
pred@1536
    98
	
dvander@1592
    99
	new line;
dvander@1592
   100
	new SMCError:err = SMC_ParseFile(config_parser, configPath, line);
dvander@1592
   101
	if (err != SMCError_Okay)
dvander@1592
   102
	{
dvander@1592
   103
		decl String:error[256];
dvander@1592
   104
		SMC_GetErrorString(err, error, sizeof(error));
dvander@1592
   105
		LogError("Could not parse file (line %d, file \"%s\"):", line, configPath);
dvander@1592
   106
		LogError("Parser encountered error: %s", error);
dvander@1592
   107
	}
pred@1536
   108
	
pred@1536
   109
	return;
pred@1536
   110
}
pred@1536
   111
pred@1536
   112
public SMCResult:NewSection(Handle:smc, const String:name[], bool:opt_quotes)
pred@1536
   113
{
pred@1536
   114
pred@1536
   115
}
pred@1536
   116
pred@1536
   117
public SMCResult:KeyValue(Handle:smc, const String:key[], const String:value[], bool:key_quotes, bool:value_quotes)
pred@1536
   118
{
dvander@1592
   119
	AddMenuItem(g_ConfigMenu, key, value);
pred@1536
   120
}
pred@1536
   121
pred@1536
   122
public SMCResult:EndSection(Handle:smc)
pred@1536
   123
{
pred@1536
   124
	
pred@1536
   125
}