-
Notifications
You must be signed in to change notification settings - Fork 0
API mob
Constants & Special Values · Search / Position Keywords · UO.FindMobile
mob — специальное строковое значение для отбора в UO.FindMobile. IsNpc не равен 0 И graphic НЕ входит в набор human. Может подойти животное или питомец; враждебность не проверяется.
mob -> String (чтение без скобок)
Значение читается без круглых скобок. Способы передачи в команды и отличие от числового ID описаны ниже.
Параметров нет.
При чтении mob без скобок: String "mob". Само значение ничего не ищет. Вызов UO.FindMobile(...) возвращает Integer — serial найденного mobile или 0 при отсутствии результата.
- IsNpc не равен 0 И graphic НЕ входит в набор human. Может подойти животное или питомец; враждебность не проверяется.
- Применяется в UO.FindMobile: от 0 до 5 аргументов. Пропущенные хвостовые аргументы равны all. Каждый аргумент может содержать одно слово или несколько слов, разделённых пробелом, табуляцией, запятой, точкой с запятой, | или +. Все условия объединяются через AND; символ | здесь не означает OR.
- Поиск просматривает только загруженные mobiles, исключает self и ограничивает расстояние величиной max(1, UO.FindDistance()). Расстояние измеряется по правилу max(abs(dx), abs(dy)); диагональная клетка считается одной. Для движущихся объектов дистанция может учитывать очередь шагов, а сравнения X/Y/Z читают текущие координаты.
- Из подходящих выбирается ближайший; при равной дистанции — меньший serial. Возвращается Integer serial или 0, а не true/false, количество или массив.
- UO.FindMobile не меняет FindItem/FindCount/GetFoundItems, не применяет Ignore и UO.FindVertical, не проверяет видимость, проходимость или линию обзора. Он не выполняет перемещение, выбор target либо загрузку удалённых объектов.
- Числовые радиусы/Z/направления, слова monster, northeast, northwest, southeast, southwest не являются фильтрами. Неизвестное слово вызывает ошибку при проверке кандидата; если кандидатов нет, этот участок может не выполниться. Для диагональной области объединяйте north east и т. п.; для числовой проверки используйте свойства найденных объектов или UO.GetMobiles().
Ниже описана реализация этого движка. Имена внутренних методов не являются дополнительными командами BASIC.
Регистрирует чтение bare-имени без скобок.
Возвращает String с написанием имени в нижнем регистре. Это строка-селектор, а не запускаемая процедура.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция AddFilterValue.
Дополняет отсутствующие аргументы значением all; получает список mobiles, координаты self и FindDistance.
Исключает self и кандидатов за горизонтальной границей.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция FindMobile.
Разбивает строки на отдельные слова и проверяет состояние, дистанцию, Z, X/Y и вид тела.
Каждый кандидат должен удовлетворить всем словам. above/below сравнивают высоты строго, near/medium/far имеют фиксированные границы.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция ExpandMobileFilters / MatchesMobileFilters.
Сортирует прошедших по расстоянию, затем serial.
Первый serial становится результатом. Пустая выборка даёт Integer 0.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция OrderBy / ThenBy / FirstOrDefault.
Последовательность поиска можно увидеть в полностью приведённом помощнике FindAndDescribe ниже. Это пользовательская обёртка над реальной командой, а не обещание доступа ко всем внутренним методам.
SUB Main()
# IsNpc не равен 0 И graphic НЕ входит в набор human. Может подойти животное или питомец; враждебность не проверяется.
VAR found = UO.FindMobile(all, all, all, all, mob)
IF found = 0 THEN
UO.Print("No matching mobile")
RETURN
END IF
# found — ID, а не graphic/type и не логическое значение.
UO.Print("ID: " + CStr(found) + " | Name: " + UO.GetName(found))
UO.Print("Z: " + CStr(UO.GetZ(found)) + " | Self Z: " + CStr(UO.GetZ(self)))
END SUBРазбор параметров и выполнения:
- Передано all, all, all, all, mob: IsNpc не равен 0 И graphic НЕ входит в набор human. Может подойти животное или питомец; враждебность не проверяется.
- 0 обрабатывается до чтения свойств. Print показывает ID, имя и высоты; никакое игровое действие не запускается.
SUB Main()
# Радиус общий для FindMobile; сохраняем настройку скрипта.
VAR previous = UO.FindDistance()
TRY
UO.FindDistance(18)
VAR found = UO.FindMobile(alive, near, all, all, mob)
IF found <> 0 THEN
UO.Print("Match: " + CStr(found))
UO.Print("Distance: " + CStr(UO.GetDistance(found)))
ELSE
UO.Print("No match in the loaded area")
END IF
FINALLY
UO.FindDistance(previous)
END TRY
END SUBРазбор параметров и выполнения:
- 18 — внешний предел; alive, near, all, all, mob задаёт совместные условия. near остаётся диапазоном до 4, medium — 5..9, far — от 10.
- Finally возвращает прежний радиус при обычном завершении или обрабатываемой ошибке. Скрипт не расширяет загрузку мира.
SUB Main()
# Пробел объединяет условия через AND.
VAR id = FindAndDescribe("mob north")
UO.Print("Returned ID: " + CStr(id))
END SUB
FUNCTION FindAndDescribe(filters)
# filters — строка, например "mob north".
VAR id = UO.FindMobile(filters)
IF id = 0 THEN
UO.Print("Nothing matched: " + filters)
RETURN 0
END IF
UO.Print(UO.GetName(id) + " | " + CStr(id))
RETURN id
END FUNCTIONРазбор параметров и выполнения:
- В helper передаётся строка "mob north". Это несколько условий одного запроса, а не последовательный поиск разных целей.
- FindAndDescribe объявлена целиком. Она возвращает ID/0, не меняя target или персонажа.
Проверка примеров: скрипты загружены и выполнены в тестовом окружении движка с известными объектами и без выбранной цели/слоя. Отдельно проверены границы расстояния и высоты. Это не тест торговли на игровом сервере.
ClassicUO - Bad Newbie & Basic IDE Edition