ReHLDS/ReAPI [1.0.7] Vampire

Mmonster

Пользователь
Регистрация
9 Июн 2017
Сообщения
604
Симпатии
294
Предупреждения
15
Пол
Мужской
Автор: 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
 

Вложения

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

To be or not to be

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

Mmonster

Пользователь
Регистрация
9 Июн 2017
Сообщения
604
Симпатии
294
Предупреждения
15
Пол
Мужской
  • В первый пост добавлена новая версия. Спасибо AcE
 
  • Мне нравится
Симпатии: REVO

REVO

Пользователь
Регистрация
9 Июн 2017
Сообщения
271
Симпатии
78
Пол
Мужской
ВКонтакте
isss67wtf
StockX, кстати вот это: Исправлена выдача хп игроку,когда он мёртв.
Я случайно заметил, было такое всего 2 раза, с ботами играл пол дня точна.

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

REVO

Пользователь
Регистрация
9 Июн 2017
Сообщения
271
Симпатии
78
Пол
Мужской
ВКонтакте
isss67wtf
обнаружен баг!
играл с другом 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)
        }
    }
}
как надоел этот вампир. стоко багов я в нем находил... и опять...
пожалусто прошу, ну почините вы его уже капитально
 
Последнее редактирование:

Mmonster

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

Mmonster

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

den4ik

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

sonyx

Заблокированные
Регистрация
8 Июн 2017
Сообщения
488
Симпатии
242
den4ik, get_entvar(killer, var_max_health)
 

To be or not to be

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

den4ik

Пользователь
Регистрация
8 Июл 2017
Сообщения
99
Симпатии
17
Пол
Мужской
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
Сообщения
1.217
Симпатии
304
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
Сообщения
207
Симпатии
81
Пол
Мужской
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
Сообщения
1.217
Симпатии
304
Coder, конечно, можно и так. Но ты удалил HP_MAX проверки и тд.
 

Coder

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

To be or not to be

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

Coder

Пользователь
Регистрация
10 Июн 2017
Сообщения
207
Симпатии
81
Пол
Мужской
Coder, ты вообще убрал проверку на хп макс. По его сообщению я понял, что она ему нужна, но чтобы хп не прибавлялось и не устанавливало HP_MAX.
а я думаю он имел ввиду, что например игрок вип и у него есть 120 хп допустим, но когда он убивает ему эти 120 хп обрезает до 100, если нужно проверка на максимум хп, то никто не отменяет ему ее вернуть обратно[DOUBLEPOST=1509542824][/DOUBLEPOST]
Coder, ты вообще убрал проверку на хп макс. По его сообщению я понял, что она ему нужна, но чтобы хп не прибавлялось и не устанавливало HP_MAX.
а если еще подробно вчитаться в написанный текст что просят, то можно понять, что есть мод сервак со своей системой расчета как я понял по каким-то уровням, то ему надо делать проверки на уровень игрока и исходя из него применять вампирку или нет. Приведу пример паблика со званиями, есть допустим звание маршал и за звание дается 110 хп, а этот игрок, у которого маршал, обладает випкой, в которой вшит вампиризм. Так вот когда он убивает со своими 110 хп, то ему сбрасывает на 100, что по сути не должно происходить. Но если увеличить максимум хп до 110, то другие випы у которых нет звания маршал и 110 хп, смогут прокачивать свое хп до 110, что не есть логично
 
Сверху Снизу