Сетевая игра
Сам мультиплеер появился в 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\'
- Если у вас Steam версия игры, то:
- Создайте текстовый файл и откройте его для редактирования 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:
- Linux Headless server / VNC: https://forums.factorio.com/viewtopic.php?f=53&t=6449
- Dedicated Multiplayer Server Guide
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
- use mods for planning. See basic planner, Planning-Tool-Mod...
- look into multiplayer forum, most other questions are answered there.
- Cookbook for setting up a headless server
And always remember that Factorio in v0.11 isn't intended to work well on internet connections, so keep patient. ;)
More Guides
- How to set up Factorio server with cookbook
- How To set up a Factorio Multiplayer Server | Guide | Tutorial, by Teaspoon
- Tips to connect in multiplayer, by Nondre
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.