Русское сообщество по скриптингу AMXX/SM/Metamod AMX-X.RU 2025-11-24T10:13:45+04:00 https://amx-x.ru:443/feed.php 2025-11-24T10:13:45+04:00 2025-11-24T10:13:45+04:00 https://amx-x.ru:443/viewtopic.php?t=42215&p=316928#p316928 <![CDATA[Болтовня • Re: Готовые сборки серверов.]]> Статистика: Добавлено statys — 24 ноя 2025, 10:13


]]>
2025-11-14T13:28:13+04:00 2025-11-14T13:28:13+04:00 https://amx-x.ru:443/viewtopic.php?t=42180&p=316927#p316927 <![CDATA[Вопросы по AMXX и его плагинам • Re: Проблема при работе с Half-Life модулем Weaponmod]]> Статистика: Добавлено statys — 14 ноя 2025, 13:28


]]>
2025-10-28T21:50:45+04:00 2025-10-28T21:50:45+04:00 https://amx-x.ru:443/viewtopic.php?t=42215&p=316926#p316926 <![CDATA[Болтовня • Готовые сборки серверов.]]> Важно: с исходниками)

@impressi0n Тг

Статистика: Добавлено lisovoy1337 — 28 окт 2025, 21:50


]]>
2025-10-28T00:01:09+04:00 2025-10-28T00:01:09+04:00 https://amx-x.ru:443/viewtopic.php?t=42214&p=316925#p316925 <![CDATA[Скриптинг • Re: Отсутствующие звуки хэдшотов]]>
OffTheVoid писал(а):
Спасибо, протестил, работает
Добавлю в кредиты со следующим апдейтом

Изменил только pl_pain с пяти до семи, headshot с 1 до 3 и со шлемом на bhit_helmet1
Code: Выделить всё
#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:

Code: Выделить всё
//правильно:
for ( new i = 0; i < 7; i ++ )
    precache_sound(g_szPainSound[i])

Статистика: Добавлено pro_z — 28 окт 2025, 00:01


]]>
2025-10-27T15:32:44+04:00 2025-10-27T15:32:44+04:00 https://amx-x.ru:443/viewtopic.php?t=42214&p=316924#p316924 <![CDATA[Скриптинг • Re: Отсутствующие звуки хэдшотов]]> Добавлю в кредиты со следующим апдейтом

Изменил только pl_pain с пяти до семи, headshot с 1 до 3 и со шлемом на bhit_helmet1
Code: Выделить всё
#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 — 27 окт 2025, 15:32


]]>
2025-10-26T22:34:02+04:00 2025-10-26T22:34:02+04:00 https://amx-x.ru:443/viewtopic.php?t=42214&p=316923#p316923 <![CDATA[Скриптинг • Re: Отсутствующие звуки хэдшотов]]>
Code: Выделить всё
#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 — 26 окт 2025, 22:34


]]>
2025-10-25T16:46:13+04:00 2025-10-25T16:46:13+04:00 https://amx-x.ru:443/viewtopic.php?t=42214&p=316922#p316922 <![CDATA[Скриптинг • Отсутствующие звуки хэдшотов]]>
Code: Выделить всё
#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 — 25 окт 2025, 16:46


]]>
2025-10-22T20:13:51+04:00 2025-10-22T20:13:51+04:00 https://amx-x.ru:443/viewtopic.php?t=42203&p=316921#p316921 <![CDATA[Скриптинг • Re: Проблемa с func_train]]>
Code: Выделить всё
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>

public plugin_init()
{
    
register_plugin("Train No Damage""1.0""Author");
    
    
RegisterHam(Ham_Blocked"func_train""Ham_TrainBlocked_Post"1);
}

public 
Ham_TrainBlocked_Post(iEntid)
{
    if(!
is_user_alive(id) || !pev_valid(iEnt))
        return 
HAM_IGNORED;
    
    
set_pev(iEntpev_solidSOLID_NOT);
    
    
set_task(0.1"RestoreSolid"iEnt);
    
    return 
HAM_HANDLED;
}

public 
RestoreSolid(iEnt)
{
    if(
pev_valid(iEnt))
        
set_pev(iEntpev_solidSOLID_BSP);
}
 

Статистика: Добавлено pro_z — 22 окт 2025, 20:13


]]>
2025-10-22T20:12:22+04:00 2025-10-22T20:12:22+04:00 https://amx-x.ru:443/viewtopic.php?t=42204&p=316920#p316920 <![CDATA[Скриптинг • Re: Преодоление препятствий у NPC зомби КС 1.6]]>
Code: Выделить всё
public Hook_Think(Ent)
{
    if(!pev_valid(Ent))
        return HAM_IGNORED;
        
    if
(!native_zl_zmclassic_valid(Ent) && !native_zl_zmdeimos_valid(Ent) && !native_zl_zmghost_valid(Ent) && !native_zl_zmheal_valid(Ent) && !native_zl_zmwitch_valid(Ent) && !native_zl_zmbig_valid(Ent) && !native_zl_zmhound_valid(Ent))
        return HAM_IGNORED;
        
    if
(pev(Ent, pev_deadflag) == DEAD_DYING)
        return HAM_IGNORED;
    
    if
(!is_user_alive(iTarget))
    {
        iTarget = zl_player_random();
        
        set_pev
(Ent, pev_nextthink, get_gametime() + 0.2);
        
        return HAM_HANDLED
;
    }
    
    if
(pev(Ent, pev_fuser1) == 500.0)
    {
        set_pev(Ent, pev_fuser1, 0.0);
        
        Anim
(Ent, 4, 1.0);
    }
    
    static Float
:Origin[3], Float:eOrigin[3], Float:Angle[3], Float:Vector[3];
    
    pev
(iTarget, pev_origin, Origin);
    pev(Ent, pev_origin, eOrigin);

    xs_vec_sub(Origin, eOrigin, Vector);
    vector_to_angle(Vector, Angle);
    
    Angle
[0] = 0.0;
    Angle[2] = 0.0;

    xs_vec_normalize(Vector, Vector);
    xs_vec_mul_scalar(Vector, Speed, Vector);
    
    static Float
:plus_coord;
    plus_coord = get_cvar_float("plus_coord");
    
    if
(Vector[2] > 0.0)
    {
        Vector[2] = plus_coord;
    }
    else
    
{
        Vector[2] -= 500.0;
    }

    set_pev(Ent, pev_velocity, Vector);
    set_pev(Ent, pev_angles, Angle);

    set_pev(Ent, pev_nextthink, get_gametime() + 0.2);
    
    return HAM_HANDLED
;
}

Статистика: Добавлено pro_z — 22 окт 2025, 20:12


]]>
2025-10-21T14:48:42+04:00 2025-10-21T14:48:42+04:00 https://amx-x.ru:443/viewtopic.php?t=42206&p=316919#p316919 <![CDATA[Болтовня • Re: Скриптер EmptyEntity ( не обращаться)]]> Статистика: Добавлено CyberViper — 21 окт 2025, 14:48


]]>