Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

> Правила форума

Этот раздел, как вы могли заметить по названию, предназначен для решения вопросов по поводу уже существующих модов и плагинов.
Пожалуйста, если у вас проблема с написанием плагина, не путайте этот раздел с разделом по скриптингу.
Для поиска плагинов и модов существует соответствующий раздел.

Название темы должно соответствовать содержанию. Темы с названием типа "Помогите", "Вопрос", "парни подскажите..." - будут удалены.
Все темы, не относящиеся к "Вопросам по модам и плагинам", будут удалены или перемещены в соответствующий раздел.

Правила оформления темы:
1. Помимо заголовка не забудьте верно сформулировать свой вопрос.
2. Выложите исходник (в тег кода + ) или ссылку на плагин который вызывает у вас вопросы.
3. Выложите лог с ошибками (если имеется) под спойлер

Перехватить нанесенный урон

Статус пользователя Metal Messiah
сообщение 8.2.2025, 21:49
Сообщение #1


Иконка группы

Стаж: 13 лет

Сообщений: 2458
Благодарностей: 1482
Полезность: 772

HostGame.cf
Приветствую. Кто как посоветует решить задачу перехватить наносимый игроком игроку урон при определенных условиях? Надо по условию изменять урон либо вообще отменять его.

Вариантов, используемых в разных плагинах, по сути два.

1. fakemeta, register_forward(FM_TraceLine, ...).
По сути функция вызывается когда игрок смотрит на игрока. Пример плагина где такой вариант используется - HeadShot Mod, когда засчитываются убийства только в голову. По сути там обработчик куда смотрел игрок в этот момент и если это была не голова - дальнейшие обработчики отменяются.

2. csx, client_damage()
Все классно и многофункционально, в параметрах вызываемой функции уже и id нападающего и жертвы, сумма урона, текущее оружие. Пример использования - плагин one knife hit kills. Там игрок "добивается" плагином. Но, судя по докам, This forward ignores the return value. То есть вмешаться и установить урон равный нулю невозможно.

Мне нужна комбинация этих двух способов, но чтобы функция не вызывалась по 100 раз в секунду как только один игрок смотрит на другого игрока.


Полезные публикации - ссылки у меня в профиле. Ссылка на плагин против спама на сервере StopServerSpam там же.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя murlemur
сообщение 8.2.2025, 22:28
Сообщение #2
Стаж: 5 лет 5 месяцев

Сообщений: 28
Благодарностей: 8
Полезность: 174

Metal Messiah,

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

#define DMG_MULTIPLIER_HEAD 0.5

public plugin_init()
    RegisterHookChain( RG_CBasePlayer_TraceAttack, "CBasePlayer_TraceAttack_Pre", false)

public CBasePlayer_TraceAttack_Pre( const id, const attacker, Float:damage, Float:vecDir[3], tr, bitsDamageType )
{
    if (get_tr2(tr, TR_iHitgroup) == HIT_HEAD)
            SetHookChainArg(3, ATYPE_FLOAT, damage * DMG_MULTIPLIER)
    
    return HC_CONTINUE
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Metal Messiah
сообщение 16.2.2025, 18:34
Сообщение #3


Иконка группы

Стаж: 13 лет

Сообщений: 2458
Благодарностей: 1482
Полезность: 772

HostGame.cf
Вот это как раз то что надо.
Запустилось с пол пинка.


Полезные публикации - ссылки у меня в профиле. Ссылка на плагин против спама на сервере StopServerSpam там же.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: