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

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
92
Реакции
23
Здравствуйте, ищу плагин, который воспроизводит звук атакующему, если он попал в голову. Именно попал
 
Сообщения
2,751
Реакции
3,017
Помог
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);
}
}
 
Последнее редактирование:

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,751
Реакции
3,017
Помог
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;
}


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

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


И немножечко прямого примера:
Код:
#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
}
Нужное думаю извлечёшь :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,751
Реакции
3,017
Помог
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;
}
 
Сообщения
677
Реакции
579
Предупреждения
8
Помог
9 раз(а)
Есть на реапи версия. В 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();
}
}
}

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

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

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