Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Пожертвовать Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 1
  • 1
Замена стандартных звуков урона и смерти
Shouldercannon Дата: Воскресенье, 18.02.2024, 19:33:13 | Сообщение # 1
Сообщений: 21
Репутация: 0 [ +/- ]
Хочу заменить стандартные звуки урона и смерти на свои в CS:S.
Могу воспроизвести только для всех сразу.
Код

...

public OnPluginStart()
{
    AddNormalSoundHook(DeathSound);
}

...

public Action:DeathSound(clients[64], &numClients, String:sample[PLATFORM_MAX_PATH], &entity, &channel, &Float:volume, &level, &pitch, &flags)
{
    if (StrContains(sample, "death", false) != -1)
    {
  decl String:file[MAX_PATH_LENGTH];
  Format(file, sizeof(file), "death%d.wav", GetRandomInt(1, 5));
  EmitSoundToAll(file);

  return Plugin_Handled;
    }
    if (StrContains(sample, "kevlar", false) != -1)
    {
  decl String:file[MAX_PATH_LENGTH];
  Format(file, sizeof(file), "hurt%d.wav", GetRandomInt(1, 4));
  EmitSoundToAll(file);

  return Plugin_Handled;
    }

    return Plugin_Continue;
}


Как воспроизвести звук только для конкретного игрока?


Сообщение отредактировал Shouldercannon - Воскресенье, 18.02.2024, 19:34:43
 
_wS_ Дата: Воскресенье, 18.02.2024, 19:59:11 | Сообщение # 2
Цитата Shouldercannon ()
Как воспроизвести звук только для конкретного игрока?

Звук смерти же должны слышать и те, кто рядом. Чем ближе, тем громче.
По логике, так нужно:

Код
EmitSound(clients, numClients, file, entity, channel, level, flags, volume, pitch);
 
Shouldercannon Дата: Воскресенье, 18.02.2024, 20:05:53 | Сообщение # 3
Сообщений: 21
Репутация: 0 [ +/- ]
Я мог бы получить клиента так
Код
new client = GetClientOfUserId(GetEventInt(event, "userid"));

но у
Код
public Action:DeathSound(clients[64], &numClients, String:sample[PLATFORM_MAX_PATH], &entity, &channel, &Float:volume, &level, &pitch, &flags)

нет
Код
event


Сообщение отредактировал Shouldercannon - Воскресенье, 18.02.2024, 20:06:14
 
_wS_ Дата: Воскресенье, 18.02.2024, 20:08:37 | Сообщение # 4
Наверно, лучше сделать так:

Код
public Action:DeathSound(clients[64], &numClients, String:sample[PLATFORM_MAX_PATH], &entity, &channel, &Float:volume, &level, &pitch, &flags)
{
    if (StrContains(sample, "death", false) != -1)
    {
        FormatEx(sample, sizeof(sample), "death%d.wav", GetRandomInt(1, 5)); // Это если "death1-5.wav" в папке "sound/".
        return Plugin_Changed;
    }
    
    if (StrContains(sample, "kevlar", false) != -1)
    {
        FormatEx(sample, sizeof(sample), "hurt%d.wav", GetRandomInt(1, 4));
        return Plugin_Changed;
    }

    return Plugin_Continue;
}


Цитата Shouldercannon ()
Я мог бы получить клиента так

Здесь клиенты в clients[64], а их количество в numClients.

Код
for (new i = 0; i < numClients; ++i)
{
    // client это clients[i]
}
 
Shouldercannon Дата: Понедельник, 19.02.2024, 08:29:33 | Сообщение # 5
Сообщений: 21
Репутация: 0 [ +/- ]
Цитата _wS_ ()
FormatEx(sample, sizeof(sample), "death%d.wav", GetRandomInt(1, 5)); // Это если "death1-5.wav" в папке "sound/".
        return Plugin_Changed;

Идеально. Благодарю.

Добавлено (19.02.2024, 17:06:55)
---------------------------------------------
Есть ли разница в написании?

Код
public Action:DeathSound()

и
Код
public Action DeathSound()

Что с двоеточием, что без работает. Зачем так сделали?
 
_wS_ Дата: Понедельник, 19.02.2024, 18:23:31 | Сообщение # 6
Цитата Shouldercannon ()
Что с двоеточием, что без работает. Зачем так сделали?

Первое - старый синтаксис (устаревшие версии SourceMod).
Второе - новый синтаксис (SourceMod 1.7+).
Писать логичнее/лучше на новом. Больше возможностей, например, enum struct.
 
  • Страница 1 из 1
  • 1
Поиск: