В Unturned одна система команд и три способа до неё добраться: строка в Commands.dat, строка в консоли сервера или строка в чате от администратора с / или @ впереди. Какой из трёх способов подойдёт для конкретной команды, определяется не произвольно - каждая команда отнесена к одной из категорий: на этапе загрузки, во время работы или и то и другое, а некоторые вдобавок требуют включённых читов. Разберитесь с этой классификацией, и большая часть путаницы вокруг администрирования Unturned исчезнет. Вторая половина дела - RocketMod, который добавляет собственную параллельную систему команд со своим файлом прав и заодно тихо закрывает самое досадное упущение ванильного сервера: в нём есть автосохранение, а в базовой игре его нет.
Как Unturned читает команду#
Регистр в командах не важен. Если у команды несколько параметров, они разделяются косой чертой, что поначалу выглядит странно: ban 76561198012345678/Cheating/86400 - это имя, причина и срок, а не путь к файлу.
Где можно выполнить команду, зависит от её категории:
- Config. Читается только при загрузке, из
Commands.dat. Сюда относятсяMap,Port,Owner,Cheats,PvEиPassword. Если ввести их в работающую консоль, толку не будет. - Runtime. Работают только пока сервер запущен:
kick,ban,teleport,say,day,weather. - Any. Работают в обоих местах.
MaxPlayers,Name,Welcome,SaveиShutdownможно записать вCommands.datили ввести на лету. - Runtime cheat. Работают во время работы сервера и только если в
Commands.datестьCheats:give,vehicle,animal,experience.
Commands.dat лежит по пути Servers/<ServerID>/Server/Commands.dat, по одной команде на строку, и читается один раз при запуске сервера. Строки, начинающиеся с //, - комментарии. Игровые числа - шансы лута, здоровье зомби, респавн техники - находятся не здесь, а в отдельном конфиге сложности, о котором рассказано в руководстве по настройке сервера Unturned. Commands.dat определяет, чем является сервер. Конфиг определяет, как в него играется.
Commands.dat: всё, что можно задать при запуске#
Команды только для конфига - те, что обязаны стоять в файле, потому что больше им негде быть:
| Команда | По умолчанию | Что делает |
|---|---|---|
Map | PEI | Внутреннее имя уровня. Если такого имени нет, молча загружается PEI |
Port | 27015 | Порт запросов. Игровой трафик всегда идёт на порт на единицу больше |
Owner | - | SteamID64 с постоянными правами администратора |
Password | - | Пароль для входа, хранится только как хеш SHA-1 |
Mode | Normal | Easy, Normal или Hard; выбирает, какой блок конфига применяется |
PvE | выкл. | Если строка есть, бой игроков друг с другом отключён |
Perspective | - | First, Third, Both или Vehicle |
Cheats | выкл. | Если строка есть, администраторам доступны команды-читы |
Filter | выкл. | Отклоняет игроков с именами не на английском и не из букв и цифр |
Gold | выкл. | Зайти на сервер могут только владельцы Gold Upgrade |
Whitelisted | выкл. | Зайти на сервер могут только допущенные игроки |
Hide_Admins | выкл. | Скрывает метки администраторов от игроков |
GSLT | - | Game Server Login Token |
Bind | 0.0.0.0 | Привязка к одному внутреннему адресу вместо всех сразу |
GameMode | - | Имя класса пользовательского игрового режима |
Sync | выкл. | Позволяет игрокам переносить сохранения между вашими серверами |
И те, что работают и в файле, и вживую в консоли:
| Команда | По умолчанию | Диапазон | Что делает |
|---|---|---|---|
Name | Unturned | 5-50 симв. | Название сервера в браузере серверов |
MaxPlayers | 8 | 1-200 | Число слотов |
Queue_Size | - | 0-64 | Сколько игроков могут ждать свободного слота |
Timeout | 750 | 50-10000 | Максимальный пинг в миллисекундах до кика |
Chatrate | 0.25 | 0-60 | Сколько секунд игрок должен ждать между сообщениями в чате |
Cycle | 3600 | - | Длительность одного цикла дня и ночи в секундах |
Welcome | - | - | Text/R/G/B, показывается при входе |
Log | N/N/N/N | - | Chat/Join-Leave/Death/Anticheat, каждое значение Y или N |
Loadout | - | - | SkillsetID/ItemID/ItemID...; skillset 255 означает все |
Votify | выкл. | - | Allowed/PassCooldown/FailCooldown/Duration/Percentage/Players |
Рабочий файл для небольшого сервера выживания, с комментариями, которые игра сама допускает:
// identityName Thursday SurvivalOwner 76561198012345678Welcome Rules are in Discord. No offline raiding./255/200/0// worldMap WashingtonMode NormalPerspective BothMaxPlayers 24Queue_Size 8Cycle 3600// connectionPort 27015Timeout 400Chatrate 1.0FilterLog Y/Y/Y/Y// listingGSLT 0123456789ABCDEF0123456789ABCDEFНа четыре пункта из этого файла стоит посмотреть повнимательнее. Timeout - вовсе не таймаут, а максимальный пинг, и значение 750 достаточно щедрое, чтобы игрок на другом конце света оставался на сервере, заметно лагая для всех вокруг. Снижение до 400 на региональном сервере - реальное улучшение качества и решение непопулярное.
Log Y/Y/Y/Y включает логирование чата, входов и выходов, смертей и античита, а по умолчанию оно выключено. Включите его заранее, потому что в тот момент, когда вы захотите узнать, кто взорвал базу, логи либо есть, либо их нет. О том, что хранить и как долго, рассказано в статье логи, которые стоит хранить.
Про Password стоит сказать отдельно: игра хранит его как хеш SHA-1, поэтому считайте его ключом от двери для компании друзей и никогда не используйте пароль, который вы применяете где-либо ещё.
Port занимает два подряд идущих порта: 27015 для запросов и 27016 для игрового трафика. Второй сервер на той же машине означает Port 27017, а не 27016, иначе они столкнутся. Общий вид этой ловушки описан в статье порты игрового сервера. Строка GSLT - это учётные данные, которые вы создаёте сами для app id Unturned 304930; в статье токены Steam для игровых серверов объяснено, что это такое, кто может его создать и за что его блокируют.
Команды времени работы: модерация, читы и консоль#
Их вводят в консоли сервера или в чате от администратора с / или @ впереди. Набор для модерации:
| Команда | Синтаксис | Действие |
|---|---|---|
admin | <SteamID or Player> | Выдать права администратора |
unadmin | <SteamID or Player> | Забрать их |
kick | <Player>/<Reason> | Отключить игрока |
ban | <Player>/<Reason>/<Duration> | Забанить; пустой срок означает 31536000 секунд |
unban | <SteamID> | Снять бан |
bans | Вывести список банов | |
slay | <Player>/<Reason> | Убить и забанить за один шаг |
kill | <Player> | Убить без бана |
permit | <SteamID>/<Tag> | Добавить в список допущенных |
unpermit | <SteamID> | Убрать из него |
permits | Вывести список допущенных | |
players | Кто сейчас на сервере | |
spy | <Player> | Запросить скриншот, сохраняется как Spy.jpg |
investigate | <Player> | Вывести SteamID64 игрока |
Набор для мира и хозяйственных нужд:
| Команда | Синтаксис | Действие |
|---|---|---|
save | Немедленно выполнить полноценное сохранение | |
shutdown | <Delay>/<Explanation> | Сохранить, отключить всех, остановиться |
say | <Text>/<R>/<G>/<B> | Сообщение в чат для всех; по умолчанию зелёное |
day / night | Перескочить время суток | |
time | <Seconds> | Установить точный момент цикла |
weather | <None or Storm or Blizzard or GUID> | Принудительно задать погоду |
airdrop | Немедленно вызвать десантный корабль | |
teleport | <Player>/<Player, place, wp or bed> | Переместить игрока |
debug | Вывести состояние сервера в консоль | |
modules | Список загруженных модулей, удобно для проверки, что Rocket загрузился | |
help | [Command] | Список команд или пояснение к одной из них |
И набор читов, для которого в Commands.dat должна стоять строка Cheats: give, vehicle, animal, experience, reputation, flag, quest. Оставить Cheats включённым на публичном сервере - это решение, а не недосмотр: каждый администратор сможет создавать что угодно, а единственной записью об этом будет то, что вы выставили в Log.
Про save стоит сказать особо: в ванильном сервере нет автосохранения вообще. Ничто не записывает постройки, технику и инвентари игроков на диск по таймеру. shutdown сохраняет; принудительное завершение, сбой или остановка из-за нехватки памяти - нет. Пока вы не установите RocketMod, в котором автосохранение есть, запланированный save - единственное, что стоит между вашим сервером и потерянной неделей.
Администраторы, whitelist и баны#
В Servers/<ServerID>/Server/ лежат три простых текстовых файла, по одному идентификатору на строку:
Adminlist.dat administratorsBlacklist.dat bansWhitelist.dat the allow list, used when Whitelisted is setКоманда Owner в Commands.dat - отдельная и более сильная: она даёт постоянные права администратора одному SteamID64, не трогая Adminlist.dat, и это правильное место для вашего собственного аккаунта. Все остальные проходят через admin во время работы, которая сама записывает их в список.
Whitelisted в Commands.dat переводит сервер в режим только по списку. С этого момента никто не зайдёт, если его ID нет в Whitelist.dat или он не был добавлен через permit. Параметр Tag у permit - это метка для вашего собственного удобства: она видна, когда вы выводите список, а на whitelist в 200 слотов это разница между пригодным файлом и стеной из цифр.
Проще всего получить SteamID64 игрока командой investigate <name>, пока он подключён. Скопировать его из адреса профиля тоже можно, но у половины игроков Unturned в профиле красивый текстовый адрес, а не числовой, и люди вставляют этот текст в Adminlist.dat и удивляются, почему ничего не произошло.
Установка RocketMod (LDM)#
RocketMod - это фреймворк для плагинов, на который ориентируется почти каждый плагин Unturned. Его история важна по одной практической причине: первоначальные разработчики прекратили работу в декабре 2019 года и выложили исходный код под лицензией MIT, Smartly Dressed Games сделали форк, чтобы держать его в соответствии с игрой, а в июне 2020 года по просьбе первого автора форк переименовали в Legally Distinct Missile. Вам нужна именно версия LDM. Она сохраняет совместимость с существующими плагинами и содержит исправления давних проблем Rocket, включая исключения многопоточности и эксплойт с телепортацией.
Скачивать его не нужно. Выделенный сервер поставляется вместе с ним:
- Остановите сервер.
- Скопируйте папку
Rocket.Unturnedиз каталогаExtrasсервера. - Вставьте её в каталог
Modulesсервера. - Запустите сервер и найдите Rocket в журнале запуска. Команда
modulesв консоли подтвердит, что он загрузился.
При первом запуске Rocket создаёт собственную папку внутри экземпляра, и дальше вся работа с плагинами идёт там:
Servers/MyServer/Rocket/ Rocket.config.xml core settings, RCON, automatic shutdown Rocket.Unturned.config.xml the Unturned-specific module settings Permissions.config.xml groups, members, permissions Commands.config.xml enable, disable and re-prioritise commands Rocket.en.translation.xml message strings Plugins/ plugin DLLs and their config files Libraries/ shared dependencies Logs/ Rocket.log, rotated on startСерверы Unturned на RE:NODE поставляются с уже установленным RocketMod, поэтому модуль на месте, а эта папка появляется после первой загрузки - плагины вы добавляете через файловый менеджер или по SFTP. Списка разрешённых плагинов нет; что загрузите, то и запустится, и это ещё одна причина заглянуть в исходный код плагина, прежде чем отдавать ему свой сервер.
Rocket.config.xml и что он включает#
Важны четыре блока. Значения по умолчанию из поставки, а то, что стоит менять, помечено последствиями:
<RocketSettings> <RCON Enabled="false" Port="27115" Password="changeme" EnableMaxGlobalConnections="true" MaxGlobalConnections="10" EnableMaxLocalConnections="true" MaxLocalConnections="3" /> <AutomaticShutdown Enabled="false" Interval="86400" /> <WebConfigurations Enabled="false" Url="" /> <WebPermissions Enabled="false" Url="" Interval="180" /> <LanguageCode>en</LanguageCode> <MaxFrames>60</MaxFrames></RocketSettings>RCON по умолчанию выключен, а пароль - changeme, и если включить его, не сменив пароль, вы выложите удалённую консоль в интернет. RCON в Rocket - это обычный сокет TCP на порту 27115; он не шифруется и не ограничен по частоте, кроме ограничения числа подключений выше. Включайте его, только если он действительно кому-то нужен, смените пароль и ограничьте круг тех, кто может достучаться до порта. Общие правила изложены в статье RCON без риска, и здесь они действуют строже обычного.
AutomaticShutdown со значением Interval="86400" - это перезапуск раз в сутки, по умолчанию выключенный. Для сервера выживания включить его разумно, хотя запланированный перезапуск из панели даёт предупреждающее сообщение и резервную копию перед перезапуском, чего здесь нет. Как выбрать время, рассказано в статье расписания перезапусков, которые помогают.
Файл модуля для стороны Unturned интереснее:
<UnturnedSettings> <RocketModObservatory KickLimitedAccounts="true" KickTooYoungAccounts="true" MinimumAge="604800" /> <AutomaticSave Enabled="true" Interval="1800" /> <CharacterNameValidation>true</CharacterNameValidation> <LogSuspiciousPlayerMovement>true</LogSuspiciousPlayerMovement> <EnableItemBlacklist>false</EnableItemBlacklist> <EnableItemSpawnLimit>false</EnableItemSpawnLimit> <MaxSpawnAmount>10</MaxSpawnAmount> <EnableVehicleBlacklist>false</EnableVehicleBlacklist></UnturnedSettings>AutomaticSave - главное: включено, каждые 1800 секунд. Установка RocketMod дарит серверу Unturned получасовое автосохранение, которого у него иначе нет совсем. Если сервер загружен и на нём много строят, уменьшите интервал вдвое; сохранение короткое, а полчаса потерянной стройки - нет.
KickLimitedAccounts и KickTooYoungAccounts с MinimumAge="604800" отклоняют аккаунты Steam, которые ограничены или младше семи дней. На публичном сервере это бесплатно отсеивает заметную долю одноразовых аккаунтов гриферов, но заодно блокирует и случайного настоящего новичка, так что это компромисс, а не чистая победа.
Права: группы, наследование и cooldown#
В Permissions.config.xml заканчивается большинство жалоб вида «плагин не работает». Команды плагина никому не доступны, пока у какой-нибудь группы нет их узла прав, а узел - это просто имя команды.
<RocketPermissions> <DefaultGroup>default</DefaultGroup> <Groups> <Group> <Id>default</Id> <DisplayName>Guest</DisplayName> <Color>white</Color> <Members /> <Permissions> <Permission>p</Permission> <Permission>compass</Permission> <Permission>rocket</Permission> </Permissions> </Group> <Group> <Id>vip</Id> <DisplayName>VIP</DisplayName> <Color>FF9900</Color> <ParentGroup>default</ParentGroup> <Members> <Member>76561198012345678</Member> </Members> <Permissions> <Permission>kit.*</Permission> <Permission Cooldown="120">heal</Permission> <Permission Cooldown="30">v</Permission> </Permissions> </Group> </Groups></RocketPermissions>Всю работу здесь делают четыре механизма:
- `DefaultGroup` называет группу, в которую попадают все, кого нигде не перечислили. Всё, что в ней есть, есть у каждого игрока.
- `ParentGroup` даёт наследование. Группа
vipнаследует всё, что есть уdefault, и добавляет своё, так что узлы повторять не приходится. - `Members` - список SteamID64. Это единственное место, где игрок привязывается к группе, если не считать команды
/p. - `Cooldown` задаётся для каждого права отдельно и в секундах.
Cooldown="120"уhealозначает, что VIP может лечиться раз в две минуты. Именно эта возможность делает систему привилегий терпимой, и настроить её больше негде.
Подстановочные знаки работают на узлах с точками: kit.* даёт все наборы, которые определяет плагин наборов, тогда как kit.starter дал бы один. Цвета задаются именем или шестнадцатеричным значением без начального знака решётки.
Изменения в этом файле подхватываются командой /p reload, перезапуск не нужен. /p <player> <group> переводит игрока между группами вживую, так что ранг можно выдать, вообще не открывая файл. Тот же принцип наименьших привилегий, что применяется к аккаунтам панели, действует и здесь - общий довод приведён в статье субпользователи и наименьшие привилегии, и довод тот же самый: никому не нужен tp только потому, что он модерирует чат.
Собственными командами Rocket управляет этот файл. Ванильные команды из таблиц выше - нет: они проверяют статус администратора и ничего больше. Две системы бок о бок, и игрок может быть VIP в Rocket без ванильных полномочий или ванильным администратором без прав в Rocket.
Встроенные команды Rocket, каждая из которых - узел прав, который можно выдавать:
| Команда | Синтаксис | Действие |
|---|---|---|
p | <player> [group] или reload | Задать группу игрока или перезагрузить файл |
rocket | <plugins or reload>, <load or unload or reload> <plugin> | Управлять плагинами без перезапуска |
i | <id> [amount] | Выдать себе предмет |
v | <id> | Выдать себе технику |
more | <amount> | Больше того, что у вас в руках |
heal | [player] | Вылечить себя или другого |
god / vanish | Неуязвимость, невидимость | |
tp | <player, place or x y z> | Телепортировать себя |
tphere | <player> | Телепортировать игрока к себе |
home | Обратно к последней кровати | |
broadcast | <color> <message> | Объявить что-либо |
investigate | <player> | Его SteamID64 |
compass | [direction] | Направление, в котором вы смотрите |
exit | Выйти без задержки на отключение | |
rwho / rkick / rflush | Показать, кикнуть и сбросить клиентов RCON |
Плагины и OpenMod#
Плагин - это файл .dll, брошенный в Rocket/Plugins/. При первой загрузке он рядом с собой записывает <PluginName>.configuration.xml и <PluginName>.en.translation.xml, и это ваш знак, что он вообще загрузился: нет файла конфигурации - нет загрузки, а причину назовёт Rocket/Logs/Rocket.log. Общие зависимости кладутся в Libraries/. Команда rocket reload <plugin> подхватывает изменённую конфигурацию без остановки сервера.
Порядок действий, который избавляет от большей части неприятностей:
- Остановите сервер или хотя бы знайте, что потом придётся перезагрузить.
- Положите DLL в
Plugins/и запустите сервер. - Прочитайте журнал. Убедитесь, что плагин загрузился и записал свой конфиг.
- Остановите сервер, отредактируйте созданный конфиг и запустите снова.
- Выдайте его узлы прав группе в
Permissions.config.xml. - Проверьте с аккаунта без прав администратора. Администраторы обходят достаточно проверок, чтобы тест от их имени ничего не доказывал.
Пятый шаг пропускают чаще всего, и он даёт классический симптом: плагин загружается чисто, ничего не пишет в журнал и игнорирует любые команды. Прежде чем решать, что плагин сломан, проверьте, что его узел есть в группе, к которой принадлежит тестирующий.
OpenMod - более новый фреймворк, написанный одним из первоначальных разработчиков Rocket, и он не заменяет RocketMod - он работает рядом и может запускать плагины Rocket через слой совместимости. Простая установка идёт через плагин-установщик OpenMod: положите его в Rocket/Plugins/, перезапустите, выполните /openmod install и следуйте подсказкам. Ручной путь - скопировать папку OpenMod.Unturned в Modules/; первый запуск при этом долгий, потому что скачиваются собственные компоненты. Выбирайте тот фреймворк, для которого опубликованы нужные вам плагины; выбирать из идейных соображений незачем.
Что бы вы ни ставили, сначала сделайте резервную копию. Постройки, техника и инвентари игроков хранятся в файлах сохранений экземпляра, а плагин, который их удалит, отмены не предусматривает. Копируйте папку экземпляра по расписанию и время от времени восстанавливайте одну из копий, чтобы убедиться, что она работает, потому что резервная копия, которую никто не восстанавливал, - это гипотеза. Общая гигиена сервера с модами - фиксировать версии, читать исходный код, удалять то, чем перестали пользоваться - описана в статье как содержать сервер с модами в чистоте, а у содержимого Workshop свои правила, разобранные в статье моды Steam Workshop на выделенных серверах.
Устранение неполадок#
Команда в `Commands.dat` ничего не делает. Это команда времени работы. kick, ban, say и teleport существуют только пока сервер запущен.
Сервер постоянно загружает PEI. Map не совпадает с именем установленного уровня. Нужно внутреннее имя, а не отображаемое, и отсутствующая карта из Workshop даёт тот же результат.
Правки в `Commands.dat` пропадают. Когда вы сохраняли файл, сервер работал. Остановите, отредактируйте, запустите.
Rocket не загрузился. Выполните modules в консоли. Если Rocket.Unturned в списке нет, папку не скопировали из Extras в Modules либо скопировали на уровень глубже.
Плагин загрузился, но его команды игнорируются. В девяти случаях из десяти виноваты права. Добавьте узел в группу в Permissions.config.xml, выполните /p reload и проверьте от имени обычного игрока.
Плагин не записал файл конфигурации. Он не загрузился. Rocket/Logs/Rocket.log назовёт недостающую зависимость или несовпадение версий.
Игроков кикает сразу при входе. Причина - KickLimitedAccounts или KickTooYoungAccounts в Rocket.Unturned.config.xml, либо Filter в Commands.dat отклоняет их имена, либо включён Whitelisted при пустом списке допущенных.
После сбоя потерян прогресс. В ванильном Unturned автосохранения нет. Установите RocketMod ради его 30-минутного AutomaticSave, сократите интервал и вдобавок запланируйте команду save.
RCON отказывает в подключении или пускает не тех. Порт 27115, пароль, который всё ещё changeme, и ограничения числа подключений, которые ниже, чем вам кажется. Проверьте все три пункта, прежде чем винить файрвол.
FAQ#
Чем отличается Commands.dat от конфига?
Commands.dat задаёт, чем является сервер: название, карта, порт, слоты, владелец, пароль, токен. Конфиг сложности задаёт, как играется: шанс лута, урон зомби, время респавна техники. Они никогда не пересекаются, и почти на любой вопрос «какой файл править» отвечает именно это разделение.
Поддерживается ли RocketMod до сих пор?
Да, под названием Legally Distinct Missile, силами Smartly Dressed Games с тех пор, как первоначальная команда отошла от дел в декабре 2019 года. Он поставляется с выделенным сервером в папке Extras, так что устанавливаемая вами копия всегда соответствует сборке игры.
Почему плагин загружается, но ничего не делает?
Для его команд не выдан узел прав той группе, в которой состоит игрок. Откройте Permissions.config.xml, добавьте имя команды как Permission в нужную группу и выполните /p reload. Проверяйте от имени не-администратора, потому что администраторы обходят достаточно проверок, чтобы скрыть проблему.
Можно ли запускать RocketMod и OpenMod вместе?
Да. OpenMod задумывался как работающий рядом с Rocket, а не вместо него, и умеет запускать плагины Rocket через слой совместимости. Путь через плагин-установщик настроит оба за несколько минут.
Есть ли у Unturned автосохранение?
В ванильной версии нет. Базовый сервер сохраняется при штатном shutdown и когда вы вводите save, и больше никогда. RocketMod добавляет AutomaticSave каждые 1800 секунд, и это самая веская причина установить его даже на сервер без плагинов.
Как ограничить привилегию, не раздавая её без счёта?
Используйте атрибут Cooldown у права, а не настройку плагина: <Permission Cooldown="120">heal</Permission> разрешает одно лечение раз в две минуты. Cooldown задаётся для каждого права и каждой группы отдельно, так что одна и та же команда может быть щедрой для персонала и нормированной для донатеров.




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