Отключение звука ходьбы

ZirionNeft

Участник
Сообщения
188
Реакции
54
Возможно ли отключить звук ходьбы игрока?
Перехват евента player_footstep в Pre-режиме, и его завершение Plugin_Handled'ом не дают результатов. Два часа поисков информации также не помогли.
 
Последнее редактирование:

_wS_

Участник
Сообщения
383
Реакции
760
Недавно пытался, не вышло, сначала даже может показаться что работает, типа ура я бегу и шагов не слышно, вот только другие игроки их слышат все равно.
В ксс m_flStepSoundTime чтот ничего не дает, а вот в кс го возможно получится.
В ксго можно сделать так: SendConVarValue(client, FindConVar("sv_footstep_sound_frequency"), "9999999"); - по идее оно должно роб.

-----
Точно рабочий вариант это отключить шаги и самому как-то эмитировать все эти звуки.
 

ZirionNeft

Участник
Сообщения
188
Реакции
54
-----
Точно рабочий вариант это отключить шаги и самому как-то эмитировать все эти звуки.
Ну да, так-то. Банально взять звук шагов, и навешивать на событие player_footstep, должно получиться. В общем, попробую предложенный вариант :)
--- Добавлено позже ---
Так, а теперь сопутствующий вопрос: А как и где вытащить стандартные звуки шагов?)
 

Серый™

CS:S Server
Сообщения
2,925
Реакции
1,376
Я такое пробывал в эвенте
PHP:
SetEntProp(iClient, Prop_Data, "m_fFlags", 4);
 

ZirionNeft

Участник
Сообщения
188
Реакции
54
Я такое пробывал в эвенте
PHP:
SetEntProp(iClient, Prop_Data, "m_fFlags", 4);
Пробовал это хорошо - а сработало ли?
Спасибо, еще пару решений нашел, с SendConVarValue буду пробовать
 

Red4911

Участник
Сообщения
133
Реакции
34
Звук ходьбы то отключает. А вот звук прыжков почему нет.
 

Red4911

Участник
Сообщения
133
Реакции
34
А вообще полностью звуки: ходьбы, прыжков, ударов об землю можно отключить ?
 

ZirionNeft

Участник
Сообщения
188
Реакции
54
Я поразмыслил, и понял, что вариант с SendConVarValue не пойдет, ибо он отключает звук всех шагов у игрока, а надо только конкретных игроков, которые проходят условие.

А вообще полностью звуки: ходьбы, прыжков, ударов об землю можно отключить ?
Оффтоп
Чисто мое предположение, что также хукать события и как-то их прерывать. И ударов об землю чего? Предметов?
 

ZirionNeft

Участник
Сообщения
188
Реакции
54
Нашел такой код на оленях:
C-подобный:
#include <sdktools>

bool IsPlayerNinja[MAXPLAYERS + 1];
ConVar sv_footsteps;

public OnPluginStart()
{
    LoadTranslations("common.phrases");
    sv_footsteps = FindConVar("sv_footsteps");

    RegConsoleCmd("sm_test", test);

    AddNormalSoundHook(FootstepCheck);

    for(int i = 1; i <= MaxClients; i++)
    {
        if(IsClientInGame(i) && !IsFakeClient(i))    OnClientPutInServer(i);
    }
}

public Action test(int client, int args)
{
    char arg[MAX_NAME_LENGTH];
    GetCmdArg(1, arg, sizeof(arg));
    int target = FindTarget(client, arg, false, false);

    if(target != -1)
    {
        IsPlayerNinja[target] = IsPlayerNinja[target] ? false:true;
        ReplyToCommand(client, "%N is %s", target, IsPlayerNinja[target] ? "Ninja!":"not Ninja.");
    }

    return Plugin_Handled;
}

public void OnClientPutInServer(client)
{
    if(!IsFakeClient(client))        SendConVarValue(client, sv_footsteps, "0");
}

public Action:FootstepCheck(clients[64], &numClients, String:sample[PLATFORM_MAX_PATH], &entity, &channel, &Float:volume, &level, &pitch, &flags)
{
    // Player
    if (0 < entity <= MaxClients)
    {
        if(StrContains(sample, "physics") != -1 || StrContains(sample, "footsteps") != -1)
        {
            // Player not ninja, play footsteps
            if(!IsPlayerNinja[entity])
            {
                numClients = 0;

                for(int i = 1; i <= MaxClients; i++)
                {
                    if(IsClientInGame(i) && !IsFakeClient(i))
                    {
                        clients[numClients++] = i;
                    }
                }

                EmitSound(clients, numClients, sample, entity);
                //return Plugin_Changed;
            }
            return Plugin_Stop;
        }
    }
    return Plugin_Continue;
}
Говорят, что работает.
Сейчас допишу, и скажу, что из этого получится.
 

_wS_

Участник
Сообщения
383
Реакции
760
Я этот код уже видел, не понимаю почему пришел к выводу что он не работает, это рабочий вариант оказывается..

1. в server.cfg sv_footsteps 1
2. каждому игроку (кроме ботов) 1 раз SendConVarValue sv_footsteps 0
3. и теперь просто в этом хуке эмитируем звуки от тех, от кого надо

Минус: звуки шагов ботов всегда будут слышны
 
Последнее редактирование:

ZirionNeft

Участник
Сообщения
188
Реакции
54
Я этот код уже видел, не понимаю почему пришел к выводу что он не работает, это рабочий вариант оказывается..

1. в server.cfg sv_footsteps 1
2. каждому игроку (кроме ботов) 1 раз SendConVarValue sv_footsteps 0
3. и теперь просто в этом хуке эмитируем звуки от тех, от кого надо

Минус: звуки шагов ботов всегда будут слышны
Да, подтверждаю. У меня код работает, все также.
То что ботов слышно - не страшно, у меня на сервере их не будет :)
В принципе, вопрос закрыт. Всем кто ответил - спасибо :)
 

Felton

Участник
Сообщения
799
Реакции
59
@ZirionNeft
Звуков не слышно только своей команды(тимы) или обеих команд?
 

ZirionNeft

Участник
Сообщения
188
Реакции
54
@ZirionNeft
Звуков не слышно только своей команды(тимы) или обеих команд?
Не слышно тех, кого ты сам захотел сделать бесшумными, т.е как в условии указал. У меня к примеру не слышно всех, кто относится к зомби.
 

Felton

Участник
Сообщения
799
Реакции
59
@ZirionNeft
А где я должен указать?
Скинь ссылку на оленях где брал код.
 
Последнее редактирование:

Felton

Участник
Сообщения
799
Реакции
59
Нашел такой код на оленях:
C-подобный:
#include <sdktools>

bool IsPlayerNinja[MAXPLAYERS + 1];
ConVar sv_footsteps;

public OnPluginStart()
{
    LoadTranslations("common.phrases");
    sv_footsteps = FindConVar("sv_footsteps");

    RegConsoleCmd("sm_test", test);

    AddNormalSoundHook(FootstepCheck);

    for(int i = 1; i <= MaxClients; i++)
    {
        if(IsClientInGame(i) && !IsFakeClient(i))    OnClientPutInServer(i);
    }
}

public Action test(int client, int args)
{
    char arg[MAX_NAME_LENGTH];
    GetCmdArg(1, arg, sizeof(arg));
    int target = FindTarget(client, arg, false, false);

    if(target != -1)
    {
        IsPlayerNinja[target] = IsPlayerNinja[target] ? false:true;
        ReplyToCommand(client, "%N is %s", target, IsPlayerNinja[target] ? "Ninja!":"not Ninja.");
    }

    return Plugin_Handled;
}

public void OnClientPutInServer(client)
{
    if(!IsFakeClient(client))        SendConVarValue(client, sv_footsteps, "0");
}

public Action:FootstepCheck(clients[64], &numClients, String:sample[PLATFORM_MAX_PATH], &entity, &channel, &Float:volume, &level, &pitch, &flags)
{
    // Player
    if (0 < entity <= MaxClients)
    {
        if(StrContains(sample, "physics") != -1 || StrContains(sample, "footsteps") != -1)
        {
            // Player not ninja, play footsteps
            if(!IsPlayerNinja[entity])
            {
                numClients = 0;

                for(int i = 1; i <= MaxClients; i++)
                {
                    if(IsClientInGame(i) && !IsFakeClient(i))
                    {
                        clients[numClients++] = i;
                    }
                }

                EmitSound(clients, numClients, sample, entity);
                //return Plugin_Changed;
            }
            return Plugin_Stop;
        }
    }
    return Plugin_Continue;
}
Говорят, что работает.
Сейчас допишу, и скажу, что из этого получится.

У меня этот код для Counter-Strike Source(старушка) не работает .Скиньте рабочий пожалуйста.
--- Добавлено позже ---
Я этот код уже видел, не понимаю почему пришел к выводу что он не работает, это рабочий вариант оказывается..

1. в server.cfg sv_footsteps 1
2. каждому игроку (кроме ботов) 1 раз SendConVarValue sv_footsteps 0
3. и теперь просто в этом хуке эмитируем звуки от тех, от кого надо

Минус: звуки шагов ботов всегда будут слышны
3.Меня интерисует это как этом хуке эмитируем звуки от тех, от кого надо?
 
Сверху Снизу