WardenCoredocs
APIЭндпоинты

Транспорт

Транспорт на сервере, его владельцы, инвентарь и счётчики типов.

Весь транспорт на сервере — список с пагинацией, одна единица по её entity id, её инвентарь и разбивка по количеству каждого типа.

Идентификация транспорта

Эндпоинты детали и инвентаря принимают числовой сегмент {id}entity id транспорта. Это положительное целое без ведущих нулей (шаблон ^[1-9]\d*$); значения вроде 0 и 007 отклоняются с 400 validation_error.

GET /v1/vehicles
GET /v1/vehicles/9
GET /v1/vehicles/9/inventory
GET /v1/vehicles/types

Авторизация

СкоупДаёт
vehicles:readВсе эндпоинты транспорта — список, деталь, инвентарь, счётчики типов.

Каждый owner транспорта несёт discord_id (null, если владелец не привязан к Discord). Ключ без скоупа получает 403 insufficient_scope.

GET /v1/vehicles

Список транспорта с пагинацией. Необязательные фильтры:

ПараметрЗначение
owner_steam_idТранспорт этого Steam64 (только цифры).
owner_discord_idТранспорт игрока, привязанного к этому Discord id (только цифры). Резолвится в момент запроса; непривязанный id ничего не находит (пустая страница, не 404).
owner_nameТочное совпадение имени персонажа владельца (оператора подстроки нет).
aliasТочное совпадение алиаса транспорта.
is_lockedtrue или false.
is_functionaltrue или false.
searchТекстовый поиск. Нельзя сочетать со структурным фильтром выше (400 validation_error).
limitРазмер страницы, 10–100 (по умолчанию 50).
cursorНепрозрачный курсор из next_cursor предыдущего ответа.

Передать оба owner_steam_id и owner_discord_id400 validation_error.

{
  "data": [
    {
      "entity_id": "9", "class_name": "BPC_Kinglet_Duster", "display_name": "Kinglet Duster",
      "owner": { "profile_id": 7, "name": "Bob", "steam_id": "76561198000000000", "discord_id": "123456789012345678" },
      "health": 950.5, "max_health": 1000,
      "position": { "x": 1, "y": 2, "z": 3 },
      "is_locked": true, "lock_type": "DialLock_Item", "lock_hp": 0.85,
      "is_functional": true, "last_access_time": "2023-11-14T22:13:20.000Z", "item_count": 12
    }
  ],
  "has_more": false,
  "next_cursor": null,
  "total": 1
}

Про поля

owner — вложенный объект идентичности { profile_id, name, steam_id, discord_id }. health, max_health, lock_hp и каждая ось position — дробные числа. last_access_time — ISO-8601 (или null). item_countnull, если мод его не передал.

GET /v1/vehicles/{id}

Одна единица транспорта по её entity id. Возвращает тот же объект, что и строка списка. 404 not_found, если транспорта с таким entity id нет.

GET /v1/vehicles/{id}/inventory

Полный вложенный инвентарь транспорта. Каждый предмет может нести contents (рекурсивно). Поддерево, которое мод перестал раскрывать на пределе глубины, помечается contents_truncated: true.

{
  "items": [
    {
      "id": 1, "class": "Backpack", "name": "Backpack", "icon": "…",
      "health": 100, "max_health": 100, "weight": 2, "is_container": true, "is_weapon": false,
      "contents_truncated": false,
      "contents": [ { "id": 3, "class": "Pouch", "name": "Pouch", "icon": "…", "contents": [], "contents_truncated": true, "health": 1, "max_health": 1, "weight": 0.1, "is_container": true, "is_weapon": false } ]
    }
  ],
  "total": 1
}

GET /v1/vehicles/types

Агрегация только для чтения: сколько единиц каждого отображаемого имени существует. Это сводка, а не источник для фильтра — числа привязаны к человекочитаемым именам, а не к сырому class_name, который передают в фильтр.

{ "types": { "Kinglet Duster": 3, "Wolfswagen": 1 } }

Кэширование

Каждое чтение транспорта отдаёт ETag и Cache-Control: private с коротким max-age (10–15 с); верните ETag в If-None-Match, чтобы получить 304 Not Modified.

Ошибки

Стандартный конверт ошибки. Самые вероятные:

КодСтатусКогда
insufficient_scope403У ключа нет vehicles:read.
not_found404Ни один транспорт не подходит под {id}.
validation_error400{id} не положительное целое без ведущих нулей (^[1-9]\d*$), ?search= вместе со структурным фильтром, оба owner id сразу или нецифровой owner_steam_id/owner_discord_id.
server_unavailable503Игровой сервер офлайн или недоступен.
gateway_timeout504Сервер не ответил вовремя.

Содержание