Главная Новости Услуги Форум | База знаний

Вверх

Меню
Пользователей онлайн
Онлайн игроков: 60

Пример плагина: Хуки урона и здоровья (fun.inc + hamsandwich.inc)

Пример: вампиризм через fun + hamsandwich

<fun> — модуль работы с игроком: здоровье, оружие, оружие модели, noclip, godmode. <hamsandwich> — обёртка над HamSandwich, позволяет перехватывать движковые форварды: Ham_TakeDamage, Ham_Spawn, Ham_Killed и сотни других.

Что делает плагин

  • Игрок, нанёсший урон, лечится на 50% от нанесённого урона (вампиризм).
  • При спавне каждому игроку даётся 125 HP вместо 100.
  • Команда /heal в чат мгновенно лечит до 100 (кулдаун 30 сек).

Полный код плагина

#include <amxmodx>
#include <fun>
#include <hamsandwich>

new Float:g_next_heal[33];

public plugin_init()
{
    register_plugin("Vampire Mod", "1.0", "WikiExample");

    RegisterHam(Ham_TakeDamage, "player", "fwd_TakeDamage_Post", 1);
    RegisterHam(Ham_Spawn,      "player", "fwd_Spawn_Post", 1);

    register_clcmd("say /heal", "cmd_heal");
}

public fwd_TakeDamage_Post(victim, inflictor, attacker, Float:damage, damage_bits)
{
    if (!is_user_connected(attacker) || attacker == victim)
        return HAM_IGNORED;

    new Float:heal = damage * 0.5;
    new Float:new_hp;
    pev(attacker, pev_health, new_hp);  // fakemeta для чтения точного HP
    new_hp += heal;
    if (new_hp > 200.0) new_hp = 200.0;

    set_user_health(attacker, floatround(new_hp));  // fun.inc
    return HAM_IGNORED;
}

public fwd_Spawn_Post(id)
{
    if (!is_user_alive(id)) return HAM_IGNORED;

    set_task(0.5, "give_bonushp", id);  // ждём пока игрок полностью заспавнится
    return HAM_IGNORED;
}

public give_bonushp(id)
{
    if (is_user_alive(id))
        set_user_health(id, 125);
}

public cmd_heal(id)
{
    new Float:now = get_gametime();
    if (now < g_next_heal[id])
    {
        new Float:left = g_next_heal[id] - now;
        client_print(id, print_chat, "[Heal] Подождите %.1f сек.", left);
        return PLUGIN_HANDLED;
    }

    set_user_health(id, 100);
    g_next_heal[id] = now + 30.0;
    client_print(id, print_chat, "[Heal] HP восстановлено. Кулдаун 30 сек.");
    return PLUGIN_HANDLED;
}

Ключевые функции

  • set_user_health(id, hp) — ставит HP (fun.inc). get_user_health(id) — читает.
  • RegisterHam(Ham_TakeDamage, "player", "fwd", post=1) — перехват урона. post=1 = AFTER (по умолчанию pre).
  • set_user_godmode(id, 1) — включает бессмертие (fun.inc).
  • get_gametime() — игровое время (float), удобно для кулдаунов.
  • set_task(seconds, "func", id) — вызывает функцию через N секунд (amxmodx.inc).

Важно: RegisterHam для пост-хука возвращает HAM_IGNORED а не PLUGIN_CONTINUE.

Подробные инструкции и обсуждения ждём вас на нашем форуме — в разделе CS 1.6.
Назад