Короче, суть такая.
Кастомную озвучку делаю так: регается событие unit_selected для конкретного юнита,
дальше триггер:
  • отключает себя во избежание звукоабуза
  • задаёт случайное значение переменной от 1 до x-xxx, сколько там звуков.
Далее идут ифзенэлсы от 1 до xxx
if (udg_integer == 1) then
call PlaySoundOnUnitBJ( gg_snd_SingerOfDeath1, 100, GetTriggerUnit() )
else
if (udg_integer == 2) then
call PlaySoundOnUnitBJ( gg_snd_SingerOfDeath2, 100, GetTriggerUnit() )
else
if (udg_integer == 3) then
call PlaySoundOnUnitBJ( gg_snd_SingerOfDeath3, 100, GetTriggerUnit() )
else
и так до последнего звука из саундсета.
Потом триггер запускает однократный таймер в Y секунд, после завершения которого исходный триггер (занесенный ранее в хэш) включается обратно.
Всё так-то действует. Но иногда при выделении юнита может проявиться раздражающее подлагивание. Чтобы его убрать, продрачиваются туда-сюда громкости звуков и изменение значения Y (просто больше ничего придумать не удаётся), и в конце концов обычно такое шаманство приводит к чему-то приемлемому (подлагивание устраняется до незаметного уровня). А бывает и так, что просто во время игры это подлагивание при выделении то достаточно заметно проявляется, то внезапно пропадает и все как по маслу идет (ну это если так-то отмечено, что оно ещё не устранилось).
Собственно прошу прокомментировать и посоветовать по оптимизации. Понимаю, что в идеале вообще должны быть кастомные саундсеты, но всё никак это раскурить не могу, да и, ятп, там не только вшивать в мпкью придётся, но и формат звуковых файлов нужный ставить, а их и так нарезать ещё и громкость настраивать...

Принятый ответ

ClotPh:
Ige, т. е. как-то так (при инициализации)?
call Preload (war3mapImported\SingerOfDeath1.wav)
call Preload("war3mapImported\\SingerOfDeath1.wav")
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
3
28
7 лет назад
3
ClotPh, прелоад это преждевременная загрузка в память
загрузка в память требует времени == лаг
вывод
чтобы не было лагов не используй то что требует загрузки в память
а именно звуки, модели, текстуры и т.д.
либо прелоадь их при событии инициализация карты (тогда карта дольше грузится будет но лагов не будет)
и используй массивы как писал кет
это намного лучше чем писать 100500 ифов
0
21
7 лет назад
0
nvc123, карта дольше грузиться будет = меньшее из всех зол.
Я функцию увидеть хочу, которая звуки прелоадит.
Я в упор не могу поиском найти ни через гугл, ни через здесь, то, что мне выдаёт, выше вон ссылка, но это старое и не то, по-моему.
0
33
7 лет назад
0
ClotPh, вроде тем, что по ссылке, прелоадить вполне можно.
2
7
7 лет назад
2
ClotPh:
Я функцию увидеть хочу, которая звуки прелоадит.
native Preload takes string filename returns nothing
где filename - путь до звука
0
21
7 лет назад
0
Ige, т. е. как-то так (при инициализации)?
call Preload (war3mapImported\SingerOfDeath1.wav)
0
28
7 лет назад
0
ClotPh, лучше используй файлы для прелоада
про прелоад есть куча статей же
0
21
7 лет назад
0
nvc123, ммм... какие файлы? Звук у меня и так вшит в mpq (именно по такому пути).
0
28
7 лет назад
0
ClotPh, файлы для прелоада
прелоад устроен следующим образом
есть файл в которым содержится код для прелоада ресурсов
из карты мы вызываем этот файл
и файл сам прелоадит своё содержимое
0
21
7 лет назад
0
nvc123, а это лучше только тем, что время загрузки не увеличивается?
Тогда ПОКА ЧТО я лучше все-таки испробую вариант выше (ятп, он действует), потому что геморроя на голову и так больше, чем хотелось бы.
Этот вариант т. е. xgm.guru/p/wc3/193330?postid=354966#comment16
4
7
7 лет назад
4
ClotPh:
Ige, т. е. как-то так (при инициализации)?
call Preload (war3mapImported\SingerOfDeath1.wav)
call Preload("war3mapImported\\SingerOfDeath1.wav")
Принятый ответ
0
21
7 лет назад
0
^ Ни хрена не действует
То есть я это прописываю в триггере с событием Map Initialization, а звук все равно лагает при первом вызове
Придётся, как и раньше, делать с лагом на старте карты с проигрыванием звука с громкостью 0
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.