В общем хочу запустить звук для одного игрока только, и в итоге получается дессинхрон
function PlayLocalSound takes string s, integer p returns nothing
local sound snd
if GetLocalPlayer() != Player(p) then
set s = ""
endif
set snd = CreateSound(s,false, false, false,10,10,"")
call SetSoundChannel(snd,5)
call SetSoundVolume(snd,127)
call SetSoundPitch(snd, 1)
call StartSound(snd)
call KillSoundWhenDone(snd)
set snd = null
endfunction
Код функции, который использую для звука
На скрине запуск

если тебе звук нужен только для обладателя героя, то ты используешь вместо current camera view
position of hero[GetPlayerId(GetLocalPlayer())]
где hero - массив героев, индекс это номер игрока начиная с нуля
то есть hero[0] красный геро, hero[1] синий и т.д.
тогда это вернет позицию локального героя, а если герой не существует то центр карты
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
14
А что это должно делать?
Я думаю проблема в условии target of current camera view (оно проверяется у локального игрока, и из-за этого создается объект только у какого-о из игроков), но я не понимаю что этот триггер должен делать
Он должен проигрывать звук относительно расстояния источника до камеры
biridius:
А что это должно делать?
Я думаю проблема в условии target of current camera view (оно проверяется у локального игрока, и из-за этого создается объект только у какого-то из игроков), но я не понимаю что этот триггер должен делать
Нууу, типо если рядом смотришь камерой, то звук проигрывается, вот так
22
надо сделать переменную типа строка, и в если расстояние неправильное, задавать пустую строку, а если правильная то путь к звуку. после этого проигрывать звук по этой строке. без цикла и без getlocalplayer
14
biridius:
надо сделать переменную типа строка, и в если расстояние неправильное, задавать пустую строку, а если правильная то путь к звуку. после этого проигрывать звук по этой строке. без цикла и без getlocalplayer
Цикл для игроков происходит, мне нужно проиграть только тем игрокам, которые смотрят рядом
biridius:
надо сделать переменную типа строка, и в если расстояние неправильное, задавать пустую строку, а если правильная то путь к звуку. после этого проигрывать звук по этой строке. без цикла и без getlocalplayer
Ты прямо сейчаас озвучил принцип действия моей функции или что?
22
Я понял уже
Цикл не нужен, код выполняется на компе каждого из игроков отдельно, и расстояние до камеры у каждого посчитается свое.
в твоей переменной P_S[3401] на компе каждого игрока и без цикла будет лежать его собственный центр камеры, а не чей-то еще
14
Я понял уже
Цикл не нужен, код выполняется на компе каждого из игроков отдельно, и расстояние до камеры у каждого посчитается свое.
в твоей переменной P_S[3401] на компе каждого игрока и без цикла будет лежать его собственный центр камеры, а не чей-то еще
Хммм, я не знал, но ведь если несколько данных, то как мне узнать для какого юнита пустая строка, а для какого нет?Я вообще не понимаю логики этой гетлокал
biridius:
Я понял уже
Цикл не нужен, код выполняется на компе каждого из игроков отдельно, и расстояние до камеры у каждого посчитается свое.
в твоей переменной P_S[3401] на компе каждого игрока и без цикла будет лежать его собственный центр камеры, а не чей-то еще
Я ничерта не понимаю принцип работы GetLocal, ибо она оч нелогична
22
каждый комп считает весь код сам, а потом сверяется с другими компами, и если не совпадают какие-то вещи (например компы красного и синего игрока создали объект звука, а остальные нет) то происходит десинк.
у каждого объекта свой номер, и если создавать звук только для части игроков, у них номера объектов будут неправильные с этого момента
14
каждый комп считает весь код сам, а потом сверяется с другими компами, и если не совпадают какие-то вещи (например компы красного и синего игрока создали объект звука, а остальные нет) то происходит десинк
В общем, вопрос так и остался нерешенным, что мне нужно сделать чтобы прекратился рассинхрон
22
я написал выше что надо сделать: убрать цикл, добавить строковую переменную и т.д.
та функция не подойдет т.к. нельзя узнать с одного компа где камера у другого
14
я написал выше что надо сделать: убрать цикл, добавить строковую переменную и т.д.
та функция не подойдет т.к. нельзя узнать с одного компа где камера у другого
И какую юзать?
22
local sound snd = CreateSound(s,false, false, false,10,10,"")
call SetSoundChannel(snd,5)
call SetSoundVolume(snd,127)
call SetSoundPitch(snd, 1)
call StartSound(snd)
call KillSoundWhenDone(snd)
вот этот кусок проигрывает звук по строке s
а перед этим s надо задать как путь к звуку если дальность подходит
14
biridius:
я написал выше что надо сделать: убрать цикл, добавить строковую переменную и т.д.
та функция не подойдет т.к. нельзя узнать с одного компа где камера у другого
Знаешь, куда было бы проще, если бы ты вбросил эти жалкие 10 рабоспособных строк кода, вместо пустых вбросов каждое сообщение
biridius:
ocal sound snd = CreateSound(s,false, false, false,10,10,"")
call SetSoundChannel(snd,5)
call SetSoundVolume(snd,127)
call SetSoundPitch(snd, 1)
call StartSound(snd)
call KillSoundWhenDone(snd)
вот этот кусок проигрывает звук по строке s
Ибо миллион вопросов остается, например если убирать цикл, то что юзать в качестве целочисленной для запуска функции
Мде, то чувство, когда объясняешь мне что делает мой код, вместо того, чтобы объяснить принципы работы гетлокал, и его использование.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.