Post by Gaspatcho on Dec 4, 2021 19:34:37 GMT
Note: Hardcoded. Needs someone who understands shit to make it work for his need. I think you might need to edit the main game modes plugin.
Another note: You might want to delete the mode data which you don't have. You may need to remove your countdown plugin.
Another one extra last note: The plugin sets the server to infection mode automatically and selects a random mod every x rounds. to edit the random modes bool look for
Another note: You might want to delete the mode data which you don't have. You may need to remove your countdown plugin.
Another one extra last note: The plugin sets the server to infection mode automatically and selects a random mod every x rounds. to edit the random modes bool look for
switch(iRandom)
{
case 0: gSelectedMode = gMode_Armageddon
case 1: gSelectedMode = gMode_Predator
case 2: gSelectedMode = gMode_Tag
case 3: gSelectedMode = gMode_Canni
case 4: gSelectedMode = gMode_SvA
}
Ex: I wanna replace the random predators with another mode. Let's say nemesis, edit the gMode_Predator to the gMode_Nemesis. and done. // all codes are stored in plugin_cfg()
The plugin:/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#include <zp50_gamemodes>
#include <colorchat>
//#include <zp50_extra_log>
#define PLUGIN "GameMode Votes"
#define VERSION "2.0"
#define AUTHOR "Lord. Death."
#define TASK_ID 100
#define MODE_TASK 200
new gMode_Tag, gMode_Hunt, gMode_Swarm, gMode_Nemesis, gMode_Survivor, gMode_Sniper, gMode_Armageddon, gMode_Canni;
new gMode_Predator, gMode_Dragon, gMode_Nightcrawler, gMode_Plague, gMode_Knifer, gMode_SvA, g_NormalID, g_MultiID;
new gVoteText[124], AdminName[32], ModeName[64], SelectedName[32], gParticipateText[128], gSelectedMode
new gVoteIn[33], gVoteOut[33], gAlreadyVoted[33], iParticipating[33], iTotalParticipations, SelectedPlayer
new gVoteYes[64], gVoteNo[64]
new gYesCount, gNoCount, gVoteOnGoing, gSpecialRound, gNextRoundShouldBe, OldMode, iRandom, iPlayers
new vMenu
new iCount = 10
new Trie:g_tAuthIdBlackList // g means global; t means trie
new AuthID[ 35 ]
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
g_tAuthIdBlackList = TrieCreate( ) // Create the trie...
register_clcmd("say /mw", "Pre_AdminSelectMode")
register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0")
}
public plugin_cfg()
{
gMode_Tag = zp_gamemodes_get_id("Zombie Tag Mode")
gMode_Hunt = zp_gamemodes_get_id("The Hunting Mode")
gMode_Nemesis = zp_gamemodes_get_id("Nemesis Mode")
gMode_Sniper = zp_gamemodes_get_id("Sniper Mode")
gMode_Survivor = zp_gamemodes_get_id("Survivor Mode")
gMode_Armageddon = zp_gamemodes_get_id("Armageddon Mode")
gMode_Predator = zp_gamemodes_get_id("Predators Mode")
gMode_Dragon = zp_gamemodes_get_id("Dragon Mode")
gMode_Nightcrawler = zp_gamemodes_get_id("Nightcrawler Mode")
gMode_Swarm = zp_gamemodes_get_id("Swarm Mode")
gMode_Plague = zp_gamemodes_get_id("Plague Mode")
gMode_Knifer = zp_gamemodes_get_id("Knifer Mode")
gMode_Canni = zp_gamemodes_get_id("Cannibals Mode")
gMode_SvA = zp_gamemodes_get_id("Winos Mode")
g_MultiID = zp_gamemodes_get_id("Multiple Infection Mode")
g_NormalID = zp_gamemodes_get_id("Infection Mode")
}
public FormatText(id)
{
get_user_name(id, AdminName, charsmax(AdminName))
zp_gamemodes_get_name(gSelectedMode, ModeName, charsmax(ModeName))
format(gVoteText, charsmax(gVoteText), "\wAdmin \y%s \whas started a vote for \y%s\w^n^n", AdminName, ModeName)
}
public FormatVote(id)
{
if(gVoteIn[id] == 0 && gVoteOut[id] == 0)
{
format(gVoteYes, charsmax(gVoteYes), "Yes \y[%d]^n", gYesCount)
format(gVoteNo, charsmax(gVoteNo), "No \y[%d]^n", gNoCount)
}
if(gVoteIn[id] == 1)
{
format(gVoteYes, charsmax(gVoteYes), "Yes \y[%d] \r(Selected)^n", gYesCount)
format(gVoteNo, charsmax(gVoteNo), "No \y[%d]^n", gNoCount)
}
if(gVoteOut[id] == 1)
{
format(gVoteYes, charsmax(gVoteYes), "Yes \y[%d]^n", gYesCount)
format(gVoteNo, charsmax(gVoteNo), "No \y[%d] \r(Selected)^n", gNoCount)
}
if( !TrieKeyExists( g_tAuthIdBlackList, AuthID ) )
{
if(iParticipating[id] == 0)
format(gParticipateText, charsmax(gParticipateText), "Play as the \r%s Special \y[NO]\r^n^n\rCurrentlly \y%d Players \rparticipating^n", ModeName, iTotalParticipations)
else
format(gParticipateText, charsmax(gParticipateText), "Play as the \y%s Special \r[YES]\r^n^n\rCurrentlly \y%d Players \rparticipating^n", ModeName, iTotalParticipations)
}
else
format(gParticipateText, charsmax(gParticipateText), "\dPlay as the %s Special \y[NEXT MAP]\r^n^n\rCurrentlly \y%d Players \rparticipating^n", ModeName, iTotalParticipations)
}
public Pre_AdminSelectMode(id)
{
zp_gamemodes_get_name(gSelectedMode, ModeName, charsmax(ModeName))
new get_cm = zp_gamemodes_get_current()
if(get_user_flags(id) & ADMIN_KICK)
{
if(gSpecialRound == 0)
{
if(gVoteOnGoing == 0)
{
if(get_cm == g_MultiID || get_cm == g_NormalID)
{
AdminSelectMode(id)
}
else ColorChat(id, GREEN, "[DS VOTE]^03 You can only vote for a special round during an infecton round")
}
else ColorChat(id, GREEN, "[DS VOTE]^03 Please wait till the current vote ends")
}
else ColorChat(id, GREEN,"[DS VOTE]^03 Next round is voted to be %s. please try again later", ModeName)
}
else ColorChat(id, GREEN, "[DS VOTE]^03 Special Round Votes can be only started by admins and above")
}
public AdminSelectMode(id)
{
new Menu = menu_create("Select a mode", "SelectedMode")
menu_additem(Menu, "Survivor Mode", "", 0)
menu_additem(Menu, "Sniper Mode", "", 0)
menu_additem(Menu, "Knifer Mode", "", 0)
menu_additem(Menu, "Nemesis Mode", "", 0)
menu_additem(Menu, "NightCrawler Mode", "", 0)
menu_additem(Menu, "Dragon Mode", "", 0)
menu_additem(Menu, "Predators Mode", "", 0)
menu_additem(Menu, "Swarm Mode", "", 0)
menu_additem(Menu, "Plague Mode", "", 0)
menu_additem(Menu, "Armageddon Mode", "", 0)
menu_additem(Menu, "Zombie Tag", "", 0)
menu_additem(Menu, "The Hunting Mode", "", 0)
menu_additem(Menu, "Cannibals Mode", "", 0)
menu_additem(Menu, "Winos Mode", "", 0)
menu_setprop( Menu, MPROP_EXIT, MEXIT_ALL );
menu_display( id, Menu, 0 );
}
public SelectedMode(id, menu, item)
{
switch( item )
{
case 0:
{
gSelectedMode = gMode_Survivor
FormatPreText(id)
}
case 1:
{
gSelectedMode = gMode_Sniper
FormatPreText(id)
}
case 2:
{
gSelectedMode = gMode_Knifer
FormatPreText(id)
}
case 3:
{
gSelectedMode = gMode_Nemesis
FormatPreText(id)
}
case 4:
{
gSelectedMode = gMode_Nightcrawler
FormatPreText(id)
}
case 5:
{
gSelectedMode = gMode_Dragon
FormatPreText(id)
}
case 6:
{
gSelectedMode = gMode_Predator
FormatPreText(id)
}
case 7:
{
gSelectedMode = gMode_Swarm
FormatPreText(id)
}
case 8:
{
gSelectedMode = gMode_Plague
FormatPreText(id)
}
case 9:
{
gSelectedMode = gMode_Armageddon
FormatPreText(id)
}
case 10:
{
gSelectedMode = gMode_Tag
FormatPreText(id)
}
case 11:
{
gSelectedMode = gMode_Hunt
FormatPreText(id)
}
case 12:
{
gSelectedMode = gMode_Canni
FormatPreText(id)
}
case 13:
{
gSelectedMode = gMode_SvA
FormatPreText(id)
}
}
}
public FormatPreText(id)
{
gVoteOnGoing = 1
FormatText(id) //Let's format the vote text
new iPlayer
for (iPlayer = 1; iPlayer <= 32; iPlayer++)
{
if(is_user_connected(iPlayer))
{
gVoteIn[iPlayer] = 0
gVoteOut[iPlayer] = 0
gAlreadyVoted[iPlayer] = 0
iParticipating[iPlayer] = 0
VoteMenu(iPlayer)
}
}
set_task(15.0,"EndVote", TASK_ID)
}
public VoteMenu(id)
{
FormatVote(id) //Let's format the vote options
vMenu = menu_create(gVoteText, "VoteHandler")
menu_additem(vMenu, gVoteYes, "", 0)
menu_additem(vMenu, gVoteNo, "", 0)
if(gSelectedMode == gMode_Sniper || gSelectedMode == gMode_Nemesis || gSelectedMode == gMode_Dragon || gSelectedMode == gMode_Nightcrawler || gSelectedMode == gMode_Predator || gSelectedMode == gMode_Survivor || gSelectedMode == gMode_SvA)
menu_additem(vMenu, gParticipateText, "", 0)
menu_additem(vMenu, "Refresh", "",0)
menu_setprop( vMenu, MPROP_EXIT, MEXIT_ALL );
if(gVoteOnGoing == 1)
menu_display( id, vMenu, 0 );
}
public EndVote()
{
menu_destroy(vMenu)
if(gYesCount > gNoCount)
{
ColorChat(0, GREEN, "[DS VOTE]^03 Vote success with ^04%d^03 votes for ^04yes", gYesCount)
ColorChat(0, GREEN, "[DS VOTE]^03 Next round is ^04%s", ModeName)
gSpecialRound = 1
gNextRoundShouldBe = 0
}
else
{
ColorChat(0, GREEN, "[DS VOTE]^03 Vote failed with ^04%d^03 votes for ^04no", gNoCount)
gSpecialRound = 0
}
//
//
//
gYesCount = 0
gNoCount = 0
gVoteOnGoing = 0
iTotalParticipations = 0
}
public zp_fw_gamemodes_end()
{
if(gVoteOnGoing == 1)
{
EndVote()
remove_task(TASK_ID)
}
gVoteOnGoing = 0
}
public VoteHandler(id, menu, item)
{
switch(item)
{
case 0:
{
if(gVoteOnGoing == 1)
{
if(gAlreadyVoted[id] == 0)
{
gYesCount++
gVoteIn[id] = 1
gAlreadyVoted[id] = 1
if(gVoteOnGoing == 1)
VoteMenu(id)
}
else
{
if(gVoteOut[id] == 1)
{
gYesCount++
gNoCount--
gVoteOut[id] = 0
gVoteIn[id] = 1
}
if(gVoteOnGoing == 1)
VoteMenu(id)
}
}
}
case 1:
{
if(gVoteOnGoing == 1)
{
if(gAlreadyVoted[id] == 0)
{
gNoCount++
gVoteOut[id] = 1
gAlreadyVoted[id] = 1
if(gVoteOnGoing == 1)
VoteMenu(id)
}
else
{
if(gVoteIn[id] == 1)
{
gYesCount--
gNoCount++
gVoteOut[id] = 1
gVoteIn[id] = 0
}
if(gVoteOnGoing == 1)
VoteMenu(id)
}
}
}
case 2:
{
get_user_authid(id, AuthID, charsmax(AuthID))
if( !TrieKeyExists( g_tAuthIdBlackList, AuthID ) )
{
if(iParticipating[id] == 0)
{
iParticipating[id] = 1
ColorChat(id, GREEN, "[DS]^3 You are now participating as a ^4special")
iTotalParticipations++
}
else
{
iParticipating[id] = 0
ColorChat(id, GREEN, "[DS]^3 You are no longer participating as a ^4special")
iTotalParticipations--
}
}
else
ColorChat(id, GREEN, "[DS]^3 You've been selected as a ^4special^3 once. Try again later")
if(gVoteOnGoing == 1)
VoteMenu(id)
}
case 3:
if(gVoteOnGoing == 1)
VoteMenu(id)
}
}
public StartMode()
{
if(SelectedPlayer != 0)
{
if(is_user_alive(SelectedPlayer))
{
get_user_name(SelectedPlayer, SelectedName, charsmax(SelectedName))
get_user_authid(SelectedPlayer, AuthID, charsmax(AuthID))
zp_gamemodes_start(gSelectedMode, SelectedPlayer)
TrieSetCell( g_tAuthIdBlackList, AuthID, 1 )
ColorChat(0, GREEN, "[DS]^3 Player: ^4%s^3 is selected as a ^4special!", SelectedName)
}
}
else
zp_gamemodes_start(gSelectedMode)
gSpecialRound = 0
gSelectedMode = 0
gVoteOnGoing = 0
SelectedPlayer = 0
ColorChat(0, GREEN, "[DS - Debug]^3 Mode Stats Reseted")
}
public CountDown()
{
if(iCount > 0)
{
iCount--
zp_gamemodes_get_name(gSelectedMode, ModeName, charsmax(ModeName))
set_hudmessage(255, 0, 0, -1.0, 0.2, 0, 1.0, 0.5, 0.2, 0.8, -1)
show_hudmessage(0, "=| %s starts in %d |=", ModeName, iCount)
set_task(1.0,"CountDown")
}
else
iCount = 10;
}
public SelectParticipator()
{
if(gSelectedMode == gMode_Sniper || gSelectedMode == gMode_Nemesis || gSelectedMode == gMode_Dragon || gSelectedMode == gMode_Nightcrawler || gSelectedMode == gMode_Predator || gSelectedMode == gMode_Survivor || g_SelectedMode == gMode_SvA)
{
iPlayers = 0
SelectedPlayer = random_num(1,GetPCount())
if(!is_user_connected(SelectedPlayer))
SelectParticipator()
if(iParticipating[SelectedPlayer] != 1)
SelectParticipator()
ColorChat(SelectedPlayer, GREEN, "[DS]^3 You've been selected as the special for this round! preare yourself")
}
}
public Event_NewRound()
{
CountDown()
if(gSpecialRound == 1)
{
zp_gamemodes_get_name(gSelectedMode, ModeName, charsmax(ModeName))
ColorChat(0, GREEN, "[Mode Manager]^03 Starting ^04[%s]^03 Voted by ^04%s^03 in 10 Seconds", ModeName, AdminName)
SelectParticipator()
set_task(10.5, "StartMode", MODE_TASK)
}
else
{
if(gNextRoundShouldBe >= 4)
{
iRandom = random(4)
if(iRandom == OldMode)
iRandom = random(4)
else
{
switch(iRandom)
{
case 0: gSelectedMode = gMode_Armageddon
case 1: gSelectedMode = gMode_Predator
case 2: gSelectedMode = gMode_Tag
case 3: gSelectedMode = gMode_Canni
case 4: gSelectedMode = gMode_SvA
}
zp_gamemodes_get_name(gSelectedMode, ModeName, charsmax(ModeName))
ColorChat(0, GREEN, "[Mode Manager]^03 Starting ^04[%s]^03 in 10 Seconds ^04[Random Mode]^03", ModeName)
set_task(10.5, "StartMode", MODE_TASK)
gNextRoundShouldBe = 0
OldMode = iRandom
}
}
else
{
gNextRoundShouldBe++
new gMinusNextRound = 4 - gNextRoundShouldBe
zp_gamemodes_get_name(gSelectedMode, ModeName, charsmax(ModeName))
ColorChat(0, GREEN, "[Mode Manager]^03 Starting ^04[%s]^03 in 10 Seconds because no votes were done", ModeName)
ColorChat(0, GREEN, "^03[Mode Manager]^04[%d Rounds Left]^03 for a random mode", gMinusNextRound)
set_task(10.5, "StartMode", MODE_TASK)
}
}
}
GetPCount()
{
for (new id; id <= get_maxplayers(); id++)
{
if(is_user_connected(id))
iPlayers++
}
return iPlayers;
}