Другое NickName AdBlock 0.6

Кикает игроков с никами содержащими рекламу.

  1. FeedBlack

    FeedBlack

    Сообщения:
    8
    Симпатии:
    4
    FeedBlack submitted a new resource:

    NickName AdBlock - Кикает игроков с никами содержащими рекламу.

    Read more about this resource...
     
    Последнее редактирование: 12 авг 2018
    alexmo812 нравится это.
  2. Grey83

    Grey83

    Сообщения:
    1.683
    Симпатии:
    782
    а почему частично на старом синтаксисе?
     
  3. FeedBlack

    FeedBlack

    Сообщения:
    8
    Симпатии:
    4
    в исходе нет старого синтаксиса. только что специально проверил.
     
  4. Kr1kuzya

    Kr1kuzya В поисках той самой Супермодератор

    Сообщения:
    4.818
    Симпатии:
    4.070
    @Grey83, а какая разница, в принципе? Один хрен: байт код получается один и тот же.
     
  5. Grey83

    Grey83

    Сообщения:
    1.683
    Симпатии:
    782
    @Kr1kuzya, это пока компилятор понимает старый синтаксис
    @FeedBlack, INVALID_HANDLE в новом синтаксисе - это null, например.
    А public Action OnRoundStart(Handle hEvent, const char[] szEventName, bool bDontBroadcast) выглядит как public void OnRoundStart(Event hEvent, const char[] szEventName, bool bDontBroadcast) в твоём случае (EventHookMode_PostNoCopy)
    Handle cvar_PluginEnabled; и Handle cvar_PluginMode; - это ConVar cvar_PluginEnabled; и ConVar cvar_PluginMode; соответственно.
    --- Добавлено позже ---
    Вот пофикшенный:
    PHP:
    #pragma semicolon 1
    #pragma newdecls required

    #include <regex>

    static const char    PLUGIN_NAME[]        = "Nickname AdBlock",
                        
    PLUGIN_VERSION[]    = "0.3.0";

    bool bEnablebMode;

    char Logfile[PLATFORM_MAX_PATH];
    Regex g_Regex;

    public 
    Plugin myinfo =
    {
        
    name        PLUGIN_NAME,
        
    author        "FeedBlack (fixed by Grey83)",
        
    description    "Kicks user if his nickname contains advertisement.",
        
    version        PLUGIN_VERSION,
        
    url            "https://steamcommunity.com/id/feedblackg44",
    };

    public 
    void OnPluginStart()
    {
        
    CreateConVar("sm_nnadblock_version"PLUGIN_VERSIONPLUGIN_NAMEFCVAR_DONTRECORD|FCVAR_NOTIFY|FCVAR_REPLICATED);

        
    ConVar CVar;
        (
    CVar CreateConVar("sm_nnadblock_enabled""1""1 - Enabled, 0 - Disabled."_true_true1.0)).AddChangeHook(CVarChanged_Enable);
        
    bEnable    CVar.BoolValue;
        (
    CVar CreateConVar("sm_nnadblock_mode""0""0 - check players every round, 1 - check players when they connect to the server."_true_true1.0)).AddChangeHook(CVarChanged_Mode);
        
    bMode    CVar.BoolValue;

        
    HookEvent("teamplay_round_start"OnRoundStartEventHookMode_PostNoCopy);

        
    RegConsoleCmd("sm_kickunallowed"KickUnallowedCommand);
        
    RegConsoleCmd("sm_kickunallow"KickUnallowedCommand);

        
    BuildPath(Path_SMLogfilesizeof(Logfile), "logs/nnadblock.log");

        
    g_Regex CompileRegex("\\.(ru|net|ua|tf|com|org|su|cash|trade|co)");

        
    AutoExecConfig(true"nnadblock");
    }

    public 
    void CVarChanged_Enable(ConVar CVar, const char[] oldValue, const char[] newValue)
    {
        
    bEnable    CVar.BoolValue;
    }

    public 
    void CVarChanged_Mode(ConVar CVar, const char[] oldValue, const char[] newValue)
    {
        
    bMode    CVar.BoolValue;
    }

    public 
    void OnClientConnected(int client)
    {
        if(
    bModeKickUnallowed(client);
    }

    public 
    void OnRoundStart(Event event, const char[] namebool dontBroadcast)
    {
        if(
    bEnable && !bMode) for(int i 1<= MaxClientsi++) KickUnallowed(i);
    }

    public 
    Action KickUnallowedCommand(int clientint args)
    {
        if(
    bEnable)
        {
            
    int num;
            for(
    int i 1<= MaxClientsi++) if(KickUnallowed(i)) num++;
            
    PrintToConsole(client"%i clients has been kicked."num);
        }
        else 
    PrintToConsole(client"Nickname AdBlock is Disabled!");
    }

    stock bool KickUnallowed(int client)
    {
        if(!
    IsClientInGame(client) || IsFakeClient(client))
            return 
    false;

        static 
    char szUsername[MAX_NAME_LENGTH], szUserID[MAX_TARGET_LENGTH];
        
    GetClientName(clientszUsernamesizeof(szUsername));
        if(
    MatchRegex(g_RegexszUsername) < 1)
            return 
    false;

        
    GetClientAuthId(clientAuthId_Steam3szUserIDsizeof(szUserID));
        
    KickClient(client"Unallowed Nickname");
        
    PrintToChatAll("%s has been kicked due to unallowed nickname!"szUsername);
        
    LogToFileEx(Logfile"%s has been kicked due to unallowed nickname! Client id: %s"szUsernameszUserID);
        return 
    true;
    }
     

    Вложения:

    Последнее редактирование: 13 авг 2018
    BossKotoriiNeSmok нравится это.
  6. Kr1kuzya

    Kr1kuzya В поисках той самой Супермодератор

    Сообщения:
    4.818
    Симпатии:
    4.070
    А его поддержку убирать и не будут. Это - официальное заявление одного из разработчиков на их же форуме.
    Пока они не сделают свой "C# lite" (как они его ласково назвали) - старый синтаксис будет перевариваться компилятором. Но и новый сразу же перестанет: язык неплохо так изменится. Придётся многое переписывать в любом случае.

    И я не вижу никаких причин использовать новые методмапы. Тем более с ними приколы есть, когда виртуалка отресолвить не может метод. Но это уже совсем другая история...

    PHP:
        (CVar CreateConVar("sm_nnadblock_enabled""1""1 - Enabled, 0 - Disabled."_true_true1.0)).AddChangeHook(CVarChanged_Enable);
        
    bEnable    CVar.BoolValue;
    А вот в этом вообще смысла нет, если использовать конфиги.
    У меня лично в TF2 и CS:S не срабатывали хуки конваров. Надо забирать значения строго в OnConfigsExecuted().
     
  7. K1NG

    K1NG

    Сообщения:
    98
    Симпатии:
    17
    Есть же плагин ANC, чем этот отличается вообще?
     
  8. xMaZax

    xMaZax Заблокирован

    Сообщения:
    669
    Симпатии:
    156
    Хватит набивать посты,бред какой то пишешь,для кого описание плагинов создано?
     
  9. FeedBlack

    FeedBlack

    Сообщения:
    8
    Симпатии:
    4
    Этот плагин был написан мною для моего сервера, а в общий доступ я его выложил, т.к. подумал, что кому-то он может быть полезен. Даже если есть и другие такие же плагины, в чём я не сомневаюсь. Не одному же мне эта идея в голову пришла.
     
  10. -JUGHEAD

    -JUGHEAD

    Сообщения:
    108
    Симпатии:
    7
    @FeedBlack , кастомная причина стоит? можно ли свою поставить?
    И является ли это причиной?
    P.S: Просто не разбираюсь
    PHP:
     KickClient(client"Unallowed Nickname");
     
  11. FeedBlack

    FeedBlack

    Сообщения:
    8
    Симпатии:
    4
    @-JUGHEAD Да, ты прав. Просто меняешь Unallowed Nickname на что-то своё
     
  12. -JUGHEAD

    -JUGHEAD

    Сообщения:
    108
    Симпатии:
    7
  13. -JUGHEAD

    -JUGHEAD

    Сообщения:
    108
    Симпатии:
    7
    @FeedBlack , А можно попросить сделать некое "предупреждение", если это не сложно реализовать? (Мне нужно именно для проверки в каждом раунде, то есть тип 1)
     
  14. FeedBlack

    FeedBlack

    Сообщения:
    8
    Симпатии:
    4
    @-JUGHEAD Отпишись мне в ЛС в стиме, поговорим, объяснишь, как именно должно выглядеть предупреждение.
     
  15. FeedBlack

    FeedBlack

    Сообщения:
    8
    Симпатии:
    4
  16. FeedBlack

    FeedBlack

    Сообщения:
    8
    Симпатии:
    4
    BossKotoriiNeSmok нравится это.
  17. BossKotoriiNeSmok

    BossKotoriiNeSmok

    Сообщения:
    437
    Симпатии:
    71
    А можно ли,вместо кика,как то автоматом менять ник? ( на любой ).
     
  18. FeedBlack

    FeedBlack

    Сообщения:
    8
    Симпатии:
    4
    @BossKotoriiNeSmok , можно конечно, в 0.7 сделаю ещё два режима работы: кик и ренейм. В случае ренейма будет несколько вариантов ников, которые будут выбираться рандомно при каждом ренейме.
     
    BossKotoriiNeSmok нравится это.
  19. Grey83

    Grey83

    Сообщения:
    1.683
    Симпатии:
    782
    @BossKotoriiNeSmok, можно

    Переделал плагин (поддерживается файл перевода из 0.6):
    1. Квары:
      • sm_nnadblock_version - Версия плагина
      • sm_nnadblock_enabled - 1/0 - Вкл/Выкл плагин
      • sm_nnadblock_mode - Если ник не прошёл проверку, то: 0 - переименовать (случайный ник из массива NAMES4REPLACE), 1 - кикнуть
      • sm_nnadblock_check - Проверять ники игроков: 0 - каждый раунд, 1 - при присоединении и смене имени, 2 - при присоединении, смене имени и в начале каждого раунда
      • sm_nnadblock_warning - Производить действие: 0 - немедленно без предупреждения, 1 - через 5 мин и предупредить в центре экрана немедленно, 2 - через 5 мин и предупредить в игровом чате немедленно
    2. Оптимизировал код плагина
    3. Добавил проверку при смене ника (при sm_nnadblock_warning = 0 в чате не должно писать о смене ника с запрещённого)
    4. В константу NAMES4REPLACE можно вписать любое количество ников для замены запрещённых (естественно, требуется скомпилировать плагин после изменения и заменить скомпилированным имеющийся на сервере )
    5. В логе не пишет каждый раз название файла плагина (ведь у плагина свой файл лога)
    6. Плагин при первом запуске создаёт файл конфига ...\cfg\sourcemod\nnadblock.cfg со своими переменными
    P.S. Команду sm_reload_trasnlations необходимо использовать только если плагин не подхватил новый файл перевода после его смены или если файл перевода был добавлен только после запуска плагина. Да и то это делается просто чтобы не перезапускать сервер.

    P.P.S. Насколько я понимаю, событие teamplay_round_start существует только в TF2 и для других игр необходимо отлавливать событие round_start
     

    Вложения:

    Последнее редактирование: 24 авг 2018
    BossKotoriiNeSmok, will_rock и CAH4E3 нравится это.
  20. will_rock

    will_rock

    Сообщения:
    317
    Симпатии:
    67
    Под ксго нужно просто teamplay_round_start заменить на round_start, скомпилировать и все должно работать?