Skip to content

API UO UseType

Codex edited this page Sep 22, 2026 · 6 revisions

UO.UseType

ClassicUO / Basic IDE

Home · Все команды · Константы и значения

Находит один предмет нужного graphic/type и применяет его. Например, выпить зелье из рюкзака, открыть лежащий рядом рюкзак или использовать вещь из выбранного контейнера. Персонажа эта команда не ищет и не перемещает. Если предмет требует прицел, цель нужно подготовить отдельно.

Точный синтаксис

UO.UseType(ObjType:Any, Color:Any) -> Any
UO.UseType(type:Any, color:Any, container:Any) -> Integer
UO.UseType(type:Any, color:Any, container:Any, distance:Any) -> Integer
UO.UseType(type:Any, color:Any, container:Any, distance:Any, nearest:Any) -> Integer
UO.UseType(type:Any, color:Any, container:Any, distance:Any, nearest:Any, maxZ:Any) -> Integer
UO.UseType(type:Integer) -> Integer
UO.UseType(type:Integer, color:Integer) -> Integer
UO.UseType(type:Integer, color:String) -> Integer
UO.UseType(type:String) -> Integer
UO.UseType(type:String, color:Integer) -> Integer
UO.UseType(type:String, color:String) -> Integer

Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.

Параметры

  • type / ObjType — Graphic предмета: число или hex-строка; например 0x0F0C — тип лечебного зелья, 0x0E75 — рюкзака. Это не serial и не body персонажа. Отрицательное число или 0xFFFF разрешают любой type; для осмысленного действия лучше точный graphic.
  • color / Color — Hue предмета, по умолчанию -1 (любой). Любое отрицательное число или 0xFFFF снимает фильтр; 0 выбирает именно неокрашенную вещь. Не notoriety и не цвет текста.
  • container — По умолчанию -1: свой рюкзак и загруженные вложенные контейнеры. "my" означает то же. "backpack" либо явный serial контейнера задают корень рекурсивного обхода. ground/"ground"/UO.Ground(), числовые 0/1 обозначают только предметы мира. Self не является синонимом backpack; используйте явный рюкзак. Неизвестный/нулевой объектный алиас может разрешиться как рюкзак: передаваемый контейнер предварительно проверяйте через Exists.
  • distance — Максимальная геометрическая дальность X/Y, не длина пути. По умолчанию или при отрицательном аргументе — FindDistance. 0 означает ту же клетку. У вещей в контейнере клиент учитывает расстояние до владельца.
  • nearest — По умолчанию TRUE: выбрать ближайшую вещь, при равенстве меньший serial. FALSE: первый найденный при обходе без сортировки. Не число предметов и не режим бега.
  • maxZ — Максимальная абсолютная разница мировой высоты Z с персонажем. По умолчанию или при отрицательном аргументе — FindVertical. 0 требует одинаковую Z. Для вещи в сумке используется высота внешнего контейнера на земле либо персонажа-владельца; внутренние координаты гампа не считаются мировыми. Это фильтр высоты, не проверка проходимости или линии обзора.

Возвращает

Integer — serial предмета, для которого вызван UseObject; 0, если совпадений нет. Даже регистрация с ReturnKind Any фактически возвращает число. Это не TRUE/FALSE и не подтверждение применения сервером: проверяйте used <> 0, а не used = TRUE. Для успеха эффекта нужна отдельная проверка состояния, содержимого или журнала.

Поведение

  • От 1 до 6 аргументов. Чтобы задать дальность, укажите также color и container. Чтобы задать maxZ, заполните все шесть позиций. Массив type, маска через | и дополнительные цели этой командой не принимаются.
  • Обычные формы с Integer/String и расширенные формы используют CompactUseType: только items, Ignore, расстояние и высота; контейнеры обходятся рекурсивно по уже загруженному содержимому. Контейнер для загрузки автоматически не открывается. FindItem/FindCount/GetFoundItems этой ветвью не обновляются.
  • Высота общих владельцев и контейнеров вычисляется один раз за вызов, чтобы не повторять обход для каждой стопки. Циклическая или чрезмерно глубокая цепочка контейнеров (128 звеньев без найденного корня) не используется как совпадение по высоте.
  • Сохранена общая совместимая регистрация двух Any: она направляет вызов в bridge.UseType, использующий FindType по рюкзаку, обновляющий Find* и выбирающий первый результат. Для предсказуемой компактной формы используйте Integer/String, а не неявные преобразования неподходящих видов значений.
  • UseObject отправляет действие применения, но команда не ждёт target, исцеления, выпивания, открытия окна или серверного отказа. Дальность поиска не расширяет допустимую сервером дальность использования.
  • При отсутствии совпадения компактная форма печатает сообщение и возвращает 0. При отсутствии персонажа/связи результат не следует считать разрешением на действие. Для точного ID используйте UO.UseObject.

Внутренние функции: последовательность выполнения

Ниже описана реализация этого движка. Имена внутренних методов не являются дополнительными командами BASIC.

1. CompactUseType

Преобразует параметры, получает предметы и применяет фильтры type/hue/Ignore/distance/Z.

Выбирает один serial, вызывает UseObject; Find* не заполняет.

Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция CompactUseType.

2. EnumerateUseTypeItems

Берёт GetWorldItems для ground либо обходит GetContent корня и вложенных предметов с защитой от повторного посещения.

Только данные клиента; отсутствующие contents не запрашивает.

Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция EnumerateUseTypeItems.

3. ResolveUseTypeWorldHeight

Поднимается по ContainerOf до внешнего контейнера или mobile и читает его мировую Z.

Общий корень кэшируется на один вызов; циклы и слишком глубокая цепь не допускаются.

Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция ResolveUseTypeWorldHeight.

4. UseType

Общая совместимая форма Any/Any применяет первый результат FindType из backpack.

Возвращает serial/0 и обновляет Find*.

Исходник проекта: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функция UseType.

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

Примеры

Пример 1. Применить лечебное зелье из рюкзака

SUB Main()
    IF NOT UO.Connected() OrElse UO.Dead() THEN
        RETURN
    END IF
    # Единственный параметрtype; цвет любой, кореньрюкзак.
    VAR used = UO.UseType(0x0F0C)
    IF used = 0 THEN
        UO.Print("No matching healing potion in the loaded backpack")
    ELSE
        # usedID применённой вещи, не величина восстановленного здоровья.
        UO.Print("Potion use requested; check health and the game message")
    END IF
END SUB

Разбор параметров и выполнения:

  • 0x0F0C — пример стандартного типа лечебного зелья. Сервер может отклонить действие из-за состояния персонажа, задержки или собственных правил. Цвет и дальность отдельно не заданы: действуют defaults.

Пример 2. Открыть ближайший рюкзак на земле в пределах двух клеток

SUB Main()
    # type, hue, ground, radius, nearest, maxZ.
    VAR bag = UO.UseType(0x0E75, -1, ground, 2, TRUE, 4)
    IF bag <> 0 THEN
        UO.AddObject("nearby_bag", bag)
    ELSE
        UO.Print("No suitable ground backpack within the selected bounds")
    END IF
END SUB

Разбор параметров и выполнения:

  • 0x0E75 — type рюкзака, -1 — любой hue, ground — предметы мира. 2 — клетки X/Y, TRUE — ближайший, 4 — разница Z. Возврат bag — ID. Доступ к содержимому определяет сервер; команда не подбирает рюкзак.

Пример 3. Использовать предмет из заранее выбранного контейнера

FUNCTION UseFromNamedSupply(itemType)
    VAR source = ASC(UO.GetSerial("supply"), 0)
    IF source = 0 OrElse NOT UO.Exists(source) THEN
        RETURN 0
    END IF
    # Контейнер должен быть открыт заранее, чтобы содержимое было загружено.
    # 0точный hue, 2радиус, FALSEбез сортировки, 16допуск Z.
    RETURN UO.UseType(itemType, 0, source, 2, FALSE, 16)
END FUNCTION

SUB Main()
    # Перед запуском выберите нужный контейнер и откройте его в игре.
    VAR source = ASC(UO.GetSerial("lasttarget"), 0)
    IF source = 0 OrElse NOT UO.Exists(source) THEN
        RETURN
    END IF
    UO.AddObject("supply", source)
    VAR used = UseFromNamedSupply(0x0F0C)
    IF used = 0 THEN
        UO.Print("Supply item was not found with these filters")
    END IF
END SUB

Разбор параметров и выполнения:

  • itemType — graphic вещи, source — отдельный serial контейнера. Помощник возвращает serial/0 так же, как UseType. Даже найденную вещь сервер может запрещать использовать из чужого или удалённого контейнера.

Clone this wiki locally