Post by ShaunCraft15 on Mar 27, 2023 11:36:54 GMT
NOTE:
- This plugin is a modified version From This Link By Lord Death. (Gaspatcho): Original Thread
- Sorry For My Bad English
DESCRIPTION:
This Plugin Manage Your Gamemodes With Admin Vote Like Pro Servers (GamerClub & More)
SETTINGS:
CREDITS:
Lord Death. (Gaspatcho in zppv): For The Original One
Thanks To This Link For Helping me how i can put a countdown in a menu: Here The Link
UPDATE INFO:
THE PLUGIN CODE:
At this time no issues found
Note: The Code Was Updated To 1.0.1
- This plugin is a modified version From This Link By Lord Death. (Gaspatcho): Original Thread
- Sorry For My Bad English
DESCRIPTION:
This Plugin Manage Your Gamemodes With Admin Vote Like Pro Servers (GamerClub & More)
SETTINGS:
const Float:STARTMODE = 10.0 // Delay To Start The Mode
const Float:ENDVOTE = 15.0 // Delay To End Vote
const RANDOM_MODE_PLAYERS_MIN = 13 // Minimum Players To Enable Random Modes After Some Rounds
const ROUND_LEFT = 4 // Round Left For a Random Gamemode
CREDITS:
Lord Death. (Gaspatcho in zppv): For The Original One
Thanks To This Link For Helping me how i can put a countdown in a menu: Here The Link
UPDATE INFO:
[ZP50] Addon: Gamemode Manager
- Plugin Information:
* This Plugin aims to manage the zp gamemodes with admin vote like pro servers
- Credits:
Gaspatcho (Lord Death.): For The First Plugin
- Support Me on YouTube:
* Links:
Youtube: https://www.youtube.com/channel/UCWVhiguRxt4tyacImGjiqQw
Discord: ShaunCraft15#2498
Instagram: N/A
* Useful Links To Do The Plugin:
https://forums.alliedmods.net/showthread.php?t=146222
- Releases:
V1.0:
* First Release
* Fix The Original Plugin Bugs And Add Countdown Sound
* Added Countdown In Menu
* Random Mods Can't Start After Connecting a Number Of Players "Edit RANDOM_MODE_PLAYERS_NUM"
* Added Pcvar Check
Sorry For bad english!!!
Enjoy With This Plugin :)
THE PLUGIN CODE:
/*-----------------------------------------------------------------------------------------------------
[ZP50] Addon: Gamemode Manager
- Plugin Information:
* This Plugin aims to manage the zp gamemodes with admin vote like pro servers
- Credits:
Gaspatcho (Lord Death.): For The First Plugin
- Support Me on YouTube:
* Link: https://www.youtube.com/channel/UCWVhiguRxt4tyacImGjiqQw
- Releases:
V1.0 (3/26/2023):
* First Release
* Fix The Original Plugin Bugs And Add Countdown Sound
* Added Countdown In Menu
* Random Mods Can't Start After Connecting a Number Of Players "Edit RANDOM_MODE_PLAYERS_NUM"
* Added Pcvar Check
V1.0.1 (Patch) (3/28/2023):
* Fixed "RANDOM_MODE_PLAYERS_MIN" doesn't work correctly
Sorry For bad english!!!
Enjoy With This Plugin :)
------------------------------------------------------------------------------------------------------*/
/*-------------------------------------------------{ Includes }-----------------------------------------------------*/
#include <amxmodx>
#include <cs_teams_api>
#include <fakemeta>
#include <cromchat>
#include <zp50_gamemodes>
/*-------------------------------------------------{ Plugin Settings }-----------------------------------------------------*/
new const PLUGIN_NAME[] = "[ZP50] Gamemode Manager"
new const PLUGIN_VERSION[] = "1.0.1"
new const PLUGIN_AUTHOR[] = "ShaunCraft || Lord Death."
/*-------------------------------------------------{ Constants }-----------------------------------------------------*/
const MAXPLAYERS = 32
/*-------------------------------------------------{ Tasks }-----------------------------------------------------*/
const TASK_STARTMODE = 100
const TASK_COUNTDOWN = 200
const TASK_ENDVOTING = 300
/*-------------------------------------------------{ Settings }-----------------------------------------------------*/
const Float:STARTMODE = 10.0
const Float:ENDVOTE = 15.0
const RANDOM_MODE_PLAYERS_MIN = 13
const ROUND_LEFT = 4
/*-------------------------------------------------{ Requirements }-----------------------------------------------------*/
new const fTimeVOX[][]=
{
"fvox/one.wav",
"fvox/two.wav",
"fvox/three.wav",
"fvox/four.wav",
"fvox/five.wav",
"fvox/six.wav",
"fvox/seven.wav",
"fvox/eight.wav",
"fvox/nine.wav",
"fvox/ten.wav"
}
enum MODS
{
INFECTION,
MULTI,
NEMESIS,
SURVIVOR,
PLAGUE,
SWARM,
ARMAGEDDON
}
new fModes[MODS], fSelectedMode, fVoteStarted, fSpecialRound, fTotalParticipations, fPlayers, fSelectedPlayer, Trie:fBlackLists
new fVoteIn[MAXPLAYERS+1], fVoteOut[MAXPLAYERS+1], fAlreadyVoted[MAXPLAYERS+1], fParticipating[MAXPLAYERS+1]
new fAcceptText[64], fRefuseText[64], Text[64], fParticipationText[128], fAuthID[MAXPLAYERS+1][35], fMenu, fModeName[64], g_fCountText[64]
new fAdminName[MAXPLAYERS], fSelectedName[MAXPLAYERS], fMessage, fYes, fNo, fRound, fTime, fTime_S, fMenuTimer, fPcvarDelay
public plugin_init()
{
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0")
register_event("TextMsg", "Event_RestartRound", "a", "2=#Game_will_restart_in")
fPcvarDelay = get_cvar_pointer("zp_gamemode_delay")
fBlackLists = TrieCreate()
register_clcmd("say /votemode", "AdminVoteMode_Create")
register_clcmd("say_team /votemode", "AdminVoteMode_Create")
CC_SetPrefix("!n[!gZP!n]")
}
public plugin_precache()
{
new fIndex
for(fIndex = 0; fIndex < sizeof fTimeVOX; fIndex++)
engfunc(EngFunc_PrecacheSound, fTimeVOX[fIndex]);
}
public plugin_cfg()
{
// Default Gamemodes
fModes[INFECTION] = zp_gamemodes_get_id("Infection Mode")
fModes[MULTI] = zp_gamemodes_get_id("Multiple Infection Mode")
// Random & Special Mods
fModes[NEMESIS] = zp_gamemodes_get_id("Nemesis Mode")
fModes[SURVIVOR] = zp_gamemodes_get_id("Survivor Mode")
fModes[PLAGUE] = zp_gamemodes_get_id("Plague Mode")
fModes[SWARM] = zp_gamemodes_get_id("Swarm Mode")
fModes[ARMAGEDDON] = zp_gamemodes_get_id("Armageddon Mode")
// Pcvar Checking
set_task(2.5, "PcvarTaskCheck", _, _, _, "b")
}
public PcvarTaskCheck()
{
new fTime = floatround(STARTMODE)
if(get_pcvar_num(fPcvarDelay) <= fTime)
{
set_pcvar_num(fPcvarDelay, fTime + 1)
}
}
public AdminVoteMode_Create(this)
{
new fCurrentMode = zp_gamemodes_get_current()
zp_gamemodes_get_name(fSelectedMode, fModeName, charsmax(fModeName))
if(get_user_flags(this) & ADMIN_KICK)
{
if(!fSpecialRound)
{
if(!fVoteStarted)
{
if(fCurrentMode == fModes[INFECTION] || fCurrentMode == fModes[MULTI])
{
CreateVote(this)
}
else CC_SendMessage(this, "You can create a admin vote only in !ginfection !nround")
}
else CC_SendMessage( this, "The vote !ralready !nstarted!!")
}
else CC_SendMessage(this, "The next round voted is !g[%s] !n,please try again later", fModeName)
}
else CC_SendMessage(this, "Only !badmins !ncan vote for a gamemode")
}
public CreateVote(this)
{
new dMenu = menu_create("\r[\wSelect a Mode To Start Vote\r]", "createvote_handler")
menu_additem(dMenu, "Vote \rNemesis \yMode")
menu_additem(dMenu, "Vote \rSurvivor \yMode")
menu_additem(dMenu, "Vote \rPlague \yMode")
menu_additem(dMenu, "Vote \rSwarm \yMode")
menu_additem(dMenu, "Vote \rArmageddon \yMode")
menu_setprop(dMenu, MPROP_EXIT, MEXIT_ALL);
menu_display(this, dMenu)
}
public createvote_handler(this, lMenu, fItem)
{
if(fItem == MENU_EXIT)
{
menu_destroy(lMenu)
return;
}
if(fItem == 0) fSelectedMode = fModes[NEMESIS]; StartVoting(this)
if(fItem == 1) fSelectedMode = fModes[SURVIVOR]; StartVoting(this)
if(fItem == 2) fSelectedMode = fModes[PLAGUE]; StartVoting(this)
if(fItem == 3) fSelectedMode = fModes[SWARM]; StartVoting(this)
if(fItem == 4) fSelectedMode = fModes[ARMAGEDDON]; StartVoting(this)
}
public StartVoting(this)
{
fVoteStarted = true
FormatAdmin(this)
new rgPlayers[MAXPLAYERS], iPlayersCount, pPlayer;
get_players(rgPlayers, iPlayersCount);
for (new i = 0; i < iPlayersCount; i++)
{
pPlayer = rgPlayers[i];
if(!is_user_connected(pPlayer))
return;
fVoteIn[pPlayer] = false
fVoteOut[pPlayer] = false
fAlreadyVoted[pPlayer] = false
fParticipating[pPlayer] = false
StartVote(pPlayer)
}
set_task(ENDVOTE, "Task_EndVote", TASK_ENDVOTING)
}
public Task_EndVote()
{
RemoveTasks()
menu_destroy(fMenu)
if(fYes > fNo)
{
CC_SendMessage(0, "Vote !gsuccess !nwith !g%d!n votes for !gYes", fYes)
CC_SendMessage(0, "Next round is !g%s", fModeName)
fSpecialRound = true
fRound = 0
}
else
{
CC_SendMessage(0, "Vote !rfailed !nwith !r%d!n votes for !rNo", fNo)
fSpecialRound = false
}
fYes = 0
fNo = 0
fVoteStarted = false
fTotalParticipations = 0
}
public FormatAdmin(this)
{
get_user_name(this, fAdminName, charsmax(fAdminName))
zp_gamemodes_get_name(fSelectedMode, fModeName, charsmax(fModeName))
formatex(Text, charsmax(Text), "\r[\rAdmin \y%s \whas started vote of \y%s\r]", fAdminName, fModeName)
}
public VoteFormat_Pre(this)
{
if(!fVoteIn[this] && !fVoteOut[this])
{
format(fAcceptText, charsmax(fAcceptText), "\r[\wAccept\r] \y[%d]", fYes)
format(fRefuseText, charsmax(fRefuseText), "\r[\wRefuse\r] \y[%d]^n^n", fNo)
}
if(fVoteIn[this])
{
format(fAcceptText, charsmax(fAcceptText), "\r[\wAccept\r] \y[%d] \r(Selected)", fYes)
format(fRefuseText, charsmax(fRefuseText), "\r[\wRefuse\r] \y[%d]^n", fNo)
}
if(fVoteOut[this])
{
format(fAcceptText, charsmax(fAcceptText), "\r[\wAccept\r] \y[%d]", fYes)
format(fRefuseText, charsmax(fRefuseText), "\r[\wRefuse\r] \y[%d] \r(Selected)^n", fNo)
}
if( !TrieKeyExists( fBlackLists, fAuthID[this] ) )
{
if(!fParticipating[this])
format(fParticipationText, charsmax(fParticipationText), "Play as the \r%s Special \y[NO]\r^n^n\rCurrentlly \y%d Players \rparticipating^n^n", fModeName, fTotalParticipations)
else
format(fParticipationText, charsmax(fParticipationText), "Play as the \y%s Special \r[YES]\r^n^n\rCurrentlly \y%d Players \rparticipating^n^n", fModeName, fTotalParticipations)
}
else
format(fParticipationText, charsmax(fParticipationText), "\dPlay as the %s Special \y[NEXT MAP]\r^n^n\rCurrentlly \y%d Players \rparticipating^n^n", fModeName, fTotalParticipations)
}
public StartVote(this)
{
VoteFormat_Pre(this)
fMenu = menu_create(Text, "startvote_handler")
menu_additem(fMenu, fAcceptText, "", 0)
menu_additem(fMenu, fRefuseText, "", 0)
if(!task_exists(TASK_ENDVOTING))
{
fMenuTimer = floatround(ENDVOTE);
set_task(1.0, "TaskMenuCountDown", TASK_ENDVOTING, _, _, "b")
}
if(fSelectedMode == fModes[NEMESIS] || fSelectedMode == fModes[SURVIVOR])
menu_additem(fMenu, fParticipationText, "", 0)
formatex(g_fCountText, charsmax(g_fCountText), "\rThe Vote Will End In: \y%d", fMenuTimer);
menu_addtext(fMenu, g_fCountText)
if(fVoteStarted)
menu_display(this, fMenu)
}
public TaskMenuCountDown()
{
fMenuTimer--
new fPlayers[MAXPLAYERS], fNum, pPlayer;
get_players(fPlayers, fNum)
for(new i = 0; i < fNum; i++)
{
pPlayer = fPlayers[i];
StartVote(pPlayer);
}
if(fMenuTimer <= 0)
{
fMenuTimer = 0;
for(new i = 0; i < fNum; i++)
{
pPlayer = fPlayers[i];
menu_cancel(pPlayer);
}
}
}
public startvote_handler(this, dMenu, fItem)
{
if(!fVoteStarted)
return;
if(fItem == 0)
{
if(!fAlreadyVoted[this])
{
fYes++
fVoteIn[this] = true
fAlreadyVoted[this] = true
StartVote(this)
}
else
{
if(fVoteOut[this])
{
fYes++
fNo--
fVoteOut[this] = false
fVoteIn[this] = true
}
StartVote(this)
}
}
if(fItem == 1)
{
if(!fAlreadyVoted[this])
{
fNo++
fVoteOut[this] = true
fAlreadyVoted[this] = true
StartVote(this)
}
else
{
if(fVoteIn[this])
{
fYes--
fNo++
fVoteOut[this] = true
fVoteIn[this] = false
StartVote(this)
}
}
}
if(fItem == 2)
{
get_user_authid(this, fAuthID[this], charsmax(fAuthID[]))
if(!TrieKeyExists(fBlackLists, fAuthID[this]))
{
if(!fParticipating[this])
{
fParticipating[this] = true
CC_SendMessage(this, "You are now participating as !gSpecial")
fTotalParticipations++
}
else
{
fParticipating[this] = false
CC_SendMessage(this, "You are no longer participating as !rSpecial")
fTotalParticipations--
}
}
else CC_SendMessage(this, "You've been selected as !gSpecial!n once, Try again later")
StartVote(this)
}
}
public RemoveTasks()
{
if(task_exists(TASK_STARTMODE))
remove_task(TASK_STARTMODE)
if(task_exists(TASK_COUNTDOWN))
remove_task(TASK_COUNTDOWN)
if(task_exists(TASK_ENDVOTING))
remove_task(TASK_ENDVOTING)
}
public Event_RestartRound()
{
fRound = 0
RemoveTasks()
}
public Event_NewRound()
{
fTime = floatround(STARTMODE)
fTime_S = 9
RemoveTasks()
Task_Countdown()
if(fSpecialRound)
{
zp_gamemodes_get_name(fSelectedMode, fModeName, charsmax(fModeName))
CC_SendMessage(0, "Starting !g[%s]!n Voted by !g%s!n in 10 Seconds", fModeName, fAdminName)
ParticipatorSelect()
set_task(STARTMODE - 0.5, "TaskStartMode", TASK_STARTMODE)
}
else
{
if(fRound == ROUND_LEFT - 1)
{
ChooseRandomMode()
zp_gamemodes_get_name(fSelectedMode, fModeName, charsmax(fModeName))
CC_SendMessage(0, "Starting !g[%s] !nin 10 seconds !g[Random Mode]", fModeName)
set_task(STARTMODE - 0.5, "TaskStartMode", TASK_STARTMODE)
}
else
{
ChooseDefaultMode()
zp_gamemodes_get_name(fSelectedMode, fModeName, charsmax(fModeName))
CC_SendMessage(0, "Starting !g[%s] !nin 10 seconds", fModeName)
if(GetPlayingCount(1) >= RANDOM_MODE_PLAYERS_MIN)
{
fRound += 1
new fRoundLeft = ROUND_LEFT - fRound
CC_SendMessage(0, "!r[!g%d !nRound left!r] !nfor a random mode", fRoundLeft)
}
set_task(STARTMODE - 0.5, "TaskStartMode", TASK_STARTMODE)
}
}
}
public ChooseRandomMode()
{
switch(random(4))
{
case 0: fSelectedMode = fModes[NEMESIS]
case 1: fSelectedMode = fModes[SURVIVOR]
case 2: fSelectedMode = fModes[PLAGUE]
case 3: fSelectedMode = fModes[SWARM]
case 4: fSelectedMode = fModes[ARMAGEDDON]
}
}
public ChooseDefaultMode()
{
new fRandom = random(25)
if(fRandom == 14)
fSelectedMode = fModes[MULTI]
else
fSelectedMode = fModes[INFECTION]
}
public TaskStartMode()
{
if(fSelectedPlayer != 0)
{
if(!is_user_alive(fSelectedPlayer))
return;
get_user_name(fSelectedPlayer, fSelectedName, charsmax(fSelectedName))
get_user_authid(fSelectedPlayer, fAuthID[fSelectedPlayer], charsmax(fAuthID[]))
zp_gamemodes_start(fSelectedMode, fSelectedPlayer)
TrieSetCell(fBlackLists, fAuthID[fSelectedPlayer], 1)
CC_SendMessage(0, "Player !g%s!n is the !gSpecial !nfor this round", fSelectedName)
}
else zp_gamemodes_start(fSelectedMode)
fSpecialRound = false
fSelectedMode = 0
fVoteStarted = false
fSelectedPlayer = 0
fMessage = false
}
public ParticipatorSelect()
{
if(fSelectedMode != fModes[NEMESIS] || fSelectedMode != fModes[SURVIVOR])
return;
fPlayers = 0
fSelectedPlayer = random_num(1, GetPlayingCount(0))
if(!is_user_connected(fSelectedPlayer))
ParticipatorSelect()
if(fParticipating[fSelectedPlayer] != 1)
ParticipatorSelect()
if(!fMessage)
{
CC_SendMessage(fSelectedPlayer, "You've been selected as the special for this round! preare yourself")
fMessage = true
}
}
public Task_Countdown()
{
if(fTime >= 1)
{
zp_gamemodes_get_name(fSelectedMode, fModeName, charsmax(fModeName))
set_hudmessage(255, 10, 10, -1.0, 0.2, 0, 1.0, 0.5, 0.2, 0.8, -1)
show_hudmessage(0, "<-- %s Starts in %d -->", fModeName, fTime)
set_task(1.0, "Task_Countdown", TASK_COUNTDOWN)
if(fTime <= 10)
{
PlaySoundToClients(0, fTimeVOX[fTime_S])
fTime_S--
}
fTime--
}
}
// Play Sound (From a ZP50 Gamemode)
PlaySoundToClients(this, const sound[])
{
if (equal(sound[strlen(sound)-4], ".mp3"))
client_cmd(this, "mp3 play ^"sound/%s^"", sound)
else
client_cmd(this, "spk ^"%s^"", sound)
}
// Get Playing Count From zp50_gamemodes
GetPlayingCount(fOption)
{
new this, CsTeams:team, mPlayers;
for (this = 1; this <= get_maxplayers(); this++)
{
if (!is_user_connected(this))
continue;
team = cs_get_user_team(this)
if (team != CS_TEAM_SPECTATOR && team != CS_TEAM_UNASSIGNED)
{
fPlayers++
mPlayers++
}
}
if(!fOption)
return fPlayers;
else
return mPlayers;
return true;
}
At this time no issues found
Note: The Code Was Updated To 1.0.1