Это ещё мягко сказано
Очень надеюсь на ваши советы.
Каллбэки всех статичных менюшек переведи с
GetMenuItem(menu, param2, info, sizeof(info));
if(strcmp(info, "*") == 0)
на
switch(param2)
{
case 0:
...
case 1:
...
}
И убери первый текстовый параметр из
AddMenuItem(), т.к. он в этом случае не нужен вообще.
Многие действия там повторяются буквально без изменений (
1 - 2 параметра только меняется). Такое лучше вынести в отдельную функцию и вызывать уже её.
Это всё сильно сократит код и ускорит работу плагина.
И да, все статичные меню лучше создать один раз при запуске плагина (они всё равно у тебя не удаляются). А админу отправлять с помощью
DisplayMenu(), вместо пересоздания меню (
утечки памяти имеются при частом использовании, кстати?).
И задать каллбэк для каждого меню свой (
чтобы задействовать switch() вместо strcmp())
Флаги
FCVAR_SPONLY|FCVAR_REPLICATED кварам не нужны, на мой взгляд.
Ещё заметил, что заявлена поддержка CS:GO, а для воспроизведения звуков используется только
PrecacheSound() вне зависимости от игры (
т.е. звуки не будут в CS:GO воспроизводиться, скорей всего)
В
DisarmHandle() нужна только одна проверка
if(weaponid != -1). И делать обезоруживание лучше с помощью цикла (
и откуда 12 слотов взялось? их же порядка 6 всего):
enum
{
Slot_Primary = 0,
Slot_Secondary,
Slot_Knife,
Slot_Grenade,
Slot_C4,
Slot_None
};
...
stock void StripWeapons(int client)
{
RemoveWeaponBySlot(client, Slot_Primary);
RemoveWeaponBySlot(client, Slot_Secondary);
while(RemoveWeaponBySlot(client, Slot_Grenade)) {}
}
stock bool RemoveWeaponBySlot(int client, int slot)
{
int ent = GetPlayerWeaponSlot(client, slot);
return ent > MaxClients && RemovePlayerItem(client, ent) && AcceptEntityInput(ent, "Kill");
}