Указано, что
// 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 вроде не вылетает.
Объясните противоречивую логику

да, проблема в том что у одного игрока объект есть а у остальных нет. расходится контрольная сумма хендлов и игра выдает десинк
все что вы делаете в блоке локального игрока происходит только на его машине. магическим образом оно у остальных не появится
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
13
((цитата
Нельзя локально real переменные устанавливать, вроде только строки.
))Можно. И не только реал, а любые.

А ты после установки переменной ее считываешь вне Локал плеера? Ты ее меняешь локально. У остальных она прежняя. Если где-то ты ее юзаешь, то она у разных игроков ссылается на разный параметр. Отсюда и рассихронизация .используй ее тоже локально для игрока
26
ты недоговариваешь, что то накуралесил но не показываешь как именно. само по себе это не десинкает
13
((цитата
ты недоговариваешь, что то накуралесил но не показываешь как именно. само по себе это не десинкает
))вот именно. Он, по моему, где-то эту переменную использует глобально (вне локал плеера). Больше причин десинхронизации не вижу.
28
host_pi, код из вопроса не десинкает, а вот дальнейший код очень даже может. Что происходит после установки real?
14
А ты после установки переменной ее считываешь вне Локал плеера?
нет конечно, тем более что вся функция локальная целиком
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()
8
Могли бы посмотреть что делает GetForceOfPlayer перед сомнительным использованием.
function GetForceOfPlayer takes player whichPlayer returns force
    local force f = CreateForce()
    call ForceAddPlayer(f, whichPlayer)
    return f
endfunction
14
Могли бы посмотреть что делает GetForceOfPlayer перед сомнительным использованием.
Я пока не силён в джасе.
force это группа игроков?
Если в эту группу добавить одного игрока, то здесь же нет проблемы.
Или проблема, что у одного игрока эта группа создаётся, а у других игроков нет, что и вызывает десинх?
26
да, проблема в том что у одного игрока объект есть а у остальных нет. расходится контрольная сумма хендлов и игра выдает десинк
все что вы делаете в блоке локального игрока происходит только на его машине. магическим образом оно у остальных не появится
Принятый ответ
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.