Skip to content

API UO Flying es

Codex edited this page Sep 22, 2026 · 1 revision

UO.Flying

ClassicUO / Basic IDE

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

Comprueba si un personaje está volando, normalmente un Gargoyle antes de una ruta o una solicitud de despegue. Sin argumento: «¿estoy volando?». Solo lee el estado; no despega, aterriza ni mueve al personaje.

Sintaxis exacta

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

Parámetros

  • id — Serial opcional: número, cadena hexadecimal, self, lasttarget o nombre UO.AddObject. Si se omite usa tu personaje. Es un ID de mobile, no graphic/type ni Z. Nombre desconocido, mobile ausente/destruido u objeto devuelven 0.

Devuelve

Integer Boolean: 1 = TRUE, 0 = FALSE. Puede compararse con números o constantes lógicas sin comillas. 1 indica IsFlying en el mobile; en caso contrario, o si no existe, 0. La altura Z por sí sola no indica vuelo.

Resultado lógico: 1 = TRUE, 0 = FALSE. Tras VAR result = comando(...), use IF result = TRUE THEN o IF result = 1 THEN; para el resultado negativo, IF result = FALSE THEN o IF result = 0 THEN. TRUE/FALSE sin comillas. Llame una vez y guarde el resultado: otra llamada puede repetir la acción o leer un estado cambiado.

Comportamiento

  • Se usa principalmente para vuelo Gargoyle, pero el getter no comprueba raza. Lee el bit mobile 0x04 desde el protocolo 7.0.0.0; antes devuelve 0. Techo, Z alta, animación de alas o raza por sí solos no prueban el vuelo.
  • UO.ToggleFly() solicita aparte un cambio, no una activación garantizada. Si ya vuelas solicita aterrizar. El servidor puede rechazarlo: vuelve a leer Flying con espera limitada. FALSE también puede indicar datos ausentes; comprueba Connected antes de actuar.
  • Lee el modelo local: no abre target, no solicita status, no cambia indicadores ni envía paquetes. Un objeto destruido está ausente incluso antes de eliminar su entrada del diccionario.
  • Cada resultado es una lectura independiente. El mundo puede cambiar entre Exists y la siguiente llamada; varias consultas no forman una instantánea atómica.

Funciones internas: de la llamada al resultado

Estas son las etapas internas reales de C#. ReadState es una función auxiliar completamente definida en el ejemplo, no un comando integrado oculto.

1. RegisterCharacterGetterAliases

Al crear el runtime, RegisterCharacterGetterAliases registra nombres y formas. Sin argumento utiliza bridge.Self; con un argumento utiliza su serial. Se conservan los registros existentes.

1 indica IsFlying en el mobile; en caso contrario, o si no existe, 0. La altura Z por sí sola no indica vuelo.

Código del proyecto: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; función RegisterCharacterGetterAliases.

2. TryGetObject

TryGetObject resuelve números, cadenas hexadecimales y nombres guardados. El nombre AddObject se resuelve en cada llamada; no busca graphic/type ni abre una selección interactiva.

Serial opcional: número, cadena hexadecimal, self, lasttarget o nombre UO.AddObject. Si se omite usa tu personaje. Es un ID de mobile, no graphic/type ni Z. Nombre desconocido, mobile ausente/destruido u objeto devuelven 0.

Código del proyecto: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; función TryGetObject.

3. Invoke

Invoke lee en el hilo del juego; un hilo de trabajo espera el procesamiento del gestor. Cancelar el script interrumpe esa espera. No añade demoras ni consultas de red.

Cada resultado es una lectura independiente. El mundo puede cambiar entre Exists y la siguiente llamada; varias consultas no forman una instantánea atómica.

Código del proyecto: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; función Invoke.

4. Flying

Comprueba si un personaje está volando, normalmente un Gargoyle antes de una ruta o una solicitud de despegue. Sin argumento: «¿estoy volando?». Solo lee el estado; no despega, aterriza ni mueve al personaje.

Se usa principalmente para vuelo Gargoyle, pero el getter no comprueba raza. Lee el bit mobile 0x04 desde el protocolo 7.0.0.0; antes devuelve 0. Techo, Z alta, animación de alas o raza por sí solos no prueban el vuelo.

Código del proyecto: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; función Flying.

Lee el modelo local: no abre target, no solicita status, no cambia indicadores ni envía paquetes. Un objeto destruido está ausente incluso antes de eliminar su entrada del diccionario.

Ejemplos

Comprobar el modo antes del siguiente paso

# Paréntesis vacíos: self. TRUE = 1, FALSE = 0; IF UO.Flying() THEN es válido. No cambia el estado.
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

Explicación de los parámetros y la ejecución:

  • Paréntesis vacíos: self. TRUE = 1, FALSE = 0; IF UO.Flying() THEN es válido. No cambia el estado.

Consultar un personaje ya seleccionado

# ReadState(obj) recibe serial/alias y devuelve el estado; la función completa comprueba primero la existencia. Para otros personajes usa los datos ya cargados.
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

Explicación de los parámetros y la ejecución:

  • ReadState(obj) recibe serial/alias y devuelve el estado; la función completa comprueba primero la existencia. Para otros personajes usa los datos ya cargados.

Pedir el vuelo una vez y esperar su estado

# Para tu Gargoyle en un servidor con vuelo. EnsureFlight(timeoutMs) devuelve 1/TRUE al observar vuelo, o 0/FALSE. Límite 2000 ms, consultas cada 50 ms. Ninguna solicitud si ya vuelas; en otro caso como máximo una. Una pausa o retraso de ejecución puede alargar el tiempo real.
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

Explicación de los parámetros y la ejecución:

  • Para tu Gargoyle en un servidor con vuelo. EnsureFlight(timeoutMs) devuelve 1/TRUE al observar vuelo, o 0/FALSE. Límite 2000 ms, consultas cada 50 ms. Ninguna solicitud si ya vuelas; en otro caso como máximo una. Una pausa o retraso de ejecución puede alargar el tiempo real.

Clone this wiki locally