RE:NODE

Руководства13 мин чтения

Сервер Terraria и tModLoader: установка, конфиг и моды

Ванильный сервер Terraria крошечный, tModLoader - нет. Реальные цифры памяти, все ключи serverconfig.txt, TCP 7777, консольные команды и безопасные миры.

Обновлено

1 прочтений

Ванильный сервер Terraria - одна из самых лёгких вещей, которые можно запустить: большой мир с восемью игроками спокойно умещается в гигабайт, использует один TCP-порт и не требует регистрации в списке серверов. tModLoader - совсем другой зверь, потому что каждый мод загружается в один и тот же процесс, а некоторые из них ведут себя нескромно. Списку размера Calamity нужно 4 ГБ, причём большую часть из них он требует во время генерации мира, а не во время игры, и поэтому первый мир, который люди создают на слишком маленьком тарифе, - это тот, что не создаётся. Это руководство охватывает оба варианта: установку каждого, все настройки serverconfig.txt, которые стоит менять, консольные команды, то, как моды сопоставляются между сервером и клиентом, и как не потерять мир, живущий в одном файле.

Vanilla, tModLoader или TShock: какой сервер вы запускаете#

Под словами «сервер Terraria» скрываются три разные программы, и они не взаимозаменяемы.

  • Ванильный выделенный сервер поставляется вместе с игрой. Это TerrariaServer.exe на Windows и TerrariaServer.bin.x86_64 на Linux, и отдельного бесплатного приложения в Steam для него нет: его копируют из собственной установки игры или скачивают пакет Dedicated Server со страницы официальных релизов terraria.org. Он запускает немодифицированные миры и немодифицированных клиентов.
  • tModLoader - это бесплатное отдельное приложение (Steam app id 1281930, также публикуется в релизах на GitHub), которое оборачивает игру и загружает файлы .tmod. Его сервер - это start-tModLoaderServer.sh или соответствующий .bat. Клиенты тоже должны запускать tModLoader, той же версии.
  • TShock заменяет ванильный сервер таким, который добавляет группы и права, защиту регионов, серверные персонажи, базу данных и большой набор команд. Игроки по-прежнему запускают немодифицированную Terraria, и в этом его главная привлекательность. Моды tModLoader он не загружает, поэтому выбирать нужно что-то одно.

tModLoader привязан к конкретной версии Terraria, а мод, собранный под один релиз tModLoader, не загрузится на другом. Эта жёсткая привязка к версии - корень большинства проблем tModLoader, и поэтому сервер стоит закрепить на одной версии, а не брать каждое обновление в день выхода.

Требования и потребление ресурсов#

Рассчитывайте на генерацию мира, а не на установившийся режим.

КонфигурацияRAMCPUДиск
Vanilla, малый или средний мир, 2-4 игрока512 МБ - 1 ГБ0,5 ядра5 ГБ
Vanilla, большой мир, 8-16 игроков1-2 ГБ1 ядро10 ГБ
tModLoader, несколько модов для удобства2-3 ГБ1 ядро15 ГБ
tModLoader, Calamity и обычные спутники4 ГБ1-1,5 ядра20 ГБ
tModLoader, большой контентный пак с генерируемыми структурами6 ГБ на пике1,5-2 ядра30 ГБ
  • Пик - это генерация мира. Большой мир с модами строится в памяти, а потом записывается, и этот момент - высшая точка за всю жизнь сервера. Тариф, на котором готовый мир работает прекрасно, всё равно может не потянуть его создание.
  • CPU: обновление мира идёт в одном потоке. Важна тактовая частота, число ядер почти не влияет. Ванильный сервер не потревожит и половину ядра; тяжёлый список модов с сотнями своих NPC займёт целое.
  • Диск: сам ванильный сервер крошечный. Файл большого мира - десятки мегабайт; tModLoader добавляет рядом второй файл с данными модов, который может быть больше самого мира. Ни то ни другое не повод покупать диск, а вот ротируемый набор backup обоих файлов - повод.
  • Сеть: скромная, и в основном уходит на секции мира. Terraria передаёт тайлы вокруг каждого игрока при первом посещении области, поэтому восемь игроков, разбросанных по большому миру, обходятся намного дороже, чем восемь игроков в одной базе.

Установка и запуск ванильного сервера#

На Linux, из распакованного пакета Dedicated Server:

bash
$ cd /home/terraria/server/Linux$ chmod +x TerrariaServer.bin.x86_64$ ./TerrariaServer.bin.x86_64 -config serverconfig.txt

Без -config сервер задаёт вопросы в интерактивном режиме: какой мир или какого размера и сложности создать, затем порт, максимальное число игроков и пароль. Один раз такой путь вполне годится. Для всего, что вы будете перезапускать, используйте файл конфигурации, потому что сервер, остановившийся с неотвеченным запросом, не поднимется сам.

Лобби Steam тоже поддерживаются: -steam и -lobby friends или -lobby private позволяют заходить через список друзей Steam, а не по адресу. На арендованном сервере вам почти всегда нужен обычный путь по адресу.

serverconfig.txt: настройки, которые важны#

serverconfig.txt - это одна пара key=value на строку, комментарий начинается с #. Файл, поставляемый с сервером, уже документирован; вот строки, которые меняют поведение.

serverconfig.txt
world=/home/terraria/.local/share/Terraria/Worlds/Midgard.wldworldpath=/home/terraria/.local/share/Terraria/Worlds/autocreate=3worldname=Midgarddifficulty=1seed=maxplayers=10port=7777password=herring-barrelmotd=Welcome. Rules are in the Discord.banlist=banlist.txtsecure=1language=en/USupnp=0npcstream=60priority=1
КлючПо умолчаниюЧто делает
world-Полный путь к загружаемому .wld. Приоритетнее autocreate
worldpathпо умолчанию для платформыГде хранятся и создаются миры
autocreate-1 малый, 2 средний, 3 большой. Используется, только если world отсутствует
worldnameWorldНазвание создаваемого мира
difficulty00 classic, 1 expert, 2 master, 3 journey
seedслучайныйСид мира, включая особые сиды
maxplayers8Жёсткий максимум - 255. Играбельный - совсем не столько
port7777TCP, и единственный порт, который нужен серверу
passwordпустоПароль для входа
motd-Печатается каждому игроку при входе
banlistbanlist.txtФайл забаненных игроков
secure0Дополнительная защита от читов. Включите
upnp1Проброс порта на домашнем роутере. На арендованном сервере поставьте 0
npcstream60Меньше значение - меньше пропусков врагов и больше трафика
priority1Приоритет процесса, от 0 realtime до 5 idle

На двух из них люди спотыкаются. world и autocreate по действию взаимоисключающи: если world указывает на существующий файл, этот мир загружается, а autocreate игнорируется; если на несуществующий, сервер создаёт мир размера autocreate с именем worldname, и именно так группа молча оказывается на совершенно новой карте после опечатки в пути. И difficulty в этом файле - это сложность мира: в мирах режима journey могут играть только персонажи journey, поэтому сервер с difficulty=3 отсекает всех с их существующими персонажами.

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

Порты и подключение#

ПортПротоколНазначение
7777TCPВсё

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

Нет также ни списка серверов, ни query-порта. Игроки открывают Multiplayer, затем Join via IP и вводят адрес и порт. Это и есть весь механизм обнаружения, так что адрес вы раздаёте, а не его находят. Если вы хотите раздавать имя, а не число, запись A разобрана в статье как подключить домен к игровому серверу, и Terraria - один из самых простых случаев, потому что порт фиксирован и виден.

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

Консольные команды#

Консоль сервера принимает короткий список команд, которые вводятся прямо в работающий процесс:

КомандаЧто делает
helpВыводит список команд
playingПодключённые игроки
say <text>Сказать от имени сервера
motdВывести текущее сообщение дня
password <text>Сменить пароль для входа на лету
kick <player>Отключить игрока
ban <player>Отключить и добавить в список банов
saveНемедленно записать мир
exitСохранить и выключить
exit-nosaveВыключить без сохранения
settleПринудительно успокоить все жидкости
time, dawn, noon, dusk, midnightПрочитать и задать время
seedВывести сид мира

settle стоит запомнить. Большая затопленная область с движущейся водой - одна из немногих вещей, которые действительно тормозят сервер Terraria, а успокоение жидкостей мгновенно. exit-nosave стоит опасаться: он делает ровно то, что написано, и подтверждения нет.

Сервер автосохраняется примерно раз в десять минут и при чистом exit. Всё, что убивает процесс иначе - остановка из-за нехватки памяти, перезагрузка хоста, кнопка Kill в панели, - теряет всё, что произошло после последней записи.

tModLoader на выделенном сервере#

Установите tModLoader из релиза на GitHub или из Steam, затем запускайте скрипт сервера, а не бинарный файл игры:

bash
$ cd /home/terraria/tmodloader$ ./start-tModLoaderServer.sh -config serverconfig.txt

Моды - это файлы .tmod. На сервере они лежат в папке Mods внутри каталога сохранений tModLoader рядом с enabled.json, где перечислены внутренние имена тех, что нужно загружать:

Mods/enabled.json
[  "CalamityMod",  "CalamityModMusic",  "MagicStorage",  "BossChecklist",  "RecipeBrowser"]

Внутреннее имя - это не отображаемое имя. Это имя папки мода внутри .tmod, и ошибка в нём означает, что мод тихо не загрузится, а не вызовет ошибку. Надёжный способ не ошибиться - один раз включить моды в локальном клиенте tModLoader, а затем скопировать enabled.json и папку Mods этого клиента на сервер по SFTP; подробности подключения есть в статье SFTP и файловый менеджер.

Каждый мод объявляет, к какой стороне он относится, и именно это решает, кому что нужно устанавливать:

  • Both - по умолчанию. Нужен и серверу, и каждому клиенту, той же версии. Контентные моды, моды боссов, всё, что меняет игру.
  • Client - моды интерфейса и удобства. Сервер их не имеет и о них не заботится.
  • Server - работает только на сервере; клиентам ничего не нужно.
  • NoSync - можно загрузить с любой стороны, и он вообще не проверяется.

tModLoader предлагает подключающимся клиентам скачать синхронизируемые моды сервера, и это снимает большую часть неудобства «сначала установите этот список». Проблему версий оно не снимает: клиент, у которого уже есть другая версия мода, должен обновиться или откатиться до нужной, и сообщение, которое он видит, не всегда это ясно объясняет.

Миры, сохранения и привычка делать backup#

Ванильный мир - это один файл: Midgard.wld, а рядом Midgard.wld.bak с предыдущим сохранением. tModLoader добавляет Midgard.twld для данных модов и Midgard.twld.bak. Оба файла принадлежат друг другу: .wld, восстановленный без парного .twld, загружается как мир, из которого исчезли все модовые предметы и тайлы.

ПлатформаВанильные мирыМиры tModLoader
WindowsDocuments\My Games\Terraria\Worlds\...\Terraria\tModLoader\Worlds\
Linux~/.local/share/Terraria/Worlds/~/.local/share/Terraria/tModLoader/Worlds/

Из-за того, что весь мир - один файл, backup делаются тривиально, и потерять его так же тривиально. Файл .bak - это не backup: это предыдущее сохранение на том же диске, перезаписываемое каждые десять минут. Настоящий backup - это копия в другом месте, по расписанию, которую вы хотя бы раз восстанавливали: довод лучше, чем ещё один абзац здесь, приведён в статье бэкапы, которые действительно восстанавливаются, а десять минут, которые это доказывают, описаны в статье проверка восстановления до того, как оно понадобится.

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

На RE:NODE тарифы Terraria включают два слота backup, панель делает их по запросу или по расписанию, а восстановление - это кнопка, а не тикет. Вкладка Schedules также может выполнить команду save перед задачей backup, и это стоит сделать: backup, снятый в середине интервала, - это backup последнего сохранения, а не текущего момента.

Производительность и что на самом деле вызывает лаги#

Terraria редко упирается в CPU. Когда это случается, почти всегда причина одна из четырёх:

  1. Несмирившиеся жидкости. Большой проект с перекачкой или затоплением держит в обновлении тысячи тайлов. settle исправляет это за секунды.
  2. Предметы на земле. Тысячи выпавших с фермы предметов - каждый это сущность, которую нужно синхронизировать. Со временем они исчезают; перезапуск очищает их мгновенно.
  3. Проводка и фермы статуй. Таймеры, срабатывающие сотни раз в секунду в большом механизме, отнимают реальное время у потока мира.
  4. Конкретный мод. В tModLoader ответ на вопрос «сервер стал медленным после вторника» - это мод, который вы добавили во вторник. Убирайте по одному.

А вот число игроков обычно не причина. Движок Terraria справляется с гораздо большим числом игроков, чем игра рассчитана на удовольствие; практический потолок социальный и связан с общим миром, а не технический. Общий вариант этого вопроса разобран в статье сколько игроков помещается на сервер. Если вы всё же поднимаете maxplayers выше стандартных восьми, поднимайте вместе с ним память, а не надейтесь.

Устранение неполадок#

Сервер создал новый мир вместо загрузки нашего. Путь world неверен, или имя файла не совпадает точно, включая регистр. Исходный .wld лежит там, где лежал; исправьте путь и перезапустите.

Игроки не могут подключиться, хотя сервер работает. Порт 7777 открыт для UDP, а не для TCP, или upnp=1 на арендованном сервере всё запутал. Поставьте upnp=0.

«You do not have the same mods as the server». Несовпадение версий, а не отсутствие мода. Сначала сравните версию tModLoader, затем версию каждого мода. Именно такой результат даёт мод, обновлённый у одного игрока и не у остальных.

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

Модовые предметы пропали из всех сундуков. Мод был удалён, или .twld потерян, а .wld уцелел. Восстановите оба файла вместе из состояния до изменения.

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

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

FAQ#

Сколько RAM нужно серверу Terraria?

Гигабайта достаточно для ванильного сервера с большим миром и полной компанией. Вопрос в tModLoader: два-три гигабайта для лёгкого списка модов, четыре для размера Calamity и шесть, если пак генерирует собственные структуры, потому что создание мира даёт пик далеко выше рабочего значения.

Нужно ли игрокам устанавливать моды перед подключением к серверу tModLoader?

Обычно нет. tModLoader предлагает подключающемуся клиенту скачать синхронизируемые моды сервера. Но им нужен сам tModLoader той же версии, а клиент, у которого уже есть другая версия одного из этих модов, должен её заменить, а не докачивать поверх.

Могут ли игроки с консолей или мобильных устройств подключиться к серверу Terraria для ПК?

Нет. Консольная и мобильная версии образуют собственную многопользовательскую экосистему и не могут подключиться к выделенному серверу для ПК. Режима кроссплея, который можно включить, не существует.

TShock лучше ванильного сервера?

Для публичного сервера - да: он добавляет права, защиту регионов и серверных персонажей, а это единственный настоящий ответ на тех, кто приходит с дублированным снаряжением. Для частной группы на модах - нет, потому что TShock не запускает моды tModLoader.

Почему мир сбрасывается при каждом перезапуске?

Он не сбрасывается: вы загружаете другой мир. Либо world указывает на несуществующий путь, и autocreate строит новый мир каждый раз, либо worldpath отличается от места, где на самом деле лежит нужный вам мир.

Сколько игроков вмещает сервер Terraria?

maxplayers принимает до 255, и ничто в игре не рассчитано на такое число. Шестнадцать - это оживлённый сервер, восемь по умолчанию не случайно, а после примерно двадцати пяти общий мир теряет смысл задолго до того, как процесс начнёт испытывать трудности.


Комментарии

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

0/2000