Русское сообщество по скриптингу

Проверка на бота  [Решено]

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Проверка на бота

Сообщение Ronny123456789 » 02 апр 2017, 12:53

Здравствуйте! Есть у меня такой вот плагин
Код: Выделить всё
#include <amxmodx>
#include <amxmisc>

#define ADMIN ADMIN_MAP

new msg_block[128]
new 
tabul[9][] = {
"^t",                //0
"  ^t",                //1
"    ^t",            //2
"      ^t",            //3
"        ^t",            //4
"          ^t",            //5
"            ^t",        //6
"              ^t",        //7
"                ^t"};        //8

public plugin_init()
{
    
register_plugin("block ip""0.2""legenda");
    
register_concmd("amx_readip""readip"ADMIN"- displays ip who is on server")
    
register_concmd("amx_blockipmenu""menu_chooseuserforblockip"ADMIN"- displays menu for ban ip or network")
}

public 
readip(idlevelcid)
{
    if (!
cmd_access(idlevelcid0))
        return 
PLUGIN_HANDLED
    
    
new inumiPlayers[32], nickname[32], ip[32], msg[128]
    
get_players(iPlayersinum)
    
client_print(id,print_console,"==================================================^n Users:%d",inum)
    
client_print(id,print_console,"# ^t^t^t^tip addres^t^t^t^t^t^tname")
    for (new 
0inum; ++i)
    {
        new 
player iPlayers[i]
        
get_user_name(player,nickname,31)
        
get_user_ip(player,ip,31)
        
format(nickname,10"%s",nickname)
        new 
i_tabul 21-strlen(ip)
        (
<=9) ? format(msg,127,"[%d]  ^t%s%s%s",i+1,ip,tabul[i_tabul],nickname) : format(msg,127,"[%d]^t%s%s%s",i+1,ip,tabul[i_tabul],nickname)    
        
client_print(id,print_console,msg)
    }
    
client_print(id,print_console,"==================================================^n^n")

    return 
PLUGIN_HANDLED
}

public 
menu_chooseuserforblockip(idlevelcid)
{
    if (!
cmd_access(idlevelcid0))
        return 
PLUGIN_HANDLED

    
new p_Menu menu_create("\rPlayer menu:""menu_chooose_user")
    new 
s_Players[32], i_Numi_Player
    
new s_Name[32], s_Player[10]
    
get_players(s_Playersi_Num)

    for (new 
ii_Numi++)
    {
        
i_Player s_Players[i]
        
get_user_name(i_Players_Namecharsmax(s_Name))
        
num_to_str(i_Players_Playercharsmax(s_Player))
        
menu_additem(p_Menus_Names_Player0)
    }

    
menu_display(idp_Menu0)

    return 
PLUGIN_HANDLED
}

public 
menu_chooose_user(idmenuitem)
{
    if (
item == MENU_EXIT)
    {
        
menu_destroy(menu)
        return 
PLUGIN_HANDLED
    
}
    
    new 
s_Data[6], s_Name[64], i_Accessi_Callbacknickname[32]
    
menu_item_getinfo(menuitemi_Accesss_Datacharsmax(s_Data), s_Namecharsmax(s_Name), i_Callback)
    new 
i_Player str_to_num(s_Data)
    
get_user_name(i_Player,nickname,31)
    
choose_network(idi_Player)
    
menu_destroy(menu)
    return 
PLUGIN_HANDLED
}

public 
choose_network(idi_Player)
{
    new 
player_ip[23
    
get_user_ip(i_Playerplayer_ip22,1
    
replace_all(player_ip,22,"."," ")

    new 
user_name_admin[32],user_name_block[32]
    
get_user_name(id,user_name_admin,31)
    
get_user_name(i_Player,user_name_block,31)
    
format(msg_block127"%s block %s"user_name_adminuser_name_block)

    new 
ip_Menu menu_create("\rNetwork menu""menu_block_network")


    new 
okteta1[4],okteta2[4],okteta3[4],okteta4[4]
    
parse(player_ip,okteta1,charsmax(okteta1),okteta2,charsmax(okteta2),okteta3,charsmax(okteta3),okteta4,charsmax(okteta4))
    new 
n0[23
    
// n1[23], n2[23], n3[23]

    
format(n022"%s.%s.%s.%s"okteta1okteta2,okteta3,okteta4)
    
//format(n1, 22, "%s.%s.%s.0", okteta1, okteta2,okteta3)    
    //format(n2, 22, "%s.%s.0.0", okteta1, okteta2)    
    //format(n3, 22, "%s.0.0.0", okteta1)    

//    menu_addtext(ip_Menu, "XXXX")
    
menu_additem(ip_Menun0,n00)
    
//menu_additem(ip_Menu, n1,n1, 0)
    //menu_additem(ip_Menu, n2,n2, 0)
    //menu_additem(ip_Menu, n3,n3, 0)



    
menu_display(idip_Menu0)
    return 
PLUGIN_HANDLED
}

public 
menu_block_network(idmenuitem)
{
    if (
item == MENU_EXIT)
    {
        
menu_destroy(menu)
        return 
PLUGIN_HANDLED
    
}
    
    new 
s_Data[23], s_Name[64], i_Accessi_Callback
    menu_item_getinfo
(menuitemi_Accesss_Datacharsmax(s_Data), s_Namecharsmax(s_Name), i_Callback)
    
server_cmd("addip 360 %s ; wait;wait;wait; writeip"s_Data)

    
client_print(id,print_console,"^n^n==================================================")
    
client_print(id,print_console,"%s ip is: %s",msg_blocks_Data)
    
client_print(id,print_console,"==================================================^n^n")
    
log_to_file("block_ip.log","%s ip is: %s",msg_blocks_Data)

    
menu_destroy(menu)

    return 
PLUGIN_HANDLED

Хочу сделать, чтобы при вызове amx_blockipmenu - бота нельзя было забанить и т.п. Т.е. на бота не должен плагин не должен действовать. Подскажите, пожалуйста, куда нужно вставлять проверку is_user_bot(id) ?
Аватара пользователя
Ronny123456789
 
Сообщения: 117
Зарегистрирован: 21 июл 2014, 13:52
Благодарил (а): 48 раз.
Поблагодарили: 0 раз.
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source
Team Fortress II
Left 4 Dead

Re: Проверка на бота

Сообщение flymic24 » 02 апр 2017, 13:14

Ronny123456789,
Код: Выделить всё
public menu_chooose_user(idmenuitem)
{
    if (
item == MENU_EXIT)
    {
        
menu_destroy(menu)
        return 
PLUGIN_HANDLED
    
}
    
    new 
s_Data[6], s_Name[64], i_Accessi_Callbacknickname[32]
    
menu_item_getinfo(menuitemi_Accesss_Datacharsmax(s_Data), s_Namecharsmax(s_Name), i_Callback)
   
    new 
i_Player str_to_num(s_Data)
    
    if (!
is_user_bot(i_Player))
    {
        
get_user_name(i_Playernickname31);
        
choose_network(idi_Player);
    }
    else
    {
        
client_print(idprint_chat"Ботов нельзя обижать");
    }
    
    
menu_destroy(menu)
    
    return 
PLUGIN_HANDLED
}
 
Аватара пользователя
flymic24
 
Сообщения: 209
Зарегистрирован: 05 окт 2012, 17:29
Откуда: Bryansk
Благодарил (а): 4 раз.
Поблагодарили: 76 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Re: Проверка на бота  [Решено]

Сообщение NEoMASTERR » 02 апр 2017, 13:19

Это
Код: Выделить всё
get_players(s_Playersi_Num

Достаточно изменить на это
Код: Выделить всё
get_players(s_Playersi_Num"c"
Аватара пользователя
NEoMASTERR
 
Сообщения: 832
Зарегистрирован: 05 янв 2015, 16:38
Благодарил (а): 43 раз.
Поблагодарили: 188 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6


Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10