Вобщем моя карта как и ожидалось вылетает в мультиплеере
Пройдясь поиском по всем триггерам ища GetLocalPlayer, нашел вот эти примеры (знаю, код кривой).
Все чисто визуальщина, никаких хендлов создавать не должно.
Что из этого вызывает десинк?
//1 установить цель камеры
if GetLocalPlayer()==Player(i) {SetCameraTargetController(this.dummy,0,0,false)}

//2 видимость тексттага
SetTextTagVisibility(tt, IAbsBJ(View[GetPlayerId(GetLocalPlayer())].battle_index) == a)

//3 установить параметры камеры
        int j=GetPlayerId(GetLocalPlayer())
        SetCameraField(CAMERA_FIELD_ANGLE_OF_ATTACK,    View[j].pAngle,0)
        SetCameraField(CAMERA_FIELD_ZOFFSET,            View[j].pZ - GetZ(View[j].X, View[j].Y),0)
        SetCameraField(CAMERA_FIELD_TARGET_DISTANCE,    View[j].pRange,0)
        SetCameraField(CAMERA_FIELD_ROTATION,           View[j].pFacing,0)
 // при этом
    real GetZ(real x, real y)
    {
        MoveLocation(temp_zloc,x,y)
        return GetLocationZ(temp_zloc)
    }

//4 установить прозрачность юнита
            if GetLocalPlayer() == GetOwningPlayer(mdl) {SetUnitVertexColor(mdl, 255, 255, 255, 120)}

//5 установить громкость звука
            if IAbsBJ(View[GetPlayerId(GetLocalPlayer())].battle_index) != arena
            {
                SetSoundVolume(speech, 0)
            }

//6 кино-фильтр, картинка на весь экран; раньше спрашивал, сказали не десинкает
	if IAbsBJ(View[GetPlayerId(GetLocalPlayer())].battle_index) == index
            {
                CinematicFadeCommonBJ(100, 100, 100, time * 0.5, what, 100, 0)
                FinishCinematicFadeAfterBJ(time)
            }

//7 отобразить мультиборд игроку
	MultiboardDisplay(mb[p], GetLocalPlayer() == Player(p))

//8 опять прозрачность юнита, но по другому; переменная дальше никем не используется
            a=255; if GetLocalPlayer()!=Player(p) {a=0}
            SetUnitVertexColor(preview[p],255,255,255,a)

//9 опять видимость тексттага, но по другому
            if GetLocalPlayer()==Player(p)
            {
                SetTextTagVisibility(nametag[p], true)
            }

//10 опять отображение мультибордов
// скрыть все мультиборды кроме одного
// уже переделал это безобразие, но вдруг десинк был из-за него?
            if Player(i) == GetLocalPlayer()
            {
                if here[i] and !ai[i] and IAbsBJ(View[i].battle_index) == a.index and a.intro<0
                {
                    if i==a.pl[1].owner {
                        MultiboardDisplay(mb[a.pl[1].owner], true)
                    }
                    else
                    {
                        MultiboardDisplay(mb[a.pl[0].owner], true)
                    }
                }
                else
                {
                        MultiboardDisplay(mb[a.pl[0].owner], false)
                        MultiboardDisplay(mb[a.pl[1].owner], false)
                }
            }

Локейшены нельзя двигать локально, глобальный хендл. Двигай для всех и бери высоту для всех, ибо глобал параметры.
`
ОЖИДАНИЕ РЕКЛАМЫ...
26
int j=GetPlayerId(GetLocalPlayer())
как минимум
22
Hate, почему? вроде локалки же можно использовать, главное чтобы на всех машинах были одни и те же объекты-хендлы?
Или в новой версии варика теперь и целочисленные переменные десинкают?
зря мультиплеер пилил
или это какой-то глюк функции GetPlayerId и мне заменить это на перебор игроков циклом чтобы найти индекс?
Я правда хочу понять
1, Вот я беру этот индекс игрока на чьей машине сейчас выполняется этот код
2, Беру из соответствующего этому игроку экземпляра структуры число
3, и ставлю расстояние камеры.
Почему десинк?
28
как минимум
Это не вызовет.

С камерами не работал, потому может быть 1 и 3.
Точно 4 и 8.
Убери 4 и 8 и посмотри на наличие разрыва соединения после этого.

UPD: 4 и 8 не вызывают десинка. Значит проблема в других.
20
Hate:
int j=GetPlayerId(GetLocalPlayer())
как минимум
Нет, неверно.
Я это использую для камеры и это не вызывает десинк.
biridius:
Hate, почему? вроде локалки же можно использовать, главное чтобы на всех машинах были одни и те же объекты-хендлы?
Вот SetTextTagVisibility это при использовании с локальным игроком вызовет десинк, потому что мы указываем "сложные" данные, которые обрабатываются по-разному у всех. То есть правильнее создать тексттаг всем, но заменить текст, который будет показан. Тогда десинка не будет.
Пример схож с тем, как локально "создавать" эффекты.
То есть вот так.
Так же нельзя использовать локального игрока для Показа/Скрытия мультиборда, просто используй ID напрямую и используй массив булеана, в котором ты заранее прикрепишь true или false базируясь на том, кому показать, а кому нет.
Советую избегать использования LocalPlayer как можно чаще, очень много с этим нюансов, которые негативно относятся к нет траффику.
Загруженные файлы
22
сам проверить не могу, нет уровня в гарене; о десинке узнал из комента к карте
4 и 8 это прозрачность юнита, наверное я зря впопыхах это туда впихнул, это точно должно нормально работать, и часто используется для сокрытия юнитов
о, не заметил новый комент
Tailer007, спс
32
Локейшены нельзя двигать локально, глобальный хендл. Двигай для всех и бери высоту для всех, ибо глобал параметры.
Принятый ответ
28
Вот SetTextTagVisibility это при использовании с локальным игроком вызовет десинк, потому что мы указываем "сложные" данные, которые обрабатываются по-разному у всех. То есть правильнее создать тексттаг всем, но заменить текст, который будет показан. Тогда десинка не будет.
Что за чушь? У меня всё работает с этим. Скрытие мультибоардов тоже не вызывает десинка.
Прочитали бы сначала эту статью, прежде чем такое утверждать.
22
quq_CCCP, просто уберу это GetZ, все равно высота везде 0, но спс
Tailer007, насчет мультиборда,
MultiboardDisplay(mb[p], GetLocalPlayer() == Player(p))
вызывает ли десинк?
или только если это внутри иф-блока с GetLocalPlayer в условии?
28
вызывает ли десинк?
Вы прочитали статью, которую я скинул? Там как раз это и приводится как пример использования, что не вызывает десинхронизации.
Также не вызывает десинхронизации следующее, проверял лично.
    if GetLocalPlayer() != Player(i) then
        call SetTextTagVisibility(text, false)
    endif
Что можно упростить до.
    call SetTextTagVisibility(text, GetLocalPlayer() == Player(i))
22
пока так
        bool array isshown
        for(i=0;i<PLAYERS;i++) {isshown[i]=false}
        i=GetPlayerId(GetLocalPlayer())
        if here[i] and !ai[i] and IAbsBJ(View[i].battle_index) == a.index and a.intro<0
                {
                    if i==a.pl[1].owner {
                        isshown[a.pl[1].owner] = true
                    }
                    else
                    {
                        isshown[a.pl[0].owner] = true
                    }
                }
        for(i=0;i<PLAYERS;i++) {MultiboardDisplay(mb[i], isshown[i])}
PT153, что-то же вызывает; с тексттагом на всякий перестрахуюсь
28
что-то же вызывает
Я думаю, проблема вся была в передвижении локаций.
20
PT153:
Вот SetTextTagVisibility это при использовании с локальным игроком вызовет десинк, потому что мы указываем "сложные" данные, которые обрабатываются по-разному у всех. То есть правильнее создать тексттаг всем, но заменить текст, который будет показан. Тогда десинка не будет.
Что за чушь? У меня всё работает с этим. Скрытие мультибоардов тоже не вызывает десинка.
Прочитали бы сначала эту статью, прежде чем такое утверждать.
Грубить было не обязательно, я поспешил с написанием, да. Ещё умудрился вместо лайка - дизлайк поставить ))0
PT153:
что-то же вызывает
Я думаю, проблема вся была в передвижении локаций.
Совершенно не заметил, да, я похоже слишком выше гор смотрел. Виноват :)
biridius:
пока так
        bool array isshown
        for(i=0;i<PLAYERS;i++) {isshown[i]=false}
        i=GetPlayerId(GetLocalPlayer())
        if here[i] and !ai[i] and IAbsBJ(View[i].battle_index) == a.index and a.intro<0
                {
                    if i==a.pl[1].owner {
                        isshown[a.pl[1].owner] = true
                    }
                    else
                    {
                        isshown[a.pl[0].owner] = true
                    }
                }
        for(i=0;i<PLAYERS;i++) {MultiboardDisplay(mb[i], isshown[i])}
PT153, что-то же вызывает; с тексттагом на всякий перестрахуюсь
После удаления движения локации перестало десинкать?
28
Грубить было не обязательно, я поспешил с написанием, да. Ещё умудрился вместо лайка - дизлайк поставить ))0
Прошу прощения, бывает. А ещё Вы вставили 2 одинаковых скриншота в предыдущее сообщение.
20
PT153:
Грубить было не обязательно, я поспешил с написанием, да. Ещё умудрился вместо лайка - дизлайк поставить ))0
Прошу прощения, бывает. А ещё Вы вставили 2 одинаковых скриншота в предыдущее сообщение.
Да, заметил, но поправить не могу, уже поздно :(
biridius:
Tailer007, хз, надо тестить а где
Можешь собрать тест версию карты (даже пустую) и запустить в одиночной игре. Но по идее, PT153 прав и проблема была только в движении локации, в остальном, если дашь мне код чистым Jass'ом, то смогу всё написать как нужно и проверить сам (я не использую cJass/vJass).
22
Tailer007, кода больно много в карте чтобы переводить в обычный джасс, в прнципе проблема может быть в чем угодно, м.б. у людей фаталит от ExecuteFunc либо при загрузке звуков (у самого фаталило, пока не замедлил подгрузку вдвое)
буду ждать баг репортов в коментах к карте тут и на хайве, обновил тут (пока на утверждении) и там
20
biridius:
Tailer007, кода больно много в карте чтобы переводить в обычный джасс, в прнципе проблема может быть в чем угодно, м.б. у людей фаталит от ExecuteFunc либо при загрузке звуков (у самого фаталило, пока не замедлил подгрузку вдвое)
буду ждать баг репортов в коментах к карте тут и на хайве, обновил тут (пока на утверждении) и там
Можешь дать ссылку на карту? Или она у тебя в ресурсах добавлена?
22
Tailer007, www.hiveworkshop.com/threads/fighting-for-azeroth-3d.305111
там вроде сразу обновилось
но в сингле тестить смысла нет, так то она и так работала в синглплеере
28
Я уже как-то советовал. Можно поставить JNPG с эмуляцией мультиплеера, сам я этим пользовался разок.
20
biridius:
Tailer007, www.hiveworkshop.com/threads/fighting-for-azeroth-3d.305111
там вроде сразу обновилось
но в сингле тестить смысла нет, так то она и так работала в синглплеере
Мне нужно было код почитать, 20 раз используется GetLocalPlayer, а проверять в принципе можно используя патч 1.26 + KLoader для эмуляции нескольких окон Вар 3.
В целом уже по идее десинхронизации быть не должно. Все использования у тебя остались безопасные и не имеющие проблем.
PT153:
Я уже как-то советовал. Можно поставить JNPG с эмуляцией мультиплеера, сам я этим пользовался разок.
Лайк поставить не могу >_< Да, как вариант, правда лично у меня он отказался работать, но ранее работал.
Загрузил картинку со всеми использованиями, а то почему-то загрузить скриншот не даёт.
16
тексттаги абсолютно асинхронны, делай с ними что хочешь
проблему не вижу, потмоу что написано это не на жассе
22
DracoL1ch, пришли к консенсусу что
MoveLocation(temp_zloc,x,y)
не стоит делать если эти координаты локальные
22
все еще десинкает, хотя и убрал перемещение локейшенов
может мультиборд? или таки fade filter?
на хайве ответили, это все бж функция которая убирает fade filter, там создается таймер
28
на хайве ответили, это все бж функция которая убирает fade filter, там создается таймер
Да, всё так. Убери в 6-м GetLocalPlayer.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.