Іншими мовами: Deutsch English Español 日本語 Русский 简体中文

Мережева гра

From Official Factorio Wiki
Revision as of 13:15, 29 April 2024 by Bilka (talk | contribs) (→‎Налаштування сервера Linux Factorio: fixed link)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
Players colored preview.png

Окрім одноосібної гри, Factorio також підтримує багатокористувацьку гру (також зустрічається "мережева гра", "мультиплеєр"), що дозволяє багатьом гравцям співпрацювати та допомагати один одному, або працювати один проти одного в PvP. На цій сторінці описано, як налаштувати багатокористувацьку гру, як приєднатися до неї, а також функції адміністратора багатокористувацької гри для керування іншими користувачами та сервером. За замовчуванням у багатокористувацьких іграх використовується сценарій CO-OP вільної гри, де всі гравці працюють разом, щоб запустити ракету із супутником у космос. Інші сценарії, включаючи PvP-мапи, можна завантажити з форуму "Maps and Scenarios" (Мапи та сценарії).

Налаштування багатокористувацької гри

Мережева гра

Щоб розпочати багатокористувацьку гру, натисніть кнопку "Мережева гра" в головному меню. Потім виберіть одну з цих опцій для хостингу та гри:

  • Створити нову гру (Host new game): Вкажіть бажаний сценарій, налаштуйте параметри генератора мапи та встановіть видимість сервера. Видимість сервера визначає, як ваша гра буде знаходитися іншим гравцям. Ви можете вибрати один з варіантів:
    • Загальнодоступна (Public): Вашу гру буде додано до списку загальнодоступних ігор.
    • Steam: Вмикає або вимикає функцію "Приєднатися до гри" через Steam.
    • LAN: Ваша гра буде розміщена у вашій локальній мережі.
  • Захостити збережену гру (Host saved game): Виберіть збережену гру зі списку і встановіть видимість сервера, як описано вище.

Щоб приєднатися до вже існуючої гри, виберіть один з цих варіантів:

  • Перегляд публічних ігор (Browse public games): Шукайте та приєднуйтесь до будь-якої публічної гри, яка відповідає вашим критеріям.
  • Переглянути LAN ігри (Browse LAN games): Приєднуйтесь до будь-якої гри, розміщеної у вашій локальній мережі.
  • Підключитися за адресою (Connect to address): Приєднатися до будь-якої гри, ввівши IP-адресу сервера. Ця опція корисна, якщо хост не використовує видимість сервера.

Примітки та поради:

  • Всі гравці повинні використовувати абсолютно однакові версії гри та модифікацій.
  • Сервери Factorio використовують порт 34197. Порт можна змінити у файлі config.ini.
  • Factorio використовує лише UDP. Гра створює власний рівень надійної доставки, побудований на UDP, для вирішення проблем втрати та переупорядкування пакетів.
    • Переконайтеся, що у вашому маршрутизаторі/роутері правильно налаштовано переадресацію портів для порту 34197.
    • Переконайтеся, що ваш маршрутизатор/роутер не рандомізує порт-джерело на пакетах, що виходять з 34197. Деякі маршрутизатори роблять це і потребують додаткового налаштування, щоб запобігти цьому.
    • Переконайтеся, що файрвол чи антивірус не блокує UDP-пакети.
  • Жорстке обмеження на кількість гравців становить 65 535. Однак, практична межа для цього набагато нижча, популярним стрімерам вдавалося збирати трохи більше сотні гравців.

Виділений (dedicated/headless) сервер

Виділений (теж headless) сервер можна запустити за допомогою параметра командного рядка --start-server.Ви можете запустити factorio --help, щоб отримати список всіх аргументів командного рядка, які приймає Factorio.

У консольному режимі:

  • Графіка не ініціалізується (швидший запуск, менше використання пам'яті)
  • Гра запускається негайно і завантажує збереження, задане як параметр до команди
  • На сервері немає жодного персонажа в грі
  • Гра ставиться на паузу, коли немає підключених гравців (хоча це може бути відмінено за допомогою опції no-auto-pause у файлі server-settings.json)
  • Зберігає гру при виході (автозбереження працює як завжди)

Починаючи з версії 0.13 очікується, що після --start-server буде вказано шлях до файлу збереження.

Вам потрібно буде створити файл збереження перед запуском сервера, оскільки виділений сервер ВИМАГАЄ наявності файлу збереження. Це можна легко зробити за допомогою аргументу командного рядка --create. Наприклад:

./bin/x64/factorio --create ./saves/my-save.zip       # Це створить нове збереження, аналогічно до натискання кнопки "Нова гра" у графічному інтерфейсі
./bin/x64/factorio --start-server ./saves/my-save.zip # Це запустить сервер, на якому буде хоститися файл, створений у попередньому рядку

Існує декілька файлів конфігурації JSON, які Factorio може використовувати для зміни налаштувань сервера та мапи:

Приклади файлів для кожного з цих параметрів містяться у підкаталозі data, а також доступні на github Wube тут: https://github.com/wube/factorio-data

Параметри --map-gen-settings та --map-settings слід використовувати разом з параметром --create при створенні нової мапи. Наприклад:

./bin/x64/factorio --create saves/my-save.zip --map-gen-settings my-map-gen-settings.json --map-settings my-map-settings.json

Запуск сервера Факторіо вимагає від вас вказати розташування файлу server-settings.json. За замовчуванням він знаходиться у теці .../data/ factorio. Наприклад, щоб запустити factorio, використовуючи останню збережену мапу, ви повинні запустити:

./bin/x64/factorio --start-server-load-latest --server-settings ./data/server-settings.json

На Windows може бути корисно запустити сервер за допомогою .bat-файлу. Файл .bat повинен мати наступний вміст:

start /wait .\bin\x64\factorio.exe --start-server-load-latest --server-settings .\data\server-settings.json

Докладніше про параметри командного рядка.

Налаштування сервера Linux Factorio

Примітка: Для роботи Factorio тепер потрібно glibc версії 2.18, але CentOS/RHEL 7 постачається лише з версією 2.17, тому цей посібник більше не працюватиме без ручного компілювання glibc до веосії 2.18.

Цей покроковий посібник було перевірено на свіжих дистрибутивах CentOS 7 і RHEL 7, але він може бути застосований до більшості дистрибутивів з невеликими змінами або без них.

Посібник припускає, що ви встановите сервер у /opt/factorio, налаштувавши шляхи відповідно до ваших власних налаштувань. Ми також рекомендуємо запустити сервер Factorio під окремим користувачем, щоб підвищити безпеку ваших налаштувань.

Зауважте, що для Linux існує два різних пакети, які можна використовувати для запуску на виділеному сервері. Перший - це звичайний пакет для Linux, який містить повну версію гри. Інший являється спеціальним серверним варіантом. Він не містить жодних файлів, що не мають відношення до чистого сервера, таких як графіка та звуки. Він також не зв'язаний з бібліотеками, які можуть бути відсутніми на серверній машині, такими як Xlib, libGL або libasound. Цю збірку слід вибрати, якщо сервер Факторіо буде хоститися на сервері в інфраструктурі стороннього провайдера.

У цьому посібнику не розглядається переадресація файрволів/портів, оскільки у Linux це можна зробити різними способами (обов'язково прочитайте, як це робиться в ролі адміністратора Linux у вашому дистрибутиві).

Стандартне встановлення

  • Завантажте вибраний пакет - або повну гру, або серверний варіант - і завантажте пакунок Linux tar.gz або tar.xz в /tmp на вашому сервері
  • Розпакуйте пакунок з /tmp до каталогу /opt/factorio
$cd /opt/

$sudo tar -xzf /tmp/factorio.tar.gz # Використовуйте правильне ім'я файлу. Воно включає номер версії factorio
$sudo tar -xJf /tmp/factorio.tar.xz # якщо ви завантажили файл .tar.xz (версія 0.15.x)
  • Додайте нового користувача до вашої системи і призначте йому право власності (ownership) на каталог factorio (будь ласка, не запускайте від імені користувача root, може знадобитися sudo).
$useradd factorio
$chown -R factorio:factorio /opt/factorio
  • Спробуйте запустити
$su factorio
$/opt/factorio/bin/x64/factorio --start-server ВАШЕЗБЕРЕЖЕННЯ

Якщо викидує помилку, що не може знайти/відкрити файл ВАШЕЗБЕРЕЖЕННЯ.zip, то все готово! Просто завантажте збереження з вашого комп'ютера і покладіть його у каталог /opt/factorio/saves або скористайтеся аргументом --create ./saves/newgame.zip.

Як опублікувати свою мультиплеєрну гру на пошуковому сервері

Для того, щоб опублікувати гру на пошуковому сервері, Factorio потрібно надати більше інформації, ніж просто розташування файлу збереження. Ця інформація міститься у файлі налаштувань сервера (server settings file).

Щоб створити файл налаштувань сервера, подивіться на прикладовий файл, розташований в data/server-settings.example.json в теці Factorio. Рекомендований спосіб - зробити копію цього прикладу і відредагувати її.

Наступні значення можуть бути змінені:

Name
Це буде ім'я, під яким сервер буде перераховано у списку знайдених серверів
Description
Опис вашого сервера. Може містити до 5000 символів. Опис сервера мультиплеєру
Tags
Список тегів гри
Max Players
Дозволяє обмежити кількість гравців, які можуть бути підключені до сервера одночасно. Якщо ви не хочете обмежувати кількість гравців, просто встановіть max_players рівним 0.
  • Видимість для браузера сервера: Може бути публічною, локальною або прихованою (public, LAN, hidden).
    • Публічний: Сервер з'явиться у списку загальнодоступних серверів. Це вимагає заповнення облікових даних для входу, наведених нижче.
    • LAN: сервер не з'явиться у списку публічних серверів, але буде доступний за допомогою кнопки "Грати в локальній мережі".
    • Прихований: гравцям доведеться підключатися, використовуючи IP-адресу сервера
  • Облікові дані користувача: ім'я користувача та пароль або токен автентифікації (можна знайти на сайті factorio або в файлі player-data.json): Ці дані необхідні, якщо ви хочете зробити сервер загальнодоступним. В іншому випадку їх можна залишити порожніми.
    • З міркувань безпеки рекомендується використовувати токен автентифікації, оскільки цей документ зберігається у вигляді простого тексту. Хоча слід зазначити, що токен автентифікації також є конфіденційною інформацією, і вам краще тримати його в таємниці.
  • Пароль сервера
    • Назва поля: game_password
  • Чи перевіряти особу користувача

(У v0.14 factorio з'явилися додаткові значення).

Технічні деталі реалізації

Нотатки про деякі технічні деталі, пов'язані з багатокористувацьким режимом, були опубліковані командою розробників у кількох статтях блогу "П'ятничні факти" (Friday Facts):

DNS SRV записи

Factorio підтримує DNS SRV починаючи з версії 1.1.67.

Це спрощує розміщення декількох серверів Factorio на одному хості і дозволяє користувачам підключатися до них за допомогою різних субдоменів замість того, щоб вводити номери портів.

Назва сервісу _factorio і підтримує тільки протокол _udp.

Приклад:

Domain: wube.software
IP:     192.0.2.2
Port:   34197

DNS records:
srv-target     IN A   192.0.2.2 
_factorio._udp IN SRV 0 0 34197 srv-target.wube.software.

Тепер клієнт Factorio, який підключається до wube.software, фактично підключається до srv-target.wube.software:34197

Прикладовий скріншот:

Screenshot of SRV record settings Cloudflare dashboard.png

Логи:

  • Факторіо збереже в логах повідомлення "DNS SRV lookup returned [...]", коли знайде SRV-запис для даного домену
  • За допомогою розгорнутого логування Factorio також запише "DNS SRV lookup for [domain] didn't return any usable records", якщо не знайдено жодного SRV-запису

Різні поради

  • Клавіша виклику консолі також використовується для ініціювання чату у багатокористувацькому режимі. Щоб виконати команду замість чату, потрібно ввести /c перед командою. Виконані команди видно всім гравцям. Крім того, багатокористувацька гра має бути запущена з дозволеними командами, щоб команди працювали.

Наприклад:

/c game.create_force("Name") - створює фракцію "Name"
  • Встановлення кольору гравця за допомогою команди
/color r g b

r, g і b для червоного, зеленого та синього відповідно (можливі значення від 0 до 1, використовуйте цей сайт для перетворення кольорів у rgb-числа).

  • Щоб надати собі права адміністратора, вам потрібно створити файл server-adminlist.json в тому ж каталозі, що і factorio-current.log. Файл повинен містити список адміністраторів, приблизно так: [ "user1", "user2" ]

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

Приєднання до багатокористувацької гри

Починаючи з версії 0.13, гравцям більше не обов'язково налаштовувати порт-форвард, щоб грати з іншими. Гравці можуть приєднуватися один до одного через Steam або просто через пряме підключення до сервера.

Гравці, які бажають приєднатися до гри, можуть зробити це кількома способами:

  • Приєднатися, безпосередньо ввівши публічну IP-адресу та порт у Factorio.
  • Вибір сервера з меню активних публічних серверів.
  • Приєднатися через сервіси Steam.
  • Приєднатися до гри по локальній мережі.

Приєднання за IP-адресою

Щоб приєднатися до багатокористувацької гри за IP-адресою, вам потрібно знати публічну IP-адресу працюючого сервера. Ви можете знайти його в соціальних мережах, на сайтах або просто від знайомих. Після отримання IP-адреси та порту просто перейдіть у розділ "Гра" -> "Мережева гра" -> "Підключитися до сервера" і заповність всі необхідні поля.

Якщо сервер налаштовано правильно і він приймає публічні з'єднання, ви зможете приєднатися до гри.

Приєднання через список серверів

Розробники Factorio ведуть список всіх публічних серверів, які зголошуються, що дозволяє гравцям приєднуватися безпосередньо через Factorio. Більшість з цих серверів вимагають введення паролю, але можна підключитися і до багатьох повністю публічних серверів. Щоб приєднатися через список серверів, перейдіть у розділ "Гра" -> "Мережева гра" -> "Перегляд публічних ігор". Надайте свій логін на Factorio.com, якщо вас попросять, і з'явиться список загальнодоступних серверів. Просто виберіть один з них.

Приєднання через Steam

Steam надає систему "запрошення до гри", просто скористайтеся нею, щоб приєднатися. Ви можете знайти більше інформації про те, як використовувати Steam у його документації. Це найбільш рекомендований спосіб мережевої гри для більшості гравців, оскільки в цьому випадку майже нічого не треба налаштовувати, Steam бере всі питання на себе.

Приєднання до гри в локальній мережі (LAN)

Якщо у вас є друзі, які підключені до вашої локальної мережі (у тій самій будівлі або мережі), ви можете запустити локальний сервер (LAN). Просто перейдіть у меню Гра -> Мережева гра -> Гра по локальній мережі (LAN).

Підключення до сервера, який знаходиться за NAT

Factorio вимагає, щоб сервер (у режимі клієнт-сервер) мав загальнодоступну (публічну, білу) IP-адресу або щоб усі гравці перебували в одній локальній мережі. Якщо ви перебуваєте за NAT, ви повинні налаштувати переадресацію портів (дивіться номер порту вище) або використовувати програмне забезпечення для віртуальної локальної мережі, таке як Hamachi або Evolve.

Багатокористувацькі ігри запускатимуться у режимі клієнт-сервер (також в режимі multiplayer forwarding). У цьому режимі всі клієнти надсилають свій мережевий трафік на сервер, а сервер пересилає трафік іншим клієнтам. Перевагою цього режиму є те, що він дозволяє грати в ігри, де деякі гравці знаходяться всередині локальної мережі, а інші - зовні. Недоліком може бути дещо більша затримка, оскільки пакети повинні пройти додатковий шлях (через сервер).

PvP

У режимі PvP гравці можуть перебувати в різних фракціях (forces). У кожній фракції може бути один (вільний для всіх) або більше гравців (команди). Кожна фракція має свій власний незалежний розвиток досліджень. Крім того, військові споруди кожної фракції будуть атакувати інших гравців як ворогів, якщо не буде встановлено перемир'я. Зауважте, що, залежно від сценарію, перемир'я може бути одностороннім - встановлення перемир'я з протилежною фракцією не гарантує припинення вогню з її боку у відповідь.

Щоб розпочати PvP-гру, ви можете вибрати сценарій "PvP" в меню або завантажити власний сценарій, який також підтримує PvP.

Після завантаження PvP-сценарію вам потрібно перемістити його в каталог Факторіо і створити багатокористувацьку гру, використовуючи сценарій.

  1. Завантажте сценарій і помістіть каталог сценарію в каталог scenarios у вашому каталозі даних користувача.
  2. Запустіть Factorio
  3. Натисніть Грати
  4. Натисніть Мережева гра
  5. Натисніть Сценарії
  6. Виберіть потрібний вам PvP-сценарій і натисніть Створити
  7. Виберіть затримку та інші налаштування, а потім натисніть Почати
  8. Тепер інші гравці можуть приєднатися до гри

Фракції

Фракції можна створювати вручну через консоль. Це дозволяє використовувати для PvP будь-яку карту/сценарій. Це може бути не так зручно, як заздалегідь створений сценарій PvP, оскільки гравці не зможуть вмикати/вимикати перемир'я, окрім як через консоль.

Кожна створена фракція має свій власний незалежний розвиток досліджень, і різні фракції можуть нападати одна на одну.

Нижче наведено консольні команди для створення та управління військами, не забувайте додавати /c перед командами:

game.create_force("Name")
В консолі гри: /c game.create_force("Name")
--Створює фракцію "Name" 

game.players["Player_name"].force = game.forces["Name"]
--Приєднує цього гравця до нової фракції "Name"

game.forces["Name"].set_cease_fire("Other_force_name", true)
--Встановлює перемир'я фракції "Name" з іншою фракцією "Other_force_name"

game.forces["Name"].set_spawn_position({x = 10, y = 20}, game.surfaces[1])
--Задає позицію спавну для фракції "Name"

game.print(#game.forces)
--Виводить кількість фракцій в консолі

for name, force in pairs (game.forces) do
   game.print(name)
end
--Виводить назви всіх фракцій в консолі

Здатність гравців та об'єктів, що належать до однієї фракції, взаємодіяти зі структурами, що належать до іншої, недружньої фракції, обмежена. Однак деякі види взаємодії все ж можливі:

Ручне збирання з конвеєрів
Гравці можуть підбирати предмети, що їдуть конвеєром, який належить протилежній стороні. Зауважте, однак, що це не може бути автоматизовано: Маніпулятори не будуть "забирати" предмети з конвеєрів протилежної сторони.
Підключення до транспортної мережі
Конвеєри з'єднуються один з одним незалежно від приналежності до фракції, тому можна добудувати свій конвеєр до конвеєра протилежної фракції, і предмети поїдуть на добудовані конвеєри. Також можна завантажувати збоку і розміщувати предмети на конвеєри протилежної фракції (за допомогою маніпуляторів).
Підключення до рідинної мережі
Труби (і резервуари, і помпи, і т.д.) будуть з'єднуватися один з одним незалежно від приналежності до фракцій. Наприклад, можна перекачувати рідини з або в резервуар для зберігання, що належить протилежній фракції.
Викачування енергії
Гравці можуть отримувати енергію з електричної мережі протилежної фракції, будуючи споруди в зоні дії стовпа електропередач, що належить протилежній фракції. Електроопори, які ви побудуєте поруч з електроопорою протилежної фракції, автоматично з'єднаються з нею, але їх неможливо буде з'єднати або роз'єднати вручну.

Історія

Історія розробки

Через потенційно величезну кількість активностей на карті, ігровий рушій використовує lock step architecture. Всі екземпляри гри виконують повну симуляцію всього світу, і лише дії гравців передаються через мережу.

Багатокористувацькі ігри з'явилися у Factorio у версії 0.11.0. Єдиним доступним способом з'єднання був одноранговий (peer-to-peer, P2P) режим, що означало, що кожен гравець повинен був мати можливість безпосередньо спілкуватися з кожним іншим гравцем. У версії 0.12.4 було запроваджено клієнт-серверний режим зв'язку, в якому сервер (або виділений, або гравець, який організував гру) передає повідомлення всім гравцям. Це означає, що пряме з'єднання між усіма гравцями більше не потрібне. Починаючи з версії 0.13, P2P-з'єднання повністю вилучено.

Починаючи з версії 0.12.0, гра має механіку "приховування затримок", коли гра імітує деякі дії гравця локально, щоб зробити деякі загальні взаємодії (наприклад, переміщення персонажа гравця) більш плавними. Не кожна дія є частиною латентного приховування - зокрема, водіння автомобіля чи поїзда та стрільба не є його частиною.

Історія версій

Примітка автора оригінальної статті: Наведена нижче історія може бути не повністю актуальною або вичерпною. Мультиплеєр Factorio зазнав великої кількості невеликих змін з моменту свого створення, проте ця історія дасть приблизний огляд. Примітка перекладу: через наведену вище причину вважаю переклад історії версій не дуже доцільним. Якщо ж таки тебе дууууже зацікавив цей розділ, то його актуальну версію завжди можна знайти тут.