Skip to content

API UO Flying uk

Codex edited this page Sep 22, 2026 · 1 revision

UO.Flying

ClassicUO / Basic IDE

Home · API A–Z · Каталоги

Перевіряє, чи персонаж зараз летить. Зазвичай це потрібно для Gargoyle перед маршрутом або запитом увімкнення польоту. Без аргументу відповідає: «мій персонаж зараз летить?». Лише читає стан: не вмикає політ, не приземляє й не переміщує персонажа.

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

UO.Flying() -> Integer
UO.Flying(id:Any) -> Integer

Параметри

  • id — Необов’язковий serial персонажа: число, hex-рядок, self, lasttarget або ім’я UO.AddObject. Без аргументу — свій персонаж. Це ID mobile, не graphic/type і не Z. Невідоме ім’я, відсутній/видалений mobile або предмет дають 0.

Повертає

Integer Boolean: 1 = TRUE, 0 = FALSE. Можна порівнювати з числами або логічними константами без лапок. 1 — mobile має IsFlying; 0 — прапорця немає або mobile відсутній. Висота Z сама по собі не означає політ.

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

Поведінка

  • Основне застосування — політ Gargoyle, але getter не перевіряє расу. Читає біт 0x04 mobile для протоколу 7.0.0.0 і новішого; для старого протоколу — 0. Дах, велика Z, анімація крил або сама раса не доводять, що політ увімкнено.
  • Для зміни стану існує UO.ToggleFly(): це запит перемикання, а не «увімкнути». Під час польоту повторний виклик запитує посадку. Сервер може відмовити; перевіряйте Flying з обмеженим очікуванням. FALSE також можливий без персонажа/даних, тому перед дією перевірте Connected.
  • Читає локальну модель: не відкриває target, не запитує status, не змінює прапорець і не надсилає пакет. Знищений об’єкт відсутній навіть до вилучення запису зі словника.
  • Результат — окреме читання. Світ може змінитися між Exists і наступним викликом; кілька запитів не утворюють атомарного знімка.

Внутрішні функції: від виклику до результату

Це справжні внутрішні етапи C#. ReadState повністю визначена в прикладі; це допоміжна функція, а не прихована вбудована команда.

1. RegisterCharacterGetterAliases

Під час створення runtime RegisterCharacterGetterAliases реєструє імена й форми. Без аргументу береться bridge.Self; з аргументом — вибраний serial. Наявні реєстрації зберігаються.

1 — mobile має IsFlying; 0 — прапорця немає або mobile відсутній. Висота Z сама по собі не означає політ.

Код проєкту: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функція RegisterCharacterGetterAliases.

2. TryGetObject

TryGetObject розпізнає число, hex-рядок і збережене ім’я. Ім’я AddObject визначається заново при кожному виклику; це не пошук graphic/type і не інтерактивний вибір.

Необов’язковий serial персонажа: число, hex-рядок, self, lasttarget або ім’я UO.AddObject. Без аргументу — свій персонаж. Це ID mobile, не graphic/type і не Z. Невідоме ім’я, відсутній/видалений mobile або предмет дають 0.

Код проєкту: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функція TryGetObject.

3. Invoke

Invoke читає дані в ігровому потоці; робочий потік чекає обробки запиту менеджером. Скасування скрипту перериває очікування. Додаткові затримки й мережеві запити не додаються.

Результат — окреме читання. Світ може змінитися між Exists і наступним викликом; кілька запитів не утворюють атомарного знімка.

Код проєкту: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функція Invoke.

4. Flying

Перевіряє, чи персонаж зараз летить. Зазвичай це потрібно для Gargoyle перед маршрутом або запитом увімкнення польоту. Без аргументу відповідає: «мій персонаж зараз летить?». Лише читає стан: не вмикає політ, не приземляє й не переміщує персонажа.

Основне застосування — політ Gargoyle, але getter не перевіряє расу. Читає біт 0x04 mobile для протоколу 7.0.0.0 і новішого; для старого протоколу — 0. Дах, велика Z, анімація крил або сама раса не доводять, що політ увімкнено.

Код проєкту: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функція Flying.

Читає локальну модель: не відкриває target, не запитує status, не змінює прапорець і не надсилає пакет. Знищений об’єкт відсутній навіть до вилучення запису зі словника.

Приклади

Перевірити режим перед наступним етапом

# Порожні дужки читають self. TRUE = 1, FALSE = 0; можна IF UO.Flying() THEN. Приклад не перемикає стан.
SUB Main()
    # Read once; no toggle request is sent.
    VAR active = UO.Flying()
    IF active = TRUE THEN
        UO.Print("Flying mode active")
    ELSE
        UO.Print("Ground mode or character data unavailable")
    END IF
END SUB

Пояснення параметрів і виконання:

  • Порожні дужки читають self. TRUE = 1, FALSE = 0; можна IF UO.Flying() THEN. Приклад не перемикає стан.

Перевірити раніше вибраного персонажа

# ReadState(obj) приймає serial/аліас і повертає стан; повне визначення спочатку перевіряє наявність. Чужий персонаж читається за вже завантаженими даними.
SUB Main()
    # Previously selected mobile; no target cursor is opened.
    VAR target = ASC(UO.GetSerial("lasttarget"), 0)
    IF target <> 0 AndAlso UO.Exists(target) THEN
        IF ReadState(target) THEN
            UO.AddObject("flying_mobile", target)
        END IF
    END IF
END SUB

FUNCTION ReadState(obj)
    IF NOT UO.Exists(obj) THEN
        RETURN FALSE
    END IF
    RETURN UO.Flying(obj)
END FUNCTION

Пояснення параметрів і виконання:

  • ReadState(obj) приймає serial/аліас і повертає стан; повне визначення спочатку перевіряє наявність. Чужий персонаж читається за вже завантаженими даними.

Один запит польоту та очікування стану

# Для свого Gargoyle на сервері з польотом. EnsureFlight(timeoutMs) повертає 1/TRUE, якщо спостерігається політ, інакше 0/FALSE. 2000межа очікування в мс, крок 50 мс. Якщо вже летите, запит не надсилається; інакше надсилається лише один. Пауза або затримка планувальника можуть збільшити реальний час.
SUB Main()
    # timeoutMs = 2000; poll interval = 50 ms; at most one toggle request.
    IF EnsureFlight(2000) THEN
        UO.Print("Flight confirmed; ready for the next stage")
    ELSE
        UO.Print("Flight not confirmed; route was not started")
    END IF
END SUB

FUNCTION EnsureFlight(timeoutMs)
    IF NOT UO.Connected() OrElse UO.Dead() THEN
        RETURN FALSE
    END IF
    IF UO.Flying() THEN
        RETURN TRUE
    END IF
    UO.ToggleFly()
    VAR waited = 0
    WHILE waited < timeoutMs
        IF NOT UO.Connected() THEN
            RETURN FALSE
        END IF
        IF UO.Flying() THEN
            RETURN TRUE
        END IF
        WAIT(50)
        waited += 50
    WEND
    RETURN UO.Flying()
END FUNCTION

Пояснення параметрів і виконання:

  • Для свого Gargoyle на сервері з польотом. EnsureFlight(timeoutMs) повертає 1/TRUE, якщо спостерігається політ, інакше 0/FALSE. 2000 — межа очікування в мс, крок 50 мс. Якщо вже летите, запит не надсилається; інакше надсилається лише один. Пауза або затримка планувальника можуть збільшити реальний час.

Clone this wiki locally