Поиск Звук при попадании в голову

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
92
Реакции
23
Здравствуйте, ищу плагин, который воспроизводит звук атакующему, если он попал в голову. Именно попал
 
Сообщения
2,752
Реакции
3,020
Помог
61 раз(а)
я такого не видел. Поэтому сейчас напишу, или дождусь действия ребят
выберите звук пока-что из папки sound
 
Последнее редактирование:

hajimura

Е777КХ05
Сообщения
290
Реакции
228
Помог
6 раз(а)
Есть на реапи версия. В 4 строке указываете путь до своего аудиофайла:
C++:
#include <amxmodx>
#include <reapi>

#define SOUND    "misc/miscstats/headshot.wav"

public plugin_precache()
{
    precache_sound(SOUND);
    RegisterHookChain(RG_CBasePlayer_Killed, "eventKilled", true);
}

public eventKilled(const this, pevAttacker, iGib)
{
    if(get_member(this, m_bHeadshotKilled))
    {
        rg_send_audio(0, SOUND);
    }
}
C++
 
Последнее редактирование:

hajimura

Е777КХ05
Сообщения
290
Реакции
228
Помог
6 раз(а)
wopox1337, дождемся тс и узнаем, правильно ли я его понял
 
Сообщения
92
Реакции
23
wopox1337, звук будет кастомный :)
7 Мар 2017
Phantom, при попадании надо, ну и при убийстве в голову тоже, если можно конечно
 

hajimura

Е777КХ05
Сообщения
290
Реакции
228
Помог
6 раз(а)
igor_grusha, понятно
wopox1337, лучше будет два хука ловить или в TakeDamage постоянно проверять на is_user_alive? Не знаю, может ли второй вариант быть оптимальнее первого
 
Сообщения
2,752
Реакции
3,020
Помог
61 раз(а)
Phantom, третий вариант.
Код:

public CBasePlayer_TraceAttack(iVictim, iAttacker, Float:flDamage, Float:vecDir[3], tracehandle, bitsDamageType)
{
    if(IsSetBit(g_aPlayerSettings[MODE_HEADSHOT], iAttacker))
    {
        return (get_tr2(tracehandle, TR_iHitgroup) != HIT_HEAD && get_user_weapon(iAttacker) != CSW_KNIFE) ? HC_SUPERCEDE : HC_CONTINUE;
    }

    return HC_CONTINUE;
}
C++


и тут на выбор встают:
Либо HAM
Код:
RegisterHam( Ham_TraceAttack, "player", "CBasePlayer_TraceAttack", .post = false );
C++

Либо ReAPI
Код:
RegisterHookChain(RG_CBasePlayer_TraceAttack, "CBasePlayer_TraceAttack", .post = false);
C++


И немножечко прямого примера:
Код:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

#define VERSION "0.0.1"
#define PLUGIN "No HeadShot"

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, "ConnorMcLeod")

    RegisterHam(Ham_TraceAttack, "player", "CBasePlayer_TraceAttack")
}

public CBasePlayer_TraceAttack( id, eAttacker, Float:flDamage, Float:vecDir[3], ptrTraceResult /* ,  bitsDamageType */)
{
    new Float:flTakeDamage
    pev(id, pev_takedamage, flTakeDamage)
    if( flTakeDamage == DAMAGE_NO )
    {
        // game gonna do same check, no need to let it be
        return HAM_SUPERCEDE
    }
    if( get_tr2(ptrTraceResult, TR_iHitgroup) == HIT_HEAD )
    {
        set_tr2(ptrTraceResult, TR_iHitgroup, HIT_CHEST)
        return HAM_HANDLED
    }
    return HAM_IGNORED
}
C++
Нужное думаю извлечёшь :ok:
 
Сообщения
92
Реакции
23
wopox1337, спасибо, а .post влияет на что-то? ReApi лучше? Ещё не понял проверку эту:
if( flTakeDamage == DAMAGE_NO ) { // game gonna do same check, no need to let it be return HAM_SUPERCEDE }

Ещё не нашёл как "спойлер" и "код" сделать на форуме
 
Сообщения
2,752
Реакции
3,020
Помог
61 раз(а)
как "спойлер" и "код" сделать на форуме
upload_2017-3-7_15-10-46.png


.post влияет на что-то?
Да, это основа для отрабатывания функции.
Либо после действия функции исполнится код (произойдёт вызов), либо перед. (post = 1 - значит после)

Конкретно в данном примере ReAPI не обязателен, однако рекомендую к использованию.

// game gonna do same check, no need to let it be return HAM_SUPERCEDE
Игра собирается заблокировать получение урона, не важно из за чего. Так что нужно завершить фукнцию.
7 Мар 2017
igor_grusha, Результатами разработки поделитесь? :friends:
 
Последнее редактирование:
Сообщения
92
Реакции
23
wopox1337, спасибо, как сделаю, скину
7 Мар 2017
wopox1337, вот
C++:
#include <amxmodx>
#include <fakemeta>
#include <reapi>

new const sound[] = "player/bhit_helmet-1.wav";

public plugin_init()
{
    register_plugin("Get Headshot", "0.1", "Grusha :D")

    RegisterHookChain(RG_CBasePlayer_TraceAttack, "CBasePlayer_TraceAttack", .post = false);
}

public plugin_precache()
    precache_sound(sound)

public CBasePlayer_TraceAttack( iVictim, iAttacker, Float:flDamage, Float:vecDir[3], ptrTraceResult /* ,  bitsDamageType */)
{
    new Float:flTakeDamage
    pev(iVictim, pev_takedamage, flTakeDamage)
    
    if(flTakeDamage == DAMAGE_NO) // game gonna do same check, no need to let it be
        return HC_SUPERCEDE
    
    if(get_tr2(ptrTraceResult, TR_iHitgroup) == HIT_HEAD)
        client_cmd(iAttacker, "spk %s", sound);
    
    return HC_CONTINUE;
}
C++
 
Сообщения
723
Реакции
610
Помог
13 раз(а)
Есть на реапи версия. В 4 строке указываете путь до своего аудиофайла:
C++:

stock PlaySound(index, szSound[])
{
    static msgSendAudio;
    if(msgSendAudio || (msgSendAudio = get_user_msgid("SendAudio")))
    {
        static players[32], pnum;
        get_players(players, pnum, "ch");

        for(new i; i < pnum; i++)
        {
            message_begin(MSG_ONE_UNRELIABLE, msgSendAudio, .player = players);
            write_byte(players);
            write_string(szSound);
            write_short(PITCH_NORM);
            message_end();
        }
    }
}
C++

я не понял зачем нужен тут цикл и отправка звука всем если известен индекс игрока? и да есть же:
Код:
native rg_send_audio(const index, const sample[], const pitch = PITCH_NORM)
C++
 
Статус
В этой теме нельзя размещать новые ответы.

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

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