Код:
*/
#include <amxmodx>
#include <amxmisc>
#define VOTE_TIME 15
#define CHECK_MENU_TIME 0.5
#define FLAG_AMX_VOTENEXTMAP ADMIN_VOTE
#define MAX_MAPS 500
#define SELECTMAPS 8
#define MAP_HISTORY_MAX 31
// #define MAP_HISTORY 5
#define NOMINATIONS_HELPMSG 12 // a help message telling people they can nominate maps will be displayed
// every 15 * value seconds (ie: 15 * 12 = 3mns)
// if amx_mapchooser_type is set to 1
#define LISTMAPAMOUNT 10
new g_hist_mapName[MAP_HISTORY_MAX][32]
new g_MapHistory = 5
new g_mapName[MAX_MAPS][32]
new g_mapsNum = 0
new g_nominMapName[SELECTMAPS][32]
new g_nominMapsNum = 0
new g_nominated[33]
new g_whoNominMapNum[SELECTMAPS]
new bool:g_hasVoted[33]
new g_mapVoteName[SELECTMAPS][32]
new g_voteCount[SELECTMAPS+3]
new g_mapVoteNum = 0
new g_teamScore[2]
new g_lastMap[32]
new g_maphistFile[128]
new g_coloredMenus
new g_maxplayers
new bool:g_selected = false
new bool:g_call_say_vote = false
new bool:g_vote_finished = false
new bool:g_buyingtime = false
new g_extendCount = 0
new bool:g_extend
new bool:g_forceVote
new g_forceVoteTime
new g_active_players = 0
new bool:g_inprogress = false
new bool:g_hasbeenrocked = false
new bool:g_rockthevote = false
new bool:g_ForceChangeMap = false
new g_rocks = 0
new g_rocked[33]
new g_nominationsHelpMsgIter
new g_mapsOnServerNum
new pv_amx_mapchooser_type
new pv_amx_map_history
new pv_amx_vote_time
new pv_amx_vote_delay
new pv_amx_last_voting
new pv_amx_rtv
new pv_amx_rtv_percent
new pv_amx_rtv_min_time
new pv_amx_rtv_map_time
new menuid_choosenextmap
new const PLUGINNAME[] = "Nextmap Chooser 4"
new const VERSION[] = "3.41hl"
new const AUTHOR[] = "AMX Dev & KWo"
public NEXTMAP_MSG
public NEXTMAP_ROUNDCOUNT
public NEXTMAP_WINCOUNT
public NEXTMAP_TIMECOUNT
public plugin_init()
{
register_plugin(PLUGINNAME,VERSION,AUTHOR)
register_dictionary("mapchooser4.txt")
register_dictionary("common.txt")
if( cstrike_running() )
{
register_event("TeamScore", "team_score", "a")
register_logevent( "eNewRound", 2, "1=Round_Start" )
// register_event("RoundTime", "eNewRound", "bc")
register_event( "SendAudio", "eEndRound", "a", "2=%!MRAD_terwin", "2=%!MRAD_ctwin", "2=%!MRAD_rounddraw" )
// register_logevent( "Log_Event_RoundEnd", 2, "1=Round_End" )
}
pv_amx_mapchooser_type = register_cvar("amx_mapchooser_type","0")
pv_amx_map_history = register_cvar("amx_map_history","5")
register_cvar("amx_mapchooser_mapsloc", "0")
register_cvar("amx_mapchooser_mapsfile", "maps.ini")
register_cvar("amx_mapchooser_mapsfile_s", "maps_small.ini")
register_cvar("amx_nominfromfile","0")
register_cvar("amx_maxnominperplayer","1")
register_cvar("amx_extendmap_max","90")
register_cvar("amx_extendmap_step","15")
register_cvar("amx_ext_round_max","3")
register_cvar("amx_ext_round_step","3")
register_cvar("amx_ext_win_max","3")
register_cvar("amx_ext_win_step","3")
pv_amx_vote_time = register_cvar("amx_vote_time","20")
pv_amx_vote_delay = register_cvar("amx_vote_delay","30")
pv_amx_rtv = register_cvar("amx_rtv","1")
pv_amx_rtv_percent = register_cvar("amx_rtv_percent","0.6")
pv_amx_rtv_min_time = register_cvar("amx_rtv_min_time","5")
pv_amx_rtv_map_time = register_cvar("amx_rtv_map_time","10")
pv_amx_last_voting = get_cvar_pointer("amx_last_voting")
set_cvar_float("amx_last_voting",0.0)
register_concmd("amx_votenextmap","cmdVoteNextMap",FLAG_AMX_VOTENEXTMAP,"<time> : the map will be changed <time> seconds after the end of the vote")
register_clcmd("say","handleSay")
register_clcmd("amx_listmaps","cmdListMaps",0,"- lists maps that can be nominated.")
g_maxplayers = get_maxplayers()
get_localinfo("lastMap",g_lastMap,31)
set_localinfo("lastMap","")
new MenuName[64]
format(MenuName,63,"%L","en","CHOOSE_NEXTM")
menuid_choosenextmap = register_menuid(MenuName)
register_menucmd(menuid_choosenextmap,(-1^(-1<<(SELECTMAPS+2))),"countVote")
g_coloredMenus = colored_menus()
g_buyingtime = false
g_forceVote = false
g_active_players = 0
g_rocks = 0
g_inprogress = false
g_hasbeenrocked = false
g_rockthevote = false
g_ForceChangeMap = false
for(new i = 1; i < 33; ++i)
{
g_rocked[i] = 0
}
g_nominationsHelpMsgIter = 0
getMapsOnServerNum()
}
public plugin_cfg()
{
new filename[128]
new cfgdir[128]
get_configsdir(cfgdir, 127)
format(g_maphistFile, 127, "%s/maphist.ini", cfgdir)
load_history(g_maphistFile)
if (get_cvar_num("amx_mapchooser_mapsloc") == 0)
{
new mapslocfile[32]
get_cvar_string("amx_mapchooser_mapsfile", mapslocfile, 31)
format(filename, 127, "%s/%s", cfgdir, mapslocfile)
if (loadSettings(filename))
{
log_message("[AMXX] - Nextmap Chooser 4: %s succesfully loaded.",mapslocfile)
set_task(15.0, "voteNextmap", 987456, "", 0, "b")
NEXTMAP_MSG = 1
set_task(6.9, "setPublicVars", 64973122)
}
else
{
log_message("[AMXX] - Nextmap Chooser 4: Failed to load %s or no maps inside the file. Trying to load mapcycle." ,mapslocfile)
get_cvar_string("mapcyclefile", filename, 63)
if (loadSettings(filename))
{
log_message("[AMXX] - Nextmap Chooser 4: mapcycle succesfully loaded.")
set_task(15.0, "voteNextmap", 987456, "", 0, "b")
NEXTMAP_MSG = 1
set_task(6.9, "setPublicVars", 64973122)
}
else
{
log_message("[AMXX] - Nextmap Chooser 4: Failed to load mapcycle or no maps inside the file. Trying to load maps folder.")
set_cvar_num("amx_nominfromfile", 0)
if (loadMapsFolder())
{
log_message("[AMXX] - Nextmap Chooser 4: maps folder succesfully loaded.")
set_task(15.0, "voteNextmap", 987456, "", 0, "b")
NEXTMAP_MSG = 1
set_task(6.9, "setPublicVars", 64973122)
}
else
{
log_message("[AMXX] - Nextmap Chooser 4: Failed to load maps folder. No maps loaded.")
}
}
}
}
else if (get_cvar_num("amx_mapchooser_mapsloc") == 1)
{
get_cvar_string("mapcyclefile", filename, 63)
if (loadSettings(filename))
{
log_message("[AMXX] - Nextmap Chooser 4: mapcycle succesfully loaded.")
set_task(15.0, "voteNextmap", 987456, "", 0, "b")
NEXTMAP_MSG = 1
set_task(6.9, "setPublicVars", 64973122)
}
else
{
log_message("[AMXX] - Nextmap Chooser 4: Failed to load mapcycle or no maps inside the file. Trying to load maps folder.")
set_cvar_num("amx_nominfromfile", 0)
if (loadMapsFolder())
{
log_message("[AMXX] - Nextmap Chooser 4: maps folder succesfully loaded.")
set_task(15.0, "voteNextmap", 987456, "", 0, "b")
NEXTMAP_MSG = 1
set_task(6.9, "setPublicVars", 64973122)
}
else
{
log_message("[AMXX] - Nextmap Chooser 4: Failed to load maps folder. No maps loaded.")
}
}
}
else if (get_cvar_num("amx_mapchooser_mapsloc") == 2)
{
set_cvar_num("amx_nominfromfile", 0)
if (loadMapsFolder())
{
log_message("[AMXX] - Nextmap Chooser 4: maps folder succesfully loaded.")
set_task(15.0, "voteNextmap", 987456, "", 0, "b")
NEXTMAP_MSG = 1
set_task(6.9, "setPublicVars", 64973122)
}
else
{
log_message("[AMXX] - Nextmap Chooser 4: Failed to load maps folder. No maps loaded.")
}
}
}
public client_putinserver(id)
{
if (!is_user_bot(id))
{
g_active_players++
g_rocked[id] = 0
}
}
public client_disconnect(id)
{
if(is_user_bot(id))
return PLUGIN_CONTINUE
g_active_players--
if (g_rocked[id])
{
g_rocked[id] = 0
g_rocks--
}
return PLUGIN_CONTINUE
}
public setPublicVars()
{
if (get_pcvar_num(pv_amx_mapchooser_type) == 2)
{
remove_task(987456)
NEXTMAP_MSG = 3
new a, i, randNum = random_num(1,10)
for(i = 0; i < randNum; ++i)
{
a = random_num(0,g_mapsNum-1)
}
set_cvar_string("amx_nextmap", g_mapName[a])
return
}
new timeleft = get_timeleft()
new count = 1
while((timeleft -= 15) > 129) ++count
NEXTMAP_TIMECOUNT = count*15
NEXTMAP_ROUNDCOUNT = get_cvar_num("mp_maxrounds") - 2
NEXTMAP_WINCOUNT = get_cvar_num("mp_winlimit") - 2
}
public check_menu(param[])
{
new iter = param[0]
new Float:vote_time = get_pcvar_float(pv_amx_vote_time) - (iter * CHECK_MENU_TIME)
new menutime = floatround(vote_time, floatround_floor)
if (menutime > 0)
{
new mapsmenu[512], mkeys, pos
mkeys = (1<<SELECTMAPS+1)
pos = 0
for(new i = 0; i < g_mapVoteNum; ++i)
{
pos += format(mapsmenu[pos], 511, "%d. %s^n", i+1, g_mapVoteName[i])
mkeys |= (1<<i)
}
mapsmenu[pos++] = '^n'
pos = 0
new mapname[32]
get_mapname(mapname, 31)
new nextMap[32]
get_cvar_string("amx_nextmap", nextMap, 31)
new players[32], numplayers, player
new menuid, keys
new menu[512]
get_players(players, numplayers, "c")
for(numplayers--; numplayers >= 0; numplayers--)
{
player = players[numplayers]
if (g_hasVoted[player]) continue
get_user_menu(player, menuid, keys)
if (keys == 0 || menuid < 0)
{
menu[0] = '^0'
pos = format(menu,511,g_coloredMenus ? "y%L:w^n^n" : "%L:^n^n", LANG_SERVER, "CHOOSE_NEXTM")
pos += format(menu[pos], 511-pos, "%s", mapsmenu)
if (g_extend)
{
pos += format(menu[pos],511-pos,"%d. %L^n",SELECTMAPS+1,LANG_SERVER,"EXTEND_MAP",mapname)
}
format(menu[pos], 511-pos, "%d. %L", SELECTMAPS+2,LANG_SERVER,"KEEP_CURRENT_NEXTMAP", nextMap)
show_menu(player, mkeys, menu, menutime, "AMX Choose nextmap:")
}
else if(menuid != menuid_choosenextmap)
{
if(menutime <= 6)
{
menu[0] = '^0'
pos = format(menu,511,g_coloredMenus ? "y%L:w^n^n" : "%L:^n^n", LANG_SERVER, "CHOOSE_NEXTM")
pos += format(menu[pos], 511-pos, "%s", mapsmenu)
if( g_extend)
{
pos += format(menu[pos],511-pos,"%d. %L^n",SELECTMAPS+1,LANG_SERVER,"EXTEND_MAP",mapname)
}
format(menu[pos], 511-pos, "%d. %L", SELECTMAPS+2,LANG_SERVER,"KEEP_CURRENT_NEXTMAP", nextMap)
show_menu(player, mkeys, menu, menutime, "AMX Choose nextmap:")
}
}
}
param[0] += 1
set_task(CHECK_MENU_TIME, "check_menu", 1467853, param, 1)
}
}
public checkVotes()
{
remove_task(1467853)
for(new i = 1; i <= g_maxplayers; ++i)
{
g_hasVoted[i] = true
}
new b = 0
new Float:timelimit = get_cvar_float("mp_timelimit")
new maxrounds = get_cvar_num("mp_maxrounds")
new winlimit = get_cvar_num("mp_winlimit")
for(new a = 0; a < g_mapVoteNum; ++a)
{
if (g_voteCount[b] < g_voteCount[a])
{
b = a
}
}
if ( (timelimit > 0) && ( g_voteCount[SELECTMAPS] > g_voteCount[b] )
&& (g_voteCount[SELECTMAPS] > g_voteCount[SELECTMAPS+1])
&& (g_voteCount[SELECTMAPS] > g_voteCount[SELECTMAPS+2]))
{
new mapname1[32]
get_mapname(mapname1,31)
new Float:steptime = get_cvar_float("amx_extendmap_step")
set_cvar_float("mp_timelimit", get_cvar_float("mp_timelimit") + steptime )
client_print(0,print_chat,"%L", LANG_PLAYER, "CHO_FIN_EXT_T", steptime )
log_amx("Vote: Voting for the nextmap finished. Map %s will be extended to next %.0f minutes",
mapname1 , steptime )
++g_extendCount
new timeleft = get_timeleft()
new count = 1
while((timeleft -= 15) > 129) ++count
NEXTMAP_TIMECOUNT = count*15
g_ForceChangeMap = false
g_vote_finished = true
g_inprogress = false
return
}
if ( ( maxrounds > 0 ) && ( g_voteCount[SELECTMAPS] > g_voteCount[b] )
&& (g_voteCount[SELECTMAPS] > g_voteCount[SELECTMAPS+1])
&& (g_voteCount[SELECTMAPS] > g_voteCount[SELECTMAPS+2]))
{
new mapname2[32]
get_mapname(mapname2,31)
new stepround = get_cvar_num("amx_ext_round_step")
set_cvar_num("mp_maxrounds", maxrounds + stepround )
client_print(0,print_chat,"%L", LANG_PLAYER, "CHO_FIN_EXT_R", stepround )
log_amx("Vote: Voting for the nextmap finished. Map %s will be extended to next %d rounds",
mapname2 , stepround )
g_vote_finished = true
g_inprogress = false
g_ForceChangeMap = false
++g_extendCount
NEXTMAP_ROUNDCOUNT = (get_cvar_num("mp_maxrounds") - 2) - (g_teamScore[0] + g_teamScore[1])
log_amx("Vote: Map %s will be extended %d time(s)", mapname2 , g_extendCount )
client_print(0,print_chat,"%L", LANG_PLAYER, "CHO_FIN_EXT_HMT", mapname2 , g_extendCount )
return
}
if ( (winlimit > 0 ) && ( g_voteCount[SELECTMAPS] > g_voteCount[b] )
&& (g_voteCount[SELECTMAPS] > g_voteCount[SELECTMAPS+1])
&& (g_voteCount[SELECTMAPS] > g_voteCount[SELECTMAPS+2]))
{
new mapname3[32]
get_mapname(mapname3,31)
new stepwin = get_cvar_num("amx_ext_win_step")
set_cvar_num("mp_winlimit", winlimit + stepwin )
client_print(0,print_chat,"%L", LANG_PLAYER, "CHO_FIN_EXT_W", stepwin )
log_amx("Vote: Voting for the nextmap finished. Map %s will be extended to next %.0d wins",
mapname3 , stepwin )
g_vote_finished = true
g_inprogress = false
g_ForceChangeMap = false
new c = get_cvar_num("mp_winlimit") - 2
NEXTMAP_WINCOUNT = min(c-g_teamScore[0],c-g_teamScore[1])
++g_extendCount
log_amx("Vote: Map %s will be extended %d time(s)", mapname3 , g_extendCount )
client_print(0,print_chat,"%L", LANG_PLAYER, "CHO_FIN_EXT_HMT", mapname3 , g_extendCount )
return
}
if ( g_voteCount[b] && g_voteCount[SELECTMAPS+1] <= g_voteCount[b] )
set_cvar_string("amx_nextmap", g_mapVoteName[b])
new smap[32]
get_cvar_string("amx_nextmap",smap,31)
NEXTMAP_MSG = 3
new Float:MapChangeTime = get_pcvar_float(pv_amx_rtv_map_time)
if (g_forceVote == true)
{
g_ForceChangeMap = true
if (MapChangeTime < 5.0)
MapChangeTime = 5.0
else if (MapChangeTime > 500.0)
MapChangeTime = 500.0
if (!task_exists(6482257))
set_task(MapChangeTime, "doMapChange", 6482257)
}
client_print(0,print_chat,"%L", LANG_PLAYER, "CHO_FIN_NEXT", smap )
log_amx("Vote: Voting for the nextmap finished. The nextmap will be %s", smap)
g_vote_finished = true
g_inprogress = false
g_forceVote = false
}
public countVote(id,key)
{
if(g_hasVoted[id])
{
return PLUGIN_HANDLED
}
g_hasVoted[id] = true
if ( get_cvar_float("amx_vote_answers") && (!g_vote_finished) )
{
new name[32]
get_user_name(id,name,31)
if(key == SELECTMAPS+1)
{
new nextMap[32]
get_cvar_string("amx_nextmap", nextMap, 31)
client_print(0, print_chat, "%L", LANG_PLAYER, "CHOSE_CURR_NEXT", name, nextMap)
log_amx("%L", LANG_SERVER, "CHOSE_CURR_NEXT", name, nextMap)
}
else if ( key == SELECTMAPS )
{
client_print(0,print_chat,"%L", LANG_PLAYER, "CHOSE_EXT", name )
log_amx("%L", LANG_SERVER, "CHOSE_EXT", name )
}
else if ( key < SELECTMAPS )
{
client_print(0,print_chat,"%L", LANG_PLAYER, "X_CHOSE_X", name, g_mapVoteName[key])
log_amx("%L", LANG_SERVER, "X_CHOSE_X", name, g_mapVoteName[key])
}
}
++g_voteCount[key]
return PLUGIN_HANDLED
}
bool:isInMenu(map[])
{
for(new a=0; a<g_mapVoteNum; ++a)
if(equal(g_mapVoteName[a], map))
return true
return false
}
public voteNextmap()
{
if (g_buyingtime)
{
return
}
new timelimit = get_cvar_num("mp_timelimit")
new maxrounds = get_cvar_num("mp_maxrounds")
new winlimit = get_cvar_num("mp_winlimit")
if ((g_forceVote == false) && (g_rockthevote == false))
{
new mapchoosertype = get_pcvar_num(pv_amx_mapchooser_type)
if (maxrounds > 0)
{
if (((maxrounds - 2) > (g_teamScore[0] + g_teamScore[1])) && (!g_call_say_vote) && (!g_inprogress))
{
NEXTMAP_ROUNDCOUNT = (maxrounds - 2)-(g_teamScore[0] + g_teamScore[1])
g_selected = false
if ((mapchoosertype == 1) && ++g_nominationsHelpMsgIter >= NOMINATIONS_HELPMSG)
{
g_nominationsHelpMsgIter = 0
set_hudmessage(255, 255, 255, -1.0, 0.70, 0, 1.0, 10.0, 0.1, 0.2, 4)
show_hudmessage(0, "%L", LANG_PLAYER, "NOMINATE_MAP")
}
if ((get_pcvar_num(pv_amx_rtv) > 0) && (g_nominationsHelpMsgIter + 6 == NOMINATIONS_HELPMSG) && (!g_hasbeenrocked))
{
set_hudmessage(255, 255, 255, -1.0, 0.70, 0, 1.0, 10.0, 0.1, 0.2, 4)
show_hudmessage(0, "%L", LANG_PLAYER, "RTV_MAP")
}
return
}
}
else if (winlimit > 0)
{
new c = winlimit - 2
if (((c > g_teamScore[0]) && (c > g_teamScore[1])) && (!g_call_say_vote) && (!g_inprogress))
{
NEXTMAP_WINCOUNT = min(c-g_teamScore[0],c-g_teamScore[1])
g_selected = false
if (mapchoosertype == 1 && ++g_nominationsHelpMsgIter >= NOMINATIONS_HELPMSG)
{
g_nominationsHelpMsgIter = 0
set_hudmessage(255, 255, 255, -1.0, 0.70, 0, 1.0, 10.0, 0.1, 0.2, 4)
show_hudmessage(0, "%L", LANG_PLAYER, "NOMINATE_MAP")
}
if ((get_pcvar_num(pv_amx_rtv) > 0) && (g_nominationsHelpMsgIter + 6 == NOMINATIONS_HELPMSG) && (!g_hasbeenrocked))
{
set_hudmessage(255, 255, 255, -1.0, 0.70, 0, 1.0, 10.0, 0.1, 0.2, 4)
show_hudmessage(0, "%L", LANG_PLAYER, "RTV_MAP")
}
return
}
}
else
{
new timeleft = get_timeleft()
if ((timeleft < 1 || timeleft > 129) && (!g_call_say_vote) && (!g_inprogress))
{
if (timeleft > 0)
{
NEXTMAP_MSG = 1
new count = 1
while((timeleft -= 15) > 129) ++count
NEXTMAP_TIMECOUNT = count*15
}
g_selected = false
if (mapchoosertype == 1 && ++g_nominationsHelpMsgIter >= NOMINATIONS_HELPMSG)
{
g_nominationsHelpMsgIter = 0
set_hudmessage(255, 255, 255, -1.0, 0.70, 0, 1.0, 10.0, 0.1, 0.2, 4)
show_hudmessage(0, "%L", LANG_PLAYER, "NOMINATE_MAP")
}
if ((get_pcvar_num(pv_amx_rtv) > 0) && (g_nominationsHelpMsgIter + 6 == NOMINATIONS_HELPMSG) && (!g_hasbeenrocked))
{
set_hudmessage(255, 255, 255, -1.0, 0.70, 0, 1.0, 10.0, 0.1, 0.2, 4)
show_hudmessage(0, "%L", LANG_PLAYER, "RTV_MAP")
}
return
}
}
}
if ((g_selected) && (!g_call_say_vote) && (!g_rockthevote))
return
g_selected = true
g_vote_finished = false
new menu[512], mapsmenu[512], a, mkeys, pos
new dmax = ((g_mapsNum + g_nominMapsNum - 1) > SELECTMAPS) ? SELECTMAPS : (g_mapsNum + g_nominMapsNum - 1)
new players[32], numplayers
g_voteCount[SELECTMAPS] = 0
g_voteCount[SELECTMAPS+1] = 0
new mapname[32]
get_mapname(mapname, 31)
new nextMap[32]
get_cvar_string("amx_nextmap", nextMap, 31)
new error_cnt = 0
// For small amount of players - maps_small.ini if amx_mapchooser_mapsloc is 0
if (get_cvar_num("amx_mapchooser_mapsloc") == 0)
{
if (get_playersnum() < 11)
{
new mapslocfile_s[32]
new mapslocfile[32]
new filename[128]
new cfgdir[128]
get_configsdir(cfgdir, 127)
get_cvar_string("amx_mapchooser_mapsfile_s", mapslocfile_s, 31)
format(filename, 127, "%s/%s", cfgdir, mapslocfile_s)
if (loadSettings(filename))
log_message("[AMXX] - Nextmap Chooser 4: %s succesfully loaded.", mapslocfile_s)
else if (g_mapsNum == 0)
{
get_cvar_string("amx_mapchooser_mapsfile", mapslocfile, 31)
format(filename, 127, "%s/%s", cfgdir, mapslocfile)
if (loadSettings(filename))
log_message("[AMXX] - Nextmap Chooser 4: %s succesfully loaded instead %s.", mapslocfile, mapslocfile_s)
else
{
get_cvar_string("mapcyclefile", filename, 63)
if (loadSettings(filename))
{
log_message("[AMXX] - Nextmap Chooser 4: mapcycle succesfully loaded instead %s.", mapslocfile_s)
}
else
{
log_message("[AMXX] - Nextmap Chooser 4: Failed to loads maps from mapsfile. No maps loaded. ")
}
}
}
}
}
// Build the maps entries and the valid keys (same for all players)
mkeys = (1<<SELECTMAPS+1)
mapsmenu[0] = '^0'
pos = 0
for(g_mapVoteNum = 0; g_mapVoteNum < dmax; ++g_mapVoteNum)
{
if(g_nominMapsNum > 0 && g_mapVoteNum < g_nominMapsNum)
{
copy(g_mapVoteName[g_mapVoteNum], 31, g_nominMapName[g_mapVoteNum])
}
else
{
a = random_num(0,g_mapsNum-1)
while((equal(g_mapName[a], nextMap) || isInMenu(g_mapName[a])) && (error_cnt < 100))
{
if(++a >= g_mapsNum)
a = 0
error_cnt++
}
if (error_cnt < 100)
copy(g_mapVoteName[g_mapVoteNum], 31, g_mapName[a])
else
{
client_print(0,print_chat,"[DEBUG] Preparing the map menu error!")
log_amx("[DEBUG] Preparing the map menu error!")
}
}
pos += format(mapsmenu[pos], 511-pos, "%d. %s^n", g_mapVoteNum+1, g_mapVoteName[g_mapVoteNum])
mkeys |= (1<<g_mapVoteNum)
g_voteCount[g_mapVoteNum] = 0
}
mapsmenu[pos++] = '^n'
g_extend = false
if (((winlimit + maxrounds) == 0) && (timelimit > 0) && (g_extendCount < get_cvar_num("amx_extendmap_max")))
{
mkeys |= (1<<SELECTMAPS)
g_extend = true
}
if((timelimit == 0) && (maxrounds > 0) && (g_extendCount < get_cvar_num("amx_ext_round_max")))
{
mkeys |= (1<<SELECTMAPS)
g_extend = true
}
if ((timelimit == 0) && (winlimit > 0) && (g_extendCount < get_cvar_num("amx_ext_win_max")))
{
mkeys |= (1<<SELECTMAPS)
g_extend = true
}
for(new i = 1; i <= g_maxplayers; ++i)
{
g_hasVoted[i] = false
}
// Now build (translated) menu for each player and send it
new menuid, tempkeys, player
new votetime = get_pcvar_num(pv_amx_vote_time)
get_players(players, numplayers, "c")
for(numplayers--; numplayers >= 0; numplayers--)
{
player = players[numplayers]
get_user_menu(player, menuid, tempkeys)
if (tempkeys == 0 || menuid <= 0)
{
pos = format(menu,511,g_coloredMenus ? "y%L:w^n^n" : "%L:^n^n", LANG_SERVER, "CHOOSE_NEXTM")
pos += format(menu[pos], 511-pos, "%s", mapsmenu)
if (g_extend)
{
pos += format(menu[pos],511-pos,"%d. %L^n",SELECTMAPS+1,LANG_SERVER,"EXTEND_MAP",mapname)
}
format(menu[pos], 511-pos, "%d. %L", SELECTMAPS+2,LANG_SERVER,"KEEP_CURRENT_NEXTMAP", nextMap)
show_menu(player, mkeys, menu, votetime, "AMX Choose nextmap:")
}
}
remove_task(1467853)
new param[1]
param[0] = 1
set_task(CHECK_MENU_TIME, "check_menu", 1467853, param, 1)
NEXTMAP_MSG = 1
set_task(get_pcvar_float(pv_amx_vote_time), "checkVotes")
if (!g_call_say_vote && !g_rockthevote)
{
client_print(0,print_chat,"%L",LANG_SERVER,"TIME_CHOOSE")
}
client_cmd(0, "spk Gman/Gman_Choose2")
g_call_say_vote = false
if (g_hasbeenrocked && g_rockthevote)
g_rockthevote = false
log_amx("Vote: Voting for the nextmap started")
if (task_exists(987457)) remove_task(987457)
}
public cmdVoteNextMap(id,level,cid)
{
if (!cmd_access(id,level,cid,1))
return PLUGIN_HANDLED
if (NEXTMAP_MSG != 1 || g_forceVote == true)
{
console_print(id, "%L", LANG_PLAYER, "VOT_NOT_ALLOWED")
return PLUGIN_HANDLED
}
new arg[32]
read_argv(1, arg, 31)
g_forceVoteTime = str_to_num(arg)
if (g_forceVoteTime < 2) g_forceVoteTime = 20
g_forceVote = true
voteNextmap()
new authid[32], name[32], ipaddress[24]
get_user_authid(id, authid, 31)
get_user_name(id, name, 31)
get_user_ip(id, ipaddress, 23, 1)
log_amx("VoteNextMap: ^"%s<%d><%s><%s>^" start the vote for the next map",name,get_user_userid(id),authid,ipaddress)
switch(get_cvar_num("amx_show_activity"))
{
// case 3: print_to_admins("acdefghijklmnopqrstuvw", print_chat, _T("ADMIN %s: start the vote for the next map"), name)
case 2: client_print(0, print_chat, "%L", LANG_PLAYER, "X_START_VOTE", name)
case 1: client_print(0, print_chat, "%L", LANG_PLAYER, "START_VOTE", name)
}
return PLUGIN_HANDLED
}
public delayedChange(param[])
{
server_cmd("changelevel %s", param)
}
public doMapChange()
{
new string[32], current_map[32]
new len = get_cvar_string("amx_nextmap", string, 31)
get_mapname(current_map, 31)
new modName[8]
get_modname(modName, 7)
if (!equal(current_map, string))
{
if (!equal(modName, "zp"))
{
message_begin(MSG_ALL, SVC_INTERMISSION)
message_end()
}
set_task(1.0, "delayedChange", 0, string, len)
}
g_forceVote = false
}
isLastMaps(map[])
{
g_MapHistory = get_pcvar_num(pv_amx_map_history)
if (g_MapHistory < 0)
{
g_MapHistory = 0
set_pcvar_num(pv_amx_map_history, 0)
}
else if (g_MapHistory > MAP_HISTORY_MAX)
{
g_MapHistory = MAP_HISTORY_MAX
set_pcvar_num(pv_amx_map_history, MAP_HISTORY_MAX)
}
for (new i = 0; i < g_MapHistory; ++i)
{
if (equali(map, g_hist_mapName[i]))
{
return 1
}
}
return 0
}
public cmdListMaps(id)
{
if(get_pcvar_num(pv_amx_mapchooser_type) == 1)
{
new arg1[8]
new start = read_argv(1, arg1, 7) ? str_to_num(arg1) : 1
if (--start < 0) start = 0
if (get_cvar_num("amx_nominfromfile") == 1)
{
if (start >= g_mapsNum) start = g_mapsNum - 1
console_print(id, "%L", LANG_PLAYER, "MAPS_CAN_NOMIN")
new end = start + LISTMAPAMOUNT
if (end > g_mapsNum) end = g_mapsNum
for(new i = start; i < end; ++i)
{
console_print(id, "%3d: %s", i+1, g_mapName[i])
}
console_print(id, "%L", LANG_PLAYER, "MAPS_NOMIN_LIST_OF", start+1, end, g_mapsNum)
if (end < g_mapsNum)
console_print(id, "%L", LANG_PLAYER, "USE_LISTMAPS_MORE", end+1)
else
console_print(id, "%L", LANG_PLAYER, "USE_LISTMAPS_BEGIN")
}
else
{
if (start >= g_mapsOnServerNum) start = g_mapsOnServerNum - 1
console_print(id, "%L", LANG_PLAYER, "MAPS_CAN_NOMIN")
new end = start + LISTMAPAMOUNT
if (end > g_mapsOnServerNum) end = g_mapsOnServerNum
new len, pos = 2, iter = 0, text[32]
while((pos = read_dir("maps", pos, text, 31, len)) && iter < end)
{
if (len <= 4 || (len > 4 && !equali(text[len-4], ".bsp", 4))) continue
text[len-4] = '^0'
if (is_map_valid(text))
{
if (iter >= start)
{
console_print(id, "%3d: %s", iter+1, text)
}
++iter
}
}
console_print(id, "%L", LANG_PLAYER, "MAPS_NOMIN_LIST_OF", start+1, end, g_mapsOnServerNum)
if (end < g_mapsOnServerNum)
console_print(id, "%L", LANG_PLAYER, "USE_LISTMAPS_MORE", end+1)
else
console_print(id, "%L", LANG_PLAYER, "USE_LISTMAPS_BEGIN")
}
}
return PLUGIN_HANDLED
}
public listNominations(id)
{
if (get_pcvar_num(pv_amx_mapchooser_type) == 1)
{
new a = 0, message[512], len = 0
if (g_nominMapsNum > 0)
{
len = format(message, 511, "%L", id, "MAPS_NOMIN_FOR_VOTE")
new name[24]
while(a < g_nominMapsNum)
{
name[0] = '^0'
get_user_name(g_whoNominMapNum[a], name, 23)
len += format(message[len], 511-len, "%L", id, "MAPS_NOMIN_BY", g_nominMapName[a], name)
++a
}
set_hudmessage(0, 150, 255, 0.01, 0.18, 0, 15.0, 12.0, 1.5, 3.75, 2)
show_hudmessage(id, message)
}
}
return PLUGIN_HANDLED
}
public handleSay(id)
{
new message[256]
read_args(message, 255)
remove_quotes(message)
if ((equali(message, "votenext", 8)) && (access(id, FLAG_AMX_VOTENEXTMAP)))
{
new Float:voting = get_pcvar_float(pv_amx_last_voting) + get_pcvar_float(pv_amx_vote_time)
if ( voting > get_gametime() )
{
client_print(id, print_chat, "%L", LANG_PLAYER, "ALEADY_VOTING")
return PLUGIN_CONTINUE
}
if (( voting && (voting + get_pcvar_float(pv_amx_vote_delay) > get_gametime()) ) || g_buyingtime)
{
client_print(id, print_chat, "%L", LANG_PLAYER, "VOT_NOT_ALLOWED")
return PLUGIN_CONTINUE
}
new Float:vote_time2 = get_cvar_float("amx_vote_time") + 2.0
set_cvar_float("amx_last_voting", get_gametime() + vote_time2 )
client_print(id, print_chat, "%L", LANG_PLAYER, "VOTING_STARTED")
g_call_say_vote = true
set_task(5.0,"voteNextmap",987457)
return PLUGIN_CONTINUE
}
else if ((equali(message, "rockthevote", 11)) || (equali(message, "rtv", 3)))
{
new Float:voting = get_pcvar_float(pv_amx_last_voting) + get_pcvar_float(pv_amx_vote_time)
if (( voting && (voting + get_pcvar_float(pv_amx_vote_delay) > get_gametime()) ) || g_buyingtime)
{
client_print(id, print_chat, "%L", LANG_PLAYER, "VOT_NOT_ALLOWED")
if ( voting && (voting + get_pcvar_float(pv_amx_vote_delay) > get_gametime()) )
client_print(id, print_chat, "You need to wait amx_vote_delay time.")
if (g_buyingtime)
client_print(id, print_chat, "Buying time (15s) not elapsed yet from the round start.")
return PLUGIN_CONTINUE
}
rock_the_vote(id)
return PLUGIN_CONTINUE
}
else if (get_pcvar_num(pv_amx_mapchooser_type) == 1)
{
if (containi(message, "<") != -1
|| containi(message, "?") != -1
|| containi(message, ">") != -1
|| containi(message, "*") != -1
|| containi(message, "&") != -1
|| containi(message, ".") != -1
|| containi(message, "/") != -1
|| containi(message, "") != -1
|| containi(message, "!") != -1)
{
return PLUGIN_CONTINUE
}
if (equali(message, "nominations", 11))
{
if (NEXTMAP_MSG == 2)
{
client_print(id, print_chat, "%L", LANG_PLAYER, "VOTING_IN_PROGRESS")
}
else
{
if(!g_nominMapsNum)
client_print(id, print_chat, "%L", LANG_PLAYER, "NO_MAPS_NOMIN")
else
listNominations(id)
}
return PLUGIN_CONTINUE
}
else if (equali(message, "nominate ", 9))
{
handleNominate(id, message[9])
}
else if (equali(message, "vote ", 5))
{
handleNominate(id, message[5])
}
else if (is_map_valid(message))
{
nominateMap(id, message)
}
else
{
new mapname[32], saymap[29]
read_args(saymap, 28)
remove_quotes(saymap)
format(mapname,31, "aim_%s", saymap)
if (is_map_valid(mapname))
{
nominateMap(id, mapname)
return PLUGIN_CONTINUE
}
format(mapname, 31, "as_%s", saymap)
if (is_map_valid(mapname))
{
nominateMap(id, mapname)
return PLUGIN_CONTINUE
}
format(mapname, 31, "awp_%s", saymap)
if (is_map_valid(mapname))
{
nominateMap(id, mapname)
return PLUGIN_CONTINUE
}
format(mapname, 31, "cs_%s", saymap)
if (is_map_valid(mapname))
{
nominateMap(id, mapname)
return PLUGIN_CONTINUE
}
format(mapname, 31, "de_%s", saymap)
if (is_map_valid(mapname))
{
nominateMap(id, mapname)
return PLUGIN_CONTINUE
}
format(mapname, 31, "fy_%s", saymap)
if (is_map_valid(mapname))
{
nominateMap(id, mapname)
return PLUGIN_CONTINUE
}
format(mapname, 31, "he_%s", saymap)
if (is_map_valid(mapname))
{
nominateMap(id, mapname)
return PLUGIN_CONTINUE
}
format(mapname, 31, "ka_%s", saymap)
if (is_map_valid(mapname))
{
nominateMap(id, mapname)
return PLUGIN_CONTINUE
}
format(mapname, 31, "kz_%s", saymap)
if (is_map_valid(mapname))
{
nominateMap(id, mapname)
return PLUGIN_CONTINUE
}
format(mapname, 31, "dod_%s", saymap)
if (is_map_valid(mapname))
{
nominateMap(id, mapname)
return PLUGIN_CONTINUE
}
}
}
return PLUGIN_CONTINUE
}
public handleNominate(id,map[])
{
if (is_map_valid(map))
{
nominateMap(id, map)
}
else
{
new mapname[32]
format(mapname, 31, "aim_%s", map)
if (is_map_valid(mapname))
{
nominateMap(id, mapname)
return PLUGIN_HANDLED
}
format(mapname, 31, "as_%s", map)
if (is_map_valid(mapname))
{
nominateMap(id, mapname)
return PLUGIN_HANDLED
}
format(mapname, 31, "awp_%s", map)
if (is_map_valid(mapname))
{
nominateMap(id, mapname)
return PLUGIN_HANDLED
}
format(mapname, 31, "cs_%s", map)
if (is_map_valid(mapname))
{
nominateMap(id, mapname)
return PLUGIN_HANDLED
}
format(mapname, 31, "de_%s", map)
if (is_map_valid(mapname))
{
nominateMap(id, mapname)
return PLUGIN_HANDLED
}
format(mapname, 31, "fy_%s", map)
if (is_map_valid(mapname))
{
nominateMap(id, mapname)
return PLUGIN_HANDLED
}
format(mapname, 31, "he_%s", map)
if (is_map_valid(mapname))
{
nominateMap(id, mapname)
return PLUGIN_HANDLED
}
format(mapname, 31, "ka_%s", map)
if (is_map_valid(mapname))
{
nominateMap(id, mapname)
return PLUGIN_HANDLED
}
format(mapname, 31, "kz_%s", map)
if (is_map_valid(mapname))
{
nominateMap(id, mapname)
return PLUGIN_HANDLED
}
format(mapname, 31, "dod_%s", map)
if (is_map_valid(mapname))
{
nominateMap(id, mapname)
return PLUGIN_HANDLED
}
client_print(id, print_chat, "%L", LANG_PLAYER, "MAP_NOT_FOUND_LIST", map)
}
return PLUGIN_HANDLED
}
public nominateMap(id,map[])
{
strtolower(map)
new current_map[32]
new n = 0, i, done = 0, isreplacement = 0
get_mapname(current_map, 31)
new temp_nominMapNums = g_nominMapsNum
if (NEXTMAP_MSG == 2)
{
client_print(id, print_chat, "%L", LANG_PLAYER, "VOTING_IN_PROGRESS")
return PLUGIN_HANDLED
}
if (NEXTMAP_MSG == 3)
{
new nextmap[32]
get_cvar_string("amx_nextmap", nextmap, 31)
client_print(id, print_chat, "%L", LANG_PLAYER, "CHO_FIN_NEXT", nextmap)
return PLUGIN_HANDLED
}
if (!is_map_valid(map))
{
client_print(id, print_chat, "%L", LANG_PLAYER, "MAP_NOT_FOUND_LIST", map)
return PLUGIN_HANDLED
}
if (isLastMaps(map) && !equali(map,current_map))
{
client_print(id, print_chat, "%L", LANG_PLAYER, "CANNOT_NOM_LAST_PLAYED", g_MapHistory)
return PLUGIN_HANDLED
}
if (equali(map,current_map))
{
client_print(id, print_chat, "%L", LANG_PLAYER, "X_CURR_MAP_EV_EXT", map)
return PLUGIN_HANDLED
}
new isinthelist = 0
if (get_cvar_num("amx_nominfromfile") == 1)
{
for (i = 0; i < g_mapsNum; ++i)
{
if (equali(map, g_mapName[i]))
{
isinthelist = 1
break
}
}
}
else
{
if (is_map_valid(map))
isinthelist = 1
}
if (!isinthelist)
{
client_print(id, print_chat, "%L", LANG_PLAYER, "NOM_CERTAIN_MAPS_ONLY")
return PLUGIN_HANDLED
}
new maxnom = get_cvar_num("amx_maxnominperplayer")
if (g_nominMapsNum >= SELECTMAPS || g_nominated[id] >= maxnom)
{
if (g_nominated[id] > maxnom)
{
client_print(id, print_chat, "%L", LANG_PLAYER, "NOMIN_TOO_MANY", maxnom)
return PLUGIN_HANDLED
}
new plname[32]
for(i = 0; i < g_nominMapsNum; ++i)
{
if (equali(map, g_nominMapName[i]))
{
get_user_name(g_whoNominMapNum[i], plname, 31)
client_print(id, print_chat, "%L", LANG_PLAYER, "MAP_ALREADY_NOMIN_BY", map, plname)
return PLUGIN_HANDLED
}
}
while(n < g_nominMapsNum && !done && g_nominated[id] > 1)
{
if (g_whoNominMapNum[n] == id)
{
g_nominated[id]--
g_nominMapsNum = n
done = 1
isreplacement = 1
}
++n
}
if (!done)
{
n = 0
while(n < g_nominMapsNum && !done && g_nominated[id] > 0)
{
if(g_whoNominMapNum[n] == id)
{
g_nominated[id]--
g_nominMapsNum = n
done = 1
isreplacement = 1
}
++n
}
}
if (!done)
{
client_print(id, print_chat, "%L", LANG_PLAYER, "MAXIM_NOMIN_REACHED", g_nominMapsNum)
return PLUGIN_HANDLED
}
}
new plname[32]
for(i = 0; i < g_nominMapsNum; ++i)
{
if (equali(map, g_nominMapName[i]))
{
get_user_name(g_whoNominMapNum[i], plname, 31)
client_print(id, print_chat, "%L", LANG_PLAYER, "MAP_ALREADY_NOMIN_BY", map, plname)
g_nominMapsNum = temp_nominMapNums
return PLUGIN_HANDLED
}
}
new name[32]
get_user_name(id, name, 31)
if (isreplacement == 1)
{
client_print(id, print_chat, "%L", LANG_PLAYER, "YOUR_NOMIN_REPLACED", g_nominMapName[g_nominMapsNum])
}
else if (isreplacement == 2)
{
client_print(0, print_chat, "%L", LANG_PLAYER, "THE_NOMIN_OF_X_REPLACED", g_nominMapName[g_nominMapsNum])
}
++g_nominated[id]
console_print(id, "%L", LANG_PLAYER, "NOMIN_MAP_ADDED", map, g_nominMapsNum+1)
copy(g_nominMapName[g_nominMapsNum], 31, map)
g_whoNominMapNum[g_nominMapsNum] = id
if (isreplacement)
{
g_nominMapsNum = temp_nominMapNums
}
else
{
g_nominMapsNum = temp_nominMapNums + 1
}
client_print(0, print_chat, "%L", LANG_PLAYER, "X_NOMIN_MAP_SEE_LIST" , name, map)
return PLUGIN_HANDLED
}
load_history(filename[])
{
g_MapHistory = get_pcvar_num(pv_amx_map_history)
if (g_MapHistory < 0)
{
g_MapHistory = 0
set_pcvar_num(pv_amx_map_history, 0)
}
else if (g_MapHistory > MAP_HISTORY_MAX)
{
g_MapHistory = MAP_HISTORY_MAX
set_pcvar_num(pv_amx_map_history, MAP_HISTORY_MAX)
}
if (!file_exists(filename)) return 0
new a = 0
for (new pos = 0; pos < g_MapHistory; pos++)
read_file(filename,pos,g_hist_mapName[pos],31,a)
return 1
}
loadSettings(filename[])
{
if (!file_exists(filename)) return 0
g_mapsNum = 0
new szText[32]
new a = 0, pos = 0, i
new currentMap[32]
get_mapname(currentMap,31)
g_MapHistory = get_pcvar_num(pv_amx_map_history)
if (g_MapHistory < 0)
{
g_MapHistory = 0
set_pcvar_num(pv_amx_map_history, 0)
}
else if (g_MapHistory > MAP_HISTORY_MAX)
{
g_MapHistory = MAP_HISTORY_MAX
set_pcvar_num(pv_amx_map_history, MAP_HISTORY_MAX)
}
while(g_mapsNum < MAX_MAPS && (pos = read_file(filename, pos, szText, 31, a)))
{
if(!a || szText[0] == ';' || szText[0] == '/') continue
parse(szText, g_mapName[g_mapsNum], 31)
replace_all(g_mapName[g_mapsNum], 31, " ", "")
replace_all(g_mapName[g_mapsNum], 31, ".bsp", "")
if (is_map_valid(g_mapName[g_mapsNum])
&& !equali(g_mapName[g_mapsNum], g_lastMap)
&& !equali(g_mapName[g_mapsNum], currentMap))
{
++g_mapsNum
for(i = 0; i < g_MapHistory; ++i)
{
if(equali(g_mapName[g_mapsNum-1], g_hist_mapName[i]))
{
--g_mapsNum
break
}
}
}
}
return g_mapsNum
}
loadMapsFolder()
{
g_mapsNum = 0
new len, pos = 2, i
new currentMap[32]
get_mapname(currentMap, 31)
g_MapHistory = get_pcvar_num(pv_amx_map_history)
if (g_MapHistory < 0)
{
g_MapHistory = 0
set_pcvar_num(pv_amx_map_history, 0)
}
else if (g_MapHistory > MAP_HISTORY_MAX)
{
g_MapHistory = MAP_HISTORY_MAX
set_pcvar_num(pv_amx_map_history, MAP_HISTORY_MAX)
}
while(g_mapsNum < MAX_MAPS && (pos = read_dir("maps/", pos, g_mapName[g_mapsNum], 31, len)))
{
if (len <= 4 || (len > 4 && !equali(g_mapName[g_mapsNum][len-4], ".bsp", 4))) continue
g_mapName[g_mapsNum][len-4] = '^0'
if (is_map_valid(g_mapName[g_mapsNum])
&& !equali(g_mapName[g_mapsNum], g_lastMap)
&& !equali(g_mapName[g_mapsNum], currentMap))
{
++g_mapsNum
for(i = 0; i < g_MapHistory; ++i)
{
if (equali(g_mapName[g_mapsNum-1], g_hist_mapName[i]))
{
--g_mapsNum
break
}
}
}
}
return g_mapsNum
}
getMapsOnServerNum()
{
new len, pos = 2, text[32]
while((pos = read_dir("maps/", pos, text, 31, len)))
{
if (len <= 4 || (len > 4 && !equali(text[len-4], ".bsp", 4))) continue
text[len-4] = '^0'
if (is_map_valid(text))
{
++g_mapsOnServerNum
}
}
log_amx("Found %d maps in maps folder", g_mapsOnServerNum)
}
public team_score()
{
new team[2]
read_data(1, team, 1)
g_teamScore[(team[0]=='C') ? 0 : 1] = read_data(2)
new winlimit = get_cvar_num("mp_winlimit")
new maxrounds = get_cvar_num("mp_maxrounds")
if (maxrounds > 0)
{
if ((maxrounds - 2) > (g_teamScore[0] + g_teamScore[1]))
{
NEXTMAP_MSG = 1
NEXTMAP_ROUNDCOUNT = (maxrounds - 2) - (g_teamScore[0] + g_teamScore[1])
}
else
NEXTMAP_ROUNDCOUNT = 0
}
if (winlimit > 0)
{
new c = winlimit - 2
if ((c > g_teamScore[0]) && (c > g_teamScore[1]))
{
NEXTMAP_MSG = 1
NEXTMAP_WINCOUNT = min(c-g_teamScore[0],c-g_teamScore[1])
}
else
NEXTMAP_WINCOUNT = 0
}
}
public plugin_end()
{
new current_map[32]
get_mapname(current_map,31 )
set_localinfo("lastMap",current_map)
g_MapHistory = get_pcvar_num(pv_amx_map_history)
if (g_MapHistory < 0)
{
g_MapHistory = 0
set_pcvar_num(pv_amx_map_history, 0)
}
else if (g_MapHistory > MAP_HISTORY_MAX)
{
g_MapHistory = MAP_HISTORY_MAX
set_pcvar_num(pv_amx_map_history, MAP_HISTORY_MAX)
}
if ((file_exists(g_maphistFile)) && (g_MapHistory > 0))
{
new text[32]
new a = 0
// shift list up 1
for (new pos = 0; pos < g_MapHistory; pos++)
{
read_file(g_maphistFile,pos+1,text,31,a)
write_file(g_maphistFile,text,pos)
}
}
write_file(g_maphistFile,current_map,g_MapHistory-1)
}
public eNewRound()
{
if (!task_exists(987400))
{
set_task(15.0,"buyFinished",987400)
g_buyingtime = true
}
}
public eEndRound()
{
if (g_ForceChangeMap)
{
g_ForceChangeMap = false
if (task_exists(6482257)) remove_task(6482257)
doMapChange()
}
else
{
if (!task_exists(987400))
{
set_task(15.0,"buyFinished",987400)
}
g_buyingtime = true
}
}
public buyFinished()
{
g_buyingtime = false
return
}
public rock_the_vote(id)
{
new Float:rtv_percent = get_pcvar_float(pv_amx_rtv_percent)
new needed
new kName[32]
get_user_name(id,kName,31)
new timeleft = get_timeleft()
new Float:minutesplayed = get_gametime() / 60.0
new Float:wait = get_pcvar_float(pv_amx_rtv_min_time)
new Float:timelimit = get_cvar_float("mp_timelimit")
new maxrounds = get_cvar_num("mp_maxrounds")
new winlimit = get_cvar_num("mp_winlimit")
if (wait < 1.0)
wait = 1.0
else if (wait > 100.0)
wait = 100.0
if (rtv_percent < 0.03)
rtv_percent = 0.03
else if (rtv_percent > 1.00)
rtv_percent = 1.00
needed = floatround(float(g_active_players) * rtv_percent + 0.49)
if (get_pcvar_num(pv_amx_rtv) == 0)
{
client_print(id,print_chat,"%L",LANG_PLAYER,"RTV_DISABLED")
return
}
if (g_inprogress || task_exists(987457))
{
client_print(id,print_chat,"%L",LANG_PLAYER,"VOTE_BEGINNING")
return
}
if (g_selected || g_vote_finished)
{
new smap[32]
get_cvar_string("amx_nextmap",smap,31)
client_print(id,print_chat,"%L",LANG_PLAYER,"VOTING_COMPLETED",smap)
return
}
if (g_hasbeenrocked)
{
client_print(id,print_chat,"%L",LANG_PLAYER,"MAP_ALREADY_ROCKED")
return
}
if ((timeleft < 120) && (timelimit > 0.0))
{
if (timeleft < 1)
{
client_print(id,print_chat,"%L",LANG_PLAYER,"NOT_ENOUGH_TIME")
return
}
}
if (maxrounds > 0)
{
if ((maxrounds - 2) <= (g_teamScore[0] + g_teamScore[1]))
{
client_print(id,print_chat,"%L",LANG_PLAYER,"NOT_ENOUGH_TIME")
return
}
}
if (winlimit > 0)
{
new c = winlimit - 2
if ((c <= g_teamScore[0]) || (c <= g_teamScore[1]))
{
client_print(id,print_chat,"%L",LANG_PLAYER,"NOT_ENOUGH_TIME")
return
}
}
if ((minutesplayed + 0.5) < wait)
{
if (wait - 0.5 - minutesplayed > 0.0)
{
client_print(id,print_chat,"%L",LANG_PLAYER,"RTV_WAIT",
(floatround(wait + 0.5 - minutesplayed) > 0) ? (floatround(wait + 0.5 - minutesplayed)):(1))
}
else
{
client_print(id,print_chat,"%L",LANG_PLAYER,"RTV_1MIN")
}
return
}
if (!g_rocked[id])
{
g_rocked[id] = 1
g_rocks++
}
else
{
client_print(id,print_chat,"%L",LANG_PLAYER,"MAP_ALREADY_ROCKED")
return
}
if (g_rocks >= needed)
{
client_print(0,print_chat,"%L",LANG_PLAYER,"RTV_STARTING", g_rocks)
set_hudmessage(222, 70,0, -1.0, 0.70, 0, 1.0, 10.0, 0.1, 0.2, 4)
show_hudmessage(0,"%L",LANG_PLAYER,"RTV_START",g_rocks )
g_hasbeenrocked = true
g_rockthevote = true
g_inprogress = true
g_vote_finished = false
set_task(15.0, "voteNextmap", 987457)
for(new i = 1; i < 33; ++i)
{
g_rocked[i] = 0
}
g_rocks = 0
g_forceVoteTime = 20
g_forceVote = true
new Float:vote_time2 = get_cvar_float("amx_vote_time") + 2.0
set_cvar_float("amx_last_voting", get_gametime() + vote_time2 )
}
else
client_print(0,print_chat,"%L",LANG_PLAYER,"RTV_NEEDED",(needed - g_rocks))
return
}