diff options
| author | navewindre <nw@moneybot.cc> | 2023-12-04 18:06:10 +0100 |
|---|---|---|
| committer | navewindre <nw@moneybot.cc> | 2023-12-04 18:06:10 +0100 |
| commit | aef0d1c1268ab7d4bc18996c9c6b4da16a40aadc (patch) | |
| tree | 43e766b51704f4ab8b383583bdc1871eeeb9c698 /sourcemod/scripting/gokz-localranks/db/recent_records.sp | |
| parent | 38f1140c11724da05a23a10385061200b907cf6e (diff) | |
bbbbbbbbwaaaaaaaaaaa
Diffstat (limited to 'sourcemod/scripting/gokz-localranks/db/recent_records.sp')
| -rw-r--r-- | sourcemod/scripting/gokz-localranks/db/recent_records.sp | 171 |
1 files changed, 171 insertions, 0 deletions
diff --git a/sourcemod/scripting/gokz-localranks/db/recent_records.sp b/sourcemod/scripting/gokz-localranks/db/recent_records.sp new file mode 100644 index 0000000..939b132 --- /dev/null +++ b/sourcemod/scripting/gokz-localranks/db/recent_records.sp @@ -0,0 +1,171 @@ +/* + Opens the menu with a list of recently broken records for the given mode + and time type. +*/ + + + +static int recentRecordsMode[MAXPLAYERS + 1]; + + + +void DB_OpenRecentRecords(int client, int mode, int timeType) +{ + char query[1024]; + + DataPack data = new DataPack(); + data.WriteCell(GetClientUserId(client)); + data.WriteCell(mode); + data.WriteCell(timeType); + + Transaction txn = SQL_CreateTransaction(); + + switch (timeType) + { + case TimeType_Nub:FormatEx(query, sizeof(query), sql_getrecentrecords, mode, LR_PLAYER_TOP_CUTOFF); + case TimeType_Pro:FormatEx(query, sizeof(query), sql_getrecentrecords_pro, mode, LR_PLAYER_TOP_CUTOFF); + } + txn.AddQuery(query); + + SQL_ExecuteTransaction(gH_DB, txn, DB_TxnSuccess_OpenRecentRecords, DB_TxnFailure_Generic_DataPack, data, DBPrio_Low); +} + +public void DB_TxnSuccess_OpenRecentRecords(Handle db, DataPack data, int numQueries, Handle[] results, any[] queryData) +{ + data.Reset(); + int client = GetClientOfUserId(data.ReadCell()); + int mode = data.ReadCell(); + int timeType = data.ReadCell(); + delete data; + + if (!IsValidClient(client)) + { + return; + } + + // Check if there are any times + if (SQL_GetRowCount(results[0]) == 0) + { + switch (timeType) + { + case TimeType_Nub:GOKZ_PrintToChat(client, true, "%t", "No Times Found"); + case TimeType_Pro:GOKZ_PrintToChat(client, true, "%t", "No Times Found (PRO)"); + } + return; + } + + Menu menu = new Menu(MenuHandler_RecentRecordsSubmenu); + menu.Pagination = 5; + + // Set submenu title + menu.SetTitle("%T", "Recent Records Submenu - Title", client, + gC_TimeTypeNames[timeType], gC_ModeNames[mode]); + + // Add submenu items + char display[256], mapName[64], playerName[33]; + int course; + float runTime; + + while (SQL_FetchRow(results[0])) + { + SQL_FetchString(results[0], 0, mapName, sizeof(mapName)); + course = SQL_FetchInt(results[0], 1); + SQL_FetchString(results[0], 3, playerName, sizeof(playerName)); + runTime = GOKZ_DB_TimeIntToFloat(SQL_FetchInt(results[0], 4)); + + if (course == 0) + { + FormatEx(display, sizeof(display), "%s - %s (%s)", + mapName, playerName, GOKZ_FormatTime(runTime)); + } + else + { + FormatEx(display, sizeof(display), "%s B%d - %s (%s)", + mapName, course, playerName, GOKZ_FormatTime(runTime)); + } + + menu.AddItem(IntToStringEx(SQL_FetchInt(results[0], 2)), display, ITEMDRAW_DISABLED); + } + + menu.Display(client, MENU_TIME_FOREVER); +} + + + +// =====[ MENUS ]===== + +void DisplayRecentRecordsModeMenu(int client) +{ + Menu menu = new Menu(MenuHandler_RecentRecordsMode); + menu.SetTitle("%T", "Recent Records Mode Menu - Title", client); + GOKZ_MenuAddModeItems(client, menu, false); + menu.Display(client, MENU_TIME_FOREVER); +} + +void DisplayRecentRecordsTimeTypeMenu(int client, int mode) +{ + recentRecordsMode[client] = mode; + + Menu menu = new Menu(MenuHandler_RecentRecordsTimeType); + menu.SetTitle("%T", "Recent Records Menu - Title", client, gC_ModeNames[recentRecordsMode[client]]); + RecentRecordsTimeTypeAddItems(client, menu); + menu.Display(client, MENU_TIME_FOREVER); +} + +static void RecentRecordsTimeTypeAddItems(int client, Menu menu) +{ + char display[32]; + for (int timeType = 0; timeType < TIMETYPE_COUNT; timeType++) + { + FormatEx(display, sizeof(display), "%T", "Recent Records Menu - Record Type", client, gC_TimeTypeNames[timeType]); + menu.AddItem("", display, ITEMDRAW_DEFAULT); + } +} + + + +// =====[ MENU HANDLERS ]===== + +public int MenuHandler_RecentRecordsMode(Menu menu, MenuAction action, int param1, int param2) +{ + if (action == MenuAction_Select) + { + DisplayRecentRecordsTimeTypeMenu(param1, param2); + } + else if (action == MenuAction_End) + { + delete menu; + } + return 0; +} + +public int MenuHandler_RecentRecordsTimeType(Menu menu, MenuAction action, int param1, int param2) +{ + if (action == MenuAction_Select) + { + DB_OpenRecentRecords(param1, recentRecordsMode[param1], param2); + } + else if (action == MenuAction_Cancel && param2 == MenuCancel_Exit) + { + DisplayRecentRecordsModeMenu(param1); + } + else if (action == MenuAction_End) + { + delete menu; + } + return 0; +} + +public int MenuHandler_RecentRecordsSubmenu(Menu menu, MenuAction action, int param1, int param2) +{ + // TODO Menu item info is course's MapCourseID, but is currently not used + if (action == MenuAction_Cancel && param2 == MenuCancel_Exit) + { + DisplayRecentRecordsTimeTypeMenu(param1, recentRecordsMode[param1]); + } + else if (action == MenuAction_End) + { + delete menu; + } + return 0; +} |
