Иконка ресурса

NickName AdBlock 0.6

FeedBlack

Участник
Сообщения
8
Реакции
4
  • Автор ресурса
  • #1
FeedBlack submitted a new resource:

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

Кикает игрока, если видит у него в нике ссылку на сайт. Есть два режима работы. 1 - кикает всех, кого найдёт в начале каждого раунда. 2 - проверяет игрока в момент подключения к серверу, если находит ссылку - кикает.
Лог плагина: addons/sourcemod/logs/nnadblock.log - создаётся автоматически.

Исходник можно найти ТУТ.

Read more about this resource...
 
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
а почему частично на старом синтаксисе?
 

FeedBlack

Участник
Сообщения
8
Реакции
4
  • Автор ресурса
  • #3
в исходе нет старого синтаксиса. только что специально проверил.
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #4
@Grey83, а какая разница, в принципе? Один хрен: байт код получается один и тот же.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@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 bEnable, bMode;

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_VERSION, PLUGIN_NAME, FCVAR_DONTRECORD|FCVAR_NOTIFY|FCVAR_REPLICATED);

    ConVar CVar;
    (CVar = CreateConVar("sm_nnadblock_enabled", "1", "1 - Enabled, 0 - Disabled.", _, true, _, true, 1.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, _, true, 1.0)).AddChangeHook(CVarChanged_Mode);
    bMode    = CVar.BoolValue;

    HookEvent("teamplay_round_start", OnRoundStart, EventHookMode_PostNoCopy);

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

    BuildPath(Path_SM, Logfile, sizeof(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(bMode) KickUnallowed(client);
}

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

public Action KickUnallowedCommand(int client, int args)
{
    if(bEnable)
    {
        int num;
        for(int i = 1; i <= MaxClients; i++) 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(client, szUsername, sizeof(szUsername));
    if(MatchRegex(g_Regex, szUsername) < 1)
        return false;

    GetClientAuthId(client, AuthId_Steam3, szUserID, sizeof(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", szUsername, szUserID);
    return true;
}
 

Вложения

  • Nickname_AdBlock 0.3.0.sp
    2.8 КБ · Просмотры: 9
  • Nickname_AdBlock 0.3.0.smx
    5.9 КБ · Просмотры: 5
Последнее редактирование:

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #6
пока компилятор понимает старый синтаксис
А его поддержку убирать и не будут. Это - официальное заявление одного из разработчиков на их же форуме.
Пока они не сделают свой "C# lite" (как они его ласково назвали) - старый синтаксис будет перевариваться компилятором. Но и новый сразу же перестанет: язык неплохо так изменится. Придётся многое переписывать в любом случае.

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

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

K1NG

Меня держат насильно, помогите
Сообщения
287
Реакции
184
Есть же плагин ANC, чем этот отличается вообще?
 

FeedBlack

Участник
Сообщения
8
Реакции
4
  • Автор ресурса
  • #9
Этот плагин был написан мною для моего сервера, а в общий доступ я его выложил, т.к. подумал, что кому-то он может быть полезен. Даже если есть и другие такие же плагины, в чём я не сомневаюсь. Не одному же мне эта идея в голову пришла.
 

Jugheadbomb

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

FeedBlack

Участник
Сообщения
8
Реакции
4
  • Автор ресурса
  • #11
@-JUGHEAD Да, ты прав. Просто меняешь Unallowed Nickname на что-то своё
 

Jugheadbomb

CTFPlayer
Сообщения
168
Реакции
24
@FeedBlack , А можно попросить сделать некое "предупреждение", если это не сложно реализовать? (Мне нужно именно для проверки в каждом раунде, то есть тип 1)
 

FeedBlack

Участник
Сообщения
8
Реакции
4
  • Автор ресурса
  • #14
@-JUGHEAD Отпишись мне в ЛС в стиме, поговорим, объяснишь, как именно должно выглядеть предупреждение.
 

BossKotoriiNeSmok

Участник
Сообщения
976
Реакции
189
А можно ли,вместо кика,как то автоматом менять ник? ( на любой ).
 

FeedBlack

Участник
Сообщения
8
Реакции
4
  • Автор ресурса
  • #18
@BossKotoriiNeSmok , можно конечно, в 0.7 сделаю ещё два режима работы: кик и ренейм. В случае ренейма будет несколько вариантов ников, которые будут выбираться рандомно при каждом ренейме.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@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
 

Вложения

  • Nickname_AdBlock 0.7.0.sp
    5.5 КБ · Просмотры: 23
  • Nickname_AdBlock 0.7.0.smx
    7.8 КБ · Просмотры: 9
Последнее редактирование:

will_rock

Участник
Сообщения
1,074
Реакции
363
@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 мин и предупредить в игровом чате немедленно
    Оптимизировал код плагина
    Добавил проверку при смене ника (при sm_nnadblock_warning = 0 в чате не должно писать о смене ника с запрещённого)
    В константу NAMES4REPLACE можно вписать любое количество ников для замены запрещённых (естественно, требуется скомпилировать плагин после изменения и заменить скомпилированным имеющийся на сервере )
    В логе не пишет каждый раз название файла плагина (ведь у плагина свой файл лога)
    Плагин при первом запуске создаёт файл конфига ...\cfg\sourcemod\nnadblock.cfg со своими переменными
P.S. Команду sm_reload_trasnlations необходимо использовать только если плагин не подхватил новый файл перевода после его смены или если файл перевода был добавлен только после запуска плагина. Да и то это делается просто чтобы не перезапускать сервер.

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

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

Похожие темы

Ответы
33
Просмотры
14К
Сверху Снизу