plugins/basecommands/map.sp
author Matt Woodrow <pred@alliedmods.net>
Sat Oct 13 04:43:42 2007 +0000 (2007-10-13)
changeset 1536 fe2146e4975d
child 1580 e5198a9a458b
permissions -rw-r--r--
Coded menus for most base plugins
pred@1536
     1
pred@1536
     2
public MenuHandler_ChangeMap(Handle:menu, MenuAction:action, param1, param2)
pred@1536
     3
{
pred@1536
     4
	if (action == MenuAction_Cancel)
pred@1536
     5
	{
pred@1536
     6
		if (param2 == MenuCancel_ExitBack && hTopMenu != INVALID_HANDLE)
pred@1536
     7
		{
pred@1536
     8
			DisplayTopMenu(hTopMenu, param1, TopMenuPosition_LastCategory);
pred@1536
     9
		}
pred@1536
    10
	}
pred@1536
    11
	else if (action == MenuAction_Select)
pred@1536
    12
	{
pred@1536
    13
		decl String:map[64];
pred@1536
    14
		
pred@1536
    15
		GetMenuItem(menu, param2, map, sizeof(map));
pred@1536
    16
	
pred@1536
    17
		ShowActivity(param1, "%t", "Changing map", map);
pred@1536
    18
pred@1536
    19
		LogAction(param1, -1, "\"%L\" changed map to \"%s\"", param1, map);
pred@1536
    20
pred@1536
    21
		new Handle:dp;
pred@1536
    22
		CreateDataTimer(3.0, Timer_ChangeMap, dp);
pred@1536
    23
		WritePackString(dp, map);
pred@1536
    24
pred@1536
    25
	}
pred@1536
    26
}
pred@1536
    27
pred@1536
    28
public AdminMenu_Map(Handle:topmenu, 
pred@1536
    29
							  TopMenuAction:action,
pred@1536
    30
							  TopMenuObject:object_id,
pred@1536
    31
							  param,
pred@1536
    32
							  String:buffer[],
pred@1536
    33
							  maxlength)
pred@1536
    34
{
pred@1536
    35
	if (action == TopMenuAction_DisplayOption)
pred@1536
    36
	{
pred@1536
    37
		Format(buffer, maxlength, "%T", "Choose Map", param);
pred@1536
    38
	}
pred@1536
    39
	else if (action == TopMenuAction_SelectOption)
pred@1536
    40
	{
pred@1536
    41
		DisplayMenu(g_MapList, param, MENU_TIME_FOREVER);
pred@1536
    42
	}
pred@1536
    43
}
pred@1536
    44
pred@1536
    45
public Action:Command_Map(client, args)
pred@1536
    46
{
pred@1536
    47
	if (args < 1)
pred@1536
    48
	{
pred@1536
    49
		ReplyToCommand(client, "[SM] Usage: sm_map <map>");
pred@1536
    50
		return Plugin_Handled;
pred@1536
    51
	}
pred@1536
    52
pred@1536
    53
	decl String:map[64];
pred@1536
    54
	GetCmdArg(1, map, sizeof(map));
pred@1536
    55
pred@1536
    56
	if (!IsMapValid(map))
pred@1536
    57
	{
pred@1536
    58
		ReplyToCommand(client, "[SM] %t", "Map was not found", map);
pred@1536
    59
		return Plugin_Handled;
pred@1536
    60
	}
pred@1536
    61
pred@1536
    62
	ShowActivity(client, "%t", "Changing map", map);
pred@1536
    63
pred@1536
    64
	LogAction(client, -1, "\"%L\" changed map to \"%s\"", client, map);
pred@1536
    65
pred@1536
    66
	new Handle:dp;
pred@1536
    67
	CreateDataTimer(3.0, Timer_ChangeMap, dp);
pred@1536
    68
	WritePackString(dp, map);
pred@1536
    69
pred@1536
    70
	return Plugin_Handled;
pred@1536
    71
}
pred@1536
    72
pred@1536
    73
public Action:Timer_ChangeMap(Handle:timer, Handle:dp)
pred@1536
    74
{
pred@1536
    75
	decl String:map[65];
pred@1536
    76
pred@1536
    77
	ResetPack(dp);
pred@1536
    78
	ReadPackString(dp, map, sizeof(map));
pred@1536
    79
pred@1536
    80
	ServerCommand("changelevel \"%s\"", map);
pred@1536
    81
pred@1536
    82
	return Plugin_Stop;
pred@1536
    83
}
pred@1536
    84
pred@1536
    85
LoadMaps(Handle:menu)
pred@1536
    86
{
pred@1536
    87
	decl String:mapPath[256];
pred@1536
    88
	BuildPath(Path_SM, mapPath, sizeof(mapPath), "configs/menu_maplist.ini");
pred@1536
    89
	
pred@1536
    90
	if (!FileExists(mapPath))
pred@1536
    91
	{
pred@1536
    92
		LogError("Unable to locate menu_maplist, no maps loaded.");
pred@1536
    93
		
pred@1536
    94
		if (g_MapList != INVALID_HANDLE)
pred@1536
    95
		{
pred@1536
    96
			RemoveAllMenuItems(menu);
pred@1536
    97
		}
pred@1536
    98
		
pred@1536
    99
		return;		
pred@1536
   100
	}
pred@1536
   101
pred@1536
   102
	// If the file hasn't changed, there's no reason to reload
pred@1536
   103
	// all of the maps.
pred@1536
   104
	new fileTime =  GetFileTime(mapPath, FileTime_LastChange);
pred@1536
   105
	if (g_mapFileTime == fileTime)
pred@1536
   106
	{
pred@1536
   107
		return;
pred@1536
   108
	}
pred@1536
   109
	
pred@1536
   110
	g_mapFileTime = fileTime;
pred@1536
   111
	
pred@1536
   112
	// Reset the array
pred@1536
   113
	if (g_MapList != INVALID_HANDLE)
pred@1536
   114
	{
pred@1536
   115
		RemoveAllMenuItems(menu);
pred@1536
   116
	}
pred@1536
   117
pred@1536
   118
	LogMessage("[SM] Loading menu map list file [%s]", mapPath);
pred@1536
   119
pred@1536
   120
	new Handle:file = OpenFile(mapPath, "rt");
pred@1536
   121
	if (file == INVALID_HANDLE)
pred@1536
   122
	{
pred@1536
   123
		LogError("[SM] Could not open file: %s", mapPath);
pred@1536
   124
		return;
pred@1536
   125
	}
pred@1536
   126
	
pred@1536
   127
	decl String:buffer[64], len;
pred@1536
   128
	while (!IsEndOfFile(file) && ReadFileLine(file, buffer, sizeof(buffer)))
pred@1536
   129
	{
pred@1536
   130
		TrimString(buffer);
pred@1536
   131
pred@1536
   132
		if ((len = StrContains(buffer, ".bsp", false)) != -1)
pred@1536
   133
		{
pred@1536
   134
			buffer[len] = '\0';
pred@1536
   135
		}
pred@1536
   136
pred@1536
   137
		if (buffer[0] == '\0' || !IsValidConVarChar(buffer[0]) || !IsMapValid(buffer))
pred@1536
   138
		{
pred@1536
   139
			continue;
pred@1536
   140
		}
pred@1536
   141
pred@1536
   142
		AddMenuItem(menu, buffer, buffer);
pred@1536
   143
	}
pred@1536
   144
pred@1536
   145
	CloseHandle(file);
pred@1536
   146
	return;
pred@1536
   147
}