diff --git a/addons/sourcemod/scripting/shavit-stats.sp b/addons/sourcemod/scripting/shavit-stats.sp index 6d92c7d2..3c79bf82 100644 --- a/addons/sourcemod/scripting/shavit-stats.sp +++ b/addons/sourcemod/scripting/shavit-stats.sp @@ -748,15 +748,14 @@ public Action Command_Profile(int client, int args) Action OpenStatsMenu(int client, int steamid, int style = 0, int item = 0) { - gI_Style[client] = style; - gI_MenuPos[client] = item; - // no spam please if(!gB_CanOpenMenu[client]) { return Plugin_Handled; } + gI_Style[client] = style; + gI_MenuPos[client] = item; gB_CanOpenMenu[client] = false; DataPack data = new DataPack(); @@ -767,18 +766,69 @@ Action OpenStatsMenu(int client, int steamid, int style = 0, int item = 0) { char sQuery[2048]; FormatEx(sQuery, sizeof(sQuery), - "SELECT ", + // Note the `GROUP BY track>0` for now + "SELECT 0 as blah, map, track FROM %splayertimes WHERE auth = %d AND style = %d GROUP BY map, track>0 " ... + "UNION SELECT 1 as blah, map, track FROM %smapzones WHERE type = 0 GROUP BY map, track>0;", + gS_MySQLPrefix, steamid, style, gS_MySQLPrefix ); gH_SQL.Query(OpenStatsMenu_Mapchooser_Callback, sQuery, data, DBPrio_Low); - return Plugin_Handled; + return Plugin_Handled; } - return OpenStatsMenu_Main(client, steamid, style, item, data); + return OpenStatsMenu_Main(steamid, style, data); } -Action OpenStatsMenu_Main(int client, int steamid, int style, int item, DataPack data) +public void OpenStatsMenu_Mapchooser_Callback(Database db, DBResultSet results, const char[] error, DataPack data) +{ + if (results == null) + { + LogError("Timer (statsmenu-mapchooser) SQL query failed. Reason: %s", error); + return; + } + + data.Reset(); + int client = GetClientFromSerial(data.ReadCell()); + + if (client == 0) + { + return; + } + + StringMap mapchooser_maps = Shavit_GetMapsStringMap(); + + int maps_and_completions[2][2]; + + while (results.FetchRow()) + { + int blah = results.FetchInt(0); + + char map[PLATFORM_MAX_PATH]; + results.FetchString(1, map, sizeof(map)); + + bool x; + if (!mapchooser_maps.GetValue(map, x)) + { + continue; + } + + int track = results.FetchInt(2); + maps_and_completions[blah][track>0?1:0] += 1; + } + + delete mapchooser_maps; + + data.ReadCell(); // item + data.WriteCell(maps_and_completions[0][0], true); + data.WriteCell(maps_and_completions[0][1], true); + data.WriteCell(maps_and_completions[1][0], true); + data.WriteCell(maps_and_completions[1][1], true); + + OpenStatsMenu_Main(gI_TargetSteamID[client], gI_Style[client], data); +} + +Action OpenStatsMenu_Main(int steamid, int style, DataPack data) { // big ass query, looking for optimizations TODO char sQuery[2048]; @@ -865,6 +915,14 @@ public void OpenStatsMenuCallback(Database db, DBResultSet results, const char[] int iBonusTotalMaps = results.FetchInt(7); int iBonusWRs = results.FetchInt(8); + if (gB_Mapchooser && gCV_UseMapchooser.BoolValue) + { + iClears = data.ReadCell(); + iBonusClears = data.ReadCell(); + iTotalMaps = data.ReadCell(); + iBonusTotalMaps = data.ReadCell(); + } + char sPoints[16]; char sRank[16];