-
Notifications
You must be signed in to change notification settings - Fork 0
API 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.
Преобразует параметры, получает предметы и применяет фильтры type/hue/Ignore/distance/Z.
Выбирает один serial, вызывает UseObject; Find* не заполняет.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция CompactUseType.
Берёт GetWorldItems для ground либо обходит GetContent корня и вложенных предметов с защитой от повторного посещения.
Только данные клиента; отсутствующие contents не запрашивает.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция EnumerateUseTypeItems.
Поднимается по ContainerOf до внешнего контейнера или mobile и читает его мировую Z.
Общий корень кэшируется на один вызов; циклы и слишком глубокая цепь не допускаются.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция ResolveUseTypeWorldHeight.
Общая совместимая форма Any/Any применяет первый результат FindType из backpack.
Возвращает serial/0 и обновляет Find*.
Исходник проекта: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функция UseType.
Примеры используют точные числовые аргументы компактной формы. Выбор вещи и подтверждение игрового эффекта — разные этапы.
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
# used — ID применённой вещи, не величина восстановленного здоровья.
UO.Print("Potion use requested; check health and the game message")
END IF
END SUBРазбор параметров и выполнения:
- 0x0F0C — пример стандартного типа лечебного зелья. Сервер может отклонить действие из-за состояния персонажа, задержки или собственных правил. Цвет и дальность отдельно не заданы: действуют defaults.
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. Доступ к содержимому определяет сервер; команда не подбирает рюкзак.
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. Даже найденную вещь сервер может запрещать использовать из чужого или удалённого контейнера.
ClassicUO
Bad Newbie & Basic IDE
Найти в справочнике
Клиент и скрипты
Каталоги значений
Разработка и помощь