Пропускает запрещенные ник-неймы

Vit_ amin

Добрая душа
Сообщения
1,525
Реакции
688
Всем привет.
Написал плагин, для фильтрации ник-неймов, но проблема заключается в том, что изредка, плагин почему то пропускает их. Обычно из 10 игроков он пропускает по 1 человеку ....
Вот код, может я чего упустил ...
PHP:
#pragma semicolon 1

#include <sdktools_functions>

#pragma newdecls required

#define PLAYER_NAME "[L4D-Zone.RU] Player"

static const char g_szFilterListname[][] =
{
    "i am noob",
    "by Pioneer",
    "REVOLUTiON",
    "by l4dzone.ru",
    "nos-TEAM"
};

public Plugin myinfo =
{
    name = "L4D NickName Check",
    author = "Vitamin",
    description = "Check Every Conected PlayerName and used actions at him",
    version = "1.0",
    url = "http://l4d-zone.ru"
};

public void OnPluginStart()
{
    HookEvent("player_changename", Event_CheckClientName);
 
    HookUserMessage(GetUserMessageId("SayText2"), UserMessageHandler_HookChangeName, true);
}

bool CheckClientName(const char[] szName)
{
    for (int i = 0; i < sizeof(g_szFilterListname); ++i)
    {
        switch (StrContains(g_szFilterListname[i], szName, false))
        {
            case -1: continue;
            default: return true;
        }
    }
    return false;
}

public Action UserMessageHandler_HookChangeName(UserMsg msg_id, BfRead msg, const int[] players, int playersNum, bool reliable, bool init)
{
    char szMessage[32];
    msg.ReadString(szMessage, sizeof(szMessage));
    msg.ReadString(szMessage, sizeof(szMessage));
    return strcmp(szMessage, "#Cstrike_Name_Change", false) == 0 ? Plugin_Handled : Plugin_Continue;
}

public void OnClientPostAdminCheck(int iClient)
{
    if (!IsFakeClient(iClient))
    {
        char szName[MAX_NAME_LENGTH];
        GetClientName(iClient, szName, sizeof(szName));
        if (CheckClientName(szName))
        {
            SetClientName(iClient, PLAYER_NAME);
        }
    }
}

public void Event_CheckClientName(Event event, const char[] name, bool silent)
{
    int iClient = GetClientOfUserId(event.GetInt("userid"));
    if (!IsFakeClient(iClient))
    {
        char szName[MAX_NAME_LENGTH];
        event.GetString("newname", szName, sizeof(szName));
        if (CheckClientName(szName))
        {
            SetClientName(iClient, PLAYER_NAME);
        }
    }
}
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
изредка, плагин почему то пропускает их
Потому что есть квар sv_namechange_cooldown_seconds, отвечающий за время между сменами никнейма. Действует он и на плагины, вот и изредка "не то".
 

Vit_ amin

Добрая душа
Сообщения
1,525
Реакции
688
Движок SourceEngine 2007, игра Left 4 Dead, консольной переменной нету, и ник неймы меняются на лету (пробовал через sm_rename)
P.S. sm_cvar sv_namechange_cooldown_seconds
[SM] Unable to find cvar: sv_namechange_cooldown_seconds
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #4
switch (StrContains(g_szFilterListname[i], szName, false))
{
case -
1: continue;
default: return
true;
}
а сложно было сделать так:
PHP:
if (StrContains(g_szFilterListname[i], szName, false) != -1)
{
    return true;
}
Не вижу в switch преимуществ в данном случае.

@Vit_ amin, а игроков пропускает при входе или при смене ника?

Попробуй сделать дебаг. Может в нике символ заменен на другой
 

Vit_ amin

Добрая душа
Сообщения
1,525
Реакции
688
@R1KO, Мне казалось так будет лучше, игроков пропускает при входе
Врятли, потому что все эти ники с rev.ini когда качают пиратку, его не меняют.
+ еще не видел чтобы два одинаковых ника было на сервере (всегда добавляется итерация повторяющегося ник-нейма)
i am noob
(1) i am noob
(2) i am noob
....
 
Сверху Снизу