API UO FindTypeEx - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

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 ниже — полностью приведённые функции скрипта.

1. ExecuteStealthCompatibility

Runtime преобразует числовые фильтры и отдельно разрешает имена контейнеров; обозначение земли переводится во внутреннюю область мира bridge.

Нужны все четыре позиционных аргумента. Необязательных аргументов нет.

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

2. ConvertStealthSearchContainer

Земля: 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.

3. ResetFindResults

До обхода очищаются 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.

4. FindType

Bridge один раз обходит загруженные предметы, затем Mobile, если выбрана земля. Должны совпасть тип, цвет и хотя бы один контейнер. Один объект учитывается один раз, даже если подходит нескольким условиям. Повторного полного обхода мира для каждой комбинации нет.

Земля использует FindDistance и FindVertical этого скрипта, исключает self и включает подходящие Item и Mobile. Поиск в конкретном контейнере эти пределы расстояния/высоты не применяет. В обоих случаях исключаются Ignore и уничтоженные объекты.

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

5. MatchesFindIdentity

Graphic/body, не serial предмета. 0..65534 — конкретная графика; -1 или 0xFFFF — любая. Другие отрицательные Integer в этом клиенте также снимают фильтр. Hue, не количество предметов. 0 — неокрашенный предмет; -1 или 0xFFFF — любой hue. Другие отрицательные Integer тоже снимают фильтр цвета.

Bridge один раз обходит загруженные предметы, затем Mobile, если выбрана земля. Должны совпасть тип, цвет и хотя бы один контейнер. Один объект учитывается один раз, даже если подходит нескольким условиям. Повторного полного обхода мира для каждой комбинации нет.

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

6. MatchesFindContainer

Обязательный TRUE/FALSE (1/0). FALSE — прямое содержимое конкретного контейнера; TRUE — также загруженные вложенные сумки. Для земли рекурсия ничего не меняет. my уже выбирает весь принадлежащий персонажу инвентарь.

Земля использует FindDistance и FindVertical этого скрипта, исключает self и включает подходящие Item и Mobile. Поиск в конкретном контейнере эти пределы расстояния/высоты не применяет. В обоих случаях исключаются Ignore и уничтоженные объекты.

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

7. RegisterFound

До обхода очищаются 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.

en · ru · uk · fr · de · it · es · zh-tw · ja · ko

Basic