Regen

Сообщения
1,419
Реакции
2,510
Помог
59 раз(а)
Альтернативный вариант:

Код:
#include <amxmodx>
#include <reapi>

public plugin_init()
{
    register_plugin("Regeneration when falling", "1.0", "w0w");
    RegisterHookChain(RG_CBasePlayer_TakeDamage, "refwd_PlayerTakeDamage_Post", true);
}

public refwd_PlayerTakeDamage_Post(iVictim, iInflictor, iAttacker, Float:flDamage, iBitsDamageType)
{
    if(!(iBitsDamageType & DMG_FALL))
        return;

    new Float:flHealth;
    get_entvar(iVictim, var_health, flHealth);

    if((flHealth + flDamage) < 30.0)
        return;

    set_entvar(iVictim, var_health, 100.0);
    set_hudmessage(42, 255, 85, 0.0, 0.90, 0, 6.0, 3.0);
    show_hudmessage(iVictim, "Fall dmg: %0.f", flDamage);
}

Код:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

public plugin_init()
{
    register_plugin("Regeneration when falling", "1.0", "w0w");
    RegisterHamPlayer(Ham_TakeDamage, "hamfwd_PlayerTakeDamage_Post", true);
}

public hamfwd_PlayerTakeDamage_Post(iVictim, iInflictor, iAttacker, Float:flDamage, iBitsDamageType)
{
    if(!(iBitsDamageType & DMG_FALL))
        return;

    new Float:flHealth;
    pev(iVictim, pev_health, flHealth);

    if((flHealth + flDamage) < 30.0)
        return;

    set_pev(iVictim, pev_health, 100.0);
    set_hudmessage(42, 255, 85, 0.0, 0.90, 0, 6.0, 3.0);
    show_hudmessage(iVictim, "Fall dmg: %0.f", flDamage);
}
 

d3m37r4

111111
Сообщения
1,430
Реакции
1,170
Помог
10 раз(а)
Не проще в pre хуке блочить маленький урон от падения?
Код:
#include <amxmodx>
#include <reapi>

const Float:DMG_VALUE = 30.0;

public plugin_init() {

    RegisterHookChain(RG_CBasePlayer_TakeDamage, "HC_CBasePlayer_TakeDamage_Pre", false);
}

public HC_CBasePlayer_TakeDamage_Pre(const victim, inflictor, attacker, Float:damage, bitsdmg) {
    if(victim == attacker || !rg_is_player_can_takedamage(victim, attacker)) {
        return HC_CONTINUE;       
    }

    if(~bitsdmg & DMG_FALL || damage > DMG_VALUE) {
        return HC_CONTINUE;
    }

    set_hudmessage(42, 255, 85, 0.15, 0.85, 0, 6.0, 3.0);
    show_hudmessage(victim, "Урон от падения: %0.f", damage);

    SetHookChainArg(4, ATYPE_FLOAT, 0.0);

    return HC_CONTINUE;
}
 
Сообщения
2,143
Реакции
1,223
Помог
44 раз(а)
d3m37r4, проще вообще не морочить себе голову подобной фичей, которой сложно найти применение.
 
Сообщения
1,419
Реакции
2,510
Помог
59 раз(а)
d3m37r4, не понятно только почему проверяется только урон падения. У игрока может быть 100 HP и урон падения 60, и HP все равно должно восстанавливаться. Не должно только если меньше 30 HP.
 

d3m37r4

111111
Сообщения
1,430
Реакции
1,170
Помог
10 раз(а)
d3m37r4, проще вообще не морочить себе голову подобной фичей, которой сложно найти применение.
Это нужно ТС'у говорить, т.к. практического применения и ценности в том, что он хочет сделать, нет.
8 Июн 2019
не понятно только почему проверяется только урон падения.
Исходя из постов ТС'а я понял именно так, как представлено в примере, не более. ТС может условие проверки значения наносимого урона поменять под свои нужды, в моем посте лишь пример реализации. А то что именно ему нужно, он сможет сам доделать.
 

Ayk

Сообщения
763
Реакции
476
Помог
19 раз(а)
Это нужно ТС'у говорить, т.к. практического применения и ценности в том, что он хочет сделать, нет.
Я так понимаю, что это ему нужно для HNS сервера.
На одном сервере с этим модом видел как небольшой урон (от падения с небольшой высоты) регенерирует, ну а большой урон (от падения) отнимает жизни.
 

d3m37r4

111111
Сообщения
1,430
Реакции
1,170
Помог
10 раз(а)
В моем примере урон < 30 блочится. Больший урон отнимает жизни.
 

Ayk

Сообщения
763
Реакции
476
Помог
19 раз(а)
Я знаю. Я объяснил ценность и практическое применение.
 
Сообщения
2,723
Реакции
2,997
Помог
60 раз(а)
Autoheal on damage всегда этот использовался плагин

Код:
#include <amxmodx>
#include <fakemeta>

// Copyright
#define PLUGIN "HP Autoheal"
#define VERSION "1.4"
#define AUTHOR "AciD"

// Defines
#define TASKID 100
#define SOUND1 "misc/hp/1.wav"

// Cvars
new hp_reg,hp_regtime,hp_showdmg,hp_screenfade,hp_fade_r,hp_fade_g,hp_fade_b,hp_fade_a,hp_sounds

// Misc
new plrHeal[33]
new gmsgScreenFade

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    register_cvar("AcidoX", "Autoheal 1.4", FCVAR_SERVER)
    register_event("Damage", "damage", "b", "2>0")
    
    hp_reg = register_cvar("hp_reg", "60")
    hp_regtime = register_cvar("hp_regtime", "0.5")
    hp_showdmg = register_cvar("hp_showdmg", "1")
    hp_screenfade = register_cvar("hp_screenfade", "1")
    hp_fade_r = register_cvar("hp_fade_r", "200")
    hp_fade_g = register_cvar("hp_fade_g", "0")
    hp_fade_b = register_cvar("hp_fade_b", "0")
    hp_fade_a = register_cvar("hp_fade_a", "65")
    hp_sounds = register_cvar("hp_sounds", "1")
    
    gmsgScreenFade = get_user_msgid("ScreenFade")
}

public damage(id)
{
    new dmg = read_data(2)
    
    if(read_data(4) != 0 || read_data(5) != 0 || read_data(6) != 0) return
    
    if((get_pcvar_num(hp_showdmg) == 1) && dmg < 100) {
    new msg[32]
    formatex(msg, 31, "Damage: %i", dmg)
    set_hudmessage(255, 0, 0, 0.05, 0.9, 0, 2.0, 2.0, 0.2)
    show_hudmessage(id, msg)
    
    if((get_pcvar_num(hp_sounds) == 1) && dmg < 100) {
        client_cmd(id, "speak %s", SOUND1)
    }
}
    plrHeal[id] += dmg
    
    if(!task_exists(TASKID + id))
    {
        set_task(get_pcvar_float(hp_regtime), "tsk_heal", id + TASKID)
        
        if((get_pcvar_num(hp_screenfade) == 1) && dmg < 100) {

        message_begin(MSG_ONE, gmsgScreenFade, _, id)
        write_short(1<<10)
        write_short(1<<10)
        write_short(0x0000)
        write_byte(get_pcvar_num(hp_fade_r))
        write_byte(get_pcvar_num(hp_fade_g))
        write_byte(get_pcvar_num(hp_fade_b))
        write_byte(get_pcvar_num(hp_fade_a))
        message_end()
        }
    }
}


public tsk_heal(id)
{
    id -= TASKID
    
    if(plrHeal[id] == 0) return
    if(!is_user_alive(id))
    {
        plrHeal[id] = 0
        return
    }
    new hp_reg2 = get_pcvar_num(hp_reg);
    new hp = pev(id, pev_health)
    
    plrHeal[id] > hp_reg2 ? (plrHeal[id] = hp_reg2) : 0
    
    if(hp + plrHeal[id] > 100)
    {
        plrHeal[id] = 0
        return
    }

    set_pev(id, pev_health, float(hp + plrHeal[id]))
    plrHeal[id] = 0
    
    return
}

public plugin_precache()
{
        precache_sound(SOUND1)
}

public plugin_cfg()
{
    new cfg[128]
    format(cfg, 127, "%s/autoheal.cfg", cfg)
    if (file_exists(cfg))
    {
        server_exec()
        server_cmd("exec %s", cfg)
    }
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1049\\ f0\\ fs16 \n\\ par }
*/
 
  • Нравится
Реакции: Ayk

d3m37r4

111111
Сообщения
1,430
Реакции
1,170
Помог
10 раз(а)
Вот еще такой вариант на форуме нашел
 
Сообщения
73
Реакции
8
Вы не понимаете, что нужно ТС-у.
NeZo вам нужен плагин с сервера табурета ?

upd: плагин выше
 
Последнее редактирование:

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу