В то время пока разработчики KSP (космический симулятор, песочница аля Minecraft, но с почти реальной физикой, планетами и моделями частей ракет и самолетов от NASA с характеристиками близкими к реальной жизни) на века застолбили в тред "Not To Suggest" (раздел правил «не предлагать») — свою коронную фразу «не предлагать Multiplayer»,
некоторые игроки не выдержали и решили сложнейшую задачу, мучающую всех столько лет — как сделать мультиплеерный WARP (ускорение внутриигрового времени с целью быстрейшего достижения других планет при перелете)?
Ответ — здесь.
И видео:
Причем здесь хабр?
Итак, представим алгоритмическую задачу:
1. Игрок А создал некий самолет и летит рядом с игроком В, у них одинаковый часовой пояс, все супер.
2. Игрок В устал летать с А и решил отправиться на Марс. Ему лететь — более 350 игровых (и реальных) дней! Но в игре есть WARP — ускорение времени,
путем включения которого планеты двигаются быстрее, стрелки на часах крутятся шустрее и мы за 30 минут долетаем до марса.
3. А что делал в течении этих 30 минут игрок А? Ведь он не включал WARP! У него самолет улетел в небытие за эти 30 минут (350 дней?), луна и планеты слетели с орбиты?
4. Вроде бы ничего сложного, ведь можно просто игнорировать смещение временных зон, но! У игрока В марс находится на миллионы км в другой точке чем у А! Луна сделала 50 витков вокруг земли, да и вообще, на земле уже много чего произошло.
5. Прилетев они одновременно на марс — здесь проблем нет. Но вот решил игрок А на 5 день полета догнать игрока В и состыковаться с ним в полете! Ведь это же для симулятора физики в KSP и нашем мире — вполне реально.
Теперь вопрос: что будет с кораблем игрока В? Он увидит его прибывшим после WARP-а на марс? Плохая стыковка уничтожит корабль и он удивится увидев как корабль испарился в полете, или что?
Автор плагина решил создать временные зоны (параллельные вселенные) с возможностью перехода из нижнего в верхнее (синхронизация). При этом нижняя вселенная находится в прошлом от верхней, но при этом в ней видны все действия игроков в верхних вселенных, только отсутствует возможность контактировать с ними, как в зазеркальном мире. Это обеспечивает и функционирование WARP-а и одновременную игру на одной космической станции и т.д…
Однако, моей идеей решения этой задачи была идея телепортации во время WARP-а. Когда игрок В включает WARP, для игрока А он уходит в «гиперпространство» и становится невидим внутри игры, однако видим на станции отслеживания перемещения кораблей, физика для игрока В в реальности А не пересчитывается. При выходе из «гиперпространства» — корабль игрока В «появляется» там, где он отключил варп. Однако, если в это время кто-то был на марсе и варп не включал, то для него игрок В появился из «гиперпространства», во время которого никто не может оперировать с кораблем игрока В. Но здесь есть одна проблема: планеты во время перелета в WARP-е тоже меняют свое положение, и для того кто был на марсе — он должен был увидеть как солнце с большой скоростью внезапно само побежало по небосклону, чего быть не может, так как он не включал WARP…
Другой автор предложил записывать все действия игрока В на сервере и «проигрывать» их для игрока А. Здесь WARP выглядит уже не как гиперпрыжок, а как реальный перелет: если мы не включаем WARP у себя, то видим перелет в реальном времени, а точнее его запись. Однако, накопленное количество записей может быть слишком большим для игрока А, который никогда не пользовался WARP-ом, в то время пока все игроки варпятся для перелетов на другие планеты и что-то там делают при посадке или на орбите, ведь каждое действие должно записываться (логироваться)!..
А какое решение для этой задачи выбрали (придумали) бы вы?
некоторые игроки не выдержали и решили сложнейшую задачу, мучающую всех столько лет — как сделать мультиплеерный WARP (ускорение внутриигрового времени с целью быстрейшего достижения других планет при перелете)?
Ответ — здесь.
И видео:
Причем здесь хабр?
Итак, представим алгоритмическую задачу:
1. Игрок А создал некий самолет и летит рядом с игроком В, у них одинаковый часовой пояс, все супер.
2. Игрок В устал летать с А и решил отправиться на Марс. Ему лететь — более 350 игровых (и реальных) дней! Но в игре есть WARP — ускорение времени,
путем включения которого планеты двигаются быстрее, стрелки на часах крутятся шустрее и мы за 30 минут долетаем до марса.
3. А что делал в течении этих 30 минут игрок А? Ведь он не включал WARP! У него самолет улетел в небытие за эти 30 минут (350 дней?), луна и планеты слетели с орбиты?
4. Вроде бы ничего сложного, ведь можно просто игнорировать смещение временных зон, но! У игрока В марс находится на миллионы км в другой точке чем у А! Луна сделала 50 витков вокруг земли, да и вообще, на земле уже много чего произошло.
5. Прилетев они одновременно на марс — здесь проблем нет. Но вот решил игрок А на 5 день полета догнать игрока В и состыковаться с ним в полете! Ведь это же для симулятора физики в KSP и нашем мире — вполне реально.
Теперь вопрос: что будет с кораблем игрока В? Он увидит его прибывшим после WARP-а на марс? Плохая стыковка уничтожит корабль и он удивится увидев как корабль испарился в полете, или что?
Автор плагина решил создать временные зоны (параллельные вселенные) с возможностью перехода из нижнего в верхнее (синхронизация). При этом нижняя вселенная находится в прошлом от верхней, но при этом в ней видны все действия игроков в верхних вселенных, только отсутствует возможность контактировать с ними, как в зазеркальном мире. Это обеспечивает и функционирование WARP-а и одновременную игру на одной космической станции и т.д…
Однако, моей идеей решения этой задачи была идея телепортации во время WARP-а. Когда игрок В включает WARP, для игрока А он уходит в «гиперпространство» и становится невидим внутри игры, однако видим на станции отслеживания перемещения кораблей, физика для игрока В в реальности А не пересчитывается. При выходе из «гиперпространства» — корабль игрока В «появляется» там, где он отключил варп. Однако, если в это время кто-то был на марсе и варп не включал, то для него игрок В появился из «гиперпространства», во время которого никто не может оперировать с кораблем игрока В. Но здесь есть одна проблема: планеты во время перелета в WARP-е тоже меняют свое положение, и для того кто был на марсе — он должен был увидеть как солнце с большой скоростью внезапно само побежало по небосклону, чего быть не может, так как он не включал WARP…
Другой автор предложил записывать все действия игрока В на сервере и «проигрывать» их для игрока А. Здесь WARP выглядит уже не как гиперпрыжок, а как реальный перелет: если мы не включаем WARP у себя, то видим перелет в реальном времени, а точнее его запись. Однако, накопленное количество записей может быть слишком большим для игрока А, который никогда не пользовался WARP-ом, в то время пока все игроки варпятся для перелетов на другие планеты и что-то там делают при посадке или на орбите, ведь каждое действие должно записываться (логироваться)!..
А какое решение для этой задачи выбрали (придумали) бы вы?