Перейти к содержимому

SKYMP WORLDS · Руководство для владельцев серверов

Подключи сервер. Сохрани свой мир.

Техническое руководство для независимых серверов SkyMP: регистрация, файлы, пакеты клиента, авторизация и работа с единым лаунчером.

Лаунчер 0.2.0 · Обновлено 22.10.2026

01Подключить существующий серверПроверь интерфейсы и требования, добавь нужные компоненты и протестируй свою установку.02Использовать форк SkyMPВозьми указанный исходный код за основу и проверь его интерфейсы для лаунчера.
01

Область применения и совместимость

#

Это руководство описывает единый лаунчер SkyMP Worlds 0.2.0 и интерфейсы, проверенные 22.10.2026. Можно дополнить существующий совместимый сервер SkyMP или взять за основу форк RealHartlMax/SkyMP. Регистрация в лаунчере не переносит автоматически данные игроков и игровой мир.

Гарантии совместимости нет. Запись в списке серверов, успешно загруженный манифест или успешная сборка ещё не доказывают, что игровая сессия работает. Должны соответствовать друг другу игровой протокол, сервер, нативный клиент, версия Skyrim, SKSE, Address Library, моды и порядок загрузки. Добавление HTTP-маршрутов не делает другой многопользовательский мод совместимым со SkyMP.

Сначала проверяй изменения на отдельной тестовой установке. До перехода сохрани конфигурацию сервера, данные мира, учётные записи и ключи. Примеры содержат заметные заглушки; размеры файлов, CRC32 и SHA-256 нужно вычислять по собственным реальным файлам.

↑ Наверх
02

Как взаимодействуют службы

#
КомпонентАдрес / протоколНазначение
Центральный список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 из выбранной папки игры.

↑ Наверх
03

Путь A: Использовать указанный форк

#
  1. Используй форк RealHartlMax. Проверь выбранный коммит или конкретный выпуск: произвольный пакет из upstream не обязательно содержит те же расширения для лаунчера.
  2. Для самостоятельной сборки следуй инструкции CMake и CONTRIBUTING.md в форке. Заменяй работающую установку только после резервного копирования и тестирования.
  3. Собранный сервер обычно находится в build/dist/server, клиент Windows — в build/dist/client. Готовые серверные пакеты запускаются через launch_server.bat или launch_server.sh. Требования к среде выполнения и первоначальная настройка описаны в серверном руководстве форка.
  4. Предоставь собственные мастер-файлы Skyrim / DLC в настроенном dataDir. Серверный пакет не заменяет собственную установленную игру. Сохрани существующий совместимый порядок загрузки.
  5. Зарегистрируй сервер, добавь настройки соединения, опубликуй моды и подходящий клиентский пакет, затем выполни проверки.

Создай отдельную копию исходников:

sh
git clone https://github.com/RealHartlMax/skymp.git skymp-server-source
cd skymp-server-source

Клонирование ещё не собирает и не запускает сервер. Для расширения лаунчера особенно важны skymp5-server/ts/launcherResources.ts, его регистрация в ui.ts и системы мастера / входа. Опубликованные маршруты модов сверены с локальным кодом; это не проверяет твои собственные бинарные файлы. Ссылка на репозиторий не публикует автоматически локальные изменения клиента, которые ещё не отправлены в него.

↑ Наверх
04

Путь B: Подключить существующий сервер

#

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

ТребованиеЧто предоставить или проверить
Игровой протоколUDP-сервер, совместимый с используемым нативным клиентом SkyMP
Данные соединенияПубличный игровой адрес, порт, базовый URL файлов, режим входа и источник клиента
Раздача модовПредпочтительно манифест v2 и проверяемые загрузки; альтернативно ограниченный старый контракт
Онлайн-входHeartbeat мастеру и серверная проверка сессий по контракту авторизации
Среда клиентаПолные клиентские файлы, подходящие игре и серверу; каталог для автоматического выбора версии
ПодтверждениеПроверки API, загрузки и восстановления, а затем настоящие игровые тесты

В форке новая раздача модов реализована отдельным компонентом ресурсов с явной конфигурацией. Просто скопировать файл недостаточно: HTTP-маршрутизатор должен зарегистрировать компонент, передать реальные исходные папки и порядок загрузки и правильно отвечать на ошибки. В другом серверном стеке можно реализовать тот же контракт. Названия полей JSON и правила загрузки остаются обязательными.

Работающий сервер по-прежнему можно открыть через Прямое подключение для первых тестов. Для публичного поиска по имени дополнительно нужны регистрация и действующий heartbeat. Публичная регистрация не подтверждает техническую совместимость.

↑ Наверх
05

Учётная запись, запись сервера и публичный ID

#
  1. Создай обычную учётную запись в кабинете владельца и при необходимости подтверди почту. Демо-аккаунты не используются для игрового входа.
  2. Добавь сервер с публичным адресом, игровым UDP-портом и лимитом игроков. Выбери статус active, когда он должен стать публичным.
  3. Открой Лаунчер и онлайн-вход у записи. Укажи публичный базовый адрес файлового сервера и полный URL каталога клиента. Описание, теги, страна, игровой режим, баннер, логотип и собственные ссылки сообщества являются публичными данными профиля.
  4. Перенеси показанные публичный ID сервера и закрытый API-ключ в конфигурацию сервера. Затем корректно перезапусти сервер.
  5. После принятого heartbeat сервер появится в центральном списке. Пустой ответ [] нормален, если активных записей нет. PHP-мастер скрывает записи без действующего heartbeat примерно через пять минут.
ЗначениеДоступностьПрименение
serverUidПубличноеПостоянный ID для выбора сервера и игровой сессии
masterKey в server-settings.jsonЗакрытоеАвторизация сервера перед мастером
masterKey в публичном спискеПубличноеИсторическое название поля; текущий PHP-мастер помещает сюда публичный ID сервера
Токен входа / игровая сессияЗакрытоеОграниченная по времени авторизация пользователя или сервера

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

↑ Наверх
06

Дополнить текущую конфигурацию сервера

#

Следующий JSON — пример для объединения, а не полная замена конфигурации. Сохрани игровой режим, пути данных, мир, прочие настройки и полный правильный порядок загрузки своего сервера. Замени публичный ID и закрытый ключ значениями своей записи.

json
{
  "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.

↑ Наверх
07

Доступность, TLS и обратный прокси

#
СоединениеТипичный доступПроверка
Игровой клиент → игровой сервер7777/UDP или твой игровой портБрандмауэр, NAT и публичный игровой адрес
Лаунчер → файловый сервер443/TCP через HTTPS или прямой HTTP-портАнонимный доступ к манифесту и файлам
Игровой сервер → мастерИсходящий 443/TCPDNS, сертификат 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 в браузере.

↑ Наверх
08

Подготовить моды, ресурсы и порядок загрузки

#
text
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 должны происходить из подходящей установленной игры самого игрока.

↑ Наверх
09

Манифест v2: Контракт для своей реализации

#

GET <resourceUrl>/api/launcher/manifest возвращает JSON без входа владельца, где version — строка "2". Числа и контрольные суммы следующего примера показывают структуру и не относятся к реальному игровому выпуску. Сервер обязан вычислить их из настоящих файлов.

json
{
  "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
hashsha256: и 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. Своя реализация должна соблюдать те же ограничения и защищённые целевые пути.

↑ Наверх
10

Маршруты загрузки и ответы HTTP

#

GET или HEAD <resourceUrl>/api/launcher/files/<id> должен отдавать файл, указанный в манифесте. ID ресурса обозначает разрешённый файл; нельзя трактовать его как произвольный путь файловой системы. Отдельный файловый хост допустим, если манифест и все относительные маршруты доступны под его базовым адресом.

ОтветПоведение форка / значение
200Полный файл и правильный Content-Length; у HEAD нет тела ответа
206Поддерживаемый одиночный диапазон байтов с Content-Range
304If-None-Match соответствует ETag
400Неверный ID ресурса
404API отключён или ID старой ревизии больше нет
409Файл изменился после индексации; запроси манифест заново
416Неверный диапазон байтов
503Публикация неполная, нечитаемая или противоречивая

Форк также отправляет X-Resource-Hash, ETag и Accept-Ranges: bytes. Неизменяемые ID файлов можно кэшировать надолго; манифест должен оставаться актуальным. Лаунчер проверяет размер и SHA-256 загруженных данных независимо от HTTP-заголовков. Ему нужны полные загрузки; поддержка HTTP Range не обещает возобновление прерванной загрузки в этой версии лаунчера.

↑ Наверх
11

Старые серверы: Прежний контракт

#

Только HTTP 404 от /api/launcher/manifest разрешает переход к /api/resources/manifest и /manifest.json. Ответ 503, неверный ответ v2 или несовпадение контрольной суммы не обходятся молчаливым переходом на старый режим.

Прежний контракт ресурсов использует version: "1", плоские имена файлов и загрузки через /api/resources/download/<name>. Он не описывает полностью подпапки современных пакетов ресурсов. Дополнительный игровой манифест может иметь такую структуру; числа также являются заглушками:

json
{
  "versionMajor": 1,
  "mods": [
    { "filename": "Skyrim.esm", "size": 249753412, "crc32": 123456789 }
  ],
  "loadOrder": ["Skyrim.esm"]
}

Без API ресурсов этот путь работает только тогда, когда все нужные файлы уже есть локально и соответствуют опубликованным размерам / CRC32. Он не исправляет прежнюю общую блокировку .esm и не добавляет отсутствующие загрузки собственных плагинов. Для новых интеграций и структурированных модпаков используй v2.

↑ Наверх
12

Публикация клиента, SKSE и Address Library

#

EXE лаунчера не содержит DLL SkyMP / SKSE. Публикуй подходящую комбинацию клиента отдельно. runtimeSource может указывать на один runtime-manifest.json или на catalog.json с несколькими проверенными версиями Skyrim. Каталог выбирает точное совпадение по реальной версии файла SkyrimSE.exe и не устанавливает другую, предположительно более новую версию игры вместо подходящей.

Пример каталога с относительным адресом манифеста; замени пример SHA-256 хэшем точного файла манифеста:

json
{
  "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 и скриптов готового клиента также должны входить в пакет:

text
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 и правильный файл адресов:

powershell
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 отсутствует и в манифесте сервера, и в выбранном профиле, лаунчер может использовать только уже установленные клиентские файлы: автоматическое обновление клиента не предлагается. Изменения опубликованных файлов обнаруживаются по манифесту и хэшам при следующей подготовке. Заново загружаются только отсутствующие или отличающиеся файлы. Закрытые данные входа и создаваемые настройки соединения исключены из клиентских пакетов.

↑ Наверх
13

Онлайн-вход и контракт сессий

#

Центральная платформа использует обычные учётные записи кабинета, явное согласие на игру и сессии, привязанные к серверу. 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 требуют подходящей настоящей интеграции провайдера. Публичное приглашение сообщества не является провайдером входа. Отдельный совместимый мастер можно настроить для прямых подключений; центрально зарегистрированный сервер использует параметры мастера из центрального списка.

↑ Наверх
14

Проверка до подключения игроков

#

Этап 1: Публичные HTTP-интерфейсы

В примерах PowerShell ниже используется curl.exe, чтобы не вызвать старый псевдоним PowerShell. В Linux команда называется curl и принимает те же параметры. Замени files.example.org окончательным публичным адресом.

powershell
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:

powershell
Get-FileHash -Algorithm SHA256 ./downloaded-file.bin

В Linux подходит sha256sum ./downloaded-file.bin. Также проверь, что неизвестные ID, изменённые файлы и неверные пути возвращают понятные ошибки и никогда не выдают произвольные файлы сервера.

Этап 2: Подготовка без запуска игры

Выбери отдельную подходящую тестовую папку игры с SkyrimSE.exe. Закрой Skyrim. Открой сервер в лаунчере, затем Параметры подключения и Подготовить файлы. Это не запускает игру, но изменяет подготовленную тестовую установку. Проверь подпапки, полноту клиентских файлов, порядок загрузки и созданные настройки соединения. Повтори подготовку: корректные файлы должны браться из кэша. Затем проверь Восстановить исходные файлы и переключение между двумя тестовыми профилями.

Лаунчер проверяет хэши и версии перед активацией. Неверный хэш, отсутствующая версия пакета или прерванная загрузка не должны активировать неполный выпуск. Исходники лаунчера также содержат временные HTTP-тесты / тесты восстановления и тест с отдельной копией нативного сервера.

Этап 3: Собственный полный игровой тест

Только теперь проведи настоящий тест Skyrim / SKSE с нужной версией: запуск, браузерный вход и согласие, проверка сессии, UDP-соединение, общий мир и повторное подключение. Дополнительные нативные плагины проверяй отдельно. Успешные файловые и API-проверки не заменяют этот тест. Зафиксируй реально проверенную ревизию сервера / клиента и модпак до публикации для игроков.

↑ Наверх
15

Обновления, откат и восстановление

#

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

Кэши лаунчера разделены по целевым серверам. Оригиналы и журнал активации находятся в <Skyrim>/.skymp-launcher/. Списки плагинов в профиле Skyrim и при необходимости Skyrim.ccc изменяются под выбранный порядок загрузки. Сохраняй журнал, пока файлы активны; не удаляй его как предполагаемое исправление. Восстановление может остановиться для защиты твоих собственных изменений управляемых файлов.

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

Если ID сервера заблокирован или скомпрометирован, смени ключи, обнови закрытые настройки и перезапусти heartbeat. Для поддержки достаточно публичного ID, времени, версий лаунчера / клиента / Skyrim и очищенных ошибок. Пароли, закрытые ключи мастера и сессии нельзя отправлять в Discord.

↑ Наверх
16

Диагностика конкретных ошибок

#
СимптомСледующая проверка
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. Устранение одной ошибки загрузки не доказывает, что все остальные нативные плагины подходят версии игры.

↑ Наверх
17

Источники, ревизия и ответственность

#

Руководство проверено по лаунчеру 0.2.0, локальным исходникам сервера на основе коммита a037003d57890b26ed21936ac2432c987aced878 и опубликованной реализации ресурсов указанного форка. Дата: 22.10.2026. Поздние коммиты, локальные расширения и другие форки могут отличаться. Комбинация в подготовленном каталоге клиента не обещает поддержку других версий игры; каждому выпуску всё ещё нужен полный игровой тест.

Этот раздел статический: ему не нужны процесс Node или база данных на хостинге. Он не развёртывает автоматически основной сайт, кабинет, мастер, файловый хост или игровой сервер. За работу отвечают соответствующие операторы и их проверенная комбинация сервера и клиента. Гарантия интеграции с существующими серверами или произвольными модпаками не предоставляется.

↑ Наверх