Это руководство описывает единый лаунчер SkyMP Worlds 0.2.0 и интерфейсы, проверенные 22.10.2026. Можно дополнить существующий совместимый сервер SkyMP или взять за основу форк RealHartlMax/SkyMP. Регистрация в лаунчере не переносит автоматически данные игроков и игровой мир.
Гарантии совместимости нет. Запись в списке серверов, успешно загруженный манифест или успешная сборка ещё не доказывают, что игровая сессия работает. Должны соответствовать друг другу игровой протокол, сервер, нативный клиент, версия Skyrim, SKSE, Address Library, моды и порядок загрузки. Добавление HTTP-маршрутов не делает другой многопользовательский мод совместимым со SkyMP.
Сначала проверяй изменения на отдельной тестовой установке. До перехода сохрани конфигурацию сервера, данные мира, учётные записи и ключи. Примеры содержат заметные заглушки; размеры файлов, CRC32 и SHA-256 нужно вычислять по собственным реальным файлам.
↑ Наверх| Компонент | Адрес / протокол | Назначение |
|---|---|---|
| Центральный список | https://api.skymp-worlds.net/list.php | Поиск серверов; адрес задан в лаунчере |
| Кабинет владельца | https://manage.skymp-worlds.net/ | Регистрация серверов, метаданные и закрытые ключи |
| Мастер авторизации | https://api.skymp-worlds.net | Вход, heartbeat и игровые сессии |
| Твой игровой сервер | Публичный адрес и UDP-порт, например 7777 | Непосредственное игровое соединение |
| Твой файловый сервер | Публичный базовый HTTP(S)-адрес, например https://files.example.org/ | Манифест модов и загрузка файлов |
| Каталог клиента | Полный URL файла catalog.json | Выбор подходящего нативного клиента и SKSE |
Игровой адрес, файловый сервер и мастер — разные назначения. resourceUrl обозначает базовый адрес файлового сервера, а не URL маршрута манифеста. Напротив, runtimeSource — полный URL каталога или манифеста клиента. Лаунчер подготавливает файлы, затем запускает загрузчик SKSE из выбранной папки игры.
- Используй форк RealHartlMax. Проверь выбранный коммит или конкретный выпуск: произвольный пакет из upstream не обязательно содержит те же расширения для лаунчера.
- Для самостоятельной сборки следуй инструкции CMake и CONTRIBUTING.md в форке. Заменяй работающую установку только после резервного копирования и тестирования.
- Собранный сервер обычно находится в
build/dist/server, клиент Windows — вbuild/dist/client. Готовые серверные пакеты запускаются черезlaunch_server.batилиlaunch_server.sh. Требования к среде выполнения и первоначальная настройка описаны в серверном руководстве форка. - Предоставь собственные мастер-файлы Skyrim / DLC в настроенном
dataDir. Серверный пакет не заменяет собственную установленную игру. Сохрани существующий совместимый порядок загрузки. - Зарегистрируй сервер, добавь настройки соединения, опубликуй моды и подходящий клиентский пакет, затем выполни проверки.
Создай отдельную копию исходников:
git clone https://github.com/RealHartlMax/skymp.git skymp-server-source
cd skymp-server-sourceКлонирование ещё не собирает и не запускает сервер. Для расширения лаунчера особенно важны skymp5-server/ts/launcherResources.ts, его регистрация в ui.ts и системы мастера / входа. Опубликованные маршруты модов сверены с локальным кодом; это не проверяет твои собственные бинарные файлы. Ссылка на репозиторий не публикует автоматически локальные изменения клиента, которые ещё не отправлены в него.
Дополняй текущий сервер целенаправленно. Единый лаунчер не меняет логику твоего игрового режима или формат базы данных. Другая реализация может потребовать дополнительных изменений.
| Требование | Что предоставить или проверить |
|---|---|
| Игровой протокол | UDP-сервер, совместимый с используемым нативным клиентом SkyMP |
| Данные соединения | Публичный игровой адрес, порт, базовый URL файлов, режим входа и источник клиента |
| Раздача модов | Предпочтительно манифест v2 и проверяемые загрузки; альтернативно ограниченный старый контракт |
| Онлайн-вход | Heartbeat мастеру и серверная проверка сессий по контракту авторизации |
| Среда клиента | Полные клиентские файлы, подходящие игре и серверу; каталог для автоматического выбора версии |
| Подтверждение | Проверки API, загрузки и восстановления, а затем настоящие игровые тесты |
В форке новая раздача модов реализована отдельным компонентом ресурсов с явной конфигурацией. Просто скопировать файл недостаточно: HTTP-маршрутизатор должен зарегистрировать компонент, передать реальные исходные папки и порядок загрузки и правильно отвечать на ошибки. В другом серверном стеке можно реализовать тот же контракт. Названия полей JSON и правила загрузки остаются обязательными.
Работающий сервер по-прежнему можно открыть через Прямое подключение для первых тестов. Для публичного поиска по имени дополнительно нужны регистрация и действующий heartbeat. Публичная регистрация не подтверждает техническую совместимость.
↑ Наверх- Создай обычную учётную запись в кабинете владельца и при необходимости подтверди почту. Демо-аккаунты не используются для игрового входа.
- Добавь сервер с публичным адресом, игровым UDP-портом и лимитом игроков. Выбери статус
active, когда он должен стать публичным. - Открой Лаунчер и онлайн-вход у записи. Укажи публичный базовый адрес файлового сервера и полный URL каталога клиента. Описание, теги, страна, игровой режим, баннер, логотип и собственные ссылки сообщества являются публичными данными профиля.
- Перенеси показанные публичный ID сервера и закрытый API-ключ в конфигурацию сервера. Затем корректно перезапусти сервер.
- После принятого heartbeat сервер появится в центральном списке. Пустой ответ
[]нормален, если активных записей нет. PHP-мастер скрывает записи без действующего heartbeat примерно через пять минут.
| Значение | Доступность | Применение |
|---|---|---|
serverUid | Публичное | Постоянный ID для выбора сервера и игровой сессии |
masterKey в server-settings.json | Закрытое | Авторизация сервера перед мастером |
masterKey в публичном списке | Публичное | Историческое название поля; текущий PHP-мастер помещает сюда публичный ID сервера |
| Токен входа / игровая сессия | Закрытое | Ограниченная по времени авторизация пользователя или сервера |
Никогда не публикуй закрытый ключ heartbeat в описании, тегах или загрузках. Он не должен попадать в профиль лаунчера игрока. Меняй ключ через кабинет, затем обновляй закрытую конфигурацию сервера и перезапускай его.
↑ НаверхСледующий JSON — пример для объединения, а не полная замена конфигурации. Сохрани игровой режим, пути данных, мир, прочие настройки и полный правильный порядок загрузки своего сервера. Замени публичный ID и закрытый ключ значениями своей записи.
{
"port": 7777,
"uiPort": 8080,
"listenHost": "0.0.0.0",
"uiListenHost": "0.0.0.0",
"master": "https://api.skymp-worlds.net",
"serverUid": "srv_REPLACE_WITH_PUBLIC_ID",
"masterKey": "REPLACE_WITH_PRIVATE_SERVER_KEY",
"offlineMode": false,
"launcherResources": {
"enabled": true,
"directory": "./client-resources",
"runtimeSource": "https://update.skymp-worlds.net/client-runtime/catalog.json"
}
}Форк разрешает launcherResources.directory относительно рабочей папки серверного процесса. Запускай сервер из предусмотренной папки пакета или осознанно задай абсолютный путь. Без явных настроек раздача модов включена и использует ./client-resources. Значение enabled: false отключает новый API модов.
Каталог на домене обновлений должен действительно быть загружен и подходить твоей комбинации клиента и сервера. Этот URL не обещает поддержку любой версии Skyrim. Вместо него можно предоставить собственный полный catalog.json. Согласуй данные манифеста сервера и кабинета; после изменения параметров загрузки нужен новый heartbeat.
| Соединение | Типичный доступ | Проверка |
|---|---|---|
| Игровой клиент → игровой сервер | 7777/UDP или твой игровой порт | Брандмауэр, NAT и публичный игровой адрес |
| Лаунчер → файловый сервер | 443/TCP через HTTPS или прямой HTTP-порт | Анонимный доступ к манифесту и файлам |
| Игровой сервер → мастер | Исходящий 443/TCP | DNS, сертификат TLS и heartbeat |
| Игрок → кабинет / мастер | HTTPS | Вход, согласие и создание сессии |
PHP-хостинг может обслуживать кабинет, шлюз мастера, документацию и статические загрузки. Он не заменяет постоянно работающий нативный игровой сервер. Обычный обратный HTTP-прокси не перенаправляет игровой UDP-порт автоматически.
Для прокси используй окончательный публичный базовый URL, например https://files.example.org/realm/. Под этим префиксом должны быть доступны api/launcher/manifest и относительные маршруты файлов. Лаунчер не следует HTTP-перенаправлениям для манифестов и файлов. Указывай конечный HTTPS-адрес с подходящим именем хоста; страницы входа, Basic Auth и перенаправления не являются публичной раздачей.
URL загрузок и каталогов не должны содержать логин / пароль, параметры запроса или фрагменты. Публичный PHP-мастер отклоняет частные, loopback- и link-local-адреса, в том числе полученные через DNS. 127.0.0.1 со стороны игрока означает его собственный компьютер. Для локальной разработки используй прямое локальное подключение; не публикуй внутренние адреса в рабочем профиле. Файловые запросы лаунчера выполняются в Rust-бэкенде и не требуют разрешения CORS в браузере.
server-settings.json
data/
Skyrim.esm
World.esp
World.bsa
client-resources/
Data/
World - Textures.bsa
Scripts/WorldClient.pex
meshes/World/sword.nif
textures/World/sword.dds
SKSE/Plugins/World.iniФорк автоматически включает собственные плагины из loadOrder и соответствующие архивы NAME.bsa или NAME - *.bsa из dataDir. Дополнительные клиентские файлы размещай под client-resources/Data/ с окончательной структурой папок. Это не раздаёт автоматически серверные скрипты из data/scripts/ как клиентские.
Все дополнительные .esm, .esp и .esl должны входить в фактический порядок загрузки сервера. Если плагин есть и в папке данных, и в папке ресурсов, обе копии должны совпадать. Плагины и BSA-архивы лежат непосредственно в Data/; текстуры, модели и скрипты сохраняют подпапки. После изменения порядка загрузки перезапускай сервер. Индекс ресурсов использует короткий кэш метаданных примерно на две секунды.
kind | Допустимое содержимое пакета модов |
|---|---|
mod | .esm, .esp, .esl |
archive | .bsa |
script | Скомпилированные .pex под Data/Scripts/ |
asset | Поддерживаемые модели, текстуры, анимации, звук, интерфейс, языковые файлы и изображения |
config | Пассивные .ini, .json, .xml, .txt, .toml, .yaml, .yml |
Нативные DLL и JavaScript относятся к отдельному клиентскому пакету. Защищённые файлы платформы и входа, мастер-файлы Bethesda и файлы Creation Club не раздаются как моды. Отклоняются выход за пределы пути, символьные ссылки / junction, имена устройств Windows, двоеточия, конечные точки / пробелы и пути, различающиеся только регистром. Новый API модов ограничивает целевой путь 240 байтами UTF-8.
ZIP / 7z / FOMOD не распаковываются и не устанавливаются интерактивно у игрока. Самостоятельно подготовь нужный набор модов и публикуй только необходимые файлы, предназначенные для распространения. Файлы Skyrim / DLC должны происходить из подходящей установленной игры самого игрока.
↑ НаверхGET <resourceUrl>/api/launcher/manifest возвращает JSON без входа владельца, где version — строка "2". Числа и контрольные суммы следующего примера показывают структуру и не относятся к реальному игровому выпуску. Сервер обязан вычислить их из настоящих файлов.
{
"version": "2",
"revision": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
"generatedAt": "2026-10-21T12:00:00.000Z",
"totalSize": 12345,
"loadOrder": ["Skyrim.esm", "World.esp"],
"requiredLocalFiles": [
{ "filename": "Skyrim.esm", "size": 249753412, "crc32": 123456789 }
],
"runtimeSource": "https://update.skymp-worlds.net/client-runtime/catalog.json",
"resources": [
{
"name": "World.esp",
"path": "Data/World.esp",
"kind": "mod",
"size": 12345,
"hash": "sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
"downloadPath": "api/launcher/files/1111111111111111111111111111111111111111111111111111111111111111"
}
]
}| Поле | Значение |
|---|---|
loadOrder | Непустой упорядоченный список плагинов; не выводи имена из папок |
requiredLocalFiles | Локальные требования Bethesda / Creation Club с именем, размером в байтах и CRC32; без URL загрузки |
resources[].path | Уникальный путь назначения относительно папки игры, начинающийся с Data/ |
name | Отображаемое имя файла; может повторяться в разных папках ресурсов |
size | Точное число байтов как число JSON |
hash | sha256: и 64 шестнадцатеричных символа хэша реального содержимого |
downloadPath | Относительный маршрут api/launcher/files/ с непрозрачным шестнадцатеричным ID из 64 символов |
totalSize | Общий размер ресурсов модов без отдельного клиентского пакета |
revision, generatedAt | Идентификатор публикации и время создания |
runtimeSource | Необязательная полная ссылка на каталог / манифест клиента |
Генератор должен проверять разрешённые исходные корни, исключать ссылки, нормализовать целевые пути по правилам Windows, находить дубликаты и вычислять размер / SHA-256 по прочитанному содержимому. CRC32 применяется к локальным требованиям игры и не заменяет SHA-256 при загрузке. Не возвращай противоречивые метаданные, если файлы исчезают или изменяются во время публикации. Ошибка лучше неполного успешного списка.
Текущие ограничения: не более 10 000 файлов модов, 8 GiB на файл, 64 GiB на пакет модов; размер JSON-манифеста в лаунчере ограничен 8 MiB. Своя реализация должна соблюдать те же ограничения и защищённые целевые пути.
↑ НаверхGET или HEAD <resourceUrl>/api/launcher/files/<id> должен отдавать файл, указанный в манифесте. ID ресурса обозначает разрешённый файл; нельзя трактовать его как произвольный путь файловой системы. Отдельный файловый хост допустим, если манифест и все относительные маршруты доступны под его базовым адресом.
| Ответ | Поведение форка / значение |
|---|---|
200 | Полный файл и правильный Content-Length; у HEAD нет тела ответа |
206 | Поддерживаемый одиночный диапазон байтов с Content-Range |
304 | If-None-Match соответствует ETag |
400 | Неверный ID ресурса |
404 | API отключён или ID старой ревизии больше нет |
409 | Файл изменился после индексации; запроси манифест заново |
416 | Неверный диапазон байтов |
503 | Публикация неполная, нечитаемая или противоречивая |
Форк также отправляет X-Resource-Hash, ETag и Accept-Ranges: bytes. Неизменяемые ID файлов можно кэшировать надолго; манифест должен оставаться актуальным. Лаунчер проверяет размер и SHA-256 загруженных данных независимо от HTTP-заголовков. Ему нужны полные загрузки; поддержка HTTP Range не обещает возобновление прерванной загрузки в этой версии лаунчера.
Только HTTP 404 от /api/launcher/manifest разрешает переход к /api/resources/manifest и /manifest.json. Ответ 503, неверный ответ v2 или несовпадение контрольной суммы не обходятся молчаливым переходом на старый режим.
Прежний контракт ресурсов использует version: "1", плоские имена файлов и загрузки через /api/resources/download/<name>. Он не описывает полностью подпапки современных пакетов ресурсов. Дополнительный игровой манифест может иметь такую структуру; числа также являются заглушками:
{
"versionMajor": 1,
"mods": [
{ "filename": "Skyrim.esm", "size": 249753412, "crc32": 123456789 }
],
"loadOrder": ["Skyrim.esm"]
}Без API ресурсов этот путь работает только тогда, когда все нужные файлы уже есть локально и соответствуют опубликованным размерам / CRC32. Он не исправляет прежнюю общую блокировку .esm и не добавляет отсутствующие загрузки собственных плагинов. Для новых интеграций и структурированных модпаков используй v2.
EXE лаунчера не содержит DLL SkyMP / SKSE. Публикуй подходящую комбинацию клиента отдельно. runtimeSource может указывать на один runtime-manifest.json или на catalog.json с несколькими проверенными версиями Skyrim. Каталог выбирает точное совпадение по реальной версии файла SkyrimSE.exe и не устанавливает другую, предположительно более новую версию игры вместо подходящей.
Пример каталога с относительным адресом манифеста; замени пример SHA-256 хэшем точного файла манифеста:
{
"version": 2,
"packages": [
{
"gameVersion": "1.7.104.0",
"manifest": "1.7.104.0/client-release/runtime-manifest.json",
"sha256": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
}
]
}Выбранный манифест клиента использует число version: 1, поля gameVersion, skseVersion и files. Каждый файл имеет path, size и SHA-256 без префикса sha256:. Полный пакет с версией требует как минимум эти основные пути; все дополнительные файлы среды, CEF и скриптов готового клиента также должны входить в пакет:
Data/SKSE/Plugins/SkyrimPlatform.dll
Data/SKSE/Plugins/MpClientPlugin.dll
Data/Platform/Plugins/skymp5-client.js
Data/Platform/Distribution/RuntimeDependencies/SkyrimPlatformImpl.dll
skse64_loader.exe
skse64_1_7_104.dll
Data/SKSE/Plugins/versionlib-1-7-104-0.binЭти семь имён показывают комбинацию Skyrim 1.7.104.0 и SKSE 2.3.1; это не полный список файлов и не общая гарантия. Другим версиям игры нужны соответствующие файлы и нативная поддержка. В проверенных версиях Address Library использует формат 1 для ветки 1.5, формат 2 для 1.6 и формат 5 для 1.7. Новая Address Library не делает автоматически совместимой старую несовместимую DLL плагина.
Создавай пакеты инструментами из репозитория лаунчера, а не из папки сервера. Следующие команды PowerShell предполагают готовую сборку клиента, распакованный подходящий архив SKSE и правильный файл адресов:
node launcher/scripts/create-runtime-manifest.mjs `
--source C:/Build/skymp/build/dist/client `
--output C:/Publish/client-runtime/1.7.104.0/client-release `
--game-version 1.7.104.0 `
--skse-version 2.3.1 `
--skse-source C:/Packages/skse64_2_03_01 `
--address-library C:/Packages/AddressLibrary/SKSE/Plugins/versionlib-1-7-104-0.bin
node launcher/scripts/create-runtime-catalog.mjs `
--root C:/Publish/client-runtime `
--manifest 1.7.104.0/client-release/runtime-manifest.jsonВыходная папка пакета должна быть новой. Повторяй --manifest для дополнительных версий игры; каждой версии соответствует ровно одна текущая запись каталога, всего не более 512. Параметр --replace служит для осознанной замены существующего каталога. Сначала полностью загрузи новые папки пакетов, а каталог переключай последним. Каталог проверяется заново; совпадающие хэши файлов позволяют использовать кэш.
Инструмент исключает личные настройки соединения, сохранённую авторизацию и файлы Bethesda, копирует соответствующие скрипты SKSE и имеющуюся документацию SKSE. Публикуй необходимые лицензии. Явно выбранный источник клиента в расширенном профиле лаунчера имеет приоритет; убери ручной выбор для автоматического предложения сервера. Локальная папка сборки не получает обновления из интернета.
Обычные целевые пути задаются относительно папки игры: Data/Platform/Plugins для клиентских скриптов, Data/SKSE/Plugins для нативных плагинов и Address Library, корень игры для SKSE. Форк читает папки плагинов из Data/SKSE/Plugins/SkyrimPlatform.ini; стандартное значение — Data/Platform/Plugins;Data/Platform/PluginsDev. Старые файлы в Platform/Plugins без Data/ не используются и не управляются лаунчером автоматически.
Если runtimeSource отсутствует и в манифесте сервера, и в выбранном профиле, лаунчер может использовать только уже установленные клиентские файлы: автоматическое обновление клиента не предлагается. Изменения опубликованных файлов обнаруживаются по манифесту и хэшам при следующей подготовке. Заново загружаются только отсутствующие или отличающиеся файлы. Закрытые данные входа и создаваемые настройки соединения исключены из клиентских пакетов.
Центральная платформа использует обычные учётные записи кабинета, явное согласие на игру и сессии, привязанные к серверу. offlineMode должен совпадать в сервере и профиле соединения. Переключение только лаунчера в офлайн не меняет авторизацию сервера.
| Метод и маршрут мастера | Назначение |
|---|---|
GET /api/users/login-discord?state=<64-hex> | Открыть в браузере вход в аккаунт / игру |
GET /api/users/login-discord/status?state=<64-hex> | После согласия получить токен входа и числовой ID; до согласия 401 |
POST /api/users/me/play/<serverUid> | Запросить сессию для публичного ID сервера с токеном входа |
POST /api/servers/<privateMasterKey> | Heartbeat сервера, например с online, maxPlayers и необязательным serverUid |
GET /api/servers/<privateMasterKey>/sessions/<session> | Проверить сессию на игровом сервере; успешный ответ содержит user.id и user.name |
GET /api/servers/<serverUid>/manifest.json | Получить публичный игровой манифест через прокси мастера |
GET /api/servers/<serverUid>/serverinfo | Получить публичные свойства соединения |
POST /api/users/me/play/... передаёт токен входа в заголовке Authorization; PHP-мастер также принимает префикс Bearer. Ответ содержит session. Для heartbeat и проверки сессии закрытый ключ использует только игровой сервер. Считай соответствующие строки серверных журналов и URL конфиденциальными и удаляй ключи перед запросом поддержки.
Сессия действует только для предназначенного сервера и его текущего закрытого ключа. Истечение срока, выход из кабинета и смена ключа могут аннулировать сессии. Сервер обязан отклонять недействительные сессии. Новый мастер не должен переназначать существующие числовые игровые ID без запланированного переноса данных.
Историческое название маршрута login-discord у этого PHP-мастера не означает автоматически настроенный Discord OAuth или проверку гильдии. Дополнительные правила ролей / гильдий Discord требуют подходящей настоящей интеграции провайдера. Публичное приглашение сообщества не является провайдером входа. Отдельный совместимый мастер можно настроить для прямых подключений; центрально зарегистрированный сервер использует параметры мастера из центрального списка.
Этап 1: Публичные HTTP-интерфейсы
В примерах PowerShell ниже используется curl.exe, чтобы не вызвать старый псевдоним PowerShell. В Linux команда называется curl и принимает те же параметры. Замени files.example.org окончательным публичным адресом.
curl.exe --fail-with-body https://api.skymp-worlds.net/health
curl.exe --fail-with-body https://api.skymp-worlds.net/list.php
curl.exe --fail-with-body https://files.example.org/api/launcher/manifest
curl.exe --fail-with-body https://update.skymp-worlds.net/client-runtime/catalog.jsonОжидаются ответы JSON без страницы входа и перенаправления. Проверь публичный ID, базовый адрес файлов, режим входа, порядок загрузки и источник клиента. Закрытый ключ сервера не должен появляться в публичном списке. Загрузи хотя бы один реальный ресурс по опубликованному ID и сравни локальную контрольную сумму с hash:
Get-FileHash -Algorithm SHA256 ./downloaded-file.binВ Linux подходит sha256sum ./downloaded-file.bin. Также проверь, что неизвестные ID, изменённые файлы и неверные пути возвращают понятные ошибки и никогда не выдают произвольные файлы сервера.
Этап 2: Подготовка без запуска игры
Выбери отдельную подходящую тестовую папку игры с SkyrimSE.exe. Закрой Skyrim. Открой сервер в лаунчере, затем Параметры подключения и Подготовить файлы. Это не запускает игру, но изменяет подготовленную тестовую установку. Проверь подпапки, полноту клиентских файлов, порядок загрузки и созданные настройки соединения. Повтори подготовку: корректные файлы должны браться из кэша. Затем проверь Восстановить исходные файлы и переключение между двумя тестовыми профилями.
Лаунчер проверяет хэши и версии перед активацией. Неверный хэш, отсутствующая версия пакета или прерванная загрузка не должны активировать неполный выпуск. Исходники лаунчера также содержат временные HTTP-тесты / тесты восстановления и тест с отдельной копией нативного сервера.
Этап 3: Собственный полный игровой тест
Только теперь проведи настоящий тест Skyrim / SKSE с нужной версией: запуск, браузерный вход и согласие, проверка сессии, UDP-соединение, общий мир и повторное подключение. Дополнительные нативные плагины проверяй отдельно. Успешные файловые и API-проверки не заменяют этот тест. Зафиксируй реально проверенную ревизию сервера / клиента и модпак до публикации для игроков.
↑ НаверхПубликуй новые моды и клиентские файлы как согласованный выпуск. Синхронизируй порядок загрузки, данные сервера и клиентские ресурсы. Для обновлений клиента создавай новые неизменяемые пути пакетов, загружай все файлы и переключай каталог последним. Изменение каталога не заменяет необходимый перезапуск сервера после изменения плагинов.
Кэши лаунчера разделены по целевым серверам. Оригиналы и журнал активации находятся в <Skyrim>/.skymp-launcher/. Списки плагинов в профиле Skyrim и при необходимости Skyrim.ccc изменяются под выбранный порядок загрузки. Сохраняй журнал, пока файлы активны; не удаляй его как предполагаемое исправление. Восстановление может остановиться для защиты твоих собственных изменений управляемых файлов.
До обновлений отдельно от лаунчера сохраняй данные мира и конфигурацию сервера. Оператор центральной PHP-платформы должен совместно сохранять хранилище аккаунтов и закрытое хранилище авторизации с сопоставлением ID и ключами. Откат каталога клиента меняет только предлагаемые клиентские файлы, а не отменяет автоматически перенос серверных данных или мира.
Если ID сервера заблокирован или скомпрометирован, смени ключи, обнови закрытые настройки и перезапусти heartbeat. Для поддержки достаточно публичного ID, времени, версий лаунчера / клиента / Skyrim и очищенных ошибок. Пароли, закрытые ключи мастера и сессии нельзя отправлять в Discord.
↑ Наверх| Симптом | Следующая проверка |
|---|---|
Heartbeat возвращает 404 с Server is not registered yet | Старый маршрут реестра: обнови корень API, включая api/servers/index.php и native-heartbeat.php, вместе с кабинетом; сохрани закрытые настройки и данные |
| Сервер не находится по имени | Проверь статус active, публичный адрес, действующий закрытый ключ и свежий heartbeat |
Новый маршрут манифеста возвращает 404 | Проверь версию форка / маршрутизатора и enabled; только тогда предусмотрен ограниченный старый режим |
Манифест возвращает 503 | Проверь журнал сервера, исходные папки, ссылки, дубликаты путей и незавершённую публикацию |
Загрузка возвращает 409 или неверный хэш | Заверши публикацию, получи новый манифест и переиндексируй реальные содержимое и размеры |
Прокси мастера возвращает 502 | Проверь публичный URL файлов, DNS / TLS, доступность и запрет частных адресов; убери перенаправления |
| Онлайн-сессия недействительна | Не путай публичный serverUid с закрытым masterKey; проверь режим входа, смену ключей, срок и согласие |
/account или маршрут входа возвращает 404 | Проверь корень API-сайта, Apache rewrite / передачу Authorization и настройки мастера |
| Файлы готовы, но игра не подключается | Проверь UDP-порт, брандмауэр / NAT, игровой протокол и реальную совместимость сервера и клиента |
Ошибка REL/ID.h / Address Library | Определи сбойную DLL плагина; вместе проверь версию Skyrim, SKSE, ожидаемое имя файла и нативный формат данных |
| Новейший файл адресов есть, но ошибка остаётся | Старая DLL может искать неверный файл или не понимать новый формат; обнови DLL вместо переименования BIN |
| Клиентские файлы остаются старыми | Проверь ручной источник клиента в расширенном профиле, используемый runtimeSource и хэш записи каталога |
| Восстановление отказывается менять файлы | Закрой игру, сохрани сторонние изменения управляемых файлов и оставь журнал; не удаляй вслепую |
За помощью обращайся в Discord SkyMP Worlds. Устранение одной ошибки загрузки не доказывает, что все остальные нативные плагины подходят версии игры.
↑ НаверхРуководство проверено по лаунчеру 0.2.0, локальным исходникам сервера на основе коммита a037003d57890b26ed21936ac2432c987aced878 и опубликованной реализации ресурсов указанного форка. Дата: 22.10.2026. Поздние коммиты, локальные расширения и другие форки могут отличаться. Комбинация в подготовленном каталоге клиента не обещает поддержку других версий игры; каждому выпуску всё ещё нужен полный игровой тест.
- Форк сервера и исходники
- Манифест модов и файловые маршруты форка
- Мастер сервера / heartbeat
- Серверный вход
- Лаунчер, загрузчик и инструменты публикации
- Официальные версии SKSE
Этот раздел статический: ему не нужны процесс Node или база данных на хостинге. Он не развёртывает автоматически основной сайт, кабинет, мастер, файловый хост или игровой сервер. За работу отвечают соответствующие операторы и их проверенная комбинация сервера и клиента. Гарантия интеграции с существующими серверами или произвольными модпаками не предоставляется.
↑ Наверх