TShock - это замена серверу Terraria, которая оставляет игру для игроков неизменной и добавляет то, чего нет у ванильного сервера: аккаунты, группы с правами, защищённые регионы, баны предметов и снарядов, баны, переживающие смену имени, серверных персонажей, плагины и REST-интерфейс. Вы устанавливаете его вместо TerrariaServer, получаете права владельца одноразовым setup-кодом, создаёте свой аккаунт в группе owner, а затем выстраиваете лестницу групп под то, насколько вы доверяете каждой категории игроков. Его единственная настоящая цена - его нужно пересобирать под каждый релиз Terraria, поэтому он отстаёт от каждого обновления на дни или недели. В этом руководстве подробно разобраны установка, аккаунты, группы и права, а затем регионы, баны, серверные персонажи, плагины и файл конфигурации.
Если вы ещё не выбрали между ванильным сервером, tModLoader и TShock, сравнение всех трёх - в статье Настройка сервера Terraria и tModLoader. Ванильный serverconfig.txt и консольные команды описаны в статье Конфиг и команды сервера Terraria; здесь речь обо всём, что TShock добавляет сверху.
Что такое TShock и чего он не умеет#
TShock построен на OTAPI - пропатченной копии официального сервера Terraria с открытыми хуками - и работает на .NET. Клиенты подключаются к нему обычной, немодифицированной игрой. С точки зрения игрока это сервер Terraria, который отвечает на слэш-команды и время от времени сообщает, что ломать этот блок нельзя.
Что он добавляет:
- Аккаунты. Игроки регистрируют пароль и входят в аккаунт, так что личность - это не просто имя персонажа, которое может скопировать кто угодно.
- Группы и права. Каждый аккаунт состоит в группе; каждой команде и многим действиям нужно право.
- Регионы. Защищённые прямоугольники, где строить могут только разрешённые пользователи или группы.
- Проверки против гриферства и читов. Ограничения на скорость разрушения и установки блоков, потолки урона, проверки дальности и баны на конкретные предметы и снаряды.
- Серверные персонажи. Необязательное хранение инвентарей на сервере.
- Плагины на C#, которые загружаются из
ServerPlugins. - REST API для удалённого администрирования и веб-панелей.
Чего он не умеет: запускать моды tModLoader. TShock и tModLoader - два отдельных пропатченных сервера, и сервер с Calamity и компанией не может одновременно быть сервером TShock. Если вам нужны контентные моды, читайте статью Сервер Terraria с модом Calamity. Кроме того, TShock не может опережать игру: клиент, обновившийся до новой версии Terraria, не сможет зайти, пока не выйдет соответствующий релиз TShock.
Установка и первый запуск#
TShock распространяется архивами на странице релизов в GitHub, собранными под каждую платформу и версию Terraria, - файл называется примерно TShock-5.x-for-Terraria-1.4.4.9-linux-x64-Release.zip. Версия в имени - это версия Terraria, которую он принимает. Скачайте ту, что совпадает с версией игры у ваших игроков, распакуйте и запустите бинарник сервера.
$ mkdir -p ~/tshock && cd ~/tshock$ unzip TShock-*-linux-x64-Release.zip$ lsTShock.Server ServerPlugins/ ...$ ./TShock.Server -port 7777 -maxplayers 16 \ -world ~/tshock/worlds/Blossom.wld -autocreate 2 -worldname BlossomСвежие релизы для Linux самодостаточны, то есть среда выполнения .NET лежит внутри архива; старые ожидали, что она установлена отдельно. Сверьтесь с примечаниями к релизу той версии, которую скачиваете.
Ванильные аргументы запуска по-прежнему работают - -port, -maxplayers, -world, -autocreate (1 маленький, 2 средний, 3 большой) и -worldname. При первом запуске TShock создаёт рядом с бинарником собственную папку:
tshock/ config.json TShock's own settings sscconfig.json server-side character settings motd.txt the message shown on join setup-code.txt one-time ownership code tshock.sqlite accounts, groups, bans, regions, warps logs/ one log file per startServerPlugins/ plugin .dll filesГлавный из этих файлов - tshock.sqlite. В нём хранятся все аккаунты, изменения групп, баны, регионы и варпы. Делайте его резервную копию вместе с миром: мир, восстановленный без своей базы, получит регионы, которые больше не совпадают с постройками, и пропавшие баны.
На хостинге с панелью сначала проверьте, что на самом деле запускает сервер Terraria, прежде чем что-то заменять: если это уже TShock, консоль при запуске выводит его баннер с версией. Команда запуска в панели - часть конфигурации сервера, так что если ваш сервер ванильный, спросите поддержку о запуске TShock, а не загружайте новый бинарник поверх старого.
Как получить права владельца: setup-код#
При первом запуске TShock без аккаунта владельца он выводит в консоль setup-код и записывает его в tshock/setup-code.txt. Этот код делает того, кто им воспользуется, временным суперадмином. Зайдите на сервер обычным клиентом и выполните по порядку:
/setup 12345678/user add yourname a-long-password owner/login yourname a-long-password/setupПервая строка даёт временные права суперадмина. Вторая создаёт постоянный аккаунт в группе owner. Третья выполняет вход в него. Последняя строка, /setup без аргументов, завершает режим настройки, и код перестаёт работать.
Выполните все четыре команды за один раз. Сервер, оставленный в режиме настройки с действующим кодом, может захватить любой, кто прочитает консоль или угадает код. Если позже вы потеряете доступ к аккаунту владельца, путь восстановления - удалить setup-code.txt и аккаунты владельцев из базы, поэтому храните пароль владельца в надёжном месте.
Сама консоль сервера всегда имеет полные права. Всё, что вы набрали бы в игре, можно набрать в консоли панели, - это самый простой способ администрировать сервер, на котором вы не играете.
Аккаунты и вход
Игроки создают аккаунты сами:
| Команда | Что делает |
|---|---|
/register <password> | Создаёт аккаунт с именем персонажа |
/login <password> | Входит в аккаунт, совпадающий с именем персонажа |
/login <user> <password> | Входит в указанный аккаунт |
/logout | Выходит из аккаунта |
/password <old> <new> | Меняет пароль |
/user add <name> <pass> <group> | Админ: создаёт аккаунт |
/user group <name> <group> | Админ: переводит аккаунт в группу |
/user password <name> <pass> | Админ: сбрасывает пароль |
/user del <name> | Админ: удаляет аккаунт |
По умолчанию игрок может играть без входа, как гость. RequireLogin в config.json требует войти, прежде чем делать что-то значимое, и на публичном сервере эта настройка должна быть включена - иначе грифер просто никогда не зарегистрируется. Новые регистрации попадают в группу, указанную в DefaultRegistrationGroupName, то есть default, если вы это не меняли; игроки без входа находятся в DefaultGuestGroupName, обычно guest.
TShock также умеет автоматически впускать вернувшихся игроков по UUID клиента - это удобно, но чуть слабее пароля. Для сервера с друзьями оставьте это включённым; для публичного подумайте о том, чтобы выключить.
Группы и лестница прав#
Каждый аккаунт состоит ровно в одной группе. У каждой группы есть список прав и, по желанию, родительская группа, права которой она наследует. Из коробки TShock строит примерно такую лестницу:
| Группа | Наследует от | Для кого |
|---|---|---|
guest | - | Игроки без входа |
default | guest | Зарегистрированные игроки |
vip | default | Доверенные игроки, зарезервированные слоты |
newadmin | vip | Младший персонал: kick, mute |
admin | newadmin | Персонал: баны, регионы, телепорт |
trustedadmin | admin | Старший персонал: выдача предметов, изменения мира |
owner | trustedadmin | Вы |
Точные значения по умолчанию менялись между мажорными версиями, поэтому, прежде чем полагаться на эту таблицу, проверьте свои командами /group list и /group listperm <group>. Изменения вносятся через /group:
/group add builder/group parent builder default/group addperm builder tshock.world.editspawn/group prefix builder "[Builder] "/group color builder 120,200,255/user group alice builderТак создаётся группа builder, которая наследует всё, что есть у default, получает право строить внутри защиты спавна, префикс и цвет в чате, и в неё переводится Alice.
Права - это строки через точку. Несколько прав, которые встречаются на любом сервере:
| Право | Разрешает |
|---|---|
tshock.world.modify | Вообще ломать и ставить блоки |
tshock.world.editspawn | Строить внутри защиты спавна |
tshock.admin.kick | /kick |
tshock.admin.ban | /ban |
tshock.admin.region | Создавать и редактировать регионы |
tshock.item.spawn | /item и /give |
tshock.npc.spawnboss | /spawnboss |
tshock.npc.butcher | /butcher |
Важны две детали синтаксиса. Ведущий ! отменяет право - так вы убираете то, что даёт родительская группа: /group addperm vip !tshock.npc.spawnboss. А * даёт всё - это есть у owner и у консоли; никогда не выдавайте * группе, в которой состоят другие люди.
Общий принцип, на котором это основано, - давать каждому минимум необходимого - разобран в статье Правила сервера, модерация и персонал.
Регионы, защита спавна и варпы#
Защита спавна включена по умолчанию: SpawnProtection и SpawnProtectionRadius (10 блоков) в config.json не дают строить рядом с точкой появления мира никому без tshock.world.editspawn. Это первое, что сбивает с толку новых игроков на сервере TShock: они обнаруживают, что не могут копать рядом с местом, где появились.
Регионы - это общий случай. Чтобы защитить базу:
/region set 1 then hit the top-left block/region set 2 then hit the bottom-right block/region define TownHall/region allow alice TownHall/region allowg builder TownHallРегионы защищены сразу после создания. Другие полезные подкоманды - /region list, /region info <name>, /region protect <name> false, чтобы открыть регион, /region remove <user> <name> и /region delete <name>. /region name с последующим ударом по блоку показывает, к какому региону он относится, и это за секунды решает большинство споров на тему «почему я не могу здесь строить».
Варпы - это именованные точки телепортации: /warp add Market сохраняет вашу позицию, /warp Market переносит туда игрока, /warp del Market удаляет её. Как и всё остальное, они хранятся в tshock.sqlite.
Баны, муты и баны предметов#
Система банов TShock отслеживает игроков сразу по аккаунту, UUID клиента и IP-адресу, поэтому забаненный игрок не вернётся, просто переименовав персонажа. В TShock 5:
/ban add griefer42 "Destroyed the hellevator" 7d/ban list/ban details 14/ban del 14Каждый бан получает номер тикета; /ban details и /ban del принимают этот номер. Длительность вроде 7d или 12h делает бан временным; без неё бан постоянный. Лёгкие меры - /kick <player> [reason], /mute <player> и /unmute <player>.
Баны предметов, снарядов и блоков вообще запрещают использовать конкретные вещи:
/itemban add "Dirt Rod"/itemban allow "Dirt Rod" builder/projban add 17/tileban add 4Баны предметов принимают название предмета; баны снарядов и блоков - числовые ID, которые перечислены в вики Terraria. Обычные кандидаты на публичных серверах - взрывчатка, предметы, разливающие жидкости, и всё, чем можно затопить или взорвать чужие постройки. /itemban allow делает исключение для группы, так что доверенные строители сохраняют инструменты, запрещённые для всех остальных.
Серверные персонажи#
По умолчанию персонаж Terraria живёт на компьютере игрока и приходит с ним на любой сервер. Это значит, что игрок может зайти на ваш сервер с прогрессией с персонажем из одиночного мира, где он читерил, и держать эндгейм-оружие в первый же день. Единственный настоящий ответ TShock на это - серверные персонажи (SSC).
SSC настраивается в tshock/sscconfig.json:
{ "Settings": { "Enabled": true, "StartingHealth": 100, "StartingMana": 20, "StartingInventory": [] }}Когда Enabled установлено в true, инвентарь, здоровье и мана каждого аккаунта хранятся в tshock.sqlite. Игроки начинают с того, что задали вы, а то, что они несут, заработано на вашем сервере. Вход на практике становится обязательным, потому что персонаж привязан к аккаунту.
Включайте SSC до открытия сервера, а не на полпути: все существующие игроки начнут заново со стартовым инвентарём, и этот разговор проще провести в первый день. Игроки, которые играют и в других местах, заметят, что их персонаж на вашем сервере отдельный, - в этом и смысл.
config.json: настройки, которые имеют значение#
Собственные настройки TShock лежат в tshock/config.json, начиная с TShock 4.5 - внутри объекта Settings. Файл длинный; вот ключи, которые стоит знать.
| Ключ | По умолчанию | Что делает |
|---|---|---|
ServerPassword | пусто | Пароль для входа |
ServerPort | 7777 | Переопределяет ванильный порт |
MaxSlots | 8 | Лимит игроков |
ReservedSlots | 20 | Дополнительные слоты для групп с правом на резерв |
SpawnProtection | true | Защищает область вокруг спавна |
SpawnProtectionRadius | 10 | Радиус в блоках |
RequireLogin | false | Игроки должны войти, чтобы играть |
DefaultRegistrationGroupName | default | Группа для новых аккаунтов |
DefaultGuestGroupName | guest | Группа для игроков без входа |
AutoSave | true | Периодическое сохранение мира |
AnnounceSave | true | Сообщает игрокам о сохранении мира |
BackupInterval | 0 | Минут между резервными копиями мира, 0 - выключено |
BackupKeepFor | 60 | Сколько минут хранить каждую копию |
EnableWhitelist | false | Включает whitelist.txt |
RestApiEnabled | false | Включает REST API |
RestApiPort | 7878 | Порт REST API |
Названия ключей и значения по умолчанию менялись между мажорными версиями, так что считайте это картой, а не истиной в последней инстанции, и читайте файл, который записала ваша версия. После правки /reload перечитывает конфиг без перезапуска для большинства настроек; изменения порта и слотов требуют перезапуска.
Отдельно о MaxSlots: существуют и MaxSlots, и ванильный -maxplayers, и решает, кто зайдёт, собственная настройка TShock. Ставьте обе на одно и то же число, чтобы не путаться.
Плагины и REST API
Плагины - это файлы .dll в ServerPlugins. Они компилируются под конкретную версию API TShock, и плагин, собранный под старый TShock, обычно не загружается на новом - консоль сообщает об этом при запуске. Перед обновлением TShock убедитесь, что у каждого нужного вам плагина есть релиз под новую версию, и храните старую папку ServerPlugins, пока не убедитесь, что обновление прошло успешно. Плагины работают с полными правами сервера, поэтому берите их со страниц релизов авторов, а не из перезаливов; доводы - в статье Как держать модовый сервер в чистоте.
REST API, если его включить, - это HTTP-интерфейс на RestApiPort, который по токену умеет выполнять команды, выводить список игроков и управлять банами. Им пользуются веб-панели и боты для Discord. Это ещё и админский интерфейс, доступный по сети, так что если включаете его, используйте длинные токены и не оставляйте порт открытым для всех - та же проблема для других игр разобрана в статьях Правила firewall, которые имеют значение и Безопасный RCON.
Обновления, сохранение и резервные копии#
Цикл релизов TShock следует за Terraria. Когда Re-Logic выпускает обновление, игра у игроков обновляется автоматически, и они не могут зайти на старый TShock, пока не выйдет новый релиз. Для небольшого патча это обычно дни; для крупного может быть дольше. Предупреждайте игроков заранее, а не постфактум.
Сохранение работает как на ванильном сервере - при включённом AutoSave мир периодически записывается, а /save принудительно сохраняет его. Останавливайте сервер командой /off, которая сохраняет мир и выключает сервер, а не убивайте процесс; /off-nosave существует для редкого случая, когда вы хотите выбросить то, что в памяти.
Делайте резервные копии трёх вещей вместе: файла мира .wld, tshock/tshock.sqlite и tshock/config.json. В RE:NODE слоты резервных копий входят в каждый тариф Terraria и хранятся вне машины, а вкладка Schedules может по cron-выражению отправить /save как консольную команду и сразу после этого сделать backup. Сторона файла мира подробно описана в статье Резервное копирование и перенос мира Terraria.
FAQ#
Могут ли игроки заходить на сервер TShock с обычной игрой?
Да. TShock работает только на стороне сервера, а клиенты используют немодифицированную игру. Единственное условие - версия: клиент должен быть на той версии Terraria, под которую собран этот релиз TShock.
Можно ли запустить TShock и tModLoader вместе?
Нет. Это отдельные пропатченные серверы. Сервер - либо TShock с ванильным контентом, либо tModLoader с модами. Некоторые админские функции в духе TShock существуют в виде модов tModLoader, но не сам TShock.
Я потерял доступ к аккаунту владельца. Как его вернуть?
Используйте консоль сервера, у которой всегда полные права: /user password <name> <newpass> сбрасывает пароль. Если аккаунта больше нет, /user add <name> <pass> owner из консоли создаст его заново.
Почему новые игроки не могут ломать блоки рядом со спавном?
Защита спавна. Либо перенесите точку спавна подальше от мест, где строят, либо уменьшите SpawnProtectionRadius, либо выдайте доверенным группам tshock.world.editspawn.
TShock замедляет сервер?
Немного - он проверяет больше вещей на каждое действие, - но сервер TShock спокойно работает в том же объёме памяти, что и ванильный: от 512 МБ до 1 ГБ для типичного мира. Затраты появляются из-за плагинов.




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