Перейти к содержанию

📦 Items & Economy API

This section covers spawning physical items, managing inventories, player designations, and trading with factions.

Объекты (Things)

Контроллер Thing Controller управляет физическими объектами в игровом мире, которые не являются гуманоидами (пешками). В коде RimWorld почти всё является "Объектом" (Thing).

Включает:

  • Предметы: Оружие, ресурсы, одежда.
  • Постройки: Стены, мебель, верстаки.
  • Растения: Сельскохозяйственные культуры, деревья.

GET
/api/v1/item/recipes

Возвращает рецепты крафта, связанные с конкретным предметом. Это включает подробности об ингредиентах, объеме работы, необходимых навыках и производственных станциях.

Example:

curl --request GET \
--url "http://localhost:8765/api/v1/item/recipes?def_name=MealSimple"

Response:

{
    "success": true,
    "data": {
        "item_def_name": "MealSimple",
        "item_label": "simple meal",
        "recipes": [
            {
                "recipe_def_name": "CookMealSimple",
                "label": "cook simple meal",
                "job_string": "Cooking simple meal.",
                "work_amount": 300.0,
                "work_time_seconds": 5.0,
                "ingredients": [
                    {
                        "summary": "Raw food",
                        "count": 0.5,
                        "is_fixed_item": false,
                        "allowed_def_names": [
                            "RawPotatoes",
                            "RawRice",
                            "Meat_Chicken"
                        ]
                    }
                ],
                "produced_at": [
                    {
                        "def_name": "ElectricStove",
                        "label": "electric stove"
                    },
                    {
                        "def_name": "FueledStove",
                        "label": "fueled stove"
                    },
                    {
                        "def_name": "Campfire",
                        "label": "campfire"
                    }
                ],
                "skill_requirements": [
                    {
                        "skill": "Cooking",
                        "min_level": 0
                    }
                ],
                "research_prerequisite": null
            }
        ]
    },
    "timestamp": "2025-12-11T19:46:05.7088803Z"
}


GET
/api/v1/item/sources

Определяет различные способы получения конкретного предмета в игре. Сюда входят флаги для широких категорий (добыча, торговля, крафт) и конкретные детали, такие как названия руд или растений, производящих этот предмет.

Example:

curl --request GET \
--url "http://localhost:8765/api/v1/item/sources?def_name=Steel"

Response:

{
    "success": true,
    "data": {
        "def_name": "Steel",
        "label": "steel",
        "thing_categories": [
            "ResourcesRaw",
            "Resources"
        ],
        "can_craft": true,
        "can_trade": true,
        "can_harvest": false,
        "can_mine": true,
        "can_butcher": false,
        "crafting_recipes": [
            "SmeltWeapon",
            "SmeltApparel",
            "ExtractMetalFromSlag"
        ],
        "harvested_from": [],
        "mined_from": [
            "MineableSteel"
        ],
        "trade_tags": [
            "BulkGoods",
            "ExoticMisc"
        ]
    },
    "timestamp": "2025-12-11T19:46:05.7088803Z"
}


GET
/api/v1/resources/summary

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

Example:

curl --request GET \
--url 'http://localhost:8765/api/v1/resources/summary?map_id=0'

Response:

{
    "success": true,
    "data": {
        "total_items": 1234,
        "total_market_value": 5678.90,
        "last_updated": "2025-12-12t10:00:00.0000000z",
        "categories": [
            { "category": "foods", "count": 500, "market_value": 1200.00 },
            { "category": "manufactured", "count": 200, "market_value": 2500.00 }
        ],
        "critical_resources": {
            "food_summary": {
                "food_total": 450,
                "total_nutrition": 1500.0,
                "meals_count": 300,
                "raw_food_count": 150,
                "rot_status_info": {
                    "nutrition_rotating_soon": 100.0,
                    "nutrition_not_rotating": 1400.0,
                    "percentage_rotating_soon": 6.67,
                    "soon_rotting_items": [
                        {
                            "thing_id": 1001,
                            "def_name": "MealSimple",
                            "label": "simple meal",
                            "stack_count": 5,
                            "nutrition": 4.5,
                            "days_until_rot": 0.5,
                            "hours_until_rot": 12.0
                        }
                    ],
                    "total_soon_rotting_items": 1,
                    "total_soon_rotting_stacks": 1
                }
            },
            "medicine_total": 20,
            "weapon_count": 5,
            "weapon_value": 1000.00
        }
    },
    "errors": [],
    "warnings": [],
    "timestamp": "2025-12-12T10:00:00.0000000Z"
}


GET
/api/v1/resources/stored

Возвращает подробный список всех предметов, хранящихся в данный момент на указанной карте. Опционально результаты могут быть отфильтрованы по категории ресурсов. Этот эндпоинт предоставляет детализированную информацию о каждом хранящемся предмете, включая его ID, техническое имя (defName), этикетку и количество в стаке.

Example:

# Get all stored resources
curl --request GET \
--url 'http://localhost:8765/api/v1/resources/stored?map_id=0'

# Get stored resources by category
curl --request GET \
--url 'http://localhost:8765/api/v1/resources/stored?map_id=0&category=Foods'

Response:

{
    "success": true,
    "data": {
        "Foods": [
            {
                "thing_id": 4895,
                "def_name": "MealSurvivalPack",
                "label": "packaged survival meal x10",
                "categories": ["FoodMeals"],
                "position": { "x": 13, "y": 0, "z": 62 },
                "stack_count": 10,
                "market_value": 24.0,
                "is_forbidden": false,
                "quality": -1,
                "hit_points": 50,
                "max_hit_points": 50
            },
            {
                "thing_id": 4896,
                "def_name": "Pemmican",
                "label": "pemmican x2",
                "categories": ["FoodMeals"],
                "position": { "x": 14, "y": 0, "z": 62 },
                "stack_count": 50,
                "market_value": 1.5,
                "is_forbidden": false,
                "quality": -1,
                "hit_points": 50,
                "max_hit_points": 50
            }
        ],
        "resources_raw": [
            {
                "thing_id": 2328,
                "def_name": "ChunkGranite",
                "label": "granite chunk",
                "categories": ["StoneChunks"],
                "position": { "x": 41, "y": 0, "z": 1 },
                "stack_count": 1,
                "market_value": 0.0,
                "is_forbidden": false,
                "quality": -1,
                "hit_points": 300,
                "max_hit_points": 300
            }
        ]
    },
    "errors": [],
    "warnings": [],
    "timestamp": "2025-12-12T10:00:00.0000000Z"
}


GET
/api/v1/resources/storages/summary

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

Example:

curl --request GET \
--url 'http://localhost:8765/api/v1/resources/storages/summary?map_id=0'

Response:

{
    "success": true,
    "data": {
        "total_stockpiles": 5,
        "total_cells": 200,
        "used_cells": 120,
        "utilization_percent": 60
    },
    "errors": [],
    "warnings": [],
    "timestamp": "2025-12-12T10:00:00.0000000Z"
}


POST
/api/v1/item/spawn

Создает (спавнит) предмет на карте в выбранной позиции.

Example:

curl --request POST \
--url http://localhost:8765/api/v1/item/spawn \
--header 'content-type: application/json' \
--data '{
    "def_name": "BilliardsTable",
    "stuff_def_name": "WoodLog",
    "quality": "Legendary",
    "amount": 1,
    "x": 120,
    "z": 106
}'

Request:

{
    "def_name": "BilliardsTable",
    "stuff_def_name": "WoodLog",
    "quality": "Legendary",
    "amount": 1,
    "x": 120,
    "z": 106
}

Response:

{
    "success": true,
    "errors": [],
    "warnings": [],
    "timestamp": "2025-12-10T19:53:16.733319Z"
}


POST
/api/v1/things/set-forbidden

Устанавливает статус "запрещено" для одного или нескольких объектов по их ID или позиции.

Пример:

curl --request POST \
--url http://localhost:8765/api/v1/things/set-forbidden \
--header 'content-type: application/json' \
--data '{"thing_ids": [4895, 4896], "forbidden": true}'

Запрос:

{
    "thing_ids": [4895, 4896],
    "forbidden": true
}

Ответ:

{
    "success": true,
    "errors": [],
    "warnings": [],
    "timestamp": "2025-12-10T19:53:16.733319Z"
}

Торговля

Предоставляет доступ к экономике игры и торговым системам. Этот контроллер обрабатывает определения для различных типов торговцев (орбитальные, караваны, посетители), позволяя вам анализировать их правила генерации товаров, распространенность предметов и поведение при покупке/продаже.

Возможности:

  • Список всех глобальных типов торговцев (Defs).
  • Проверка логики генерации товаров (конкретные предметы, категории или теги).
  • Определение того, является ли тип торговца орбитальным или наземным.

GET
/api/v1/traders/defs

Возвращает список всех определений торговцев (TraderKindDefs). Сюда входят орбитальные торговцы, караваны и посетители, с подробным описанием их правил генерации товаров, распространенности и того, покупают ли они определенные категории предметов.

Example:

curl --request GET \
--url http://localhost:8765/api/v1/traders/defs

Response:

{
    "success": true,
    "data": [
        {
            "def_name": "Orbital_BulkGoods",
            "label": "bulk goods trader",
            "orbital": true,
            "visitor": false,
            "commonality": 1.0,
            "items": [
                {
                    "name": "Steel",
                    "count": "500~800",
                    "price": "Normal"
                },
                {
                    "name": "ComponentIndustrial",
                    "count": "20~40"
                }
            ],
            "categories": [
                {
                    "name": "Textiles",
                    "count": "300~600"
                },
                {
                    "name": "FoodRaw",
                    "count": "200~400"
                }
            ],
            "tags": [
                {
                    "name": "Artifact",
                    "buys": false
                }
            ]
        },
        {
            "def_name": "Caravan_Outlander_CombatSupplier",
            "label": "combat supplier",
            "orbital": false,
            "visitor": true,
            "commonality": 1.0,
            "items": [
                {
                    "name": "MedicineIndustrial",
                    "count": "5~15"
                }
            ],
            "categories": [
                {
                    "name": "WeaponsMelee",
                    "count": "3~6"
                }
            ]
        }
    ],
    "timestamp": "2025-12-11T19:46:05.7088803Z"
}

Order Controller

Order Controller предназначен для отдачи приказов пешкам.


POST
/api/v1/order/designate/area

Отправить приказ

В настоящее время поддерживаются следующие приказы:

  • remove-all: удаляет все приказы
  • mine
  • deconstruct
  • harvest
  • hunt

Example:

curl --request POST \
--url 'http://localhost:8765/api/v1/order/designate/area'

Request:

{
    "map_id": 0,
    "type": "Mine",
    "point_a": {"x": 0, "y": 0, "z": 0},
    "point_b": {"x": 250, "y": 0, "z": 250}
}

Response:

{
    "success": true,
    "errors": [],
    "warnings": [],
    "timestamp": "2025-12-31T11:04:27.9729153Z"
}