API Dead - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

dead

Constants & Special Values · Search / Position Keywords · UO.FindMobile

dead — специальное строковое значение для отбора в UO.FindMobile. IsDead для кандидата не равен 0. Ищется мёртвый mobile, а не предмет-труп на земле.

Точный синтаксис

dead -> String (чтение без скобок)

Значение читается без круглых скобок. Способы передачи в команды и отличие от числового ID описаны ниже.

Параметры

Параметров нет.

Возвращает

При чтении dead без скобок: String "dead". Само значение ничего не ищет. Вызов UO.FindMobile(...) возвращает Integer — serial найденного mobile или 0 при отсутствии результата.

Это логический результат: 1 = TRUE, 0 = FALSE. После VAR result = команда(...) можно писать IF result = TRUE THEN или IF result = 1 THEN; для отрицательного результата — IF result = FALSE THEN или IF result = 0 THEN. TRUE/FALSE пишутся без кавычек. Вызовите команду один раз и сохраните результат: повторный вызов может повторить действие или прочитать уже изменившееся состояние.

Поведение

  • IsDead для кандидата не равен 0. Ищется мёртвый mobile, а не предмет-труп на земле.
  • Применяется в 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.

1. AddFilterValue

Регистрирует чтение bare-имени без скобок.

Возвращает String с написанием имени в нижнем регистре. Это строка-селектор, а не запускаемая процедура.

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

2. FindMobile

Дополняет отсутствующие аргументы значением all; получает список mobiles, координаты self и FindDistance.

Исключает self и кандидатов за горизонтальной границей.

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

3. ExpandMobileFilters / MatchesMobileFilters

Разбивает строки на отдельные слова и проверяет состояние, дистанцию, Z, X/Y и вид тела.

Каждый кандидат должен удовлетворить всем словам. above/below сравнивают высоты строго, near/medium/far имеют фиксированные границы.

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

4. OrderBy / ThenBy / FirstOrDefault

Сортирует прошедших по расстоянию, затем serial.

Первый serial становится результатом. Пустая выборка даёт Integer 0.

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

Последовательность поиска можно увидеть в полностью приведённом помощнике FindAndDescribe ниже. Это пользовательская обёртка над реальной командой, а не обещание доступа ко всем внутренним методам.

Примеры

Пример 1. Поиск и проверка результата

SUB Main()
    # IsDead для кандидата не равен 0. Ищется мёртвый mobile, а не предмет-труп на земле.
    VAR found = UO.FindMobile(dead)
    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

Разбор параметров и выполнения:

  • Передано dead: IsDead для кандидата не равен 0. Ищется мёртвый mobile, а не предмет-труп на земле.
  • 0 обрабатывается до чтения свойств. Print показывает ID, имя и высоты; никакое игровое действие не запускается.

Пример 2. Сочетание условий с временным радиусом

SUB Main()
    # Радиус общий для FindMobile; сохраняем настройку скрипта.
    VAR previous = UO.FindDistance()
    TRY
        UO.FindDistance(18)
        VAR found = UO.FindMobile(dead, near)
        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 — внешний предел; dead, near задаёт совместные условия. near остаётся диапазоном до 4, medium — 5..9, far — от 10.
  • Finally возвращает прежний радиус при обычном завершении или обрабатываемой ошибке. Скрипт не расширяет загрузку мира.

Пример 3. Полная функция для составного фильтра

SUB Main()
    # Пробел объединяет условия через AND.
    VAR id = FindAndDescribe("dead west")
    UO.Print("Returned ID: " + CStr(id))
END SUB

FUNCTION FindAndDescribe(filters)
    # filters — строка, например "dead west".
    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 передаётся строка "dead west". Это несколько условий одного запроса, а не последовательный поиск разных целей.
  • FindAndDescribe объявлена целиком. Она возвращает ID/0, не меняя target или персонажа.

Проверка примеров: скрипты загружены и выполнены в тестовом окружении движка с известными объектами и без выбранной цели/слоя. Отдельно проверены границы расстояния и высоты. Это не тест торговли на игровом сервере.