-
Notifications
You must be signed in to change notification settings - Fork 0
API UO FindTypeEx
ClassicUO • Runtime API
Ищет одну графику и цвет в контейнере либо на земле и возвращает один найденный ID.
UO.FindTypeEx(ObjType:Any, Color:Any, Container:Any, InSub:Any) -> Integer
-
ObjType— Graphic/body, не serial предмета. 0..65534 — конкретная графика; -1 или 0xFFFF — любая. Другие отрицательные Integer в этом клиенте также снимают фильтр. -
Color— Hue, не количество предметов. 0 — неокрашенный предмет; -1 или 0xFFFF — любой hue. Другие отрицательные Integer тоже снимают фильтр цвета. -
Container— Земля: UO.Ground(), 0, -1, 0xFFFFFFFF либо строка ground. Рюкзак: строка backpack или его serial. Принимаются десятичный/hex serial и имя AddObject. my выбирает весь инвентарь своего персонажа, включая экипировку и вложенные сумки. Неизвестное имя вызывает ошибку скрипта. Проверяйте полученный serial: явный 0 выбирает землю. Имена ground/backpack понятнее числовых обозначений, которые различаются между семействами команд. -
InSub— Обязательный TRUE/FALSE (1/0). FALSE — прямое содержимое конкретного контейнера; TRUE — также загруженные вложенные сумки. Для земли рекурсия ничего не меняет. my уже выбирает весь принадлежащий персонажу инвентарь.
Integer: serial первого совпадения в локальном порядке обхода; 0, если совпадений нет. Не graphic, количество, массив или Boolean. Проверяйте result <> 0, а не result = TRUE либо result = 1. Стопка считается одним объектом; Mobile — одним объектом и одной единицей. Порядок не означает близость и не гарантирован между поисками.
- Нужны все четыре позиционных аргумента. Необязательных аргументов нет.
- Земля использует FindDistance и FindVertical этого скрипта, исключает self и включает подходящие Item и Mobile. Поиск в конкретном контейнере эти пределы расстояния/высоты не применяет. В обоих случаях исключаются Ignore и уничтоженные объекты.
- До обхода очищаются FindItem, FindCount, FindFullQuantity и GetFoundItems. Затем они относятся к этому поиску; пустой поиск оставляет нули и пустой массив. FindFullQuantity суммирует max(1, Amount) предметов и по 1 для Mobile. FindQuantity читает текущее количество FindItem. Сохраните GetFoundItems, если после другого поиска прежний список ещё нужен.
- Bridge один раз обходит загруженные предметы, затем Mobile, если выбрана земля. Должны совпасть тип, цвет и хотя бы один контейнер. Один объект учитывается один раз, даже если подходит нескольким условиям. Повторного полного обхода мира для каждой комбинации нет.
- Читаются только данные, полученные клиентом. Контейнеры не открываются, клетки карты не загружаются, переноса нет. Пустой результат не доказывает пустоту сундука на сервере. Если нужна активная связь, проверяйте Connected: сам поиск читает локальное состояние.
- Stealth FindTypeEx. Первоисточник описывает последний ID и запасной поиск в рюкзаке при ошибочном контейнере. Здесь сохраняется первое локальное совпадение; неизвестное имя не переключает поиск на рюкзак. Ground также принимает 0; свой FindDistance по умолчанию 18, максимум 255. Это особенности данного клиента.
Это реальные этапы реализации, не дополнительные публичные команды. FindGoldNearSelf и SearchTypesIn ниже — полностью приведённые функции скрипта.
Runtime преобразует числовые фильтры и отдельно разрешает имена контейнеров; обозначение земли переводится во внутреннюю область мира bridge.
Нужны все четыре позиционных аргумента. Необязательных аргументов нет.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция ExecuteStealthCompatibility.
Земля: UO.Ground(), 0, -1, 0xFFFFFFFF либо строка ground. Рюкзак: строка backpack или его serial. Принимаются десятичный/hex serial и имя AddObject. my выбирает весь инвентарь своего персонажа, включая экипировку и вложенные сумки. Неизвестное имя вызывает ошибку скрипта. Проверяйте полученный serial: явный 0 выбирает землю. Имена ground/backpack понятнее числовых обозначений, которые различаются между семействами команд.
Runtime преобразует числовые фильтры и отдельно разрешает имена контейнеров; обозначение земли переводится во внутреннюю область мира bridge.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция ConvertStealthSearchContainer.
До обхода очищаются FindItem, FindCount, FindFullQuantity и GetFoundItems. Затем они относятся к этому поиску; пустой поиск оставляет нули и пустой массив. FindFullQuantity суммирует max(1, Amount) предметов и по 1 для Mobile. FindQuantity читает текущее количество FindItem. Сохраните GetFoundItems, если после другого поиска прежний список ещё нужен.
Integer: serial первого совпадения в локальном порядке обхода; 0, если совпадений нет. Не graphic, количество, массив или Boolean. Проверяйте result <> 0, а не result = TRUE либо result = 1. Стопка считается одним объектом; Mobile — одним объектом и одной единицей. Порядок не означает близость и не гарантирован между поисками.
Исходник проекта: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функция ResetFindResults.
Bridge один раз обходит загруженные предметы, затем Mobile, если выбрана земля. Должны совпасть тип, цвет и хотя бы один контейнер. Один объект учитывается один раз, даже если подходит нескольким условиям. Повторного полного обхода мира для каждой комбинации нет.
Земля использует FindDistance и FindVertical этого скрипта, исключает self и включает подходящие Item и Mobile. Поиск в конкретном контейнере эти пределы расстояния/высоты не применяет. В обоих случаях исключаются Ignore и уничтоженные объекты.
Исходник проекта: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функция FindType.
Graphic/body, не serial предмета. 0..65534 — конкретная графика; -1 или 0xFFFF — любая. Другие отрицательные Integer в этом клиенте также снимают фильтр. Hue, не количество предметов. 0 — неокрашенный предмет; -1 или 0xFFFF — любой hue. Другие отрицательные Integer тоже снимают фильтр цвета.
Bridge один раз обходит загруженные предметы, затем Mobile, если выбрана земля. Должны совпасть тип, цвет и хотя бы один контейнер. Один объект учитывается один раз, даже если подходит нескольким условиям. Повторного полного обхода мира для каждой комбинации нет.
Исходник проекта: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функция MatchesFindIdentity.
Обязательный TRUE/FALSE (1/0). FALSE — прямое содержимое конкретного контейнера; TRUE — также загруженные вложенные сумки. Для земли рекурсия ничего не меняет. my уже выбирает весь принадлежащий персонажу инвентарь.
Земля использует FindDistance и FindVertical этого скрипта, исключает self и включает подходящие Item и Mobile. Поиск в конкретном контейнере эти пределы расстояния/высоты не применяет. В обоих случаях исключаются Ignore и уничтоженные объекты.
Исходник проекта: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функция MatchesFindContainer.
До обхода очищаются FindItem, FindCount, FindFullQuantity и GetFoundItems. Затем они относятся к этому поиску; пустой поиск оставляет нули и пустой массив. FindFullQuantity суммирует max(1, Amount) предметов и по 1 для Mobile. FindQuantity читает текущее количество FindItem. Сохраните GetFoundItems, если после другого поиска прежний список ещё нужен.
Integer: serial первого совпадения в локальном порядке обхода; 0, если совпадений нет. Не graphic, количество, массив или Boolean. Проверяйте result <> 0, а не result = TRUE либо result = 1. Стопка считается одним объектом; Mobile — одним объектом и одной единицей. Порядок не означает близость и не гарантирован между поисками.
Исходник проекта: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функция RegisterFound.
Читаются только данные, полученные клиентом. Контейнеры не открываются, клетки карты не загружаются, переноса нет. Пустой результат не доказывает пустоту сундука на сервере. Если нужна активная связь, проверяйте Connected: сам поиск читает локальное состояние.
# Прямое содержимое рюкзака
#
# Ищет одну графику и цвет в контейнере либо на земле и возвращает один найденный ID.
#
# Integer: serial первого совпадения в локальном порядке обхода; 0, если совпадений нет. Не
# graphic, количество, массив или Boolean. Проверяйте result <> 0, а не result = TRUE либо
# result = 1. Стопка считается одним объектом; Mobile — одним объектом и одной единицей. Порядок
# не означает близость и не гарантирован между поисками.
SUB Main()
# 0x0EED — золото, -1 — любой hue; backpack/FALSE исключает вложенные сумки. Три строки выводят
# первый ID в hex без 0x, число объектов и сумму единиц. Две стопки по 20 и 50: объектов 2,
# единиц 70.
VAR item = UO.FindTypeEx(0x0EED, -1, 'backpack', FALSE)
UO.Print(Hex(item))
UO.Print(STR(UO.FindCount()))
UO.Print(STR(UO.FindFullQuantity()))
END SUBРазбор параметров и выполнения:
- 0x0EED — золото, -1 — любой hue; backpack/FALSE исключает вложенные сумки. Три строки выводят первый ID в hex без 0x, число объектов и сумму единиц. Две стопки по 20 и 50: объектов 2, единиц 70.
# Полная функция временного поиска на земле
#
# Ищет одну графику и цвет в контейнере либо на земле и возвращает один найденный ID.
#
# Integer: serial первого совпадения в локальном порядке обхода; 0, если совпадений нет. Не
# graphic, количество, массив или Boolean. Проверяйте result <> 0, а не result = TRUE либо
# result = 1. Стопка считается одним объектом; Mobile — одним объектом и одной единицей. Порядок
# не означает близость и не гарантирован между поисками.
SUB Main()
# radius=5 и height=10 действуют внутри FindGoldNearSelf. Finally восстанавливает оба предела
# даже при Return или ошибке. Функция возвращает serial золота либо 0; Main проверяет <> 0 перед
# выводом.
VAR item = FindGoldNearSelf(5, 10)
IF item <> 0 THEN
UO.Print(Hex(item))
ELSE
UO.Print('Empty')
END IF
END SUB
FUNCTION FindGoldNearSelf(radius, height)
VAR oldDistance = UO.FindDistance()
VAR oldVertical = UO.FindVertical()
TRY
UO.FindDistance(radius)
UO.FindVertical(height)
RETURN UO.FindTypeEx(0x0EED, -1, UO.Ground(), FALSE)
FINALLY
UO.FindDistance(oldDistance)
UO.FindVertical(oldVertical)
END TRY
END FUNCTIONРазбор параметров и выполнения:
- radius=5 и height=10 действуют внутри FindGoldNearSelf. Finally восстанавливает оба предела даже при Return или ошибке. Функция возвращает serial золота либо 0; Main проверяет <> 0 перед выводом.
# Имя контейнера и вложенные сумки
#
# Ищет одну графику и цвет в контейнере либо на земле и возвращает один найденный ID.
#
# Integer: serial первого совпадения в локальном порядке обхода; 0, если совпадений нет. Не
# graphic, количество, массив или Boolean. Проверяйте result <> 0, а не result = TRUE либо
# result = 1. Стопка считается одним объектом; Mobile — одним объектом и одной единицей. Порядок
# не означает близость и не гарантирован между поисками.
SUB Main()
# GetSerial разрешает backpack; проверка на ноль не позволяет случайно выбрать землю. AddObject
# сохраняет ID как search_bag. TRUE включает вложенные сумки. GetFoundItems сохраняет отдельный
# массив; IsObjectExists повторно проверяет каждый ID.
VAR bag = UO.GetSerial('backpack')
IF bag <> 0 THEN
UO.AddObject('search_bag', bag)
UO.FindTypeEx(0x0EED, -1, 'search_bag', TRUE)
VAR items = UO.GetFoundItems()
FOR EACH item IN items
IF UO.IsObjectExists(item) THEN
UO.Print(Hex(item))
END IF
NEXT
END IF
END SUBРазбор параметров и выполнения:
- GetSerial разрешает backpack; проверка на ноль не позволяет случайно выбрать землю. AddObject сохраняет ID как search_bag. TRUE включает вложенные сумки. GetFoundItems сохраняет отдельный массив; IsObjectExists повторно проверяет каждый ID.
ClassicUO - Bad Newbie & Basic IDE Edition