Satisfactory как копировать постройки

Обновлено: 18.05.2024

В Satisfactory игрок занимается тем, что строит огромный инопланетный завод — с десятками зданий и километрами транспортных лент, по которым текут тысячи предметов. Сооружением фабрики можно заниматься вместе с друзьями в кооперативе.

Это означает, что серверу нужно в реальном времени обрабатывать данные обо всех объектах на заводе. То, с чем пришлось разбираться в Coffee Stain — это уникальная ситуация, с которой вряд ли сталкивались разработчики типового многопользовательского шутера.

В своём блоге на Gamasutra сетевой программист Coffee Stain Гафхар Даваллиус рассказал о том, как в студии оптимизировали сетевой код игры. Мы выбрали главное из материала.

По словам разработчика, есть два пути, по которым можно было бы пойти при создании сетевой инфраструктуры Satisfactory.

Первый — это полная синхронизация карты между всеми игровыми клиентами. В таком случае на компьютерах игроков бы воспроизводилась локальная симуляция. Так поведение всех объектов было бы на 100% предсказуемым — а вся информация бы обновлялась только тогда, когда происходят непредвиденные явления (например, действия игрока).

Второй — это обработка всей информации на сервере, после чего она бы отправлялась на клиенты игроков и там воспроизводилась. Это решение используют в шутерах, и именно его взяли за основу при создании Satisfactory.

Если бы разработчики пошли первым путём, то тогда им нужно было добиваться того, чтобы игра работала предсказуемо во всех отношениях. По словам Даваллиуса, это даже не цель, которую нужно достичь, а необходимое требование для работы системы. Малейшая неточность породит цепную реакцию, из-за которой вся игра рассинхронизируется.

Если фабрики ещё могут оставаться предсказуемыми, то симуляцию сложной физики вроде движения транспорта очень трудно реализовать так, чтобы все клиенты точно её предсказывали. Понадобилось бы переписывать движок.

Более того, из-за этого игроки бы чувствовали сильную задержку. Изменения не будут видны, пока все игровые клиенты не подтвердят, что получили информацию от всех пользователей. Проблему можно было бы решить, если бы компьютеры игроков хранили копию состояния сервера пару секунд назад — однако это бы сильно перегрузило оперативную память и процессор.

Поэтому, после выбора модели неткода, перед разработчиками встали следующие задачи.

  • Минимализировать количество отправляемой информации. Это можно сделать, выяснив, какие данные наиболее важны в определённый промежуток времени. К примеру, не нужно отправлять то, что игроки не видят.
  • Уменьшить частоту отправления информации. Если какой-то объект не меняется часто или его поведение достаточно предсказуемо, данные о нём можно посылать реже.
  • Сжать и уменьшить количество сведений, необходимых для точного отображения состояния игры.

Также создателям нужно было разработать систему, которая бы вычленяла важную информацию отдельно для каждого игрока. Если бы эти задачи не были решены корректно, то клиенты бы недополучали пакеты с данными, а также испытывали задержку — гораздо большую, чем пинг.

Первое, что начали оптимизировать разработчики — это количество отправляемой информации. Чем больше становилась фабрика в игре, тем больше данных нужно было отправлять — в итоге со временем возникало «распухание буфера», когда огромное количество информации «вставало в очередь» на обработку. Всё это вело к потери пакетов с данными.

На двух примерах Даваллиус объяснил, что сделали в Coffee Stain. В первую очередь разработчики переработали систему инвентаря. В Satisfactory помимо игрока предметы могут хранить контейнеры и некоторые объекты фабрики: информация о них обновляется в реальном времени, так как все ресурсы поступают напрямую в хранилища.

Чтобы снизить нагрузку на клиенты, авторы сделали так, чтобы у игрока не обновлялись данные инвентарей, которые он не видит в текущий момент времени. Благодаря этому перестал перегружаться процессор — ему больше не нужно было обрабатывать вообще все изменения.

Впрочем, у такого подхода есть свои минусы: иногда игра не может предсказать, когда игрок соберётся открыть тот или иной инвентарь, и потому обновляет данные слишком поздно. Однако в большинстве случаев это незаметно — особенно если играть с невысоким пингом.

Следующее, что нужно было оптимизировать — это транспортные ленты. При больших размерах фабрики одновременно в игре могут двигаться тысячи предметов, и избежать отправки данных в таком случае никак нельзя — всё же ресурсы, в отличие от инвентарей, видны всегда.

Здесь разработчикам помогло то, что лишь небольшое количество информации сложно предсказать заранее. Чтобы обновлять данные о предметах на транспортной ленте, создатели применили метод дельта-кодирования. Простыми словами, на сервер отправляется не вся информация целиком, а лишь разница между нынешним и прошлым состоянием клиента.

Например — вместо того, чтобы отсылать данные про все 25 предметов на конвейере, мы отправляем лишь сведения о двух новых предметах, которые на нём появились, и об одном, который с него сошёл. То есть, мы используем только 12% всей информации.

Кроме того, игра не воссоздаёт движение всех ресурсов на транспортной ленте, а лишь симулирует его в каждом из клиентов — благодаря знанию позиции каждого из них.

Со стороны это выглядит так, будто разработчикам удалось здорово оптимизировать сетевой код — но те же транспортные ленты и инвентарь всё ещё занимают большинство отправляемой информации.

Мы хотим минимализировать количество данных — однако в таком случае падает точность. Поэтому главная загвоздка заключается в том, чтобы найти линию в коде, которую можно было бы просто пропустить — с наименьшей потерей точности. К тому же, если мы где-то можем предсказать какое-то явление или паттерны, отправку данных можно пропустить вовсе.

Сейчас в сравнении с релизной версией в сетевом коде Satisfactory многое изменилось. К примеру, на том же конвейере обновления стали посылаться не двадцать раз в секунду, а всего лишь три. Пакеты с информацией отправляются реже, а данных в них теперь больше. Несмотря на то, что у транспортных лент появилась задержка (и то заметная лишь на аппаратном уровне), потеря сведений свелась к минимуму.

Также появилась неточность в расположении предметов на конвейере — однако это удалось устранить благодаря системе, которая предсказывает их позицию согласно уже известным паттернам.

В итоге конвейеры не только используют меньше данных, чем раньше, но и точнее работают — намного ближе к состоянию сервера. Поскольку вся задержка компенсируется вашим клиентом, она никак не влияет на игровой опыт — а скорее наоборот делает его лучше, так как сама игра ощущается более отзывчиво.

Как настроить дозагрузку
контента для тяжёлой игры

Комментарий удален по просьбе пользователя

Да, лучше почитать дневники разрабов Factorio

Комментарий удален по просьбе пользователя

попить с этими чешскими чуваками баварского пива в Варшаве

Комментарий удален по просьбе пользователя

Адресок подскажи, а то в сл. месяце как раз там буду.

Комментарий удален по просьбе пользователя

А еще у них самая вкусная рулька.

Благодарю. Обязательно зайду.

Вельвет наливают в каждом втором приличном пабе европы.

Комментарий удален по просьбе пользователя

Просто пиво на азоте?

И не говори. "Чтобы уменьшить нагрузку на сеть, мы уменьшили объем отправляемых данных" - вот и вся статья.

Комментарий удален по просьбе пользователя ред.

Описание алгоритмов дано, дальше уже реализация, которая никому и не нужна.

Дельта-кодирование (англ. Delta encoding) — способ представления данных в виде разницы (дельты…

Первый — это полная синхронизация карты между всеми игровыми клиентами. В таком случае на компьютерах игроков бы воспроизводилась локальная симуляция. Так поведение всех объектов было бы на 100% предсказуемым — а вся информация бы обновлялась только тогда, когда происходят непредвиденные явления (например, действия игрока).

Тут мне кажется не хватает небольшого пояснения:
Синхронизация всех клиентов с сервером происходит на старте игры/при подключении клиента к серверу. Сервер пересылает клиенту актуальное состояние мира, после чего клиент может симулировать мир локально, без необходимости синхронизации с сервером несколько раз в секунду кроме случаев, когда игроки производят какие-то действия (но и даже так, можно было бы передавать только действия игроков, без необходимости передавать полный стейт игрового мира).
Но такой подход будет работать только при 100% детерминированной модели игрового мира, т.е. когда при одинаковых входных условиях мы всегда будем наблюдать абсолютно одинаковое развитие событий. К сожалению 100% детерминированности для сложной игры не добиться (по разным причинам, вплоть до разницы в вычислениях с плавающей запятой на разных архитектурах процессоров), о чём, собственно и идёт речь далее в статье.

А ещё первый вариант больше подвержен читерству (подмене данных клиента).

Спасибо за замечание, поправил :)

Я бы почитал как эту проблему решают в промышленных модах для Майнкрафта, который изначально на такое небыл рассчитан в принципе. Хотя там кроме мата читать наверное было бы нечего.

Так там нет такой нагрузки, как в сф. Большинство машин "черные ящики", трубы не тянутся километрами с тысячами объектов внутри, предметы передвигаются стаками. Хотя лагомашина из труб билдкрафта вполне себе работала, когда в нее кучу предметов закидывают и заставляют по кругу циркулировать, с выбором в мир и загрузкой снова в трубы. ред.

трубы не тянутся километрами с тысячами объектов внутри

Это потому что они лагают. И загрузка чанков дорого стоит, особенно на серверах в мультиплеере.

предметы передвигаются стаками

От мода зависит.

Хотя лагомашина из труб билдкрафта вполне себе работала

Пару майнеров с макс. апргейдами нормальненько нагружают. Конечно да, оптимально использовать машины(так и транспорт) в виде черного ящика который по-факту ничего не переносит, но красивости с трубами, конвеерами и мульти-блоковыми машинами сейчас в тренде. А если еще жидкости с газами.

Пользуйтесь пипеткой

Если в пределах видимости уже существует нужное строение, то чаще всего проще и быстрее выбрать его себе в руку пипеткой средней кнопкой мыши, чем искать на хотбарах и тем более в меню.

Архивы

Satisfactory : 20 советов и подсказок Как проафкашить свой путь к Свету. Всплыть Space Barbies: Knights of the Cartel Market Вглубь


Не разбирайте цепочки для производства специфических деталей для прокачки космического лифта.

Они вам понадобятся в будущем.

Не бойтесь удалять построенное

Все строения возвращаются в виде ингредиентов, из которых были сделаны, без какого-либо штрафа. Режим удаления включается клавишей F. Можно массово удалять до 50 строений за раз, зажимая Ctrl, или удалять выборочно, нажимая и отпуская Ctrl с нужным объектом в прицеле. Если предметы не помещаются в инвентарь, то на месте удалённой постройки появится временный сундук с оставшимися ингредиентами.


Каждый вход в трубу добавляет немного скорости.

Не экономьте ресурсы

Если ингредиенты переполняют сумки, то смело выкидывайте их в мусорное ведро. Во-первых, у вас это автоматизировано (если нет, то автоматизируйте). Во-вторых, ресурсы бесконечны. Ну потеряете вы 50 железных пластин. Смешные траты, когда завод их производит по полтысячи в минуту. Место в инвентаре дороже.

Путешествие по гипертрубам может быть очень весёлым


В игре 3 способа развития технологий:


Пользуйтесь разгоном с помощью энергетических осколков с усмотрением.

Прирост расхода электричества увеличивается быстрее прироста производительности. Два станка будут потреблять меньше электричества, чем один разогнанный на 200%. Смотрите сами что важнее: экономия на электричестве (текущие расходы) или экономия на логистической сложности (вложения в инфраструктуру).

Satisfactory как копировать постройки


Chiarra к записи Эпоха паруса
Кстати, я сегодня впервые робко зашла на пристань Велии, и. там не так уж многолюдно, вот что интересно. А в… 19 декабря, 10:47


Minamikaze к записи Эпоха паруса
В общем, да, могу тут подписаться под каждым словом. Из нас я начал активно заниматься бартером одним из первых, но… 19 декабря, 10:38


Síocháin к записи The Last of Us II
Список нечитателей всё растёт )) 30 октября, 17:31

Стройте переходы и лестницы

Стройте водонапорные башни

Помните про сообщающиеся сосуды с уроков физики в школе? Проще один раз поднять жидкость на высоту, чтобы она потекла сама в любую точку системы труб ниже этой высоты, чем поднимать её у каждого потребителя. А ещё если вести длинные трубопроводы по земле, то можно быть уверенным, что она пройдёт все неровности ландшафта и не застрянет на каком-нибудь холмике. Главное здесь убедиться, что контейнер на башне находится выше любого участка трубопровода.

Драк с мобами можно избежать или значительно их облегчить с помощью строительства. Просто стройте мосты над ними или закрывайтесь щитами из стеклянных стен (не работает против пауков). Не забывайте что можно строить повсюду, в том числе чтобы попасть в труднодоступные места. Не нужно ждать пока откроются джетпак, машины и гипертрубы.

Стройте на фундаментах

Как можно скорее начните строить на фундаментах. Вы тридцать раз потом скажете себе за это спасибо, когда будете расширять базу. А ещё строительство по сетке фундаментов помогает вести порядок. Если зажать Ctrl, то игра помогает строить по линейке. Это особенно удобно, когда нужно совмещать входы и выходы.

Пользуйтесь несколькими хотбарами

Залезать каждый раз в меню строительства (Q) и искать там нужное строение не очень-то весело и продуктивно. У вас есть 10 хотбаров по 10 ячеек в каждом. Перемещаться по ним можно через Alt+Колесо мыши. По хотбарам удобно группировать строения по смыслу.


Стройте в высоту

Хоть на километр. Потолок проходит очень высоко за облаками. Удобно располагать на первом этаже доставку и сортировку ресурсов, на втором ингредиенты первого цикла, на третьем детали, которые делаются из первых ингредиентов, и далее по цепочке.

Есть исключения

А вот артефакты (которые пока что никуда не нужны) и энергослизни да жёсткие диски (которые наоборот очень сильно нужны) вполне себе даже конечны. Их лучше беречь, и если вы умерли с полными сумками энергослизней и жёстких дисков, упав в пропасть, то лучше загрузить последнее автосохранение.

Satisfactory как копировать постройки

Эта публикация удалена, так как она нарушает рекомендации по поведению и контенту в Steam. Её можете видеть только вы. Если вы уверены, что публикацию удалили по ошибке, свяжитесь со службой поддержки Steam.

Этот предмет несовместим с Satisfactory. Пожалуйста, прочитайте справочную статью, почему этот предмет может не работать в Satisfactory.

Этот предмет виден только вам, администраторам и тем, кто будет отмечен как создатель.

В результатах поиска этот предмет сможете видеть только вы, ваши друзья и администраторы.


Делимся советами по созданию и организации своей базы в игре Satisfactory. Они весьма субъективны, но должны помочь сэкономить ваше время. Это первый ролик по советам, он и так вышел весьма длинным, так что следите за каналом, чтобы не пропустить продолжение


3,468 уникальных посетителей
43 добавили в избранное




0:24 - Строим плацдарм
2:48 - Сегментируйте свою сеть
4:57 - Организуйте хранилище на базе
7:18 - Распараллеливайте входные элементы
9:22 - Электрификация острова!
10:45 - Делаем автономную подводку ресурсов к генераторам

@Genku Ковейер 5 лвл перевозит максимум 780 пр/мин (предметов в минуту)

7. Я строю поэтажно на главной базе. Этаж конструкторов, этаж ассемблеров, этаж изготовителей. Смотрится очень красиво и позволяет избежать неразберихи. Все конвееры как писал в п.4, отвожу за одну стену, а уже за ней делаю разводку согласно техпроцессу.

Поэтому не стоит их тратить на всякие ассемблеры, которые и так можно построить в любом месте, а вот буровую установку - шиш! Так же смотрите пропускную способность конвеерной ленты, которая к ней присоединена, потому что разогнанная буровая, может добывать 1200, а максимальный конвеер, если не изменяет память, может около 900 отводить. Для экономии энергии и избежания пускового тока, имеет смысл подкрутить выработку руды до значений конвеера.

6. Энергоячейки ставьте ТОЛЬКО на добывающие установки, только на них в будущем и будет хватать, хотя нет, катастрофически не хватать!

3. Не нужно в одном месте концентрировать всё производство. Например, катериевые слитки и проволоку можно прямо на месторождении изготавливать, построив мини базу, то же самое и с другими рудами.
4. Конвееры, по возможности, нужно отводить за стену и там уже куда угодно их прокладывать. (если у вас закрытытого типа база, а не под небом). Эстетически это будет смотреться очень аккуратно и скроет некоторые косяки проектирования.
5. Не пытайтесь всё ужать до минимальных размеров, потом это выйдет боком.

Поделюсь некоторыми советами, которые мне бы помогли, когда только начинал игру.
1. Мод на быстрое строительство, без него впустую очень много времени убъёте на постройку площадки и стен. Единственный мод, который реально советую.
2. В цепочке производства, на каждый вид получаемого сырья, ставьте буфер(хранилище). Пример: ПЛАВИЛЬНЯ-хранилище-КОНСТРУКТОР-хранилище-КОНСТРУКТОР. В случае простоя, эти буфера будут заполняться большим количеством ресурсов, которые лишними ни когда не будут!

Ягоды, грибы и орехи тоже бесконечны

Если вы не уничтожили бензопилой или трактором кустик, то он зареспавнится через 3 игровых дня.

На карте есть естественные тропы

По ним очень удобно пускать грузовики. Но иногда их не хватает, иногда они идут далеко в объезд, через ядовитое газовое облако или глубокую воду. Тогда нужно строить свои дороги и мосты из фундаментов. Полезно по бокам их закрывать стенами, чтобы случайно не свалиться вниз.

Консольные команды в Сатисфактори

В Satisfactory нет чит-кодов, но отсутствие читов отчасти компенсируется консольными командами. При помощи консольных команд можно ускорить игровые процессы или сразу получить нужный предмет.

Список консольных команд Satisfactory:

  • /c game.local_player.force.manual_mining_speed_modifier = ваше_число – скорость добычи ресурсов (по умолчанию равняется 1);
  • /c game.local_player.force.manual_crafting_speed_modifier = ваше_число – скорость крафта (по умолчанию равняется 1);
  • /c game.local_player.force.laboratory_speed_modifier = ваше_число – скорость исследований в лаборатории (по умолчанию равняется 1);
  • /c game.local_player.force.research_all_technologies() – заканчивает все активные исследования;
  • /c game.local_player.zoom = 0.ваше_число – меняет зум камеры;
  • /c game.local_player.insert – нужный предмет в нужном количестве появляется в инвентаре;
  • /c game.always_day = true – активирует режим вечного дня;
  • /c game.speed = ваше_число – меняется скорость игры. Параметр меняет абсолютно все игровые механики, в том числе и скорость передвижения персонажа (по умолчанию равняется 1).

У поездов наоборот


Думаю, этих советов хватит, чтобы немного освоиться в Satisfactory. Конечно, этот список полезных подсказок даже близко не претендует на полноту. В любом случае, в таких играх нет единственно верной тактики развития, поэтому всегда найдётся, что обсудить. Так что смелее задавайте свои вопросы (если они у вас есть) и делитесь советами в комментариях.

Как открыть консоль в Сатисфактори

Отдельно включать или активировать консоль в Satisfactory не нужно – достаточно ее открыть. Это делается нажатием кнопки тильда (

Консольные команды Satisfactory – какие есть

Satisfactory – симулятор строительства заводов и промышленной инфраструктуры. Игрок оказывается на незнакомой планете, а его – наладить добычу ресурсов, их переработку и транспортировку. Этакое продолжение знаменитой Factorio.


Перед началом новой игры вам предлагают пропустить обучение

Если вы играете в первый раз, то настоятельно советую его пройти. В ином случае можно пропустить Тир0 и сразу приступить к технологиям Тир1.

Не пересекайте пути

Старайтесь не пересекать автомобильные пути друг с другом, а если это невозможно, то располагайте их подальше от тех мест, где вы чаще всего бываете. Грузовики в автоматическом режиме двигаются вдоль серии чекпоинтов (голубых стрелочек). На расстоянии пары сотен метров это движение упрощается для расчётов, и грузовики по ним телепортируются без проверки на столкновения. А значит столкнуться они могут только вблизи персонажа. Столкнуться и весело улететь на километр из-за багов в физике.

Читайте также: