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