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

UO.FindTypesArrayEx

ClassicUO • Runtime API

За один обход ищет разные графики, цвета и контейнеры и возвращает один найденный ID. Полный список читается через GetFoundItems.

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

UO.FindTypesArrayEx(ObjTypes:Any, Colors:Any, Containers:Any, InSub:Any) -> Integer

Параметры

  • ObjTypes — Graphic/body, не serial предмета. 0..65534 — конкретная графика; -1 или 0xFFFF — любая. Другие отрицательные Integer в этом клиенте также снимают фильтр.
  • Colors — Hue, не количество предметов. 0 — неокрашенный предмет; -1 или 0xFFFF — любой hue. Другие отрицательные Integer тоже снимают фильтр цвета.
  • Containers — Земля: 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 — одним объектом и одной единицей. Порядок не означает близость и не гарантирован между поисками.

Поведение

  • Передаётся Array; отдельное значение тоже принимается как массив из одного элемента. DIM values[1] создаёт индексы 0 и 1: заполните каждый. Типы и цвета — независимые варианты, а не пары по индексу. Маска «любой» в любой позиции либо пустой массив типов/цветов снимают этот фильтр. Пустой массив контейнеров выбирает инвентарь персонажа. Повторы и пересечения контейнеров не дублируют ID.
  • Нужны все четыре позиционных аргумента. Необязательных аргументов нет.
  • Земля использует FindDistance и FindVertical этого скрипта, исключает self и включает подходящие Item и Mobile. Поиск в конкретном контейнере эти пределы расстояния/высоты не применяет. В обоих случаях исключаются Ignore и уничтоженные объекты.
  • До обхода очищаются FindItem, FindCount, FindFullQuantity и GetFoundItems. Затем они относятся к этому поиску; пустой поиск оставляет нули и пустой массив. FindFullQuantity суммирует max(1, Amount) предметов и по 1 для Mobile. FindQuantity читает текущее количество FindItem. Сохраните GetFoundItems, если после другого поиска прежний список ещё нужен.
  • Bridge один раз обходит загруженные предметы, затем Mobile, если выбрана земля. Должны совпасть тип, цвет и хотя бы один контейнер. Один объект учитывается один раз, даже если подходит нескольким условиям. Повторного полного обхода мира для каждой комбинации нет.
  • Читаются только данные, полученные клиентом. Контейнеры не открываются, клетки карты не загружаются, переноса нет. Пустой результат не доказывает пустоту сундука на сервере. Если нужна активная связь, проверяйте Connected: сам поиск читает локальное состояние.
  • Stealth FindTypesArrayEx. Первоисточник описывает последний 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. BuildFindIdentityMask

Передаётся Array; отдельное значение тоже принимается как массив из одного элемента. DIM values[1] создаёт индексы 0 и 1: заполните каждый. Типы и цвета — независимые варианты, а не пары по индексу. Маска «любой» в любой позиции либо пустой массив типов/цветов снимают этот фильтр. Пустой массив контейнеров выбирает инвентарь персонажа. Повторы и пересечения контейнеров не дублируют ID.

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

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

5. FindTypes

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

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

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

6. 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.

7. MatchesFindContainer

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

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

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

8. 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. Полный
# список читается через GetFoundItems.
#
# Integer: serial первого совпадения в локальном порядке обхода; 0, если совпадений нет. Не
# graphic, количество, массив или Boolean. Проверяйте result <> 0, а не result = TRUE либо
# result = 1. Стопка считается одним объектом; Mobileодним объектом и одной единицей. Порядок
# не означает близость и не гарантирован между поисками.

SUB Main()
    # types содержит золото 0x0EED и чёрный жемчуг 0x0F7A; один color=-1любой hue, один Ground# земля. FALSE на земле ничего не меняет. Действуют текущие пределы поиска. Выводятся ID, число
    # объектов и сумма единиц.

    DIM types[1]
    types[0] = 0x0EED
    types[1] = 0x0F7A
    DIM colors[0]
    colors[0] = -1
    DIM containers[0]
    containers[0] = UO.Ground()
    VAR first = UO.FindTypesArrayEx(types, colors, containers, FALSE)
    UO.Print(Hex(first))
    UO.Print(STR(UO.FindCount()))
    UO.Print(STR(UO.FindFullQuantity()))
END SUB

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

  • types содержит золото 0x0EED и чёрный жемчуг 0x0F7A; один color=-1 — любой hue, один Ground — земля. FALSE на земле ничего не меняет. Действуют текущие пределы поиска. Выводятся ID, число объектов и сумма единиц.

Золото в рюкзаке и на земле

# Золото в рюкзаке и на земле
#
# За один обход ищет разные графики, цвета и контейнеры и возвращает один найденный ID. Полный
# список читается через GetFoundItems.
#
# Integer: serial первого совпадения в локальном порядке обхода; 0, если совпадений нет. Не
# graphic, количество, массив или Boolean. Проверяйте result <> 0, а не result = TRUE либо
# result = 1. Стопка считается одним объектом; Mobileодним объектом и одной единицей. Порядок
# не означает близость и не гарантирован между поисками.

SUB Main()
    # typesтолько золото; colorsлюбой hue. Containersbackpack и земля; TRUE включает
    # вложенные сумки. Выводятся объекты/стопки и единицы из обеих областей, каждый объект
    # учитывается один раз.

    DIM types[0]
    types[0] = 0x0EED
    DIM colors[0]
    colors[0] = -1
    DIM containers[1]
    containers[0] = 'backpack'
    containers[1] = UO.Ground()
    UO.FindTypesArrayEx(types, colors, containers, TRUE)
    UO.Print(STR(UO.FindCount()))
    UO.Print(STR(UO.FindFullQuantity()))
END SUB

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

  • types — только золото; colors — любой hue. Containers — backpack и земля; TRUE включает вложенные сумки. Выводятся объекты/стопки и единицы из обеих областей, каждый объект учитывается один раз.

Полная функция со списком результата

# Полная функция со списком результата
#
# За один обход ищет разные графики, цвета и контейнеры и возвращает один найденный ID. Полный
# список читается через GetFoundItems.
#
# Integer: serial первого совпадения в локальном порядке обхода; 0, если совпадений нет. Не
# graphic, количество, массив или Boolean. Проверяйте result <> 0, а не result = TRUE либо
# result = 1. Стопка считается одним объектом; Mobileодним объектом и одной единицей. Порядок
# не означает близость и не гарантирован между поисками.

SUB Main()
    # SearchTypesIn(container,firstType,secondType) возвращает Array<Integer>, тогда как встроенная
    # команда возвращает один Integer ID. Полностью приведённая функция заполняет массивы, ищет
    # рекурсивно и сразу копирует GetFoundItems. Main проверяет каждый сохранённый ID и выводит его.

    VAR items = SearchTypesIn('backpack', 0x0EED, 0x0F7A)
    FOR EACH item IN items
        IF UO.IsObjectExists(item) THEN
            UO.Print(Hex(item))
        END IF
    NEXT
END SUB

FUNCTION SearchTypesIn(container, firstType, secondType)
    DIM types[1]
    types[0] = firstType
    types[1] = secondType
    DIM colors[0]
    colors[0] = -1
    DIM containers[0]
    containers[0] = container
    UO.FindTypesArrayEx(types, colors, containers, TRUE)
    RETURN UO.GetFoundItems()
END FUNCTION

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

  • SearchTypesIn(container,firstType,secondType) возвращает Array, тогда как встроенная команда возвращает один Integer ID. Полностью приведённая функция заполняет массивы, ищет рекурсивно и сразу копирует GetFoundItems. Main проверяет каждый сохранённый ID и выводит его.

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

Basic

⚠️ **GitHub.com Fallback** ⚠️