Участник
Пользователь
- Сообщения
- 893
- Реакции
- 149
- Помог
- 25 раз(а)
Здравствуйте, задался вопросом.
Есть такой форвард:
Его зачастую используют в меню ножей для замены звуков при ударе и так далее.
Но иногда, натыкаясь на плагины кастомного ножа (одного, не меню), там используют путь установления звуков другим образом:
Берут, хукают PrimaryAttack, SecondaryAttack через хам, и там уже проверяют на "shoot", и устанавливают через emit_sound необходимый звук.
Так вот, хочу узнать, что было бы лучше использовать для меню ножей. Первый вариант или второй?
Есть такой форвард:
C++:
register_forward(FM_EmitSound, "EmitSound");
C++:
public EmitSound(iPlayer, iChannel, const iSample[ ], Float: iVolume, Float: iAttn, iFlags, iPitch) {
if(!is_user_connected(iPlayer)) return HAM_IGNORED
if( iSample[ 8 ] == 'k' && iSample[ 9 ] == 'n' && iSample[ 10 ] == 'i' ) {
if( iSample[ 14 ] == 'd' ) {
if(g_iKnifes[iPlayer] == 1) emit_sound(iPlayer, iChannel, Knife1Sound[0], iVolume, iAttn, iFlags, iPitch);
if(g_iKnifes[iPlayer] == 2) emit_sound(iPlayer, iChannel, Knife2Sound[0], iVolume, iAttn, iFlags, iPitch);
} else if( iSample[ 14 ] == 'h' ) {
if( iSample[ 17 ] == 'w' ) {
if(g_iKnifes[iPlayer] == 1) emit_sound( iPlayer, iChannel, Knife1Sound[2], iVolume, iAttn, iFlags, iPitch);
if(g_iKnifes[iPlayer] == 2) emit_sound( iPlayer, iChannel, Knife2Sound[2], iVolume, iAttn, iFlags, iPitch);
} else {
if(g_iKnifes[iPlayer] == 1) emit_sound(iPlayer, iChannel, Knife1Sound[1], iVolume, iAttn, iFlags, iPitch);
if(g_iKnifes[iPlayer] == 2) emit_sound(iPlayer, iChannel, Knife2Sound[1], iVolume, iAttn, iFlags, iPitch);
}
} else {
if(iSample[15] == 'l') {
if(g_iKnifes[iPlayer] == 1) emit_sound(iPlayer, iChannel, Knife1Sound[3], iVolume, iAttn, iFlags, iPitch);
if(g_iKnifes[iPlayer] == 2) emit_sound(iPlayer, iChannel, Knife2Sound[3], iVolume, iAttn, iFlags, iPitch);
} else {
if(g_iKnifes[iPlayer] == 1) emit_sound(iPlayer, iChannel, Knife1Sound[4], iVolume, iAttn, iFlags, iPitch);
if(g_iKnifes[iPlayer] == 2) emit_sound(iPlayer, iChannel, Knife2Sound[4], iVolume, iAttn, iFlags, iPitch);
}
}
return HAM_SUPERCEDE
}
return HAM_IGNORED
}
Берут, хукают PrimaryAttack, SecondaryAttack через хам, и там уже проверяют на "shoot", и устанавливают через emit_sound необходимый звук.
C++:
#define GET_SHOOTS(%0) get_pdata_int(%0, m_fInCheckShoots, extra_offset_weapon)
...
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_knife", "HamHook_Item_PrimaryAttack", false);
...
public HamHook_Item_PrimaryAttack(iItem) {
...
switch (GET_SHOOTS(iItem))
{
case 0:
{
engfunc(EngFunc_EmitSound, iPlayer, CHAN_WEAPON, SOUND_SLASH1, 1.0, ATTN_NORM, 0, PITCH_NORM);
}
case 1:
{
engfunc(EngFunc_EmitSound, iPlayer, CHAN_WEAPON, SOUND_SLASH2, 1.0, ATTN_NORM, 0, PITCH_NORM);
}
}
}