RE:NODE

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

Вайтлист и аккаунты в Project Zomboid

Как устроены аккаунты на сервере Project Zomboid: вайтлист через Open=false, добавление игроков, привязка к Steam ID, сброс забытого пароля, пермасмерть и заявки через Discord.

0 прочтений

На сервере Project Zomboid есть аккаунты, а не просто игроки. Каждый человек заходит со своим логином и паролем, а сервер хранит эти аккаунты в базе данных SQLite в Zomboid/db/<servername>.db. Могут ли незнакомцы создать аккаунт, решает одна строка в ini: Open=true позволяет любому зарегистрироваться при первом входе; Open=false делает сервер доступным только по вайтлисту, и попасть на него могут лишь аккаунты, которые создали вы или которые уже существовали. Чтобы аккуратно закрыть сервер, попросите постоянных игроков зайти один раз, выполните /addalltowhitelist, установите Open=false и перезапустите сервер. Чтобы потом добавить кого-то, выполните /adduser "name" "password" и передайте человеку пароль.

В этом руководстве разобрано, как работают аккаунты и вайтлист, все связанные настройки, добавление и удаление людей, сброс забытого пароля, привязка к Steam ID, которая мешает делиться аккаунтами, вайтлисты с пермасмертью и приём заявок через Discord. Аккаунт администратора и список команд в целом описаны в статье админ-команды Project Zomboid.

Два пароля и зачем нужны оба#

Новые админы на сервере Zomboid путают их чаще, чем что-либо ещё.

  • Пароль сервера - это Password= в <servername>.ini. Все вводят один и тот же пароль на экране подключения. Он не пускает тех, кто просто нашёл ваш адрес, и больше ничего не делает.
  • Пароль аккаунта принадлежит одному аккаунту. Он задаётся при создании аккаунта - самим игроком при первом входе, если сервер открыт, или вами через /adduser, если нет, - и подтверждает, что человек, входящий как «Bob», действительно Bob.

Сервер может использовать любой из них или оба. Пароль сервера при Open=true означает, что аккаунт может создать любой, кто знает общий пароль. Open=false без пароля сервера означает, что зайти могут только аккаунты из списка, и пароль сервера ничего не добавляет. Оба сразу - это перестраховка, полезная в основном на время перехода от одной модели к другой.

Где хранятся аккаунты#

code
Zomboid/  Server/servertest.ini              Open, Password and the other keys below  db/servertest.db                   accounts: usernames, password hashes, access levels, bans  Saves/Multiplayer/servertest/    players.db                       characters

База данных хранит аккаунт; сохранение хранит персонажа. У этого разделения три полезных следствия:

  • Вайп мира не стирает аккаунты. Удалите сохранение, и все зайдут с тем же логином и паролем в свежий мир. Виды вайпов разобраны в статье сброс сервера Project Zomboid.
  • Удаление базы данных удаляет все аккаунты, включая admin, все уровни доступа и все баны. Делайте это, только если действительно хотите начать список игроков с нуля.
  • Копирование базы данных переносит ваш список игроков. Чтобы поднять второй сервер или переехать к новому хостеру с теми же людьми, скопируйте db/<servername>.db, переименовав его под новое имя сервера. Никому не придётся регистрироваться заново.

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

Ключи ini, которые управляют доступом#

КлючПо умолчаниюЧто делает
Opentruefalse делает сервер доступным только по вайтлисту
PasswordпустоОбщий пароль сервера при подключении
AutoCreateUserInWhiteListfalseПри Open=true новые аккаунты добавляются в вайтлист при регистрации
DropOffWhiteListAfterDeathfalseУбирать аккаунт из вайтлиста, когда его персонаж умирает
MaxAccountsPerUser0Сколько аккаунтов разрешено на один аккаунт Steam. 0 - без ограничений
MaxPlayers32Слоты
ServerWelcomeMessageстандартноеПоказывается при входе; хорошее место для правил и ссылки на Discord
DisplayUserNametrueПоказывать имена аккаунтов над игроками
ShowFirstAndLastNamefalseПоказывать имена персонажей вместо них или вместе с ними

Значения по умолчанию немного различаются от сборки к сборке, а в сгенерированном ini у каждого ключа есть комментарий. Некоторые из них заслуживают больше одной строки.

AutoCreateUserInWhiteList нужен для перехода от открытого сервера к закрытому. Держите сервер открытым на выходных запуска с этой настройкой, и все, кто зарегистрировался, уже будут в вайтлисте, когда вы переключите Open на false.

MaxAccountsPerUser важен на серверах со Steam. Аккаунты привязаны к Steam ID, с которого их создали, поэтому лимит 1 или 2 не даёт одному человеку завести пачку альтернативных аккаунтов, чтобы обходить бан или копить ресурсы. На сервере друзей это неважно; на публичном - задайте его.

DropOffWhiteListAfterDeath - переключатель пермасмерти, о нём ниже.

Как закрыть уже работающий сервер#

Обычная ситуация: сервер какое-то время был открыт, появилась группа постоянных игроков, и пора закрыть его от посторонних.

  1. Попросите всех, кто должен сохранить доступ, зайти один раз, чтобы их аккаунт существовал.
  2. От имени администратора выполните /addalltowhitelist. Команда добавляет все аккаунты, известные серверу.
  3. Остановите сервер.
  4. Установите Open=false в ini.
  5. Запустите сервер и попробуйте зайти с новым именем, чтобы убедиться, что вход отклоняется.
servertest.ini
Open=falsePassword=AutoCreateUserInWhiteList=falseMaxAccountsPerUser=1

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

Open - также один из параметров, которые /changeoption может задать на работающем сервере, с последующим /reloadoptions. Это удобно, но впишите значение и в ini, чтобы перезапуск тихо не открыл сервер снова.

Добавление, удаление и баны#

Команды, которые выполняются в консоли или в чате от имени администратора:

code
/adduser "Bob" "temporary-password-42"/addusertowhitelist "Bob"/removeuserfromwhitelist "Bob"/addalltowhitelist/banuser "Bob" -ip -r "griefing the Muldraugh bakery"/unbanuser "Bob"/banid "76561198012345678"/unbanid "76561198012345678"/setaccesslevel "Bob" "moderator"
КомандаЧто делает
/adduserСоздать аккаунт с паролем, который выбрали вы
/addusertowhitelistДобавить в вайтлист уже существующий аккаунт
/removeuserfromwhitelistУдалить запись аккаунта из вайтлиста
/addalltowhitelistДобавить в вайтлист все существующие аккаунты
/banuserЗабанить аккаунт; -ip банит ещё и адрес
/banidЗабанить Steam ID, что не даёт создавать новые аккаунты с того же аккаунта Steam
/setaccesslevelДать аккаунту уровень персонала или none, чтобы его снять

Имена - это имена аккаунтов, а не персонажей, и кавычки важны, если в имени есть пробел. На сервере с вайтлистом люди попадают на него через /adduser: создайте аккаунт, затем отправьте человеку имя и пароль в личные сообщения. Попросите сменить пароль - игрок может сделать это в чате командой /changepwd "old" "new" на сборках, где она есть; /help покажет команды вашей сборки.

Бан аккаунта на открытом сервере легко обойти - игрок регистрирует новое имя. Держится бан по Steam ID. Steam ID есть в логах подключений сервера для каждого входа, и именно там его можно найти задним числом. Как записывать баны и разбирать апелляции, описано в статье правила сервера, модерация и команда.

Привязка к Steam ID и общие аккаунты#

На сервере со Steam аккаунт привязан к аккаунту Steam, который первым его использовал. Тот, кто знает логин и пароль Bob, всё равно не сможет зайти как Bob с другого аккаунта Steam. Это тихая полезная защита: общие пароли не приводят к общим персонажам, а утёкший пароль - меньшая катастрофа, чем кажется.

Она же объясняет два частых вопроса в поддержку. Игрок, купивший игру на новый аккаунт Steam, не сможет пользоваться своим старым аккаунтом Zomboid, пока администратор не удалит его и не создаст новый. А братьям, делящим один ПК с двумя аккаунтами Steam, нужны два аккаунта Zomboid.

Серверы, запущенные с параметром -nosteam, работают без Steam - для игроков с копиями игры не из Steam. Привязываться там не к чему, поэтому единственная защита - пароль аккаунта, а /banid не на что действовать. На любом сервере без Steam, доступном из интернета, используйте пароль сервера и вайтлист.

Сброс забытого пароля#

Ссылки «забыли пароль» нет. Есть три способа решить проблему - от самого простого до самого ручного.

  1. Админ-панель. Если вы вошли как администратор, во внутриигровой панели есть просмотр базы данных со списком аккаунтов, где администратор может изменить данные аккаунта. На сборках, где это есть, это самый быстрый путь.
  2. Удалить и создать заново. /removeuserfromwhitelist "Bob", затем /adduser "Bob" "new-password". Если сервер отказывает, потому что имя всё ещё существует, удалите строку напрямую, как в третьем способе. В мультиплеере Build 41 персонаж хранится отдельно в сохранении и связан с аккаунтом по имени, поэтому пересоздание того же имени возвращает Bob к его персонажу. Если сервер с модами, сначала попробуйте на тестовом аккаунте.
  3. Напрямую в базе данных. При остановленном сервере таблицу аккаунтов можно править любым инструментом для SQLite. Сначала сделайте копию файла.
bash
$ cp Zomboid/db/servertest.db Zomboid/db/servertest.db.bak$ sqlite3 Zomboid/db/servertest.db ".schema whitelist"$ sqlite3 Zomboid/db/servertest.db "SELECT id, username FROM whitelist;"$ sqlite3 Zomboid/db/servertest.db "DELETE FROM whitelist WHERE username = 'Bob';"

Таблица с аккаунтами называется whitelist даже на открытых серверах, и это многих удивляет. Прежде чем что-то менять, прочитайте схему: имена столбцов менялись между сборками, а пароли хранятся в виде хэшей, так что просто вписать новый пароль в таблицу не получится. Безопасное применение прямого доступа - удалить строку и пересоздать аккаунт через /adduser.

Вайтлисты с пермасмертью#

DropOffWhiteListAfterDeath=true удаляет аккаунт из вайтлиста, когда его персонаж умирает. Вместе с Open=false смерть означает, что игрок заблокирован, пока администратор не пустит его обратно.

Некоторые ролевые и хардкорные серверы используют это, чтобы смерть имела значение: каждое возвращение проходит через члена команды, который может потребовать новую анкету персонажа, срок ожидания или просто разговор о том, как это случилось. Лучше всего это работает с ясной письменной политикой - сколько длится ожидание, что нужно для новой анкеты, - иначе каждая смерть превращается в переговоры. Заодно доступность команды становится частью игры: смерть в 3 часа ночи, когда никто из команды не спит, - это заблокированный до утра игрок. Решите, приемлемо ли это, прежде чем включать.

Заявки через Discord#

Большинство сообществ с вайтлистом принимают заявки в Discord. Схема, которая работает:

  1. Канал для заявок с вопросами в закреплённом сообщении: имя, возраст, если этого требуют правила, часовой пояс, как человек нашёл сервер, и согласие с правилами.
  2. Член команды рассматривает заявку и, если одобряет, выполняет /adduser со сгенерированным паролем.
  3. Пароль уходит заявителю в личные сообщения, никогда не в публичный канал, вместе с просьбой его сменить.
  4. Заявитель получает роль в Discord, чтобы команда с одного взгляда видела, кто в вайтлисте.

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

В Project Zomboid есть и встроенный мост для чата Discord, который настраивается в ini:

КлючЧто делает
DiscordEnableВключает мост
DiscordTokenТокен бота из портала разработчиков Discord
DiscordChannelИмя канала для моста
DiscordChannelIDЧисловой ID канала

Он пересылает чат между игрой и каналом Discord. Вайтлистом он не управляет и аккаунты не создаёт, а токен - это учётные данные: не показывайте ini на скриншотах, а если токен утечёт, перевыпустите его в портале разработчиков. Боты, которые обрабатывают заявки автоматически, существуют как отдельные проекты; более лёгкие способы связать сервер и сообщество разобраны в статье вебхуки Discord для статуса сервера.

Решение проблем#

После закрытия сервера новых игроков не пускает. Это работает вайтлист. Добавьте их через /adduser.

Игрок из вайтлиста не может зайти. Проверьте имя аккаунта, а не персонажа. Затем убедитесь, что он заходит с того аккаунта Steam, с которого создавался аккаунт Zomboid.

После перезапуска сервер снова открылся. Open поменяли через /changeoption, но не в файле ini. Пропишите его в файле.

Всем пришлось регистрироваться заново. Базу данных удалили или заменили, или сервер работает с другим -servername и другой базой. Восстановите файл из резервной копии.

Забаненный игрок продолжает возвращаться. Он создаёт новые аккаунты. Забаньте Steam ID через /banid и задайте MaxAccountsPerUser.

Игрок умер и не может вернуться. Включён DropOffWhiteListAfterDeath=true. Добавьте его обратно через /addusertowhitelist, если правила это позволяют.

FAQ#

Как сделать сервер Project Zomboid доступным только по вайтлисту?

Установите Open=false в ini и перезапустите сервер. Зайти смогут только уже существующие аккаунты. Если люди регистрировались, пока сервер был открыт, сначала выполните /addalltowhitelist, а новых людей добавляйте через /adduser.

Где хранятся аккаунты Project Zomboid?

В базе данных SQLite в Zomboid/db/<servername>.db, в таблице whitelist. Персонажи хранятся отдельно в сохранении мира, поэтому вайп мира не удаляет аккаунты.

Может ли игрок сам сбросить пароль?

На сборках, где она есть, команда /changepwd в чате меняет пароль игрока, если он знает текущий. Для забытого пароля нужен администратор.

Нужен ли пароль сервера, если сервер на вайтлисте?

Нет. Open=false уже ограничивает, кто может зайти. Пароль сервера добавляет второй барьер, что полезно на время перехода от открытого сервера к закрытому.

Почему мой друг не может зайти на мой аккаунт со своего ПК?

Аккаунты на серверах со Steam привязаны к аккаунту Steam, который их создал. Это защита от общих и украденных паролей. Пусть друг заведёт свой аккаунт.

Можно ли перенести список игроков на новый сервер?

Да. Скопируйте Zomboid/db/<servername>.db на новый сервер, переименовав его под имя сервера, если оно отличается. Аккаунты, уровни доступа и баны переедут вместе с ним.


Комментарии

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

0/2000