Плагины и моды расширяют возможности многих игр, но часто ломаются после обновления игры или при отсутствии какого-либо файла. В разделах ниже разобраны типичные сообщения из CS2 с CounterStrikeSharp, Valheim с BepInEx, Conan Exiles, SCP: Secret Laboratory, Project Zomboid и The Forest, а также общие ошибки плагинов .NET. Каждый раздел показывает сообщение, объясняет его и подсказывает дальнейшие шаги.
Полное сообщение ты найдёшь в Консоль и в лог-файлах игры в разделе Файлы. Многие ошибки состоят из нескольких строк. Стек вызовов (stacktrace) под ними, то есть список вызванных частей программы, часто указывает на проблемный плагин; исключение (exception) — это программная ошибка, о которой сообщает .NET или Unity. Прежде чем заменять плагины, моды или конфигурационные файлы, создай резервную копию в разделе Резервные копии.
Плагин скинов для CS2 не находит weapons.json
Как выглядит сообщение:
System.InvalidOperationException: Missing required weapons definition file: <Plugin-Folder>/weapons.json
В чём причина: Плагинам скинов для CS2 нужен список всего оружия и его идентификаторов. Он находится в обязательном файле weapons.json в папке данных плагина. Если этого файла нет, плагин не может инициализироваться, то есть вообще не запускается: функция скинов полностью выходит из строя. Так бывает, например, если при загрузке был передан только исполняемый файл плагина, а не весь пакет.
Как это исправить:
- Прочитай путь в сообщении. Он показывает, в какой папке плагин ожидает этот файл.
- Заново скачай плагин той же версии и установи его полностью, со всеми папками из пакета.
- Как вариант, скопируй
weapons.jsonиз пакета той же версии плагина в указанную папку в разделе Файлы. Не используй файл из другой версии. - Перезапусти сервер и проверь в Консоль, загружается ли плагин без ошибок.
Полезно знать: Подробнее о плагинах для CS2: Плагины для CS2: MetaMod, CounterStrikeSharp и MatchZy.
WeaponPaints: gamedata.json не подходит к обновлению CS2
Как выглядит сообщение:
Method CAttributeList_SetOrAddAttributeValueByName not found in gamedata.json
В чём причина: WeaponPaints находит определённые функции в программе CS2 по сигнатурам, то есть по признакам распознавания, которые хранятся в файле gamedata.json. После обновления CS2 одна из этих сигнатур перестаёт совпадать, и плагин не находит функцию. Тогда он не может запуститься. Дело не в твоих настройках, а в том, что игра и плагин больше не подходят друг к другу.
Как это исправить:
- Проверь, получала ли CS2 недавно обновление. Это обычная причина.
- Обнови CounterStrikeSharp и WeaponPaints вместе до последней версии и при этом возьми актуальный
gamedata.jsonот WeaponPaints. - Если адаптированной версии ещё нет, временно убери WeaponPaints, пока автор не выпустит обновление.
- Перезапусти сервер и проверь, исчезло ли сообщение.
Полезно знать: После крупных обновлений CS2 авторам плагинов иногда требуется время, чтобы выпустить адаптированные версии. Подробнее об обновлениях игры: Обновление сервера CS2: как распознать расхождение билда и безопасно перезапустить.
Conan Exiles: игрок отклонён из-за несовпадающего списка модов
Как выглядит сообщение:
[<Date>-<Time>][<No>]LogNet: PreLogin failure: <Mod A> (<Workshop ID>), <Mod B> (<Workshop ID>), <Mod C> (<Workshop ID>).
В чём причина: Игрок хотел подключиться, но был отклонён, потому что его активные моды не совпадают точно со списком модов твоего сервера. Важно: моды в этой строке — это эталонный список сервера, а не неправильные моды игрока. Какие моды на самом деле активны у игрока, в логе не указано. Conan Exiles требует точного совпадения: отсутствующий мод блокирует вход так же, как и лишний. Игрок не видит причины: его игра застревает на сообщении «Попытка входа в игру». Это похоже на тайм-аут, но на самом деле это мгновенный отказ.
Как это исправить:
- Сравни список из лога с модами, которые игрок активировал в лаунчере Conan. Набор должен быть одинаковым, без лишних.
- Если игрок отключит каждый мод, которого нет в списке, и включит недостающие, он снова сможет подключиться.
- Если нужно разрешить дополнительный мод, установи его на сервер в разделе Моды и перезапусти сервер.
- После каждого изменения серверных модов все игроки должны привести свой список модов в соответствие.
CounterStrikeSharp: ошибка в событии плагина («Error invoking callback»)
Как выглядит сообщение:
<Time> [EROR] (cssharp:…) Error invoking callback
В чём причина: CounterStrikeSharp — это платформа плагинов для CS2. Плагины подписываются там на события, например «игрок подключается» или «раунд начинается»; функция, которая при этом вызывается, называется callback. В таком callback плагин вызвал ошибку, так называемое исключение (Exception). Сервер продолжает работать, но соответствующая функция плагина не сработала. Какой это был плагин и почему так произошло, указано в стек-трейсе ниже — списке вызванных частей программы.
Как это исправить:
- Прочитай полный стек-трейс под сообщением. Название плагина обычно указано там как часть имён классов или как имя файла.
- Обнови этот плагин и CounterStrikeSharp до версий, которые подходят друг к другу. На странице плагина указана поддерживаемая версия CounterStrikeSharp.
- Полностью перезапусти сервер, а не только плагин.
- Если ошибка после этого сохраняется, удали плагин и сообщи об ошибке его автору.
CS2-SimpleAdmin: база данных не соответствует версии плагина
Как выглядит сообщение:
A parameterless default constructor or one matching signature (…) is required for CS2_SimpleAdmin.<Class> materialization
В чём причина: CS2-SimpleAdmin хранит баны, муты и историю IP-адресов в базе данных MySQL. Сообщение означает, что столбцы таблиц не соответствуют версии, которую ожидает плагин. Обычно это случается после обновления плагина, если миграция базы данных (автоматическая адаптация таблиц) не выполнилась, или если используется база данных от более старой установки. Тогда админ-функции плагина работают ненадёжно, а сам сервер CS2 продолжает работать.
Как это исправить:
- Прежде чем что-то менять, сохрани содержимое базы данных, например с помощью экспорта.
- Обнови CS2-SimpleAdmin до последней версии и один раз перезапусти сервер, чтобы выполнилась миграция.
- Если сообщение остаётся, сравни таблицы своей базы данных со схемой, то есть со структурой таблиц, установленной версии плагина.
- Если старые данные о банах тебе не нужны, создай в разделе Базы данных новую базу данных, впиши её данные доступа в конфигурацию плагина и перезапусти сервер.
WeaponPaints не запускается («TypeInitializationException»)
Как выглядит сообщение:
TypeInitializationException: The type initializer for 'WeaponPaints.WeaponPaints' threw an exception.
---> <inner exception>: <Cause>
В чём причина: При первом обращении WeaponPaints выполняет статическую стартовую процедуру (Type Initializer). Она завершилась неудачей, поэтому плагин не запускается. Само сообщение — лишь оболочка: настоящую причину называет внутреннее исключение сразу после него, например неверная конфигурация, отсутствующий файл данных или несовместимая зависимость.
Как это исправить:
- Прочитай первое внутреннее исключение под этим сообщением, обычно оно начинается с
--->. - Обнови WeaponPaints и CounterStrikeSharp вместе до подходящих друг другу версий.
- После этого исправь только то, что конкретно называет внутреннее исключение: файл конфигурации, отсутствующий файл данных, например
weapons.json, или подключение к базе данных. Данные доступа к своей базе данных ты найдёшь в разделе Базы данных. - Перезапусти сервер и проверь Консоль.
.NET-плагин: не хватает зависимости («Could not load file or assembly»)
Так выглядит сообщение:
System.IO.FileNotFoundException: Could not load file or assembly '<Name>, Version=<Version>, Culture=neutral, PublicKeyToken=<…>' or one of its dependencies. The system cannot find the file specified.
Что за этим стоит: Многие игры загружают плагины через .NET, например CS2 с CounterStrikeSharp, Valheim с BepInEx или SCP: Secret Laboratory. Сборка (assembly) — это программный файл .NET, чаще всего .dll. Сообщение означает: плагину нужна определённая сборка, которая не установлена, либо версии его зависимостей не совпадают друг с другом. Затронутый плагин после этого не запускается или запускается лишь частично.
Как это исправить:
- Прочитай название и версию в кавычках. Это и есть недостающая зависимость.
- Проверь на странице плагина, какие зависимости и каких версий нужны. Часто они лежат в архиве загрузки в виде дополнительных файлов
.dll. - Установи зависимость нужной версии в разделе Файлы в ту папку, которую указывает страница плагина.
- Перезапусти сервер и проверь, исчезло ли сообщение.
.NET-компонент не удаётся инициализировать
Так выглядит сообщение:
System.TypeInitializationException: The type initializer for '<Class>' threw an exception
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
Что за этим стоит: Компонент .NET, то есть плагин, мод или часть загрузчика, завершился ошибкой в своей стартовой процедуре или в обратном вызове (callback). Callback — это функция, которая вызывается при определённом событии. Эти сообщения — лишь обёртка вокруг настоящей ошибки: причина содержится во внутреннем исключении (exception), которое идёт сразу следом. После этого затронутый компонент не работает или работает с ограничениями.
Как это исправить:
- Определи, какой компонент затронут. Его называют имя в кавычках или строки в стектрейсе.
- Обнови этот компонент и используемый загрузчик модов или плагинов, например BepInEx или CounterStrikeSharp.
- Перезапусти сервер и найди в логе первое внутреннее исключение, обычно оно начинается с
--->. В играх на Unity исходное исключение часто стоит прямо над строкой сRethrow as. - Устрани то, что называет это внутреннее исключение, например отсутствующий файл или неверную настройку.
.NET-плагин не может загрузить свои классы
Так выглядит сообщение:
System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the requested types.
System.Exception: Unable to find plugin in assembly
Что за этим стоит: Загрузчик плагинов открыл файл плагина, но не смог загрузить его классы или найти точку входа, то есть место, с которого он запускает плагин. Либо файл плагина не подходит к установленной версии загрузчика или игры, либо в папке плагинов лежит не тот файл, например вспомогательная библиотека вместо самого плагина. Плагин после этого остаётся неактивным.
Как это исправить:
- Обнови плагин и загрузчик вместе, чтобы оба подходили к текущей версии игры.
- Проверь в разделе Файлы, что нужный файл плагина лежит в той папке, которую указывает страница плагина.
- Удали старые копии того же плагина, чтобы загружалась только одна версия.
- Перезапусти сервер и проверь Консоль.
Valheim: мод не подходит к версии игры и не работает
Так выглядит сообщение:
Rethrow as TypeInitializationException: The type initializer for '<Mod-Class>' threw an exception.
Что за этим стоит: BepInEx, загрузчик модов для Valheim, загрузил мод, но тот сразу аварийно завершился при инициализации. Он обращается к чему-то в игре, чего в запущенной версии Valheim нет или уже нет. Сервер при этом запускается нормально и полностью пригоден для игры. Мод по-прежнему отображается как установленный, но ничего не делает, а в игре об этом нет никакого сообщения об ошибке. Чаще всего причина — обновление Valheim: сервер обновляется сам при каждом запуске, а мод остаётся прежней версии. Название мода указано в строке выше.
Как это исправить:
- Запомни название мода из строки над сообщением.
- Проверь в разделе Моды, есть ли более новая версия, подходящая к текущей версии Valheim. Если да, установи её и перезапусти сервер.
- Если подходящей версии нет, пока удали мод. Иначе он только занимает место и создаёт впечатление, что он активен.
- Моды, важные для твоего сервера, включай снова только после того, как их автор обновит их под новую версию игры.
Подробнее: Valheim 1.0: безопасная проверка обновления сервера, старого мира и модов
Мод Valheim ищет удалённое поле «ZRoutedRpc.Everybody»
Так выглядит сообщение:
MissingFieldException: Field not found: .ZRoutedRpc.Everybody
Что за этим стоит: ZRoutedRpc — это часть Valheim, через которую сервер и игроки обмениваются сообщениями. Мод для BepInEx был собран под другую версию Valheim и ожидает поле Everybody, которого в установленной версии нет. Мод не может выполнить свою функцию в этом месте и работает не полностью или не работает вовсе.
Как это исправить:
- Найди в стектрейсе, то есть в списке вызванных частей программы под сообщением, первый мод. Именно он затронут.
- Обнови его в разделе Моды до версии для текущего билда Valheim, то есть для запущенной версии игры.
- Если такой версии ещё нет, пока удали мод и перезапусти сервер.
- Если мод стоит и у твоих товарищей по игре, всем стоит использовать одну и ту же версию.
Подробнее: Valheim 1.0: безопасная проверка обновления сервера, старого мира и модов
SCP: Secret Laboratory: плагин не загружается
Так выглядит сообщение:
[LabApi] System.BadImageFormatException: <Plugin file details>
Что за этим стоит: LabApi — это интерфейс плагинов SCP: Secret Laboratory. Он не смог загрузить файл плагина, потому что его формат не подходит к версии сервера. Обычно так бывает после обновления игры, когда плагин всё ещё собран под предыдущую версию, или когда файл был повреждён при загрузке. Затронутый плагин остаётся неактивным, сервер запускается без него.
Как это исправить:
- Проверь, указано ли в сообщении имя файла плагина.
- Заново загрузи плагин в версии для твоей текущей версии SCP:SL и перезапусти сервер. Поддерживаемые версии указаны на странице плагина.
- Если не знаешь, какой это плагин, удали в разделе Файлы последний добавленный файл из папки плагинов и запусти сервер снова.
- После загрузки сравни размер файла с оригиналом. Если он отличается, передача была неполной.
Полезно знать: основы по серверу ты найдёшь в статье Настройка сервера SCP Secret Laboratory.
Project Zomboid: карта или мод использует неизвестное свойство тайла
Так выглядит сообщение:
IsoPropertyTypeNotFoundException: Property Name not found: <Property>
В чём причина: Карты в Project Zomboid состоят из тайлов (Tiles). У каждого тайла есть свойства, которые определяют, например, является ли объект контейнером, дверью или препятствием. Карта или мод использует свойство, которое твоя версия Project Zomboid не знает. Затронутые объекты могут отсутствовать или работать неправильно, сервер при этом обычно продолжает работать. Часто карта или мод создан для другой версии игры, например после перехода на Build 42.
Как это исправить:
- Выясни, какая карта или какой мод затронут. Если сообщение появилось недавно, в первую очередь стоит заподозрить последнюю установленную или обновлённую.
- Обнови карту или мод до версии, которая подходит к твоей установленной версии Project Zomboid.
- Если проблема началась после обновления мода, верни предыдущую совместимую версию этого мода.
- Если хочешь полностью удалить мод с картой, сначала создай резервную копию в разделе Резервные копии. Если пропадёт карта, которую твоё сохранение уже использует, это может изменить мир.
Полезно знать: О переходе на Build 42 читай в руководстве Project Zomboid Build 42 на собственном сервере.
The Forest: «Bolt is already running» после перезапуска
Так выглядит сообщение:
BoltException: Bolt is already running, you must call BoltLauncher.Shutdown() before starting a new instance of Bolt.
at BoltCore.BeginStart (…)
В чём причина: Для многопользовательской игры The Forest использует сетевую библиотеку Bolt. Сообщение означает, что сервер попытался запустить второй экземпляр Bolt, хотя первый ещё работает. Такое может случиться после неудачного мягкого перезапуска, то есть перезапуска внутри работающей программы вместо настоящего перезапуска процесса. Из-за этого новая сессия не может нормально запуститься.
Как это исправить:
- Останови сервер в панели и подожди, пока он полностью выключится.
- После этого запусти его снова. Новый процесс запускает Bolt только один раз.
- Для перезапуска не используй функции в игре и перезагрузку во время работы, а всегда перезапускай сервер через панель.
- Для регулярных перезапусков настрой плановый перезапуск в разделе Задачи.
Полезно знать: Как это сделать, описано в руководстве Планирование автоматических перезапусков для твоего сервера.
The Forest не может считать сетевые адаптеры
Так выглядит сообщение:
NetworkInformationException: File not found.
at CoopDedicatedServerStarter.getMachineIp ()
В чём причина: При запуске выделенный сервер The Forest пытается определить свои сетевые адаптеры и, соответственно, собственный IP-адрес. Интерфейс операционной системы, к которому он при этом обращается, в среде сервера недоступен. Если сервер при этом всё равно доступен, сообщение ни на что не влияет.
Как это исправить:
- Проверь, доступен ли сервер: отображается ли он в списке серверов и могут ли игроки подключаться?
- Если да, сообщение можно игнорировать.
- Если нет, обнови сервер до актуального билда, то есть до новейшей серверной версии игры, и перезапусти его.
- Если сервер по-прежнему недоступен, создай тикет и укажи время появления сообщения. Среду запуска сервера ты не можешь изменить самостоятельно.
Полезно знать: Основы работы с сервером ты найдёшь в руководстве Настройка сервера The Forest.
Мод сообщает «CS0246: тип или пространство имён не найдено»
Так выглядит сообщение:
<File>.cs(<Line>,<Column>): error CS0246: The type or namespace name '<Type>' could not be found
В чём причина: компилятор, который превращает исходный код на C# в исполняемые части программы, не находит используемый тип. Имя не удаётся разрешить ни в имеющемся исходном коде, ни через подключённые библиотеки. Из-за этого затронутый мод не удаётся загрузить. Для поставляемых или изменённых файлов мода исходный код и библиотеки должны соответствовать версии игры.
Как это исправить:
- Прочитай полное сообщение об ошибке в Консоль. В нём указаны файл, строка и отсутствующий тип.
- Сохрани собственные изменения в разделе Файлы, прежде чем заменять файлы мода.
- Установи версию затронутого мода, подходящую к версии игры, вместе с необходимыми зависимостями. Если у тебя собственный исходный код, проверь написание, пространство имён и ссылки на библиотеки.
- Перезапусти сервер и проверь, не сообщает ли компилятор о других ошибках.
Твоего сообщения нет в списке?
Прочитай сообщение целиком в Консоль или в лог-файле игры, включая строки перед ним. В играх на .NET и Unity настоящая причина часто скрывается во внутреннем исключении. Какой плагин или мод задействован, подскажут названия папок и файлов в стеке вызовов. Перед любой заменой создай резервную копию в разделе Резервные копии. Сбои и неудачные обновления разобраны в статье Игровой сервер вылетает или обновление Steam не проходит. Если не получается разобраться, создай тикет и укажи время появления сообщения.