- Vreau sa se tina cont, daca e admin on pe server (flagul c) pluginul sa nu ruleze
- Votul hartilor sa se desfasoare precum un vot normal, dintr-un fisier precum mapcycle (minmaps - aici adaug eu hartile)
- numarul de jucatori minim il setez eu din cvar (deja exista)
- Sa existe optiune de prelungire a timpului mapei actuale, pe langa optiunea de a alege alte harti (un fel de galileo)
Code: Select all
#include <amxmodx>
#define PLUGIN "MinPlayersMapChanger"
#define VERSION "1.0"
#define AUTHOR "ExoTiQ"
new mpm_map, mpm_players
new vote_yes, vote_no
new mmp_on = 1
new menu
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
mpm_map = register_cvar("amx_mpm_map", "de_dust2_2x2")
mpm_players = register_cvar("amx_mpm_players", "10")
}
public mpm(id) {
if(get_playersnum() <= get_pcvar_num(mpm_players)) {
new mpm_map_str[32], nameMap[128]
get_pcvar_string(mpm_map, mpm_map_str, charsmax(mpm_map_str))
format(nameMap, 127, "\ySchimbam Harta pe %s?", mpm_map_str)
menu=menu_create(nameMap,"mpm_menu")
menu_additem(menu,"\wDa","1")
menu_additem(menu,"\wNu","2")
menu_setprop(menu,MPROP_EXIT,MEXIT_NEVER)
menu_display(id,menu,0)
set_task(get_cvar_float("amx_vote_time"), "mpm_result")
}
}
public mpm_menu(id,menu,item) {
new data[6],iName[64],access, callback, Name[32]
get_user_name(id, Name, charsmax(Name))
menu_item_getinfo(menu,item,access,data,5,iName,63,callback)
new key = str_to_num(data)
switch(key) {
case 1:{
vote_yes = vote_yes + 1
ColorChat(0, BLUE, "^01[^04Map Changer Information^01] Jucatorul ^03%s ^01a votat ^04[Pentru].", Name)
}
case 2:{
vote_no = vote_no + 1
ColorChat(0, RED, "^01[^04Map Changer Information^01] Jucatorul ^03%s ^01a votat ^04[Contra].", Name)
}
}
return PLUGIN_HANDLED
}
public mpm_result() {
new Map[32], mpm_map_str[32]
menu_destroy(menu)
get_mapname(Map, charsmax(Map))
get_pcvar_string(mpm_map, mpm_map_str, charsmax(mpm_map_str))
if(vote_yes >= vote_no) {
ColorChat(0, RED, "^01[^04Map Changer Information^01] Votarea s-a incheiat, urmatoarea harta va fi ^03%s^01.", mpm_map_str)
set_task(4.0, "mpm_changelevel")
}
else {
ColorChat(0, RED, "^01[^04Map Changer Information^01] Datorita votarii, harta curenta va fi extinsa pentru ^03%d^01 minute.", get_cvar_num("amx_extendmap_step"))
vote_yes = 0
vote_no = 0
set_task((get_cvar_float("amx_extendmap_step")*30), "mpm_extend")
}
}
public mpm_changelevel() {
new mpm_map_str[32]
get_pcvar_string(mpm_map, mpm_map_str, charsmax(mpm_map_str))
server_cmd("changelevel %s", mpm_map_str)
}
public mpm_extend() {
mmp_on = 1
}
public client_putinserver(id) {
if(mmp_on != 1)
return PLUGIN_HANDLED
new Players[32], Map[32], mpm_map_str[32]
get_mapname(Map, charsmax(Map))
get_pcvar_string(mpm_map, mpm_map_str, charsmax(mpm_map_str))
if(equali(Map, mpm_map_str))
return PLUGIN_HANDLED
new playerCount, i, player
get_players(Players, playerCount, "ch")
mmp_on = 0
for (i=0; i<playerCount; i++) {
player = Players[i]
set_task(20.0, "mpm", player)
}
return PLUGIN_CONTINUE
}
public client_disconnect(id) {
if(mmp_on != 1)
return PLUGIN_HANDLED
new Players[32], Map[32], mpm_map_str[32]
get_mapname(Map, charsmax(Map))
get_pcvar_string(mpm_map, mpm_map_str, charsmax(mpm_map_str))
if(equali(Map, mpm_map_str))
return PLUGIN_HANDLED
new playerCount, i, player
get_players(Players, playerCount, "ch")
for (i=0; i<playerCount; i++) {
player = Players[i]
set_task(20.0, "mpm", player)
}
return PLUGIN_CONTINUE
}
Scuze, am uitat sa specific: pluginul sa ruleze in intervalul orar 10:00 (ziua) - 02:00 (noaptea)