summaryrefslogtreecommitdiff
path: root/sourcemod/scripting/gokz-localranks/commands.sp
diff options
context:
space:
mode:
Diffstat (limited to 'sourcemod/scripting/gokz-localranks/commands.sp')
-rw-r--r--sourcemod/scripting/gokz-localranks/commands.sp506
1 files changed, 506 insertions, 0 deletions
diff --git a/sourcemod/scripting/gokz-localranks/commands.sp b/sourcemod/scripting/gokz-localranks/commands.sp
new file mode 100644
index 0000000..44063af
--- /dev/null
+++ b/sourcemod/scripting/gokz-localranks/commands.sp
@@ -0,0 +1,506 @@
+static float lastCommandTime[MAXPLAYERS + 1];
+
+
+
+void RegisterCommands()
+{
+ RegConsoleCmd("sm_top", CommandTop, "[KZ] Open a menu showing the top record holders.");
+ RegConsoleCmd("sm_maptop", CommandMapTop, "[KZ] Open a menu showing the top main course times of a map. Usage: !maptop <map>");
+ RegConsoleCmd("sm_bmaptop", CommandBMapTop, "[KZ] Open a menu showing the top bonus times of a map. Usage: !bmaptop <#bonus> <map>");
+ RegConsoleCmd("sm_bonustop", CommandBMapTop, "[KZ] Open a menu showing the top bonus times of a map. Usage: !bonustop <#bonus> <map>");
+ RegConsoleCmd("sm_btop", CommandBMapTop, "[KZ] Open a menu showing the top bonus times of a map. Usage: !btop <#bonus> <map>");
+ RegConsoleCmd("sm_pb", CommandPB, "[KZ] Show PB main course times and ranks in chat. Usage: !pb <map> <player>");
+ RegConsoleCmd("sm_bpb", CommandBPB, "[KZ] Show PB bonus times and ranks in chat. Usage: !bpb <#bonus> <map> <player>");
+ RegConsoleCmd("sm_wr", CommandWR, "[KZ] Show main course record times in chat. Usage: !wr <map>");
+ RegConsoleCmd("sm_bwr", CommandBWR, "[KZ] Show bonus record times in chat. Usage: !bwr <#bonus> <map>");
+ RegConsoleCmd("sm_avg", CommandAVG, "[KZ] Show the average main course run time in chat. Usage !avg <map>");
+ RegConsoleCmd("sm_bavg", CommandBAVG, "[KZ] Show the average bonus run time in chat. Usage !bavg <#bonus> <map>");
+ RegConsoleCmd("sm_pc", CommandPC, "[KZ] Show course completion in chat. Usage: !pc <player>");
+ RegConsoleCmd("sm_rr", CommandRecentRecords, "[KZ] Open a menu showing recently broken records.");
+ RegConsoleCmd("sm_latest", CommandRecentRecords, "[KZ] Open a menu showing recently broken records.");
+
+ RegConsoleCmd("sm_ljpb", CommandLJPB, "[KZ] Show PB Long Jump in chat. Usage: !ljpb <jumper>");
+ RegConsoleCmd("sm_bhpb", CommandBHPB, "[KZ] Show PB Bunnyhop in chat. Usage: !bhpb <jumper>");
+ RegConsoleCmd("sm_lbhpb", CommandLBHPB, "[KZ] Show PB Lowpre Bunnyhop in chat. Usage: !lbhpb <jumper>");
+ RegConsoleCmd("sm_mbhpb", CommandMBHPB, "[KZ] Show PB Multi Bunnyhop in chat. Usage: !mbhpb <jumper>");
+ RegConsoleCmd("sm_wjpb", CommandWJPB, "[KZ] Show PB Weird Jump in chat. Usage: !wjpb <jumper>");
+ RegConsoleCmd("sm_lwjpb", CommandLWJPB, "[KZ] Show PB Lowpre Weird Jump in chat. Usage: !lwjpb <jumper>");
+ RegConsoleCmd("sm_lajpb", CommandLAJPB, "[KZ] Show PB Ladder Jump in chat. Usage: !lajpb <jumper>");
+ RegConsoleCmd("sm_lahpb", CommandLAHPB, "[KZ] Show PB Ladderhop in chat. Usage: !lahpb <jumper>");
+ RegConsoleCmd("sm_jbpb", CommandJBPB, "[KZ] Show PB Jumpbug in chat. Usage: !jbpb <jumper>");
+ RegConsoleCmd("sm_js", CommandJS, "[KZ] Open a menu showing jumpstat PBs. Usage: !js <jumper>");
+ RegConsoleCmd("sm_jumpstats", CommandJS, "[KZ] Open a menu showing jumpstat PBs. Usage: !jumpstats <jumper>");
+ RegConsoleCmd("sm_jstop", CommandJSTop, "[KZ] Open a menu showing the top jumpstats.");
+ RegConsoleCmd("sm_jumptop", CommandJSTop, "[KZ] Open a menu showing the top jumpstats.");
+
+ RegAdminCmd("sm_updatemappool", CommandUpdateMapPool, ADMFLAG_ROOT, "[KZ] Update the ranked map pool with the list of maps in cfg/sourcemod/gokz/gokz-localranks-mappool.cfg.");
+}
+
+public Action CommandTop(int client, int args)
+{
+ if (IsSpammingCommands(client))
+ {
+ return Plugin_Handled;
+ }
+
+ DisplayPlayerTopModeMenu(client);
+ return Plugin_Handled;
+}
+
+public Action CommandMapTop(int client, int args)
+{
+ if (IsSpammingCommands(client))
+ {
+ return Plugin_Handled;
+ }
+
+ if (args == 0)
+ { // Open map top for current map
+ DB_OpenMapTopModeMenu(client, GOKZ_DB_GetCurrentMapID(), 0);
+ }
+ else if (args >= 1)
+ { // Open map top for specified map
+ char specifiedMap[33];
+ GetCmdArg(1, specifiedMap, sizeof(specifiedMap));
+ DB_OpenMapTopModeMenu_FindMap(client, specifiedMap, 0);
+ }
+ return Plugin_Handled;
+}
+
+public Action CommandBMapTop(int client, int args)
+{
+ if (IsSpammingCommands(client))
+ {
+ return Plugin_Handled;
+ }
+
+ if (args == 0)
+ { // Open Bonus 1 top for current map
+ DB_OpenMapTopModeMenu(client, GOKZ_DB_GetCurrentMapID(), 1);
+ }
+ else if (args == 1)
+ { // Open specified Bonus # top for current map
+ char argBonus[4];
+ GetCmdArg(1, argBonus, sizeof(argBonus));
+ int bonus = StringToInt(argBonus);
+ if (GOKZ_IsValidCourse(bonus, true))
+ {
+ DB_OpenMapTopModeMenu(client, GOKZ_DB_GetCurrentMapID(), bonus);
+ }
+ else
+ {
+ GOKZ_PrintToChat(client, true, "%t", "Invalid Bonus Number", argBonus);
+ }
+ }
+ else if (args >= 2)
+ { // Open specified bonus top for specified map
+ char argBonus[4], argMap[33];
+ GetCmdArg(1, argBonus, sizeof(argBonus));
+ GetCmdArg(2, argMap, sizeof(argMap));
+ int bonus = StringToInt(argBonus);
+ if (GOKZ_IsValidCourse(bonus, true))
+ {
+ DB_OpenMapTopModeMenu_FindMap(client, argMap, bonus);
+ }
+ else
+ {
+ GOKZ_PrintToChat(client, true, "%t", "Invalid Bonus Number", argBonus);
+ }
+ }
+ return Plugin_Handled;
+}
+
+public Action CommandPB(int client, int args)
+{
+ if (IsSpammingCommands(client))
+ {
+ return Plugin_Handled;
+ }
+
+ if (args == 0)
+ { // Print their PBs for current map and their current mode
+ DB_PrintPBs(client, GetSteamAccountID(client), GOKZ_DB_GetCurrentMapID(), 0, GOKZ_GetCoreOption(client, Option_Mode));
+ if (gB_GOKZGlobal)
+ {
+ char steamid[32];
+ GetClientAuthId(client, AuthId_Steam2, steamid, sizeof(steamid));
+ GOKZ_GL_PrintRecords(client, "", 0, GOKZ_GetCoreOption(client, Option_Mode), steamid);
+ }
+ }
+ else if (args == 1)
+ { // Print their PBs for specified map and their current mode
+ char argMap[33];
+ GetCmdArg(1, argMap, sizeof(argMap));
+ DB_PrintPBs_FindMap(client, GetSteamAccountID(client), argMap, 0, GOKZ_GetCoreOption(client, Option_Mode));
+ }
+ else if (args >= 2)
+ { // Print specified player's PBs for specified map and their current mode
+ char argMap[33], argPlayer[MAX_NAME_LENGTH];
+ GetCmdArg(1, argMap, sizeof(argMap));
+ GetCmdArg(2, argPlayer, sizeof(argPlayer));
+ DB_PrintPBs_FindPlayerAndMap(client, argPlayer, argMap, 0, GOKZ_GetCoreOption(client, Option_Mode));
+ }
+ return Plugin_Handled;
+}
+
+public Action CommandBPB(int client, int args)
+{
+ if (IsSpammingCommands(client))
+ {
+ return Plugin_Handled;
+ }
+
+ if (args == 0)
+ { // Print their Bonus 1 PBs for current map and their current mode
+ DB_PrintPBs(client, GetSteamAccountID(client), GOKZ_DB_GetCurrentMapID(), 1, GOKZ_GetCoreOption(client, Option_Mode));
+ if (gB_GOKZGlobal)
+ {
+ char steamid[32];
+ GetClientAuthId(client, AuthId_Steam2, steamid, sizeof(steamid));
+ GOKZ_GL_PrintRecords(client, "", 1, GOKZ_GetCoreOption(client, Option_Mode), steamid);
+ }
+ }
+ else if (args == 1)
+ { // Print their specified Bonus # PBs for current map and their current mode
+ char argBonus[4];
+ GetCmdArg(1, argBonus, sizeof(argBonus));
+ int bonus = StringToInt(argBonus);
+ if (GOKZ_IsValidCourse(bonus, true))
+ {
+ DB_PrintPBs(client, GetSteamAccountID(client), GOKZ_DB_GetCurrentMapID(), bonus, GOKZ_GetCoreOption(client, Option_Mode));
+ if (gB_GOKZGlobal)
+ {
+ char steamid[32];
+ GetClientAuthId(client, AuthId_Steam2, steamid, sizeof(steamid));
+ GOKZ_GL_PrintRecords(client, "", bonus, GOKZ_GetCoreOption(client, Option_Mode), steamid);
+ }
+ }
+ else
+ {
+ GOKZ_PrintToChat(client, true, "%t", "Invalid Bonus Number", argBonus);
+ }
+ }
+ else if (args == 2)
+ { // Print their specified Bonus # PBs for specified map and their current mode
+ char argBonus[4], argMap[33];
+ GetCmdArg(1, argBonus, sizeof(argBonus));
+ GetCmdArg(2, argMap, sizeof(argMap));
+ int bonus = StringToInt(argBonus);
+ if (GOKZ_IsValidCourse(bonus, true))
+ {
+ DB_PrintPBs_FindMap(client, GetSteamAccountID(client), argMap, bonus, GOKZ_GetCoreOption(client, Option_Mode));
+ }
+ else
+ {
+ GOKZ_PrintToChat(client, true, "%t", "Invalid Bonus Number", argBonus);
+ }
+ }
+ else if (args >= 3)
+ { // Print specified player's specified Bonus # PBs for specified map and their current mode
+ char argBonus[4], argMap[33], argPlayer[MAX_NAME_LENGTH];
+ GetCmdArg(1, argBonus, sizeof(argBonus));
+ GetCmdArg(2, argMap, sizeof(argMap));
+ GetCmdArg(3, argPlayer, sizeof(argPlayer));
+ int bonus = StringToInt(argBonus);
+ if (GOKZ_IsValidCourse(bonus, true))
+ {
+ DB_PrintPBs_FindPlayerAndMap(client, argPlayer, argMap, bonus, GOKZ_GetCoreOption(client, Option_Mode));
+ }
+ else
+ {
+ GOKZ_PrintToChat(client, true, "%t", "Invalid Bonus Number", argBonus);
+ }
+ }
+ return Plugin_Handled;
+}
+
+public Action CommandWR(int client, int args)
+{
+ if (IsSpammingCommands(client))
+ {
+ return Plugin_Handled;
+ }
+
+ if (args == 0)
+ { // Print record times for current map and their current mode
+ DB_PrintRecords(client, GOKZ_DB_GetCurrentMapID(), 0, GOKZ_GetCoreOption(client, Option_Mode));
+ if (gB_GOKZGlobal)
+ {
+ GOKZ_GL_PrintRecords(client, "", 0, GOKZ_GetCoreOption(client, Option_Mode));
+ }
+ }
+ else if (args >= 1)
+ { // Print record times for specified map and their current mode
+ char argMap[33];
+ GetCmdArg(1, argMap, sizeof(argMap));
+ DB_PrintRecords_FindMap(client, argMap, 0, GOKZ_GetCoreOption(client, Option_Mode));
+ }
+ return Plugin_Handled;
+}
+
+public Action CommandBWR(int client, int args)
+{
+ if (IsSpammingCommands(client))
+ {
+ return Plugin_Handled;
+ }
+
+ if (args == 0)
+ { // Print Bonus 1 record times for current map and their current mode
+ DB_PrintRecords(client, GOKZ_DB_GetCurrentMapID(), 1, GOKZ_GetCoreOption(client, Option_Mode));
+ if (gB_GOKZGlobal)
+ {
+ GOKZ_GL_PrintRecords(client, "", 1, GOKZ_GetCoreOption(client, Option_Mode));
+ }
+ }
+ else if (args == 1)
+ { // Print specified Bonus # record times for current map and their current mode
+ char argBonus[4];
+ GetCmdArg(1, argBonus, sizeof(argBonus));
+ int bonus = StringToInt(argBonus);
+ if (GOKZ_IsValidCourse(bonus, true))
+ {
+ DB_PrintRecords(client, GOKZ_DB_GetCurrentMapID(), bonus, GOKZ_GetCoreOption(client, Option_Mode));
+ if (gB_GOKZGlobal)
+ {
+ GOKZ_GL_PrintRecords(client, "", bonus, GOKZ_GetCoreOption(client, Option_Mode));
+ }
+ }
+ else
+ {
+ GOKZ_PrintToChat(client, true, "%t", "Invalid Bonus Number", argBonus);
+ }
+ }
+ else if (args >= 2)
+ { // Print specified Bonus # record times for specified map and their current mode
+ char argBonus[4], argMap[33];
+ GetCmdArg(1, argBonus, sizeof(argBonus));
+ GetCmdArg(2, argMap, sizeof(argMap));
+ int bonus = StringToInt(argBonus);
+ if (GOKZ_IsValidCourse(bonus, true))
+ {
+ DB_PrintRecords_FindMap(client, argMap, bonus, GOKZ_GetCoreOption(client, Option_Mode));
+ }
+ else
+ {
+ GOKZ_PrintToChat(client, true, "%t", "Invalid Bonus Number", argBonus);
+ }
+ }
+ return Plugin_Handled;
+}
+
+public Action CommandAVG(int client, int args)
+{
+ if (IsSpammingCommands(client))
+ {
+ return Plugin_Handled;
+ }
+
+ if (args == 0)
+ { // Print average times for current map and their current mode
+ DB_PrintAverage(client, GOKZ_DB_GetCurrentMapID(), 0, GOKZ_GetCoreOption(client, Option_Mode));
+ }
+ else if (args >= 1)
+ { // Print average times for specified map and their current mode
+ char argMap[33];
+ GetCmdArg(1, argMap, sizeof(argMap));
+ DB_PrintAverage_FindMap(client, argMap, 0, GOKZ_GetCoreOption(client, Option_Mode));
+ }
+ return Plugin_Handled;
+}
+
+public Action CommandBAVG(int client, int args)
+{
+ if (IsSpammingCommands(client))
+ {
+ return Plugin_Handled;
+ }
+
+ if (args == 0)
+ { // Print Bonus 1 average times for current map and their current mode
+ DB_PrintAverage(client, GOKZ_DB_GetCurrentMapID(), 1, GOKZ_GetCoreOption(client, Option_Mode));
+ }
+ else if (args == 1)
+ { // Print specified Bonus # average times for current map and their current mode
+ char argBonus[4];
+ GetCmdArg(1, argBonus, sizeof(argBonus));
+ int bonus = StringToInt(argBonus);
+ if (GOKZ_IsValidCourse(bonus, true))
+ {
+ DB_PrintAverage(client, GOKZ_DB_GetCurrentMapID(), bonus, GOKZ_GetCoreOption(client, Option_Mode));
+ }
+ else
+ {
+ GOKZ_PrintToChat(client, true, "%t", "Invalid Bonus Number", argBonus);
+ }
+ }
+ else if (args >= 2)
+ { // Print specified Bonus # average times for specified map and their current mode
+ char argBonus[4], argMap[33];
+ GetCmdArg(1, argBonus, sizeof(argBonus));
+ GetCmdArg(2, argMap, sizeof(argMap));
+ int bonus = StringToInt(argBonus);
+ if (GOKZ_IsValidCourse(bonus, true))
+ {
+ DB_PrintAverage_FindMap(client, argMap, bonus, GOKZ_GetCoreOption(client, Option_Mode));
+ }
+ else
+ {
+ GOKZ_PrintToChat(client, true, "%t", "Invalid Bonus Number", argBonus);
+ }
+ }
+ return Plugin_Handled;
+}
+
+public Action CommandPC(int client, int args)
+{
+ if (IsSpammingCommands(client))
+ {
+ return Plugin_Handled;
+ }
+
+ if (args < 1)
+ {
+ DB_GetCompletion(client, GetSteamAccountID(client), GOKZ_GetCoreOption(client, Option_Mode), true);
+ }
+ else if (args >= 1)
+ { // Print record times for specified map and their current mode
+ char argPlayer[MAX_NAME_LENGTH];
+ GetCmdArg(1, argPlayer, sizeof(argPlayer));
+ DB_GetCompletion_FindPlayer(client, argPlayer, GOKZ_GetCoreOption(client, Option_Mode));
+ }
+ return Plugin_Handled;
+}
+
+public Action CommandRecentRecords(int client, int args)
+{
+ if (IsSpammingCommands(client))
+ {
+ return Plugin_Handled;
+ }
+
+ DisplayRecentRecordsModeMenu(client);
+ return Plugin_Handled;
+}
+
+public Action CommandUpdateMapPool(int client, int args)
+{
+ DB_UpdateRankedMapPool(client);
+ return Plugin_Handled;
+}
+
+public Action CommandLJPB(int client, int args)
+{
+ DisplayJumpstatRecordCommand(client, args, JumpType_LongJump);
+ return Plugin_Handled;
+}
+
+public Action CommandBHPB(int client, int args)
+{
+ DisplayJumpstatRecordCommand(client, args, JumpType_Bhop);
+ return Plugin_Handled;
+}
+
+public Action CommandLBHPB(int client, int args)
+{
+ DisplayJumpstatRecordCommand(client, args, JumpType_LowpreBhop);
+ return Plugin_Handled;
+}
+
+public Action CommandMBHPB(int client, int args)
+{
+ DisplayJumpstatRecordCommand(client, args, JumpType_MultiBhop);
+ return Plugin_Handled;
+}
+
+public Action CommandWJPB(int client, int args)
+{
+ DisplayJumpstatRecordCommand(client, args, JumpType_WeirdJump);
+ return Plugin_Handled;
+}
+
+public Action CommandLWJPB(int client, int args)
+{
+ DisplayJumpstatRecordCommand(client, args, JumpType_LowpreWeirdJump);
+ return Plugin_Handled;
+}
+
+public Action CommandLAJPB(int client, int args)
+{
+ DisplayJumpstatRecordCommand(client, args, JumpType_LadderJump);
+ return Plugin_Handled;
+}
+
+public Action CommandLAHPB(int client, int args)
+{
+ DisplayJumpstatRecordCommand(client, args, JumpType_Ladderhop);
+ return Plugin_Handled;
+}
+
+public Action CommandJBPB(int client, int args)
+{
+ DisplayJumpstatRecordCommand(client, args, JumpType_Jumpbug);
+ return Plugin_Handled;
+}
+
+public Action CommandJS(int client, int args)
+{
+ if (IsSpammingCommands(client))
+ {
+ return Plugin_Handled;
+ }
+
+ if (args < 1)
+ {
+ DB_OpenJumpStatsModeMenu(client, GetSteamAccountID(client));
+ }
+ else if (args >= 1)
+ {
+ char argPlayer[MAX_NAME_LENGTH];
+ GetCmdArg(1, argPlayer, sizeof(argPlayer));
+ DB_OpenJumpStatsModeMenu_FindPlayer(client, argPlayer);
+ }
+ return Plugin_Handled;
+}
+
+public Action CommandJSTop(int client, int args)
+{
+ DisplayJumpTopModeMenu(client);
+ return Plugin_Handled;
+}
+
+void DisplayJumpstatRecordCommand(int client, int args, int jumpType)
+{
+ if (args >= 1)
+ {
+ char argJumper[33];
+ GetCmdArg(1, argJumper, sizeof(argJumper));
+ DisplayJumpstatRecord(client, jumpType, argJumper);
+ }
+ else
+ {
+ DisplayJumpstatRecord(client, jumpType);
+ }
+}
+
+
+
+// =====[ PRIVATE ]=====
+
+bool IsSpammingCommands(int client, bool printMessage = true)
+{
+ float currentTime = GetEngineTime();
+ float timeSinceLastCommand = currentTime - lastCommandTime[client];
+ if (timeSinceLastCommand < LR_COMMAND_COOLDOWN)
+ {
+ if (printMessage)
+ {
+ GOKZ_PrintToChat(client, true, "%t", "Please Wait Before Using Command", LR_COMMAND_COOLDOWN - timeSinceLastCommand + 0.1);
+ }
+ return true;
+ }
+
+ // Not spamming commands - all good!
+ lastCommandTime[client] = currentTime;
+ return false;
+} \ No newline at end of file