added feature for leader to nominate a map which skips the restrictions
This commit is contained in:
parent
0394a2a402
commit
04ab4f9602
@ -9,6 +9,11 @@ native int PushMapsIntoNominationPool(ArrayList maps);
|
|||||||
native int RemoveMapFromNominationPool(char[] map);
|
native int RemoveMapFromNominationPool(char[] map);
|
||||||
native int RemoveMapsFromNominationPool(ArrayList maps);
|
native int RemoveMapsFromNominationPool(ArrayList maps);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @MapleaderNominatedMapname is the map nominated from a map leader
|
||||||
|
*/
|
||||||
|
native void GetMapleaderNominatedMap(char[] MapleaderNominatedMapname);
|
||||||
|
|
||||||
public SharedPlugin __pl_nominations_extended =
|
public SharedPlugin __pl_nominations_extended =
|
||||||
{
|
{
|
||||||
name = "nominations",
|
name = "nominations",
|
||||||
|
@ -51,6 +51,7 @@
|
|||||||
#include <sdktools>
|
#include <sdktools>
|
||||||
#include <multicolors>
|
#include <multicolors>
|
||||||
#include <PlayerManager>
|
#include <PlayerManager>
|
||||||
|
#include <nominations_extended>
|
||||||
#include <rockthevote_extended>
|
#include <rockthevote_extended>
|
||||||
|
|
||||||
#pragma semicolon 1
|
#pragma semicolon 1
|
||||||
@ -236,6 +237,7 @@ public void OnPluginEnd()
|
|||||||
Call_StartForward(g_NominationsResetForward);
|
Call_StartForward(g_NominationsResetForward);
|
||||||
GetArrayString(g_NominateList[i], j, oldmap, PLATFORM_MAX_PATH);
|
GetArrayString(g_NominateList[i], j, oldmap, PLATFORM_MAX_PATH);
|
||||||
Call_PushString(oldmap);
|
Call_PushString(oldmap);
|
||||||
|
Call_PushCell(i);
|
||||||
Call_Finish();
|
Call_Finish();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -640,6 +642,7 @@ public void OnClientDisconnect(int client)
|
|||||||
char oldmap[PLATFORM_MAX_PATH];
|
char oldmap[PLATFORM_MAX_PATH];
|
||||||
GetArrayString(g_NominateList[client], i, oldmap, PLATFORM_MAX_PATH);
|
GetArrayString(g_NominateList[client], i, oldmap, PLATFORM_MAX_PATH);
|
||||||
Call_PushString(oldmap);
|
Call_PushString(oldmap);
|
||||||
|
Call_PushCell(client);
|
||||||
Call_Finish();
|
Call_Finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1021,6 +1024,11 @@ public Handle get_most_nominated_maps()
|
|||||||
Handle most_nominated_maps = CreateArray(arraySize);
|
Handle most_nominated_maps = CreateArray(arraySize);
|
||||||
StringMap sm = new StringMap();
|
StringMap sm = new StringMap();
|
||||||
|
|
||||||
|
//november 2023 edit: now the leader can nominate one map per map played that can skip requirements: Expectation is the leader will want to lead the map.
|
||||||
|
//if leaders abuse the feature they should simply be removed from the feature.
|
||||||
|
char MapleaderNominatedMap[PLATFORM_MAX_PATH];
|
||||||
|
GetMapleaderNominatedMap(MapleaderNominatedMap);
|
||||||
|
|
||||||
for (int i = 0; i < MaxClients; i++)
|
for (int i = 0; i < MaxClients; i++)
|
||||||
{
|
{
|
||||||
for (int j = 0; j < GetArraySize(g_NominateList[i]); j++)
|
for (int j = 0; j < GetArraySize(g_NominateList[i]); j++)
|
||||||
@ -1030,12 +1038,19 @@ public Handle get_most_nominated_maps()
|
|||||||
int nominate_count_for_particular_map = 0;
|
int nominate_count_for_particular_map = 0;
|
||||||
sm.GetValue(map_iteration, nominate_count_for_particular_map);
|
sm.GetValue(map_iteration, nominate_count_for_particular_map);
|
||||||
nominate_count_for_particular_map++;
|
nominate_count_for_particular_map++;
|
||||||
//if i is 0 its admin nominated map that must come into the vote
|
//if i is 0 its admin nominated map that must come into the vote.
|
||||||
if(!i)
|
//if strequal the map was nominated by a leader and most be forced on the vote.
|
||||||
|
if(!i || StrEqual(map_iteration, MapleaderNominatedMap, false))
|
||||||
{
|
{
|
||||||
nominate_count_for_particular_map = 999;
|
nominate_count_for_particular_map = 999;
|
||||||
}
|
}
|
||||||
sm.SetValue(map_iteration, nominate_count_for_particular_map, true);
|
sm.SetValue(map_iteration, nominate_count_for_particular_map, true);
|
||||||
|
|
||||||
|
/* Notify Nominations that this map is now free */
|
||||||
|
Call_StartForward(g_NominationsResetForward);
|
||||||
|
Call_PushString(map_iteration);
|
||||||
|
Call_PushCell(i + 100); //differentiate between all other calls and the call invoked by get_most_nominated_maps()
|
||||||
|
Call_Finish();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
static char map_[PLATFORM_MAX_PATH];
|
static char map_[PLATFORM_MAX_PATH];
|
||||||
@ -1245,27 +1260,9 @@ void InitiateVote(MapChange when, Handle inputlist=INVALID_HANDLE)
|
|||||||
|
|
||||||
if(randomizeList == INVALID_HANDLE)
|
if(randomizeList == INVALID_HANDLE)
|
||||||
AddMapItem(map);
|
AddMapItem(map);
|
||||||
|
|
||||||
RemoveStringFromArray(g_NextMapList, map);
|
RemoveStringFromArray(g_NextMapList, map);
|
||||||
|
|
||||||
/* Notify Nominations that this map is now free */
|
|
||||||
Call_StartForward(g_NominationsResetForward);
|
|
||||||
Call_PushString(map);
|
|
||||||
Call_Finish();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Clear out the rest of the nominations array */
|
|
||||||
for(int i = nominationsToAdd; i < nominateCount; i++)
|
|
||||||
{
|
|
||||||
//2023 edit: might need to run all g_NominateList[client] through this instead
|
|
||||||
GetArrayString(most_nominated_maps, i, map, PLATFORM_MAX_PATH);
|
|
||||||
/* These maps shouldn't be excluded from the vote as they weren't really nominated at all */
|
|
||||||
|
|
||||||
/* Notify Nominations that this map is now free */
|
|
||||||
Call_StartForward(g_NominationsResetForward);
|
|
||||||
Call_PushString(map);
|
|
||||||
Call_Finish();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* There should currently be 'nominationsToAdd' unique maps in the vote */
|
/* There should currently be 'nominationsToAdd' unique maps in the vote */
|
||||||
|
|
||||||
@ -1521,7 +1518,7 @@ public void Handler_VoteFinishedGeneric(char[] map,
|
|||||||
if(fraglimit)
|
if(fraglimit)
|
||||||
SetConVarInt(g_Cvar_Fraglimit, fraglimit + GetConVarInt(g_Cvar_ExtendFragStep));
|
SetConVarInt(g_Cvar_Fraglimit, fraglimit + GetConVarInt(g_Cvar_ExtendFragStep));
|
||||||
|
|
||||||
CPrintToChatAll("[MCE] %t", "Current Map Extended", RoundToFloor((map_votes /num_votes)*100.0));
|
PrintToChatAll("The current map has been extended. (Received %i%s of votes)", RoundToFloor((map_votes /num_votes)*100.0), "%");
|
||||||
LogAction(-1, -1, "Voting for next map has finished. The current map has been extended.");
|
LogAction(-1, -1, "Voting for next map has finished. The current map has been extended.");
|
||||||
CPrintToChatAll("[MCE] Available Extends: %d", GetConVarInt(g_Cvar_Extend) - g_Extends);
|
CPrintToChatAll("[MCE] Available Extends: %d", GetConVarInt(g_Cvar_Extend) - g_Extends);
|
||||||
|
|
||||||
@ -1532,7 +1529,7 @@ public void Handler_VoteFinishedGeneric(char[] map,
|
|||||||
}
|
}
|
||||||
else if(strcmp(map, VOTE_DONTCHANGE, false) == 0)
|
else if(strcmp(map, VOTE_DONTCHANGE, false) == 0)
|
||||||
{
|
{
|
||||||
CPrintToChatAll("[MCE] %t", "Current Map Stays", RoundToFloor((map_votes /num_votes)*100.0));
|
PrintToChatAll("Current map continues! The Vote has spoken! (Received %i%s of votes)", RoundToFloor((map_votes /num_votes)*100.0), "%");
|
||||||
LogAction(-1, -1, "Voting for next map has finished. 'No Change' was the winner");
|
LogAction(-1, -1, "Voting for next map has finished. 'No Change' was the winner");
|
||||||
|
|
||||||
g_RunoffCount = 0;
|
g_RunoffCount = 0;
|
||||||
@ -2027,6 +2024,7 @@ NominateResult InternalNominateMap(char[] map, int owner)
|
|||||||
GetArrayString(g_NominateList[owner], 0, oldmap, PLATFORM_MAX_PATH);
|
GetArrayString(g_NominateList[owner], 0, oldmap, PLATFORM_MAX_PATH);
|
||||||
Call_StartForward(g_NominationsResetForward);
|
Call_StartForward(g_NominationsResetForward);
|
||||||
Call_PushString(oldmap);
|
Call_PushString(oldmap);
|
||||||
|
Call_PushCell(owner);
|
||||||
Call_Finish();
|
Call_Finish();
|
||||||
|
|
||||||
RemoveFromArray(g_NominateList[owner], 0);
|
RemoveFromArray(g_NominateList[owner], 0);
|
||||||
@ -2079,6 +2077,7 @@ NominateResult InternalNominateMap(char[] map, int owner)
|
|||||||
GetArrayString(g_NominateList[owner], 0, oldmap, PLATFORM_MAX_PATH);
|
GetArrayString(g_NominateList[owner], 0, oldmap, PLATFORM_MAX_PATH);
|
||||||
Call_StartForward(g_NominationsResetForward);
|
Call_StartForward(g_NominationsResetForward);
|
||||||
Call_PushString(oldmap);
|
Call_PushString(oldmap);
|
||||||
|
Call_PushCell(owner);
|
||||||
int owner_ = GetArrayCell(g_NominateOwners, 0);
|
int owner_ = GetArrayCell(g_NominateOwners, 0);
|
||||||
Call_Finish();
|
Call_Finish();
|
||||||
|
|
||||||
@ -2123,6 +2122,7 @@ bool InternalRemoveNominationByMap(char[] map)
|
|||||||
{
|
{
|
||||||
Call_StartForward(g_NominationsResetForward);
|
Call_StartForward(g_NominationsResetForward);
|
||||||
Call_PushString(oldmap);
|
Call_PushString(oldmap);
|
||||||
|
Call_PushCell(client);
|
||||||
Call_Finish();
|
Call_Finish();
|
||||||
|
|
||||||
int owner = GetArrayCell(g_NominateOwners, i);
|
int owner = GetArrayCell(g_NominateOwners, i);
|
||||||
@ -2167,6 +2167,7 @@ bool InternalRemoveNominationByOwner(int owner)
|
|||||||
|
|
||||||
Call_StartForward(g_NominationsResetForward);
|
Call_StartForward(g_NominationsResetForward);
|
||||||
Call_PushString(oldmap);
|
Call_PushString(oldmap);
|
||||||
|
Call_PushCell(owner);
|
||||||
Call_Finish();
|
Call_Finish();
|
||||||
|
|
||||||
RemoveFromArray(g_NominateList[owner], index);
|
RemoveFromArray(g_NominateList[owner], index);
|
||||||
@ -2867,6 +2868,7 @@ void CheckMapRestrictions(bool time = false, bool players = false)
|
|||||||
{
|
{
|
||||||
Call_StartForward(g_NominationsResetForward);
|
Call_StartForward(g_NominationsResetForward);
|
||||||
Call_PushString(map);
|
Call_PushString(map);
|
||||||
|
Call_PushCell(client);
|
||||||
Call_Finish();
|
Call_Finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,9 +39,10 @@
|
|||||||
#include <mapchooser>
|
#include <mapchooser>
|
||||||
#include <mapchooser_extended>
|
#include <mapchooser_extended>
|
||||||
#include <multicolors>
|
#include <multicolors>
|
||||||
|
#include <leader>
|
||||||
#include <basecomm>
|
#include <basecomm>
|
||||||
|
|
||||||
#define MCE_VERSION "1.3.1"
|
#define MCE_VERSION "1.4.1"
|
||||||
|
|
||||||
public Plugin myinfo =
|
public Plugin myinfo =
|
||||||
{
|
{
|
||||||
@ -82,6 +83,8 @@ Handle g_Cvar_VIPTimeframeMaxTime = INVALID_HANDLE;
|
|||||||
|
|
||||||
int g_Player_NominationDelay[MAXPLAYERS+1];
|
int g_Player_NominationDelay[MAXPLAYERS+1];
|
||||||
int g_NominationDelay;
|
int g_NominationDelay;
|
||||||
|
int g_iMapleaderWhoNominatedMap = -1;
|
||||||
|
char g_cMapLeaderNominatedMap[256];
|
||||||
|
|
||||||
//clients ignoring maps that are unavailable
|
//clients ignoring maps that are unavailable
|
||||||
bool g_bClientsIgnoring[MAXPLAYERS + 1];
|
bool g_bClientsIgnoring[MAXPLAYERS + 1];
|
||||||
@ -135,6 +138,8 @@ public void OnPluginStart()
|
|||||||
|
|
||||||
public void OnMapStart()
|
public void OnMapStart()
|
||||||
{
|
{
|
||||||
|
Format(g_cMapLeaderNominatedMap, sizeof(g_cMapLeaderNominatedMap), "");
|
||||||
|
g_iMapleaderWhoNominatedMap = -1;
|
||||||
if (!g_dDatabase)
|
if (!g_dDatabase)
|
||||||
{
|
{
|
||||||
//we have too many dbs so i am just re-using racetimercss
|
//we have too many dbs so i am just re-using racetimercss
|
||||||
@ -259,6 +264,7 @@ public APLRes AskPluginLoad2(Handle hThis, bool bLate, char[] err, int iErrLen)
|
|||||||
CreateNative("PushMapsIntoNominationPool", Native_PushMapsIntoNominationPool);
|
CreateNative("PushMapsIntoNominationPool", Native_PushMapsIntoNominationPool);
|
||||||
CreateNative("RemoveMapFromNominationPool", Native_RemoveMapFromNominationPool);
|
CreateNative("RemoveMapFromNominationPool", Native_RemoveMapFromNominationPool);
|
||||||
CreateNative("RemoveMapsFromNominationPool", Native_RemoveMapsFromNominationPool);
|
CreateNative("RemoveMapsFromNominationPool", Native_RemoveMapsFromNominationPool);
|
||||||
|
CreateNative("GetMapleaderNominatedMap", Native_GetMapleaderNominatedMap);
|
||||||
|
|
||||||
return APLRes_Success;
|
return APLRes_Success;
|
||||||
}
|
}
|
||||||
@ -362,17 +368,38 @@ void UpdateMapTrie()
|
|||||||
delete excludeMaps;
|
delete excludeMaps;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnNominationRemoved(const char[] map)
|
public void OnNominationRemoved(const char[] map, int client)
|
||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
/* Is the map in our list? */
|
/* Is the map in our list? */
|
||||||
if(!GetTrieValue(g_mapTrie, map, status))
|
if(!GetTrieValue(g_mapTrie, map, status))
|
||||||
return;
|
return;
|
||||||
|
int newclient = 0;
|
||||||
|
//just differientiating between if nomination was removed because of starting vote or because of anything else possible.
|
||||||
|
if (client > 100)
|
||||||
|
{
|
||||||
|
newclient = client - 100;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
newclient = client;
|
||||||
|
}
|
||||||
|
if (newclient == g_iMapleaderWhoNominatedMap && StrEqual(map, g_cMapLeaderNominatedMap, false))
|
||||||
|
{
|
||||||
|
if (client > 100)
|
||||||
|
{
|
||||||
|
CPrintToChatAll("{darkorange}[UNLOZE Nominations] {white}The map leader {lightgreen}%N {white}nomination {red}%s {white}was forced into the mapvote.", newclient, map);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CPrintToChatAll("{darkorange}[UNLOZE Nominations] {white}The map leader {lightgreen}%N {white}has removed his Mapleader nomination {red}%s", newclient, map);
|
||||||
|
}
|
||||||
|
Format(g_cMapLeaderNominatedMap, sizeof(g_cMapLeaderNominatedMap), "");
|
||||||
|
g_iMapleaderWhoNominatedMap = -1;
|
||||||
|
}
|
||||||
/* Was the map disabled due to being nominated */
|
/* Was the map disabled due to being nominated */
|
||||||
if((status & MAPSTATUS_EXCLUDE_NOMINATED) != MAPSTATUS_EXCLUDE_NOMINATED)
|
if((status & MAPSTATUS_EXCLUDE_NOMINATED) != MAPSTATUS_EXCLUDE_NOMINATED)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
SetTrieValue(g_mapTrie, map, MAPSTATUS_ENABLED);
|
SetTrieValue(g_mapTrie, map, MAPSTATUS_ENABLED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -400,7 +427,7 @@ public Action Command_Addmap(int client, int args)
|
|||||||
return Plugin_Handled;
|
return Plugin_Handled;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!CheckCommandAccess(client, "sm_nominate_ignore", ADMFLAG_KICK, true))
|
if(!CheckCommandAccess(client, "sm_nominate_ignore", ADMFLAG_KICK, true) )
|
||||||
{
|
{
|
||||||
bool RestrictionsActive = AreRestrictionsActive();
|
bool RestrictionsActive = AreRestrictionsActive();
|
||||||
|
|
||||||
@ -461,6 +488,7 @@ public Action Command_Addmap(int client, int args)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
NominateResult result = NominateMap(mapname, true, 0);
|
NominateResult result = NominateMap(mapname, true, 0);
|
||||||
|
|
||||||
if(result > Nominate_Replaced)
|
if(result > Nominate_Replaced)
|
||||||
@ -697,6 +725,17 @@ public Action Command_Nominate(int client, int args)
|
|||||||
return Plugin_Handled;
|
return Plugin_Handled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int mapLeader = Leader_CurrentLeader();
|
||||||
|
//2023 November edit: one map nominated by mapleader will automatically go to the vote.
|
||||||
|
if (client == mapLeader && StrEqual(g_cMapLeaderNominatedMap, ""))
|
||||||
|
{
|
||||||
|
CPrintToChatAll("{darkorange}[UNLOZE Nominations] {white}The map leader {lightgreen}%N {white}has nominated the map {red}%s{white}. The map will be in the next mapvote.", client, mapname);
|
||||||
|
CPrintToChatAll("{lightblue}If the map is nextmap and the leader wont play it he will be removed from leader access.");
|
||||||
|
Format(g_cMapLeaderNominatedMap, sizeof(g_cMapLeaderNominatedMap), mapname);
|
||||||
|
g_iMapleaderWhoNominatedMap = client;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
int Cooldown = GetMapCooldownTime(mapname);
|
int Cooldown = GetMapCooldownTime(mapname);
|
||||||
if(RestrictionsActive && Cooldown > GetTime())
|
if(RestrictionsActive && Cooldown > GetTime())
|
||||||
{
|
{
|
||||||
@ -739,7 +778,7 @@ public Action Command_Nominate(int client, int args)
|
|||||||
|
|
||||||
return Plugin_Handled;
|
return Plugin_Handled;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
NominateResult result = NominateMap(mapname, false, client);
|
NominateResult result = NominateMap(mapname, false, client);
|
||||||
|
|
||||||
if (result == Nominate_InvalidMap)
|
if (result == Nominate_InvalidMap)
|
||||||
@ -768,7 +807,9 @@ public Action Command_Nominate(int client, int args)
|
|||||||
if(result == Nominate_Added)
|
if(result == Nominate_Added)
|
||||||
PrintToChatAll("[NE] %t", "Map Nominated", name, mapname);
|
PrintToChatAll("[NE] %t", "Map Nominated", name, mapname);
|
||||||
else if(result == Nominate_Replaced)
|
else if(result == Nominate_Replaced)
|
||||||
|
{
|
||||||
PrintToChatAll("[NE] %t", "Map Nomination Changed", name, mapname);
|
PrintToChatAll("[NE] %t", "Map Nomination Changed", name, mapname);
|
||||||
|
}
|
||||||
|
|
||||||
LogMessage("%s nominated %s", name, mapname);
|
LogMessage("%s nominated %s", name, mapname);
|
||||||
|
|
||||||
@ -835,7 +876,15 @@ void AttemptNominate(int client, const char[] filter = "")
|
|||||||
Menu menu = g_MapMenu;
|
Menu menu = g_MapMenu;
|
||||||
menu = BuildMapMenu(filter, client);
|
menu = BuildMapMenu(filter, client);
|
||||||
|
|
||||||
|
int mapLeader = Leader_CurrentLeader();
|
||||||
|
if (client == mapLeader && StrEqual(g_cMapLeaderNominatedMap, ""))
|
||||||
|
{
|
||||||
|
SetMenuTitle(menu, "Nominate Map as Mapleader:", client);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
SetMenuTitle(menu, "%T", "Nominate Title", client);
|
SetMenuTitle(menu, "%T", "Nominate Title", client);
|
||||||
|
}
|
||||||
DisplayMenu(menu, client, MENU_TIME_FOREVER);
|
DisplayMenu(menu, client, MENU_TIME_FOREVER);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -918,7 +967,8 @@ bool PopulateNominateListMenu(Menu menu, int client, const char[] filter = "")
|
|||||||
int owner = GetArrayCell(OwnerList, i);
|
int owner = GetArrayCell(OwnerList, i);
|
||||||
int nominate_count_for_particular_map = 0;
|
int nominate_count_for_particular_map = 0;
|
||||||
sm.GetValue(map, nominate_count_for_particular_map);
|
sm.GetValue(map, nominate_count_for_particular_map);
|
||||||
if(!owner)
|
//if its console its admin nomination. if its g_iMapleaderWhoNominatedMap it was map nominated by leader, also has to be correct map out of 3.
|
||||||
|
if(!owner || (owner == g_iMapleaderWhoNominatedMap && StrEqual(map, g_cMapLeaderNominatedMap)))
|
||||||
{
|
{
|
||||||
nominate_count_for_particular_map = 999;
|
nominate_count_for_particular_map = 999;
|
||||||
}
|
}
|
||||||
@ -958,6 +1008,12 @@ bool PopulateNominateListMenu(Menu menu, int client, const char[] filter = "")
|
|||||||
|
|
||||||
if(!owner)
|
if(!owner)
|
||||||
Format(display, sizeof(display), "%s (Admin)", display);
|
Format(display, sizeof(display), "%s (Admin)", display);
|
||||||
|
else if (StrEqual(map, g_cMapLeaderNominatedMap))
|
||||||
|
{
|
||||||
|
char leadername[MAX_NAME_LENGTH];
|
||||||
|
GetClientName(g_iMapleaderWhoNominatedMap, leadername, MAX_NAME_LENGTH);
|
||||||
|
Format(display, sizeof(display), "%s (Mapleader %s)", display, leadername);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
Format(display, sizeof(display), "%s (%i %s)", display, nominate_count_for_particular_map, spelling);
|
Format(display, sizeof(display), "%s (%i %s)", display, nominate_count_for_particular_map, spelling);
|
||||||
|
|
||||||
@ -1094,7 +1150,7 @@ public int Handler_MapSelectMenu(Menu menu, MenuAction action, int param1, int p
|
|||||||
{
|
{
|
||||||
case MenuAction_End:
|
case MenuAction_End:
|
||||||
{
|
{
|
||||||
if (menu != g_MapMenu)
|
if (menu != g_MapMenu && menu != null)
|
||||||
{
|
{
|
||||||
delete menu;
|
delete menu;
|
||||||
}
|
}
|
||||||
@ -1130,7 +1186,16 @@ public int Handler_MapSelectMenu(Menu menu, MenuAction action, int param1, int p
|
|||||||
|
|
||||||
GetClientName(param1, name, MAX_NAME_LENGTH);
|
GetClientName(param1, name, MAX_NAME_LENGTH);
|
||||||
|
|
||||||
if(AreRestrictionsActive() && (
|
int mapLeader = Leader_CurrentLeader();
|
||||||
|
//2023 November edit: one map nominated by mapleader will automatically go to the vote.
|
||||||
|
if (param1 == mapLeader && StrEqual(g_cMapLeaderNominatedMap, ""))
|
||||||
|
{
|
||||||
|
CPrintToChatAll("{darkorange}[UNLOZE Nominations] {white}The map leader {lightgreen}%N {white}has nominated the map {red}%s{white}. The map will be in the next mapvote.", param1, map);
|
||||||
|
CPrintToChatAll("{lightblue}If the map is nextmap and the leader wont play it he will be removed from leader access.");
|
||||||
|
Format(g_cMapLeaderNominatedMap, sizeof(g_cMapLeaderNominatedMap), map);
|
||||||
|
g_iMapleaderWhoNominatedMap = param1;
|
||||||
|
}
|
||||||
|
else if(AreRestrictionsActive() && (
|
||||||
GetMapCooldownTime(map) > GetTime() ||
|
GetMapCooldownTime(map) > GetTime() ||
|
||||||
GetMapTimeRestriction(map) ||
|
GetMapTimeRestriction(map) ||
|
||||||
GetMapPlayerRestriction(map) ||
|
GetMapPlayerRestriction(map) ||
|
||||||
@ -1166,7 +1231,9 @@ public int Handler_MapSelectMenu(Menu menu, MenuAction action, int param1, int p
|
|||||||
if(result == Nominate_Added)
|
if(result == Nominate_Added)
|
||||||
PrintToChatAll("[NE] %t", "Map Nominated", name, map);
|
PrintToChatAll("[NE] %t", "Map Nominated", name, map);
|
||||||
else if(result == Nominate_Replaced)
|
else if(result == Nominate_Replaced)
|
||||||
|
{
|
||||||
PrintToChatAll("[NE] %t", "Map Nomination Changed", name, map);
|
PrintToChatAll("[NE] %t", "Map Nomination Changed", name, map);
|
||||||
|
}
|
||||||
|
|
||||||
LogMessage("%s nominated %s", name, map);
|
LogMessage("%s nominated %s", name, map);
|
||||||
g_Player_NominationDelay[param1] = GetTime() + GetConVarInt(g_Cvar_NominateDelay);
|
g_Player_NominationDelay[param1] = GetTime() + GetConVarInt(g_Cvar_NominateDelay);
|
||||||
@ -1200,6 +1267,12 @@ public int Handler_MapSelectMenu(Menu menu, MenuAction action, int param1, int p
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int mapLeader = Leader_CurrentLeader();
|
||||||
|
if (param1 == mapLeader && StrEqual(g_cMapLeaderNominatedMap, ""))
|
||||||
|
{
|
||||||
|
return ITEMDRAW_DEFAULT;
|
||||||
|
}
|
||||||
|
|
||||||
if(AreRestrictionsActive() && (
|
if(AreRestrictionsActive() && (
|
||||||
GetMapCooldownTime(map) > GetTime() ||
|
GetMapCooldownTime(map) > GetTime() ||
|
||||||
GetMapTimeRestriction(map) ||
|
GetMapTimeRestriction(map) ||
|
||||||
@ -1556,6 +1629,12 @@ public int Native_RemoveMapsFromNominationPool(Handle plugin, int numArgs)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int Native_GetMapleaderNominatedMap(Handle plugin, int numArgs)
|
||||||
|
{
|
||||||
|
SetNativeString(1, g_cMapLeaderNominatedMap, sizeof(g_cMapLeaderNominatedMap), true);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
stock int GetVIPTimeRestriction()
|
stock int GetVIPTimeRestriction()
|
||||||
{
|
{
|
||||||
if (!GetConVarBool(g_Cvar_VIPTimeframe))
|
if (!GetConVarBool(g_Cvar_VIPTimeframe))
|
||||||
|
Loading…
Reference in New Issue
Block a user