В общем хочу запустить звук для одного игрока только, и в итоге получается дессинхрон
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
ты не поймешь
но напишу еще раз: каждый компьютер (монитор, процессор) каждого игрока выполняет этот код
но каждый по своему, потому что камера у каждого в разном месте
Все, я понял как работает гетлокал, теперь мне нужна другая инфа, о loc, точнее о current camera.
22
current camera возвращает куда смотрит локальный игрок
14
вот у красного игрока камера там где нужно, и его комп поставит правильную строку
а вот синий смотрит не туда, и его копм сделает пустую строку
оба компа создают звук, но у красного звук есть, а у синего звука нет потому что путь пустой
Хорошо, если бы я использовал вместо центра карты позицию героя каждого игрока(у них по 1 юниту), то?цикл использовался только для чего?Для назначения N-точек?
+Нужно было бы всовывать в цикл Условие и создавать N строк, и N раз запускать функцию звука, так?
22
если тебе звук нужен только для обладателя героя, то ты используешь вместо current camera view
position of hero[GetPlayerId(GetLocalPlayer())]
где hero - массив героев, индекс это номер игрока начиная с нуля
то есть hero[0] красный геро, hero[1] синий и т.д.
тогда это вернет позицию локального героя, а если герой не существует то центр карты
Принятый ответ
14
biridius:
если тебе звук нужен только для обладателя героя, то ты используешь вместо current camera view
position of hero[GetPlayerId(GetLocalPlayer())]
где hero - массив героев, индекс это номер игрока начиная с нуля
то есть hero[0] красный геро, hero[1] синий и т.д.
тогда это вернет позицию локального героя
Я опять ничерта не понял, какая же эта функция конченная. Ладно, вернемся к моей.
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
Она ведь осталась неизменной, следовательно десинхрон останется, что поменять?
22
не остается
десинк не в этой функции а в твоем гуи триггере, из-за current camera view и создания объекта только для части игроков
14
не остается
десинк не в этой функции а в твоем гуи триггере
В очередной раз я не понял где ошибка в гуитриггере
22
у тебя еще цикл только для красного и синего игроков (номер 0 и 1)
ошибка в том, что нельзя создавать объекты в локальном коде (current camera view в условии делает действия от этого условия локальным кодом, выполняющимся по разному у разных игроков)
это не из-за PlayLocalSound, а из-за current camera view
пример: у красного игрока который смотрит куда надо комп создаст объект, а у синего нет
и теперь у красного номера объектов в памяти на один больше, и происходит десинк
поэтому создание звука должно быть вне условия, а условием менять только строку
триггер который я скинул выше будет работать правильно, потому что он создает объект звука в любом случае, но если игрок смотрит не туда звук будет пустой
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.