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. Подходит только действию с двумя последовательными прицелами; перед другим действием очищайте ненужную вторую цель.