RE:NODE

Файлы персонажей Valheim и читерство на сервере

Автор Команда RE:NODE
11 мин чтения


Персонаж Valheim - это файл на компьютере самого игрока, а не на вашем сервере. Сервер хранит мир - рельеф, постройки, сундуки, надгробия, прирученных животных, прогресс по боссам - и доверяет каждому клиенту сообщать, кто он, что несёт и какие у него навыки. Из-за такого устройства персонаж свободно путешествует между мирами, и из-за него же ванильный выделенный сервер не может помешать кому-то прийти с предметами, созданными в одиночной игре, с восстановленной копией персонажа или с файлом, изменённым редактором сохранений. Админы контролируют, кто заходит и что происходит в мире. Контролировать, что лежит в файле персонажа, они не могут. Если для вашего сервера это важно, ответ - мод для серверных персонажей, и у него есть своя цена.

В этом руководстве объясняется, что есть в файле персонажа, а чего нет, как предметы попадают в мир извне, как случается дублирование (в том числе то, которого никто не хотел), что админ реально может сделать в ванильной игре и что меняют моды вроде ServerCharacters.

Что хранится в персонаже, а что в мире#

Это разделение - ключ ко всему остальному в этой статье.

Хранится в файле персонажа (клиент)Хранится в мире (сервер)
Инвентарь и надетое снаряжениеПостройки, сундуки и их содержимое
Навыки и их уровниПравки рельефа и посаженные культуры
Известные рецепты, материалы и элементыНадгробия и предметы на земле
Еда, внешность, имя, борода и причёскаПриручённые и прочие существа
Активная сила ForsakenГлобальные ключи от боссов
Исследованная карта и метки, отдельно для каждого мираПорталы, обереги, таблички
Точка возрождения (кровать), отдельно для каждого мираМодификаторы мира

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

Файл персонажа называется Name.fch. В Windows со Steam он находится здесь:

code
%USERPROFILE%\AppData\LocalLow\IronGate\Valheim\characters_local\

Если игрок хранит персонажей в Steam Cloud, они лежат рядом, в папке characters, а экран Manage Saves в игре переносит их между двумя местами. Игроки Linux в Steam найдут те же папки в ~/.config/unity3d/IronGate/Valheim/. Игра также хранит рядом со свежим файлом более старые копии; сколько их и как они называются, менялось от версии к версии. Издание Game Pass и Microsoft Store хранит сохранения в другом месте, это описано в статье о файлах мира в Game Pass и Microsoft Store, а на Xbox файлы вообще недоступны. Серверная сторона структуры файлов описана в статье о каталогах сохранений и расположении файлов.

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

Как предметы попадают в мир извне#

Поскольку персонаж несёт свой инвентарь с собой, всё, что у него есть при подключении, попадает в ваш мир. Это особенность: можно перенести снаряжение из мира друга в свой или сохранить персонажа при сбросе мира, как описано в статье о сбросе мира с сохранением персонажей. Но это же и все пути для читерства одним предложением.

Способы, которыми предметы попадают в мир, от безобидных до намеренных:

  1. Из другого мира, законно. Игрок играл в другом месте. Его бронзовая броня в первый день на вашем сервере заработана где-то ещё. Ваниль считает это нормальным.
  2. Из одиночной игры с набором читов. Загрузите персонажа в одиночный мир, введите devcommands, выдайте себе через spawn всё что угодно, выйдите и подключайтесь. На ванильном выделенном сервере набор читов отклоняется, но оффлайн ничто не мешает - что он позволяет, описано в руководстве по devcommands.
  3. Из редактора сохранений. Сторонние инструменты правят файлы .fch напрямую: навыки, инвентарь, внешность. Сервер видит только результат.
  4. Из восстановленного файла. Копирование более старого .fch поверх текущего возвращает всё, что было в той копии. Это классический приём дублирования, он ниже.

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

Как возникает дублирование#

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

Намеренный

  1. Игрок копирует свой .fch в безопасное место.
  2. Он заходит, кладёт лучшие предметы в сундук на сервере и выходит. Персонаж сохраняется без предметов, мир - с предметами в сундуке.
  3. Он копирует старый .fch обратно. У персонажа снова есть эти предметы.
  4. Он заходит. Теперь предметы есть и в сундуке, и в инвентаре.

В ваниле ничто это не обнаруживает, потому что с точки зрения сервера просто подключился персонаж с какими-то вещами.

Случайный

То же рассогласование возникает, когда никто ничего не задумывал. Мир записывается на диск каждые -saveinterval секунд - по умолчанию тридцать минут. Персонажи сохраняются по собственному расписанию, в том числе при выходе игрока.

  • Игрок достаёт железо из сундука, выходит (персонаж сохраняется с железом), а потом сервер аварийно завершается до следующего сохранения мира. После перезапуска мир такой, каким был до изъятия: железо и в сундуке, и в инвентаре.
  • Обратное приводит к потерям: игрок кладёт снаряжение, выходит, сервер падает до сохранения, и снаряжения нет нигде.

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

Что админы могут и не могут предотвратить в ваниле#

Будьте честны с группой в том, где проходят границы. Вот реальный контроль, который даёт ванильный сервер:

Вы можетеВы не можете
Выбирать, кто заходит, паролем и permittedlist.txtВидеть инвентарь или навыки игрока со стороны сервера
Удалять людей командами kick и banОстановить ввоз предметов из других миров
Защищать постройки и сундуки оберегамиОбнаружить devcommands, использованные в одиночной игре
Делать резервные копии и восстанавливать мирОбнаружить изменённый или восстановленный .fch
Писать правила и следить за их выполнениемСделать новых персонажей обязательными

Реальный инструмент - левая колонка. Многопользовательский Valheim построен как кооперативная игра людей, которые доверяют друг другу, и контроль доступа это отражает: пароль и список разрешённых. Именно список разрешённых меняет вопрос с "как остановить читеров" на "кого мы пускаем" - файл разбирается в статье об adminlist, bannedlist и permittedlist.

Что всё же можно заметить:

  • Снаряжение, не подходящее миру. Игрок со снаряжением Туманных земель в мире, где никто не выходил за пределы Тёмного леса, либо играл в другом месте, либо нет. Спросите.
  • Ресурсы из ниоткуда. Стопки железа в мире, где никто не убил Старейшину, а значит, никто не мог открыть затонувший склеп.
  • Невероятная скорость. База, построенная за ночь из материалов, которые никто не добывал.

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

Правила для персонажей#

Большинству групп нужны два-три из них, записанные там, где все их прочли:

  1. Новые персонажи или нет - решить заранее. "В этом мире только новые персонажи" или "приходите с чем есть". Работает любое. Менять правило после того, как люди зашли, нельзя.
  2. Никаких принесённых предметов, если персонажи новые. Правило о новых персонажах должно распространяться и на инвентарь. Новый персонаж со стопкой железа из другого мира не новый.
  3. Никаких `devcommands` на персонажах, которые играют здесь. Даже оффлайн. Выдать себе снаряжение в одиночной игре и прийти с ним - самая частая форма читерства на групповых серверах.
  4. Не восстанавливать копии персонажей, не спросив. Игроки законно восстанавливают персонажа после повреждения файла; они должны сказать об этом и о том, что вернулось.
  5. Сообщать о дюпах. Если после сбоя у кого-то двойные предметы, он говорит об этом и кладёт лишнее в общий сундук.

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

Моды для серверных персонажей#

Если честного слова недостаточно - публичный сервер, соревновательный PvP-мир, хардкорное сообщество - решение в том, чтобы перенести персонажей на сервер. Для этого нужен мод, потому что в ванильной игре такой функции нет.

Самый известный - ServerCharacters, распространяемый на Thunderstore командой Smoothbrain. Согласно его документации, он хранит профиль каждого игрока на сервере, а не на его ПК, хранит инвентари на сервере, чтобы предотвратить дюп, автоматически делает копии всех профилей с настраиваемым числом хранимых и создаёт аварийную копию, если клиент теряет соединение. Он также предлагает такие опции, как ограничение одним персонажем на аккаунт, хардкорный режим, удаляющий серверное сохранение при смерти, стартовые шаблоны для новых персонажей и режим обслуживания, отключающий всех, кроме админов. Страница на Thunderstore временами помечалась как устаревшая, а альтернативы вроде ServerManager от sighsorry тоже работают с серверными персонажами, так что проверьте, что поддерживается для текущей версии игры, прежде чем связываться.

Чего стоит мод серверных персонажей:

  • Он нужен каждому игроку. ServerCharacters должен стоять на сервере и на каждом клиенте. Это исключает игроков Xbox на сервере с кроссплеем, которые не могут ставить моды, и добавляет ещё один мод, который нужно синхронизировать после патчей игры; что происходит при расхождении версий, объясняет статья о кике из-за несовпадения версий модов.
  • Персонаж принадлежит серверу. В этом и смысл, но это значит, что игроки не могут свободно брать этого персонажа в другие миры, а если сервер пропадёт или будет потеряно хранилище профилей, пропадут и персонажи. Делайте резервную копию папки, где мод хранит профили, вместе с миром.
  • Это ещё одна вещь, которая может сломаться в день патча. Если мод не обновлён под новую версию игры, никто не играет, пока этого не случится.
  • Он покрывает персонажей, а не всё. Клиентский чит-мод по-прежнему может что-то делать в мире, пока игрок подключён. Серверные персонажи закрывают пути правки файлов и импорта, но не все пути.

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

Эксплуатация настройки с серверными персонажами#

Если вы решились, несколько рабочих привычек решают дело:

  1. Объявите до переключения. Существующие персонажи могут не перенестись так, как ждут игроки. Прочтите в документации мода, как он обращается с первым подключением игрока, и расскажите группе.
  2. Копируйте обе половины. Файлы мира и папка профилей мода должны быть в одной резервной копии. Восстановление одного без другого воссоздаёт проблему дюпа, ради решения которой вы ставили мод.
  3. Закрепите версии. Держите сервер и каждый клиент на одной версии мода. Общий профиль r2modman делает это хорошо - см. Thunderstore и r2modman для групп.
  4. Откладывайте обновления игры. Не обновляйте сервер в день патча, пока мод серверных персонажей не обновлён под эту версию.

На RE:NODE мод загружается через файловый менеджер или SFTP, как любой мод BepInEx, а папка профилей находится на том же сервере, что и мир, поэтому резервная копия из панели захватывает оба вместе. Слоты резервных копий входят в каждый тариф Valheim и могут блокироваться, и это стоит сделать перед первым запуском с модом персонажей. Тарифы Valheim поставляются с включённым кроссплеем, поэтому если в вашей группе есть игроки Xbox, помните, что мод, который должен стоять на каждом клиенте, их не пустит.

FAQ#

Видит ли сервер Valheim, что в инвентаре игрока?

В ваниле нет. Инвентарь - часть файла персонажа на компьютере игрока, а сервер видит персонажа только пока он подключён и играет. Моды серверных персонажей это меняют, храня профиль на сервере.

Считается ли чит переносом персонажа из другого мира?

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

Можно ли запретить игрокам использовать devcommands в одиночной игре и приносить предметы?

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

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

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

Работают ли игроки Xbox с ServerCharacters?

Нет. Мод должен стоять на каждом клиенте, а игроки Xbox не могут ставить моды. Сервер, который на него опирается, фактически только для ПК, что бы ни говорила настройка кроссплея.