ReAPI [1.0.7] Vampire

Mmonster

Пользователь
Регистрация
9 Июн 2017
Сообщения
462
Симпатии
211
Пол
Мужской
#1
Автор: MakapoH . AcE
Версия: 1.0.7

Описание :
Плагин прибавляет указанное кол-во HP за убийство противника.

Требования :
  • ReGameDLL
  • ReAPI
Настройки:
PHP:
#define    FLAG_ACCESS ADMIN_LEVEL_H // Выдавать только указанным флагам. Если не нужно - закомментируйте.
//#define FFA_MODE             // Поддержка CSDM FFA.
#define HP_MAX 100.0 // Макс. кол-во HP.
#define HP_BODY 5.0     // За убийство в тело.
#define HP_HS 10.0 // За убийство в голову.
#define KILL_SOUND             // Звук при убийстве противника.
#define HUD_MESSAGE             // HUD Сообщение о прибавке hp.
#define SCREEN_FADE // Мерцание экрана при убийстве. (Если игрок слепой то мерцать не будет)
//#define BLOCK_MAPS             // Блокировка вампира на определённых картах. Создайте фаил vampire_block_maps.ini и запишите туда карты. (Блокировка накладывается только на выдачу HP и сообщение! Остальные функции плагина будут работать без изменений)
Версия 1.0.4
  • Переписана часть кода
Это
C++:
new Float:flKillerHp = Float:get_entvar(killerId, var_health)
    flKillerHp += get_member(victimId, m_bHeadshotKilled) ? HP_HS : HP_BODY
    if(flKillerHp > HP_MAX)
        flKillerHp = HP_MAX
    set_entvar(killerId, var_health, flKillerHp)
Заменено на это
C++:
 new Float:killer_HP = get_entvar(killerId, var_health)
    new Float:TempHP = get_member(victimId, m_bHeadshotKilled) ? HP_HS : HP_BODY
    set_entvar(killerId, var_health, ((killer_HP += TempHP) > HP_MAX) ? HP_MAX : killer_HP)
  • Исправлена выдача хп игроку,когда он мёртв.
  • Исправлена работа плагина с несколькими флагами
    C++:
    #define FLAG_ACCESS (ADMIN_BAN|ADMIN_LEVEL_H)
  • Если у игрока hp = HP_MAX ,то сообщение не будет выводится.
Версия 1.0.5
  • Мелкие правки по коду.
  • Добавлена поддержка CSDM FFA
    C++:
    #define FFA_MODE // Поддержка CSDM FFA.
  • Добавлена проверка на бомбу - Теперь игроку не дает HP за взрыв бомбы
Версия 1.0.6
  • C++:
    #define SCREEN_FADE // Мерцание экрана при убийстве. (Если игрок слепой то мерцать не будет)
Версия 1.0.7
  • Блокировка карт
    Код:
    //#define BLOCK_MAPS             // Блокировка вампира на определённых картах. Создайте фаил vampire_block_maps.ini и запишите туда карты. (Блокировка накладывается только на выдачу HP и сообщение! Остальные функции плагина будут работать без изменений)
В архиве re_vampire.zip находится оригинальная версия + 1.0.4
 

Вложения

Последнее редактирование: Mmonster

To be or not to be

Пользователь
Регистрация
9 Июн 2017
Сообщения
399
Симпатии
72
#2
MakapoH. , если не сложно, можешь сделать прибавление хп не за убийство, а за нанесение урона? (допустим, нанес 20 урона ~ +5ХП)
 

REVO

Заблокированные
Пользователь
Регистрация
9 Июн 2017
Сообщения
278
Симпатии
68
Пол
Мужской
#5
MakapoH., кстати вот это: Исправлена выдача хп игроку,когда он мёртв.
Я случайно заметил, было такое всего 2 раза, с ботами играл пол дня точна.

а это: Если у игрока hp = HP_MAX ,то сообщение не будет выводится. (моя идея была)
вообще нужно было делать изначально. Так просто правильнее!
 

REVO

Заблокированные
Пользователь
Регистрация
9 Июн 2017
Сообщения
278
Симпатии
68
Пол
Мужской
#6
обнаружен баг!
играл с другом 1 на 1, он был афк 3 раунда, по истечении 3 раунда, я услышал звук пик от вампира! я его даже не убивал..
Код:
#include <amxmodx>
#include <reapi>

#define HP_BODY 10.0             // Кол-во hp за убийство.
#define HP_HS 15.0             // Кол-во hp за убийство в голову.
#define HP_MAX 100.0             // Максимальное Кол-во hp. (Выше этого значения hp прибавлять не будет)
#define KILL_SOUND             // Звук при убийстве противника.
#define HUD_MESSAGE             // HUD Сообщение о прибавке hp.
#define FLAG_ACCESS (ADMIN_BAN|ADMIN_LEVEL_H)    // Выдавать только указанным флагам. Можно выдавать сразу нескольким (ADMIN_BAN|ADMIN_LEVEL_H) Если не нужно то закомментируйте.

#if defined HUD_MESSAGE
new g_MsgSyncObj
#endif

new g_iMaxPlayers

public plugin_init()
{
    register_plugin("RE Vampire", "1.0.3", "MakapoH, AcE")
    RegisterHookChain(RG_CBasePlayer_Killed, "CBasePlayer_Killed_Post", 1)

    #if defined HUD_MESSAGE
    g_MsgSyncObj = CreateHudSyncObj()
    #endif

    g_iMaxPlayers = get_member_game(m_nMaxPlayers)
}

public CBasePlayer_Killed_Post(const victimId, killerId, iGib)
{
    if
    (
        1 <= victimId <= g_iMaxPlayers &&
        1 <= killerId <= g_iMaxPlayers &&
        victimId != killerId
    )
    {
        #if defined FLAG_ACCESS
        if (!is_user_connected(killerId) || !(get_user_flags(killerId) & FLAG_ACCESS)) return
        #endif

        if (is_user_alive(killerId))
        {
            static Float:killer_HP, Float:TempHP
            killer_HP = get_entvar(killerId, var_health)
            TempHP = get_member(victimId, m_bHeadshotKilled) ? HP_HS : HP_BODY

            #if defined KILL_SOUND
            client_cmd(killerId, "spk buttons/bell1")
            #endif

            #if defined HUD_MESSAGE
            if (killer_HP < HP_MAX)
            {
                set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0)
                ShowSyncHudMsg(killerId, g_MsgSyncObj, "Добавлено +%.0f ХП", TempHP)
            }
            #endif
            set_entvar(killerId, var_health, ((killer_HP += TempHP) > HP_MAX) ? HP_MAX : killer_HP)
        }
    }
}
как надоел этот вампир. стоко багов я в нем находил... и опять...
пожалусто прошу, ну почините вы его уже капитально
 
Последнее редактирование: REVO

Mmonster

Пользователь
Регистрация
9 Июн 2017
Сообщения
462
Симпатии
211
Пол
Мужской
#7
### Обновлен первый пост ###
  • Добавлена версия 1.0.5 от AcE
    • Мелкие правки по коду.
    • Добавлена поддержка CSDM FFA
      • #define FFA_MODE // Поддержка CSDM FFA.
    • Добавлена проверка на бомбу - Теперь игроку не дает HP за взрыв бомбы
  • Добавлена версия 1.0.6
    • #define SCREEN_FADE
      Код:
      #define SCREEN_FADE // Мерцание экрана при убийстве. (Если игрок слепой то мерцать не будет)
 

Mmonster

Пользователь
Регистрация
9 Июн 2017
Сообщения
462
Симпатии
211
Пол
Мужской
#8
### Обновлен первый пост ###
  • Версия 1.0.7
    • Добавлена блокировка карт
      • Код:
        #define BLOCK_MAPS // Блокировка вампира на определённых картах. Создайте в папке configs файл vampire_block_maps.ini и запишите туда карты. (Блокировка накладывается только на выдачу HP и сообщение! Остальные функции плагина будут работать без изменений)
 

den4ik

Пользователь
Регистрация
8 Июл 2017
Сообщения
30
Симпатии
2
Пол
Мужской
#9
Код:
#define HP_MAX 100.0             // Максимальное Кол-во hp. (Выше этого значения hp прибавлять не будет)
По факту, если у игрока было больше чем 100хп, то при убийстве у него снижается до 100хп
Возможно ли сделать, чтобы плагин действительно просто не прибавлял выше указанного значения?
Вкратце, зачем так нужно? На модовых серверах есть и другие способы пополнения хп, но вот именно от вампирки необходимо просто ограничить получение до определенного уровня и чтобы не сбрасывала до HP_MAX значения если хп больше.
 

To be or not to be

Пользователь
Регистрация
9 Июн 2017
Сообщения
399
Симпатии
72
#12
sonyx, тк, а может просто если больше MAX_HP то return plugin handled ? не ?
 

den4ik

Пользователь
Регистрация
8 Июл 2017
Сообщения
30
Симпатии
2
Пол
Мужской
#13
sonyx, To be or not to be,
Как тут правильно сделать, чтобы не сбрасывало до HP_MAX?заменял на
get_entvar(killer, var_max_health) , не помогло

Код:
#endif
        static Float:killer_HP, Float:TempHP
        killer_HP = get_entvar(killer, var_health)
        TempHP = get_member(victim, m_bHeadshotKilled) ? HP_HS : HP_BODY

        #if defined HUD_MESSAGE
        if (killer_HP < HP_MAX)
        {
            static SyncHudMsg
            if (!SyncHudMsg) SyncHudMsg = CreateHudSyncObj()
            set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0)
            ShowSyncHudMsg(killer, SyncHudMsg, "Добавлено +%.0f ХП", TempHP)
        }
        #endif

        set_entvar(killer, var_health, ((killer_HP += TempHP) > HP_MAX) ? HP_MAX : killer_HP)
 

To be or not to be

Пользователь
Регистрация
9 Июн 2017
Сообщения
399
Симпатии
72
#14
den4ik, попробуй вот так

Код:
#endif
        static Float:killer_HP, Float:TempHP
        killer_HP = get_entvar(killer, var_health)
        TempHP = get_member(victim, m_bHeadshotKilled) ? HP_HS : HP_BODY

        #if defined HUD_MESSAGE
        if (killer_HP < HP_MAX)
        {
            static SyncHudMsg
            if (!SyncHudMsg) SyncHudMsg = CreateHudSyncObj()
            set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0)
            ShowSyncHudMsg(killer, SyncHudMsg, "Добавлено +%.0f ХП", TempHP)
        }
        #endif

        return PLUGIN_HANDLED
 

Coder

Пользователь
Регистрация
10 Июн 2017
Сообщения
101
Симпатии
33
Пол
Мужской
#16
sonyx, To be or not to be,
Как тут правильно сделать, чтобы не сбрасывало до HP_MAX?заменял на
get_entvar(killer, var_max_health) , не помогло

Код:
#endif
        static Float:killer_HP, Float:TempHP
        killer_HP = get_entvar(killer, var_health)
        TempHP = get_member(victim, m_bHeadshotKilled) ? HP_HS : HP_BODY

        #if defined HUD_MESSAGE
        if (killer_HP < HP_MAX)
        {
            static SyncHudMsg
            if (!SyncHudMsg) SyncHudMsg = CreateHudSyncObj()
            set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0)
            ShowSyncHudMsg(killer, SyncHudMsg, "Добавлено +%.0f ХП", TempHP)
        }
        #endif

        set_entvar(killer, var_health, ((killer_HP += TempHP) > HP_MAX) ? HP_MAX : killer_HP)
попробуй так
C++:
static Float:killer_HP, Float:TempHP
        killer_HP = get_entvar(killer, var_health)
        TempHP = get_member(victim, m_bHeadshotKilled) ? HP_HS : HP_BODY

        #if defined HUD_MESSAGE
            static SyncHudMsg
            if (!SyncHudMsg) SyncHudMsg = CreateHudSyncObj()
            set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0)
            ShowSyncHudMsg(killer, SyncHudMsg, "Добавлено +%.0f ХП", TempHP)
        #endif

        set_entvar(killer, var_health, killer_HP + TempHP)
 

To be or not to be

Пользователь
Регистрация
9 Июн 2017
Сообщения
399
Симпатии
72
#17
Coder, конечно, можно и так. Но ты удалил HP_MAX проверки и тд.
 

Coder

Пользователь
Регистрация
10 Июн 2017
Сообщения
101
Симпатии
33
Пол
Мужской
#18

To be or not to be

Пользователь
Регистрация
9 Июн 2017
Сообщения
399
Симпатии
72
#19
Coder, ты вообще убрал проверку на хп макс. По его сообщению я понял, что она ему нужна, но чтобы хп не прибавлялось и не устанавливало HP_MAX.
 

Coder

Пользователь
Регистрация
10 Июн 2017
Сообщения
101
Симпатии
33
Пол
Мужской
#20
Coder, ты вообще убрал проверку на хп макс. По его сообщению я понял, что она ему нужна, но чтобы хп не прибавлялось и не устанавливало HP_MAX.
а я думаю он имел ввиду, что например игрок вип и у него есть 120 хп допустим, но когда он убивает ему эти 120 хп обрезает до 100, если нужно проверка на максимум хп, то никто не отменяет ему ее вернуть обратно
1 Ноя 2017
Coder, ты вообще убрал проверку на хп макс. По его сообщению я понял, что она ему нужна, но чтобы хп не прибавлялось и не устанавливало HP_MAX.
а если еще подробно вчитаться в написанный текст что просят, то можно понять, что есть мод сервак со своей системой расчета как я понял по каким-то уровням, то ему надо делать проверки на уровень игрока и исходя из него применять вампирку или нет. Приведу пример паблика со званиями, есть допустим звание маршал и за звание дается 110 хп, а этот игрок, у которого маршал, обладает випкой, в которой вшит вампиризм. Так вот когда он убивает со своими 110 хп, то ему сбрасывает на 100, что по сути не должно происходить. Но если увеличить максимум хп до 110, то другие випы у которых нет звания маршал и 110 хп, смогут прокачивать свое хп до 110, что не есть логично