From 551588cb2bab659d4936c938e43bfc4e184b7bdd Mon Sep 17 00:00:00 2001 From: jenz Date: Sun, 29 Jan 2023 18:04:56 +0100 Subject: [PATCH] fixing handle and index errors, also added so mapgroup restrictions are respected --- .../scripting/mapchooser_extended.sp | 65 ++++++++++++------- .../scripting/nominations_extended.sp | 26 -------- 2 files changed, 41 insertions(+), 50 deletions(-) diff --git a/mapchooser_extended/scripting/mapchooser_extended.sp b/mapchooser_extended/scripting/mapchooser_extended.sp index f2a8a9a1..b1bf69b9 100755 --- a/mapchooser_extended/scripting/mapchooser_extended.sp +++ b/mapchooser_extended/scripting/mapchooser_extended.sp @@ -1022,6 +1022,7 @@ public Handle get_most_nominated_maps() sm.SetValue(map_iteration, nominate_count_for_particular_map, true); } } + static char map_[PLATFORM_MAX_PATH]; for (int i = 0; i < voteSize; i++) { @@ -1056,6 +1057,43 @@ public Handle get_most_nominated_maps() continue; } sm.Remove(picked_map); + + //2023 edit: respecting that only right amount of maps per group is allowed in vote + int groups_[32]; + int groups[32]; + int groupsfound = InternalGetMapGroups(picked_map, groups, sizeof(groups)); + bool skip_nomination = false; + for (int group = 0; group < groupsfound; group ++) + { + int groupcur = 0; + int groupmax = InternalGetGroupMax(groups[group]); + if (groupmax >= 0) + { + for (int j = 0; j < GetArraySize(most_nominated_maps); j++) + { + //Native_GetMapGroupRestriction + GetArrayString(most_nominated_maps, j, map_, PLATFORM_MAX_PATH); + int tmp = InternalGetMapGroups(map_, groups_, sizeof(groups_)); + if (FindIntInArray(groups_, tmp, groups[group]) != -1) + { + groupcur++; + } + if (groupcur >= groupmax) + { + skip_nomination = true; + break; + } + } + if (skip_nomination) + { + break; + } + } + } + if (skip_nomination) + { + continue; + } PushArrayString(most_nominated_maps, picked_map); //PrintToChatAll("picked_map: %s", picked_map); } @@ -1807,7 +1845,7 @@ NominateResult InternalNominateMap(char[] map, int owner) } */ - if (owner != 0) + if (owner != 0 && g_NominateList[owner] != INVALID_HANDLE) { for (int j = 0; j < GetArraySize(g_NominateList[owner]); j++) { @@ -2360,9 +2398,10 @@ public int Native_GetMapGroups(Handle plugin, int numParams) return found; } +//GetMapGroupRestriction public int Native_GetMapGroupRestriction(Handle plugin, int numParams) { - int client = GetNativeCell(2); + GetNativeCell(2); int len; GetNativeStringLength(1, len); @@ -2401,28 +2440,6 @@ public int Native_GetMapGroupRestriction(Handle plugin, int numParams) } } delete kv; - - if(groupcur >= groupmax) - { - // Check if client has nominated a map in the same group and can change their nomination - bool okay = false; - if(client >= 1 && client <= MaxClients) - { - int index = FindValueInArray(g_NominateOwners, client); - if(index != -1) - { - static char oldmap[PLATFORM_MAX_PATH]; - GetArrayString(g_NominateList[client], index, oldmap, PLATFORM_MAX_PATH); - static int oldgroups[32]; - int tmp = InternalGetMapGroups(oldmap, oldgroups, sizeof(oldgroups)); - if(FindIntInArray(groups_, tmp, groups[group]) != -1) - okay = true; - } - } - - if(!okay) - return groupmax; - } } } diff --git a/mapchooser_extended/scripting/nominations_extended.sp b/mapchooser_extended/scripting/nominations_extended.sp index e7374a34..e0db1d2f 100755 --- a/mapchooser_extended/scripting/nominations_extended.sp +++ b/mapchooser_extended/scripting/nominations_extended.sp @@ -324,13 +324,6 @@ public Action Command_Addmap(int client, int args) return Plugin_Handled; } - - int GroupRestriction = GetMapGroupRestriction(mapname); - if(RestrictionsActive && GroupRestriction >= 0) - { - CPrintToChat(client, "[NE] %t", "Map Nominate Group Error", GroupRestriction); - return Plugin_Handled; - } } NominateResult result = NominateMap(mapname, true, 0); @@ -603,13 +596,6 @@ public Action Command_Nominate(int client, int args) return Plugin_Handled; } - int GroupRestriction = GetMapGroupRestriction(mapname, client); - if(RestrictionsActive && GroupRestriction >= 0) - { - CPrintToChat(client, "[NE] %t", "Map Nominate Group Error", GroupRestriction); - return Plugin_Handled; - } - NominateResult result = NominateMap(mapname, false, client); if (result == Nominate_InvalidMap) @@ -903,7 +889,6 @@ public int Handler_MapSelectMenu(Menu menu, MenuAction action, int param1, int p GetMapCooldownTime(map) > GetTime() || GetMapTimeRestriction(map) || GetMapPlayerRestriction(map) || - GetMapGroupRestriction(map, param1) >= 0 || GetMapVIPRestriction(map, param1))) { PrintToChat(param1, "[NE] You cant nominate this map right now."); @@ -972,7 +957,6 @@ public int Handler_MapSelectMenu(Menu menu, MenuAction action, int param1, int p GetMapCooldownTime(map) > GetTime() || GetMapTimeRestriction(map) || GetMapPlayerRestriction(map) || - GetMapGroupRestriction(map, param1) >= 0 || GetMapVIPRestriction(map, param1))) { return ITEMDRAW_DISABLED; @@ -1075,15 +1059,6 @@ public int Handler_MapSelectMenu(Menu menu, MenuAction action, int param1, int p return RedrawMenuItem(display); } - //2023 edit for multiple nominations - /* - int GroupRestriction = GetMapGroupRestriction(map, param1); - if(RestrictionsActive && GroupRestriction >= 0) - { - Format(display, sizeof(display), "%s (%T)", buffer, "Map Group Restriction", param1, GroupRestriction); - return RedrawMenuItem(display); - } - */ if(RestrictionsActive && VIPRestriction) { @@ -1167,7 +1142,6 @@ public int Handler_AdminMapSelectMenu(Menu menu, MenuAction action, int param1, GetMapCooldownTime(map) > GetTime() || GetMapTimeRestriction(map) || GetMapPlayerRestriction(map) || - GetMapGroupRestriction(map, param1) >= 0 || GetMapVIPRestriction(map, param1))) { PrintToChat(param1, "[NE] You cant nominate this map right now.");