Русское сообщество по скриптингу

Отсутствующие звуки хэдшотов

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Отсутствующие звуки хэдшотов

Сообщение OffTheVoid » 25 окт 2025, 16:46

Может кто знает как внести звуки хэдшотов (в шлеме и без) обратно в код?
Код: Выделить всё
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <cs_ham_bots_api>

#define isPlayer(%1) (1 <= %1 <= 32)

new g_szFallSound[3][] =
{
    
"player/pl_fallpain1.wav",
    
"player/pl_fallpain2.wav",
    
"player/pl_fallpain3.wav"
}

new 
g_szDrownSound[3][] =
{
    
"player/pl_drown1.wav",
    
"player/pl_drown2.wav",
    
"player/pl_drown3.wav"
}

new 
g_szPainSound[5][] =
{
    
"player/pl_pain2.wav",
    
"player/pl_pain4.wav",
    
"player/pl_pain5.wav",
    
"player/pl_pain6.wav",
    
"player/pl_pain7.wav"
}

new 
g_iPlayerFlags[MAX_PLAYERS 1]

public 
plugin_precache()
{
    for ( new 
03++ )
        
precache_sound(g_szFallSound[i])

    for ( new 
03++ )
        
precache_sound(g_szDrownSound[i])

    for ( new 
05++ )
        
precache_sound(g_szPainSound[i])
}

public 
plugin_init()
{
    
register_plugin("Damage Sound""1.0""RedSMURF")

    
RegisterHamPlayer(Ham_TakeDamage"fwdTakeDamage"0)
    
RegisterHamBots(Ham_TakeDamage"fwdTakeDamage"0)

    
register_forward(FM_EmitSound"fwdEmitSound"0)
}

public 
fwdTakeDamage(iEntiInflictoriAttackerFloat:fDamageiDamageBits)
{
    
g_iPlayerFlags[iEnt] |= iDamageBits
    
return HAM_IGNORED
}

public 
fwdEmitSound(iEntiChanszSample[])
{
    if ( !
isPlayer(iEnt)
    || !
g_iPlayerFlags[iEnt] )
        return 
FMRES_IGNORED

    
new szSample[32]

    if ( 
g_iPlayerFlags[iEnt] & DMG_FALL )          copy(szSamplecharsmax(szSample), g_szFallSound[random(3)])
    else if ( 
g_iPlayerFlags[iEnt] & DMG_DROWN )    copy(szSamplecharsmax(szSample), g_szDrownSound[random(3)])
    else if ( 
g_iPlayerFlags[iEnt] & DMG_BULLET )   copy(szSamplecharsmax(szSample), g_szPainSound[random(5)])

    
g_iPlayerFlags[iEnt] = 0
    engfunc
(EngFunc_EmitSoundiEntCHAN_VOICEszSampleVOL_NORMATTN_NORM0PITCH_NORM)

    return 
FMRES_SUPERCEDE
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
OffTheVoid
 
Сообщения: 2
Зарегистрирован: 25 окт 2025, 16:18
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Языки программирования: Я ничего не знаю

Re: Отсутствующие звуки хэдшотов

Сообщение pro_z » 26 окт 2025, 22:34

Код: Выделить всё
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <cs_ham_bots_api>
#include <cstrike>

#define isPlayer(%1) (1 <= %1 <= 32)

new g_szFallSound[3][] =
{
    
"player/pl_fallpain1.wav",
    
"player/pl_fallpain2.wav",
    
"player/pl_fallpain3.wav"
}

new 
g_szDrownSound[3][] =
{
    
"player/pl_drown1.wav",
    
"player/pl_drown2.wav",
    
"player/pl_drown3.wav"
}

new 
g_szPainSound[5][] =
{
    
"player/pl_pain2.wav",
    
"player/pl_pain4.wav",
    
"player/pl_pain5.wav",
    
"player/pl_pain6.wav",
    
"player/pl_pain7.wav"
}

// Звуки хэдшотов
new g_szHeadshotSound[] = "player/headshot1.wav"  
new g_szHeadshotHelmetSound[] = "player/headshot2.wav" 

new g_iPlayerFlags[MAX_PLAYERS 1]
new 
g_iPlayerLastHitgroup[MAX_PLAYERS 1]

public 
plugin_precache()
{
    for ( new 
03++ )
        
precache_sound(g_szFallSound[i])

    for ( new 
03++ )
        
precache_sound(g_szDrownSound[i])

    for ( new 
05++ )
        
precache_sound(g_szPainSound[i])
    
    
// Прекеш звуков хэдшотов
    
precache_sound(g_szHeadshotSound)
    
precache_sound(g_szHeadshotHelmetSound)
}

public 
plugin_init()
{
    
register_plugin("Damage Sound""1.1""RedSMURF")

    
RegisterHamPlayer(Ham_TakeDamage"fwdTakeDamage"0)
    
RegisterHamBots(Ham_TakeDamage"fwdTakeDamage"0)
    
    
RegisterHamPlayer(Ham_TraceAttack"fwdTraceAttack"0)
    
RegisterHamBots(Ham_TraceAttack"fwdTraceAttack"0)

    
register_forward(FM_EmitSound"fwdEmitSound"0)
}

public 
fwdTraceAttack(iEntiAttackerFloat:fDamageFloat:fDir[3], tracehandleiDamageBits)
{
    if (!
isPlayer(iEnt))
        return 
HAM_IGNORED
    
    g_iPlayerLastHitgroup
[iEnt] = get_tr2(tracehandleTR_iHitgroup)
    
    return 
HAM_IGNORED
}

public 
fwdTakeDamage(iEntiInflictoriAttackerFloat:fDamageiDamageBits)
{
    
g_iPlayerFlags[iEnt] |= iDamageBits
    
return HAM_IGNORED
}

public 
fwdEmitSound(iEntiChanszSample[])
{
    if ( !
isPlayer(iEnt)
    || !
g_iPlayerFlags[iEnt] )
        return 
FMRES_IGNORED

    
new szSample[32]

    if ( 
g_iPlayerFlags[iEnt] & DMG_FALL )
    {
        
copy(szSamplecharsmax(szSample), g_szFallSound[random(3)])
    }
    else if ( 
g_iPlayerFlags[iEnt] & DMG_DROWN )
    {
        
copy(szSamplecharsmax(szSample), g_szDrownSound[random(3)])
    }
    else if ( 
g_iPlayerFlags[iEnt] & DMG_BULLET )
    {
        
// Проверяем, был ли это хэдшот (HIT_HEAD = 1)
        
if (g_iPlayerLastHitgroup[iEnt] == HIT_HEAD)
        {
            
// Проверяем наличие шлема через CsArmorType
            
new CsArmorType:armorType
            cs_get_user_armor
(iEntarmorType)
            
            if (
armorType == CS_ARMOR_VESTHELM)
            {
                
// Со шлемом 
                
copy(szSamplecharsmax(szSample), g_szHeadshotHelmetSound)
            }
            else
            {
                
// Без шлема
                
copy(szSamplecharsmax(szSample), g_szHeadshotSound)
            }
        }
        else
        {
            
// Обычное попадание в тело
            
copy(szSamplecharsmax(szSample), g_szPainSound[random(5)])
        }
        
        
// Сбрасываем hitgroup после обработки
        
g_iPlayerLastHitgroup[iEnt] = 0
    
}

    
g_iPlayerFlags[iEnt] = 0
    engfunc
(EngFunc_EmitSoundiEntCHAN_VOICEszSampleVOL_NORMATTN_NORM0PITCH_NORM)

    return 
FMRES_SUPERCEDE
}
 
Аватара пользователя
pro_z
 
Сообщения: 6
Зарегистрирован: 06 янв 2012, 11:28
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.

Re: Отсутствующие звуки хэдшотов

Сообщение OffTheVoid » 27 окт 2025, 15:32

Спасибо, протестил, работает
Добавлю в кредиты со следующим апдейтом

Изменил только pl_pain с пяти до семи, headshot с 1 до 3 и со шлемом на bhit_helmet1
Код: Выделить всё
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <cs_ham_bots_api>
#include <cstrike>

#define isPlayer(%1) (1 <= %1 <= 32)

new g_szFallSound[3][] =
{
    "player/pl_fallpain1.wav",
    "player/pl_fallpain2.wav",
    "player/pl_fallpain3.wav"
}

new g_szDrownSound[3][] =
{
    "player/pl_drown1.wav",
    "player/pl_drown2.wav",
    "player/pl_drown3.wav"
}

new g_szPainSound[7][] =
{
    "player/pl_pain1.wav",
    "player/pl_pain2.wav",
    "player/pl_pain3.wav",
    "player/pl_pain4.wav",
    "player/pl_pain5.wav",
    "player/pl_pain6.wav",
    "player/pl_pain7.wav"
}

// Звуки хэдшотов
new g_szHeadshotSound[3][] = 
{
    "player/headshot1.wav",
    "player/headshot2.wav",
    "player/headshot3.wav"
}

new g_szHeadshotHelmetSound[] = "player/bhit_helmet-1.wav" 


new g_iPlayerFlags
[MAX_PLAYERS + 1]
new g_iPlayerLastHitgroup[MAX_PLAYERS + 1]

public plugin_precache()
{
    for ( new i = 0; i < 3; i ++ )
        precache_sound(g_szFallSound[i])

    for ( new i = 0; i < 3; i ++ )
        precache_sound(g_szDrownSound[i])

    for ( new i = 0; i < 5; i ++ )
        precache_sound(g_szPainSound[i])
    
    
// Прекеш звуков хэдшотов
    for ( new i = 0; i < 3; i ++ )
    precache_sound(g_szHeadshotSound[i])
    precache_sound(g_szHeadshotHelmetSound)
}

public plugin_init()
{
    register_plugin("Damage Sound", "1.1", "RedSMURF")

    RegisterHamPlayer(Ham_TakeDamage, "fwdTakeDamage", 0)
    RegisterHamBots(Ham_TakeDamage, "fwdTakeDamage", 0)
    
    RegisterHamPlayer
(Ham_TraceAttack, "fwdTraceAttack", 0)
    RegisterHamBots(Ham_TraceAttack, "fwdTraceAttack", 0)

    register_forward(FM_EmitSound, "fwdEmitSound", 0)
}

public fwdTraceAttack(iEnt, iAttacker, Float:fDamage, Float:fDir[3], tracehandle, iDamageBits)
{
    if (!isPlayer(iEnt))
        return HAM_IGNORED
    
    g_iPlayerLastHitgroup
[iEnt] = get_tr2(tracehandle, TR_iHitgroup)
    
    return HAM_IGNORED
}

public fwdTakeDamage(iEnt, iInflictor, iAttacker, Float:fDamage, iDamageBits)
{
    g_iPlayerFlags[iEnt] |= iDamageBits
    return HAM_IGNORED
}

public fwdEmitSound(iEnt, iChan, szSample[])
{
    if ( !isPlayer(iEnt)
    || !g_iPlayerFlags[iEnt] )
        return FMRES_IGNORED

    new szSample
[32]

    if ( g_iPlayerFlags[iEnt] & DMG_FALL )
    {
        copy(szSample, charsmax(szSample), g_szFallSound[random(3)])
    }
    else if ( g_iPlayerFlags[iEnt] & DMG_DROWN )
    {
        copy(szSample, charsmax(szSample), g_szDrownSound[random(3)])
    }
    else if ( g_iPlayerFlags[iEnt] & DMG_BULLET )
    {
        // Проверяем, был ли это хэдшот (HIT_HEAD = 1)
        if (g_iPlayerLastHitgroup[iEnt] == HIT_HEAD)
        {
            // Проверяем наличие шлема через CsArmorType
            new CsArmorType:armorType
            cs_get_user_armor
(iEnt, armorType)
            
            if 
(armorType == CS_ARMOR_VESTHELM)
            {
                // Со шлемом 
                copy(szSample, charsmax(szSample), g_szHeadshotHelmetSound)
            }
            else
            
{
                // Без шлема
                copy(szSample, charsmax(szSample), g_szHeadshotSound[random(3)])
            }
        }
        else
        
{
            // Обычное попадание в тело
            copy(szSample, charsmax(szSample), g_szPainSound[random(7)])
        }
        
        
// Сбрасываем hitgroup после обработки
        g_iPlayerLastHitgroup[iEnt] = 0
    
}

    g_iPlayerFlags[iEnt] = 0
    engfunc
(EngFunc_EmitSound, iEnt, CHAN_VOICE, szSample, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)

    return FMRES_SUPERCEDE
}
 

Всё правильно?
Аватара пользователя
OffTheVoid
 
Сообщения: 2
Зарегистрирован: 25 окт 2025, 16:18
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Языки программирования: Я ничего не знаю

Re: Отсутствующие звуки хэдшотов

Сообщение pro_z » 28 окт 2025, 00:01

OffTheVoid писал(а):Спасибо, протестил, работает
Добавлю в кредиты со следующим апдейтом

Изменил только pl_pain с пяти до семи, headshot с 1 до 3 и со шлемом на bhit_helmet1
Код: Выделить всё
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <cs_ham_bots_api>
#include <cstrike>

#define isPlayer(%1) (1 <= %1 <= 32)

new g_szFallSound[3][] =
{
    "player/pl_fallpain1.wav",
    "player/pl_fallpain2.wav",
    "player/pl_fallpain3.wav"
}

new g_szDrownSound[3][] =
{
    "player/pl_drown1.wav",
    "player/pl_drown2.wav",
    "player/pl_drown3.wav"
}

new g_szPainSound[7][] =
{
    "player/pl_pain1.wav",
    "player/pl_pain2.wav",
    "player/pl_pain3.wav",
    "player/pl_pain4.wav",
    "player/pl_pain5.wav",
    "player/pl_pain6.wav",
    "player/pl_pain7.wav"
}

// Звуки хэдшотов
new g_szHeadshotSound[3][] = 
{
    "player/headshot1.wav",
    "player/headshot2.wav",
    "player/headshot3.wav"
}

new g_szHeadshotHelmetSound[] = "player/bhit_helmet-1.wav" 


new g_iPlayerFlags
[MAX_PLAYERS + 1]
new g_iPlayerLastHitgroup[MAX_PLAYERS + 1]

public plugin_precache()
{
    for ( new i = 0; i < 3; i ++ )
        precache_sound(g_szFallSound[i])

    for ( new i = 0; i < 3; i ++ )
        precache_sound(g_szDrownSound[i])

    for ( new i = 0; i < 5; i ++ )
        precache_sound(g_szPainSound[i])
    
    
// Прекеш звуков хэдшотов
    for ( new i = 0; i < 3; i ++ )
    precache_sound(g_szHeadshotSound[i])
    precache_sound(g_szHeadshotHelmetSound)
}

public plugin_init()
{
    register_plugin("Damage Sound", "1.1", "RedSMURF")

    RegisterHamPlayer(Ham_TakeDamage, "fwdTakeDamage", 0)
    RegisterHamBots(Ham_TakeDamage, "fwdTakeDamage", 0)
    
    RegisterHamPlayer
(Ham_TraceAttack, "fwdTraceAttack", 0)
    RegisterHamBots(Ham_TraceAttack, "fwdTraceAttack", 0)

    register_forward(FM_EmitSound, "fwdEmitSound", 0)
}

public fwdTraceAttack(iEnt, iAttacker, Float:fDamage, Float:fDir[3], tracehandle, iDamageBits)
{
    if (!isPlayer(iEnt))
        return HAM_IGNORED
    
    g_iPlayerLastHitgroup
[iEnt] = get_tr2(tracehandle, TR_iHitgroup)
    
    return HAM_IGNORED
}

public fwdTakeDamage(iEnt, iInflictor, iAttacker, Float:fDamage, iDamageBits)
{
    g_iPlayerFlags[iEnt] |= iDamageBits
    return HAM_IGNORED
}

public fwdEmitSound(iEnt, iChan, szSample[])
{
    if ( !isPlayer(iEnt)
    || !g_iPlayerFlags[iEnt] )
        return FMRES_IGNORED

    new szSample
[32]

    if ( g_iPlayerFlags[iEnt] & DMG_FALL )
    {
        copy(szSample, charsmax(szSample), g_szFallSound[random(3)])
    }
    else if ( g_iPlayerFlags[iEnt] & DMG_DROWN )
    {
        copy(szSample, charsmax(szSample), g_szDrownSound[random(3)])
    }
    else if ( g_iPlayerFlags[iEnt] & DMG_BULLET )
    {
        // Проверяем, был ли это хэдшот (HIT_HEAD = 1)
        if (g_iPlayerLastHitgroup[iEnt] == HIT_HEAD)
        {
            // Проверяем наличие шлема через CsArmorType
            new CsArmorType:armorType
            cs_get_user_armor
(iEnt, armorType)
            
            if 
(armorType == CS_ARMOR_VESTHELM)
            {
                // Со шлемом 
                copy(szSample, charsmax(szSample), g_szHeadshotHelmetSound)
            }
            else
            
{
                // Без шлема
                copy(szSample, charsmax(szSample), g_szHeadshotSound[random(3)])
            }
        }
        else
        
{
            // Обычное попадание в тело
            copy(szSample, charsmax(szSample), g_szPainSound[random(7)])
        }
        
        
// Сбрасываем hitgroup после обработки
        g_iPlayerLastHitgroup[iEnt] = 0
    
}

    g_iPlayerFlags[iEnt] = 0
    engfunc
(EngFunc_EmitSound, iEnt, CHAN_VOICE, szSample, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)

    return FMRES_SUPERCEDE
}
 

Всё правильно?


Цикл прекеша g_szPainSound должен идти до 7, а не до 5:

Код: Выделить всё
//правильно:
for ( new i = 0; i < 7; i ++ )
    precache_sound(g_szPainSound[i])
Аватара пользователя
pro_z
 
Сообщения: 6
Зарегистрирован: 06 янв 2012, 11:28
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.


Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot], Majestic-12 [Bot] и гости: 4