Дошли руки посмотреть исходник.
ConVar cvar;
(cvar = CreateConVar("sm_acf_ipfilter", "1", "Фильтр IP в чате", _, true, 0.0, true, 1.0)).AddChangeHook(IsIPBlock);
За такое пора убивать уже. Из плагина в плагин мигрирует. Уже достало.
Это не оптимизация ни капли, и производительность не повышает. Скорее наоборот, ухудшает, ибо при создании
cvar, он ещё зануляется сразу же. В итоге лишний вызов.
(cvar = CreateConVar("sm_acf_ipfilter", "1", "Фильтр IP в чате", _, true, 0.0, true, 1.0)).AddChangeHook(IsIPBlock);
CONVARHOOK(IsIPBlock, cvar);
Вызов хука лишён смысла сразу после создания переменной. Особенно до
AutoExecConfig().
С конфигами, кстати, веселье при старте плагина. Довольно часто наблюдаю картину, что сервер попросту не вызывает хуки переменных при первоначальном чтении конфига...
public void OnLibraryAdded(const char[] name)
{
if(!StrEqual(name, "materialadmin") && !StrEqual(name, "sourcecomms") && !StrEqual(name, "sourcebans")){
return;
}
g_srSystem = UpdateSystem();
}
public void OnLibraryRemoved(const char[] name)
{
if(!StrEqual(name, "materialadmin") && !StrEqual(name, "sourcecomms") && !StrEqual(name, "sourcebans")){
return;
}
g_srSystem = UpdateSystem();
}
Вот тут уже можно сделать "мнимую" оптимизацию, создав отдельную функцию, и вызывая её. DRY, в общем.
g_Enabled = (!g_bEnabledFilter[IP_LIST] && !g_bEnabledFilter[CENSURE] && !g_bEnabledFilter[SERVMSG]) ? false : true;
Возможно, я сейчас тайну года открою, но результаты подобных if-выражений всегда возвращают boolean, и зачем тернарный оператор здесь применяется - неясно.
Можно сократить до:
g_Enabled = !(!g_bEnabledFilter[IP_LIST] && !g_bEnabledFilter[CENSURE] && !g_bEnabledFilter[SERVMSG]);
public void OnClientPutInServer(int iClient)
{
if(!iClient || !IsClientInGame(iClient) || IsFakeClient(iClient)){
return;
}
Такое я вижу впервые. В частности, чтобы после захода игрока, его индекс был невалидным, или он был не в игре.
Про Fake молчу, ибо ок.
public Action OnClientSayCommand(int client, const char[] command, const char[] sArgs)
{
if(!g_Enabled || !client || !IsClientInGame(client) || IsAlreadeChatMuted(client)) {
//LogMessage("NOT ENABLED");
return Plugin_Continue;
}
Тоже самое, что и выше.
Если ещё отрицательный индекс можно допустить (в чат написали по ркону или с консоли сервера), то чтобы игрок писал в чат, не находясь на нём - нет.