Режим игры OnlyScout

Vorovslayalapa

Участник
Сообщения
3
Рейтинг
0
Всех приветствую!

Впервые попробовал самостоятельно написать плагин, а не отдать это ИИ. Хочу уточнить у людей, которые имеют больший опыт мнение по поводу кода плагина. Может его можно оптимизировать или убрать проблемы, которые возникнут при установке на другой сервер (про остальные методы получения оружий я знаю). Если таковых ответов не будет возможно добавлю что-то и выложу уже в соответствующей теме.

Что делает плагин:

При наборе заданного количества (процент) голосов за изменение режима игры (работает как /rtv или /mode), изменяет его
После в начале раунда отключает меню получения оружий, меняет гравитацию и выдает всем игрокам scout
Если игроки наберут нужный процент, то режим переключится обратно
Администратор с заданным флагом (флагами) может переключать режим принудительно

Также я добавил целую кучу комментариев, думаю даже не зная кода можно разобраться в его работе
 

Вложения

Последнее редактирование:
Бегло посмотрел, некоторые моменты пропустил возможно.

Pawn:
#include <cstrike>
Неактуальный модуль. Также как и fun и engine. Можно без них обходиться спокойно, аналогами нативов из reapi и fakemeta.

Pawn:
#define MAX_PLAYERS 32
Зачем? Это уже есть в amxconst.inc, подключающемся автоматически при подключении amxmodx.

Pawn:
#define SCOUTCHANGEFLAG "d"
#define CVAR_SCOUTMODE "onlyscoutenable"
#define CVAR_WEAPONMENU "ewm_enabled"
#define CVAR_PLUGIN_ENABLED "onlyscout_enabled"
Строки лучше в new const хранить, а не в #define. Особенно актуально для объёмных строк. #define дубли строки создаёт, в нём только числа хранить.

Pawn:
new bool:g_PlayerRequested[33];
Лучше не 33, а MAX_PLAYERS + 1.

Pawn:
register_event("HLTV", "event_new_round", "a", "1=0", "2=0");
Лучше RG_CSGameRules_RestartRound.

Pawn:
RegisterHam(Ham_Spawn, "player", "player_spawn_post", 1);
Есть RG_CBasePlayer_Spawn, чтобы без хама обойтись.

Pawn:
    if (id < 1 || id > MAX_PLAYERS)                // Если у игрока неверный ID ничего не делает
    {
        return PLUGIN_HANDLED;
    }
В этой проверке нет необходимости.

Pawn:
new name[32];
get_user_name(id, name, charsmax(name));
Если никнейм нужен только для сообщения, можно делать так:
Pawn:
client_print_color (0, print_team_default, "^4[ScoutMode] ^1Игрок ^4%n ^1проголосовал за переключение ^3OnlyScout!", id);

Pawn:
rg_remove_item(id, "weapon_scout");
rg_give_item(id, "weapon_scout");
?

Pawn:
stock get_player_count()
Есть натив rg_initialize_player_counts.

Pawn:
set_pcvar_num(p_GravityCvar, SCOUTGRAVITY);
Есть var_gravity, но в данной реализации лучше будет кваром, думаю. Чтобы каждый спаун не сетать.
 
Pawn:
#include <cstrike>
Используется только чтобы выдать патроны. Я не знал как их выдавать, а гугл и гпт написали что через него. Поправлю вместе с кучей
#define

Pawn:
if (id < 1 || id > MAX_PLAYERS)                // Если у игрока неверный ID ничего не делает{
return PLUGIN_HANDLED;
}
гпт выдал что у игроков МОЖЕТ быть неверный id и лучше это следует проверить (видимо перепутал со SteamID)

Pawn:
rg_remove_item(id, "weapon_scout");rg_give_item(id, "weapon_scout");
Посчитал что лучше забирать уже выданное и выдавать новое, иначе на респавне будет валяться оружие

В остальном принял и благодарю за быстрый ответ. Следующий свободный вечер переделаю
 
Используется только чтобы выдать патроны. Я не знал как их выдавать, а гугл и гпт написали что через него.
В первую очередь надо искать по инклюдам, а не в ChatGPT. Через поиск по файлам в папке в Notepad++, например. Нейронка будет старьё подсовывать, либо придумывать несуществующее, с ней советоваться такое себе. Ищите по ключевым словам. Например, в вашем случае, по ammo. ReAPI-аналог только префиксом и отличается в названии. Учитесь искать в API, а не спрашивать.

гпт выдал что у игроков МОЖЕТ быть неверный id
Бредни. Это clcmd, клиентская команда, её может вызвать только игрок. По вашей проверке (id < 1 || id > MAX_PLAYERS) отсекаются случаи, когда клиент невалидный (-1), когда вызывает мир (0) и другие энтити (33+). Все 3 случая невозможны.

Посчитал что лучше забирать уже выданное и выдавать новое, иначе на респавне будет валяться оружие
3 аргумент натива rg_give_item в помощь.
 
Назад
Верх