Skip to content

API UO FindDistance

Codex edited this page Sep 15, 2026 · 4 revisions

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 — полная пользовательская функция, а не скрытая встроенная команда.

1. ExecuteStealthCompatibility

Перегрузка без аргумента выбирает чтение, с одним аргументом — преобразование value и запись. Метаданные отличают Integer от Unit.

Без аргументов: Integer — текущий предел (расстояние в клетках), не найденный ID, количество объектов или Boolean. 0 означает нулевой предел, а не неудачу. С value: Unit — значения нет; это не TRUE/FALSE и не прежняя настройка. После установки прочитайте FindDistance(), чтобы узнать сохранённое значение.

Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция ExecuteStealthCompatibility.

2. GetFindDistance

Bridge читает настройку runtime либо ограничивает и записывает целое число. Мир здесь не сканируется.

Без аргументов: Integer — текущий предел (расстояние в клетках), не найденный ID, количество объектов или Boolean. 0 означает нулевой предел, а не неудачу. С value: Unit — значения нет; это не TRUE/FALSE и не прежняя настройка. После установки прочитайте FindDistance(), чтобы узнать сохранённое значение.

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

3. SetFindDistance

Bridge читает настройку runtime либо ограничивает и записывает целое число. Мир здесь не сканируется.

Необязательный Integer. Без аргумента — чтение; value — установка. Значение ограничивается диапазоном 0..255; отрицательное становится 0, а не безлимитом. В новом runtime: 18; восстановленное состояние может содержать другое значение. Дробное число усекается к нулю; допустимы также числовые строки decimal/0x. Используйте Integer, чтобы избежать неявного преобразования.

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

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текущий предел (расстояние в клетках), не найденный 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

# Полная функция 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; результат поиска остаётся доступен.

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

Basic

Clone this wiki locally