Basicamente es mapchooser.amxx pero modificado para que si la cvar esta activada en vez de funcionar normalmente, verificará cuantos jugadores hay en la partida si hay menos de PLAYERS_FOR_MAP_SMALL (osea 9 jug.)
cargara la lista de mapas de amxmodx\configs\maps_small.ini y si hay mas de amxmodx\configs\maps_big.ini
(es modificado por mi, no 100% mio no se si es el lugar correcto pero me gustaria que comprobaseis el plugin no quiero robar la autoria a nadie gracias)
"amx_loadmap"
0 = carga normal de mapcycle o maps.ini
1 = carga segun jugadores maps_big y maps_small
cargara la lista de mapas de amxmodx\configs\maps_small.ini y si hay mas de amxmodx\configs\maps_big.ini
(es modificado por mi, no 100% mio no se si es el lugar correcto pero me gustaria que comprobaseis el plugin no quiero robar la autoria a nadie gracias)
"amx_loadmap"
0 = carga normal de mapcycle o maps.ini
1 = carga segun jugadores maps_big y maps_small
Código PHP:
#include <amxmodx>
#include <amxmisc>
#define SELECTMAPS 5
#define PLAYERS_FOR_MAP_SMALL 9 //Si hay menos de X jugadores se usara maps_small.ini, sino maps_big. (si amx_loadmap==1)
#define charsof(%1) (sizeof(%1)-1)
new Array:g_mapName;
new g_mapNums;
new g_nextName[SELECTMAPS]
new g_voteCount[SELECTMAPS + 2]
new g_mapVoteNum
new g_teamScore[2]
new g_lastMap[32]
new g_coloredMenus
new bool:g_selected = false
new mapname_actual[32]
new maps_played = 5 //Num de mapas recordados para que no aparezcan en la votacion
new mapname_played[5][32] //5 = maps_played???
new maps_played_File[128]
public plugin_init()
{
register_plugin("MapChooserPlayers", "1.5", "AMX Dev & KWo & WaxinTon")
register_dictionary("mapchooser_players.txt")
register_dictionary("common.txt")
g_mapName=ArrayCreate(32);
new MenuName[64]
format(MenuName, 63, "%L", "en", "CHOOSE_NEXTM")
register_menucmd(register_menuid(MenuName), (-1^(-1<<(SELECTMAPS+2))), "countVote")
register_cvar("amx_extendmap_max", "90")
register_cvar("amx_extendmap_step", "15")
register_cvar("amx_loadmap", "1")// 0 = carga normal de mapcycle o maps.ini - 1 = carga segun jugadores maps_big y maps_small
if (cstrike_running())
register_event("TeamScore", "team_score", "a")
get_localinfo("lastMap", g_lastMap, 31)
set_localinfo("lastMap", "")
//Si amx_loadmap es distinto de 0 o 1 que lo establezca en 0
if(get_cvar_num("amx_loadmap") != 0 && get_cvar_num("amx_loadmap") != 1){
set_cvar_num("amx_loadmap", 0)
}
register_event("HLTV", "load_ini", "a", "1=0", "2=0")
register_clcmd("say /map", "mapa_actual")
register_clcmd("say_team /map", "mapa_actual")
register_clcmd("say map", "mapa_actual")
register_clcmd("say_team map", "mapa_actual")
register_clcmd("say /currentmap", "mapa_actual")
register_clcmd("say_team /currentmap", "mapa_actual")
register_clcmd("say currentmap", "mapa_actual")
register_clcmd("say_team currentmap", "mapa_actual")
register_clcmd("say /mapa", "mapa_actual")
register_clcmd("say_team /mapa", "mapa_actual")
load_mapas_jugados()
}
public mapa_actual(id){//para saber el mapa actual cuando el jugador lo pide por say
get_mapname(mapname_actual, sizeof (mapname_actual))
static msg[191]
format (msg, 190, "^x03- Estas en el MAPA: ^x04%s", mapname_actual)
//^x03 = Color del equipo - ^x04 = Verde
message_begin(MSG_ONE, get_user_msgid("SayText"), {0,0,0}, id)
write_byte(id)
write_string(msg)
message_end()
}
public load_ini(){//Metodo de carga
new maps_ini_file[64]
get_configsdir(maps_ini_file, 63)
switch(get_cvar_num("amx_loadmap")){
case 0:{
format(maps_ini_file, 63, "%s/maps.ini", maps_ini_file)
}
case 1:{
if (get_playersnum() < PLAYERS_FOR_MAP_SMALL){//Si hay menos de 9 jugadores se usara maps_small.ini
format(maps_ini_file, 63, "%s/maps_small.ini", maps_ini_file)
} else{
if (get_playersnum() >= PLAYERS_FOR_MAP_SMALL){//Si hay 9 o mas jugadores se usara maps_big.ini
format(maps_ini_file, 63, "%s/maps_big.ini", maps_ini_file)
}
}
}
}
if (!file_exists(maps_ini_file)){
get_cvar_string("mapcyclefile", maps_ini_file, 63)
}
if (loadSettings(maps_ini_file)){
set_task(15.0, "voteNextmap", 987456, "", 0, "b")
server_print("")
server_print("###[MCP]### %s --->[OK]", maps_ini_file)
}
g_coloredMenus = colored_menus()
//load_mapas_jugados()
}
//########################################################################################################
//########################################################################################################
//########################################################################################################
public load_mapas_jugados(){// Para cargar el archivo de mapas jugados maps_played.ini
new cfgdir[128]
get_configsdir(cfgdir, 127)//para obtener la direccion principal ...cstrike/addons/amxmodx/...
format(maps_played_File, 127, "%s/maps_played.ini", cfgdir)//archivo de ultimos mapas jugados
if (!file_exists(maps_played_File)){
server_print("###[MCP]### %s --->[ERROR]", maps_played_File)
return
}
server_print("")
server_print("###[MCP]### %s --->[OK]", maps_played_File)
new a = 0
for ( new pos = 0; pos < maps_played; pos++){
read_file(maps_played_File,pos,mapname_played[pos],31,a)
//server_print("")
//server_print("###[MCP]### %s --->[OK]", mapname_played[pos])
}
}
public plugin_end(){// Para guardar/recordar los ultimos mapas jugados en maps_played.ini
get_mapname(mapname_actual, sizeof (mapname_actual)) //obtener el mapa actual
if ( (file_exists(maps_played_File)) && (maps_played > 0) )
{
new text[32]
new a = 0
// shift list up 1
for (new pos = 0; pos < maps_played; pos++)
{
read_file(maps_played_File,pos+1,text,31,a)
write_file(maps_played_File,text,pos)
}
}
write_file(maps_played_File,mapname_actual,maps_played-1)
}
//########################################################################################################
//########################################################################################################
//########################################################################################################
public checkVotes()
{
new b = 0
for (new a = 0; a < g_mapVoteNum; ++a)
if (g_voteCount[b] < g_voteCount[a])
b = a
if (g_voteCount[SELECTMAPS] > g_voteCount[b]
&& g_voteCount[SELECTMAPS] > g_voteCount[SELECTMAPS+1])
{
new mapname[32]
get_mapname(mapname, 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", steptime)
log_amx("Votacion para el siguiente mapa Finalizada. Mapa %s sera extendido durante %.0f minutos", mapname, steptime)
return
}
new smap[32]
if (g_voteCount[b] && g_voteCount[SELECTMAPS + 1] <= g_voteCount[b])
{
ArrayGetString(g_mapName, g_nextName[b], smap, charsof(smap));
set_cvar_string("amx_nextmap", smap);
}
get_cvar_string("amx_nextmap", smap, 31)
client_print(0, print_chat, "%L", LANG_PLAYER, "CHO_FIN_NEXT", smap)
log_amx("Votacion para el siguiente mapa Finalizada. Mapa siguiente %s", smap)
}
public countVote(id, key)
{
if (get_cvar_float("amx_vote_answers"))
{
new name[32]
get_user_name(id, name, 31)
if(key >= SELECTMAPS){
client_print(0, print_chat, "%L", LANG_PLAYER, "CHOSE_EXT", name)
}
else if(key < SELECTMAPS){
new map[32];
ArrayGetString(g_mapName, g_nextName[key], map, charsof(map));
client_print(0, print_chat, "%L", LANG_PLAYER, "X_CHOSE_X", name, map)
}
}
++g_voteCount[key]
return PLUGIN_HANDLED
}
bool:isInMenu(id)
{
for (new a = 0; a < g_mapVoteNum; ++a)
if (id == g_nextName[a])
return true
return false
}
public voteNextmap()
{
new winlimit = get_cvar_num("mp_winlimit")
new maxrounds = get_cvar_num("mp_maxrounds")
if (winlimit)
{
new c = winlimit - 2
if ((c > g_teamScore[0]) && (c > g_teamScore[1]))
{
g_selected = false
return
}
}
else if (maxrounds)
{
if ((maxrounds - 2) > (g_teamScore[0] + g_teamScore[1]))
{
g_selected = false
return
}
} else {
new timeleft = get_timeleft()
if (timeleft < 1 || timeleft > 129)
{
g_selected = false
return
}
}
if (g_selected)
return
g_selected = true
new menu[512], a, mkeys = (1<<SELECTMAPS + 1)
new pos = format(menu, 511, g_coloredMenus ? "\y%L:\w^n^n" : "%L:^n^n", LANG_SERVER, "CHOOSE_NEXTM")
new dmax = (g_mapNums > SELECTMAPS) ? SELECTMAPS : g_mapNums
for (g_mapVoteNum = 0; g_mapVoteNum < dmax; ++g_mapVoteNum)
{
a = random_num(0, g_mapNums - 1)
while (isInMenu(a))
if (++a >= g_mapNums) a = 0
g_nextName[g_mapVoteNum] = a
pos += format(menu[pos], 511, "%d. %a^n", g_mapVoteNum + 1, ArrayGetStringHandle(g_mapName, a));
mkeys |= (1<<g_mapVoteNum)
g_voteCount[g_mapVoteNum] = 0
}
menu[pos++] = '^n'
g_voteCount[SELECTMAPS] = 0
g_voteCount[SELECTMAPS + 1] = 0
new mapname[32]
get_mapname(mapname, 31)
if ((winlimit + maxrounds) == 0 && (get_cvar_float("mp_timelimit") < get_cvar_float("amx_extendmap_max")))
{
pos += format(menu[pos], 511, "%d. %L^n", SELECTMAPS + 1, LANG_SERVER, "EXTED_MAP", mapname)
mkeys |= (1<<SELECTMAPS)
}
format(menu[pos], 511, "%d. %L", SELECTMAPS+2, LANG_SERVER, "RETRY_MAP")
new MenuName[64]
format(MenuName, 63, "%L", "en", "CHOOSE_NEXTM")
show_menu(0, mkeys, menu, 15, MenuName)
set_task(15.0, "checkVotes")
client_print(0, print_chat, "%L", LANG_SERVER, "TIME_CHOOSE")
client_cmd(0, "spk Gman/Gman_Choose2")
log_amx("###[MCP]### Iniciada Votacion para el siguiente Mapa")
}
stock bool:ValidMap(mapname[])
{
if (!file_exists(maps_played_File)){
server_print("###[MCP]### %s --->[ERROR2]", maps_played_File)
return false;
}
if ( is_map_valid(mapname) )
{
for (new i = 0; i < maps_played; ++i) {
if (equali(mapname, mapname_played[i])){//que si SI esta en la lista de jugados
return false;
}
}//que NO esta en la lista de jugados
return true;
}
// If the is_map_valid check failed, check the end of the string
new len = strlen(mapname) - 4;
// The mapname was too short to possibly house the .bsp extension
if (len < 0)
{
return false;
}
if ( equali(mapname[len], ".bsp") )
{
// If the ending was .bsp, then cut it off.
// the string is byref'ed, so this copies back to the loaded text.
mapname[len] = '^0';
// recheck
if ( is_map_valid(mapname) )
{
for (new i = 0; i < maps_played; ++i) {
if (equali(mapname, mapname_played[i])){//que si SI esta en la lista de jugados
return false;
}
}//que NO esta en la lista de jugados
return true;
}
}
return false;
}
loadSettings(filename[])
{
if (!file_exists(filename))
return 0
new szText[32]
new currentMap[32]
new buff[256];
get_mapname(currentMap, 31)
new fp=fopen(filename,"r");
while (!feof(fp))
{
buff[0]='^0';
fgets(fp, buff, charsof(buff));
parse(buff, szText, charsof(szText));
if (szText[0] != ';' &&
ValidMap(szText) &&
!equali(szText, g_lastMap) &&
!equali(szText, currentMap))
{
ArrayPushString(g_mapName, szText);
++g_mapNums;
}
}
fclose(fp);
return g_mapNums
}
public team_score()
{
new team[2]
read_data(1, team, 1)
g_teamScore[(team[0]=='C') ? 0 : 1] = read_data(2)
}