-
Notifications
You must be signed in to change notification settings - Fork 0
API UO Flying uk
ClassicUO / Basic IDE
Перевіряє, чи персонаж зараз летить. Зазвичай це потрібно для 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 повністю визначена в прикладі; це допоміжна функція, а не прихована вбудована команда.
Під час створення runtime RegisterCharacterGetterAliases реєструє імена й форми. Без аргументу береться bridge.Self; з аргументом — вибраний serial. Наявні реєстрації зберігаються.
1 — mobile має IsFlying; 0 — прапорця немає або mobile відсутній. Висота Z сама по собі не означає політ.
Код проєкту: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функція RegisterCharacterGetterAliases.
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.
Invoke читає дані в ігровому потоці; робочий потік чекає обробки запиту менеджером. Скасування скрипту перериває очікування. Додаткові затримки й мережеві запити не додаються.
Результат — окреме читання. Світ може змінитися між Exists і наступним викликом; кілька запитів не утворюють атомарного знімка.
Код проєкту: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функція Invoke.
Перевіряє, чи персонаж зараз летить. Зазвичай це потрібно для 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 мс. Якщо вже летите, запит не надсилається; інакше надсилається лише один. Пауза або затримка планувальника можуть збільшити реальний час.
ClassicUO
Bad Newbie & Basic IDE
Найти в справочнике
Клиент и скрипты
Каталоги значений
Разработка и помощь