Увеличить урон при попадании в голову

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
374
Реакции
47
Помог
6 раз(а)
Всем привет. Решил написать плагин который увеличивает урон ножа при попадании в голову.

C++:
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>

#define PLUGIN      "DAMAGE FACTOR"
#define VERSION     "0.1"
#define AUTHOR      "DEVV"

public plugin_init()
{
        register_plugin(PLUGIN, VERSION, AUTHOR)
}

public Forward_TraceAttack(id, attacker, Float:dmg, Float:dir[3], tr, dmgbit)
{
        if(get_user_weapon(attacker) == CSW_KNIFE && get_tr2(tr, TR_iHitgroup) == HIT_HEAD) SetHamParamFloat(4, dmg * 5);
}
Тут для примера я взял нож, что я делаю не так?
 
Сообщения
27
Реакции
17
Помог
2 раз(а)
RegisterHam(Ham_TraceAttack, "player", "Forward_TraceAttack") в plugin_init
 
Сообщения
893
Реакции
149
Помог
25 раз(а)
1. Как сказал человек выше - возьми и в plugin_init вставь код, что он предоставил.
2. Почему бы просто не взять мембер из реапи?
Diff:
- if(get_user_weapon(attacker) == CSW_KNIFE && get_tr2(tr, TR_iHitgroup) == HIT_HEAD) SetHamParamFloat(4, dmg * 5);
Diff:
+ if(get_user_weapon(attacker) == CSW_KNIFE && get_member(victim, m_bHeadshotKilled) SetHamParamFloat(4, dmg * 5);
А вообще, лучше так сделать:
C++:
#include <AmxModX>
#include <ReApi>

public plugin_init() {
    register_plugin("[AMXX] Damage Edit", "0.1", "ImmortalAmxx");
   
    RegisterHookChain(RG_CBasePlayer_TakeDamage, "@RG_CBasePlayer_TakeDamage_Pre", .post = false);
}

@RG_CBasePlayer_TakeDamage_Pre(pVictim, iInflictor, pAttacker, Float:flDamage, iBits) {
    new iActiveItem = get_member(pAttacker, m_pActiveItem);
   
    if(is_nulent(iActiveItem) || !is_user_connected(pAttacker)) {
        return;
    }

    new iItem = get_member(iActiveItem, m_iId);
   
    if(iItem == CSW_KNIFE && get_member(pVictim, m_bHeadshotKilled)) {
        SetHookChainArg(4, ATYPE_FLOAT, flDamage * 5.0);
    }
}
Забей, я тупой немного, не актуально, просто сделай так, как сказал человек выше.
 
Последнее редактирование:
Сообщения
893
Реакции
149
Помог
25 раз(а)
DEVV, да мой метод не поможет, забей, я забыл, что m_bHeadshotKilled срабатывает уже после убийства.
 
Сообщения
374
Реакции
47
Помог
6 раз(а)

d3m37r4

111111
Сообщения
1,454
Реакции
1,194
Помог
10 раз(а)
bizon, думаешь в пре-хуке будет актуальная инфа по попаданию?
 
Сообщения
494
Реакции
341
Помог
11 раз(а)
d3m37r4, он спросил про способ - я ответил. По крайней мере другие варианты без костылей на реапи мне неизвестны. А трэйсы ТС'а, видимо, не устраивают.
 
Сообщения
494
Реакции
341
Помог
11 раз(а)
Код:
public plugin_init()
{
    RegisterHookChain(RG_CBasePlayer_TraceAttack, "@CBasePlayer_TraceAttack_Pre");
    RegisterHookChain(RG_CBasePlayer_TakeDamage, "@CBasePlayer_TakeDamage_Pre");
}

@CBasePlayer_TraceAttack_Pre(pVictim, pAttacker, Float: fDamage, Float: fDir[3], iTraceHandle, iBitsDamageType)
{
    if(get_tr2(iTraceHandle, TR_iHitgroup) == HIT_HEAD)
        client_print_color(pAttacker, print_team_default, "[TraceAttack] [HEAD]");
}

@CBasePlayer_TakeDamage_Pre(pVictim, eInflictor, pAttacker, Float: fDamage, iBitsDamageType)
{
    if(get_member(pVictim, m_LastHitGroup) == HIT_HEAD)
        client_print_color(pAttacker, print_team_default, "[TakeDamage] [HEAD]");
}
Работает аналогично. Но вариант с get_member(pVictim, m_LastHitGroup) технически вернее.
 
Сообщения
1,701
Реакции
1,512
Помог
26 раз(а)
bizon, с трейсом техничнее, так как будет больше крови, она в трейсАттак рисуется от количества урона.
 
Сообщения
494
Реакции
341
Помог
11 раз(а)
fl0wer, просто чекать результаты трейса выглядит больше как костыль, нежели получение m_LastHitGroup с пдаты. Имхо.
 
  • Не нравится
Реакции: Ruby
Сообщения
1,701
Реакции
1,512
Помог
26 раз(а)
Сообщения
494
Реакции
341
Помог
11 раз(а)
fl0wer, движком уже в пдату записано попадание в последнюю хит группу, проще же уже получить это значение int, нежели обходными путями через get_tr2 получать.
Мне кажется это технически вернее.
А как минимум проще и быстрее.
 
Сообщения
1,701
Реакции
1,512
Помог
26 раз(а)
bizon, почему get_tr2 обходной путь? Чем проще и быстрее)
 
Сообщения
494
Реакции
341
Помог
11 раз(а)
fl0wer, в 1-ом случае сам движок запишет последнюю хит группу, нужно только получить ее, во 2-ом - через get_tr2 ты будешь получать вручную, грубо говоря. Разные уровни обработки.
На бумаге мы должны доверять больше движку. Поэтому я и говорю, что технически правильнее. А как оно будет по факту дело совсем другое.
Ещё я сомневаюсь в стопроцентном совпадении результатов у этих алгоритмических реализаций, поэтому резонный вопрос: а стоит ли их сравнивать?
 
Сообщения
1,701
Реакции
1,512
Помог
26 раз(а)
На бумаге мы должны доверять больше движку.
Трейсы из движка, причем дальше, чем игровая либа. Значит надежднее?

@fl0wer, в 1-ом случае сам движок запишет последнюю хит группу, нужно только получить ее, во 2-ом - через get_tr2 ты будешь получать вручную, грубо говоря. Разные уровни обработки.
Через get_tr2 ты просто берешь после трейса данные из структуры, тоже самое.

C++:
void EXT_FUNC CBasePlayer::__API_HOOK(TraceAttack)(entvars_t *pevAttacker, float flDamage, VectorRef vecDir, TraceResult *ptr, int bitsDamageType)
{
    // [...]
    m_LastHitGroup = ptr->iHitgroup;
 
Сообщения
494
Реакции
341
Помог
11 раз(а)
fl0wer, стало быть, просто проще и быстрее 1 вариант.
 
Сообщения
1,032
Реакции
828
Помог
10 раз(а)
Вставлю 5 копеек по поводу TraceAttack, мне показалось и надеюсь что именно так, но через нее попасть в голову жесть как трудно, когда задача стояла что бы убить можно было только в голову, в обычной ситуации бошки отлетают только в путь, но не через TraceAttack, тут желательно именно в макушку попадать... надеюсь у меня просто глюки были
 
Сообщения
1,560
Реакции
1,572
Помог
2 раз(а)
Javekson,
Ну там чётко оно летит по прицелу
У меня в камере ( 3е лицо ) в Трейсе в прыжке со слона попадают патроны прям чётко по прицелу в голову - ( ну если смотреть в такую сторону )
Можно даже читы не использовать
 
Статус
В этой теме нельзя размещать новые ответы.

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

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