Замена стандартных звуков урона и смерти
| |
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) нет
Сообщение отредактировал 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.
|
|
| |
|