Вобщем моя карта как и ожидалось вылетает в мультиплеере
Пройдясь поиском по всем триггерам ища 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)
                }
            }

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

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

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

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