Дата: Воскресенье, 20.01.2019, 13:12 | Сообщение #
1
Legend User
VIP
Offline
Дарова юзеры. Нужна ваша помощь, когда проголосовали игроки 50 (10 ЗА) на 50 (10 Против) вотебан не банит , а отклоняет бан, что тут дописать чтобы забанил? Исходник:
#include
#include #include #define MAX_players 32 #define MAX_menudata 1024 new ga_PlayerName[MAX_players][32] new ga_PlayerAuthID[MAX_players][35] new ga_PlayerID[MAX_players] new ga_PlayerIP[MAX_players][16] new ga_MenuData[MAX_menudata] new ga_Choice[2] new gi_VoteStarter new gi_MenuPosition new gi_Sellection new gi_TotalPlayers new gi_SysTimeOffset = 0 new i //pcvars new gi_LastTime new gi_DelayTime new gf_Ratio new gf_MinVoters new gf_BF_Ratio new gi_BanTime new gi_Disable new gi_BanType new bool:dont[33] new timer public plugin_init() { register_plugin("Voteban","1.2","") register_clcmd("say /voteban","SayIt" ) register_clcmd("say /vtb","SayIt" ) register_menucmd(register_menuid("ChoosePlayer"), 1023, "ChooseMenu") register_menucmd(register_menuid("VoteMenu"), 1023, "CountVotes") gi_DelayTime=register_cvar("bh_voteban_delaytime","15") gi_LastTime=register_cvar("bh_voteban_lasttime","0") gf_Ratio=register_cvar("bh_voteban_ratio","0.70") gf_MinVoters=register_cvar("bh_voteban_minvoters","1") gi_BanTime=register_cvar("bh_voteban_bantime","15") gi_Disable=register_cvar("bh_voteban_disable","0") gf_BF_Ratio=register_cvar("bh_voteban_bf_ratio","0.0") gi_BanType=register_cvar("bh_voteban_type","2") } public SayIt(id) { if((get_user_flags(id) & ADMIN_CHAT)) { if(get_pcvar_num(gi_Disable)) { client_printcolor(id,"[AMXX]amx_votaban disabled") return 0 } if( dont [id]) { client_printcolor(id,"/y[ /gVote Ban /y] /ctrСледущее голосование доступно через /g%d /ctrсекунд/g.", timer) return 0 } if(task_exists()) { client_printcolor(id,"/y[ /gVote Ban /y] /ctrДождитесь завершения предыдущего голосования.") return 0 } get_players( ga_PlayerID, gi_TotalPlayers ) for(i=0; i { new TempID = ga_PlayerIDif(TempID == id) gi_VoteStarter=i get_user_name( TempID, ga_PlayerName, 31 ) get_user_authid( TempID, ga_PlayerAuthID, 34 ) get_user_ip( TempID, ga_PlayerIP, 15, 1 ) } gi_MenuPosition = 0 ShowPlayerMenu(id) } else if(get_user_flags(id) & ADMIN_RESERVATION) { client_printcolor(id,"/y[ /gVote Ban /y] /ctrУ тебя черепок, /gВотебан /ctrвременно не доступен!") } else client_printcolor(id, "/g[ /ctrONLY FOR VIP: /g] /ybuy VIP account here: /ctrvk.com/killzmw" ) return 0 } public ShowPlayerMenu(id) { new arrayloc = 0 new keys = (1<<9) arrayloc = format(ga_MenuData,(MAX_menudata-1),"\rVIP Vote Ban Menu:\w^n") for(i=0; i<8; i++) if( gi_TotalPlayers>(gi_MenuPosition+i) ) { arrayloc += format(ga_MenuData[arrayloc],(MAX_menudata-1-arrayloc),"%d. %s^n", i+1, ga_PlayerName[gi_MenuPosition+i]) keys |= (1< } if( gi_TotalPlayers>(gi_MenuPosition+8) ) { arrayloc += format(ga_MenuData[arrayloc],(MAX_menudata-1-arrayloc),"^n9. further") keys |= (1<<8) } arrayloc += format(ga_MenuData[arrayloc],(MAX_menudata-1-arrayloc),"^n0. Exit") show_menu(id, keys, ga_MenuData, 20, "ChoosePlayer") return PLUGIN_HANDLED } public ChooseMenu(id, key) { switch(key) { case 8: { gi_MenuPosition=gi_MenuPosition+8 ShowPlayerMenu(id) } case 9: { if(gi_MenuPosition>=8) { gi_MenuPosition=gi_MenuPosition-8 ShowPlayerMenu(id) } else return 0 } default: { gi_Sellection=gi_MenuPosition+key new player = get_user_index(ga_PlayerName[gi_Sellection]) if(get_user_flags(player) & ADMIN_CHAT) { client_printcolor(id,"/y[ /gVote Ban /y] /ctrYou cannot ban VIP`s & ADMIN`s /g:)") return 1 } else { dont [id]= true timer = 90 set_task(1.0,"cmdOffD",id,_,_,"a",100) run_vote() return 0 } } } return PLUGIN_HANDLED } public cmdOffD(id) { timer-=1 if(timer <= 0) dont [id]= false } public run_vote() { log_amx("Воте-бан запустил %s против %s %s", ga_PlayerName[gi_VoteStarter], ga_PlayerName[gi_Sellection], ga_PlayerAuthID[gi_Sellection]) client_printcolor(0,"/y[ /gVote Ban /y] /ctrVoting started by /g%s /ctrfor /g%s", ga_PlayerName[gi_VoteStarter], ga_PlayerName[gi_Sellection]) format(ga_MenuData,(MAX_menudata-1),"\rBan \y%s \rfor \w%d\r minutes?^n\r1. \wYes ^n\r2. \wNo",ga_PlayerName[gi_Sellection], get_pcvar_num(gi_BanTime)) ga_Choice[0] = 0 ga_Choice[1] = 0 show_menu( 0, (1<<0)|(1<<1), ga_MenuData, 15, "VoteMenu" ) set_task(15.0,"outcom") return 0 } public CountVotes(id, key) { ++ga_Choice [key]return PLUGIN_HANDLED } public outcom() { new TotalVotes = ga_Choice[0] + ga_Choice[1] new Float:result = (float(ga_Choice[0]) / float(TotalVotes)) if( get_pcvar_float(gf_MinVoters) >= ( float(TotalVotes) / float(gi_TotalPlayers) ) ) { client_printcolor(0,"/g [AMXX]/ctrNot enough voters to ban /g%s!", ga_PlayerName[gi_Sellection]) return 0 } else { new voted_no = gi_TotalPlayers-ga_Choice[0] if( ga_Choice[0] > voted_no ) { ColorChat(0,RED,"^x01[^x04 Vote Ban ^x01] The vote succeeded: ^x04%s ^x01is banned for ^x03%d ^x01minutes^x04.", ga_PlayerName[gi_Sellection], get_pcvar_num(gi_BanTime)) log_amx(" [AMXX]The vote succeeded: %s is banned for %d minutes", ga_PlayerAuthID[gi_Sellection], get_pcvar_num(gi_BanTime)) ActualBan(gi_Sellection) } else { client_printcolor(0,"/y[/g Vote Ban /y] /ctrThe vote did not succeeded/g!") log_amx(" [AMXX]The voteban dit not sucseed.") } } client_printcolor(0,"/y[/g Vote Ban /y] /yA total of /g%d /yplayers - /ctr[ /yVoted: Yes /g%d /ctr]/y - /ctr[ /yVoted: No /g%d /ctr]", gi_TotalPlayers, ga_Choice[0],gi_TotalPlayers-ga_Choice[0]) return 0; } public ActualBan(Selected) { new Type = get_pcvar_num(gi_BanType) switch(Type) { case 1: server_cmd("addip %d %s",get_pcvar_num(gi_BanTime),ga_PlayerIP[Selected]) case 2: server_cmd("amx_ban %d %s Voteban by %s",get_pcvar_num(gi_BanTime), ga_PlayerAuthID [Selected], ga_PlayerName[gi_VoteStarter]) default: server_cmd("banid %d %s kick",get_pcvar_num(gi_BanTime),ga_PlayerAuthID[Selected]) } return 0 } stock client_printcolor(const id, const input[], any:...) { new iCount = 1, iPlayers[32] static szMsg[191] vformat(szMsg, charsmax(szMsg), input, 3) replace_all(szMsg, 190, "/g", "^4") // green txt replace_all(szMsg, 190, "/y", "^1") // orange txt replace_all(szMsg, 190, "/ctr", "^3") // team txt replace_all(szMsg, 190, "/w", "^0") // team txt if(id) iPlayers[0] = id else get_players(iPlayers, iCount, "ch") for (new i = 0; i < iCount; i++) { if (is_user_connected(iPlayers)) { message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, iPlayers) write_byte(iPlayers) write_string(szMsg) message_end() } } }
Дата: Воскресенье, 20.01.2019, 13:43 | Сообщение #
2
Профи-ветеран
Offline
тут правильно бан прописать не помешало бы, от настроек системы банов зависит public ActualBan(Selected) { new Type = get_pcvar_num(gi_BanType) switch(Type) { case 1: server_cmd("addip %d %s",get_pcvar_num(gi_BanTime),ga_PlayerIP[Selected]) case 2: server_cmd("amx_ban %d %s Voteban by %s",get_pcvar_num(gi_BanTime), ga_PlayerAuthID [Selected], ga_PlayerName[gi_VoteStarter]) default: server_cmd("banid %d %s kick",get_pcvar_num(gi_BanTime),ga_PlayerAuthID[Selected]) } return 0 }
Дата: Воскресенье, 20.01.2019, 16:31 | Сообщение #
3
Строку Код
if( ga_Choice[0] > voted_no )
Сменить на Код
if( ga_Choice[0] >= voted_no )