Compare commits

...

6 Commits

Author SHA1 Message Date
rtldg
d732cdeb8e
Merge feeb1f4df1 into 7cbb250541 2025-10-01 04:48:04 +00:00
rtldg
7cbb250541 Make it easier to change the max tier
Some checks failed
Compile / Build SM ${{ matrix.sm-version }} (1.12) (push) Has been cancelled
Compile / Release (push) Has been cancelled
2025-10-01 00:00:03 +00:00
mourningsickness
a350d7982c
Add tier selection menu to mapsleft and mapsdone menus (with "All" option, for current functionality) (#1262) 2025-09-30 23:44:38 +00:00
rtldg
a5bec0403b
Merge pull request #1258 from normalamron/pracfix
Some checks are pending
Compile / Build SM ${{ matrix.sm-version }} (1.12) (push) Waiting to run
Compile / Release (push) Blocked by required conditions
2025-09-30 23:34:50 +00:00
normalamron
71c674663f prevent prac warning spam in start zone 2025-08-09 22:15:33 +03:00
rtldg
feeb1f4df1 wip... 2025-02-19 00:22:10 +00:00
5 changed files with 119 additions and 22 deletions

View File

@ -21,12 +21,12 @@
enum
{
Migration_RemoveWorkshopMaptiers, // 0
Migration_RemoveWorkshopMapzones,
Migration_RemoveWorkshopPlayertimes,
Migration_LastLoginIndex,
Migration_RemoveCountry,
Migration_ConvertIPAddresses, // 5
Migration_RemoveWorkshopMaptiers, // 0 // safe with newly-created tables
Migration_RemoveWorkshopMapzones, // safe with newly-created tables
Migration_RemoveWorkshopPlayertimes, // safe with newly-created tables
Migration_LastLoginIndex, // safe with newly-created tables
Migration_RemoveCountry, // safe with newly-created tables -- doesn't work on sqlite
Migration_ConvertIPAddresses, // 5 //
Migration_ConvertSteamIDsUsers,
Migration_ConvertSteamIDsPlayertimes,
Migration_ConvertSteamIDsChat,
@ -380,8 +380,11 @@ void ApplyMigration(int migration)
void ApplyMigration_LastLoginIndex()
{
char sQuery[128];
FormatEx(sQuery, 128, "ALTER TABLE `%susers` ADD INDEX `lastlogin` (`lastlogin`);", gS_SQLPrefix);
char sQuery[512];
if (gI_Driver == Driver_sqlite)
FormatEx(sQuery, 512, "CREATE INDEX IF NOT EXISTS lastlogin ON `%susers` (lastlogin);", gS_SQLPrefix);
else
FormatEx(sQuery, 512, "ALTER TABLE `%susers` ADD INDEX `lastlogin` (`lastlogin`);", gS_SQLPrefix);
QueryLog(gH_SQL, SQL_TableMigrationSingleQuery_Callback, sQuery, Migration_LastLoginIndex, DBPrio_High);
}

View File

@ -2301,7 +2301,7 @@ public int Native_SetPracticeMode(Handle handler, int numParams)
bool practice = view_as<bool>(GetNativeCell(2));
bool alert = view_as<bool>(GetNativeCell(3));
if(alert && practice && !gA_Timers[client].bPracticeMode && (!gB_HUD || (Shavit_GetHUDSettings(client) & HUD_NOPRACALERT) == 0))
if(alert && practice && !gA_Timers[client].bPracticeMode && (!gB_HUD || (Shavit_GetHUDSettings(client) & HUD_NOPRACALERT) == 0) && !Shavit_InsideZone(client, Zone_Start, -1))
{
Shavit_PrintToChat(client, "%T", "PracticeModeAlert", client, gS_ChatStrings.sWarning, gS_ChatStrings.sText);
}

View File

@ -631,9 +631,11 @@ public Action Command_SetTier(int client, int args)
int tier = StringToInt(sArg);
if(args == 0 || tier < 1 || tier > 10)
int maxtier = GetMaxTier();
if(args == 0 || tier < 1 || tier > maxtier)
{
ReplyToCommand(client, "%T", "ArgumentsMissing", client, "sm_settier <tier> (1-10) [map]");
ReplyToCommand(client, "%T", "ArgumentsMissing", client, "sm_settier <tier> (1-%d) [map]", maxtier);
return Plugin_Handled;
}
@ -1722,3 +1724,10 @@ public void SQL_DeleteMap_Callback(Database db, DBResultSet results, const char[
UpdateAllPoints(true);
}
}
int GetMaxTier()
{
float val = 10.0;
gCV_DefaultTier.GetBounds(ConVarBound_Upper, val);
return RoundToFloor(val);
}

View File

@ -56,6 +56,7 @@ int gI_MapType[MAXPLAYERS+1];
int gI_Style[MAXPLAYERS+1];
int gI_MenuPos[MAXPLAYERS+1];
int gI_Track[MAXPLAYERS+1];
int gI_Tier[MAXPLAYERS+1];
int gI_TargetSteamID[MAXPLAYERS+1];
char gS_TargetName[MAXPLAYERS+1][MAX_NAME_LENGTH];
@ -753,10 +754,47 @@ public int MenuHandler_MapsDoneLeft_Track(Menu menu, MenuAction action, int para
{
if(action == MenuAction_Select)
{
char sInfo[8];
char sInfo[8], sTier[16];
menu.GetItem(param2, sInfo, 8);
gI_Track[param1] = StringToInt(sInfo);
if(gB_Rankings)
{
Menu submenu = new Menu(MenuHandler_MapsDoneLeft_Tier);
submenu.SetTitle("%T\n ", "SelectTier", param1);
submenu.AddItem("0", "All");
for(int i = 1; i <= 10; ++i)
{
IntToString(i, sInfo, 8);
FormatEx(sTier, 16, "Tier %d", i);
submenu.AddItem(sInfo, sTier);
}
submenu.Display(param1, MENU_TIME_FOREVER);
}
else
{
ShowMaps(param1);
}
}
else if(action == MenuAction_End)
{
delete menu;
}
return 0;
}
public int MenuHandler_MapsDoneLeft_Tier(Menu menu, MenuAction action, int param1, int param2)
{
if(action == MenuAction_Select)
{
char sInfo[8];
menu.GetItem(param2, sInfo, 8);
gI_Tier[param1] = StringToInt(sInfo);
ShowMaps(param1);
}
else if(action == MenuAction_End)
@ -1180,7 +1218,7 @@ public int MenuHandler_TypeHandler(Menu menu, MenuAction action, int param1, int
{
if(action == MenuAction_Select)
{
char sInfo[32];
char sInfo[32], sTier[16];
menu.GetItem(param2, sInfo, 32);
char sExploded[2][4];
@ -1189,7 +1227,26 @@ public int MenuHandler_TypeHandler(Menu menu, MenuAction action, int param1, int
gI_Track[param1] = StringToInt(sExploded[0]);
gI_MapType[param1] = StringToInt(sExploded[1]);
ShowMaps(param1);
if(gB_Rankings)
{
Menu submenu = new Menu(MenuHandler_MapsDoneLeft_Tier);
submenu.SetTitle("%T\n ", "SelectTier", param1);
submenu.AddItem("0", "All");
for(int i = 1; i <= 10; ++i)
{
IntToString(i, sInfo, 8);
FormatEx(sTier, 16, "Tier %d", i);
submenu.AddItem(sInfo, sTier);
}
submenu.Display(param1, MENU_TIME_FOREVER);
}
else
{
ShowMaps(param1);
}
}
else if(action == MenuAction_Cancel && param2 == MenuCancel_ExitBack)
{
@ -1210,21 +1267,39 @@ void ShowMaps(int client)
return;
}
char sQuery[512];
char sQuery[512], tierStr[32];
if(gI_Tier[client] > 0)
{
FormatEx(tierStr, 32, " AND t.tier = %d", gI_Tier[client]);
}
else
{
gI_Tier[client] = 0;
}
if(gI_MapType[client] == MAPSDONE)
{
FormatEx(sQuery, 512,
"SELECT a.map, a.time, a.jumps, a.id, COUNT(b.map) + 1 as 'rank', a.points FROM %splayertimes a LEFT JOIN %splayertimes b ON a.time > b.time AND a.map = b.map AND a.style = b.style AND a.track = b.track WHERE a.auth = %d AND a.style = %d AND a.track = %d GROUP BY a.map, a.time, a.jumps, a.id, a.points ORDER BY a.%s;",
gS_MySQLPrefix, gS_MySQLPrefix, gI_TargetSteamID[client], gI_Style[client], gI_Track[client], (gB_Rankings)? "points DESC":"map");
if(gB_Rankings)
{
FormatEx(sQuery, 512,
"SELECT a.map, a.time, a.jumps, a.id, COUNT(b.map) + 1 as 'rank', a.points FROM %splayertimes a LEFT JOIN %splayertimes b ON a.time > b.time AND a.map = b.map AND a.style = b.style AND a.track = b.track LEFT JOIN %smaptiers t ON a.map = t.map WHERE a.auth = %d AND a.style = %d AND a.track = %d%s GROUP BY a.map, a.time, a.jumps, a.id, a.points ORDER BY a.points DESC;",
gS_MySQLPrefix, gS_MySQLPrefix, gS_MySQLPrefix, gI_TargetSteamID[client], gI_Style[client], gI_Track[client], tierStr);
}
else
{
FormatEx(sQuery, 512,
"SELECT a.map, a.time, a.jumps, a.id, COUNT(b.map) + 1 as 'rank', a.points FROM %splayertimes a LEFT JOIN %splayertimes b ON a.time > b.time AND a.map = b.map AND a.style = b.style AND a.track = b.track WHERE a.auth = %d AND a.style = %d AND a.track = %d GROUP BY a.map, a.time, a.jumps, a.id, a.points ORDER BY a.map;",
gS_MySQLPrefix, gS_MySQLPrefix, gI_TargetSteamID[client], gI_Style[client], gI_Track[client]);
}
}
else
{
if(gB_Rankings)
{
FormatEx(sQuery, 512,
"SELECT DISTINCT m.map, t.tier FROM %smapzones m LEFT JOIN %smaptiers t ON m.map = t.map WHERE m.type = 0 AND m.track = %d AND m.map NOT IN (SELECT DISTINCT map FROM %splayertimes WHERE auth = %d AND style = %d AND track = %d) ORDER BY m.map;",
gS_MySQLPrefix, gS_MySQLPrefix, gI_Track[client], gS_MySQLPrefix, gI_TargetSteamID[client], gI_Style[client], gI_Track[client]);
"SELECT DISTINCT m.map, t.tier FROM %smapzones m LEFT JOIN %smaptiers t ON m.map = t.map WHERE m.type = 0 AND m.track = %d%s AND m.map NOT IN (SELECT DISTINCT map FROM %splayertimes WHERE auth = %d AND style = %d AND track = %d) ORDER BY m.map;",
gS_MySQLPrefix, gS_MySQLPrefix, gI_Track[client], tierStr, gS_MySQLPrefix, gI_TargetSteamID[client], gI_Style[client], gI_Track[client]);
}
else
{
@ -1328,13 +1403,19 @@ public void ShowMapsCallback(Database db, DBResultSet results, const char[] erro
menu.AddItem(sRecordID, sDisplay);
}
char sTier[8];
if(gI_Tier[client] > 0)
{
FormatEx(sTier, 8, "T%d ", gI_Tier[client]);
}
if(gI_MapType[client] == MAPSDONE)
{
menu.SetTitle("%T (%s)", "MapsDoneFor", client, gS_StyleStrings[gI_Style[client]].sShortName, gS_TargetName[client], rows, sTrack);
menu.SetTitle("%s%T (%s)", sTier, "MapsDoneFor", client, gS_StyleStrings[gI_Style[client]].sShortName, gS_TargetName[client], rows, sTrack);
}
else
{
menu.SetTitle("%T (%s)", "MapsLeftFor", client, gS_StyleStrings[gI_Style[client]].sShortName, gS_TargetName[client], rows, sTrack);
menu.SetTitle("%s%T (%s)", sTier, "MapsLeftFor", client, gS_StyleStrings[gI_Style[client]].sShortName, gS_TargetName[client], rows, sTrack);
}
if(menu.ItemCount == 0)

View File

@ -16,6 +16,10 @@
{
"en" "Select timer track:"
}
"SelectTier"
{
"en" "Select map tier:"
}
"MapsDone"
{
"en" "Maps done"