API UO FindAtCoord uk - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

UO.FindAtCoord

ClassicUO • Runtime API

Шукає завантажені об’єкти світу на одній точній клітинці X/Y поточної карти.

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

UO.FindAtCoord(X:Any, Y:Any) -> Integer

Параметри

  • X — горизонтальна світова координата, Integer 0..65535. Обов’язкова; це не пікселі вікна контейнера.
  • Y — вертикальна світова координата, Integer 0..65535. Обов’язкова. Додаткових параметрів Z, карти, type чи радіуса немає.

Повертає

Integer — serial першого відповідного об’єкта у списку цього клієнта. 0: збігів немає, персонаж відсутній/видалений або координати поза 0..65535. Це ID, не type, кількість чи Boolean. Усі 32 біти збережено; перевіряйте <> 0, не = TRUE або > 0. Цей самий ID стає FindItem().

Поведінка

  • Перевіряє невидалені Item на землі та Mobile, включно з персонажем на цій клітинці. Вміст контейнерів і спорядження виключено: їхні X/Y не є координатами світу. Serial зі списку Ignore пропускаються.
  • Підходять усі висоти Z на точних X/Y. FindDistance і FindVertical не обмежують цей пошук. Доступні лише завантажені об’єкти поточного світу; ландшафт, статика та інша карта не завантажуються. Пакети не надсилаються, target не відкривається, предмети не рухаються.
  • Кожен виклик спочатку очищає попередній пошук. FindCount() рахує об’єкти, FindFullQuantity() — одиниці у стосах (Mobile додає одну), GetFoundItems() повертає serial. Спочатку перевіряються Item, потім Mobile, у поточному порядку колекцій. Збережіть список перед наступним пошуком.
  • Джерело: Stealth FindAtCoord. Порядок вибору й фільтри вище описують реалізацію цього клієнта.

Внутрішні функції: від виклику до результату

Нижче справжні внутрішні етапи. CountGraphicAt — повна функція скрипта, а не додаткова вбудована команда.

1. ExecuteStealthCompatibility

Два позиційні або іменовані аргументи X/Y перетворюються зареєстрованим маршрутом; Integer bridge стає результатом.

Integer — serial першого відповідного об’єкта у списку цього клієнта. 0: збігів немає, персонаж відсутній/видалений або координати поза 0..65535. Це ID, не type, кількість чи Boolean. Усі 32 біти збережено; перевіряйте <> 0, не = TRUE або > 0. Цей самий ID стає FindItem().

Код проєкту: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функція ExecuteStealthCompatibility.

2. FindAtCoord

На ігровому потоці очищаються результати, перевіряються персонаж і межі координат, перебираються лише відповідні наземні Item та Mobile. Вміст контейнерів не підходить.

Перевіряє невидалені Item на землі та Mobile, включно з персонажем на цій клітинці. Вміст контейнерів і спорядження виключено: їхні X/Y не є координатами світу. Serial зі списку Ignore пропускаються.

Код проєкту: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функція FindAtCoord.

3. RegisterFound

Кожен збіг збільшує лічильник і додає serial. Перший serial залишається FindItem; Item.Amount додає щонайменше одну одиницю, Mobile — одну.

Кожен виклик спочатку очищає попередній пошук. FindCount() рахує об’єкти, FindFullQuantity() — одиниці у стосах (Mobile додає одну), GetFoundItems() повертає serial. Спочатку перевіряються Item, потім Mobile, у поточному порядку колекцій. Збережіть список перед наступним пошуком.

Код проєкту: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функція RegisterFound.

Підходять усі висоти Z на точних X/Y. FindDistance і FindVertical не обмежують цей пошук. Доступні лише завантажені об’єкти поточного світу; ландшафт, статика та інша карта не завантажуються. Пакети не надсилаються, target не відкривається, предмети не рухаються.

Приклади

Отримати один ID

# Отримати один ID
#
# Шукає завантажені об’єкти світу на одній точній клітинці X/Y поточної карти.
#
# Integer — serial першого відповідного об’єкта у списку цього клієнта. 0: збігів немає,
# персонаж відсутній/видалений або координати поза 0..65535. Це ID, не type, кількість чи
# Boolean. Усі 32 біти збережено; перевіряйте <> 0, не = TRUE або > 0. Цей самий ID стає
# FindItem().

SUB Main()
    # 1445 і 1690 — приклад світових X/Y: замініть їх потрібною клітинкою. id зберігає serial, HEX
    # форматує його. <> 0 перевіряє наявність результату, не кількість.

    VAR id = UO.FindAtCoord(1445, 1690)
    IF id <> 0 THEN
        UO.Print(HEX(id))
    ELSE
        UO.Print('No loaded object')
    END IF
END SUB

Пояснення параметрів і виконання:

  • 1445 і 1690 — приклад світових X/Y: замініть їх потрібною клітинкою. id зберігає serial, HEX форматує його. <> 0 перевіряє наявність результату, не кількість.

Переглянути об’єкти на клітинці персонажа

# Переглянути об’єкти на клітинці персонажа
#
# Шукає завантажені об’єкти світу на одній точній клітинці X/Y поточної карти.
#
# Integer — serial першого відповідного об’єкта у списку цього клієнта. 0: збігів немає,
# персонаж відсутній/видалений або координати поза 0..65535. Це ID, не type, кількість чи
# Boolean. Усі 32 біти збережено; перевіряйте <> 0, не = TRUE або > 0. Цей самий ID стає
# FindItem().

SUB Main()
    # x/y читаються у персонажа; ids зберігає список. Кожний id — один об’єкт, зокрема цілий стос.
    # GetType(id) читає graphic/body. Предмети не обираються й не використовуються.

    VAR x = UO.GetX('self')
    VAR y = UO.GetY('self')
    UO.FindAtCoord(x, y)
    VAR ids = UO.GetFoundItems()
    FOR EACH id IN ids
        UO.Print(HEX(id) + ' type=' + HEX(UO.GetType(id)))
    NEXT
END SUB

Пояснення параметрів і виконання:

  • x/y читаються у персонажа; ids зберігає список. Кожний id — один об’єкт, зокрема цілий стос. GetType(id) читає graphic/body. Предмети не обираються й не використовуються.

Повна функція CountGraphicAt

# Повна функція CountGraphicAt
#
# Шукає завантажені об’єкти світу на одній точній клітинці X/Y поточної карти.
#
# Integer — serial першого відповідного об’єкта у списку цього клієнта. 0: збігів немає,
# персонаж відсутній/видалений або координати поза 0..65535. Це ID, не type, кількість чи
# Boolean. Усі 32 біти збережено; перевіряйте <> 0, не = TRUE або > 0. Цей самий ID стає
# FindItem().

SUB Main()
    # CountGraphicAt(x, y, graphic) один раз шукає клітинку, перебирає збережені ID та рахує об’єкти
    # потрібної графіки. graphic=0x0EED — золото. Результат — кількість об’єктів/стосів, не сума
    # одиниць і не true/false. Один стос додає один. Повне визначення наведено після Main.

    VAR count = CountGraphicAt(1445, 1690, 0x0EED)
    UO.Print('Objects/stacks: ' + CStr(count))
END SUB

FUNCTION CountGraphicAt(x, y, graphic)
    UO.FindAtCoord(x, y)
    VAR ids = UO.GetFoundItems()
    VAR count = 0
    FOR EACH id IN ids
        IF UO.GetType(id) = graphic THEN
            count += 1
        END IF
    NEXT
    RETURN count
END FUNCTION

Пояснення параметрів і виконання:

  • CountGraphicAt(x, y, graphic) один раз шукає клітинку, перебирає збережені ID та рахує об’єкти потрібної графіки. graphic=0x0EED — золото. Результат — кількість об’єктів/стосів, не сума одиниць і не true/false. Один стос додає один. Повне визначення наведено після Main.

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

Basic