Skip to content

API UO CallSub de

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

Fordert eine separate Aufgabe für eine im Manager bekannte Prozedur an, etwa einen unabhängigen Beobachter. Der Start ist asynchron, anders als ein normaler Basic-Aufruf mit Rückgabe.

Genaue Syntax

UO.CallSub(subrutineName:String) -> Unit

Parameter

  • subrutineName — Erforderlicher String subrutineName: Sub-/Function-Name im Katalog, z. B. WeightWatch. Kein Pfad, Dateiname, Laufindex, Quelltext oder durch SetScriptName geänderter Anzeigename. Groß-/Kleinschreibung wird ignoriert, Leerzeichen nicht entfernt. Prozedurargumente lassen sich nicht übergeben.

Rückgabewert

Unit: kein Wert, Funktionsergebnis oder Startnachweis. Ein unbekannter Name startet nichts. Für synchrone Aufrufe normales Basic MyFunction(...) verwenden.

Verhalten

  • Nur der Katalog dieser Sitzung wird durchsucht. Bei gleichen Namen zählt der erste Treffer: eindeutige Namen verwenden. Diese Befehle laden keine unbekannte Datei und durchsuchen nicht den Datenträger.
  • CallSub übergibt null Argumente. Private, Syntaxfehler, Pflichtparameter, deaktiviertes Basic oder die Einzelprozedurregel können den Start ablehnen; IDE-Status/Fehler prüfen. Ein aktiver Lauf wird weder dupliziert noch fortgesetzt. Ein Start nach Abbruch kann auf Bereinigung warten. Der Controller wartet nicht auf das Aufgabenende.
  • FunRunning nutzt ursprünglichen Prozedurnamen und Schlüssel, keinen umbenannten Anzeigenamen. Pause behält den Lauf und ergibt 1. Abbruch ergibt bereits während der Bereinigung 0. Prüfung und Folgeaufruf sind nicht atomar; die Aufgabe kann dazwischen enden.
  • SubExists kann auch für Private oder fehlerhafte Definitionen 1 liefern. Stoppen oder Schließen des Editor-Tabs entfernt nicht zwingend den Katalogeintrag. Neuladen einer geänderten Datei entfernt überholte Definitionen. Eine nur in einer separaten Laufzeit geladene Funktion muss dem Manager nicht bekannt sein.

Interne Funktionen: vom Aufruf zum Ergebnis

Dies sind echte Implementierungsschritte; C#-Namen sind keine zusätzlichen UO-Befehle. Alle ausführbaren Basic-Hilfsfunktionen sind vollständig enthalten.

1. CallSub

Erforderlicher String subrutineName: Sub-/Function-Name im Katalog, z. B. WeightWatch. Kein Pfad, Dateiname, Laufindex, Quelltext oder durch SetScriptName geänderter Anzeigename. Groß-/Kleinschreibung wird ignoriert, Leerzeichen nicht entfernt. Prozedurargumente lassen sich nicht übergeben.

Unit: kein Wert, Funktionsergebnis oder Startnachweis. Ein unbekannter Name startet nichts. Für synchrone Aufrufe normales Basic MyFunction(...) verwenden.

Projektquelle: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; Funktion CallSub.

2. FindProcedureByName

Nur der Katalog dieser Sitzung wird durchsucht. Bei gleichen Namen zählt der erste Treffer: eindeutige Namen verwenden. Diese Befehle laden keine unbekannte Datei und durchsuchen nicht den Datenträger.

SubExists kann auch für Private oder fehlerhafte Definitionen 1 liefern. Stoppen oder Schließen des Editor-Tabs entfernt nicht zwingend den Katalogeintrag. Neuladen einer geänderten Datei entfernt überholte Definitionen. Eine nur in einer separaten Laufzeit geladene Funktion muss dem Manager nicht bekannt sein.

Projektquelle: src/ClassicUO.Client/Game/Managers/YokoInjectionManager.cs; Funktion FindProcedureByName.

3. Exec

Fordert eine separate Aufgabe für eine im Manager bekannte Prozedur an, etwa einen unabhängigen Beobachter. Der Start ist asynchron, anders als ein normaler Basic-Aufruf mit Rückgabe.

CallSub übergibt null Argumente. Private, Syntaxfehler, Pflichtparameter, deaktiviertes Basic oder die Einzelprozedurregel können den Start ablehnen; IDE-Status/Fehler prüfen. Ein aktiver Lauf wird weder dupliziert noch fortgesetzt. Ein Start nach Abbruch kann auf Bereinigung warten. Der Controller wartet nicht auf das Aufgabenende.

Projektquelle: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; Funktion Exec.

Dies sind echte Implementierungsschritte; C#-Namen sind keine zusätzlichen UO-Befehle. Alle ausführbaren Basic-Hilfsfunktionen sind vollständig enthalten.

Beispiele

Starten und Main fortsetzen

# Starten und Main fortsetzen
#
# Fordert eine separate Aufgabe für eine im Manager bekannte Prozedur an, etwa einen
# unabhängigen Beobachter. Der Start ist asynchron, anders als ein normaler Basic-Aufruf mit
# Rückgabe.
#
# Unit: kein Wert, Funktionsergebnis oder Startnachweis. Ein unbekannter Name startet nichts.
# Für synchrone Aufrufe normales Basic MyFunction(...) verwenden.

SUB Main()
    # WeightWatch ist unten definiert. Main liefert 77 ohne auf drei Messungen zu warten; 77 stammt
    # von Main, nicht CallSub.
    # Jedes Beispiel separat speichern, in IDE/Manager laden und Main starten, damit die Prozeduren
    # registriert sind. WeightWatch/ManaWatch sind vollständig definiert: drei
    # Gewichts-/Manamessungen, Wait(1000) = 1000 ms, Ausgabe nur in der Welt. Endliche Beobachtung;
    # Pausen verlängern die Dauer. Für zwei Aufgaben parallele Prozeduren erlauben.

    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

Erläuterung der Parameter und Ausführung:

  • WeightWatch ist unten definiert. Main liefert 77 ohne auf drei Messungen zu warten; 77 stammt von Main, nicht CallSub.
  • Jedes Beispiel separat speichern, in IDE/Manager laden und Main starten, damit die Prozeduren registriert sind. WeightWatch/ManaWatch sind vollständig definiert: drei Gewichts-/Manamessungen, Wait(1000) = 1000 ms, Ausgabe nur in der Welt. Endliche Beobachtung; Pausen verlängern die Dauer. Für zwei Aufgaben parallele Prozeduren erlauben.

Bestehenden Lauf behalten

# Bestehenden Lauf behalten
#
# Fordert eine separate Aufgabe für eine im Manager bekannte Prozedur an, etwa einen
# unabhängigen Beobachter. Der Start ist asynchron, anders als ein normaler Basic-Aufruf mit
# Rückgabe.
#
# Unit: kein Wert, Funktionsergebnis oder Startnachweis. Ein unbekannter Name startet nichts.
# Für synchrone Aufrufe normales Basic MyFunction(...) verwenden.

SUB Main()
    # StartIfIdle prüft Definition und Aktivität. False: keine Anfrage; True: nur CallSub
    # angefordert, kein Nachweis für Start oder Abschluss.
    # Jedes Beispiel separat speichern, in IDE/Manager laden und Main starten, damit die Prozeduren
    # registriert sind. WeightWatch/ManaWatch sind vollständig definiert: drei
    # Gewichts-/Manamessungen, Wait(1000) = 1000 ms, Ausgabe nur in der Welt. Endliche Beobachtung;
    # Pausen verlängern die Dauer. Für zwei Aufgaben parallele Prozeduren erlauben.

    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

Erläuterung der Parameter und Ausführung:

  • StartIfIdle prüft Definition und Aktivität. False: keine Anfrage; True: nur CallSub angefordert, kein Nachweis für Start oder Abschluss.
  • Jedes Beispiel separat speichern, in IDE/Manager laden und Main starten, damit die Prozeduren registriert sind. WeightWatch/ManaWatch sind vollständig definiert: drei Gewichts-/Manamessungen, Wait(1000) = 1000 ms, Ausgabe nur in der Welt. Endliche Beobachtung; Pausen verlängern die Dauer. Für zwei Aufgaben parallele Prozeduren erlauben.

Zwei unabhängige Beobachter

# Zwei unabhängige Beobachter
#
# Fordert eine separate Aufgabe für eine im Manager bekannte Prozedur an, etwa einen
# unabhängigen Beobachter. Der Start ist asynchron, anders als ein normaler Basic-Aufruf mit
# Rückgabe.
#
# Unit: kein Wert, Funktionsergebnis oder Startnachweis. Ein unbekannter Name startet nichts.
# Für synchrone Aufrufe normales Basic MyFunction(...) verwenden.

SUB Main()
    # WeightWatch und ManaWatch laufen unabhängig, ohne gemeinsame lokale Variablen. Die
    # Ausgabereihenfolge ist nicht garantiert.
    # Jedes Beispiel separat speichern, in IDE/Manager laden und Main starten, damit die Prozeduren
    # registriert sind. WeightWatch/ManaWatch sind vollständig definiert: drei
    # Gewichts-/Manamessungen, Wait(1000) = 1000 ms, Ausgabe nur in der Welt. Endliche Beobachtung;
    # Pausen verlängern die Dauer. Für zwei Aufgaben parallele Prozeduren erlauben.

    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

Erläuterung der Parameter und Ausführung:

  • WeightWatch und ManaWatch laufen unabhängig, ohne gemeinsame lokale Variablen. Die Ausgabereihenfolge ist nicht garantiert.
  • Jedes Beispiel separat speichern, in IDE/Manager laden und Main starten, damit die Prozeduren registriert sind. WeightWatch/ManaWatch sind vollständig definiert: drei Gewichts-/Manamessungen, Wait(1000) = 1000 ms, Ausgabe nur in der Welt. Endliche Beobachtung; Pausen verlängern die Dauer. Für zwei Aufgaben parallele Prozeduren erlauben.

Clone this wiki locally