-
Notifications
You must be signed in to change notification settings - Fork 0
API UO FindAnyType
ClassicUO / Basic IDE
Оглавление · Алфавитный указатель · Search
Находит ближайшего загруженного mobile с одним из заданных graphic тела. Применяется для поиска определённого вида существа. Предметы в сундуке или на земле эта команда не ищет: для них нужны FindType/FindList.
UO.FindAnyType(distance:Any, type:Any) -> Integer
UO.FindAnyType(distance:Any, type:Any, type2:Any) -> Integer
UO.FindAnyType(distance:Any, type:Any, type2:Any, type3:Any) -> Integer
UO.FindAnyType(distance:Any, type:Any, type2:Any, type3:Any, type4:Any) -> Integer
UO.FindAnyType(distance:Any, type:Any, type2:Any, type3:Any, type4:Any, type5:Any) -> Integer
UO.FindAnyType(distance:Any, type:Any, type2:Any, type3:Any, type4:Any, type5:Any, type6:Any) -> Integer
UO.FindAnyType(distance:Any, type:Any, type2:Any, type3:Any, type4:Any, type5:Any, type6:Any, type7:Any) -> Integer
UO.FindAnyType(distance:Any, type:Any, type2:Any, type3:Any, type4:Any, type5:Any, type6:Any, type7:Any, type8:Any) -> Integer
UO.FindAnyType(distance:Any, type:Any, type2:Any, type3:Any, type4:Any, type5:Any, type6:Any, type7:Any, type8:Any, type9:Any) -> Integer
UO.FindAnyType(distance:Any, type:Any, type2:Any, type3:Any, type4:Any, type5:Any, type6:Any, type7:Any, type8:Any, type9:Any, type10:Any) -> Integer
UO.FindAnyType(distance:Any, type:Any, type2:Any, type3:Any, type4:Any, type5:Any, type6:Any, type7:Any, type8:Any, type9:Any, type10:Any, type11:Any) -> Integer
UO.FindAnyType(distance:Any, type:Any, type2:Any, type3:Any, type4:Any, type5:Any, type6:Any, type7:Any, type8:Any, type9:Any, type10:Any, type11:Any, type12:Any) -> Integer
UO.FindAnyType(distance:Any, type:Any, type2:Any, type3:Any, type4:Any, type5:Any, type6:Any, type7:Any, type8:Any, type9:Any, type10:Any, type11:Any, type12:Any, type13:Any) -> Integer
UO.FindAnyType(distance:Any, type:Any, type2:Any, type3:Any, type4:Any, type5:Any, type6:Any, type7:Any, type8:Any, type9:Any, type10:Any, type11:Any, type12:Any, type13:Any, type14:Any) -> Integer
UO.FindAnyType(distance:Any, type:Any, type2:Any, type3:Any, type4:Any, type5:Any, type6:Any, type7:Any, type8:Any, type9:Any, type10:Any, type11:Any, type12:Any, type13:Any, type14:Any, type15:Any) -> Integer
UO.FindAnyType(distance:Any, type:Any, type2:Any, type3:Any, type4:Any, type5:Any, type6:Any, type7:Any, type8:Any, type9:Any, type10:Any, type11:Any, type12:Any, type13:Any, type14:Any, type15:Any, type16:Any) -> Integer
UO.FindAnyType(distance:Any, type:Any, type2:Any, type3:Any, type4:Any, type5:Any, type6:Any, type7:Any, type8:Any, type9:Any, type10:Any, type11:Any, type12:Any, type13:Any, type14:Any, type15:Any, type16:Any, type17:Any) -> Integer
UO.FindAnyType(distance:Any, type:Any, type2:Any, type3:Any, type4:Any, type5:Any, type6:Any, type7:Any, type8:Any, type9:Any, type10:Any, type11:Any, type12:Any, type13:Any, type14:Any, type15:Any, type16:Any, type17:Any, type18:Any) -> Integer
UO.FindAnyType(distance:Any, type:Any, type2:Any, type3:Any, type4:Any, type5:Any, type6:Any, type7:Any, type8:Any, type9:Any, type10:Any, type11:Any, type12:Any, type13:Any, type14:Any, type15:Any, type16:Any, type17:Any, type18:Any, type19:Any) -> Integer
UO.FindAnyType(distance:Any, type:Any, type2:Any, type3:Any, type4:Any, type5:Any, type6:Any, type7:Any, type8:Any, type9:Any, type10:Any, type11:Any, type12:Any, type13:Any, type14:Any, type15:Any, type16:Any, type17:Any, type18:Any, type19:Any, type20:Any) -> Integer
UO.FindAnyType(distance:Any, type:Any, type2:Any, type3:Any, type4:Any, type5:Any, type6:Any, type7:Any, type8:Any, type9:Any, type10:Any, type11:Any, type12:Any, type13:Any, type14:Any, type15:Any, type16:Any, type17:Any, type18:Any, type19:Any, type20:Any, type21:Any) -> Integer
UO.FindAnyType(distance:Any, type:Any, type2:Any, type3:Any, type4:Any, type5:Any, type6:Any, type7:Any, type8:Any, type9:Any, type10:Any, type11:Any, type12:Any, type13:Any, type14:Any, type15:Any, type16:Any, type17:Any, type18:Any, type19:Any, type20:Any, type21:Any, type22:Any) -> Integer
UO.FindAnyType(distance:Any, type:Any, type2:Any, type3:Any, type4:Any, type5:Any, type6:Any, type7:Any, type8:Any, type9:Any, type10:Any, type11:Any, type12:Any, type13:Any, type14:Any, type15:Any, type16:Any, type17:Any, type18:Any, type19:Any, type20:Any, type21:Any, type22:Any, type23:Any) -> Integer
UO.FindAnyType(distance:Any, type:Any, type2:Any, type3:Any, type4:Any, type5:Any, type6:Any, type7:Any, type8:Any, type9:Any, type10:Any, type11:Any, type12:Any, type13:Any, type14:Any, type15:Any, type16:Any, type17:Any, type18:Any, type19:Any, type20:Any, type21:Any, type22:Any, type23:Any, type24:Any) -> Integer
UO.FindAnyType(distance:Any, type:Any, type2:Any, type3:Any, type4:Any, type5:Any, type6:Any, type7:Any, type8:Any, type9:Any, type10:Any, type11:Any, type12:Any, type13:Any, type14:Any, type15:Any, type16:Any, type17:Any, type18:Any, type19:Any, type20:Any, type21:Any, type22:Any, type23:Any, type24:Any, type25:Any) -> Integer
UO.FindAnyType(distance:Any, type:Any, type2:Any, type3:Any, type4:Any, type5:Any, type6:Any, type7:Any, type8:Any, type9:Any, type10:Any, type11:Any, type12:Any, type13:Any, type14:Any, type15:Any, type16:Any, type17:Any, type18:Any, type19:Any, type20:Any, type21:Any, type22:Any, type23:Any, type24:Any, type25:Any, type26:Any) -> Integer
UO.FindAnyType(distance:Any, type:Any, type2:Any, type3:Any, type4:Any, type5:Any, type6:Any, type7:Any, type8:Any, type9:Any, type10:Any, type11:Any, type12:Any, type13:Any, type14:Any, type15:Any, type16:Any, type17:Any, type18:Any, type19:Any, type20:Any, type21:Any, type22:Any, type23:Any, type24:Any, type25:Any, type26:Any, type27:Any) -> Integer
UO.FindAnyType(distance:Any, type:Any, type2:Any, type3:Any, type4:Any, type5:Any, type6:Any, type7:Any, type8:Any, type9:Any, type10:Any, type11:Any, type12:Any, type13:Any, type14:Any, type15:Any, type16:Any, type17:Any, type18:Any, type19:Any, type20:Any, type21:Any, type22:Any, type23:Any, type24:Any, type25:Any, type26:Any, type27:Any, type28:Any) -> Integer
UO.FindAnyType(distance:Any, type:Any, type2:Any, type3:Any, type4:Any, type5:Any, type6:Any, type7:Any, type8:Any, type9:Any, type10:Any, type11:Any, type12:Any, type13:Any, type14:Any, type15:Any, type16:Any, type17:Any, type18:Any, type19:Any, type20:Any, type21:Any, type22:Any, type23:Any, type24:Any, type25:Any, type26:Any, type27:Any, type28:Any, type29:Any) -> Integer
UO.FindAnyType(distance:Any, type:Any, type2:Any, type3:Any, type4:Any, type5:Any, type6:Any, type7:Any, type8:Any, type9:Any, type10:Any, type11:Any, type12:Any, type13:Any, type14:Any, type15:Any, type16:Any, type17:Any, type18:Any, type19:Any, type20:Any, type21:Any, type22:Any, type23:Any, type24:Any, type25:Any, type26:Any, type27:Any, type28:Any, type29:Any, type30:Any) -> Integer
UO.FindAnyType(distance:Any, type:Any, type2:Any, type3:Any, type4:Any, type5:Any, type6:Any, type7:Any, type8:Any, type9:Any, type10:Any, type11:Any, type12:Any, type13:Any, type14:Any, type15:Any, type16:Any, type17:Any, type18:Any, type19:Any, type20:Any, type21:Any, type22:Any, type23:Any, type24:Any, type25:Any, type26:Any, type27:Any, type28:Any, type29:Any, type30:Any, type31:Any) -> Integer
Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.
-
distance— Горизонтальный радиус в клетках включительно: 5 допускает расстояние 0..5. Расстояние — max(abs(dx),abs(dy)), поэтому соседняя диагональ тоже 1. По умолчанию или при отрицательном числе берётся UO.FindDistance(), а не безлимитный поиск. 0 оставляет ту же клетку X/Y. Не длина маршрута; препятствия и этажи этим параметром не проверяются. -
type— Graphic тела mobile, не serial и не graphic предмета. Число 0..65534 или hex-строка, например 0x003B. Несколько значений объединяются как OR: число 5, строка "5|6" либо плоский массив чисел/числовых строк. Можно смешать плоский массив и отдельные аргументы. Порядок значений приоритет не задаёт. Нечисловые токены исключаются; полностью ошибочная маска не находит ничего. Вложенные массивы не являются числами и игнорируются как ошибочные элементы; многомерные маски не поддерживаются. -
type2— Необязательная дополнительная маска type; те же формы, что у type. Объединяется с предыдущими через OR, не задаёт отдельный радиус, hue, Z или приоритет. -
type3— Необязательная дополнительная маска type; те же формы, что у type. Объединяется с предыдущими через OR, не задаёт отдельный радиус, hue, Z или приоритет. -
type4— Необязательная дополнительная маска type; те же формы, что у type. Объединяется с предыдущими через OR, не задаёт отдельный радиус, hue, Z или приоритет. -
type5— Необязательная дополнительная маска type; те же формы, что у type. Объединяется с предыдущими через OR, не задаёт отдельный радиус, hue, Z или приоритет. -
type6— Необязательная дополнительная маска type; те же формы, что у type. Объединяется с предыдущими через OR, не задаёт отдельный радиус, hue, Z или приоритет. -
type7— Необязательная дополнительная маска type; те же формы, что у type. Объединяется с предыдущими через OR, не задаёт отдельный радиус, hue, Z или приоритет. -
type8— Необязательная дополнительная маска type; те же формы, что у type. Объединяется с предыдущими через OR, не задаёт отдельный радиус, hue, Z или приоритет. -
type9— Необязательная дополнительная маска type; те же формы, что у type. Объединяется с предыдущими через OR, не задаёт отдельный радиус, hue, Z или приоритет. -
type10— Необязательная дополнительная маска type; те же формы, что у type. Объединяется с предыдущими через OR, не задаёт отдельный радиус, hue, Z или приоритет. -
type11— Необязательная дополнительная маска type; те же формы, что у type. Объединяется с предыдущими через OR, не задаёт отдельный радиус, hue, Z или приоритет. -
type12— Необязательная дополнительная маска type; те же формы, что у type. Объединяется с предыдущими через OR, не задаёт отдельный радиус, hue, Z или приоритет. -
type13— Необязательная дополнительная маска type; те же формы, что у type. Объединяется с предыдущими через OR, не задаёт отдельный радиус, hue, Z или приоритет. -
type14— Необязательная дополнительная маска type; те же формы, что у type. Объединяется с предыдущими через OR, не задаёт отдельный радиус, hue, Z или приоритет. -
type15— Необязательная дополнительная маска type; те же формы, что у type. Объединяется с предыдущими через OR, не задаёт отдельный радиус, hue, Z или приоритет. -
type16— Необязательная дополнительная маска type; те же формы, что у type. Объединяется с предыдущими через OR, не задаёт отдельный радиус, hue, Z или приоритет. -
type17— Необязательная дополнительная маска type; те же формы, что у type. Объединяется с предыдущими через OR, не задаёт отдельный радиус, hue, Z или приоритет. -
type18— Необязательная дополнительная маска type; те же формы, что у type. Объединяется с предыдущими через OR, не задаёт отдельный радиус, hue, Z или приоритет. -
type19— Необязательная дополнительная маска type; те же формы, что у type. Объединяется с предыдущими через OR, не задаёт отдельный радиус, hue, Z или приоритет. -
type20— Необязательная дополнительная маска type; те же формы, что у type. Объединяется с предыдущими через OR, не задаёт отдельный радиус, hue, Z или приоритет. -
type21— Необязательная дополнительная маска type; те же формы, что у type. Объединяется с предыдущими через OR, не задаёт отдельный радиус, hue, Z или приоритет. -
type22— Необязательная дополнительная маска type; те же формы, что у type. Объединяется с предыдущими через OR, не задаёт отдельный радиус, hue, Z или приоритет. -
type23— Необязательная дополнительная маска type; те же формы, что у type. Объединяется с предыдущими через OR, не задаёт отдельный радиус, hue, Z или приоритет. -
type24— Необязательная дополнительная маска type; те же формы, что у type. Объединяется с предыдущими через OR, не задаёт отдельный радиус, hue, Z или приоритет. -
type25— Необязательная дополнительная маска type; те же формы, что у type. Объединяется с предыдущими через OR, не задаёт отдельный радиус, hue, Z или приоритет. -
type26— Необязательная дополнительная маска type; те же формы, что у type. Объединяется с предыдущими через OR, не задаёт отдельный радиус, hue, Z или приоритет. -
type27— Необязательная дополнительная маска type; те же формы, что у type. Объединяется с предыдущими через OR, не задаёт отдельный радиус, hue, Z или приоритет. -
type28— Необязательная дополнительная маска type; те же формы, что у type. Объединяется с предыдущими через OR, не задаёт отдельный радиус, hue, Z или приоритет. -
type29— Необязательная дополнительная маска type; те же формы, что у type. Объединяется с предыдущими через OR, не задаёт отдельный радиус, hue, Z или приоритет. -
type30— Необязательная дополнительная маска type; те же формы, что у type. Объединяется с предыдущими через OR, не задаёт отдельный радиус, hue, Z или приоритет. -
type31— Необязательная дополнительная маска type; те же формы, что у type. Объединяется с предыдущими через OR, не задаёт отдельный радиус, hue, Z или приоритет.
Integer — serial выбранного mobile или 0, если подходящего нет. Это ID, а не graphic/type, число найденных объектов или TRUE/FALSE: используйте IF found <> 0 THEN, не found = TRUE. Найденный ID можно передать UO.AddObject, UO.Attack или UO.Follow, но каждое игровое действие вызывается отдельно.
- Поиск читает только mobiles, уже загруженные клиентом; уничтоженные записи и Ignore исключены. Сам вызов не открывает target, не атакует, не идёт к цели и не запрашивает у сервера удалённые объекты.
- Расстояние — геометрическое max(abs(dx),abs(dy)), не длина маршрута. Близость не гарантирует отсутствие стены или доступность другого этажа. Состояние может измениться после возврата.
- Жизнь, скрытность и линия обзора автоматически не проверяются. Если они важны, используйте GetMobiles с aliveOnly/visibleOnly либо свои проверки. Наличие у сервера статуса Enemy не делает любого NPC подходящим.
- Не изменяет FindItem, FindCount или GetFoundItems. Эти поля могут содержать результаты предыдущей другой команды: используйте непосредственно возвращённый ID.
- От 2 до 32 аргументов: distance и до 31 маски type. Плоский массив позволяет передать больше значений. Каждое следующее значение после type — ещё body/type, не hue или notoriety.
- В этой команде нет фильтра Z, notoriety, расы игрока или класса по одежде. Self НЕ исключается: если собственный graphic входит в маску и self не в Ignore, можно получить свой serial на расстоянии 0.
- Выбирает ближайшего; одинаковое расстояние разрешается меньшим serial. -1/any/0xFFFF/пустая маска без конкретных типов дают 0: команда требует хотя бы один явный type. Рядом с конкретными type wildcard игнорируется.
Ниже описана реализация этого движка. Имена внутренних методов не являются дополнительными командами BASIC.
Регистрирует точное число аргументов и имена параметров.
Параметры не превращаются в параметры другой команды с похожим названием.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция RegisterCompactSearchApi.
Подготавливает маску и ограничения запроса.
Возвращает первый подходящий serial или Integer 0.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция FindAnyType.
Преобразует скаляры и элементы плоской маски в множество целых чисел.
Полностью ошибочная маска получает маркер отсутствия совпадений; вложенный массив не превращается в 0.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция ParseIntMask.
Разворачивает отдельные плоские маски в один массив значений.
Не строит пары body/hue; количество аргументов ограничено регистрацией.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция CombineMask.
Возвращает serial загруженных неудалённых mobiles, включая self.
FindAnyType проверяет Ignore, радиус и graphic, затем сортирует по расстоянию и serial.
Исходник проекта: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функция GetMobiles.
Примеры показывают готовые процедуры и полные пользовательские функции; внутренние C#-методы отдельно из BASIC не вызываются.
SUB Main()
# Замените 0x003B на graphic тела существа своего сервера.
VAR creature = UO.FindAnyType(10, 0x003B)
IF creature <> 0 THEN
UO.AddObject("creature", creature)
UO.Print("Distance: " + CStr(UO.GetDistance(creature)))
END IF
END SUBРазбор параметров и выполнения:
- 0x003B — body, не ID. Возврат creature — ID конкретного найденного mobile. Команда не проверяет Z, здоровье или агрессивность.
SUB Main()
DIM bodies[0]
bodies[0] = 0x003B
VAR creature = UO.FindAnyType(18, bodies, 0x000C)
# Защита от собственного ID, если маску потом изменят.
IF creature <> 0 AndAlso creature <> ASC(UO.GetSerial("self"), 0) THEN
UO.AddObject("observed_creature", creature)
END IF
END SUBРазбор параметров и выполнения:
- bodies и отдельный 0x000C объединены. Если найден self, этот пример просто пропустит действие; он не ищет следующего кандидата. Для исключения self в самом запросе используйте соответствующий фильтр GetMobiles.
SUB Main()
VAR distance = DistanceToBody(0x003B, 8)
# -1 здесь придуман помощником, а не является возвратом FindAnyType.
IF distance >= 0 AndAlso distance <= 3 THEN
UO.Print("Creature is within three cells")
END IF
END SUB
FUNCTION DistanceToBody(body, radius)
VAR found = UO.FindAnyType(radius, body)
IF found = 0 THEN
RETURN -1
END IF
RETURN UO.GetDistance(found)
END FUNCTIONРазбор параметров и выполнения:
- body — graphic, radius — предел поиска X/Y. Помощник возвращает расстояние или собственный код -1; сама UO.FindAnyType возвращает serial или 0.
ClassicUO
Bad Newbie & Basic IDE
Найти в справочнике
Клиент и скрипты
Каталоги значений
Разработка и помощь