1. Boss Пользователь

    Регистрация:
    07.10.15
    Сообщения:
    472
    Симпатии:
    119
    Пол:
    Мужской
    Нашел для себя удобный скрипт антимата
    Но чет не работает, помогите исправить ошибку.
    все в архиве. база у меня на 450 слов мата
    ошибка дебага такая.
    L 05/11/2016 - 08:05:54: [AMXX] Displaying debug trace (plugin "new_antimat.amxx")
    L 05/11/2016 - 08:05:54: [AMXX] Run time error 4: index out of bounds
    L 05/11/2016 - 08:05:54: [AMXX] [0] new_antimat.sma::loadfile (line 76)
     

    Вложения:

    • antimat.rar
      Размер файла:
      12,7 КБ
      Просмотров:
      19
  2. Boss Пользователь

    Регистрация:
    07.10.15
    Сообщения:
    472
    Симпатии:
    119
    Пол:
    Мужской
    я так понимаю что в лимит не влажу что ли?
    Код:
    new text[128]
       new temp[128]
       new i = 0
    
       if (file_exists(config))
       {
          while(read_file(config,line,text,255,textsize))
          {
             format(temp,128,"%s",text)
             ReplaceText[i++]=temp
     
  3. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.596
    Симпатии:
    4.171
    Пол:
    Мужской
    128 замени на charsmax(temp) ну или если говнокодить, то на 127

    да и форматекс тут не нужен

    ReplaceText[i++]=text
     
  4. Boss Пользователь

    Регистрация:
    07.10.15
    Сообщения:
    472
    Симпатии:
    119
    Пол:
    Мужской
    Код:
             format(temp, charsmax(temp),"%s",text)
             ReplaceText[i++]=temp
    так что ли?
    Код не мой :nosepick:
    --- добавлено 11.05.16 ---
    Код:
    public loadfile()
    {
       new config[64]
       get_configsdir(config, 64)
       format(config, 63, "%s/antimat.ini", config)
      
       new line = 0
       new textsize = 0
       new text[128]
      // new temp[128]
       new i = 0
    
       if (file_exists(config))
       {
          while(read_file(config,line,text,255,textsize))
          {
    //         format(temp,128,"%s",text)
             ReplaceText[i++]=text
             line++                      
          }
       }
    } 
    ну если правильно понял то так да вань?
     
  5. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.596
    Симпатии:
    4.171
    Пол:
    Мужской
    Boss, вообще говно код.
    возьми с ad manager
     
  6. Boss Пользователь

    Регистрация:
    07.10.15
    Сообщения:
    472
    Симпатии:
    119
    Пол:
    Мужской
    Код:
    #include <amxmodx>
    #include <amxmisc>
    
    #define NAME "AntiMat"
    #define VERSION "1.0"
    #define AUTHOR "Crash94"
    
    stock const ReplaceText[128][128]
    
    new Msg[512], szText[ 555 char ]
    new warning_chat[33]
    new g_Warning, g_Punishment, g_Bantime
    
    public plugin_init()
    {
       register_plugin(NAME, VERSION, AUTHOR)
    
       register_clcmd("say", "CheckSay")
       register_clcmd("say_team", "CheckSayTeam")
    
       g_Warning = register_cvar("amx_antimat_warning", "3")
       g_Punishment = register_cvar("amx_antimat_punishment", "0")
       g_Bantime = register_cvar("amx_antimat_bantime", "1")
    
       register_dictionary( "antimat.txt" );
       set_task(1.0, "loadfile")
    }
    
    public client_disconnect(id)
    {
       warning_chat[id] = 0
    }
    
    stock ChatColor(const id, const input[], any:...)
    {
        new count = 1, players[32]
        static msg[191]
        vformat(msg, 190, input, 3)
       
        replace_all(msg, 190, "!g", "^4")
        replace_all(msg, 190, "!y", "^1")
        replace_all(msg, 190, "!team", "^3")
       
        if (id) players[0] = id; else get_players(players, count, "ch")
        {
            for (new i = 0; i < count; i++)
            {
                if (is_user_connected(players[i]))
                {
                    message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
                    write_byte(players[i]);
                    write_string(msg);
                    message_end();
                }
            }
        }
    }
    
    public plugin_cfg()
    {
        new file = fopen("addons/amxmodx/configs/antimat.ini", "rt");
        if(file)
        {
            new string[192], message[191];
            while(ad_count < MAX_MSG && !feof(file))
            {
                fgets(file, string, charsmax(string));
    
                if(string[0] != ';' && parse(string, message, charsmax(message)))
                {
                    while(replace(message, charsmax(message), "!n", "^1")) {}
                    while(replace(message, charsmax(message), "!t", "^3")) {}
                    while(replace(message, charsmax(message), "!g", "^4")) {}
                    formatex(adMessages[ad_count++], charsmax(adMessages[]), "^1%s", message);
                }   
            }
            fclose(file);
            if(!ad_count) set_fail_state("Messages not found! Check file ^"addons/amxmodx/configs/antimat.ini^"");
        }
        else set_fail_state("File ^"addons/amxmodx/configs/antimat.ini^" not found!");
    }
    
    public CheckSay(id)
    {
       if(is_user_hltv(id) || is_user_bot(id) || !is_user_connected(id))
       {
          return PLUGIN_CONTINUE;
       }
    
       new message[192],Len
       new szName[32], i
       new iPlayer[32], iNum
    
       read_args(message, 191);
       remove_quotes(message);
    
       get_players(iPlayer, iNum)
       get_user_name(id,szName,31);
    
       for(i = 0 ; i < sizeof (ReplaceText) ; i++)
       {
          if(containi(message, ReplaceText[i]) != -1)
          {
             ++warning_chat[id]
    
             if(is_user_alive(id))
             {
                Len = format(Msg[Len], charsmax(Msg) - 1, "");
                Len += format(Msg[Len], charsmax(Msg) - 1, "!team%s !y: ",szName);
                Len += format(Msg[Len], charsmax(Msg) - 1, "%s",message);
    
                formatex( szText, charsmax( szText ), "!g%L!y", id, "ANTIMAT_REPLACE_TEXT");
                replace_all(Msg, charsmax(Msg), ReplaceText[i], szText)
    
                for(new i; i < iNum; i++)
                {
                   if (is_user_connected(iPlayer[i]) && is_user_alive(iPlayer[i]))
                   {
                      ChatColor(iPlayer[i], Msg)
                   }
                }
                check_warning(id)
             }else{
                Len = format(Msg[Len], charsmax(Msg) - 1, "!y *DEAD* ");
                Len += format(Msg[Len], charsmax(Msg) - 1, "!team%s !y: ",szName);
                Len += format(Msg[Len], charsmax(Msg) - 1, "%s",message);
    
                formatex( szText, charsmax( szText ), "!g%L!y", id, "ANTIMAT_REPLACE_TEXT");
                replace_all(Msg, charsmax(Msg), ReplaceText[i], szText)
    
                for(new i; i < iNum; i++)
                {
                   if (is_user_connected(iPlayer[i]) && !is_user_alive(iPlayer[i]))
                   {
                      ChatColor(iPlayer[i], Msg)
                   }
                }
                check_warning(id)
             }
             return PLUGIN_HANDLED_MAIN
          }
       }
       return PLUGIN_CONTINUE;
    }
    
    public CheckSayTeam(id)
    {
       if(is_user_hltv(id) || is_user_bot(id) || !is_user_connected(id))
       {
          return PLUGIN_CONTINUE;
       }
    
       new message[192],Len
       new szName[32], i, j
       new iPlayer[32], iNum
    
       read_args(message, 191);
       remove_quotes(message);
    
       get_players(iPlayer, iNum)
       get_user_name(id,szName,31);
    
       for(i = 0 ; i < sizeof (ReplaceText) ; i++)
       {
          if(containi(message, ReplaceText[i]) != -1)
          {
             ++warning_chat[id]
    
             if(is_user_alive(id))
             {
                if(get_user_team(id)==1)
                {
                   Len = format(Msg[Len], charsmax(Msg) - 1, "!y(Terrorist)");
                }else{
                   Len = format(Msg[Len], charsmax(Msg) - 1, "!y(Counter-Terrorist)");
                }
    
                Len += format(Msg[Len], charsmax(Msg) - 1, "!team%s !y: ",szName);
                Len += format(Msg[Len], charsmax(Msg) - 1, "%s",message);
    
                formatex( szText, charsmax( szText ), "!g%L!y", id, "ANTIMAT_REPLACE_TEXT");
                replace_all(Msg, charsmax(Msg), ReplaceText[i][j], szText)
    
                for(new i; i < iNum; i++)
                {
                   if (is_user_connected(iPlayer[i]) && is_user_alive(iPlayer[i]))
                   {
                      ChatColor(iPlayer[i], Msg)
                   }
                }
                check_warning(id)
             }else{
                if(get_user_team(id)==1)
                {
                   Len = format(Msg[Len], charsmax(Msg) - 1, "!y*DEAD*(Terrorist)");
                }else{
                   Len = format(Msg[Len], charsmax(Msg) - 1, "!y*DEAD*(Counter-Terrorist)");
                }
    
                Len += format(Msg[Len], charsmax(Msg) - 1, "!team%s !y: ",szName);
                Len += format(Msg[Len], charsmax(Msg) - 1, "%s",message);
    
                formatex( szText, charsmax( szText ), "!g%L!y", id, "ANTIMAT_REPLACE_TEXT");
                replace_all(Msg, charsmax(Msg), ReplaceText[i][j], szText)
    
                for(new i; i < iNum; i++)
                {
                   if (is_user_connected(iPlayer[i]) && !is_user_alive(iPlayer[i]))
                   {
                      ChatColor(iPlayer[i], Msg)
                   }
                }
                check_warning(id)
             }
             return PLUGIN_HANDLED_MAIN
          }
       }
       return PLUGIN_CONTINUE;
    }
    
    public check_warning(id)
    {
       if(warning_chat[id]>=get_pcvar_num(g_Warning))
       {
          switch(get_pcvar_num(g_Punishment))
          {
             case 0:
             {
                 new name[32]
                 get_user_name(id, name, 31)
                 server_cmd("kick #%d ^"%L^"", get_user_userid(id), id, "ANTIMAT_REASON_KICK")
                 ChatColor(0, "%L",0,"ANTIMAT_KICKPLAYER", name)
             }
    
             case 1:
             {
                 new ip[32], name[32]
                 get_user_ip(id, ip, 31, 1)
                 get_user_name(id, name, 31)
                 server_cmd("addip %d %s; writeip", get_pcvar_num(g_Bantime), ip)
                 ChatColor(0, "%L",0,"ANTIMAT_BANPLAYER", name, get_pcvar_num(g_Bantime))
             }
         default:
             {
                 new name[32]
                 get_user_name(id, name, 31)
                 server_cmd("kick #%d ^"%L^"", get_user_userid(id), id, "ANTIMAT_REASON_KICK")
                 ChatColor(0, "%L",0,"ANTIMAT_KICKPLAYER", name)
              }   
          }
       }else{
          ChatColor(id, "%L",0,"ANTIMAT_WARNING_INFO")
          ChatColor(id, "%L",0,"ANTIMAT_WARNING_INFO1", warning_chat[id], get_pcvar_num(g_Warning))
       }
    }
    Вышло так)
     
  7. Dmitry VIP user

    Регистрация:
    24.07.15
    Сообщения:
    228
    Симпатии:
    36
    Пол:
    Мужской
    ICQ:
    468603882
    Какой же КС без мата...)))Надо дать людям расслабиться))
     
  8. Boss Пользователь

    Регистрация:
    07.10.15
    Сообщения:
    472
    Симпатии:
    119
    Пол:
    Мужской
    Dmitry, ну пусть у тебя на сервере и расслабляются, а мне и в жизни хватает))
     
  9. Boss Пользователь

    Регистрация:
    07.10.15
    Сообщения:
    472
    Симпатии:
    119
    Пол:
    Мужской
    в общем сделал так все равно ошибка
    Код:
    public loadfile()
    {
       new config[64]
       get_configsdir(config, 64)
       format(config, 63, "%s/antimat.ini", config)
       
       new line = 0
       new textsize = 0
       new text[128]
       new temp[128]
       new i = 0               
    
       if (file_exists(config))
       {
          while(read_file(config,line,text,255,textsize))
          {
             format(temp,charsmax(temp),"%s",text)
             ReplaceText[i++]=temp
             line++                       
          }
       }
    } 
    L 05/11/2016 - 22:25:51: Start of error session.
    L 05/11/2016 - 22:25:51: Info (map "de_dust2_2x2") (file "addons/amxmodx/logs/error_20160511.log")
    L 05/11/2016 - 22:25:51: [AMXX] Displaying debug trace (plugin "new_antimat.amxx")
    L 05/11/2016 - 22:25:51: [AMXX] Run time error 4: index out of bounds
    L 05/11/2016 - 22:25:51: [AMXX] [0] new_antimat.sma::loadfile (line 76)
     
  10. Boss Пользователь

    Регистрация:
    07.10.15
    Сообщения:
    472
    Симпатии:
    119
    Пол:
    Мужской
    так у меня нечего и не вышло что делать?
    ошибка та же.
    L 05/11/2016 - 08:05:54: [AMXX] Displaying debug trace (plugin "new_antimat.amxx")
    L 05/11/2016 - 08:05:54: [AMXX] Run time error 4: index out of bounds
    L 05/11/2016 - 08:05:54: [AMXX] [0] new_antimat.sma::loadfile (line 76)
     
  11. maFFyoZZyk Черный Жнец ^_^ Команда форума

    Регистрация:
    14.01.16
    Сообщения:
    1.248
    Симпатии:
    548
    Пол:
    Мужской

    Я вот этим раньше пользовался
     
  12. Valer4 Пользователь

    Регистрация:
    20.05.16
    Сообщения:
    43
    Симпатии:
    5
    Пол:
    Мужской
    ReplaceText[128][128] - ограничен на 128 строк, а цикл нет, используй for или безразмерные массивы.
     
  13. Boss Пользователь

    Регистрация:
    07.10.15
    Сообщения:
    472
    Симпатии:
    119
    Пол:
    Мужской
    public loadfile()
    {
    new config[64]
    get_configsdir(config, 64)
    format(config, 63, "%s/antimat.ini", config)

    new line = 0
    new textsize = 0
    new text[128]
    new temp[128]
    new i = 0

    if (file_exists(config))
    {
    while(read_file(config,line,text,255,textsize)) - 255 à ReplaceText[128][128] -> ReplaceText[128][256];
    {
    format(temp,127,"%s",text)
    ReplaceText[i++]=temp
    line++
    }
    }
    }
    не канает ошибка. не компилится.
    --- добавлено 23.05.16 ---
    Valer4, я чуть в скритинге далек, покажи пример. или лучше как это сделать, то бы юзать к примеру базу с 1000 слов и т.д.
     
  14. Valer4 Пользователь

    Регистрация:
    20.05.16
    Сообщения:
    43
    Симпатии:
    5
    Пол:
    Мужской
    Но лучше использовать безразмерные массивы.
     

    Вложения:

    • new_antimat.sma
      Размер файла:
      7,1 КБ
      Просмотров:
      5
  15. Boss Пользователь

    Регистрация:
    07.10.15
    Сообщения:
    472
    Симпатии:
    119
    Пол:
    Мужской
    ладно, то что запустился без проблем уже хорошо, но попробовав в чат пописать гадости он мне показал фигу, и молчит) Варианты?
    L 05/23/2016 - 06:38:45: Invalid multi-lingual line (file "cstrike/addons/amxmodx/data/lang/antimat.txt" line 1)
     
  16. Valer4 Пользователь

    Регистрация:
    20.05.16
    Сообщения:
    43
    Симпатии:
    5
    Пол:
    Мужской
    а в переводчик это вставить не судьба - Invalid multi-lingual line (file "cstrike/addons/amxmodx/data/lang/antimat.txt" line 1)
    тут даже и без переводчимка должно быть сразу понятно
    лучше в UTF8 без BOM его перевести
     
    Последнее редактирование: 23.05.16
    Boss нравится это.
  17. Boss Пользователь

    Регистрация:
    07.10.15
    Сообщения:
    472
    Симпатии:
    119
    Пол:
    Мужской
    В общем ситуация такая, плагин работает без ошибок, но не реагирует на слова мата в чате, хоть на русском, хоть на енглишь, куда копать?)
     
  18. Valer4 Пользователь

    Регистрация:
    20.05.16
    Сообщения:
    43
    Симпатии:
    5
    Пол:
    Мужской
    На все?
     
  19. LeninChan^^ Команда форума

    Регистрация:
    27.02.15
    Сообщения:
    1.086
    Симпатии:
    368
    Пол:
    Мужской
    Telegram:
    LeninChan
    Boss, поднять этот плагин выше плагинов работающих с чатом
     
  20. maFFyoZZyk Черный Жнец ^_^ Команда форума

    Регистрация:
    14.01.16
    Сообщения:
    1.248
    Симпатии:
    548
    Пол:
    Мужской
    У меня где-то лежал рабочий атимат
    --- добавлено 25.05.16 ---
    Все скрывал как надо, только наказания подделать надо