API UO WaitTargetObject - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

UO.WaitTargetObject

Оглавление · Алфавитный указатель · Targeting

ClassicUO • Runtime API

Готовит один или два последовательных ответа serial на серверные прицелы.

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

UO.WaitTargetObject(id:String) -> Unit
UO.WaitTargetObject(ObjID:Any) -> Unit
UO.WaitTargetObject(id1:String, id2:String) -> Unit

Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.

Параметры

  • id / ObjID — Serial/ID предмета или персонажа, число либо hex/десятичная строка, self/backpack/lasttarget/lastobject или сохранённое имя AddObject. Это не type. Перед действием с именованным объектом проверяйте Exists; неразрешённый алиас даёт serial 0. Единственный аргумент задаёт одну цель. Числовая и строковая формы обновляют TicksTarget одинаково.
  • id1 — Serial/ID предмета или персонажа, число либо hex/десятичная строка, self/backpack/lasttarget/lastobject или сохранённое имя AddObject. Это не type. Перед действием с именованным объектом проверяйте Exists; неразрешённый алиас даёт serial 0. Первая цель формы с двумя строками.
  • id2 — Serial/ID предмета или персонажа, число либо hex/десятичная строка, self/backpack/lasttarget/lastobject или сохранённое имя AddObject. Это не type. Перед действием с именованным объектом проверяйте Exists; неразрешённый алиас даёт serial 0. Вторая цель формы с двумя строками; применяется к следующему отдельному прицелу.

Возвращает

Unit — возвращаемого значения нет. Вызывайте отдельной строкой; не используйте как true/false, serial или type. Метадата Any у совместимых форм не меняет фактический результат Unit.

Поведение

  • Команда только готовит ответ: сама не применяет предмет, навык или заклинание. Следующий серверный прицел получает подготовленную цель при обработке кадра клиента.
  • Последовательные вызовы образуют общую очередь клиента. Объекты и координатные цели обрабатываются по одному прицелу; локальные окна выбора ClientRequest*/Info/контейнера её не потребляют.
  • CancelWaitTarget очищает очередь. TerminateAll очищает её целиком; остановка ещё работающей процедуры также делает недействительными её собственные отложенные ответы. Обычное завершение короткой процедуры не отменяет подготовленную цель.
  • Отправка ответа не гарантирует действие на сервере: тот проверяет дальность, доступность объекта, видимость и правила действия. Для контроля используйте игровой результат и журнал.

Примеры

Пример 1. Предварительно выбрать себя для навыка

# Предварительно выбрать себя для навыка
#
# Готовит один или два последовательных ответа serial на серверные прицелы.
#
# Unit — возвращаемого значения нет. Вызывайте отдельной строкой; не используйте как true/false,
# serial или type. Метадата Any у совместимых форм не меняет фактический результат Unit.

SUB Main()
    # id="self" — serial своего персонажа. CancelWaitTarget убирает ранее подготовленные ответы.
    # UseSkill запрашивает навык; его серверный прицел получает подготовленную цель.

    UO.CancelWaitTarget()
    UO.WaitTargetObject('self')
    UO.UseSkill('Anatomy')
END SUB

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

  • id="self" — serial своего персонажа. CancelWaitTarget убирает ранее подготовленные ответы.
  • UseSkill запрашивает навык; его серверный прицел получает подготовленную цель.

Пример 2. Выбрать известный объект по числовому serial

# Выбрать известный объект по числовому serial
#
# Готовит один или два последовательных ответа serial на серверные прицелы.
#
# Unit — возвращаемого значения нет. Вызывайте отдельной строкой; не используйте как true/false,
# serial или type. Метадата Any у совместимых форм не меняет фактический результат Unit.

SUB Main()
    # objectId — пример serial: замените своим. Это не graphic/type.
    # Здесь цель только подготовлена. Следующий шаг скрипта должен вызвать действие, которое
    # действительно ожидает target.

    VAR objectId = 0x40001234
    IF UO.Exists(objectId) THEN
        UO.WaitTargetObject(objectId)
        UO.Print('Object target prepared')
    END IF
END SUB

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

  • objectId — пример serial: замените своим. Это не graphic/type.
  • Здесь цель только подготовлена. Следующий шаг скрипта должен вызвать действие, которое действительно ожидает target.

Пример 3. Два прицела: первый объект и второй объект

# Два прицела: первый объект и второй объект
#
# Готовит один или два последовательных ответа serial на серверные прицелы.
#
# Unit — возвращаемого значения нет. Вызывайте отдельной строкой; не используйте как true/false,
# serial или type. Метадата Any у совместимых форм не меняет фактический результат Unit.

SUB Main()
    # source и destination — предварительно заданные имена AddObject. GetSerial возвращает строки,
    # подходящие для формы id1/id2.
    # Первый серверный прицел использует first, второй — second. Подходит только действию с двумя
    # последовательными прицелами; перед другим действием очищайте ненужную вторую цель.

    VAR first = UO.GetSerial('source')
    VAR second = UO.GetSerial('destination')
    IF UO.Exists(first) AND UO.Exists(second) THEN
        UO.CancelWaitTarget()
        UO.WaitTargetObject(first, second)
    END IF
END SUB

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

  • source и destination — предварительно заданные имена AddObject. GetSerial возвращает строки, подходящие для формы id1/id2.
  • Первый серверный прицел использует first, второй — second. Подходит только действию с двумя последовательными прицелами; перед другим действием очищайте ненужную вторую цель.