sm-plugins/_CTimer/scripting/ctimer/menus.sp

281 lines
6.4 KiB
SourcePawn
Raw Normal View History

2019-06-19 20:54:56 +02:00
public void TimerAdminMenu(int client)
{
char buffer[16];
Menu menu = new Menu(TimerAdminMenuHandler);
menu.SetTitle("Timer Control Panel");
if (g_iEditor != -1)
menu.AddItem("zone", "Zones (Currently in use)", ITEMDRAW_DISABLED);
else
menu.AddItem("zone", "Zones");
menu.AddItem("tier", "Set Map Tier");
Format(buffer, sizeof(buffer), "%s map", g_bActive ? "Deactivate":"Activate");
menu.AddItem("active", buffer);
menu.ExitButton = true;
menu.Display(client, MENU_TIME_FOREVER);
}
public int TimerAdminMenuHandler(Handle menu, MenuAction action, int client, int choice)
{
switch(action)
{
case MenuAction_Select:
{
switch(choice)
{
case 0:
{
if (g_iEditor != -1)
{
PrintToChat(client, "Zone menu currently unavailable");
TimerAdminMenu(client);
}
else
{
g_iEditor = client;
g_iActivity[client] = -1;
g_bEditorComesFromMenu = true;
ZoneMenu(client, g_bEditorComesFromMenu);
}
}
case 1:
{
TierMenu(client);
}
case 2:
{
g_bActive = !g_bActive;
SetMapState(view_as<int>(g_bActive));
PrintToChat(client, "%s the map...", g_bActive ? "Activating":"Deactivating");
CS_TerminateRound(1.0, CSRoundEnd_Draw, true);
TimerAdminMenu(client);
}
}
}
case MenuAction_End:
{
delete menu;
}
}
}
public void ZoneMenu(int client, bool comesFromMenu)
{
Menu menu = new Menu(ZoneMenuHandler);
menu.SetTitle("Zone Menu");
menu.AddItem("start", "Set Start Zone");
menu.AddItem("end", "Set End Zone");
menu.AddItem("rr", "Respawn Zones");
menu.AddItem("save", "Save Zones");
menu.ExitButton = true;
if (comesFromMenu)
menu.ExitBackButton = true;
menu.Display(client, MENU_TIME_FOREVER);
}
public int ZoneMenuHandler(Handle menu, MenuAction action, int client, int choice)
{
switch(action)
{
case MenuAction_Select:
{
switch(choice)
{
case 0:
CreateZoneMenu(client, STARTZONE, false);
case 1:
CreateZoneMenu(client, ENDZONE, false);
case 2:
{
CS_TerminateRound(1.0, CSRoundEnd_Draw, true);
ZoneMenu(client, g_bEditorComesFromMenu);
}
case 3:
{
SaveZones(client);
ZoneMenu(client, g_bEditorComesFromMenu);
}
}
}
case MenuAction_Cancel:
{
g_iEditor = -1;
g_bEditorComesFromMenu = false;
if (choice == MenuCancel_ExitBack)
{
TimerAdminMenu(client);
}
}
case MenuAction_End:
{
delete menu;
}
}
}
public void CreateZoneMenu(int client, int zone, bool point)
{
char buffer[32], zonePoint[5];
Menu menu = new Menu(CreateZoneMenuHandler);
Format(buffer, sizeof(buffer), "Set the %s position", point ? "second":"first");
//Format(zonePoint, sizeof(zonePoint), "%i|%s", zone, view_as<int>(point));
Format(zonePoint, sizeof(zonePoint), "%i|%s", zone, point ? "1":"0");
menu.AddItem(zonePoint, buffer);
menu.ExitBackButton = false;
menu.ExitButton = false;
menu.Display(client, MENU_TIME_FOREVER);
}
public int CreateZoneMenuHandler(Menu menu, MenuAction action, int client, int choice)
{
if (action == MenuAction_Select)
{
char buffer[5], array[2][2];
int zone, point;
menu.GetItem(0, buffer, sizeof(buffer));
ExplodeString(buffer, "|", array, 2, 2);
zone = StringToInt(array[0]);
point = StringToInt(array[1]);
//PrintToChatAll("%s - %s %s - %i %i", buffer, array[0], array[1], zone, point);
if (point == 0)
{
GetClientAbsOrigin(client, g_fStartOrigins[zone]);
g_iSnapToClient = zone;
CreateZoneMenu(client, zone, true);
}
if (point == 1)
{
GetClientAbsOrigin(client, g_fEndOrigins[zone]);
g_iSnapToClient = -1;
CreateTrigger(zone);
ZoneMenu(client, g_bEditorComesFromMenu);
}
}
if (action == MenuAction_End)
{
delete menu;
}
}
public void TierMenu(int client)
{
Menu menu = new Menu(TierMenuHandler);
menu.SetTitle("Choose a tier");
menu.AddItem("1", "Tier 1");
menu.AddItem("2", "Tier 2");
menu.AddItem("3", "Tier 3");
menu.AddItem("4", "Tier 4");
menu.AddItem("5", "Tier 5");
menu.AddItem("6", "Tier 6");
menu.ExitButton = true;
menu.ExitBackButton = true;
menu.Display(client, MENU_TIME_FOREVER);
}
public int TierMenuHandler(Handle menu, MenuAction action, int client, int choice)
{
switch(action)
{
case MenuAction_Select:
{
g_iTier = choice + 1;
SetMapTier(g_iTier);
PrintToChat(client, "Setting the maps tier to %i", g_iTier);
TimerAdminMenu(client);
}
case MenuAction_Cancel:
{
if (choice == MenuCancel_ExitBack)
{
TimerAdminMenu(client);
}
}
case MenuAction_End:
{
delete menu;
}
}
}
public void SQL_RequestTop(Database db, int userid, int numQueries, DBResultSet[] results, any[] queryData)
{
if (db == null)
{
SetFailState("Lost connection to the database, will attempt to reconnect on map change");
return;
}
int client = GetClientOfUserId(userid);
if (!isValidClient(client))
return;
if (results[0].RowCount == 0)
{
TimerPrintToChat(client, false, "%T", "MapNotFound", LANG_SERVER);
return;
}
char cMap[64];
results[0].FetchRow();
results[0].FetchString(0, cMap, sizeof(cMap));
if (results[1].RowCount == 0)
{
TimerPrintToChat(client, false, "%T", "TimesNotFound", LANG_SERVER, cMap);
return;
}
char cBuffer[128], cTime[16], cTimeToWR[16], cName[64];
float fTime, fTimeToWR, fWR;
int timescompleted;
Menu menu = new Menu(TopTimeMenuHandler);
Format(cBuffer, sizeof(cBuffer), "Top Times for %s", cMap);
menu.SetTitle(cBuffer);
results[1].FetchRow();
results[1].FetchString(0, cName, sizeof(cName));
fTime = fWR = results[1].FetchFloat(1);
timescompleted = results[1].FetchInt(2);
TimerFormat(fTime, cTime, sizeof(cTime), true, false);
Format(cBuffer, sizeof(cBuffer), "%s\n%s (+00:00.00) (%i)", cName, cTime, timescompleted);
menu.AddItem("", cBuffer);
while (results[1].FetchRow())
{
results[1].FetchString(0, cName, sizeof(cName));
fTime = results[1].FetchFloat(1);
fTimeToWR = fTime - fWR;
timescompleted = results[1].FetchInt(2);
TimerFormat(fTime, cTime, sizeof(cTime), true, false);
TimerFormat(fTimeToWR, cTimeToWR, sizeof(cTimeToWR), true, true);
Format(cBuffer, sizeof(cBuffer), "%s\n%s (%s) (%i)", cName, cTime, cTimeToWR, timescompleted);
menu.AddItem("", cBuffer);
}
menu.ExitButton = true;
menu.Display(client, MENU_TIME_FOREVER);
}
public int TopTimeMenuHandler(Handle menu, MenuAction action, int client, int choice)
{
switch(action)
{
case MenuAction_End:
{
delete menu;
}
}
}