Skip to content

API UO Flying ja

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 — 任意の mobile serial:数値、16進文字列、self、lasttarget、UO.AddObject の名前。省略時は自分です。物体の ID であり graphic/type や Z ではありません。不明な名前、不在・破棄済み mobile、アイテムは 0 です。

戻り値

Integer Boolean:1 = TRUE、0 = FALSE。数値または引用符のない論理定数と比較できます。 mobile が IsFlying なら 1、それ以外または不在なら 0。高さ Z だけでは飛行とは判断しません。

論理的な結果です。1 = TRUE、0 = FALSE。VAR result = command(...) で保存した後は IF result = TRUE THEN または IF result = 1 THEN、否定時は IF result = FALSE THEN または IF result = 0 THEN と書けます。TRUE/FALSE に引用符は付けません。一度呼び出して保存してください。再呼び出しは動作を繰り返したり、変更後の状態を読んだりする場合があります。

動作

  • 主な用途は Gargoyle の飛行ですが、getter は種族を判定しません。プロトコル 7.0.0.0 以降で mobile のビット 0x04 を読み、旧版では 0 です。屋根、高い Z、翼のアニメーション、種族だけでは飛行状態を証明できません。
  • 別の操作 UO.ToggleFly() は状態切替を要求し、有効化を保証しません。飛行中なら着陸要求になります。サーバーが拒否する場合があるため、上限付きで待ち Flying を再確認します。FALSE はデータ不在でも返るので、操作前に Connected を確認します。
  • ローカルモデルを読みます。target、status 要求、フラグ変更、パケット送信は行いません。破棄済みの物体は辞書から削除される前でも不在として扱います。
  • 結果はそれぞれ独立した読み取りです。Exists と次の呼び出しの間に世界が変化するため、複数の照会は不可分なスナップショットではありません。

内部関数:呼び出しから結果まで

実際の C# 内部処理を示します。ReadState は例に完全な定義を含む補助関数で、隠れた組み込み命令ではありません。

1. RegisterCharacterGetterAliases

runtime 作成時に RegisterCharacterGetterAliases が名前と形式を登録します。引数なしでは bridge.Self、引数ありでは指定 serial を使います。既存の登録は保持します。

mobile が IsFlying なら 1、それ以外または不在なら 0。高さ Z だけでは飛行とは判断しません。

プロジェクトのソース: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; 関数 RegisterCharacterGetterAliases.

2. TryGetObject

TryGetObject は数値、16進文字列、保存名を解決します。AddObject 名は呼び出すたびに解決します。graphic/type の検索や対話的な選択は行いません。

任意の mobile serial:数値、16進文字列、self、lasttarget、UO.AddObject の名前。省略時は自分です。物体の ID であり 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 は種族を判定しません。プロトコル 7.0.0.0 以降で mobile のビット 0x04 を読み、旧版では 0 です。屋根、高い Z、翼のアニメーション、種族だけでは飛行状態を証明できません。

プロジェクトのソース: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; 関数 Flying.

ローカルモデルを読みます。target、status 要求、フラグ変更、パケット送信は行いません。破棄済みの物体は辞書から削除される前でも不在として扱います。

使用例

次の処理前にモードを確認

# 空の括弧は selfTRUE = 1FALSE = 0IF 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 ms50 ms ごとに確認既に飛行中なら要求せずそれ以外でも一度だけです停止や実行遅延で実時間は長くなり得ます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 ms、50 ms ごとに確認。既に飛行中なら要求せず、それ以外でも一度だけです。停止や実行遅延で実時間は長くなり得ます。

Clone this wiki locally