Указано, что
// These return values for the local players camera only...
constant native GetCameraField              takes camerafield whichField returns real
Поэтому использую с проверкой на игрока:
local real cam1 = 0
if GetLocalPlayer() == GetTriggerPlayer() then
set cam1 = GetCameraField(CAMERA_FIELD_TARGET_DISTANCE)
endif
Логика такая, что код будет исполняться только для одного игрока, который ввёл команду, а для остальных не будет исполняться эта "локальная" нативка
Но с этим кодом в LAN сразу вылетает после исполнения кода (В одиночной игре работает нормально)
Убираю проверку:
local real cam1 = 0
set cam1 = GetCameraField(CAMERA_FIELD_TARGET_DISTANCE)
И в LAN вроде не вылетает.
Объясните противоречивую логику

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

да, проблема в том что у одного игрока объект есть а у остальных нет. расходится контрольная сумма хендлов и игра выдает десинк
все что вы делаете в блоке локального игрока происходит только на его машине. магическим образом оно у остальных не появится
`
ОЖИДАНИЕ РЕКЛАМЫ...
1
29
2 года назад
1
Нельзя локально real переменные устанавливать, вроде только строки.
2
13
2 года назад
Отредактирован ValdionWorld
2
((цитата
Нельзя локально real переменные устанавливать, вроде только строки.
))Можно. И не только реал, а любые.

А ты после установки переменной ее считываешь вне Локал плеера? Ты ее меняешь локально. У остальных она прежняя. Если где-то ты ее юзаешь, то она у разных игроков ссылается на разный параметр. Отсюда и рассихронизация .используй ее тоже локально для игрока
5
26
2 года назад
5
ты недоговариваешь, что то накуралесил но не показываешь как именно. само по себе это не десинкает
1
13
2 года назад
1
((цитата
ты недоговариваешь, что то накуралесил но не показываешь как именно. само по себе это не десинкает
))вот именно. Он, по моему, где-то эту переменную использует глобально (вне локал плеера). Больше причин десинхронизации не вижу.
1
28
2 года назад
Отредактирован PT153
1
host_pi, код из вопроса не десинкает, а вот дальнейший код очень даже может. Что происходит после установки real?
0
14
2 года назад
Отредактирован host_pi
0
А ты после установки переменной ее считываешь вне Локал плеера?
нет конечно, тем более что вся функция локальная целиком
function AAA takes nothing returns nothing
local real cam1 = 0
if GetLocalPlayer() == GetTriggerPlayer() then
set cam1 = GetCameraField(CAMERA_FIELD_TARGET_DISTANCE)
endif
endfunction
Потестировал код, оказалось всё забавнее - эта команда выдачи текста выкидывает игрока, если используется под условием :
if GetLocalPlayer() == GetTriggerPlayer() then
call DisplayTimedTextToForce(GetForceOfPlayer(GetTriggerPlayer()), 10, "2")
endif
Поменял её на другую выдачу, всё заработало
Хотя логику не понял, почему GetForceOfPlayer(GetTriggerPlayer()) не работает с GetLocalPlayer()
даже GetForceOfPlayer(Player(0)) не работает с if GetLocalPlayer()
2
8
2 года назад
2
Могли бы посмотреть что делает GetForceOfPlayer перед сомнительным использованием.
function GetForceOfPlayer takes player whichPlayer returns force
    local force f = CreateForce()
    call ForceAddPlayer(f, whichPlayer)
    return f
endfunction
0
14
2 года назад
0
Могли бы посмотреть что делает GetForceOfPlayer перед сомнительным использованием.
Я пока не силён в джасе.
force это группа игроков?
Если в эту группу добавить одного игрока, то здесь же нет проблемы.
Или проблема, что у одного игрока эта группа создаётся, а у других игроков нет, что и вызывает десинх?
1
26
2 года назад
Отредактирован Hate
1
да, проблема в том что у одного игрока объект есть а у остальных нет. расходится контрольная сумма хендлов и игра выдает десинк
все что вы делаете в блоке локального игрока происходит только на его машине. магическим образом оно у остальных не появится
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.