Skip to content

API UO SubExists de

Codex edited this page Oct 4, 2026 · 2 revisions

UO.SubExists

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

UO.CallSub · UO.FunRunning · UO.SubExists

ClassicUO • Runtime API

Sucht eine Prozedurdefinition im aktuellen Managerkatalog, etwa vor dem Start eines optionalen Moduls. Vorhandensein bedeutet weder Ausführung noch Startfähigkeit ohne Argumente.

Genaue Syntax

UO.SubExists(subrutineName:String) -> Integer

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

Integer: 1 (True), wenn die Definition existiert, sonst 0 (False). If UO.SubExists(name), = 1 und = True sind gültig; 0 entspricht False. Keine Prüfung von Datei, Gültigkeit oder laufender Ausführung.

Verhalten

  • Bei gleichen Namen hat das gewählte Autoload Vorrang. Mehrere Definitionen darin sind mehrdeutig; unabhängig geladene Helfer benötigen eindeutige Namen. Eine Sicherung wird nicht nach Dateireihenfolge gewählt. SubExists und FunRunning verwenden den Deklarationskatalog der Sitzung einschließlich des neuen Standes nach Load/Reload; sie lesen nicht bei jedem Aufruf die Datei neu. Eine Deklaration beweist weder das Fortbestehen der Datei noch einen möglichen Neustart nach dem Löschen. FunRunning prüft zusätzlich die aktive Ausführung der gefundenen Prozedur.
  • 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. SubExists

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.

Integer: 1 (True), wenn die Definition existiert, sonst 0 (False). If UO.SubExists(name), = 1 und = True sind gültig; 0 entspricht False. Keine Prüfung von Datei, Gültigkeit oder laufender Ausführung.

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

2. FindProcedureByName

Bei gleichen Namen hat das gewählte Autoload Vorrang. Mehrere Definitionen darin sind mehrdeutig; unabhängig geladene Helfer benötigen eindeutige Namen. Eine Sicherung wird nicht nach Dateireihenfolge gewählt. SubExists und FunRunning verwenden den Deklarationskatalog der Sitzung einschließlich des neuen Standes nach Load/Reload; sie lesen nicht bei jedem Aufruf die Datei neu. Eine Deklaration beweist weder das Fortbestehen der Datei noch einen möglichen Neustart nach dem Löschen. FunRunning prüft zusätzlich die aktive Ausführung der gefundenen Prozedur.

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. SubExists

Sucht eine Prozedurdefinition im aktuellen Managerkatalog, etwa vor dem Start eines optionalen Moduls. Vorhandensein bedeutet weder Ausführung noch Startfähigkeit ohne Argumente.

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/ClassicUOInjectionApiBridge.cs; Funktion SubExists.

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

Beispiele

Verfügbare Prozedur starten

# Verfügbare Prozedur starten
#
# Sucht eine Prozedurdefinition im aktuellen Managerkatalog, etwa vor dem Start eines optionalen
# Moduls. Vorhandensein bedeutet weder Ausführung noch Startfähigkeit ohne Argumente.
#
# Integer: 1 (True), wenn die Definition existiert, sonst 0 (False). If UO.SubExists(name), = 1
# und = True sind gültig; 0 entspricht False. Keine Prüfung von Datei, Gültigkeit oder laufender
# Ausführung.

SUB Main()
    # Für diesen logischen Rückgabewert entspricht = True dem Vergleich = 1. WeightWatch unten durch
    # Laden der Datei registrieren.
    # 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.

    If UO.SubExists("WeightWatch") = True Then
        UO.CallSub("WeightWatch")
    End If
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:

  • Für diesen logischen Rückgabewert entspricht = True dem Vergleich = 1. WeightWatch unten durch Laden der Datei registrieren.
  • 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.

Ersatzprozedur auswählen

# Ersatzprozedur auswählen
#
# Sucht eine Prozedurdefinition im aktuellen Managerkatalog, etwa vor dem Start eines optionalen
# Moduls. Vorhandensein bedeutet weder Ausführung noch Startfähigkeit ohne Argumente.
#
# Integer: 1 (True), wenn die Definition existiert, sonst 0 (False). If UO.SubExists(name), = 1
# und = True sind gültig; 0 entspricht False. Keine Prüfung von Datei, Gültigkeit oder laufender
# Ausführung.

SUB Main()
    # WeightWatch kann aus einer anderen Datei stammen. Fehlt sie, wird die lokale ManaWatch
    # gewählt. Ein abgelehnter Start der vorhandenen Hauptprozedur löst keinen Ersatzstart aus.
    # 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.

    If UO.SubExists("WeightWatch") = 1 Then
        UO.CallSub("WeightWatch")
    ElseIf UO.SubExists("ManaWatch") Then
        UO.CallSub("ManaWatch")
    End If
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 kann aus einer anderen Datei stammen. Fehlt sie, wird die lokale ManaWatch gewählt. Ein abgelehnter Start der vorhandenen Hauptprozedur löst keinen Ersatzstart aus.
  • 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.

Beide Definitionen prüfen

# Beide Definitionen prüfen
#
# Sucht eine Prozedurdefinition im aktuellen Managerkatalog, etwa vor dem Start eines optionalen
# Moduls. Vorhandensein bedeutet weder Ausführung noch Startfähigkeit ohne Argumente.
#
# Integer: 1 (True), wenn die Definition existiert, sonst 0 (False). If UO.SubExists(name), = 1
# und = True sind gültig; 0 entspricht False. Keine Prüfung von Datei, Gültigkeit oder laufender
# Ausführung.

SUB Main()
    # HaveMonitors prüft beide Namen mit AndAlso. Fehlt einer, startet Main keinen. Dies garantiert
    # keinen erfolgreichen parallelen Start.
    # 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.

    If HaveMonitors() Then
        UO.CallSub("WeightWatch")
        UO.CallSub("ManaWatch")
    End If
END SUB

Function HaveMonitors() As Boolean
    Return UO.SubExists("WeightWatch") AndAlso UO.SubExists("ManaWatch")
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

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:

  • HaveMonitors prüft beide Namen mit AndAlso. Fehlt einer, startet Main keinen. Dies garantiert keinen erfolgreichen parallelen Start.
  • 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