Слышны только свои звуки

Сообщения
645
Реакции
222
Помог
11 раз(а)
Добрый день!

Как реализовать функцию чтобы можно заблочить сторонние звуки (выстрелы,ходьба и тд) от других игроков, но при этом слышать свои?

Бывает случая когда на зомби жестко мешает сторонние звуки (одновременно стреляют 32 игрока)
 
Сообщения
2,144
Реакции
1,223
Помог
44 раз(а)
Limbooc, звуки шагов можно убрать с прекеша. Тогда клиент будет слышать лишь свои.
 
Сообщения
645
Реакции
222
Помог
11 раз(а)
Minni, звуки шагов немаловажный пример, главное бы выстрелы заблочить

как пример можно быть так поможет?
Код:
new bool:g_iSoundOff;

public plugin_init()
{
    RegisterHookChain(RH_SV_StartSound, "RH_EmitSound", false);
}

public RH_EmitSound(const recipients, const entity, const channel, const sample[], const volume, Float:attenuation, const fFlags, const pitch)
{
    if(is_user_valid(id))
    {
       if(g_iSoundOff)
       {
        if(recipients == entity )
            return HC_CONTUINE;
            
        SetHookChainReturn(1, ATYPE_INTEGER, false);
        return HC_SUPERCEDE;
}
return HC_CONTUINE;
    }
}
 
Сообщения
1,175
Реакции
2,144
Помог
57 раз(а)
Звуки стрельбы вроде нельзя в хуке эмита отловить. Оно же на эвентах основано, или путаю?
 
Сообщения
1,419
Реакции
2,508
Помог
59 раз(а)
BlackSignature, всё правильно, нельзя хукнуть ибо это клиент-сайд. Можно конечно попытаться разве что перекрывать звук, т.е. отсылать другой.
 
Сообщения
645
Реакции
222
Помог
11 раз(а)
w0w, разве клиент-сайд работает только на клиенте, врятли клиент-сайд обрабатывает сторонние звуки кроме своих? я имел ввиду блокнуть стороние звуки, свои звуки так и так будет воспроизводится через клиент-сайд
 
Сообщения
2,144
Реакции
1,223
Помог
44 раз(а)
Limbooc, в любом случае на клиенте будут воспроизводится звуки выстрела. Остается, как и писали выше, отправлять пустышку, чтобы перебить звук.
 
Сообщения
645
Реакции
222
Помог
11 раз(а)
нашел решение:

Код:
public plugin_init()
{
    register_forward(FM_PlaybackEvent, "fw_PlaybackEvent")   
}

public fw_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
{
    if (!is_user_connected(invoker))
        return FMRES_IGNORED   
        
    engfunc(EngFunc_PlaybackEvent, flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)

    emit_sound(invoker, CHAN_WEAPON, "nosound.wav" , VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
    return FMRES_SUPERCEDE;
}
подскажите как сделать проверку что если !оружие то return FMRES_IGNORED
 
Сообщения
1,661
Реакции
1,486
Помог
24 раз(а)
Limbooc, задампить индексы, либо получить их в прекеше.
26 Фев 2020
PlaybackEvent для третей стороны, вызывается от выстрела и посылается всем игрокам, в примере выше только хосту. Слать "пустышку" необязательно.
 
Сообщения
645
Реакции
222
Помог
11 раз(а)
Limbooc, задампить индексы, либо получить их в прекеше.
Подскажешь как дампить? а то у меня все блочить и декалы и спрайты выстрела

++
сделал дамп
Код:
public fw_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
{
    if(!is_user_connected(invoker))
        return FMRES_IGNORED   

    server_print("%d", eventid);

    return FMRES_SUPERCEDE;
}
у м4а1 выходит индекс 6, что за индекс, в документах говорит что это индекс от С4 (https://wiki.alliedmods.net/Cs_weapons_information)
 
Последнее редактирование:

Garey

ninjaCow
Сообщения
411
Реакции
1,051
Помог
10 раз(а)
C-like:
public plugin_precache()
{
    register_forward( FM_PrecacheEvent , "fwPrecacheEvent" , 1 );
}
new g_m4a1_event;

public fwPrecacheEvent( type , const name[] )
{
    if(equal(name, "events/m4a1.sc"))
    {
        g_m4a1_event = get_orig_retval();
    }  
    return FMRES_IGNORED;
}
 
Сообщения
645
Реакции
222
Помог
11 раз(а)
Вроде работает, но не могу контролировать функцию, тоесть получить индекс получателя

Код:
#include <amxmodx>
#include <fakemeta>

new g_iGunsEventBitsum = 0;
#define IsGunshotEvent(%1)      (g_iGunsEventBitsum & (1 << %1))
new g_iFwdPrecacheEvent;

new const EVENTS[][] =
{
    "events/ak47.sc",
    "events/aug.sc",
    "events/awp.sc",
    "events/deagle.sc",
    "events/elite_left.sc",
    "events/elite_right.sc",
    "events/famas.sc",
    "events/fiveseven.sc",
    "events/g3sg1.sc",
    "events/galil.sc",
    "events/glock18.sc",
    //"events/knife.sc",
    "events/m249.sc",
    "events/m3.sc",
    "events/m4a1.sc",
    "events/mac10.sc",
    "events/mp5n.sc",
    "events/p228.sc",
    "events/p90.sc",
    "events/scout.sc",
    "events/sg550.sc",
    "events/sg552.sc",
    "events/tmp.sc",
    "events/ump45.sc",
    "events/usp.sc",
    "events/xm1014.sc"
};

new bool:g_iSoundOff;

#define is_user_valid(%0) (%0 && %0 <= MaxClients)
new g_iFakeMetaPlaybackEvent;

public plugin_precache()
{
    g_iFwdPrecacheEvent = register_forward(FM_PrecacheEvent, "PrecacheEvent", true);
}

public plugin_init()
{
    register_forward(FM_PlaybackEvent, "fw_PlaybackEvent");
    unregister_forward(FM_PrecacheEvent, g_iFwdPrecacheEvent, true);

    unregister_forward(FM_PlaybackEvent, g_iFakeMetaPlaybackEvent);
    register_clcmd("fnosound", "nosound");
}

public PrecacheEvent(type, const szEventTitle[])
{
    for(new i = 0; i < sizeof EVENTS; i++)
    {
        if(equali(szEventTitle, EVENTS[i]))
        {
            g_iGunsEventBitsum |= (1 << get_orig_retval());
            break;
        }
    }
}

public nosound()
{
    g_iSoundOff = !g_iSoundOff;
}

public fw_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
{
    if(!IsGunshotEvent(eventid) || !is_user_valid(invoker))
        return FMRES_IGNORED   
    
        
    if(g_iSoundOff)
        return FMRES_IGNORED   


    engfunc(EngFunc_PlaybackEvent, flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
    return FMRES_SUPERCEDE;
}
В fw_PlaybackEvent отправитель евентов, а можно ли получить индекс получателя?
 
Сообщения
645
Реакции
222
Помог
11 раз(а)
fl0wer, верно?
Код:
public fw_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
{
    if(!IsGunshotEvent(eventid) || !is_user_valid(invoker))
        return FMRES_IGNORED

   
    if(g_iSoundOff)
        return FMRES_IGNORED

    if(new i; i <= MaxClients; i++)
    {
        if(!is_user_connected(i) || !is_user_zombie(i)) continue;
   
        engfunc(EngFunc_PlaybackEvent, flags | FEV_HOSTONLY, i, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
        return FMRES_SUPERCEDE;
    }

    return FMRES_IGNORED
}
или индекс -invoker ? engfunc(EngFunc_PlaybackEvent, flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
 
Сообщения
645
Реакции
222
Помог
11 раз(а)
fl0wer, незнаю правильно ли я делаю но при выставление groupinfo , игрок становится не видимым для людей

Код:
#define MaskEnt(%0)    (1<<((%0) & 31))

public bio_fw_core_infect_post(pId, Attacker)
{
    set_pev(pId, pev_groupinfo, pev(pId, pev_groupinfo) | MaskEnt(pId));

}
по всей видимости я не туда лазаю, сможешь скинуть пример как правильно обойти через groupinfo
4 Янв 2021
fl0wer, верно?
Код:
public fw_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
{
    if(!IsGunshotEvent(eventid) || !is_user_valid(invoker))
        return FMRES_IGNORED

  
    if(g_iSoundOff)
        return FMRES_IGNORED

    if(new i; i <= MaxClients; i++)
    {
        if(!is_user_connected(i) || !is_user_zombie(i)) continue;
  
        engfunc(EngFunc_PlaybackEvent, flags | FEV_HOSTONLY, i, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
        return FMRES_SUPERCEDE;
    }

    return FMRES_IGNORED
}
или индекс -invoker ? engfunc(EngFunc_PlaybackEvent, flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
чекал и так и сяк, не получается
 
Сообщения
1,661
Реакции
1,486
Помог
24 раз(а)
Limbooc, так перед вызовом плейбэка ставь групинфо и после вызова возвращай групинфо.
 

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

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