-
Notifications
You must be signed in to change notification settings - Fork 0
API UO FindDistance
ClassicUO • Runtime API
Читает или изменяет горизонтальный радиус поиска по умолчанию.
UO.FindDistance() -> Integer
UO.FindDistance(value:Any) -> Unit
-
value— Необязательный Integer. Без аргумента — чтение; value — установка. Значение ограничивается диапазоном 0..255; отрицательное становится 0, а не безлимитом. В новом runtime: 18; восстановленное состояние может содержать другое значение. Дробное число усекается к нулю; допустимы также числовые строки decimal/0x. Используйте Integer, чтобы избежать неявного преобразования.
Без аргументов: Integer — текущий предел (расстояние в клетках), не найденный ID, количество объектов или Boolean. 0 означает нулевой предел, а не неудачу. С value: Unit — значения нет; это не TRUE/FALSE и не прежняя настройка. После установки прочитайте FindDistance(), чтобы узнать сохранённое значение.
- Расстояние: max(abs(dx), abs(dy)) от текущей точки отсчёта дальности клиента; диагональная клетка считается за одну. Граница включается. При 0 подходят только объекты на тех же X/Y. Для движущихся Mobile расстояние учитывает конечную позицию очереди шагов.
- Настройка хранится в runtime текущего скрипта; его процедуры используют одно значение. У независимых runtime настройки отдельные. Чтение и запись не запускают поиск, не очищают FindItem/FindCount/GetFoundItems, не отправляют пакет, не двигают персонажа и не загружают дальние объекты.
- FindTypeEx и FindTypesArrayEx используют эти пределы при поиске на земле, но не внутри контейнера. Остаются фильтры type, hue, Ignore и наличие загруженного объекта. FindAtCoord игнорирует оба предела. В расширенных командах явные distance/maxZ могут заменить настройки; -1 в таких параметрах означает взять настройку, в отличие от установки самой настройки в -1. FindList также фильтрует Z при поиске в контейнерах; указанное исключение контейнеров на него не распространяется.
- Перед временным поиском сохраните значение и восстановите его в Finally. Установка автоматически не отменяется. Finally работает при обычном завершении и перехватываемой ошибке скрипта; аварийную остановку нельзя использовать как механизм очистки.
- Источник: Stealth FindDistance. В этом клиенте сохранены собственные исходные значения и диапазоны: FindDistance 18 / 0..255; FindVertical 2 / 0..120. Синтаксис Basic и расширенные фильтры выше описывают наш проект.
Ниже реальные внутренние этапы. CountGroundInRange — полная пользовательская функция, а не скрытая встроенная команда.
Перегрузка без аргумента выбирает чтение, с одним аргументом — преобразование value и запись. Метаданные отличают Integer от Unit.
Без аргументов: Integer — текущий предел (расстояние в клетках), не найденный ID, количество объектов или Boolean. 0 означает нулевой предел, а не неудачу. С value: Unit — значения нет; это не TRUE/FALSE и не прежняя настройка. После установки прочитайте FindDistance(), чтобы узнать сохранённое значение.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция ExecuteStealthCompatibility.
Bridge читает настройку runtime либо ограничивает и записывает целое число. Мир здесь не сканируется.
Без аргументов: Integer — текущий предел (расстояние в клетках), не найденный ID, количество объектов или Boolean. 0 означает нулевой предел, а не неудачу. С value: Unit — значения нет; это не TRUE/FALSE и не прежняя настройка. После установки прочитайте FindDistance(), чтобы узнать сохранённое значение.
Исходник проекта: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функция GetFindDistance.
Bridge читает настройку runtime либо ограничивает и записывает целое число. Мир здесь не сканируется.
Необязательный Integer. Без аргумента — чтение; value — установка. Значение ограничивается диапазоном 0..255; отрицательное становится 0, а не безлимитом. В новом runtime: 18; восстановленное состояние может содержать другое значение. Дробное число усекается к нулю; допустимы также числовые строки decimal/0x. Используйте Integer, чтобы избежать неявного преобразования.
Исходник проекта: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функция SetFindDistance.
Следующий поиск читает настройку, если нет явного переопределения. Наземные Item и Mobile проходят соответствующие фильтры расстояния и высоты.
FindTypeEx и FindTypesArrayEx используют эти пределы при поиске на земле, но не внутри контейнера. Остаются фильтры type, hue, Ignore и наличие загруженного объекта. FindAtCoord игнорирует оба предела. В расширенных командах явные distance/maxZ могут заменить настройки; -1 в таких параметрах означает взять настройку, в отличие от установки самой настройки в -1. FindList также фильтрует Z при поиске в контейнерах; указанное исключение контейнеров на него не распространяется.
Исходник проекта: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функция FindType.
Следующий поиск читает настройку, если нет явного переопределения. Наземные 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 — текущий предел (расстояние в клетках), не найденный ID, количество
# объектов или Boolean. 0 означает нулевой предел, а не неудачу. С value: Unit — значения нет;
# это не TRUE/FALSE и не прежняя настройка. После установки прочитайте FindDistance(), чтобы
# узнать сохранённое значение.
SUB Main()
# previous сохраняет фактическую настройку. value:=5 задаёт обычный предел; 1000 показывает
# ограничение до 255. Print читает результат отдельным вызовом без аргумента. Finally
# восстанавливает previous.
VAR previous = UO.FindDistance()
TRY
UO.FindDistance(value:=5)
UO.Print(CStr(UO.FindDistance()))
UO.FindDistance(1000)
UO.Print(CStr(UO.FindDistance()))
FINALLY
UO.FindDistance(previous)
END TRY
END SUBРазбор параметров и выполнения:
- previous сохраняет фактическую настройку. value:=5 задаёт обычный предел; 1000 показывает ограничение до 255. Print читает результат отдельным вызовом без аргумента. Finally восстанавливает previous.
# Временный поиск на земле
#
# Читает или изменяет горизонтальный радиус поиска по умолчанию.
#
# Без аргументов: Integer — текущий предел (расстояние в клетках), не найденный ID, количество
# объектов или Boolean. 0 означает нулевой предел, а не неудачу. С value: Unit — значения нет;
# это не TRUE/FALSE и не прежняя настройка. После установки прочитайте FindDistance(), чтобы
# узнать сохранённое значение.
SUB Main()
# previous сохраняет настройку вызывающего кода. 5 меняет только FindDistance; второй предел
# остаётся прежним. 0x0EED — графика золота, -1 — любой hue, Container=-1 — мир, FALSE — без
# рекурсии контейнеров. id — один serial; <> 0 проверяет наличие. FindCount считает целые
# объекты/стопки. Finally восстанавливает настройку, а не список результатов.
VAR previous = UO.FindDistance()
TRY
UO.FindDistance(5)
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.FindDistance(previous)
END TRY
END SUBРазбор параметров и выполнения:
- previous сохраняет настройку вызывающего кода. 5 меняет только FindDistance; второй предел остаётся прежним. 0x0EED — графика золота, -1 — любой hue, Container=-1 — мир, FALSE — без рекурсии контейнеров. id — один serial; <> 0 проверяет наличие. FindCount считает целые объекты/стопки. Finally восстанавливает настройку, а не список результатов.
# Полная функция CountGroundInRange
#
# Читает или изменяет горизонтальный радиус поиска по умолчанию.
#
# Без аргументов: Integer — текущий предел (расстояние в клетках), не найденный ID, количество
# объектов или Boolean. 0 означает нулевой предел, а не неудачу. С value: Unit — значения нет;
# это не TRUE/FALSE и не прежняя настройка. После установки прочитайте FindDistance(), чтобы
# узнать сохранённое значение.
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; результат поиска остаётся доступен.
ClassicUO - Bad Newbie & Basic IDE Edition