Vit_ amin
Добрая душа
- Сообщения
- 1,525
- Реакции
- 688
Всем привет.
Написал плагин, для фильтрации ник-неймов, но проблема заключается в том, что изредка, плагин почему то пропускает их. Обычно из 10 игроков он пропускает по 1 человеку ....
Вот код, может я чего упустил ...
Написал плагин, для фильтрации ник-неймов, но проблема заключается в том, что изредка, плагин почему то пропускает их. Обычно из 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);
}
}
}