mapchooser_extended: mapchooser_extended: add reserved/random nomination slots (by Botox)

This commit is contained in:
neon
2018-08-10 12:43:49 +02:00
parent 679ba49402
commit 3c8d8c99f8
4 changed files with 728 additions and 163 deletions
@@ -12,7 +12,7 @@
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License, version 3.0, as published by the
* Free Software Foundation.
*
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
@@ -52,7 +52,7 @@ enum CanNominateResult
/**
* Called whenever warning timer starts
*
*
*/
forward void OnMapVoteWarningStart();
@@ -68,7 +68,7 @@ forward void OnMapVoteWarningTick(int time);
/**
* Called whenever vote starts
*
*
* @deprecated Will be removed in MapChooser 1.8. Use OnMapVoteStarted instead.
*/
forward void OnMapVoteStart();
@@ -81,7 +81,7 @@ forward void OnMapVoteEnd(const char[] map);
/**
* Is a map on the current game's official list?
* This should be treated as informative only.
*
*
* @param map Name of map to check
* @return true if it's on the list of official maps for this game
*/
@@ -89,7 +89,7 @@ native bool IsMapOfficial(const char[] map);
/**
* Is nominate allowed?
*
*
* @return A CanNominateResult corresponding to whether a vote is allowed or not
*/
native CanNominateResult CanNominate();
@@ -97,7 +97,7 @@ native CanNominateResult CanNominate();
/**
* Add map to nomination exclude list.
* Known as cooldown.
*
*
* @param map Name of map
* @param cooldown Cooldown, interpretation depends on mode.
* @param mode 0: Normal, use cooldown value from config/default.
@@ -122,15 +122,15 @@ native int GetMapTimeRestriction(const char[] map);
// >0 = More than MaxPlayers
native int GetMapPlayerRestriction(const char[] map);
// <0 = No group
// >=0 = Group _max
native int GetMapGroup(const char[] map, char[] group, int size);
// <=0 = No group
// >0 = Groups found
native int GetMapGroups(const char[] map, int[] groups, int size);
// <0 = No restriction
// >=0 = Group _max -> Group full
native int GetMapGroupRestriction(const char[] map, int client = 0);
public SharedPlugin __pl_mapchooser_extended =
public SharedPlugin __pl_mapchooser_extended =
{
name = "mapchooser",
file = "mapchooser_extended.smx",
@@ -8,7 +8,7 @@
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License, version 3.0, as published by the
* Free Software Foundation.
*
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
@@ -28,7 +28,7 @@
*
* Version: $Id$
*/
#include <menus>
#include <sourcemod>
@@ -66,7 +66,7 @@ MenuAction_Display A menu is about to be displayed (param1=client). If you choo
MenuAction_Select An item was selected (param1=client, param2=item). For subplugin support.
MenuAction_End A vote has fully ended and the vote object is ready to be cleaned up
param1 is MenuEnd reason, either MenuEnd_VotingCancelled or MenuEnd_VotingDone
MenuAction_VoteEnd A vote sequence has succeeded (param1=chosen item)
MenuAction_VoteEnd A vote sequence has succeeded (param1=chosen item)
This is not called if NativeVotes_SetResultCallback has been used on the vote.
You should call NativeVotes_DisplayPass or NativeVotes_DisplayPassEx after this
MenuAction_VoteStart A vote sequence has started (nothing passed). Use this instead of MenuAction_Start
@@ -181,17 +181,17 @@ enum NativeVotesCallFailType
/*
* Is a specific vote type supported by this game?
*
*
* @param voteType Vote type
*/
native bool:NativeVotes_IsVoteTypeSupported(NativeVotesType:voteType);
/**
* Creates a new, empty vote.
*
*
* @param handler Function which will receive vote actions.
* @param voteType Vote type, cannot be changed after set
* @param actions Optionally set which actions to receive. Start,
* @param actions Optionally set which actions to receive. Start,
* Cancel, and End will always be received regardless
* of whether they are set or not. They are also
* the only default actions.
@@ -202,9 +202,9 @@ native Handle:NativeVotes_Create(MenuHandler:handler, NativeVotesType:voteType,
/**
* Frees all handles related to a vote.
*
*
* THIS MUST BE CALLED TO AVOID HANDLE LEAKS
*
*
* @param vote Vote handle
* @noreturn
*/
@@ -261,13 +261,13 @@ native NativeVotes_RemoveAllItems(Handle:vote);
* @return True on success, false if position is invalid.
* @error Invalid Handlem
*/
native bool:NativeVotes_GetItem(Handle:vote,
position,
String:infoBuf[],
native bool:NativeVotes_GetItem(Handle:vote,
position,
String:infoBuf[],
infoBufLen,
String:dispBuf[]="",
dispBufLen=0);
/**
* Returns the number of items in a vote.
*
@@ -325,9 +325,9 @@ native NativeVotes_GetTitle(Handle:vote, String:buffer[], maxlength);
/**
* Sets the target userid for vote
* This should be used instead of SetArgument for votes that target players
*
*
* Also sets target SteamID
*
*
* @param vote Vote Handle.
* @param userid Client index of target player
* @param setDetails If true, also sets vote details to client's name
@@ -367,7 +367,7 @@ native bool:NativeVotes_IsVoteInProgress();
/**
* Returns a style's maximum items
*
*
* @return Maximum items
*/
native NativeVotes_GetMaxItems();
@@ -376,7 +376,7 @@ native NativeVotes_GetMaxItems();
* Sets a vote's option flags.
*
* If a certain bit is not supported, it will be stripped before being set.
*
*
* NOTE: This is currently unused, but reserved for future use.
*
* @param menu Builtin Vote Handle.
@@ -407,11 +407,11 @@ native NativeVotes_Cancel();
/**
* Callback for when a vote has ended and results are available.
*
*
* Due to SourceMod Forward limitations in plugins, multi-dimension arrays can't be passed
* to forwards. This means we have to split the client_info and item_info arrays into
* their components.
*
*
* @param vote The vote being voted on.
* @param num_votes Number of votes tallied in total.
* @param num_clients Number of clients who could vote.
@@ -422,24 +422,24 @@ native NativeVotes_Cancel();
* @param item_votes Array of vote vote counts. Parallel with item_indexes.
* @noreturn
*/
functag public NativeVotes_VoteHandler(Handle:vote,
num_votes,
num_clients,
const client_indexes[],
const client_votes[],
num_items,
const item_indexes[],
const item_votes[]);
typedef NativeVotes_VoteHandler = function int (Handle vote,
int num_votes,
int num_clients,
const int[] client_indexes,
const int[] client_votes,
int num_items,
const int[] item_indexes,
const int[] item_votes);
/**
* Function to convert client/vote arrays into their two-dimensional versions,
* which can then be passed to a standard vote handler.
*
*
* client_info and item_info are the resulting arrays.
*
*
* Note: When declaring client_info and item_info, you'll probably want to declare them like this:
* new client_info[num_clients][2];
* new item_info[num_items][2];
*
*
* @param num_clients Number of clients who could vote.
* @param client_indexes Array of client indexes. Parallel with client_votes.
* @param client_votes Array of client votes. Parallel with client_indexes.
@@ -457,7 +457,7 @@ stock NativeVotes_FixResults(num_clients,
num_items,
const item_indexes[],
const item_votes[],
client_info[][],
client_info[][],
item_info[][])
{
for (new i = 0; i < num_clients; ++i)
@@ -465,7 +465,7 @@ stock NativeVotes_FixResults(num_clients,
client_info[i][VOTEINFO_CLIENT_INDEX] = client_indexes[i];
client_info[i][VOTEINFO_CLIENT_ITEM] = client_votes[i];
}
for (new i = 0; i < num_items; ++i)
{
item_info[i][VOTEINFO_ITEM_INDEX] = item_indexes[i];
@@ -494,8 +494,8 @@ native NativeVotes_SetResultCallback(Handle:vote, NativeVotes_VoteHandler:callba
native NativeVotes_CheckVoteDelay();
/**
* Returns whether a client is in the pool of clients allowed
* to participate in the current vote. This is determined by
* Returns whether a client is in the pool of clients allowed
* to participate in the current vote. This is determined by
* the client list passed to NativeVotes_Display().
*
* @param client Client index.
@@ -509,16 +509,16 @@ native bool:NativeVotes_IsClientInVotePool(client);
*
* @param client Client index.
* @param revotes True to allow revotes, false otherwise.
* @return True on success, false if the client is in the vote pool
* @return True on success, false if the client is in the vote pool
* but cannot vote again.
* @error No vote in progress, client is not in the voting pool,
* @error No vote in progress, client is not in the voting pool,
* or client index is invalid.
*/
native bool:NativeVotes_RedrawClientVote(client, bool:revotes=true);
/**
* Retrieve the vote type
*
*
* @param vote NativeVotes Handle.
* @return The built in vote type
* @error Invalid Handle
@@ -527,9 +527,9 @@ native NativeVotesType:NativeVotes_GetType(Handle:vote);
/**
* Set the team this vote is for, or NATIVEVOTES_ALL_TEAMS for all teams.
*
*
* Defaults to NATIVEVOTES_ALL_TEAMS if not explicitly set.
*
*
* @param vote NativeVotes Handle.
* @param team Team number this vote is for
* @noreturn
@@ -539,7 +539,7 @@ native NativeVotes_SetTeam(Handle:vote, team);
/**
* Retrieve the team this vote is for
*
*
* @param vote NativeVotes Handle.
* @return Team index or NATIVEVOTES_ALL_TEAMS for all teams.
* @error Invalid Handle
@@ -549,9 +549,9 @@ native NativeVotes_GetTeam(Handle:vote);
/**
* Set the client index of the player who initiated the vote.
* Use NATIVEVOTES_SERVER_INDEX if initiated by the server itself.
*
*
* Defaults to NATIVEVOTES_SERVER_INDEX if not explicitly set.
*
*
* @param vote NativeVotes Handle.
* @param client Client who initiated the vote or NATIVEVOTES_SERVER_INDEX
* @noreturn
@@ -560,9 +560,9 @@ native NativeVotes_GetTeam(Handle:vote);
native NativeVotes_SetInitiator(Handle:vote, client);
/**
* Retrieve the client index of the player who initiated the vote or NATIVEVOTES_SERVER_INDEX if
* Retrieve the client index of the player who initiated the vote or NATIVEVOTES_SERVER_INDEX if
* initiated by the server itself.
*
*
* @param Vote handle
* @return Client index or NATIVEVOTES_SERVER_INDEX
* @error Invalid Handle
@@ -570,8 +570,8 @@ native NativeVotes_SetInitiator(Handle:vote, client);
native NativeVotes_GetInitiator(Handle:vote);
/**
* Broadcasts a vote to a list of clients. The most selected item will be
* returned through MenuAction_VoteEnd. On a tie, a random item will be returned
* Broadcasts a vote to a list of clients. The most selected item will be
* returned through MenuAction_VoteEnd. On a tie, a random item will be returned
* from a list of the tied items.
*
* Note that MenuAction_VoteStart, MenuAction_VoteCancel, MenuAction_VoteEnd, and MenuAction_End are all
@@ -599,7 +599,7 @@ stock bool:NativeVotes_DisplayToAll(Handle:vote, time)
{
new total = 0;
decl players[MaxClients];
for (new i=1; i<=MaxClients; i++)
{
if (!IsClientInGame(i) || IsFakeClient(i))
@@ -608,7 +608,7 @@ stock bool:NativeVotes_DisplayToAll(Handle:vote, time)
}
players[total++] = i;
}
return NativeVotes_Display(vote, players, total, time);
}
@@ -628,7 +628,7 @@ stock bool:NativeVotes_DisplayToTeam(Handle:vote, team, time)
new total;
decl players[MaxClients];
for (new i=1; i<=MaxClients; i++)
{
if (!IsClientInGame(i) || IsFakeClient(i) || (GetClientTeam(i) != team))
@@ -637,7 +637,7 @@ stock bool:NativeVotes_DisplayToTeam(Handle:vote, team, time)
}
players[total++] = i;
}
return NativeVotes_Display(vote, players, total, time);
}
@@ -654,7 +654,7 @@ stock bool:NativeVotes_DisplayToAllNonSpectators(Handle:vote, time)
{
new total;
decl players[MaxClients];
for (new i=1; i<=MaxClients; i++)
{
if (!IsClientInGame(i) || IsFakeClient(i) || (GetClientTeam(i) < 2))
@@ -663,7 +663,7 @@ stock bool:NativeVotes_DisplayToAllNonSpectators(Handle:vote, time)
}
players[total++] = i;
}
return NativeVotes_Display(vote, players, total, time);
}
@@ -673,7 +673,7 @@ stock bool:NativeVotes_DisplayToAllNonSpectators(Handle:vote, time)
* You MUST call one of the NativeVotesDisplayPass* or NativeVotes_DisplayFail functions
* to hide the vote screen for users who didn't vote, and to clear out their selection
* for the next vote.
*
*
* @param vote Vote handle
* @param details Normally the item that won the vote or format string. Also used for custom vote winners
* @param ... Variable number of format parameters.
@@ -687,7 +687,7 @@ native NativeVotes_DisplayPass(Handle:vote, const String:details[]="");
* You MUST call one of the NativeVotesDisplayPass* or NativeVotes_DisplayFail functions
* to hide the vote screen for users who didn't vote, and to clear out their selection
* for the next vote.
*
*
* @param vote Vote handle
* @param client client to display to
* @param format A format string.
@@ -702,7 +702,7 @@ native NativeVotes_DisplayPassCustomToOne(Handle:vote, client, const String:form
* You MUST call one of the NativeVotesDisplayPass* or NativeVotes_DisplayFail functions
* to hide the vote screen for users who didn't vote, and to clear out their selection
* for the next vote.
*
*
* @param vote Vote handle
* @param format A format string.
* @param any Variable number of format parameters
@@ -711,7 +711,7 @@ native NativeVotes_DisplayPassCustomToOne(Handle:vote, client, const String:form
stock NativeVotes_DisplayPassCustom(Handle:vote, const String:format[], any:...)
{
decl String:buffer[192];
for (new i = 1; i <= MaxClients; ++i)
{
if (IsClientInGame(i))
@@ -731,7 +731,7 @@ stock NativeVotes_DisplayPassCustom(Handle:vote, const String:format[], any:...)
* You MUST call one of NativeVotes_DisplayPass, NativeVotes_DisplayPassEx,
* or NativeVotes_DisplayFail to hide the vote screen for users who didn't vote
* and to clear out their selection for the next vote.
*
*
* #param vote Vote handle
* @param passType The pass screen to display
* @param details Normally the item that won the vote. Also used for custom vote winners
@@ -745,17 +745,17 @@ native NativeVotes_DisplayPassEx(Handle:vote, NativeVotesPassType:passType, cons
* You MUST call one of NativeVotes_DisplayPass, NativeVotes_DisplayPassEx,
* or NativeVotes_DisplayFail to hide the vote screen for users who didn't vote,
* and to clear out their selection for the next vote.
*
*
* @param reason Vote failure reason from NativeVotesFailType enum
* @noreturn
*/
native NativeVotes_DisplayFail(Handle:vote, NativeVotesFailType:reason=NativeVotesFail_Generic);
/**
* Quick stock to determine whether voting is allowed. This doesn't let you
* fine-tune a reason for not voting, so it's not recommended for lazily
* Quick stock to determine whether voting is allowed. This doesn't let you
* fine-tune a reason for not voting, so it's not recommended for lazily
* telling clients that voting isn't allowed.
*
*
* @return True if voting is allowed, false if voting is in progress
* or the cooldown is active.
*/
@@ -765,15 +765,15 @@ stock bool:NativeVotes_IsNewVoteAllowed()
{
return false;
}
return true;
}
/**
* Used when callvote is called with no arguments.
*
*
* This is used to configure the VoteSetup usermessage on TF2 and CS:GO
*
*
* @param client Client, in case the votes are restricted by client
* @param voteTypes Populate this array with the vote types this server supports
* Custom and multiple choice votes are not supported from
@@ -787,9 +787,9 @@ stock bool:NativeVotes_IsNewVoteAllowed()
/**
* Forward for "callvote" handling
*
*
* You should respond to this by starting a vote or by calling NativeVotes_DisplayCallVoteFail
*
*
* @param client Client
* @param voteType Type of vote being called. This will NEVER be a multiple-choice or custom vote.
* @param voteArgument Vote argument or blank if the vote type has no argument.
@@ -803,7 +803,7 @@ stock bool:NativeVotes_IsNewVoteAllowed()
/**
* Register a plugin as a vote manager.
* This is used to abstract away the details of the callvote command.
*
*
* @param callHandler Handler for callvote commands.
* @param setupHandler Handler to override the which vote types your server supports. Only useful on TF2 and CS:GO.
* @noreturn
@@ -814,7 +814,7 @@ stock bool:NativeVotes_IsNewVoteAllowed()
* Send a call vote fail screen to a user
* Used to respond to a callvote with invalid arguments or for other reasons
* (such as trying to target an admin for a kick/ban vote)
*
*
* @param client The client to display the fail screen to
* @param reason A vote call fail reason
* @param time For NativeVotesCallFail_Recent, the number of seconds until the vote
@@ -825,7 +825,7 @@ native NativeVotes_DisplayCallVoteFail(client, NativeVotesCallFailType:reason, t
/**
* Redraws the vote title from inside a MenuAction_Display callback
* Not supported on L4D
*
*
* @param text Vote title to draw
* @error If called from outside MenuAction_Display
* @return Plugin_Changed if the change is allowed, Plugin_Continue if it isn't.
@@ -835,7 +835,7 @@ native Action:NativeVotes_RedrawVoteTitle(const String:text[]);
/**
* Redraws the vote text from inside a MenuAction_DisplayItem callback.
* Only supported on multiple-choice votes
*
*
* @param text Vote text to draw.
* @error If called from outside MenuAction_DisplayItem
* @return Plugin_Changed if the change is allowed, Plugin_Continue if it isn't.
@@ -859,7 +859,7 @@ stock NativeVotes_GetInfo(param2, &winningVotes, &totalVotes)
/**
* Do not edit below this line!
*/
public SharedPlugin:__pl_nativevotes =
public SharedPlugin:__pl_nativevotes =
{
name = "nativevotes",
file = "nativevotes.smx",