На других языках: Deutsch English Español 日本語 Українська 简体中文

Сетевая игра

From Official Factorio Wiki
Revision as of 13:01, 3 May 2016 by Nicodinus (talk | contribs) (Перевод 1ой части данной статьи. Чуть позже займусь переводом всего остального. Так же переделаю гайд Linux headless под Debian.)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search


Сам мультиплеер появился в 0.11.x версии игры и до сих пор (0.12.32) он играбелен только в сетях, с низкой задержкой (LAN). Т.е. игра между игроком из Москвы и игроком из Владивостока будет по крайней мере не очень приятной, т.к. игра принимает скорость (тик-тайм) для всех исходя из наиболее большой задержки между игроками. Во всяком случае с 0.12.0 версии появилась функция "скрытия задержки", что позволило игре быть более плавной, без сильных скачков тик-тайма.

В данное время мультиплеер в игре работает по схеме p2p (клиент-клиент), что означает отсутствие необходимости в сервере, хотя и присутствует сборка игры, без графического функционала (headless).

Для любых серьёзных функций (сохранение, заход в игру и т.д.) игра останавливается, чтобы синхронизироваться между всеми игроками. Это означает, что если какой-нибудь из игроков имеет настройку автосохранение раз в 1 минуту, то у всех игроков, даже у тех, кого эта настройка выключена, игра будет сохранятся раз в минуту.

Любой игрок может зайти в существующую игру по известному ему IP адресу и порту. Когда игрок подключается к игре, игра ставиться на паузу автоматическии, и игрок получает карту. В случае, если хост игры закончит играть, то остальные игроки могут продолжить играть ([не проверено] в одиночной игре) не прерывая игру.

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


Игра через LAN / Интернет

Игра через интернет не гарантируется в 0.11.x версии игры. Количество лагов в игре зависят от скорости соединения и задержек между всеми игроками. С 0.12.x версии стало более комфортно играть через интернет, т.к. появилась функция "скрытия задержки", но она по прежнему не идеальна из-за схемы p2p, где принимается наихудшее соединение из игроков для всех.

  • Все игроки должны иметь одинаковые версии игры и модов.
  • Желательно всем игрокам, кроме хоста выключить автосохранение.
  • По умолчанию factorio использует порт 34197. Порт можно изменить тут - config.
  • Factorio использует протокол UDP, так что убедитесь, что ваш роутер сконфигурирован корректно.
    • В игре реализован свой протокол доставки пакетов, построенный на UDP протоколе, для уменьшения потерь пакетов и проблем с порядком доставки пакетов
    • Убедитесь, что у вас правильно сконфигурирован firewall и ваше антивирусное ПО не блокирует UDP пакеты.
    • Хосту игры обязательно иметь белый (видно из интернета) IP адрес, чтобы другие игроки могли подключиться к вам.
    • Так же можно использовать различные ПО, предоставляющее VPN туннели, между игроками. В таком случае ваша сеть превращается в LAN over Internet, что не убирает проблему задержек, но убирает проблему с NAT'ом. Невозможность игры при 3+ игроков одновременно.
  • Теоретический лимит игроков равен 65535. :)

Голосовой Чат

  • Рекомендуется использовать TeamSpeak, Skype, RaidCall, Discord, т.к. в игре желательно активное координация действий (постройка, отражение атак и т.д.). Сервера TeamSpeak можно найти на форуме.

Поиск игроков

  • Можно поискать игроков на форуме или в вашей любимой соцсети, к примеру Facebook или VK.
  • Большинство игроков не имеют белый IP адрес и активно используют различное ПО, предоставляющее VPN туннели, между игроками, к примеру Hamachi или Evolve.
  • Так же можно поискать в Steam

Сервер factorio или почему p2p

Уже довольно много было дискуссий на тему, почему игра не использует клиент-сервер модель. Решено было оставить модель клиент-клиент.

Правда с 0.12.x версии появилась сборка headless, которая эмулирует поведение сервера, но по прежнему им не является, а просто становится хостом игры.

Немного ссылок:

Dedicated/Headless сервер

This article contains content on features that are included in 0.12.X, an "experimental release" of the game that is not considered as "stable release" by the developers yet.

С 0.12.0 версии headless/dedicated сервер может быть запущен из командной строки, с опцией '--start-server ВАШМИР.zip'.

В этом режиме:

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

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

Чуть ниже расположена инструкция для запуска сервера на Windows или Linux

Windows

  • Создайте мир в обычной игре, если у вас его ещё нет. Сохраните его и запомните его название.
  • Откройте папку установки factorio
    • Если у вас Steam версия игры, то:
      • Откройте Steam и выберите factorio
      • нажмите на неё правой кнопкой мыши и выберите пункт 'Cвойства'
      • Далее выберите вкладку 'ЛОКАЛЬНЫЕ ФАЙЛЫ'
      • И наконец нажмите на кнопку ПРОСМОТРЕТЬ ЛОКАЛЬНЫЕ ФАЙЛЫ
      • Перейдите в папку bin/x64 или bin/x32
    • Если у вас не Steam версия, то:
      • Откройте папку установки игры.
      • Для x64 систем по умолчанию 'C:\Program Files\Factorio\bin\x64\'
      • Для x32 систем по умолчанию 'C:\Program Files\Factorio\bin\x32\'
  • Создайте текстовый файл и откройте его для редактирования Notepad'ом
  • Скопируйте в него следующее, без кавычек: 'Factorio.exe --start-server ВАШЕСОХРАНЕНИЕ.zip'
  • Замените 'ВАШЕСОХРАНЕНИЕ' на ваше название мира
  • Сохраните файл, назвав его server.bat. ВАЖНО: При сохранении выберите тип файла 'Все файлы'.
  • Используйте server.bat, чтобы запустить сервер.
  • Чтобы закрыть сервер, используйте сочетание клавиш Ctrl+C. Только этим способом вы завершите сервер нормально и он сохранит игру перед завершением.


Linux

This step-by-step guide has been verified on fresh CentOS 7 and RHEL 7 installs but should be applicable with little to no changes on most distribution.

The guide assumes you will install the headless server under /opt/factorio, adjust paths according to your own setup. We will also suggest that you run the Factorio server as a separate user to harden security of your setup.

This guide does not handle firewall/port forwarding since this can be done in various ways on Linux (make sure to read up how this is done as a Linux admin on your particular distribution)

You can use the Linux factorio-init script to start/stop your headless server in a much better way. The script will ensure you only ever use the most recent save when your server starts (even if that was an auto-save) while also letting you set a number of other settings like Autosave frequency and Latency settings. This script will also simplify updating the server when combined with the Linux factorio-updater script.

  • Download the at least v 0.12.0 Experimental Version and upload the linux tar.gz package to your server /tmp
  • Extract the package to /opt/factorio
#cd /opt/
#tar -xzf /tmp/factorio.tar.gz
  • Check the binary to find if you need any libs installed
#ldd /opt/factorio/bin/x64/factorio
        libasound.so.2 => not found
        libX11.so.6 => not found
        truncated ....

  • Install each of the missing libs, i.e the ones labelled "not found" using your distro's package handler
    • It will ask to install graphics and audio libraries as well, but will not use them in headless mode.
# yum whatprovides libasound.so.2
alsa-lib-1.0.28-2.el7.i686 : The Advanced Linux Sound Architecture (ALSA) library
Repo        : base
Matched from:
Provides    : libasound.so.2

# yum install alsa-lib libX11 <and all other "not found" libs in your case
  • Add a new user to your system and assign ownership of the Factorio dir to it (please, do not run as the root user)
#useradd factorio
#chown -R factorio:factorio /opt/factorio
  • Try the binary
#su factorio
#/opt/factorio/bin/x64/factorio --start-server savename

As long as it fails saying it cannot find/open the savename.zip you are set! Just upload a save from your own computer and put it in the /opt/factorio/saves directory

Dedicated/Headless server in version 0.11.X

It was still possible to achieve a Dedicated server in version 0.11.X, but it required some workarounds.

Workarounds in version 0.11.x:


Game types

Coop

Coop-game runs without any further preparation ( https://forums.factorio.com/viewtopic.php?f=53&t=6501 )

PvP

Forces

You can now set up forces. See this https://forums.factorio.com/viewtopic.php?f=3&t=13512&start=80#p92087

game.create_force('force 1')
Creates a force with name "force 1", default forces are "player", "enemy", "neutral"
"player" is the default force for players
"enemy" is force of biters
"neutral" is special, its not attacked, can use all other forces, can be used by all other forces
game.get_player('friend 1').force = game.forces['force 1']
Changes the force of "friend 1" to "force 1"
game.forces['force 1'].set_cease_fire('force 2', true)
makes "force 1" to cease fire against "force 2", reverse has to be done separately
for v in pairs(game.forces) do game.local_player.print(v) end
list all existing forces

Technical Implementation

More Tools/Infos

And always remember that Factorio in v0.11 isn't intended to work well on internet connections, so keep patient. ;)

More Guides

Miscellaneous tips

  • the key for Console commands will now initiate a chat in MP. To execute commands you need to type '/c' before the command!
  • Set the player's color using the command
/c game.players[x].color = {r=0.7, g=0.5, b=0.1, a=0.9}

Where x is the player number. r, g and b are for red, green and blue respectively (possible values are between 0 and 1, use the right-most column on http://prideout.net/archive/colors.php). a is alpha channel aka Transparency of the color to the base texture. For single player, leave off the "[x]" to set the color.

Software for routing / establishing connection