Код:
#include <amxmodx>
#include <engine>
#include <fakemeta>
new bool:g_locked[33]
new g_transw[33]
new cvar_max,cvar_min
stock createrandnum(id)//Чтобы наверняка исключить возможность совпадения с правильным ответом
{
new r=random_num(0,80)
if(r==g_transw[id])random_num(1,2)==2?r++:r-- //Гениально просто пипец как
return r
}
public plugin_init()
{
register_plugin("Antibot checker","0.1beta","KL")
register_forward(FM_Voice_SetClientListening, "fwd_SetVoicePlayers")
new gmsgSayText = get_user_msgid ( "SayText" );
register_message ( gmsgSayText, "SayText" );
cvar_max=register_cvar("antibot_maxnum","20")//максимальное число
cvar_min=register_cvar("antibot_minnum","1")//минимальное число
}
public SayText ( msgid, receiver, sender )//блокируем чат
{
if(g_locked[sender])
{
return PLUGIN_HANDLED
}
}
public client_putinserver(id)
{
set_task(3.0,"create_menu",id)
g_locked[id]=true
}
public client_disconnect(id)
{
remove_task(id)
}
public create_menu(id)
{
new g_string[33]
new min=get_pcvar_num(cvar_min)
new max=get_pcvar_num(cvar_max)
new a=random_num(min,max)
new b=random_num(min,max)
new c=random_num(1,2)
new result=c==2?a+b:a-b
new mn[2]
g_transw[id]=random_num(1,4)
formatex(g_string,charsmax(g_string),"Проверка!%i %c %i = ? ",a,c==2?'+':'-',b)
new menu=menu_create(g_string,"menu_handler")
for(new i=1;i<5;i++)
{
formatex(g_string,charsmax(g_string),"%i",i==g_transw[id]?result:createrandnum(id))
mn[0]=i
mn[1]=0
menu_additem(menu,g_string,mn)
}
menu_display(id,menu,0)
}
public menu_handler(id,menu,item)
{
new data[6], iName[64],access, callback
menu_item_getinfo(menu, item, access, data,5, iName, 63, callback)
menu_destroy(menu)
new key=data[0]
if(key!=g_transw[id])
{
server_cmd("kick #%d ^"Попробуйте снова!^"", get_user_userid(id))
return PLUGIN_HANDLED
}
//Если проверка пройдена,врубить микрофон
g_locked[id]=false
}
public fwd_SetVoicePlayers(receiver, sender, bool:listen)//блокируем микрофон
{
if(g_locked[sender])
{
engfunc(EngFunc_SetClientListening, receiver, sender, false)
return FMRES_SUPERCEDE
}
}