DE UO Topic diagnostics introspection - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki

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

Diagnostik und Selbstbeobachtung

Home · C# · IDE · UO API · A–Z · Beispiele · Sprachen

Inspektion von Objekten, Fliesen und Gumpen, Überprüfung von Namen, Parametern und Signaturen API. Das Vorhandensein einer Signatur bestätigt nicht die Möglichkeit einer Spielaktion im aktuellen Zustand.

Abschnitte

Thema Befehle und Erklärungen
Help UO.Help
Dump UO.Dump
Info UO.Info
InfoTile UO.InfoTile
InfoGump UO.InfoGump
API Name Exists UO.ApiNameExists
API Signature Exists UO.ApiSignatureExists
API Parameter Exists UO.ApiParameterExists
Version UO.Version

Alle Theme-Befehle

Inspektion

UO.Help · UO.Dump · UO.Info · UO.InfoColor · UO.GetInfo · UO.ExtendedInfo · UO.InfoTile · UO.InfoGump · UO.InfoGumps · UO.ApiNameExists · UO.ApiParameterExists · UO.ApiSignatureExists · UO.Version · UO.ClientInfo

Beispiele zum Thema

Jede Befehlskarte verfügt über mehrere unabhängige Szenarien: Direktcode, Funktionen und Klassen. Nachfolgend finden Sie ausgewählte kurze Szenarien; Einschränkungen und eine vollständige Analyse sind geplant.

UO.InfoGump

Parameter, Ergebnis und alle Szenarien

UO.InfoGump();

UO.ApiNameExists

Parameter, Ergebnis und alle Szenarien

return UO.ApiNameExists("UO.GetType");

Vollständige Befehlsreferenz


UO.ApiNameExists

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

C#-Signaturen

int UO.ApiNameExists(object? name);

Überprüft die Registrierung des Namens der aufgerufenen nativen Funktion.

Parameter

  • name – Obligatorisch string: Der genaue registrierte Name, nicht der aufrufende Ausdruck. Groß- und Kleinschreibung sind nicht wichtig; UO. wird nicht automatisch hinzugefügt. Ein leerer oder unbekannter Name ergibt 0. Benutzerprozeduren werden nicht berücksichtigt.

Rückgabewert

int: 1 bedeutet, dass der Name registriert ist, 0, dass er nicht registriert ist. Verwende in C# result != 0 oder result == 0. Ein Vergleich von int mit true oder false ist ungültig. Die Registrierung bestätigt keine Serveraktion.

Verhalten

Eigenständige C#-Skripte

Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.

Einfaches Beispiel

Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.

Das Ergebnis eines Aufrufs wird im Journal ausgegeben. Zahlen werden nicht in bool umgewandelt; bei Arrays wird die Anzahl der Elemente angezeigt.

var result = UO.ApiNameExists("UO.GetType");
UO.Print("ApiNameExists: " + Convert.ToString(result));

1. UO.ApiNameExists – 1 – direktes Skript

Parameter und Ablauf:

  • Das erste Beispiel testet den Spielnamen mit einem expliziten UO. und gibt 1 zurück. Der genaue Name, der getestet wird, und die Anzahl der erforderlichen Argumente sind im Aufruf sichtbar.
return UO.ApiNameExists("UO.GetType");

2. UO.ApiNameExists — 2 — Skriptfunktion

Hier wird nur die Registrierung nativer Namen geprüft. Convert.ToInt32 ist eine .NET-Methode und kein Eintrag der UO-API; ApiNameExists liefert deshalb 0. Die Methode bleibt in normalem C# verfügbar.

return  RunScenario();
 object? RunScenario()
{
    var name = "Convert.ToInt32";
    return UO.ApiNameExists(name);
    return null;
}

3. UO.ApiNameExists – 3 – Szenarioklasse

Jedes numerische Ergebnis wird mit 0 verglichen; && verknüpft danach zwei bool-Werte. Für diese Namen ist das Ergebnis false.

return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        return HasBoth("GetType", "UO.GetType");
        return null;
    }

    dynamic HasBoth(dynamic first, dynamic second)
    {
        return UO.ApiNameExists(first) != 0 && UO.ApiNameExists(second) != 0;
    }
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.ApiNameExists(name) — UO.ApiNameExists(String)

Parameter: name (String)

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public int ApiNameExists(string name)

        {

            string normalized = NormalizeApiName(name);

            return metadata.NativeSubrutines.Any(definition =>

                definition.Name.Equals(normalized, StringComparison.OrdinalIgnoreCase)) ? 1 : 0;

        }

UO.ApiParameterExists

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

C#-Signaturen

int UO.ApiParameterExists(object? name);

Prüft, ob ein Laufzeitwert oder ein benanntes Objekt registriert ist.

Parameter

  • name – Obligatorisch string: Der genaue registrierte Name, nicht der aufrufende Ausdruck. Groß- und Kleinschreibung sind nicht wichtig; UO. wird nicht automatisch hinzugefügt. Ein leerer oder unbekannter Name ergibt 0. Benutzerprozeduren werden nicht berücksichtigt.

Rückgabewert

int: 1 bedeutet, dass der Name registriert ist, 0, dass er nicht registriert ist. Verwende in C# result != 0 oder result == 0. Ein Vergleich von int mit true oder false ist ungültig. Die Registrierung bestätigt keine Serveraktion.

Verhalten

Eigenständige C#-Skripte

Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.

Einfaches Beispiel

Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.

Das Ergebnis eines Aufrufs wird im Journal ausgegeben. Zahlen werden nicht in bool umgewandelt; bei Arrays wird die Anzahl der Elemente angezeigt.

var result = UO.ApiParameterExists("backpack");
UO.Print("ApiParameterExists: " + Convert.ToString(result));

1. UO.ApiParameterExists – 1 – direktes Skript

Parameter und Ablauf:

  • Das erste Beispiel testet den Spielnamen mit einem expliziten UO. und gibt 1 zurück. Der genaue Name, der getestet wird, und die Anzahl der erforderlichen Argumente sind im Aufruf sichtbar.
return UO.ApiParameterExists("UO.GetHP");

2. UO.ApiParameterExists — 2 — Skriptfunktion

Der registrierte Selektor backpack wird geprüft und liefert 1. Dabei werden weder C#-Methodenparameter noch die Existenz eines Rucksacks in der Spielwelt geprüft.

return  RunScenario();
 object? RunScenario()
{
    var name = "backpack";
    return UO.ApiParameterExists(name);
    return null;
}

3. UO.ApiParameterExists – 3 – Szenarioklasse

Parameter und Ablauf:

  • Das dritte Beispiel enthält eine vollständige Hilfsfunktion. Es vergleicht die entfernte Kurzform oder nicht unterstützte Arität mit der verfügbaren Form. Die Parameter Name, First, Second und Count bleiben Namen/Zähler unverändert. Das Ergebnis ist 0 für Anrufprüfungen und 0:1 für Wertprüfungen.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        return CompareNames("GetHP", "UO.GetHP");
        return null;
    }

    dynamic CompareNames(dynamic first, dynamic second)
    {
        return Convert.ToString(UO.ApiParameterExists(first)) + ":" + Convert.ToString(UO.ApiParameterExists(second));
    }
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.ApiParameterExists(name) — UO.ApiParameterExists(String)

Parameter: name (String)

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public int ApiParameterExists(string name)

        {

            string value = (name ?? string.Empty).Trim();

            if (value.Length == 0)

                return 0;



            if (Metadata.ShortcutVariables.Any(item => item.Equals(value, StringComparison.OrdinalIgnoreCase)))

                return 1;



            return metadata.IntrinsicVariableExists(value) ? 1 : 0;

        }

UO.ApiSignatureExists

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

C#-Signaturen

int UO.ApiSignatureExists(object? name, object? argumentCount);

Testet die Registrierung eines Namens mit der angegebenen Anzahl von Argumenten.

Parameter

  • name – Obligatorisch string: Der genaue registrierte Name, nicht der aufrufende Ausdruck. Groß- und Kleinschreibung sind nicht wichtig; UO. wird nicht automatisch hinzugefügt. Ein leerer oder unbekannter Name ergibt 0. Benutzerprozeduren werden nicht berücksichtigt.
  • argumentCount – Erforderlicher int: die Gesamtzahl der Positionsargumente, einschließlich der optionalen, die explizit übergeben werden. Eine negative oder nicht unterstützte Menge ergibt 0. Die Typen der Argumente selbst werden nicht überprüft.

Rückgabewert

int: 1 bedeutet, dass der Name registriert ist, 0, dass er nicht registriert ist. Verwende in C# result != 0 oder result == 0. Ein Vergleich von int mit true oder false ist ungültig. Die Registrierung bestätigt keine Serveraktion.

Verhalten

Eigenständige C#-Skripte

Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.

Einfaches Beispiel

Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.

Das Ergebnis eines Aufrufs wird im Journal ausgegeben. Zahlen werden nicht in bool umgewandelt; bei Arrays wird die Anzahl der Elemente angezeigt.

var result = UO.ApiSignatureExists("UO.GetType", 1);
UO.Print("ApiSignatureExists: " + Convert.ToString(result));

1. UO.ApiSignatureExists – 1 – direktes Skript

Parameter und Ablauf:

  • Das erste Beispiel testet den Spielnamen mit einem expliziten UO. und gibt 1 zurück. Der genaue Name, der getestet wird, und die Anzahl der erforderlichen Argumente sind im Aufruf sichtbar.
return UO.ApiSignatureExists("UO.GetType",1);

2. UO.ApiSignatureExists — 2 — Skriptfunktion

Die Formen von UO.FindType mit einem und mit null Argumenten werden geprüft. Das Ergebnis ist die Zeichenfolge "1:0"; die Form ohne Argumente ist nicht registriert.

return  RunScenario();
 object? RunScenario()
{
    return Convert.ToString(UO.ApiSignatureExists("UO.FindType", 1)) + ":" + Convert.ToString(UO.ApiSignatureExists("UO.FindType", 0));
    return null;
}

3. UO.ApiSignatureExists – 3 – Szenarioklasse

Parameter und Ablauf:

  • Das dritte Beispiel enthält eine vollständige Hilfsfunktion. Es vergleicht die entfernte Kurzform oder nicht unterstützte Arität mit der verfügbaren Form. Die Parameter Name, First, Second und Count bleiben Namen/Zähler unverändert. Das Ergebnis ist 0 für Anrufprüfungen und 0:1 für Wertprüfungen.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        return CheckForm("UO.GetType", 0);
        return null;
    }

    dynamic CheckForm(dynamic name, dynamic count)
    {
        return UO.ApiSignatureExists(name, count);
    }
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.ApiSignatureExists(name, argumentCount) — UO.ApiSignatureExists(String,Integer)

Parameter: name (String), argumentCount (Integer)

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public int ApiSignatureExists(string name, int argumentCount)

            => metadata.NativeSubrutineExists(NormalizeApiName(name), argumentCount) ? 1 : 0;

UO.ClientInfo

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

C#-Signaturen

dynamic UO.ClientInfo();

Liest kurze Informationen über den laufenden Client.

Parameter

Es gibt keine Parameter.

Rückgabewert

Array aus drei string: [0] – Produktname, [1] – Version des laufenden Clients, [2] – Client-Verzeichnis. Die Indizes beginnen mit 0. Dies ist weder die Zeichenfolge JSON noch ein Wörterbuch.

Verhalten

  • Daten werden von RuntimeProductName, RuntimeProductVersion und ClientPath gelesen. Der Befehl ändert nichts und sendet nichts an den Server.
  • Verwenden Sie ArrayLength vor der Indizierung in einer allgemeinen Hilfsfunktion. Verwechseln Sie Client-Informationen nicht mit Charakterstatistiken oder Serverversionen.
  • Liest Informationen über den aktuellen ClassicUO-Client.

Eigenständige C#-Skripte

Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.

Einfaches Beispiel

Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.

Das Ergebnis eines Aufrufs wird im Journal ausgegeben. Zahlen werden nicht in bool umgewandelt; bei Arrays wird die Anzahl der Elemente angezeigt.

object? result = UO.ClientInfo();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Lesen Sie alle drei Felder – direktes Skript

Parameter und Ablauf:

  • 0 – Produkt, 1 – Version, 2 – Katalog. Der Versionswert wird beim Start übernommen; im Beispiel ist es nicht behoben.
var info = UO.ClientInfo();
UO.Print("Product: " + info[0]);
UO.Print("Client version: " + info[1]);
UO.Print("Client folder: " + info[2]);

2. Schleife durch Array – Skriptfunktion

Parameter und Ablauf:

  • ArrayLength gibt die Anzahl der Felder zurück. Der letzte gültige Index ist gleich der Länge minus 1.
return  RunScenario();
 object? RunScenario()
{
    var info = UO.ClientInfo();
    var i = 0;
    while (Truth(i < ArrayLength(info)))
    {
        UO.Print(Convert.ToString(i) + ": " + info[i]);
        i = i + 1;
    }

    return null;
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. Komplette Client-Signatur-Abruffunktion – Skriptklasse

Parameter und Ablauf:

  • ClientCaption gibt eine Zeichenfolge mit Titel und Version zurück. Das ursprüngliche Array wird nicht verändert.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.Print(ClientCaption());
        return null;
    }

    dynamic ClientCaption()
    {
        var info = UO.ClientInfo();
        if (Truth(ArrayLength(info) < 2))
        {
            return "Client information unavailable";
        }

        return info[0] + " / " + info[1];
    }

    int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.ClientInfo() — UO.ClientInfo()

Parameter: Keine Parameter.

Ergebnis: dynamic / Array.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "clientinfo":

                    return new InjectionValue(new[]

                    {

                        new InjectionValue(bridge.RuntimeProductName),

                        new InjectionValue(bridge.RuntimeProductVersion),

                        new InjectionValue(bridge.ClientPath)

                    });

UO.Dump

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

C#-Signaturen

void UO.Dump();
void UO.Dump(object? @object);

Druckt einen Diagnose-Snapshot eines dem Client bekannten Objekts.

Parameter

  • object – Optional serial/Link. Ohne Argument wird „bridge.LastTarget“ verwendet.

Rückgabewert

void – kein Rückgabewert.

Verhalten

  • Die Nachricht enthält serial als 0xXXXXXXXX, Name, graphic/type, hue und X/Y/Z. Die Felder werden aus dem lokalen Modell gelesen; Ein fehlendes Objekt führt zu einem leeren Namen und Nullfeldern. Der Befehl fordert nicht die neuesten Servereigenschaften an.

Eigenständige C#-Skripte

Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.

Einfaches Beispiel

Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.

Der Befehl steht in einer eigenen Anweisung. Die Meldung davor zeigt den Beginn des Aufrufs und bestätigt keine Serveraktion.

UO.Print("Calling UO.Dump");
UO.Dump();

1. Schnappschuss des letzten Ziels – direktes Skript

Parameter und Ablauf:

  • Ein fehlendes Argument bedeutet LastTarget.
UO.Dump();

2. Selbstaufnahme – Skriptfunktion

Parameter und Ablauf:

  • Alle Felder sind spezifisch für Ihren eigenen Charakter.
return  RunScenario();
 object? RunScenario()
{
    UO.Dump("self");
    return null;
}

3. Schnappschuss des geprüften Objekts – Skriptklasse

Parameter und Ablauf:

  • Die Exists-Prüfung trennt ein fehlendes Modell von einem Objekt mit Nullfeldern.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var id = UO.LastTarget();
        if (Truth(UO.Exists(id)))
        {
            UO.Dump(id);
        }

        return null;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.Dump() — UO.Dump()

Parameter: Keine Parameter.

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "dump":

                {

                    int id = Arg(0, bridge.LastTarget);

                    SystemMessage($"0x{id:X8} {bridge.GetName(id)} type=0x{bridge.GetGraphics(id):X4} hue=0x{bridge.GetColor(id):X4} xyz={bridge.GetX(id)},{bridge.GetY(id)},{bridge.GetZ(id)}");

                    break;

                }

UO.Dump(object) — UO.Dump(Any)

Parameter: object (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "dump":

                {

                    int id = Arg(0, bridge.LastTarget);

                    SystemMessage($"0x{id:X8} {bridge.GetName(id)} type=0x{bridge.GetGraphics(id):X4} hue=0x{bridge.GetColor(id):X4} xyz={bridge.GetX(id)},{bridge.GetY(id)},{bridge.GetZ(id)}");

                    break;

                }

UO.ExtendedInfo

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

C#-Signaturen

dynamic UO.ExtendedInfo();

Gibt vier Felder der aktuellen Clientverbindungskonfiguration zurück.

Parameter

Es gibt keine Parameter.

Rückgabewert

Array [ClientPath:string, CurrentProfilePath:string, GameServerAddress:string, GameServerPort:int].

Verhalten

  • Die Reihenfolge der Felder ist festgelegt. ClientPath und CurrentProfilePath sind Clientpfade. GameServerAddress und GameServerPort lesen globale Einstellungen.GlobalSettings.IP/Port: Dies ist die konfigurierte Adresse, die nicht die tatsächliche Peer-Manager-Sitzung überprüft. Die Liste enthält kein Passwort und fordert den Server nicht zur Eingabe von Informationen auf. Vor der Auswahl eines Profils/einer Verbindung sind Leerwerte möglich.

Eigenständige C#-Skripte

Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.

Einfaches Beispiel

Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.

Das Ergebnis eines Aufrufs wird im Journal ausgegeben. Zahlen werden nicht in bool umgewandelt; bei Arrays wird die Anzahl der Elemente angezeigt.

object? result = UO.ExtendedInfo();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Ausgabefelder – Direktskript

Parameter und Ablauf:

  • Das Array enthält gemischte Typen, daher wird Convert.ToString verwendet.
var info = UO.ExtendedInfo();
for (int i = (int)(0); i <= ArrayLength(info)-1; i += (int)(1))
{
    UO.Print(Convert.ToString(info[i]));
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;

2. Adresse und Port drucken – Skriptfunktion

Parameter und Ablauf:

  • Die Indizes 2 und 3 sind die Adresse und der Port.
return  RunScenario();
 object? RunScenario()
{
    var info = UO.ExtendedInfo();
    UO.Print(Convert.ToString(info[2]) + ":" + Convert.ToString(info[3]));
    return null;
}

3. Profilpfad lesen – Skriptklasse

Parameter und Ablauf:

  • Index 1 – CurrentProfilePath, nicht ClientPath.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var info = UO.ExtendedInfo();
        var path = info[1];
        UO.Print(path);
        return null;
    }
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.ExtendedInfo() — UO.ExtendedInfo()

Parameter: Keine Parameter.

Ergebnis: dynamic / Any.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "extendedinfo":

                    return new InjectionValue(new[] { new InjectionValue(bridge.ClientPath), new InjectionValue(bridge.CurrentProfilePath), new InjectionValue(bridge.GameServerAddress), new InjectionValue(bridge.GameServerPort) });

UO.GetInfo

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

C#-Signaturen

string UO.GetInfo(object? arg);

Gibt den Zeichennamen nur für die genaue Zeichenauswahl zurück.

Parameter

  • arg - string. Der genaue Wert von Zeichenaufrufen unter Berücksichtigung der Groß-/Kleinschreibung GetName("self"); Alle anderen Werte werden nicht erkannt.

Rückgabewert

string – der Name Ihres Charakters für Charakter; String-Literal UNKNOWN für alle anderen Argumente. Wenn kein Zeichen vorhanden ist, ist der Name möglicherweise leer.

Verhalten

  • Beim Vergleich StringComparison.Ordinal wird die Groß-/Kleinschreibung beachtet. Es wird nur die Zeichenauswahl unterstützt. Der Befehl stellt keine Netzwerkanfragen: Er liest den Namen aus dem lokalen Zeichenmodell. Fenster FillInfoWindow wird separat gesteuert.

Eigenständige C#-Skripte

Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.

Einfaches Beispiel

Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.

Das Ergebnis eines Aufrufs wird im Journal ausgegeben. Zahlen werden nicht in bool umgewandelt; bei Arrays wird die Anzahl der Elemente angezeigt.

var result = UO.GetInfo("character");
UO.Print("GetInfo: " + Convert.ToString(result));

1. Charaktername – direktes Skript

Parameter und Ablauf:

  • Das genaue Zeichenliteral lautet self.
var name = UO.GetInfo("character");
UO.Print(name);

2. Anderer Fall – Skriptfunktion

Parameter und Ablauf:

  • Das Zeichen stimmt nicht überein und gibt UNKNOWN zurück.
return  RunScenario();
 object? RunScenario()
{
    var value = UO.GetInfo("Character");
    UO.Print(value);
    return null;
}

3. Unbekannter Selektor – Skriptklasse

Parameter und Ablauf:

  • Das Profil wird von dieser Implementierung nicht unterstützt.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var value = UO.GetInfo("profile");
        UO.Print(value);
        return null;
    }
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.GetInfo(arg) — UO.GetInfo(String)

Parameter: arg (String)

Ergebnis: string / String.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

private string GetInfo(string arg)

        {

            if (arg.Equals("character", StringComparison.Ordinal))

                return GetName("self");



            return "UNKNOWN";

        }

UO.Help

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

C#-Signaturen

void UO.Help();

Parameter

Es gibt keine Parameter.

Rückgabewert

void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.

Verhalten

  • Ändert oder zeigt nur die angegebenen lokalen Daten an. Für diesen Befehl gibt es keine Serverbestätigung.

Eigenständige C#-Skripte

Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.

Einfaches Beispiel

Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.

Der Befehl steht in einer eigenen Anweisung. Die Meldung davor zeigt den Beginn des Aufrufs und bestätigt keine Serveraktion.

UO.Print("Calling UO.Help");
UO.Help();

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Zeigt einen lokalen Hinweis zu C# IDE.
UO.Help();

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • ExecuteLegacyManualAlias zeigt eine Zeile über UO.*, das konfigurierte Chat-Präfix und Optionen > C# IDE > Manuell über SystemMessage an. Es wird keine Hilfeanfrage an den Server gesendet.
return  RunScenario();
 object? RunScenario()
{
    UO.Help();
    UO.OpenIDE();
    return null;
}

3. Vollständige Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • Ändert oder zeigt nur die angegebenen lokalen Daten an. Für diesen Befehl gibt es keine Serverbestätigung.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.Help();
        UO.Print("Options > C# IDE > Manual");
        return null;
    }
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.Help() — UO.Help()

Parameter: Keine Parameter.

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "help": SystemMessage("C# Scripts IDE: use UO.* in scripts or the configured chat prefix. Open Options > C# Scripts IDE > Manual."); break;

UO.Info

C#-Signaturen

string UO.Info();
string UO.Info(object? serial);
string UO.Info(object? type, object? x, object? y);
string UO.Info(object? type, object? x, object? y, object? z);

Verhalten und Ergebnis

Der Aufruf bestimmt die Anzeige: Befehle im grafischen Chat öffnen eine Tabelle mit Feldern, Werten, Ctrl+C und Scrollen. Normale C#-Skripte erhalten Berichtstext ohne Fenster oder Zielcursor, auch bei offenem Spielfenster. Verfügbar sind nur dem Client bekannte Daten.

Info und InfoTile ohne Argumente starten im grafischen Chat eine Zielauswahl. Im Skript liest Info() das letzte Objektziel oder den Spieler; InfoTile() den Boden unter dem Spieler. serial, type und Koordinaten wählen gezielt aus. Das dritte Argument von InfoTile(x,y,map) ist die Karte.

Parameter

  • serial — Seriennummer des Objekts oder gespeicherter Alias.
  • type — Grafik-ID; -1 steht für jeden Typ an der Position.
  • x — X-Weltkoordinate.
  • y — Y-Weltkoordinate.
  • z — Z-Höhe; die Kurzform verwendet 0.

Das Präfix wird in C# Scripts IDE festgelegt; # ist hier ein Beispiel. Parameter werden durch Leerzeichen getrennt, Text durch Anführungszeichen zusammengefasst. id bedeutet serial, type bedeutet graphic. xy x y [z] wählt das erste geladene Objekt am Ort; type allein den ersten passenden Treffer. Bei InfoTile(x,y,map) ist das dritte Argument die Karte, nicht Z.

Chatbefehle

#info
#UO.Info id 0x40001234
#info type 0x0EED
#info xy 1450 1690
#info type 0x0EED xy 1450 1690 0

Vollständige C#-Beispiele

Jeder Block ist eine vollständige .csx-Datei. Ersetzen Sie Beispiel-serials, Typen und Koordinaten. Parameterreihenfolge und benannte C#-Argumente folgen der Signatur.

1

string report = UO.Info(0x40001234);
UO.Print(report);

2

string InspectSelf() => UO.Info("self");
UO.Print(InspectSelf());

3

foreach (int serial in new[] { 0x40001234, 0x40005678 })
{
    string report = UO.Info(serial);
    UO.Print(report);
}

4

new CommandSample().Execute(UO);

sealed class CommandSample
{
    public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
    {
        string report = api.Info(0x40001234);
        api.Print(report);
    }
}

Interne Aufrufe

CSharpGameApi.Info
  -> CSharpScriptGlobals
  -> InjectionScript.Runtime.InjectionApiUO.Info
ClassicUOInjectionApiBridge -> YokoInfoReport -> YokoInfoGump


UO.InfoColor

C#-Signaturen

string UO.InfoColor();
string UO.InfoColor(object? serial);

Verhalten und Ergebnis

Der Aufruf bestimmt die Anzeige: Befehle im grafischen Chat öffnen eine Tabelle mit Feldern, Werten, Ctrl+C und Scrollen. Normale C#-Skripte erhalten Berichtstext ohne Fenster oder Zielcursor, auch bei offenem Spielfenster. Verfügbar sind nur dem Client bekannte Daten.

Info und InfoTile ohne Argumente starten im grafischen Chat eine Zielauswahl. Im Skript liest Info() das letzte Objektziel oder den Spieler; InfoTile() den Boden unter dem Spieler. serial, type und Koordinaten wählen gezielt aus. Das dritte Argument von InfoTile(x,y,map) ist die Karte.

Parameter

  • serial — Seriennummer des Objekts oder gespeicherter Alias.

Das Präfix wird in C# Scripts IDE festgelegt; # ist hier ein Beispiel. Parameter werden durch Leerzeichen getrennt, Text durch Anführungszeichen zusammengefasst. id bedeutet serial, type bedeutet graphic. xy x y [z] wählt das erste geladene Objekt am Ort; type allein den ersten passenden Treffer. Bei InfoTile(x,y,map) ist das dritte Argument die Karte, nicht Z.

Chatbefehle

#infocolor 0x40001234

Vollständige C#-Beispiele

Jeder Block ist eine vollständige .csx-Datei. Ersetzen Sie Beispiel-serials, Typen und Koordinaten. Parameterreihenfolge und benannte C#-Argumente folgen der Signatur.

1

UO.Print(UO.InfoColor(0x40001234));

2

string report = UO.InfoColor();
UO.Print(report);

3

foreach (int serial in new[] { 0x40001234, 0x40005678 })
    UO.Print(UO.InfoColor(serial));

4

new CommandSample().Execute(UO);

sealed class CommandSample
{
    public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
    {
        api.Print(api.InfoColor(0x40001234));
    }
}

Interne Aufrufe

CSharpGameApi.InfoColor
  -> CSharpScriptGlobals
  -> InjectionScript.Runtime.InjectionApiUO.InfoColor
ClassicUOInjectionApiBridge -> YokoInfoReport -> YokoInfoGump


UO.InfoGump

C#-Signaturen

string UO.InfoGump();
string UO.InfoGump(object? gump);

Verhalten und Ergebnis

Der Aufruf bestimmt die Anzeige: Befehle im grafischen Chat öffnen eine Tabelle mit Feldern, Werten, Ctrl+C und Scrollen. Normale C#-Skripte erhalten Berichtstext ohne Fenster oder Zielcursor, auch bei offenem Spielfenster. Verfügbar sind nur dem Client bekannte Daten.

InfoGump() liest das letzte aktive Serverdialog- oder Clientfenster. ID oder Index wählt ein Fenster; last, LastGump und Last Gump bedeuten das letzte. InfoGumps liefert die Liste ohne Inspektorfenster. Nur grafische Befehle öffnen die Tabelle.

Parameter

  • gump — Serverfenster-ID oder Index; -1 wählt das letzte aktive.

Das Präfix wird in C# Scripts IDE festgelegt; # ist hier ein Beispiel. Parameter werden durch Leerzeichen getrennt, Text durch Anführungszeichen zusammengefasst. id bedeutet serial, type bedeutet graphic. xy x y [z] wählt das erste geladene Objekt am Ort; type allein den ersten passenden Treffer. Bei InfoTile(x,y,map) ist das dritte Argument die Karte, nicht Z.

Chatbefehle

#infogump
#infogump last
#info gump last gump
#infogump 0x12345678

Vollständige C#-Beispiele

Jeder Block ist eine vollständige .csx-Datei. Ersetzen Sie Beispiel-serials, Typen und Koordinaten. Parameterreihenfolge und benannte C#-Argumente folgen der Signatur.

1

string report = UO.InfoGump();
UO.Print(report);

2

UO.Print(UO.InfoGump(0x12345678));

3

string ReadLatestWindow() => UO.InfoGump();
UO.Print(ReadLatestWindow());

4

new CommandSample().Execute(UO);

sealed class CommandSample
{
    public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
    {
        string report = api.InfoGump();
        api.Print(report);
    }
}

Interne Aufrufe

CSharpGameApi.InfoGump
  -> CSharpScriptGlobals
  -> InjectionScript.Runtime.InjectionApiUO.InfoGump
ClassicUOInjectionApiBridge -> YokoInfoReport -> YokoInfoGump


UO.InfoGumps

C#-Signaturen

string UO.InfoGumps();
string UO.InfoGumps(object? gump);

Verhalten und Ergebnis

Der Aufruf bestimmt die Anzeige: Befehle im grafischen Chat öffnen eine Tabelle mit Feldern, Werten, Ctrl+C und Scrollen. Normale C#-Skripte erhalten Berichtstext ohne Fenster oder Zielcursor, auch bei offenem Spielfenster. Verfügbar sind nur dem Client bekannte Daten.

InfoGump() liest das letzte aktive Serverdialog- oder Clientfenster. ID oder Index wählt ein Fenster; last, LastGump und Last Gump bedeuten das letzte. InfoGumps liefert die Liste ohne Inspektorfenster. Nur grafische Befehle öffnen die Tabelle.

Parameter

  • gump — Serverfenster-ID oder Index; -1 wählt das letzte aktive.

Das Präfix wird in C# Scripts IDE festgelegt; # ist hier ein Beispiel. Parameter werden durch Leerzeichen getrennt, Text durch Anführungszeichen zusammengefasst. id bedeutet serial, type bedeutet graphic. xy x y [z] wählt das erste geladene Objekt am Ort; type allein den ersten passenden Treffer. Bei InfoTile(x,y,map) ist das dritte Argument die Karte, nicht Z.

Chatbefehle

#infogumps

Vollständige C#-Beispiele

Jeder Block ist eine vollständige .csx-Datei. Ersetzen Sie Beispiel-serials, Typen und Koordinaten. Parameterreihenfolge und benannte C#-Argumente folgen der Signatur.

1

UO.Print(UO.InfoGumps());

2

string report = UO.InfoGumps(0x12345678);
UO.Print(report);

3

string ReadAllWindows() => UO.InfoGumps();
UO.Print(ReadAllWindows());

4

new CommandSample().Execute(UO);

sealed class CommandSample
{
    public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
    {
        api.Print(api.InfoGumps());
    }
}

Interne Aufrufe

CSharpGameApi.InfoGumps
  -> CSharpScriptGlobals
  -> InjectionScript.Runtime.InjectionApiUO.InfoGumps
ClassicUOInjectionApiBridge -> YokoInfoReport -> YokoInfoGump


UO.InfoTile

C#-Signaturen

string UO.InfoTile();
string UO.InfoTile(object? x);
string UO.InfoTile(object? x, object? y);
string UO.InfoTile(object? x, object? y, object? map);
string UO.InfoTile(object? type, object? x, object? y, object? z);
string UO.InfoTile(object? type, object? x, object? y, object? z, object? map);

Verhalten und Ergebnis

Der Aufruf bestimmt die Anzeige: Befehle im grafischen Chat öffnen eine Tabelle mit Feldern, Werten, Ctrl+C und Scrollen. Normale C#-Skripte erhalten Berichtstext ohne Fenster oder Zielcursor, auch bei offenem Spielfenster. Verfügbar sind nur dem Client bekannte Daten.

Info und InfoTile ohne Argumente starten im grafischen Chat eine Zielauswahl. Im Skript liest Info() das letzte Objektziel oder den Spieler; InfoTile() den Boden unter dem Spieler. serial, type und Koordinaten wählen gezielt aus. Das dritte Argument von InfoTile(x,y,map) ist die Karte.

Parameter

  • map — Kartennummer; sonst aktuelle Karte.
  • type — Grafik-ID; -1 steht für jeden Typ an der Position.
  • x — X-Weltkoordinate.
  • y — Y-Weltkoordinate.
  • z — Z-Höhe; die Kurzform verwendet 0.

Das Präfix wird in C# Scripts IDE festgelegt; # ist hier ein Beispiel. Parameter werden durch Leerzeichen getrennt, Text durch Anführungszeichen zusammengefasst. id bedeutet serial, type bedeutet graphic. xy x y [z] wählt das erste geladene Objekt am Ort; type allein den ersten passenden Treffer. Bei InfoTile(x,y,map) ist das dritte Argument die Karte, nicht Z.

Chatbefehle

#infotile
#info tile xy 1450 1690
#infotile 1450 1690 0
#infotile type 0x0EED 1450 1690 0 0

Vollständige C#-Beispiele

Jeder Block ist eine vollständige .csx-Datei. Ersetzen Sie Beispiel-serials, Typen und Koordinaten. Parameterreihenfolge und benannte C#-Argumente folgen der Signatur.

1

UO.Print(UO.InfoTile(1450, 1690));

2

string report = UO.InfoTile(1450, 1690, 0);
UO.Print(report);

3

UO.Print(UO.InfoTile(0x0EED, 1450, 1690, 0, 0));

4

new CommandSample().Execute(UO);

sealed class CommandSample
{
    public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
    {
        api.Print(api.InfoTile(1450, 1690));
    }
}

Interne Aufrufe

CSharpGameApi.InfoTile
  -> CSharpScriptGlobals
  -> InjectionScript.Runtime.InjectionApiUO.InfoTile
ClassicUOInjectionApiBridge -> YokoInfoReport -> YokoInfoGump


UO.Version

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

C#-Signaturen

void UO.Version();

Druckt den Namen und die Laufzeitversion des Produkts.

Parameter

Es gibt keine Parameter.

Rückgabewert

void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.

Verhalten

  • ExecuteLegacyManualAlias gibt Bridge.RuntimeProductName und Bridge.RuntimeProductVersion über SystemMessage aus. Dies ist eine Protokollzeichenfolge, nicht die zurückgegebene Versionsnummer.
  • Ändert oder zeigt nur die angegebenen lokalen Daten an. Für diesen Befehl gibt es keine Serverbestätigung.

Eigenständige C#-Skripte

Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.

Einfaches Beispiel

Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.

Der Befehl steht in einer eigenen Anweisung. Die Meldung davor zeigt den Beginn des Aufrufs und bestätigt keine Serveraktion.

UO.Print("Calling UO.Version");
UO.Version();

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Druckt den Namen und die Laufzeitversion des Produkts.
UO.Version();

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • ExecuteLegacyManualAlias gibt Bridge.RuntimeProductName und Bridge.RuntimeProductVersion über SystemMessage aus. Dies ist eine Protokollzeichenfolge, nicht die zurückgegebene Versionsnummer.
return  RunScenario();
 object? RunScenario()
{
    UO.Version();
    UO.Help();
    return null;
}

3. Vollständige Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • Ändert oder zeigt nur die angegebenen lokalen Daten an. Für diesen Befehl gibt es keine Serverbestätigung.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.Version();
        UO.Print(UO.GetUserCodepage());
        return null;
    }
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.Version() — UO.Version()

Parameter: Keine Parameter.

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "version": SystemMessage($"{bridge.RuntimeProductName} v{bridge.RuntimeProductVersion}"); break;
⚠️ **GitHub.com Fallback** ⚠️