-
Notifications
You must be signed in to change notification settings - Fork 0
API UO FindMan
ClassicUO / Basic IDE
Home · Все команды · Константы и значения
Находит один serial по notoriety, расстоянию, высоте, телу и hue. Применяется для предварительного выбора цели без автоматической атаки.
UO.FindMan() -> Unit
UO.FindMan(notoriety:Any) -> Any
UO.FindMan(notoriety:Any, distance:Any) -> Any
UO.FindMan(notoriety:Any, distance:Any, nearest:Any) -> Any
UO.FindMan(notoriety:Any, distance:Any, nearest:Any, maxZ:Any) -> Any
UO.FindMan(notoriety:Any, distance:Any, nearest:Any, maxZ:Any, body:Any) -> Any
UO.FindMan(notoriety:Any, distance:Any, nearest:Any, maxZ:Any, body:Any, color:Any) -> Any
UO.FindMan(notoriety:Any, distance:Any, nearest:Any, maxZ:Any, body:Any, color:Any, includeSelf:Any) -> Any
Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.
-
notoriety— Статус отношения к персонажу, полученный от сервера: 0 — неизвестный, 1 — Innocent, 2 — Ally, 3 — Gray, 4 — Criminal, 5 — Enemy, 6 — Murderer, 7 — Invulnerable. Число означает один статус; "5|6" или массив чисел — любой из перечисленных. Это не цвет одежды и не класс. Отрицательное число (обычно -1), 0xFFFF, "any", пустая строка или пустой массив отдельно отключают этот фильтр. Некорректная строка без допустимых чисел не находит никого. Порядок статусов приоритет не задаёт. Фильтр 5 выбирает Enemy, а не автоматически любого NPC/монстра; реальные значения зависят от сервера. -
distance— Горизонтальный радиус в клетках включительно: 5 допускает расстояние 0..5. Расстояние — max(abs(dx),abs(dy)), поэтому соседняя диагональ тоже 1. По умолчанию или при отрицательном числе берётся UO.FindDistance(), а не безлимитный поиск. 0 оставляет ту же клетку X/Y. Не длина маршрута; препятствия и этажи этим параметром не проверяются. -
nearest— true/1 по умолчанию — ближайший, при равной дистанции меньший serial; false/0 — первый в списке клиента, не самый дальний. -
maxZ— Максимум abs(Z цели - Z своего персонажа) включительно, в единицах Z мира. Это не число этажей и не клетки X/Y. maxZ=4 при Z игрока 10 допускает Z цели 6..14; 0 требует ровно одинаковую высоту. По умолчанию/при отрицательном числе берётся UO.FindVertical(). На лестнице равная Z может исключить нужную цель. Даже малая разность Z не доказывает доступность этажа. -
body— Graphic тела персонажа/NPC, не ID конкретного персонажа и не type надетой брони. Число, hex-строка, строка "0x0190|0x0191" или массив чисел. 0x0190 (400) — мужчина-человек; 0x0191 (401) — женщина-человек. Маска объединяет оба тела. Список не включает автоматически другие расы, призраков или превращения; таблица стандартных тел. Отрицательное число (-1 по умолчанию), 0xFFFF, "any", пустая строка или пустой массив отдельно — любое тело. Неизвестный текст без допустимого числа даёт пустой результат. -
color— Hue самого mobile: Integer или числовая/hex-строка. Отрицательное число (-1 по умолчанию) и 0xFFFF — любой hue; 0 — именно hue 0, а не любое значение. Не цвет полоски notoriety и не оттенок одежды. Цвет надетой вещи этот параметр не проверяет. -
includeSelf— true/1 разрешает self при соблюдении остальных фильтров; false/0 по умолчанию исключает. Ignore действует и для self.
Integer serial, либо 0 без результата. Проверяйте id <> 0; это не Boolean и не количество. Не изменяет FindItem/FindCount/GetFoundItems и не начинает атаку.
- Поиск локальный: только уже загруженные mobiles. Учитывается Ignore; self исключён, кроме явного includeSelf=true в поддерживающих его командах. Контейнеры и предметы не являются mobiles.
- Условия применяются вместе (AND). Допустимые альтернативы внутри body/notoriety объединены через OR. Поиск не меняет FindItem, FindCount и GetFoundItems.
- В body/notoriety маска с допустимыми числами использует именно их: "any|5" всё равно ограничивает значением 5. Пустые/неверные элементы рядом с допустимыми числами игнорируются. Для отсутствия ограничения передайте -1 отдельно. Не переносите это правило на classMask: неизвестное имя класса отклоняет весь список.
- Команды не открывают область мира, не бегут к цели и не проверяют проходимость маршрута. Между выбором и обработкой сервером состояние мира может измениться.
- Передача true и 1 равнозначна для флагов, false и 0 также. Другие ненулевые числа тоже преобразуются в true, но 8/9 не являются отдельными режимами; используйте понятные true/false.
- Точный порядок: notoriety, distance, nearest, maxZ, body, color, includeSelf. Отличается от AttackNearest и GetMobiles.
- Нет параметров classMask, aliveOnly или visibleOnly. При необходимости проверяйте найденный ID отдельно; для выбора среди всех живых/видимых используйте GetMobiles, чтобы мёртвый ближайший не заслонял остальных.
Ниже описана реализация этого движка. Имена внутренних методов не являются дополнительными командами BASIC.
Разбирает 1..7 аргументов.
Применяет общие фильтры через FilterMobiles.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция CompactFindMan.
Возвращает подходящие mobiles.
При nearest=true затем сортировка по расстоянию и serial; FirstOrDefault возвращает ID/0.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция FilterMobiles.
Поиск не имеет побочного эффекта атаки.
SUB Main()
# Поиск ничего не атакует: сохраняем результат для следующего действия.
VAR ally = UO.FindMan(2, 12)
IF ally = 0 THEN
RETURN
END IF
UO.AddObject("ally_nearby", ally)
END SUBРазбор параметров и выполнения:
- 2 — Ally, 12 — радиус. Остальное: nearest=true, maxZ=FindVertical(), любое body/hue, self исключён. Команда только сохраняет цель, не атакует.
SUB Main()
# Здесь nearest идёт третьим: порядок отличается от AttackNearest.
VAR status = 5
VAR radius = 8
VAR nearest = true
VAR height = 4
VAR bodies = "0x0190|0x0191"
VAR bodyHue = -1
VAR includeMe = false
VAR enemy = UO.FindMan(status, radius, nearest, height, bodies, bodyHue, includeMe)
IF enemy <> 0 THEN
IF UO.IsDead(enemy) = 0 THEN
UO.Attack(enemy)
END IF
END IF
END SUBРазбор параметров и выполнения:
- Проверка IsDead выполнена отдельно. body задаёт тела; bodyHue=-1 не ограничивает их hue. По одежде эта команда не классифицирует.
SUB Main()
VAR chosenHue = 0x0455 # Пример hue ТЕЛА; замените нужным значением.
VAR mobile = UO.FindMan(-1, 10, false, 8, -1, chosenHue, false)
IF mobile = 0 THEN
RETURN
END IF
# Сохраняем для осмотра/дальнейшего скрипта, атаки нет.
UO.AddObject("body_hue_match", mobile)
END SUBРазбор параметров и выполнения:
- Первый -1 отключает notoriety, второй -1 отключает body. false в третьей позиции выключает сортировку; последний false исключает self. Hue одежды не проверяется.
ClassicUO
Bad Newbie & Basic IDE
Найти в справочнике
Клиент и скрипты
Каталоги значений
Разработка и помощь