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.