LuxelSetManager

Просмотры: 56
  • ŔØ₲ŲĒᏃ᙭Ċ 🌌™ 🅳🆅🆁🅺 Разработчик

Настройки игроков

UserSettings.json — это персональные настройки игрока в LuxelSetManager. Они хранят выбранные пресеты, владение предустановленными пресетами, сроки владения и техническое состояние некоторых систем, например использованные заряды точек спавна.


Где хранится файл

Для каждого игрока создаётся отдельная папка по SteamID64:

profiles\RZXC\LuxelSetManager\Users\<SteamID>\UserSettings.json

Например:

profiles\RZXC\LuxelSetManager\Users\76561199190066861\UserSettings.json

Если файла нет, сервер создаст его автоматически при первом обращении к настройкам игрока.


Важное про кэширование

Настройки игроков кэшируются на сервере в памяти.

Это значит, что файл UserSettings.json нельзя просто отредактировать на работающем сервере и ожидать, что изменения сразу применятся.

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

Безопасные варианты:

  • остановить сервер, изменить файл, затем запустить сервер;

  • использовать API-папку profiles\RZXC\LuxelSetManager\API;

  • использовать прямые функции API или OpenAPI из серверного кода.


Основная структура

Пример сокращённого UserSettings.json:

{
    "SteamID": "76561199190066861",
    "UsedMainWeaponID": "AKM",
    "UsedSecondaryWeaponID": "0_EMPTY_SECONDARY",
    "UsedPistolWeaponID": "MakarovIJ70",
    "UsedKnifeWeaponID": "CombatKnife",
    "UsedEquipmentID": "PolicemanOrel",
    "UsedSpawnPointID": "Balota",
    "UsedSurvivorClassname": "SurvivorM_Boris",
    "OwnedWeaponsIDs_ExpiringDate": {},
    "OwnedEquipmentsIDs_ExpiringDate": {},
    "OwnedSpawnPointsIDs_ExpiringDate": {},
    "OwnedWeapons": [
        {
            "PresetID": "AKM",
            "ExpiringDate": "FOREVER"
        }
    ],
    "OwnedEquipments": [
        {
            "PresetID": "PolicemanOrel",
            "ExpiringDate": "29.08.2026 18:30"
        }
    ],
    "OwnedSpawnPoints": [
        {
            "PresetID": "Balota",
            "ExpiringDate": "FOREVER"
        }
    ],
    "UsedSpawnPoints": []
}



SteamID

Настройка: SteamID

Тип: string

SteamID64 игрока, которому принадлежат настройки.

"SteamID": "76561199190066861"

При загрузке через API это обязательное поле. Если оно пустое, файл будет отправлен в BadRequests.


Выбранные пресеты

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

Используются поля:

  • UsedMainWeaponID — выбранное основное оружие;

  • UsedSecondaryWeaponID — выбранное дополнительное оружие;

  • UsedPistolWeaponID — выбранный пистолет;

  • UsedKnifeWeaponID — выбранное холодное оружие;

  • UsedEquipmentID — выбранная экипировка;

  • UsedSpawnPointID — выбранная точка спавна;

  • UsedSurvivorClassname — выбранный персонаж.

Пример:

"UsedMainWeaponID": "AKM",
"UsedEquipmentID": "PolicemanOrel",
"UsedSpawnPointID": "Balota",
"UsedSurvivorClassname": "SurvivorM_Boris"

Владение пресетами

Предустановленные пресеты выдаются через массивы владения:

  • OwnedWeapons — доступные игроку предустановленные оружия;

  • OwnedEquipments — доступные игроку предустановленные экипировки;

  • OwnedSpawnPoints — доступные игроку предустановленные точки спавна.

Каждый элемент массива состоит из двух полей:

  • PresetID — ID пресета;

  • ExpiringDate — срок действия.

Пример:

"OwnedWeapons": [
    {
        "PresetID": "AK101_Black_Silenced",
        "ExpiringDate": "29.08.2026 18:30"
    },
    {
        "PresetID": "AKM",
        "ExpiringDate": "FOREVER"
    }
]

ExpiringDate

Настройка: ExpiringDate

Тип: string

Срок действия владения пресетом.

Поддерживаются два основных варианта:

"ExpiringDate": "FOREVER"


"ExpiringDate": "29.08.2026 18:30"

FOREVER означает владение навсегда.

Дата указывается в формате:

ДД.ММ.ГГГГ ЧЧ:ММ

$ALL_PRESETS$

$ALL_PRESETS$ — специальный ID, который выдаёт игроку доступ ко всем предустановленным пресетам определённого типа.

Он работает отдельно для каждой категории:

"OwnedWeapons": [
    {
        "PresetID": "$ALL_PRESETS$",
        "ExpiringDate": "FOREVER"
    }
]


"OwnedEquipments": [
    {
        "PresetID": "$ALL_PRESETS$",
        "ExpiringDate": "29.08.2026 18:30"
    }
]


"OwnedSpawnPoints": [
    {
        "PresetID": "$ALL_PRESETS$",
        "ExpiringDate": "FOREVER"
    }
]

Если у игрока есть и конкретный пресет, и $ALL_PRESETS$, мод использует самый долгий срок доступа.

Например:

  • $ALL_PRESETS$ действует до 20.08.2026 12:00;

  • конкретный пресет AKM действует до 25.08.2026 12:00;

  • для AKM будет считаться более поздний срок.


UsedSpawnPoints

UsedSpawnPoints — технический массив, который хранит использованные заряды точек спавна.

Он нужен для системы UsesLimit и UseCooldown у пресетов точек спавна.

Структура элемента:

{
    "PresetID": "Balota",
    "UsedDates": [
        "29.08.2026 18:30:15"
    ]
}

UsedDates — это даты фактического использования зарядов. Пока cooldown не истёк, дата считается активной и занимает один заряд. Когда cooldown истекает, мод удаляет эту дату. Если у пресета больше не осталось активных дат, запись из UsedSpawnPoints может быть удалена полностью.


Обновление через API-папку

Для безопасного обновления UserSettings на работающем сервере используйте API-папку:

profiles\RZXC\LuxelSetManager\API
  1. Скопируйте UserSettings.json нужного игрока в любое безопасное место и отредактируйте новый файл как Вам необходимо. Не переименовывайте его (либо назовите его так, чтобы в названии был UserSettings, например: UserSettings_New.json).

  1. Перекиньте отредактированный файл в папку по пути profiles\RZXC\LuxelSetManager\API

  2. Файл в ту же секунду удалится и прочитается сервером. В случае успеха применятся и сохранятся новые настройки.

Внутри файла должен быть полноценный JSON настроек игрока с заполненным SteamID.

После обработки сервер:

  • прочитает файл как LXSM_UserSettings;

  • проверит, что JSON валидный;

  • проверит, что SteamID не пустой;

  • подготовит массивы;

  • восстановит серверные ссылки на выбранные пресеты по ID;

  • положит настройки игрока в кэш;

  • сохранит их в Users\<SteamID>\UserSettings.json;

  • уведомит клиента, если у игрока открыто меню;

  • переместит исходный request-файл в архив.


Успешные и плохие запросы

Если файл успешно обработан, он будет перемещён в:

profiles\RZXC\LuxelSetManager\API\ExecutedRequests\<текущая дата>

Имя архивного файла будет приведено к формату:

UserSettings_<SteamID>_<текущая дата и время>.json

Если JSON прочитать не удалось или SteamID пустой, файл будет перемещён в:

profiles\RZXC\LuxelSetManager\API\BadRequests\<текущая дата>

С тем же принципом имени:

UserSettings_<SteamID>_<текущая дата и время>.json

Пример полного API-обновления

Файл:

profiles\RZXC\LuxelSetManager\API\UserSettings.json

Содержимое:

{
    "SteamID": "76561199190066861",
    "UsedMainWeaponID": "AKM",
    "UsedSecondaryWeaponID": "0_EMPTY_SECONDARY",
    "UsedPistolWeaponID": "MakarovIJ70",
    "UsedKnifeWeaponID": "CombatKnife",
    "UsedEquipmentID": "PolicemanOrel",
    "UsedSpawnPointID": "Balota",
    "UsedSurvivorClassname": "SurvivorM_Boris",
    "OwnedWeaponsIDs_ExpiringDate": {},
    "OwnedEquipmentsIDs_ExpiringDate": {},
    "OwnedSpawnPointsIDs_ExpiringDate": {},
    "OwnedWeapons": [
        {
            "PresetID": "AKM",
            "ExpiringDate": "FOREVER"
        },
        {
            "PresetID": "$ALL_PRESETS$",
            "ExpiringDate": "29.08.2026 18:30"
        }
    ],
    "OwnedEquipments": [
        {
            "PresetID": "PolicemanOrel",
            "ExpiringDate": "FOREVER"
        }
    ],
    "OwnedSpawnPoints": [
        {
            "PresetID": "Balota",
            "ExpiringDate": "FOREVER"
        }
    ],
    "UsedSpawnPoints": []
}



Рекомендация для интеграций

Для выдачи и удаления отдельных пресетов лучше использовать обычные API-команды или ServerOpenAPI, а не перезаписывать весь UserSettings.

Перезапись полного UserSettings полезна, когда нужно:

  • перенести игрока из другой системы;

  • импортировать настройки после ручного редактирования;

  • восстановить файл из бэкапа;

  • синхронизировать внешнюю админ-панель с модом;

  • массово изменить выбранные пресеты и владение одним запросом.