OMG
Синтаксисы в коде намешаны (
что ли копипастил код из плагинов, которые указал как те, с которыми возможны конфликты?)
Нафига делать ретурны в Timer_WipeBlood? Там же не повторяющийся таймер
public Action:Timer_WipeBlood(Handle:timer, any:ent)
{
if(ent == -1 || !IsValidEdict(ent)) return Plugin_Continue;
RemoveEdict(ent);
return Plugin_Stop;
}
=>
public Action:Timer_WipeBlood(Handle:timer, any:ent)
{
if(ent != -1 && IsValidEdict(ent)) RemoveEdict(ent);
}
Нафига делать таймеры, если движок игры сам может удалять энтити?
SetVariantString("OnUser1 !self:kill::3.0:1");
AcceptEntityInput(entity, "AddOutput");
AcceptEntityInput(entity, "FireUser1");
Нафига делать глобальную переменную g_iColor[4], когда можно просто в функцию передавать необходимые параметры?
Ну или сделать две константы (
у тебя только 2 значения цвета в коде).
Нафига несколько раз проверять индекс игрока в Event_BulletImpact(), если достаточно сделать это только раз?
Нафига получать тип сообщений (битбуффер или протобуф) при каждом вызове функции ScreenEffect(), если это достаточно сделать один раз при старте плагина (игра с ксс внезапно поменяется на ксго или наоборот, что ли?) и сохранить значение в булеву переменную?
Нафига прописывать в коде по три раза пути к звукам, когда достаточно сделать это 1 раз в массив строковых констант (
заодно не нужно будет делать 11 раз else if(iRandomNumber == *) EmitSoundToClient(iClientN, "-Sounds/fx/nearmiss/bulletltor*.wav", 0, _, 140, _, 0.7, GetRandomInt(95, 105), -1, fClientEyePos, fDlToBulletVec, false);)?
Кроме того тогда можно было бы делать прекеш и добавление в загрузку файлов с помощью цикла в 5 строк (
считая строки с открывающей и закрывающей фигурными скобками).
И да, в ксго звука не будет: там у тебя прекеш нужно делать иначе.
Кроме всего этого можно было сделать все версии этого плагина всего одним исходником, где варианты можно было бы выбирать изменением соответствующего дефайна (
и компилировать нужную версию) или квара (
и выбирать нужное поведение прямо посреди игры).
А
for (new iClient = 1; iClient < sizeof(g_fClientDelay); iClient++) - это вообще выше моего разумения.
Почему не
<= MaxClients?!
В общем всё это говорит, что автор этой поделки просто накоммуниздил кусков из чужого кода без понимания как всё это должно работать.