API UO FindVertical - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
UO.FindVertical
ClassicUO • Runtime API
Читает или изменяет допустимую разницу высоты при поиске по умолчанию.
Точный синтаксис
UO.FindVertical() -> Integer
UO.FindVertical(value:Any) -> Unit
Параметры
value— Необязательный Integer. Без аргумента — чтение; value — установка. Значение ограничивается диапазоном 0..120; отрицательное становится 0, а не безлимитом. В новом runtime: 2; восстановленное состояние может содержать другое значение. Дробное число усекается к нулю; допустимы также числовые строки decimal/0x. Используйте Integer, чтобы избежать неявного преобразования.
Возвращает
Без аргументов: Integer — текущий предел (разница в единицах мировой Z), не найденный ID, количество объектов или Boolean. 0 означает нулевой предел, а не неудачу. С value: Unit — значения нет; это не TRUE/FALSE и не прежняя настройка. После установки прочитайте FindVertical(), чтобы узнать сохранённое значение.
Поведение
- Высота: abs(object.Z - player.Z), в обе стороны, включая границу. При 0 подходит только одинаковая Z. Это не номер этажа и не число горизонтальных клеток.
- Настройка хранится в runtime текущего скрипта; его процедуры используют одно значение. У независимых runtime настройки отдельные. Чтение и запись не запускают поиск, не очищают FindItem/FindCount/GetFoundItems, не отправляют пакет, не двигают персонажа и не загружают дальние объекты.
- FindTypeEx и FindTypesArrayEx используют эти пределы при поиске на земле, но не внутри контейнера. Остаются фильтры type, hue, Ignore и наличие загруженного объекта. FindAtCoord игнорирует оба предела. В расширенных командах явные distance/maxZ могут заменить настройки; -1 в таких параметрах означает взять настройку, в отличие от установки самой настройки в -1. FindList также фильтрует Z при поиске в контейнерах; указанное исключение контейнеров на него не распространяется.
- Перед временным поиском сохраните значение и восстановите его в Finally. Установка автоматически не отменяется. Finally работает при обычном завершении и перехватываемой ошибке скрипта; аварийную остановку нельзя использовать как механизм очистки.
- Источник: Stealth FindVertical. В этом клиенте сохранены собственные исходные значения и диапазоны: FindDistance 18 / 0..255; FindVertical 2 / 0..120. Синтаксис Basic и расширенные фильтры выше описывают наш проект.
Внутренние функции: от вызова до результата
Ниже реальные внутренние этапы. CountGroundInRange — полная пользовательская функция, а не скрытая встроенная команда.
1. ExecuteStealthCompatibility
Перегрузка без аргумента выбирает чтение, с одним аргументом — преобразование value и запись. Метаданные отличают Integer от Unit.
Без аргументов: Integer — текущий предел (разница в единицах мировой Z), не найденный ID, количество объектов или Boolean. 0 означает нулевой предел, а не неудачу. С value: Unit — значения нет; это не TRUE/FALSE и не прежняя настройка. После установки прочитайте FindVertical(), чтобы узнать сохранённое значение.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция ExecuteStealthCompatibility.
2. GetFindVertical
Bridge читает настройку runtime либо ограничивает и записывает целое число. Мир здесь не сканируется.
Без аргументов: Integer — текущий предел (разница в единицах мировой Z), не найденный ID, количество объектов или Boolean. 0 означает нулевой предел, а не неудачу. С value: Unit — значения нет; это не TRUE/FALSE и не прежняя настройка. После установки прочитайте FindVertical(), чтобы узнать сохранённое значение.
Исходник проекта: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функция GetFindVertical.
3. SetFindVertical
Bridge читает настройку runtime либо ограничивает и записывает целое число. Мир здесь не сканируется.
Необязательный Integer. Без аргумента — чтение; value — установка. Значение ограничивается диапазоном 0..120; отрицательное становится 0, а не безлимитом. В новом runtime: 2; восстановленное состояние может содержать другое значение. Дробное число усекается к нулю; допустимы также числовые строки decimal/0x. Используйте Integer, чтобы избежать неявного преобразования.
Исходник проекта: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функция SetFindVertical.
4. FindType
Следующий поиск читает настройку, если нет явного переопределения. Наземные Item и Mobile проходят соответствующие фильтры расстояния и высоты.
FindTypeEx и FindTypesArrayEx используют эти пределы при поиске на земле, но не внутри контейнера. Остаются фильтры type, hue, Ignore и наличие загруженного объекта. FindAtCoord игнорирует оба предела. В расширенных командах явные distance/maxZ могут заменить настройки; -1 в таких параметрах означает взять настройку, в отличие от установки самой настройки в -1. FindList также фильтрует Z при поиске в контейнерах; указанное исключение контейнеров на него не распространяется.
Исходник проекта: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функция FindType.
5. FindList
Следующий поиск читает настройку, если нет явного переопределения. Наземные Item и Mobile проходят соответствующие фильтры расстояния и высоты.
FindTypeEx и FindTypesArrayEx используют эти пределы при поиске на земле, но не внутри контейнера. Остаются фильтры type, hue, Ignore и наличие загруженного объекта. FindAtCoord игнорирует оба предела. В расширенных командах явные distance/maxZ могут заменить настройки; -1 в таких параметрах означает взять настройку, в отличие от установки самой настройки в -1. FindList также фильтрует Z при поиске в контейнерах; указанное исключение контейнеров на него не распространяется.
Исходник проекта: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функция FindList.
Настройка хранится в runtime текущего скрипта; его процедуры используют одно значение. У независимых runtime настройки отдельные. Чтение и запись не запускают поиск, не очищают FindItem/FindCount/GetFoundItems, не отправляют пакет, не двигают персонажа и не загружают дальние объекты.
Примеры
Чтение, установка и ограничение диапазона
# Чтение, установка и ограничение диапазона
#
# Читает или изменяет допустимую разницу высоты при поиске по умолчанию.
#
# Без аргументов: Integer — текущий предел (разница в единицах мировой Z), не найденный ID,
# количество объектов или Boolean. 0 означает нулевой предел, а не неудачу. С value: Unit —
# значения нет; это не TRUE/FALSE и не прежняя настройка. После установки прочитайте
# FindVertical(), чтобы узнать сохранённое значение.
SUB Main()
# previous сохраняет фактическую настройку. value:=10 задаёт обычный предел; 1000 показывает
# ограничение до 120. Print читает результат отдельным вызовом без аргумента. Finally
# восстанавливает previous.
VAR previous = UO.FindVertical()
TRY
UO.FindVertical(value:=10)
UO.Print(CStr(UO.FindVertical()))
UO.FindVertical(1000)
UO.Print(CStr(UO.FindVertical()))
FINALLY
UO.FindVertical(previous)
END TRY
END SUB
Разбор параметров и выполнения:
- previous сохраняет фактическую настройку. value:=10 задаёт обычный предел; 1000 показывает ограничение до 120. Print читает результат отдельным вызовом без аргумента. Finally восстанавливает previous.
Временный поиск на земле
# Временный поиск на земле
#
# Читает или изменяет допустимую разницу высоты при поиске по умолчанию.
#
# Без аргументов: Integer — текущий предел (разница в единицах мировой Z), не найденный ID,
# количество объектов или Boolean. 0 означает нулевой предел, а не неудачу. С value: Unit —
# значения нет; это не TRUE/FALSE и не прежняя настройка. После установки прочитайте
# FindVertical(), чтобы узнать сохранённое значение.
SUB Main()
# previous сохраняет настройку вызывающего кода. 10 меняет только FindVertical; второй предел
# остаётся прежним. 0x0EED — графика золота, -1 — любой hue, Container=-1 — мир, FALSE — без
# рекурсии контейнеров. id — один serial; <> 0 проверяет наличие. FindCount считает целые
# объекты/стопки. Finally восстанавливает настройку, а не список результатов.
VAR previous = UO.FindVertical()
TRY
UO.FindVertical(10)
VAR id = UO.FindTypeEx(0x0EED, -1, -1, FALSE)
IF id <> 0 THEN
UO.Print(HEX(id) + ':' + CStr(UO.FindCount()))
ELSE
UO.Print('0')
END IF
FINALLY
UO.FindVertical(previous)
END TRY
END SUB
Разбор параметров и выполнения:
- previous сохраняет настройку вызывающего кода. 10 меняет только FindVertical; второй предел остаётся прежним. 0x0EED — графика золота, -1 — любой hue, Container=-1 — мир, FALSE — без рекурсии контейнеров. id — один serial; <> 0 проверяет наличие. FindCount считает целые объекты/стопки. Finally восстанавливает настройку, а не список результатов.
Полная функция CountGroundInRange
# Полная функция CountGroundInRange
#
# Читает или изменяет допустимую разницу высоты при поиске по умолчанию.
#
# Без аргументов: Integer — текущий предел (разница в единицах мировой Z), не найденный ID,
# количество объектов или Boolean. 0 означает нулевой предел, а не неудачу. С value: Unit —
# значения нет; это не TRUE/FALSE и не прежняя настройка. После установки прочитайте
# FindVertical(), чтобы узнать сохранённое значение.
SUB Main()
# CountGroundInRange(graphic, radius, height) сохраняет оба предела, задаёт radius=5 и
# height=10, ищет graphic=0x0EED и возвращает FindCount(). Стопка считается одним объектом.
# Полная функция приведена после Main. Finally восстанавливает оба предела даже при выходе через
# Return; результат поиска остаётся доступен.
VAR count = CountGroundInRange(0x0EED, 5, 10)
UO.Print(CStr(count))
END SUB
FUNCTION CountGroundInRange(graphic, radius, height)
VAR oldDistance = UO.FindDistance()
VAR oldVertical = UO.FindVertical()
TRY
UO.FindDistance(radius)
UO.FindVertical(height)
UO.FindTypeEx(graphic, -1, -1, FALSE)
RETURN UO.FindCount()
FINALLY
UO.FindDistance(oldDistance)
UO.FindVertical(oldVertical)
END TRY
END FUNCTION
Разбор параметров и выполнения:
- CountGroundInRange(graphic, radius, height) сохраняет оба предела, задаёт radius=5 и height=10, ищет graphic=0x0EED и возвращает FindCount(). Стопка считается одним объектом. Полная функция приведена после Main. Finally восстанавливает оба предела даже при выходе через Return; результат поиска остаётся доступен.