Skip to content

API UO CallSub es

Codex edited this page Oct 3, 2026 · 1 revision

UO.CallSub

Русский · English · Українська · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

UO.CallSub · UO.FunRunning · UO.SubExists

ClassicUO • Runtime API

Solicita una tarea separada para una rutina conocida por el gestor, por ejemplo un monitor independiente. El inicio es asíncrono, distinto de una llamada Basic normal que espera el resultado.

Sintaxis exacta

UO.CallSub(subrutineName:String) -> Unit

Parámetros

  • subrutineName — String subrutineName obligatorio: nombre Sub/Function del catálogo, por ejemplo WeightWatch. No es ruta, archivo, índice, código ni etiqueta cambiada con SetScriptName. Ignora mayúsculas, pero no recorta espacios. No permite pasar argumentos a la rutina.

Devuelve

Unit: sin valor, resultado de función ni confirmación de inicio. Un nombre desconocido no inicia nada. Para ejecución síncrona usar una llamada Basic normal MyFunction(...).

Comportamiento

  • Solo busca en el catálogo de esta sesión. Los nombres duplicados eligen la primera coincidencia: usar nombres únicos. Estos comandos no cargan archivos desconocidos ni buscan en el disco.
  • CallSub proporciona cero argumentos. Private, errores sintácticos, parámetros obligatorios, Basic desactivado o la regla de una sola rutina pueden rechazar el inicio; revisar estado/errores IDE. Repetir la llamada no duplica ni reanuda una ejecución activa. Tras cancelar puede esperar su limpieza. El controlador no espera a que termine la tarea.
  • FunRunning usa el nombre original y la clave, no una etiqueta renombrada. Pausar conserva la ejecución y devuelve 1. Cancelar devuelve 0 incluso durante la limpieza. Comprobación y llamada posterior no son atómicas: la tarea puede terminar entre ambas.
  • SubExists puede devolver 1 para una definición Private o inválida. Detener o cerrar la pestaña no necesariamente elimina la entrada. Recargar un archivo modificado elimina definiciones obsoletas. Una función cargada solo en otro runtime puede no estar registrada en el gestor.

Funciones internas: de la llamada al resultado

Son etapas reales de implementación; sus nombres C# no son comandos UO adicionales. Todas las funciones auxiliares Basic ejecutables aparecen completas.

1. CallSub

String subrutineName obligatorio: nombre Sub/Function del catálogo, por ejemplo WeightWatch. No es ruta, archivo, índice, código ni etiqueta cambiada con SetScriptName. Ignora mayúsculas, pero no recorta espacios. No permite pasar argumentos a la rutina.

Unit: sin valor, resultado de función ni confirmación de inicio. Un nombre desconocido no inicia nada. Para ejecución síncrona usar una llamada Basic normal MyFunction(...).

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

2. FindProcedureByName

Solo busca en el catálogo de esta sesión. Los nombres duplicados eligen la primera coincidencia: usar nombres únicos. Estos comandos no cargan archivos desconocidos ni buscan en el disco.

SubExists puede devolver 1 para una definición Private o inválida. Detener o cerrar la pestaña no necesariamente elimina la entrada. Recargar un archivo modificado elimina definiciones obsoletas. Una función cargada solo en otro runtime puede no estar registrada en el gestor.

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

3. Exec

Solicita una tarea separada para una rutina conocida por el gestor, por ejemplo un monitor independiente. El inicio es asíncrono, distinto de una llamada Basic normal que espera el resultado.

CallSub proporciona cero argumentos. Private, errores sintácticos, parámetros obligatorios, Basic desactivado o la regla de una sola rutina pueden rechazar el inicio; revisar estado/errores IDE. Repetir la llamada no duplica ni reanuda una ejecución activa. Tras cancelar puede esperar su limpieza. El controlador no espera a que termine la tarea.

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

Son etapas reales de implementación; sus nombres C# no son comandos UO adicionales. Todas las funciones auxiliares Basic ejecutables aparecen completas.

Ejemplos

Iniciar y continuar Main

# Iniciar y continuar Main
#
# Solicita una tarea separada para una rutina conocida por el gestor, por ejemplo un monitor
# independiente. El inicio es asíncrono, distinto de una llamada Basic normal que espera el
# resultado.
#
# Unit: sin valor, resultado de función ni confirmación de inicio. Un nombre desconocido no
# inicia nada. Para ejecución síncrona usar una llamada Basic normal MyFunction(...).

SUB Main()
    # WeightWatch está definida abajo. Main devuelve 77 sin esperar las tres muestras; 77 pertenece
    # a Main, no a CallSub.
    # Guardar cada ejemplo por separado, cargarlo en IDE/gestor e iniciar Main para registrar las
    # rutinas. WeightWatch/ManaWatch están definidas por completo: tres muestras de peso/maná,
    # Wait(1000) = 1000 ms, salida solo dentro del mundo. Son monitores finitos; las pausas alargan
    # el tiempo. Permitir rutinas simultáneas para las dos tareas.

    UO.CallSub("WeightWatch")
    Return 77
END SUB

Sub WeightWatch()
    Dim sample
    For sample = 1 To 3
        If UO.Connected() Then
            UO.Print("Weight: " & CStr(UO.Weight()))
        End If
        UO.Wait(1000)
    Next
End Sub

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

  • WeightWatch está definida abajo. Main devuelve 77 sin esperar las tres muestras; 77 pertenece a Main, no a CallSub.
  • Guardar cada ejemplo por separado, cargarlo en IDE/gestor e iniciar Main para registrar las rutinas. WeightWatch/ManaWatch están definidas por completo: tres muestras de peso/maná, Wait(1000) = 1000 ms, salida solo dentro del mundo. Son monitores finitos; las pausas alargan el tiempo. Permitir rutinas simultáneas para las dos tareas.

Conservar una tarea existente

# Conservar una tarea existente
#
# Solicita una tarea separada para una rutina conocida por el gestor, por ejemplo un monitor
# independiente. El inicio es asíncrono, distinto de una llamada Basic normal que espera el
# resultado.
#
# Unit: sin valor, resultado de función ni confirmación de inicio. Un nombre desconocido no
# inicia nada. Para ejecución síncrona usar una llamada Basic normal MyFunction(...).

SUB Main()
    # StartIfIdle comprueba definición y actividad. False: no envió solicitud; True: solo solicitó
    # CallSub, no confirma inicio ni finalización.
    # Guardar cada ejemplo por separado, cargarlo en IDE/gestor e iniciar Main para registrar las
    # rutinas. WeightWatch/ManaWatch están definidas por completo: tres muestras de peso/maná,
    # Wait(1000) = 1000 ms, salida solo dentro del mundo. Son monitores finitos; las pausas alargan
    # el tiempo. Permitir rutinas simultáneas para las dos tareas.

    Return StartIfIdle("WeightWatch")
END SUB

Function StartIfIdle(name) As Boolean
    If Not UO.SubExists(name) Then
        Return False
    End If
    If UO.FunRunning(name) Then
        Return False
    End If
    UO.CallSub(name)
    Return True
End Function

Sub WeightWatch()
    Dim sample
    For sample = 1 To 3
        If UO.Connected() Then
            UO.Print("Weight: " & CStr(UO.Weight()))
        End If
        UO.Wait(1000)
    Next
End Sub

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

  • StartIfIdle comprueba definición y actividad. False: no envió solicitud; True: solo solicitó CallSub, no confirma inicio ni finalización.
  • Guardar cada ejemplo por separado, cargarlo en IDE/gestor e iniciar Main para registrar las rutinas. WeightWatch/ManaWatch están definidas por completo: tres muestras de peso/maná, Wait(1000) = 1000 ms, salida solo dentro del mundo. Son monitores finitos; las pausas alargan el tiempo. Permitir rutinas simultáneas para las dos tareas.

Dos monitores independientes

# Dos monitores independientes
#
# Solicita una tarea separada para una rutina conocida por el gestor, por ejemplo un monitor
# independiente. El inicio es asíncrono, distinto de una llamada Basic normal que espera el
# resultado.
#
# Unit: sin valor, resultado de función ni confirmación de inicio. Un nombre desconocido no
# inicia nada. Para ejecución síncrona usar una llamada Basic normal MyFunction(...).

SUB Main()
    # WeightWatch y ManaWatch no comparten variables locales. El orden de los mensajes no está
    # garantizado.
    # Guardar cada ejemplo por separado, cargarlo en IDE/gestor e iniciar Main para registrar las
    # rutinas. WeightWatch/ManaWatch están definidas por completo: tres muestras de peso/maná,
    # Wait(1000) = 1000 ms, salida solo dentro del mundo. Son monitores finitos; las pausas alargan
    # el tiempo. Permitir rutinas simultáneas para las dos tareas.

    UO.CallSub("WeightWatch")
    UO.CallSub("ManaWatch")
END SUB

Sub WeightWatch()
    Dim sample
    For sample = 1 To 3
        If UO.Connected() Then
            UO.Print("Weight: " & CStr(UO.Weight()))
        End If
        UO.Wait(1000)
    Next
End Sub

Sub ManaWatch()
    Dim sample
    For sample = 1 To 3
        If UO.Connected() Then
            UO.Print("Mana: " & CStr(UO.Mana()))
        End If
        UO.Wait(1000)
    Next
End Sub

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

  • WeightWatch y ManaWatch no comparten variables locales. El orden de los mensajes no está garantizado.
  • Guardar cada ejemplo por separado, cargarlo en IDE/gestor e iniciar Main para registrar las rutinas. WeightWatch/ManaWatch están definidas por completo: tres muestras de peso/maná, Wait(1000) = 1000 ms, salida solo dentro del mundo. Son monitores finitos; las pausas alargan el tiempo. Permitir rutinas simultáneas para las dos tareas.

Clone this wiki locally