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

Admin Respawn (Респавн админа после смерти)

Плагины для AMX Mod X, которые не удовлетворяют правилам оформления.

Модератор: Leonidddd

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

Admin Respawn (Респавн админа после смерти)

Сообщение Louten » 20 фев 2020, 02:04

Admin Respawn

Автор: RoGuE
Версия: 3.0

Описание: Плагин, который позволяет возрождаться игрокам с определенным флагом после смерти. Подойдет для почти любого мода.


Плагин позволяет изменить:
Код: Выделить всё
#define MIN_ROUND     3           // Через сколько раундов давать доступ к возраждениям
#define MAX_RESPAWN   1           // Сколько раз можно использовать возрождение
#define HP_SPAWN      50          // Сколько ХП выдавать при возрождении
#define DELAY_SPAWN   3           // Задержка перед спавном (в секундах)
#define FLAG_SPAWN    ADMIN_BAN   // Флаг доступа
 


Не позволяет возрождаться когда игрок живой, когда находиться в спектаторах, так же не больше кол-ва раз чем записано в "MAX_RESPAWN". Меню возрождения после смерти открывается столько раз, сколько написано в "MAX_RESPAWN".

(p.s. прошу не ругать за код, мой первый "серьезный" плагин, писался для себя)

В будущем добавлю ограничение по онлайну, а так же по кол-во игроков которые остались в живых.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Louten
 
Сообщения: 3
Зарегистрирован: 06 фев 2020, 07:46
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Языки программирования: Я ничего не знаю

Re: Admin Respawn (Респавн админа после смерти)

Сообщение fl0wer » 21 фев 2020, 06:15

Код: Выделить всё
  case 2: {client_cmd(id, "")
  }
  }

Вы что, гений?
Аватара пользователя
fl0wer
 
Сообщения: 1687
Зарегистрирован: 27 фев 2011, 21:35
Откуда: Россия, Ижевск
Благодарил (а): 240 раз.
Поблагодарили: 508 раз.
Опыт программирования: Больше трех лет
Языки программирования: C++, Java, PAWN

Re: Admin Respawn (Респавн админа после смерти)

Сообщение Leonidddd » 21 фев 2020, 16:25

Сугубо полезная для автора критика:

1. Код не читабелен, используйте стиль для написания а ля Вы должны зарегистрироваться, чтобы видеть ссылки. или же почитать Вы должны зарегистрироваться, чтобы видеть ссылки., займет не особо много времени, но всем будет потом понятен ваш код в разы и вам легче будет кодить в дальнейшем. Переменную get_maxplayers стоит запоминать заранее(создать глобальную переменную и присвоить ей значение maxplayers-a).

2.
Код: Выделить всё
/*------------------ EDIT ME ------------------*/
#define MIN_ROUND     3           // Через сколько раундов давать доступ к возраждениям
#define MAX_RESPAWN   1           // Сколько раз можно использовать возрождение
#define HP_SPAWN      50          // Сколько ХП выдавать при возрождении
#define DELAY_SPAWN   3           // Задержка перед спавном (в секундах)
#define FLAG_SPAWN    ADMIN_BAN   // Флаг доступа
/*------------------ EDIT ME ------------------*/ 


Если пишите свои плагины для публики, то желательно заранее учиться переводить все это в квары.

3. В client_death проверка is_user_alive(victim) == 0 не имеет смысла т.к. игрок явно уже умер :-) но имеет смысл проверять, в сети ли ещё игрок.

4. client_cmd(id, "") - реально, зачем?

5. Меню статичное лучше заранее сохранить и не создавать каждый раз( ну, тут уж спичечная оптимизэишн)

6. Если вдруг на сервере произойдет РР карты, то rounds_compl не сбросится, а значит, спавниться смогут раньше MIN_ROUND-а, необходимо сбрасывать переменную счетчика во время отлова рестарта.

7. Больше логических отступов(тип, функционал одной части кода в функции желательно как бы отделять друг от друга отступом, чтобы проще было читать).

8.
Код: Выделить всё
else if(g_F_counter[id] < MAX_RESPAWN && is_user_alive(id) == 0){
    ExecuteHamB(Ham_CS_RoundRespawn, id)
    set_user_health(id, HP_SPAWN)
    ColorChat(id,RED,"^4Вы были возрожденны.")
    g_F_counter[id]++
  }else if(is_user_alive(id) == 1){
    ColorChat(id,RED,"^3Вы не можете возродиться, так как вы живы.")
  }else{
    ColorChat(id,RED,"^3Вы больше не можете возрождаться в этом раунде.")
  


Нелогично, лучше проверки на жив ли игрок в самое начало 1 раз и дальше уже добавлять остальные по необходимости, примерно так:

Код: Выделить всё
if(is_user_alive(id)) return ColorChat(id,RED,"^3Вы не можете возродиться, так как вы живы."); 


9. и ещё

Код: Выделить всё
  switch (Choise) {
  case 1: {
    set_task(DELAY_SPAWN.0, "admin_spawn", id)
    ColorChat(id,RED,"^4Вы будете возрожденны через ^3%d секунды",DELAY_SPAWN)
  }
  case 2: {client_cmd(id, "")
  



Достаточно было сделать такую проверку, вместо того switch-a :

Код: Выделить всё
    if(Choise == 1){

        set_task(DELAY_SPAWN.0, "admin_spawn", id);
        ColorChat(id,RED,"^4Вы будете возрожденны через ^3%d секунды",DELAY_SPAWN);
    


10. На данном форуме не приветствуется прикрепление .amxx файлов, только .sma или же архивы с .sma/.cfg файлами.

Надеюсь, этот пост поможет вам писать в разы лучше в дальнейшем :-) нету предела совершенству, так сказать.

Не утверждено. Необходимы правки в плагине для утверждения // Leonidddd
Аватара пользователя
Leonidddd
Модератор
 
Сообщения: 2557
Зарегистрирован: 08 апр 2012, 18:13
Откуда: г. Запорожье
Благодарил (а): 192 раз.
Поблагодарили: 718 раз.


Вернуться в Неутвержденные плагины

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

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