в лице subb98 и PRoSToTeM@)
1. Сперва мы подключаем необходимые библиотеки (инклуды) для работы данного плагина:
[pawn]
- #include <amxmodx>
из которого мы будем использовать проверку на флаги и на подключение игрока к серверу, а также прекешируем модели, затем:
[pawn]
- #include <cstrike>
при помощи которого мы будем проверять команду игрока и в зависимости от команды назначать игроку модель, затем:
[pawn]
- #include <hamsandwich>
из которого мы будем использовать событие спауна игрока (спасибо Subb98 и PRoSToTeM@, за то, что объяснили, почему не стоит использовать ResetHUD в данном случае).
2. Приступаем к регистрации:
[pawn]
- public plugin_init
- {
- //code
- }
plugin_init - форвард-функция, которая вызывается при старте сервера, смене карты или рестарте сервера, в ней мы регистрируем событие спауна игрока:
3.
[pawn]
- RegisterHam(Ham_Spawn, "player", "SetModel", 1)
4. Прекешируем файлы моделей:
[pawn]
- public plugin_precache()
- {
- //code
- }
Прописываем внутри функции пути до наших файлов моделей. Необходимо учесть, что конечная папка, в которой лежит модель, и название модели должны совпадать, например:
[pawn]
- precache_model("models/player/admin_ct/admin_tt.mdl")
5. Прекешируем 2 модели (для Террористов и Контр-террористов):
[pawn]
- precache_model("models/player/admin_tt/admin_tt.mdl") // Для TT
- precache_model("models/player/admin_ct/admin_ct.mdl") // Для CT
6. Обрабатываем функцию спауна игрока:
[pawn]
- public SetModel(const id)
- {
- //code
- }
6.1. Создаём новую переменную, в которой будем хранить id команды игрокаи переменную для упрощения кода проверки на флаг :
[pawn]
- new CsTeams:userTeam = cs_get_user_team(id), iFlags = get_user_flags(id)
6.2. Проверяем игрока на подключение к серверу и наличие необходимого флага доступа для выдачи модели:
[pawn]
- if(!is_user_connected(id)) return;
- if(get_user_flags(id) & ADMIN_BAN)
- {
- //code
- }
6.3. Далее производим проверку на команду игрока:
[pawn]
- if(userTeam == CS_TEAM_T)
- {
- //code
- }
6.4. И, если игрок проходит данную проверку, назначаем ему модель Террориста:
[pawn]
- cs_set_user_model(id, "admin_tt")
6.5. Аналогичным образом выполняем проверки для Контр-террориста, используя условный оператор else if:
[pawn]
- else if(userTeam == CS_TEAM_CT)
- {
- cs_set_user_model(id, "admin_ct")
- }
6.6. Если вы всё сделали верно, то в конечном итоге должен получиться такой код:
[pawn]
- #include <amxmodx>
- #include <cstrike>
- #include <hamsandwich>
- public plugin_init()
- {
- RegisterHam(Ham_Spawn, "player", "SetModel", 1)
- }
- public plugin_precache()
- {
- precache_model("models/player/admin_ct/admin_ct.mdl")
- precache_model("models/player/admin_tt/admin_tt.mdl")
- }
- public SetModel(const id)
- {
- if(!is_user_connected(id)) return;
- new CsTeams:userTeam = cs_get_user_team(id), iFlags = get_user_flags(id)
- if(iFlags & ADMIN_BAN)
- {
- if(userTeam == CS_TEAM_T)
- {
- cs_set_user_model(id, "admin_tt")
- }
- else if(userTeam == CS_TEAM_CT)
- {
- cs_set_user_model(id, "admin_ct")
- }
- }
- }
Также прилагаю код для двух флагов: для админа и вип-игрока:
[pawn]
- #include <amxmodx>
- #include <cstrike>
- #include <hamsandwich>
- public plugin_init()
- {
- RegisterHam(Ham_Spawn, "player", "SetModel", 1)
- }
- public plugin_precache()
- {
- precache_model("models/player/admin_tt/admin_tt.mdl")
- precache_model("models/player/admin_ct/admin_ct.mdl")
- precache_model("models/player/vip_tt/vip_tt.mdl")
- precache_model("models/player/vip_ct/vip_ct.mdl")
- }
- public SetModel(const id)
- {
- if(!is_user_connected(id)) return;
- new CsTeams:userTeam = cs_get_user_team(id), iFlags = get_user_flags(id)
- if(iFlags & ADMIN_BAN)
- {
- if(userTeam == CS_TEAM_T)
- {
- cs_set_user_model(id, "admin_tt")
- }
- else if(userTeam == CS_TEAM_CT)
- {
- cs_set_user_model(id, "admin_ct")
- }
- }
- else if(iFlags & ADMIN_LEVEL_H)
- {
- if(userTeam == CS_TEAM_T)
- {
- cs_set_user_model(id, "vip_tt")
- }
- else if(userTeam == CS_TEAM_CT)
- {
- cs_set_user_model(id, "vip_ct")
- }
- }
- }
А также прилагаю список констант флагов доступа (информация взята из amxconst.inc):
[pawn]
- #define ADMIN_ALL 0 /* everyone */
- #define ADMIN_IMMUNITY (1<<0) /* flag "a" */
- #define ADMIN_RESERVATION (1<<1) /* flag "b" */
- #define ADMIN_KICK (1<<2) /* flag "c" */
- #define ADMIN_BAN (1<<3) /* flag "d" */
- #define ADMIN_SLAY (1<<4) /* flag "e" */
- #define ADMIN_MAP (1<<5) /* flag "f" */
- #define ADMIN_CVAR (1<<6) /* flag "g" */
- #define ADMIN_CFG (1<<7) /* flag "h" */
- #define ADMIN_CHAT (1<<8) /* flag "i" */
- #define ADMIN_VOTE (1<<9) /* flag "j" */
- #define ADMIN_PASSWORD (1<<10) /* flag "k" */
- #define ADMIN_RCON (1<<11) /* flag "l" */
- #define ADMIN_LEVEL_A (1<<12) /* flag "m" */
- #define ADMIN_LEVEL_B (1<<13) /* flag "n" */
- #define ADMIN_LEVEL_C (1<<14) /* flag "o" */
- #define ADMIN_LEVEL_D (1<<15) /* flag "p" */
- #define ADMIN_LEVEL_E (1<<16) /* flag "q" */
- #define ADMIN_LEVEL_F (1<<17) /* flag "r" */
- #define ADMIN_LEVEL_G (1<<18) /* flag "s" */
- #define ADMIN_LEVEL_H (1<<19) /* flag "t" */
- #define ADMIN_MENU (1<<20) /* flag "u" */
- #define ADMIN_ADMIN (1<<24) /* flag "y" */
- #define ADMIN_USER (1<<25) /* flag "z" */