Русское сообщество по скриптингу

Плагин выдачи моделек по флагу

Новые плагины для AMX Mod X, которые были добавлены в базу плагинов нашего форума. Плагины еще не утвеждены администратором/модератором.

Модератор: Leonidddd

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

Данный раздел форума служит для добавления новых плагинов в базу нашего форума. После того, как администратор/модератор утвердит плагин, он будет перемещен в раздел "Утвежденные плагины".

Правила при добавлении новых плагинов:

1. При вставке кода плагина необходимо использовать тег [pawn], в противном случае, если тег [pawn] не отображает ваш код, можно использовать тег [code].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. Обязательно выкладывайте исходник sma плагина. Запрещено выкладывать amxx файл.
4. Обязательно указывайте настоящих авторов плагина, если вы использовали чьи-то наработки или функции, указывайте их авторов в сообщении.
5. Необходимо заполнять детальную информацию о плагине (версию, настройки, используемые модули, список изменений и другую).

Плагин выдачи моделек по флагу

Сообщение Шарль Перро » 07 июн 2014, 14:41

Приветствую вас, начинающие скриптеры. В этой статье я хотел бы вам рассказать, как простым способом назначить игрокам модели по флагу доступа. Все вопросы вы можете задать после обучения. Итак, приступим.(за помощь в работе и написании статьи благодарю оранжевую группировку
в лице subb98 и PRoSToTeM@)
1. Сперва мы подключаем необходимые библиотеки (инклуды) для работы данного плагина:

[pawn]
  1. #include <amxmodx>
[/pawn]
из которого мы будем использовать проверку на флаги и на подключение игрока к серверу, а также прекешируем модели, затем:

[pawn]
  1. #include <cstrike>
[/pawn]
при помощи которого мы будем проверять команду игрока и в зависимости от команды назначать игроку модель, затем:

[pawn]
  1. #include <hamsandwich>
[/pawn]
из которого мы будем использовать событие спауна игрока (спасибо Subb98 и PRoSToTeM@, за то, что объяснили, почему не стоит использовать ResetHUD в данном случае).

2. Приступаем к регистрации:

[pawn]
  1. public plugin_init

  2. {

  3.         //code

  4. }
[/pawn]
plugin_init - форвард-функция, которая вызывается при старте сервера, смене карты или рестарте сервера, в ней мы регистрируем событие спауна игрока:
3.
[pawn]
  1. RegisterHam(Ham_Spawn, "player", "SetModel", 1)
[/pawn]
4. Прекешируем файлы моделей:

[pawn]
  1. public plugin_precache()

  2. {

  3.         //code

  4. }
[/pawn]
Прописываем внутри функции пути до наших файлов моделей. Необходимо учесть, что конечная папка, в которой лежит модель, и название модели должны совпадать, например:

[pawn]
  1. precache_model("models/player/admin_ct/admin_tt.mdl")
[/pawn]
5. Прекешируем 2 модели (для Террористов и Контр-террористов):

[pawn]
  1. precache_model("models/player/admin_tt/admin_tt.mdl") // Для TT

  2. precache_model("models/player/admin_ct/admin_ct.mdl") // Для CT
[/pawn]
6. Обрабатываем функцию спауна игрока:

[pawn]
  1. public SetModel(const id)

  2. {

  3.         //code

  4. }
[/pawn]
6.1. Создаём новую переменную, в которой будем хранить id команды игрокаи переменную для упрощения кода проверки на флаг :

[pawn]
  1. new CsTeams:userTeam = cs_get_user_team(id), iFlags = get_user_flags(id)
[/pawn]
6.2. Проверяем игрока на подключение к серверу и наличие необходимого флага доступа для выдачи модели:

[pawn]
  1.  

  2. if(!is_user_connected(id)) return;

  3.  

  4. if(get_user_flags(id) & ADMIN_BAN)

  5. {

  6.         //code

  7. }
[/pawn]
6.3. Далее производим проверку на команду игрока:

[pawn]
  1. if(userTeam == CS_TEAM_T)

  2. {

  3.         //code

  4. }
[/pawn]
6.4. И, если игрок проходит данную проверку, назначаем ему модель Террориста:

[pawn]
  1. cs_set_user_model(id, "admin_tt")
[/pawn]
6.5. Аналогичным образом выполняем проверки для Контр-террориста, используя условный оператор else if:

[pawn]
  1. else if(userTeam == CS_TEAM_CT)

  2. {

  3.         cs_set_user_model(id, "admin_ct")

  4. }
[/pawn]
6.6. Если вы всё сделали верно, то в конечном итоге должен получиться такой код:

[pawn]
  1. #include <amxmodx>

  2. #include <cstrike>

  3. #include <hamsandwich>

  4.  

  5. public plugin_init()

  6. {

  7.         RegisterHam(Ham_Spawn, "player", "SetModel", 1)

  8. }

  9.  

  10. public plugin_precache()

  11. {

  12.         precache_model("models/player/admin_ct/admin_ct.mdl")

  13.         precache_model("models/player/admin_tt/admin_tt.mdl")

  14. }

  15.  

  16. public SetModel(const id)

  17. {

  18.         if(!is_user_connected(id)) return;

  19.         new CsTeams:userTeam = cs_get_user_team(id), iFlags = get_user_flags(id)

  20.         if(iFlags & ADMIN_BAN)

  21.         {

  22.                 if(userTeam == CS_TEAM_T)

  23.                 {

  24.                         cs_set_user_model(id, "admin_tt")

  25.                 }

  26.                 else if(userTeam == CS_TEAM_CT)

  27.                 {

  28.                         cs_set_user_model(id, "admin_ct")

  29.                 }

  30.         }

  31. }
[/pawn]
Также прилагаю код для двух флагов: для админа и вип-игрока:

[pawn]
  1. #include <amxmodx>

  2. #include <cstrike>

  3. #include <hamsandwich>

  4.  

  5. public plugin_init()

  6. {

  7.         RegisterHam(Ham_Spawn, "player", "SetModel", 1)

  8. }

  9.  

  10. public plugin_precache()

  11. {

  12.         precache_model("models/player/admin_tt/admin_tt.mdl")

  13.         precache_model("models/player/admin_ct/admin_ct.mdl")

  14.         precache_model("models/player/vip_tt/vip_tt.mdl")

  15.         precache_model("models/player/vip_ct/vip_ct.mdl")

  16. }

  17.  

  18. public SetModel(const id)

  19. {

  20.         if(!is_user_connected(id)) return;

  21.         new CsTeams:userTeam = cs_get_user_team(id), iFlags = get_user_flags(id)

  22.         if(iFlags & ADMIN_BAN)

  23.         {

  24.                 if(userTeam == CS_TEAM_T)

  25.                 {

  26.                         cs_set_user_model(id, "admin_tt")

  27.                 }

  28.                 else if(userTeam == CS_TEAM_CT)

  29.                 {

  30.                         cs_set_user_model(id, "admin_ct")

  31.                 }

  32.         }

  33.         else if(iFlags & ADMIN_LEVEL_H)

  34.         {

  35.                 if(userTeam == CS_TEAM_T)

  36.                 {

  37.                         cs_set_user_model(id, "vip_tt")

  38.                 }

  39.                 else if(userTeam == CS_TEAM_CT)

  40.                 {

  41.                         cs_set_user_model(id, "vip_ct")

  42.                 }

  43.         }

  44. }
[/pawn]
А также прилагаю список констант флагов доступа (информация взята из amxconst.inc):

[pawn]
  1. #define ADMIN_ALL               0       /* everyone */

  2. #define ADMIN_IMMUNITY          (1<<0)  /* flag "a" */

  3. #define ADMIN_RESERVATION       (1<<1)  /* flag "b" */

  4. #define ADMIN_KICK              (1<<2)  /* flag "c" */

  5. #define ADMIN_BAN               (1<<3)  /* flag "d" */

  6. #define ADMIN_SLAY              (1<<4)  /* flag "e" */

  7. #define ADMIN_MAP               (1<<5)  /* flag "f" */

  8. #define ADMIN_CVAR              (1<<6)  /* flag "g" */

  9. #define ADMIN_CFG               (1<<7)  /* flag "h" */

  10. #define ADMIN_CHAT              (1<<8)  /* flag "i" */

  11. #define ADMIN_VOTE              (1<<9)  /* flag "j" */

  12. #define ADMIN_PASSWORD          (1<<10) /* flag "k" */

  13. #define ADMIN_RCON              (1<<11) /* flag "l" */

  14. #define ADMIN_LEVEL_A           (1<<12) /* flag "m" */

  15. #define ADMIN_LEVEL_B           (1<<13) /* flag "n" */

  16. #define ADMIN_LEVEL_C           (1<<14) /* flag "o" */

  17. #define ADMIN_LEVEL_D           (1<<15) /* flag "p" */

  18. #define ADMIN_LEVEL_E           (1<<16) /* flag "q" */

  19. #define ADMIN_LEVEL_F           (1<<17) /* flag "r" */

  20. #define ADMIN_LEVEL_G           (1<<18) /* flag "s" */

  21. #define ADMIN_LEVEL_H           (1<<19) /* flag "t" */

  22. #define ADMIN_MENU              (1<<20) /* flag "u" */

  23. #define ADMIN_ADMIN             (1<<24) /* flag "y" */

  24. #define ADMIN_USER              (1<<25) /* flag "z" */
[/pawn]
Последний раз редактировалось Шарль Перро 08 июн 2014, 19:50, всего редактировалось 18 раз(а).
NEW IRS[IN`DEX Rank System]
ГОТОВ.
[spoiler]тык
185.22.234.222:27018[/spoiler]
Аватара пользователя
Шарль Перро
 
Сообщения: 362
Зарегистрирован: 07 май 2014, 18:02
Забанен
Благодарил (а): 93 раз.
Поблагодарили: 91 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: Плагин выдачи моделек по флагу

Сообщение Justick » 07 июн 2014, 15:24

Шарль Перро, ну зачем такой маленький плагин? Разве в паблике таких недостаточно?
Аватара пользователя
Justick
 
Сообщения: 389
Зарегистрирован: 01 июн 2014, 23:59
Благодарил (а): 28 раз.
Поблагодарили: 163 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: Плагин выдачи моделек по флагу

Сообщение Шарль Перро » 07 июн 2014, 15:26

Justick писал(а):Шарль Перро, ну зачем такой маленький плагин? Разве в паблике таких недостаточно?

У меня есть топик свой, я для него и сделал, чтобы готовый ответ , именно с данного форума был
NEW IRS[IN`DEX Rank System]
ГОТОВ.
[spoiler]тык
185.22.234.222:27018[/spoiler]
Аватара пользователя
Шарль Перро
 
Сообщения: 362
Зарегистрирован: 07 май 2014, 18:02
Забанен
Благодарил (а): 93 раз.
Поблагодарили: 91 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: Плагин выдачи моделек по флагу

Сообщение Justick » 07 июн 2014, 16:04

Шарль Перро, ну тогда принимай мою критику

Во-первых, зачем задействовать модуль cstrike? С заменой модели игрока хорошо справляется функция модуля amxmodx set_user_info.

Во-вторых, зачем два раза создавать переменную CsTeams? Лучше удали две эти строчки:
[pawn]
  1. new CsTeams:userTeam = cs_get_user_team(id)
[/pawn]
и пропиши одну в начале функции.

Ну и в-третьих, зачем функция cs_reset_user_model? И почему она только в проверке на админа, а у випов её нет?
Аватара пользователя
Justick
 
Сообщения: 389
Зарегистрирован: 01 июн 2014, 23:59
Благодарил (а): 28 раз.
Поблагодарили: 163 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: Плагин выдачи моделек по флагу

Сообщение D34by » 07 июн 2014, 16:11

Нет проверки is_user_alive при респавне
С установкой модели через cstrike правильно подметили
Work with Zombie Plague ver. 4|5, Biohazard, Zombie Engine, Public, Weapon System
Аватара пользователя
D34by
 
Сообщения: 537
Зарегистрирован: 13 фев 2014, 12:45
Благодарил (а): 15 раз.
Поблагодарили: 192 раз.
Опыт программирования: Больше трех лет
Языки программирования: пешка
сишка

Re: Плагин выдачи моделек по флагу

Сообщение Justick » 07 июн 2014, 16:14

D34by писал(а):Нет проверки is_user_alive при респавне
С установкой модели через cstrike правильно подметили

И это всё только в 45-строчном плагине.
Аватара пользователя
Justick
 
Сообщения: 389
Зарегистрирован: 01 июн 2014, 23:59
Благодарил (а): 28 раз.
Поблагодарили: 163 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: Плагин выдачи моделек по флагу

Сообщение Шарль Перро » 07 июн 2014, 16:25

не успел исправить.
дома буду сделаю, спс за замечания.
поэтому.
Последний раз редактировалось Шарль Перро 07 июн 2014, 16:58, всего редактировалось 1 раз.
NEW IRS[IN`DEX Rank System]
ГОТОВ.
[spoiler]тык
185.22.234.222:27018[/spoiler]
Аватара пользователя
Шарль Перро
 
Сообщения: 362
Зарегистрирован: 07 май 2014, 18:02
Забанен
Благодарил (а): 93 раз.
Поблагодарили: 91 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: Плагин выдачи моделек по флагу

Сообщение Justick » 07 июн 2014, 16:34

Шарль Перро писал(а):спс за замечания.

Повторю Вы должны зарегистрироваться, чтобы видеть ссылки.:
кнопочка есть)
Аватара пользователя
Justick
 
Сообщения: 389
Зарегистрирован: 01 июн 2014, 23:59
Благодарил (а): 28 раз.
Поблагодарили: 163 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: Плагин выдачи моделек по флагу

Сообщение Шарль Перро » 07 июн 2014, 16:39

лови.

Добавлено спустя 44 секунды:
ток юзер инфо смысла не вижу использовать в данном случае.

Добавлено спустя 1 минуту 32 секунды:
поправил верхний пост.
NEW IRS[IN`DEX Rank System]
ГОТОВ.
[spoiler]тык
185.22.234.222:27018[/spoiler]
Аватара пользователя
Шарль Перро
 
Сообщения: 362
Зарегистрирован: 07 май 2014, 18:02
Забанен
Благодарил (а): 93 раз.
Поблагодарили: 91 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: Плагин выдачи моделек по флагу

Сообщение Justick » 07 июн 2014, 16:45

Шарль Перро, а второй мой пункт почему проигнорировал?) Не лучше вот так:
[pawn]
  1. public SetModel(id)

  2. {

  3.         new CsTeams:userTeam = cs_get_user_team(id)

  4.         if ( is_user_connected(id) && get_user_flags(id) & ADMIN_BAN)

  5.         {

  6.                 if (userTeam == CS_TEAM_T) {

  7.                         cs_set_user_model(id, "admin_tt")

  8.                 }

  9.                 else if(userTeam == CS_TEAM_CT) {

  10.                         cs_set_user_model(id, "admin_ct")

  11.                 }

  12.         }

  13.         else if (get_user_flags(id) & ADMIN_LEVEL_H)

  14.         {

  15.                 if (userTeam == CS_TEAM_T) {

  16.                         cs_set_user_model(id, "vip_tt")

  17.                 }

  18.                 else if(userTeam == CS_TEAM_CT) {

  19.                         cs_set_user_model(id, "vip_ct")

  20.                 }

  21.         }

  22.  

  23. }
[/pawn]
?

Шарль Перро писал(а):ток юзер инфо смысла не вижу использовать в данном случае.

Тебе решать. Но всё-таки лучше через set_user_info.
Аватара пользователя
Justick
 
Сообщения: 389
Зарегистрирован: 01 июн 2014, 23:59
Благодарил (а): 28 раз.
Поблагодарили: 163 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

След.

Вернуться в Добавленные новые плагины

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2