DE UO Topic profiles configuration - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki

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

Profile und Konfiguration

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

Profile, Speichereinstellungen, globale Werte und Hotkeys. Der globale Laufzeitwert und die lokale Prozedurvariable haben unterschiedliche Lebensdauern.

Abschnitte

Thema Befehle und Erklärungen
GetProfile UO.GetProfile
ProfileName UO.ProfileName
ProfileShardName UO.ProfileShardName
ChangeProfile UO.ChangeProfile
ExtChangeProfile UO.ExtChangeProfile
ResetProfile UO.ResetProfile
SaveConfig UO.SaveConfig
Global Variables UO.GetGlobal · UO.SetGlobal · UO.GListGet · UO.GListSet · UO.GListSize
EasyUO Variables UO.GetEasyUO · UO.SetEasyUO
MUL Path UO.SetMulPath

Alle Theme-Befehle

Profile

UO.GetProfile · UO.ProfileName · UO.ProfileShardName · UO.ChangeProfile · UO.ExtChangeProfile · UO.ResetProfile · UO.SaveConfig · UO.ReqProfile · UO.ClientProfilePath · UO.ClientPath · UO.SetMulPath

Globale Variablen

UO.GetGlobal · UO.SetGlobal · UO.GetEasyUO · UO.SetEasyUO · UO.GListClear · UO.GListGet · UO.GListPosName · UO.GListPosValue · UO.GListSet · UO.GListSize

Hotkeys / Einstellungen

UO.LoadHotkeys · UO.SaveHotkeys · UO.Set · UO.SetDefault

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

Parameter, Ergebnis und alle Szenarien

var text = UO.GetGlobal("manual.delay");
var delayMs = 350;
if (Truth(text != "N/A") && Truth(IsNumeric(text)))
{
    var parsed = Val(text);
    if (Truth(parsed >= 50) && Truth(parsed <= 5000))
    {
        delayMs = checked((int)parsed);
    }
}
await Delay(delayMs);

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool IsNumeric(object? value) => double.TryParse(Convert.ToString(value), System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out _);
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
double Val(object? value) => double.TryParse(Convert.ToString(value), System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out var number) ? number : 0;

UO.SetGlobal

Parameter, Ergebnis und alle Szenarien

UO.SetGlobal("manual.delay", 350);
UO.SetGlobal("manual.delay", 600);
var text = UO.GetGlobal("manual.delay");
if (Truth(IsNumeric(text)))
{
    await Delay(Val(text));
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool IsNumeric(object? value) => double.TryParse(Convert.ToString(value), System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out _);
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
double Val(object? value) => double.TryParse(Convert.ToString(value), System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out var number) ? number : 0;

Vollständige Befehlsreferenz


UO.ChangeProfile

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

C#-Signaturen

dynamic UO.ChangeProfile(object? name);

Ändert das ausgewählte Profil für die nächste Self-Client-Verbindung, wenn die Sitzung getrennt wird.

Parameter

  • name – Gespeicherter Profil-/Charaktername, aufgelöst durch TryResolveProfileCharacter für den ausgewählten Shard. Ein leerer/unbekannter Name ergibt -4.

Rückgabewert

int: 0 – Auswahl ist vorbereitet; -2 — Managersitzung oder Verbindung/Spielwelt ist aktiv; -3 – mehr als ein Skript wird ausgeführt; -4 – Profilname/Shard ist nicht zulässig.

Verhalten

  • ChangeProfile übergibt leeres Shard/Zeichen; ExtChangeProfile erlaubt explizite Shards und Zeichen. In der Manager-Sitzung müssen Sie eine andere Sitzung im ClassicUO Manager auswählen – die laufende Sitzung speichert ihr Profil.
  • Bei Erfolg wird das aktuelle Profil gespeichert und entladen, LastServerName geändert, die Einstellungen gespeichert und das nächste Zeichen zugewiesen. Die Verbindung selbst startet nicht; Connect wird dafür separat aufgerufen.

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.ChangeProfile("ExampleProfile");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Fehlercode prüfen – direktes Skript

Parameter und Ablauf:

  • Verwenden Sie den tatsächlich gespeicherten Profilnamen. Ein negativer Code beschreibt einen Fehler.
var status = UO.ChangeProfile("ExampleProfile");
UO.Print(Convert.ToString(status));

2. Leerer Name – Skriptfunktion

Parameter und Ablauf:

  • Ein deaktivierter eigenständiger Client ohne andere Verletzung gibt -4 für einen leeren Namen zurück.
return  RunScenario();
 object? RunScenario()
{
    var status = UO.ChangeProfile("");
    UO.Print(Convert.ToString(status));
    return null;
}

3. Verbindung nach erfolgreicher Auswahl - Skriptklasse

Parameter und Ablauf:

  • Connect wird erst nach dem Code 0 aufgerufen; Die Serverantwort wurde noch nicht bestätigt.
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 status = UO.ChangeProfile("ExampleProfile");
        if (Truth(status == 0))
        {
            UO.Connect();
        }

        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.ChangeProfile(name) — UO.ChangeProfile(Any)

Parameter: name (Any)

Ergebnis: dynamic / Any.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "changeprofile":

                    return new InjectionValue(bridge.ChangeProfileSelection(Text(0), string.Empty, string.Empty));

UO.ClientPath

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

C#-Signaturen

string UO.ClientPath();

Gibt das Installations-/ausführbare Verzeichnis des Clients zurück.

Parameter

Es gibt keine Parameter.

Rückgabewert

string – Pfad zum Verzeichnis. Es ist nicht bool, kein Array und nicht ID. Ein leerer Pfad bedeutet, dass der Wert nicht verfügbar ist; Verwenden Sie es nicht als Ihren aktuellen Standardarbeitsordner.

Verhalten

  • Lesen Sie CUOEnviroment.ExecutablePath. Dabei handelt es sich nicht um eine Fahrtroute, eine Liste von Wegpunkten, einen Skriptordner oder einen Pfad zu Spieldaten.
  • Der Befehl liest nur den Pfad, öffnet, erstellt oder speichert nichts. Das nachgestellte Trennzeichen sollte nicht angenommen werden; Das Hilfsbeispiel fügt es bei Bedarf hinzu.
  • Der Name ist der Spiel-/Clientname API und wird mit UO geschrieben. ClientPath gibt das Client-Verzeichnis zurück, ClientProfilePath gibt das aktive Profilverzeichnis zurück.

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.ClientPath();
UO.Print("ClientPath: " + Convert.ToString(result));

1. Lesepfad – direktes Skript

Parameter und Ablauf:

  • Es gibt keine Argumente. Ordner - Zeichenfolge; ein leerer Wert wird separat verarbeitet.
var folder = UO.ClientPath();
if (Truth(folder == ""))
{
    UO.Print("Folder is not available");
    return null;
}
UO.Print(folder);

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

2. Client-Ordner mit Profilordner vergleichen – Skriptfunktion

Parameter und Ablauf:

  • Diese Ordner haben unterschiedliche Zwecke. Das Skript gibt beide Zeilen aus, ohne die Konfiguration oder das Profil zu ändern.
return  RunScenario();
 object? RunScenario()
{
    var client = UO.ClientPath();
    var profile = UO.ClientProfilePath();
    UO.Print("Client: " + client);
    if (Truth(profile == ""))
    {
        UO.Print("No current profile");
    }
    else
    {
        UO.Print("Profile: " + profile);
    }

    return null;
}

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

3. Vollständige Funktion zum Erstellen des Pfads zu Ihrer Datei – Skriptklasse

Parameter und Ablauf:

  • ChildPath wird vollständig angezeigt: Ordner ist das resultierende Verzeichnis, Blatt ist der Dateiname. Dies ist eine Zeichenfolgenverkettung für einen bestimmten Namen, kein universeller Pfadnormalisierer.
  • Die Datei wird nicht erstellt oder gelesen; Zuerst können Sie die resultierende Zeichenfolge überprüfen.
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 folder = UO.ClientPath();
        var filePath = ChildPath(folder, "sample.json");
        if (Truth(filePath != ""))
        {
            UO.Print("Example path: " + filePath);
        }

        return null;
    }

    dynamic ChildPath(dynamic folder, dynamic leaf)
    {
        if (Truth(folder == ""))
        {
            return "";
        }

        var last = Right(folder, 1);
        if (Truth(last == "/") || Truth(last == "\\"))
        {
            return folder + leaf;
        }

        return folder + "/" + leaf;
    }

    string Right(object? value, int count)
    {
        string text = Convert.ToString(value) ?? "";
        return text[Math.Max(0, text.Length - count)..];
    }

    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.ClientPath() — UO.ClientPath()

Parameter: Keine Parameter.

Ergebnis: string / String.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "clientpath": return new InjectionValue(bridge.ClientPath);

UO.ClientProfilePath

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

C#-Signaturen

string UO.ClientProfilePath();

Gibt das aktuelle Clientprofilverzeichnis zurück.

Parameter

Es gibt keine Parameter.

Rückgabewert

string – Pfad zum Verzeichnis. Es ist nicht bool, kein Array und nicht ID. Ein leerer Pfad bedeutet, dass der Wert nicht verfügbar ist; Verwenden Sie es nicht als Ihren aktuellen Standardarbeitsordner.

Verhalten

  • Lesen Sie ProfileManager.ProfilePath; Wenn das Profil noch nicht ausgewählt wurde, wird ein leerer String zurückgegeben. Der Anruf selbst erstellt kein Profil und überträgt keine Einstellungen.
  • Der Befehl liest nur den Pfad, öffnet, erstellt oder speichert nichts. Das nachgestellte Trennzeichen sollte nicht angenommen werden; Das Hilfsbeispiel fügt es bei Bedarf hinzu.
  • Der Name ist der Spiel-/Clientname API und wird mit UO geschrieben. ClientPath gibt das Client-Verzeichnis zurück, ClientProfilePath gibt das aktive Profilverzeichnis zurück.

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.ClientProfilePath();
UO.Print("ClientProfilePath: " + Convert.ToString(result));

1. Lesepfad – direktes Skript

Parameter und Ablauf:

  • Es gibt keine Argumente. Ordner - Zeichenfolge; ein leerer Wert wird separat verarbeitet.
var folder = UO.ClientProfilePath();
if (Truth(folder == ""))
{
    UO.Print("Folder is not available");
    return null;
}
UO.Print(folder);

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

2. Client-Ordner mit Profilordner vergleichen – Skriptfunktion

Parameter und Ablauf:

  • Diese Ordner haben unterschiedliche Zwecke. Das Skript gibt beide Zeilen aus, ohne die Konfiguration oder das Profil zu ändern.
return  RunScenario();
 object? RunScenario()
{
    var client = UO.ClientPath();
    var profile = UO.ClientProfilePath();
    UO.Print("Client: " + client);
    if (Truth(profile == ""))
    {
        UO.Print("No current profile");
    }
    else
    {
        UO.Print("Profile: " + profile);
    }

    return null;
}

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

3. Vollständige Funktion zum Erstellen des Pfads zu Ihrer Datei – Skriptklasse

Parameter und Ablauf:

  • ChildPath wird vollständig angezeigt: Ordner ist das resultierende Verzeichnis, Blatt ist der Dateiname. Dies ist eine Zeichenfolgenverkettung für einen bestimmten Namen, kein universeller Pfadnormalisierer.
  • Die Datei wird nicht erstellt oder gelesen; Zuerst können Sie die resultierende Zeichenfolge überprüfen.
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 folder = UO.ClientProfilePath();
        var filePath = ChildPath(folder, "sample.json");
        if (Truth(filePath != ""))
        {
            UO.Print("Example path: " + filePath);
        }

        return null;
    }

    dynamic ChildPath(dynamic folder, dynamic leaf)
    {
        if (Truth(folder == ""))
        {
            return "";
        }

        var last = Right(folder, 1);
        if (Truth(last == "/") || Truth(last == "\\"))
        {
            return folder + leaf;
        }

        return folder + "/" + leaf;
    }

    string Right(object? value, int count)
    {
        string text = Convert.ToString(value) ?? "";
        return text[Math.Max(0, text.Length - count)..];
    }

    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.ClientProfilePath() — UO.ClientProfilePath()

Parameter: Keine Parameter.

Ergebnis: string / String.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "shardpath":

                case "clientprofilepath": return new InjectionValue(bridge.CurrentProfilePath);

UO.ExtChangeProfile

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

C#-Signaturen

dynamic UO.ExtChangeProfile(object? profileName);
dynamic UO.ExtChangeProfile(object? profileName, object? shardName);
dynamic UO.ExtChangeProfile(object? profileName, object? shardName, object? charName);

Ändert das ausgewählte Profil für die nächste Self-Client-Verbindung, wenn die Sitzung getrennt wird.

Parameter

  • profileName – Gespeicherter Profil-/Charaktername, aufgelöst durch TryResolveProfileCharacter für den ausgewählten Shard. Ein leerer/unbekannter Name ergibt -4.
  • shardName – Optionaler Shard-Name. Ein leerer Wert verwendet CurrentProfile.ServerName, World.ServerName oder LastServerName.
  • charName – Optionaler Charaktername. Ein leerer Wert verwendet den gespeicherten Profilnamen.

Rückgabewert

int: 0 – Auswahl ist vorbereitet; -2 — Managersitzung oder Verbindung/Spielwelt ist aktiv; -3 – mehr als ein Skript wird ausgeführt; -4 – Profilname/Shard ist nicht zulässig.

Verhalten

  • ChangeProfile übergibt leeres Shard/Zeichen; ExtChangeProfile erlaubt explizite Shards und Zeichen. In der Manager-Sitzung müssen Sie eine andere Sitzung im ClassicUO Manager auswählen – die laufende Sitzung speichert ihr Profil.
  • Bei Erfolg wird das aktuelle Profil gespeichert und entladen, LastServerName geändert, die Einstellungen gespeichert und das nächste Zeichen zugewiesen. Die Verbindung selbst startet nicht; Connect wird dafür separat aufgerufen.

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.ExtChangeProfile("ExampleProfile");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Fehlercode prüfen – direktes Skript

Parameter und Ablauf:

  • Verwenden Sie den tatsächlich gespeicherten Profilnamen. Ein negativer Code beschreibt einen Fehler.
var status = UO.ExtChangeProfile("ExampleProfile");
UO.Print(Convert.ToString(status));

2. Leerer Name – Skriptfunktion

Parameter und Ablauf:

  • Ein deaktivierter eigenständiger Client ohne andere Verletzung gibt -4 für einen leeren Namen zurück.
return  RunScenario();
 object? RunScenario()
{
    var status = UO.ExtChangeProfile("");
    UO.Print(Convert.ToString(status));
    return null;
}

3. Verbindung nach erfolgreicher Auswahl - Skriptklasse

Parameter und Ablauf:

  • Connect wird erst nach dem Code 0 aufgerufen; Die Serverantwort wurde noch nicht bestätigt.
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 status = UO.ExtChangeProfile("ExampleProfile");
        if (Truth(status == 0))
        {
            UO.Connect();
        }

        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.ExtChangeProfile(profileName) — UO.ExtChangeProfile(Any)

Parameter: profileName (Any)

Ergebnis: dynamic / Any.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "extchangeprofile":

                {

                    string requestedProfile = Text(0);

                    string requestedShard = arguments.Length > 1 ? Text(1) : string.Empty;

                    string requestedCharacter = arguments.Length > 2 ? Text(2) : string.Empty;

                    return new InjectionValue(bridge.ChangeProfileSelection(requestedProfile, requestedShard, requestedCharacter));

                }

UO.ExtChangeProfile(profileName, shardName) — UO.ExtChangeProfile(Any,Any)

Parameter: profileName (Any), shardName (Any)

Ergebnis: dynamic / Any.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "extchangeprofile":

                {

                    string requestedProfile = Text(0);

                    string requestedShard = arguments.Length > 1 ? Text(1) : string.Empty;

                    string requestedCharacter = arguments.Length > 2 ? Text(2) : string.Empty;

                    return new InjectionValue(bridge.ChangeProfileSelection(requestedProfile, requestedShard, requestedCharacter));

                }

UO.ExtChangeProfile(profileName, shardName, charName) — UO.ExtChangeProfile(Any,Any,Any)

Parameter: profileName (Any), shardName (Any), charName (Any)

Ergebnis: dynamic / Any.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "extchangeprofile":

                {

                    string requestedProfile = Text(0);

                    string requestedShard = arguments.Length > 1 ? Text(1) : string.Empty;

                    string requestedCharacter = arguments.Length > 2 ? Text(2) : string.Empty;

                    return new InjectionValue(bridge.ChangeProfileSelection(requestedProfile, requestedShard, requestedCharacter));

                }

UO.GListClear

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

C#-Signaturen

void UO.GListClear();

Löscht die gesamte temporäre Liste vor einer neuen Reihe von Aktionen.

Parameter

Es gibt keine Parameter.

Rückgabewert

void - kein Ergebnis. Nach dem Löschen gibt GListSize() 0 zurück.

Verhalten

  • Die Liste gehört zur Laufzeitinstanz. Andere Skriptausführungen haben ihre eigenen Listen. GList ist kein gemeinsam genutzter profilübergreifender Speicher. Diese Befehle schreiben keine Datei und geben keinen gespeicherten Profilstatus ein. Die neue Laufzeit erhält eine leere Liste. Es ist auch keine var/Variablendeklaration und nicht UO.SetGlobal.
  • Der neue Name wird am Ende hinzugefügt. Durch die Wiederholung eines Namens, bei dem die Groß-/Kleinschreibung nicht beachtet wird, werden Bedeutung und Schreibweise des Namens an der ursprünglichen Stelle ersetzt. Beim Lesen wird nichts gelöscht. Wenn Sie stabile Indizes benötigen, können Sie während einer Suche keine Datensätze löschen oder hinzufügen.
  • Die Vorgänge sind lokal: keine Pakete, keine Objektsuche, keine Latenz. Set/Get sucht nacheinander nach dem Namen; Für größere Mengen verwenden Sie Dictionary. Es gibt keinen separaten Befehl zum Löschen eines Schlüssels in dieser Familie; Clear löscht alle Einträge.

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.GListClear");
UO.GListClear();

1. GListClear – 1 – direktes Skript

Parameter und Ablauf:

  • Clear entfernt beide Regeln, Size bestätigt Leere. Die Gegenstände des Charakters bleiben an Ort und Stelle.
UO.GListClear();
UO.GListSet("bandage", 0x0E21);
UO.GListSet("gold", 0x0EED);
UO.GListClear();
if (Truth(UO.GListSize() == 0))
{
    UO.Print("Batch rules cleared");
}

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

2. GListClear — 2 — Skriptfunktion

Parameter und Ablauf:

  • Alte Regeln werden entfernt, bevor Erz hinzugefügt wird; Die Suche zeigt nur die neue Regel mit graphic 0x19B9.
return  RunScenario();
 object? RunScenario()
{
    UO.GListClear();
    UO.GListSet("bandage", 0x0E21);
    UO.GListSet("gold", 0x0EED);
    UO.GListClear();
    UO.GListSet("ore", 0x19B9);
    var i = 0;
    while (Truth(i < UO.GListSize()))
    {
        var name = UO.GListPosName(i);
        var graphic = UO.GListPosValue(i);
        UO.Print(name + " | graphic: " + Convert.ToString(graphic));
        i = i + 1;
    }

    return null;
}

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

3. GListClear – 3 – Szenarioklasse

Parameter und Ablauf:

  • Eine zuvor eingelesene Rufnummer bleibt auch nach dem Löschen der Liste verfügbar. Die Liste enthält bereits 0 Einträge.
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.GListClear();
        UO.GListSet("bandage", 0x0E21);
        UO.GListSet("gold", 0x0EED);
        var retained = UO.GListGet("bandage");
        UO.GListClear();
        UO.Print("Retained graphic: " + Convert.ToString(retained));
        UO.Print("Remaining entries: " + Convert.ToString(UO.GListSize()));
        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.GListClear() — UO.GListClear()

Parameter: Keine Parameter.

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public void GListClear() => globalList.Clear();

UO.GListGet

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

C#-Signaturen

dynamic UO.GListGet(object? nameValue);

Liest einen Wert aus einer temporären Liste nach Regel- oder Zählernamen.

Parameter

  • nameValue — object? wird in einen String umgewandelt. Namen werden ohne Berücksichtigung der Groß- und Kleinschreibung verglichen: „bandage“ und „BANDAGE“ sind ein Schlüssel. Es wird empfohlen, einen nicht leeren Zeichenfolgennamen zu verwenden. ein leerer Name ist ebenfalls akzeptabel.

Rückgabewert

object? — gespeicherter Wert mit demselben Typ. Wenn kein Schlüssel vorhanden ist, int 0. Das erhaltene 0 ist vom fehlenden GListGet nicht zu unterscheiden; Überprüfen Sie die Namen.

Verhalten

  • Die Liste gehört zur Laufzeitinstanz. Andere Skriptausführungen haben ihre eigenen Listen. GList ist kein gemeinsam genutzter profilübergreifender Speicher. Diese Befehle schreiben keine Datei und geben keinen gespeicherten Profilstatus ein. Die neue Laufzeit erhält eine leere Liste. Es ist auch keine var/Variablendeklaration und nicht UO.SetGlobal.
  • Der neue Name wird am Ende hinzugefügt. Durch die Wiederholung eines Namens, bei dem die Groß-/Kleinschreibung nicht beachtet wird, werden Bedeutung und Schreibweise des Namens an der ursprünglichen Stelle ersetzt. Beim Lesen wird nichts gelöscht. Wenn Sie stabile Indizes benötigen, können Sie während einer Suche keine Datensätze löschen oder hinzufügen.
  • Die Vorgänge sind lokal: keine Pakete, keine Objektsuche, keine Latenz. Set/Get sucht nacheinander nach dem Namen; Für größere Mengen verwenden Sie Dictionary. Es gibt keinen separaten Befehl zum Löschen eines Schlüssels in dieser Familie; Clear löscht alle Einträge.

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.

UO.GListSet("simple_value", 42);
object? result = UO.GListGet("simple_value");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. GListGet – 1 – direktes Skript

Parameter und Ablauf:

  • BANDAGE findet den Verbandsschlüssel. 0x0E21 – graphic Verband, nicht sein einzigartiger serial.
UO.GListClear();
UO.GListSet("bandage", 0x0E21);
UO.GListSet("gold", 0x0EED);
var graphic = UO.GListGet("BANDAGE");
if (Truth(graphic == 0x0E21))
{
    UO.Print("Bandage rule selected");
}

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

2. GListGet — 2 — Skriptfunktion

Parameter und Ablauf:

  • Die vollständige Funktion HasEntry iteriert durch Namen; also ist 0 in verarbeitet etwas anderes als fehlend. Für eigene Schlüssel werden hier ASCII-Namen verwendet.
return  RunScenario();
 object? RunScenario()
{
    UO.GListClear();
    UO.GListSet("processed", 0);
    if (Truth(HasEntry("processed")))
    {
        var count = UO.GListGet("processed");
        UO.Print("Recorded count: " + Convert.ToString(count));
    }

    if (!(Truth(HasEntry("missing"))))
    {
        UO.Print("No entry named missing");
    }

    return null;
}

dynamic HasEntry(dynamic name)
{
    var i = 0;
    while (Truth(i < UO.GListSize()))
    {
        if (Truth(Convert.ToString(UO.GListPosName(i)) == Convert.ToString(name)))
        {
            return true;
        }

        i = i + 1;
    }

    return false;
}

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

3. GListGet – 3 – Szenarioklasse

Parameter und Ablauf:

  • Verzögerung – Anzahl der Millisekunden; UO.Wait wird nur für einen Wert im Bereich 50–5000 aufgerufen. Das Beispiel wartet 350 ms.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        UO.GListClear();
        UO.GListSet("delay", 350);
        var delayMs = UO.GListGet("delay");
        if (Truth(delayMs >= 50) && Truth(delayMs <= 5000))
        {
            await Delay(delayMs);
        }
        else
        {
            UO.Print("Delay outside the accepted range");
        }

        return null;
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
    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.GListGet(nameValue) — UO.GListGet(Any)

Parameter: nameValue (Any)

Ergebnis: dynamic / Any.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public InjectionValue GListGet(InjectionValue nameValue)

        {

            string name = nameValue.ToString();

            int index = globalList.FindIndex(pair => pair.Key.Equals(name, StringComparison.OrdinalIgnoreCase));

            return index >= 0 ? globalList[index].Value : InjectionValue.Zero;

        }

UO.GListPosName

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

C#-Signaturen

string UO.GListPosName(object? index);

Liest den Datensatznamen anhand seiner Position, um die Regeln aufzuzählen.

Parameter

  • index - int: Index von 0 bis GListSize()-1 einschließlich. Es handelt sich nicht um serial, graphic oder die Anzahl der Einheiten im Stapel.

Rückgabewert

string ist der Name in der zuletzt aufgezeichneten Form des Registers. Ungültiger Index gibt „“ zurück; ein leerer Schlüssel gibt auch „“ zurück.

Verhalten

  • Die Liste gehört zur Laufzeitinstanz. Andere Skriptausführungen haben ihre eigenen Listen. GList ist kein gemeinsam genutzter profilübergreifender Speicher. Diese Befehle schreiben keine Datei und geben keinen gespeicherten Profilstatus ein. Die neue Laufzeit erhält eine leere Liste. Es ist auch keine var/Variablendeklaration und nicht UO.SetGlobal.
  • Der neue Name wird am Ende hinzugefügt. Durch die Wiederholung eines Namens, bei dem die Groß-/Kleinschreibung nicht beachtet wird, werden Bedeutung und Schreibweise des Namens an der ursprünglichen Stelle ersetzt. Beim Lesen wird nichts gelöscht. Wenn Sie stabile Indizes benötigen, können Sie während einer Suche keine Datensätze löschen oder hinzufügen.
  • Die Vorgänge sind lokal: keine Pakete, keine Objektsuche, keine Latenz. Set/Get sucht nacheinander nach dem Namen; Für größere Mengen verwenden Sie Dictionary. Es gibt keinen separaten Befehl zum Löschen eines Schlüssels in dieser Familie; Clear löscht alle Einträge.

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.

UO.GListClear();
UO.GListSet("simple_value", 42);
var result = UO.GListPosName(0);
UO.Print("GListPosName: " + Convert.ToString(result));

1. GListPosName – 1 – direktes Skript

Parameter und Ablauf:

  • Der Index 0 bedeutet die erste Regel. Vor dem Lesen wird überprüft, ob die Liste nicht leer ist.
UO.GListClear();
UO.GListSet("bandage", 0x0E21);
UO.GListSet("gold", 0x0EED);
if (Truth(UO.GListSize() > 0))
{
    var first = UO.GListPosName(0);
    UO.Print("First rule: " + first);
}

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

2. GListPosName — 2 — Skriptfunktion

Parameter und Ablauf:

  • HasEntry gibt „true“ für einen geschriebenen Nullzähler und „false“ für einen fehlenden Namen zurück.
return  RunScenario();
 object? RunScenario()
{
    UO.GListClear();
    UO.GListSet("processed", 0);
    if (Truth(HasEntry("processed")))
    {
        var count = UO.GListGet("processed");
        UO.Print("Recorded count: " + Convert.ToString(count));
    }

    if (!(Truth(HasEntry("missing"))))
    {
        UO.Print("No entry named missing");
    }

    return null;
}

dynamic HasEntry(dynamic name)
{
    var i = 0;
    while (Truth(i < UO.GListSize()))
    {
        if (Truth(Convert.ToString(UO.GListPosName(i)) == Convert.ToString(name)))
        {
            return true;
        }

        i = i + 1;
    }

    return false;
}

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

3. GListPosName – 3 – Szenarioklasse

Parameter und Ablauf:

  • Durch Wiederholen von BANDAGE ändert sich die Schreibweise des Namens an der ersten Position; Gold bleibt Zweiter.
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.GListClear();
        UO.GListSet("bandage", 0x0E21);
        UO.GListSet("gold", 0x0EED);
        UO.GListSet("BANDAGE", 0x0E21);
        var i = 0;
        while (Truth(i < UO.GListSize()))
        {
            var name = UO.GListPosName(i);
            var graphic = UO.GListPosValue(i);
            UO.Print(name + " | graphic: " + Convert.ToString(graphic));
            i = i + 1;
        }

        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.GListPosName(index) — UO.GListPosName(Integer)

Parameter: index (Integer)

Ergebnis: string / String.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public string GListPosName(int index) => index >= 0 && index < globalList.Count ? globalList[index].Key : string.Empty;

UO.GListPosValue

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

C#-Signaturen

dynamic UO.GListPosValue(object? index);

Liest den Wert eines Eintrags nach Position, z. B. graphic, aus einer vorab ausgefüllten Liste.

Parameter

  • index - int: Index von 0 bis GListSize()-1 einschließlich. Es handelt sich nicht um serial, graphic oder die Anzahl der Einheiten im Stapel.

Rückgabewert

object? — Wert mit erhaltenem Typ; Ungültiger Index gibt int 0 zurück. Überprüfen Sie die Grenzen, da echtes 0 akzeptabel ist.

Verhalten

  • Die Liste gehört zur Laufzeitinstanz. Andere Skriptausführungen haben ihre eigenen Listen. GList ist kein gemeinsam genutzter profilübergreifender Speicher. Diese Befehle schreiben keine Datei und geben keinen gespeicherten Profilstatus ein. Die neue Laufzeit erhält eine leere Liste. Es ist auch keine var/Variablendeklaration und nicht UO.SetGlobal.
  • Der neue Name wird am Ende hinzugefügt. Durch die Wiederholung eines Namens, bei dem die Groß-/Kleinschreibung nicht beachtet wird, werden Bedeutung und Schreibweise des Namens an der ursprünglichen Stelle ersetzt. Beim Lesen wird nichts gelöscht. Wenn Sie stabile Indizes benötigen, können Sie während einer Suche keine Datensätze löschen oder hinzufügen.
  • Die Vorgänge sind lokal: keine Pakete, keine Objektsuche, keine Latenz. Set/Get sucht nacheinander nach dem Namen; Für größere Mengen verwenden Sie Dictionary. Es gibt keinen separaten Befehl zum Löschen eines Schlüssels in dieser Familie; Clear löscht alle Einträge.

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.

UO.GListClear();
UO.GListSet("simple_value", 42);
object? result = UO.GListPosValue(0);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. GListPosValue – 1 – direktes Skript

Parameter und Ablauf:

  • Der Index 1 wählt das zweite Regelgold aus. Vor dem Lesen des Werts erfolgt die Prüfung der Grenzen.
UO.GListClear();
UO.GListSet("bandage", 0x0E21);
UO.GListSet("gold", 0x0EED);
var index = 1;
if (Truth(index >= 0) && Truth(index < UO.GListSize()))
{
    var graphic = UO.GListPosValue(index);
    UO.Print("Second rule graphic: " + Convert.ToString(graphic));
}

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

2. GListPosValue — 2 — Skriptfunktion

Parameter und Ablauf:

  • Brute Force sucht in den Regeln nach dem graphic-Verband, nicht nach dem Gegenstand in der Welt; Es werden keine Spielanfragen gesendet.
return  RunScenario();
 object? RunScenario()
{
    UO.GListClear();
    UO.GListSet("bandage", 0x0E21);
    UO.GListSet("gold", 0x0EED);
    var total = UO.GListSize();
    var i = 0;
    while (Truth(i < total))
    {
        var graphic = UO.GListPosValue(i);
        if (Truth(graphic == 0x0E21))
        {
            UO.Print("Bandage rule at index " + Convert.ToString(i));
        }

        i = i + 1;
    }

    return null;
}

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

3. GListPosValue – 3 – Szenarioklasse

Parameter und Ablauf:

  • Der Index 0 existiert, daher ist der Wert 0 ein gültiger Zähler; Die Überprüfung des Werts auf Nicht-Null wäre hier ein Fehler.
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.GListClear();
        UO.GListSet("processed", 0);
        var index = 0;
        if (Truth(index < UO.GListSize()))
        {
            var count = UO.GListPosValue(index);
            UO.Print("Valid zero count: " + Convert.ToString(count));
        }

        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.GListPosValue(index) — UO.GListPosValue(Integer)

Parameter: index (Integer)

Ergebnis: dynamic / Any.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public InjectionValue GListPosValue(int index) => index >= 0 && index < globalList.Count ? globalList[index].Value : InjectionValue.Zero;

UO.GListSet

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

C#-Signaturen

void UO.GListSet(object? nameValue, object? value);

Schreibt einen benannten Wert in eine temporäre Liste: zum Beispiel graphic Beuteregeln oder Zähler für verarbeitete Gegenstände.

Parameter

  • nameValue — object? wird in einen String umgewandelt. Namen werden ohne Berücksichtigung der Groß- und Kleinschreibung verglichen: „bandage“ und „BANDAGE“ sind ein Schlüssel. Es wird empfohlen, einen nicht leeren Zeichenfolgennamen zu verwenden. ein leerer Name ist ebenfalls akzeptabel.

Rückgabewert

void – kein Ergebnis; ein separater Befehl, ohne Zuweisung.

Verhalten

  • Die Liste gehört zur Laufzeitinstanz. Andere Skriptausführungen haben ihre eigenen Listen. GList ist kein gemeinsam genutzter profilübergreifender Speicher. Diese Befehle schreiben keine Datei und geben keinen gespeicherten Profilstatus ein. Die neue Laufzeit erhält eine leere Liste. Es ist auch keine var/Variablendeklaration und nicht UO.SetGlobal.
  • Der neue Name wird am Ende hinzugefügt. Durch die Wiederholung eines Namens, bei dem die Groß-/Kleinschreibung nicht beachtet wird, werden Bedeutung und Schreibweise des Namens an der ursprünglichen Stelle ersetzt. Beim Lesen wird nichts gelöscht. Wenn Sie stabile Indizes benötigen, können Sie während einer Suche keine Datensätze löschen oder hinzufügen.
  • Die Vorgänge sind lokal: keine Pakete, keine Objektsuche, keine Latenz. Set/Get sucht nacheinander nach dem Namen; Für größere Mengen verwenden Sie Dictionary. Es gibt keinen separaten Befehl zum Löschen eines Schlüssels in dieser Familie; Clear löscht alle Einträge.

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.GListSet");
UO.GListSet("gold", 0x0EED);

1. GListSet – 1 – direktes Skript

Parameter und Ablauf:

  • Verband und Gold sind die Namen der Regeln, die Zahlen sind graphic. BANDAGE ersetzt den ersten Eintrag, erstellt keinen dritten; Die Ausgabe zeigt die Reihenfolge.
UO.GListClear();
UO.GListSet("bandage", 0x0E21);
UO.GListSet("gold", 0x0EED);
UO.GListSet("BANDAGE", 0x0E21);
var i = 0;
while (Truth(i < UO.GListSize()))
{
    var name = UO.GListPosName(i);
    var graphic = UO.GListPosValue(i);
    UO.Print(name + " | graphic: " + Convert.ToString(graphic));
    i = i + 1;
}

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

2. GListSet — 2 — Skriptfunktion

Parameter und Ablauf:

  • Die Verarbeitung beginnt mit 0. Drei Schritte erhöhen den gespeicherten Zähler auf 3; Spielgegenstände bewegen sich hier nicht.
return  RunScenario();
 object? RunScenario()
{
    UO.GListClear();
    UO.GListSet("processed", 0);
    for (int i = (int)(1); i <= 3; i += (int)(1))
    {
        UO.GListSet("processed", UO.GListGet("processed") + 1);
    }

    UO.Print("Recorded count: " + Convert.ToString(UO.GListGet("processed")));
    return null;
}

3. GListSet – 3 – Szenarioklasse

Parameter und Ablauf:

  • Modus – Zeichenfolge, Grenzwert – Zahl 2. Der Modus wählt den Zweig aus, die Nummer begrenzt die Verarbeitung auf zwei Schritte.
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.GListClear();
        UO.GListSet("mode", "inspect");
        UO.GListSet("limit", 2);
        if (Truth(UO.GListGet("mode") == "inspect"))
        {
            for (int i = (int)(1); i <= UO.GListGet("limit"); i += (int)(1))
            {
                UO.Print("Inspect batch: " + Convert.ToString(i));
            }
        }

        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.GListSet(nameValue, value) — UO.GListSet(Any,Any)

Parameter: nameValue (Any), value (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public void GListSet(InjectionValue nameValue, InjectionValue value)

        {

            string name = nameValue.ToString();

            int index = globalList.FindIndex(pair => pair.Key.Equals(name, StringComparison.OrdinalIgnoreCase));

            var entry = new KeyValuePair<string, InjectionValue>(name, value);

            if (index >= 0)

                globalList[index] = entry;

            else

                globalList.Add(entry);

        }

UO.GListSize

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

C#-Signaturen

int UO.GListSize();

Zählt benannte Einträge in einer temporären Liste, um zu prüfen, ob sie leer sind oder Brute-Force einzuschränken.

Parameter

Es gibt keine Parameter.

Rückgabewert

int >= 0 – die Anzahl der eindeutigen Namen, nicht die Anzahl der Elemente oder Einheiten in den Stapeln.

Verhalten

  • Die Liste gehört zur Laufzeitinstanz. Andere Skriptausführungen haben ihre eigenen Listen. GList ist kein gemeinsam genutzter profilübergreifender Speicher. Diese Befehle schreiben keine Datei und geben keinen gespeicherten Profilstatus ein. Die neue Laufzeit erhält eine leere Liste. Es ist auch keine var/Variablendeklaration und nicht UO.SetGlobal.
  • Der neue Name wird am Ende hinzugefügt. Durch die Wiederholung eines Namens, bei dem die Groß-/Kleinschreibung nicht beachtet wird, werden Bedeutung und Schreibweise des Namens an der ursprünglichen Stelle ersetzt. Beim Lesen wird nichts gelöscht. Wenn Sie stabile Indizes benötigen, können Sie während einer Suche keine Datensätze löschen oder hinzufügen.
  • Die Vorgänge sind lokal: keine Pakete, keine Objektsuche, keine Latenz. Set/Get sucht nacheinander nach dem Namen; Für größere Mengen verwenden Sie Dictionary. Es gibt keinen separaten Befehl zum Löschen eines Schlüssels in dieser Familie; Clear löscht alle Einträge.

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.GListSize();
UO.Print("GListSize: " + Convert.ToString(result));

1. GListSize – 1 – direktes Skript

Parameter und Ablauf:

  • Ein leerer Satz stoppt die Prozedur, bevor die Regeln verarbeitet werden.
UO.GListClear();
if (Truth(UO.GListSize() == 0))
{
    UO.Print("No batch rules; stop here");
    return null;
}

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

2. GListSize — 2 — Skriptfunktion

Parameter und Ablauf:

  • Die beiden Regeln werden über die Indizes 0 und 1 iteriert; Die Bedingung i < Size erlaubt keinen Zugriff auf den Index 2.
return  RunScenario();
 object? RunScenario()
{
    UO.GListClear();
    UO.GListSet("bandage", 0x0E21);
    UO.GListSet("gold", 0x0EED);
    var i = 0;
    while (Truth(i < UO.GListSize()))
    {
        var name = UO.GListPosName(i);
        var graphic = UO.GListPosValue(i);
        UO.Print(name + " | graphic: " + Convert.ToString(graphic));
        i = i + 1;
    }

    return null;
}

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

3. GListSize – 3 – Szenarioklasse

Parameter und Ablauf:

  • Durch die Ersetzung BANDAGE wird die Anzahl der Namen nicht erhöht; vor und nach der Größe ist 2.
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.GListClear();
        UO.GListSet("bandage", 0x0E21);
        UO.GListSet("gold", 0x0EED);
        var before = UO.GListSize();
        UO.GListSet("BANDAGE", 0x0E21);
        if (Truth(UO.GListSize() == before))
        {
            UO.Print("Existing rule updated without an extra entry");
        }

        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.GListSize() — UO.GListSize()

Parameter: Keine Parameter.

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public int GListSize() => globalList.Count;

UO.GetEasyUO

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

C#-Signaturen

string UO.GetEasyUO(object? number);

Liest eine Zeichenfolge aus der Windows-Registrierung des Benutzers EasyUO.

Parameter

  • number ist der int/Wert, der von NumberConversions.ToInt konvertiert werden soll. Bildet den Dezimalnamen-Registrierungswert.

Rückgabewert

string – Wert HKCU\Software\EasyUO<Nummer>; ist er nicht vorhanden, wird der Name * geprüft. Wenn der Schlüssel/Wert fehlt oder außerhalb von Windows liegt, wird eine leere Zeichenfolge zurückgegeben.

Verhalten

  • Durch das Lesen wird weder ein Schlüssel erstellt noch auf die Spielwelt zugegriffen. Die Legacy-Registrierungsschnittstelle unterscheidet sich von GetGlobal. Fehler beim Zugriff auf die Systemregistrierung können sich ausbreiten; Es gibt keinen separaten Haken in der Brücke.

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.GetEasyUO(1);
UO.Print("GetEasyUO: " + Convert.ToString(result));

1. Eintrag 1 lesen – Direktskript

Parameter und Ablauf:

  • Der Name wird zuerst 1 gelesen, dann *1.
var value = UO.GetEasyUO(1);
UO.Print(value);

2. Auf leeres Ergebnis prüfen – Skriptfunktion

Parameter und Ablauf:

  • Eine leere Zeichenfolge kann kein Wert oder gespeicherter leerer Text sein.
return  RunScenario();
 object? RunScenario()
{
    var value = UO.GetEasyUO(999);
    if (Truth(Len(value) == 0))
    {
        UO.Print("empty");
    }

    return null;
}

int Len(object? value) => Convert.ToString(value)?.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. Gespeicherte Nummer - Skriptklasse

Parameter und Ablauf:

  • Die Zahl definiert den Registrierungswert, nicht den serial des Objekts.
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 number = 2;
        var value = UO.GetEasyUO(number);
        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.GetEasyUO(number) — UO.GetEasyUO(Any)

Parameter: number (Any)

Ergebnis: string / String.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public string GetEasyUO(InjectionValue number) => bridge.GetEasyUO(NumberConversions.ToInt(number));

UO.GetGlobal

C#-Signaturen

string UO.GetGlobal(object? name);
dynamic UO.GetGlobal(object? globalRegion, object? varName);

Verhalten und Ergebnis

SetGlobal und GetGlobal teilen Werte zwischen allen Skripten, Profilen und Full-/Client-Prozessen. Werte sind Zeichenfolgen; fehlende Schlüssel ergeben "N/A". Groß-/Kleinschreibung zählt; region-Formen verwenden region/name. Manager/Game Manager/CSharp/globals.json bleibt nach Neustarts erhalten und wird mit Prozesssperre frisch gelesen. Shared-Formen verwenden denselben Speicher.

Parameter

  • globalRegion — Namensraum zusammen mit dem Schlüsselnamen.
  • name — Gemeinsamer Schlüsselname mit Groß-/Kleinschreibung.
  • varName — Gemeinsamer Schlüsselname mit Groß-/Kleinschreibung.

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

Chatbefehle

#getglobal team.target
#get global team.message

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 value = UO.GetGlobal("team.target");
UO.Print(value);

2

string value = UO.GetGlobal("team.delay");
if (int.TryParse(value, out int milliseconds))
    UO.Print(milliseconds.ToString());

3

UO.Print(Convert.ToString(UO.GetGlobal("team", "delay")));

4

new CommandSample().Execute(UO);

sealed class CommandSample
{
    public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
    {
        string value = api.GetGlobal("team.target");
        api.Print(value);
    }
}

Interne Aufrufe

CSharpGameApi.GetGlobal
  -> CSharpScriptGlobals
  -> InjectionScript.Runtime.InjectionApiUO.RegisterClientApiCompatibility
  -> InjectionScript.Runtime.State.Globals.GetGlobal
Globals -> SharedGlobalStore -> named mutex -> atomic JSON replacement


UO.GetProfile

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

C#-Signaturen

string UO.GetProfile(object? serial);

Liest die öffentliche Zeichenbeschreibung, die der Server für das Profilfenster sendet. Nützlich zum Lesen von Notizen oder zum Suchen nach Text in der Beschreibung des ausgewählten Charakters. Hierbei handelt es sich nicht um Managerprofileinstellungen.

Parameter

  • serial – Zeichenserie: eine Zahl, eine Zeichenfolge mit ID 0x... oder ein Objektselektor wie „self“ oder „lasttarget“. Dies ist kein Körpertyp, kein Dateiname oder ein Managerprofil.

Rückgabewert

string – Text der Hauptbeschreibung, ohne Titel und Unterschrift. Eine leere Beschreibung ist zulässig; Ein leeres Ergebnis ist auch möglich, wenn innerhalb von 3 Sekunden keine Antwort erfolgt. Dies ist nicht true/false. Bei jedem Anruf wird eine Anfrage gesendet; Wenn die Beschreibung bereits in der Sitzung gespeichert ist, wird sie sofort zurückgegeben, einschließlich eines Entwurfs des geöffneten Fensters. Dies ist keine Garantie für eine neue Serverantwort.

Verhalten

  • Die Beschreibung und ihr Entwurf gehören zur Sitzung. Wenn Sie das Spielfenster schließen, werden sie gespeichert, ohne sie zu veröffentlichen. Wenn Sie sie öffnen, wird das Profilfenster wiederhergestellt. Durch das explizite Schließen Ihres eigenen Profils wird der geänderte Text einmal gesendet. Der Text einer anderen Person wird nicht gesendet. Die neue Serverantwort ersetzt die alten Daten, durch Trennen der Verbindung werden diese gelöscht. GetProfile bearbeitet selbst nichts.

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.GetProfile("self");
UO.Print("GetProfile: " + Convert.ToString(result));

1. Direkte Bewerbung – direktes Skript

Parameter und Ablauf:

  • „self“ – Beschreibung Ihres Charakters; keine Kontokonfiguration. Der vom Server empfangene oder bereits in der Sitzung gespeicherte Text wird angezeigt.
var note = UO.GetProfile("self");
if (Truth(note != ""))
{
    UO.Print(note);
}

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

2. Spielzustand – Szenariofunktion

Parameter und Ablauf:

  • Erfordert vorhandenes lasttarget. FindText sucht im Freitext nach dem Wort „Healer“ (Groß-/Kleinschreibung beachten). Bei einer Übereinstimmung speichert AddObject das ausgewählte serial unter dem Namen healerNote. Dies ist eine Benutzernotiz, kein Berufsnachweis NPC.
return  RunScenario();
 object? RunScenario()
{
    if (!(Truth(UO.Exists("lasttarget"))))
    {
        return null;
    }

    var note = UO.GetProfile("lasttarget");
    if (Truth(FindText(note, "Healer") > 0))
    {
        UO.AddObject("healerNote", "lasttarget");
    }

    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
int FindText(object? text, object? value) => (Convert.ToString(text) ?? "").IndexOf(Convert.ToString(value) ?? "", StringComparison.Ordinal) + 1;
int FindText(int start, object? text, object? value)
{
    string input = Convert.ToString(text) ?? "";
    return input.IndexOf(Convert.ToString(value) ?? "", Math.Clamp(start - 1, 0, input.Length), StringComparison.Ordinal) + 1;
}

3. Vollständige Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • Die gesamte Funktion HasPublicNote ist unten angegeben. Überprüft die Existenz eines Objekts und eines Teilstrings und gibt true/false zurück. „Gilde“ – Demotext; Eine leere Antwort bestätigt nicht das Fehlen eines solchen Datensatzes auf dem Server.
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()
    {
        if (Truth(HasPublicNote("lasttarget", "Guild")))
        {
            UO.AddObject("guildNote", "lasttarget");
        }

        return null;
    }

    dynamic HasPublicNote(dynamic serial, dynamic phrase)
    {
        if (!(Truth(UO.Exists(serial))))
        {
            return false;
        }

        return FindText(UO.GetProfile(serial), phrase) > 0;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
    int FindText(object? text, object? value) => (Convert.ToString(text) ?? "").IndexOf(Convert.ToString(value) ?? "", StringComparison.Ordinal) + 1;
    int FindText(int start, object? text, object? value)
    {
        string input = Convert.ToString(text) ?? "";
        return input.IndexOf(Convert.ToString(value) ?? "", Math.Clamp(start - 1, 0, input.Length), StringComparison.Ordinal) + 1;
    }
}

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.GetProfile(serial) — UO.GetProfile(Any)

Parameter: serial (Any)

Ergebnis: string / String.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public string GetProfile(InjectionValue serial) => bridge.GetProfile(GetObject(serial));

UO.LoadHotkeys

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

C#-Signaturen

void UO.LoadHotkeys();

Lädt gespeicherte Makros und Hotkeys.

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

  • LoadHotkeys ruft _world.Macros.Load über Invoke auf. Die aktuelle Makrotabelle wird durch lokale Profildaten ersetzt.
  • Ä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.LoadHotkeys");
UO.LoadHotkeys();

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Lädt gespeicherte Makros und Hotkeys.
UO.LoadHotkeys();

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • LoadHotkeys ruft _world.Macros.Load über Invoke auf. Die aktuelle Makrotabelle wird durch lokale Profildaten ersetzt.
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.ProfileName());
    UO.LoadHotkeys();
    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.LoadHotkeys();
        UO.Print("Macros loaded");
        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.LoadHotkeys() — UO.LoadHotkeys()

Parameter: Keine Parameter.

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "loadhotkeys": bridge.LoadHotkeys(); break;

UO.ProfileName

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

C#-Signaturen

dynamic UO.ProfileName();

Liest den Namen des aktuellen Profils.

Parameter

Es gibt keine Parameter.

Rückgabewert

string – Text des Bridge-Feldes.ProfileName; Ohne verfügbare Daten ist ein leerer String möglich. Dies ist kein Verbindungszeichen und kein numerisches ID.

Verhalten

  • ExecuteClientApiCompatibility gibt Bridge.ProfileName zurück, ohne das Profil oder die Serverauswahl zu ändern.
  • Liest den aktuellen lokalen Status. Es gibt kein Paket, Ziel oder automatische Aktualisierung; Einzelne Lesevorgänge können unterschiedliche Zustände aufweisen.

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.ProfileName();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Liest den Namen des aktuellen Profils.
var value = UO.ProfileName();
UO.Print(value);

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • ExecuteClientApiCompatibility gibt Bridge.ProfileName zurück, ohne das Profil oder die Serverauswahl zu ändern.
return  RunScenario();
 object? RunScenario()
{
    var value = UO.ProfileName();
    if (Truth(Len(value) > 0))
    {
        UO.TextPrint(value);
    }

    return null;
}

int Len(object? value) => Convert.ToString(value)?.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. Vollständige Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • Liest den aktuellen lokalen Status. Es gibt kein Paket, Ziel oder automatische Aktualisierung; Einzelne Lesevorgänge können unterschiedliche Zustände aufweisen.
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 before = UO.ProfileName();
        UO.Wait(500);
        var after = UO.ProfileName();
        UO.Print(before = after);
        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.ProfileName() — UO.ProfileName()

Parameter: Keine Parameter.

Ergebnis: dynamic / Any.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "profilename": return new InjectionValue(bridge.ProfileName);

UO.ProfileShardName

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

C#-Signaturen

dynamic UO.ProfileShardName();

Liest den Shard-Namen.

Parameter

Es gibt keine Parameter.

Rückgabewert

string – Text des Bridge-Feldes.ShardName; Ohne verfügbare Daten ist ein leerer String möglich. Dies ist kein Verbindungszeichen und kein numerisches ID.

Verhalten

  • ExecuteClientApiCompatibility gibt Bridge.ShardName zurück, ohne das Profil oder die Serverauswahl zu ändern.
  • Liest den aktuellen lokalen Status. Es gibt kein Paket, Ziel oder automatische Aktualisierung; Einzelne Lesevorgänge können unterschiedliche Zustände aufweisen.

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.ProfileShardName();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Liest den Shard-Namen.
var value = UO.ProfileShardName();
UO.Print(value);

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • ExecuteClientApiCompatibility gibt Bridge.ShardName zurück, ohne das Profil oder die Serverauswahl zu ändern.
return  RunScenario();
 object? RunScenario()
{
    var value = UO.ProfileShardName();
    if (Truth(Len(value) > 0))
    {
        UO.TextPrint(value);
    }

    return null;
}

int Len(object? value) => Convert.ToString(value)?.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. Vollständige Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • Liest den aktuellen lokalen Status. Es gibt kein Paket, Ziel oder automatische Aktualisierung; Einzelne Lesevorgänge können unterschiedliche Zustände aufweisen.
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 before = UO.ProfileShardName();
        UO.Wait(500);
        var after = UO.ProfileShardName();
        UO.Print(before = after);
        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.ProfileShardName() — UO.ProfileShardName()

Parameter: Keine Parameter.

Ergebnis: dynamic / Any.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "shardname":

                case "profileshardname": return new InjectionValue(bridge.ShardName);

UO.ReqProfile

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

C#-Signaturen

void UO.ReqProfile();
void UO.ReqProfile(object? mobile);

Druckt den bekannten Profiltext des Charakters.

Parameter

  • mobile – Optional serial/Alias. Ohne Argument - „lasttarget“. Dies ist kein lokales Einstellungsprofil ClassicUO.

Rückgabewert

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

Verhalten

  • ExecuteLegacyManualAlias ruft GetProfile auf, dann SystemMessage. Bridge.GetProfile sendet RequestProfile, dann prüft bis zu 3 Sekunden CharacterPanels.Profile.CurrentText mit Pausen 25 ms. Bereits vorhandener Text kann sofort zurückgegeben werden; Bei Timeout wird eine Meldung angezeigt und eine leere Zeile ausgegeben. Dieser Befehl gibt den Text aus, gibt ihn jedoch nicht zurück.
  • Für den string-Wert verwenden Sie UO.GetProfile. Das Vorhandensein von Text ist kein Beweis für eine erfolgreiche Umbenennung oder einen Zeichenstatus.

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.ReqProfile");
UO.ReqProfile();

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Druckt den bekannten Profiltext des Charakters.
UO.ReqProfile();

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • ExecuteLegacyManualAlias ruft GetProfile auf, dann SystemMessage. Bridge.GetProfile sendet RequestProfile, dann prüft bis zu 3 Sekunden CharacterPanels.Profile.CurrentText mit Pausen 25 ms. Bereits vorhandener Text kann sofort zurückgegeben werden; Bei Timeout wird eine Meldung angezeigt und eine leere Zeile ausgegeben. Dieser Befehl gibt den Text aus, gibt ihn jedoch nicht zurück.
return  RunScenario();
 object? RunScenario()
{
    UO.ReqProfile("self");
    return null;
}

3. Vollständige Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • Für den string-Wert verwenden Sie UO.GetProfile. Das Vorhandensein von Text ist kein Beweis für eine erfolgreiche Umbenennung oder einen Zeichenstatus.
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.GetSerial("lasttarget");
        if (Truth(UO.Exists(id)))
        {
            UO.ReqProfile(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.ReqProfile() — UO.ReqProfile()

Parameter: Keine Parameter.

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "reqprofile":

                    SystemMessage(GetProfile(arguments.Length > 0 ? arguments[0] : new InjectionValue("lasttarget")));

                    break;

UO.ReqProfile(mobile) — UO.ReqProfile(Any)

Parameter: mobile (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "reqprofile":

                    SystemMessage(GetProfile(arguments.Length > 0 ? arguments[0] : new InjectionValue("lasttarget")));

                    break;

UO.ResetProfile

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

C#-Signaturen

void UO.ResetProfile();

Setzt das aktive Profil auf die Standardwerte zurück.

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

  • ResetProfile ruft ProfileManager auf.ResetCurrentProfileToDefault; Wenn kein aktives Profil vorhanden ist, wird ein Fehler angezeigt. Ändert lokale Einstellungen, sodass gespeicherte Benutzerwerte möglicherweise verloren gehen.
  • Ä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.ResetProfile");
UO.ResetProfile();

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Setzt das aktive Profil auf die Standardwerte zurück.
UO.ResetProfile();

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • ResetProfile ruft ProfileManager auf.ResetCurrentProfileToDefault; Wenn kein aktives Profil vorhanden ist, wird ein Fehler angezeigt. Ändert lokale Einstellungen, sodass gespeicherte Benutzerwerte möglicherweise verloren gehen.
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.ProfileName());
    UO.ResetProfile();
    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.ResetProfile();
        UO.SaveConfig();
        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.ResetProfile() — UO.ResetProfile()

Parameter: Keine Parameter.

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "resetprofile": bridge.ResetProfile(); break;

UO.SaveConfig

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

C#-Signaturen

void UO.SaveConfig();

Speichert das aktuelle ClassicUO-Profil.

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

  • SaveConfig ruft ProfileManager.SaveCurrentProfile über Invoke auf. Der Befehl schreibt die lokalen Profileinstellungen; Der Pfad wird von ProfileManager übernommen.
  • Ä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.SaveConfig");
UO.SaveConfig();

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Speichert das aktuelle ClassicUO-Profil.
UO.SaveConfig();

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • SaveConfig ruft ProfileManager.SaveCurrentProfile über Invoke auf. Der Befehl schreibt die lokalen Profileinstellungen; Der Pfad wird von ProfileManager übernommen.
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.ProfileName());
    UO.SaveConfig();
    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.SaveConfig();
        UO.Print(UO.ShardPath());
        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.SaveConfig() — UO.SaveConfig()

Parameter: Keine Parameter.

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public void SaveConfig() => bridge.SaveConfig();

UO.SaveHotkeys

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

C#-Signaturen

void UO.SaveHotkeys();

Speichert Makros und Hotkeys.

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

  • SaveHotkeys ruft _world.Macros.Save über Invoke auf. Die lokale Makrotabelle des aktuellen Profils wird gespeichert.
  • Ä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.SaveHotkeys");
UO.SaveHotkeys();

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Speichert Makros und Hotkeys.
UO.SaveHotkeys();

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • SaveHotkeys ruft _world.Macros.Save über Invoke auf. Die lokale Makrotabelle des aktuellen Profils wird gespeichert.
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.ProfileName());
    UO.SaveHotkeys();
    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.SaveHotkeys();
        UO.LoadHotkeys();
        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.SaveHotkeys() — UO.SaveHotkeys()

Parameter: Keine Parameter.

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "savehotkeys": bridge.SaveHotkeys(); break;

UO.Set

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

C#-Signaturen

void UO.Set(object? name, object? value);

Ändert eine von drei Legacy-Einstellungen.

Parameter

  • name – Zeichenfolge ohne Berücksichtigung der Groß-/Kleinschreibung: „finddistance“, „grabdelay“ oder „equipfordress“. Der unbekannte Name wird stillschweigend ignoriert.
  • value - int oder double/0x-Text. Für die Zeichenfolgenform TryStr2Int; Falscher Text wird zu 0, kein Fehler.

Rückgabewert

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

Verhalten

  • finddistance ruft Bridge auf.SetFindDistance, Grabdelay ruft Bridge auf.SetGrabDelay, equipfordress weist Status zu.UseEquipForDress. Dies sind drei separate Einstellungen; Es gibt keinen universellen Setter für beliebige Eigenschaften.
  • Der Stringwert wird zunächst TryStr2Int mit Fallback=0 konvertiert. Daher könnte ein Tippfehler dazu führen, dass 0 in die erkannte Einstellung geschrieben wird. Set selbst sucht nicht nach Gegenständen und zieht sich nicht um.

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.Set");
UO.Set("finddistance", 10);

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Ändert eine von drei Legacy-Einstellungen.
UO.Set("finddistance", 10);

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • finddistance ruft Bridge auf.SetFindDistance, Grabdelay ruft Bridge auf.SetGrabDelay, equipfordress weist Status zu.UseEquipForDress. Dies sind drei separate Einstellungen; Es gibt keinen universellen Setter für beliebige Eigenschaften.
return  RunScenario();
 object? RunScenario()
{
    UO.Set("grabdelay", "250");
    return null;
}

3. Vollständige Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • Der Stringwert wird zunächst TryStr2Int mit Fallback=0 konvertiert. Daher könnte ein Tippfehler dazu führen, dass 0 in die erkannte Einstellung geschrieben wird. Set selbst sucht nicht nach Gegenständen und zieht sich nicht um.
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.Set("equipfordress", 1);
        UO.Print(UO.FindDistance());
        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.Set(name, value) — UO.Set(String,Integer)

Parameter: name (String), value (Integer/String)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public void Set(string name, int value)

        {

            if (name.Equals("finddistance", StringComparison.OrdinalIgnoreCase))

            {

                bridge.SetFindDistance(value);

            }

            else if (name.Equals("grabdelay", StringComparison.OrdinalIgnoreCase))

            {

                bridge.SetGrabDelay(value);

            }

            else if (name.Equals("equipfordress", StringComparison.OrdinalIgnoreCase))

            {

                state.UseEquipForDress = value;

            }

        }

UO.Set(name, value) — UO.Set(String,String)

Parameter: name (String), value (Integer/String)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public void Set(string name, string valueStr)

        {

            int valueInt = NumberConversions.TryStr2Int(valueStr, out var value) ? value : 0;

            Set(name, valueInt);

        }

UO.SetDefault

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

C#-Signaturen

void UO.SetDefault(object? name, object? @object);

Speichert den benannten Alias ​​serial im Laufzeitzustand.

Parameter

  • name – Benennen Sie den Alias ​​als Text, die Groß- und Kleinschreibung behandelt das Objektwörterbuch.
  • object – Seriell/Alias ​​über Arg/GetObject. Der Name und serial folgen in dieser Reihenfolge.

Rückgabewert

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

Verhalten

  • ExecuteLegacyManualAlias ruft state.Objects.Set(Text(0),Arg(1)) auf. Es gibt keine interaktive Auswahl; die Existenz von serial ist nicht verifiziert.
  • Dabei wird der Objektname aufgezeichnet, das Profil wird nicht zurückgesetzt und nicht alle Einstellungen werden auf die Standardwerte zurückgesetzt. Bei nachfolgenden Aufrufen wird der Alias ​​erneut aufgelöst.
  • In einem regulären Client-Host werden diese Statusdaten vom GetPersistentState-Manager übernommen und gelten für Skripte/Chat/Makros derselben Welt/dieselben Profils und gehören nicht zu einem einzigen Skript. Ein anderer Prozess oder ein scheinbar separater InjectionRuntimeState hat einen anderen Zustand. Das Laden/Löschen eines Profils kann es ersetzen; Die gespeicherten serial werden weiterhin mit der geladenen Welt verglichen.

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.SetDefault");
UO.SetDefault("manualObject", UO.Self());

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Speichert den benannten Alias ​​serial im Laufzeitzustand.
UO.SetDefault("manualObject", UO.Self());

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • ExecuteLegacyManualAlias ruft state.Objects.Set(Text(0),Arg(1)) auf. Es gibt keine interaktive Auswahl; die Existenz von serial ist nicht verifiziert.
return  RunScenario();
 object? RunScenario()
{
    UO.SetDefault("manualBag", UO.Backpack());
    UO.Print(UO.GetSerial("manualBag"));
    return null;
}

3. Vollständige Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • Dabei wird der Objektname aufgezeichnet, das Profil wird nicht zurückgesetzt und nicht alle Einstellungen werden auf die Standardwerte zurückgesetzt. Bei nachfolgenden Aufrufen wird der Alias ​​erneut aufgelöst.
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.GetSerial("lasttarget");
        if (Truth(UO.Exists(id)))
        {
            UO.SetDefault("manualTarget", id);
            UO.Print(UO.GetName("manualTarget"));
        }

        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.SetDefault(name, object) — UO.SetDefault(Any,Any)

Parameter: name (Any), object (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "setdefault":

                    if (arguments.Length > 1) state.Objects.Set(Text(0), Arg(1));

                    break;

UO.SetEasyUO

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

C#-Signaturen

void UO.SetEasyUO(object? number, object? value);

Schreibt einen Zeichenfolgenwert in die Windows-Registrierung EasyUO.

Parameter

  • number — int Wertnummer, formatiert double ohne *-Präfix.
  • value – Text bis ToString; als übermittelt gespeichert.

Rückgabewert

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

Verhalten

  • Öffnet/erstellt unter Windows HKCU\Software\EasyUO mit Schreibberechtigung, SetValue(decimalNumber,Wert,RegistryValueKind.string). Auf anderen Betriebssystemen wird eine Meldung angezeigt und nicht aufgezeichnet.
  • Dies ist ein externer permanenter Eintrag in der Registrierung des aktuellen Benutzers, keine bereichsbezogene globale Laufzeit und kein Spiel serial. Registry-Zugriffsfehler werden durch diese Funktion nicht ausgeblendet.

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.SetEasyUO");
UO.SetEasyUO(9001, "manual-example");

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Schreibt einen Zeichenfolgenwert in die Windows-Registrierung EasyUO.
UO.SetEasyUO(9001, "manual-example");

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • Öffnet/erstellt unter Windows HKCU\Software\EasyUO mit Schreibberechtigung, SetValue(decimalNumber,Wert,RegistryValueKind.String). Auf anderen Betriebssystemen wird eine Meldung angezeigt und nicht aufgezeichnet.
return  RunScenario();
 object? RunScenario()
{
    UO.SetEasyUO(9001, "");
    return null;
}

3. Vollständige Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • Dies ist ein externer permanenter Eintrag in der Registrierung des aktuellen Benutzers, keine bereichsbezogene globale Laufzeit und kein Spiel serial. Registry-Zugriffsfehler werden durch diese Funktion nicht ausgeblendet.
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.SetEasyUO(9001, "manual-example");
        UO.Print(UO.GetEasyUO(9001));
        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.SetEasyUO(number, value) — UO.SetEasyUO(Any,Any)

Parameter: number (Any), value (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public void SetEasyUO(InjectionValue number, InjectionValue value)

            => bridge.SetEasyUO(NumberConversions.ToInt(number), value.ToString());

UO.SetGlobal

C#-Signaturen

void UO.SetGlobal(object? name, object? value);
void UO.SetGlobal(object? globalRegion, object? varName, object? varValue);

Verhalten und Ergebnis

SetGlobal und GetGlobal teilen Werte zwischen allen Skripten, Profilen und Full-/Client-Prozessen. Werte sind Zeichenfolgen; fehlende Schlüssel ergeben "N/A". Groß-/Kleinschreibung zählt; region-Formen verwenden region/name. Manager/Game Manager/CSharp/globals.json bleibt nach Neustarts erhalten und wird mit Prozesssperre frisch gelesen. Shared-Formen verwenden denselben Speicher.

Parameter

  • globalRegion — Namensraum zusammen mit dem Schlüsselnamen.
  • name — Gemeinsamer Schlüsselname mit Groß-/Kleinschreibung.
  • value — Als Text gespeicherter Wert.
  • varName — Gemeinsamer Schlüsselname mit Groß-/Kleinschreibung.
  • varValue — Als Text gespeicherter Wert.

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

Chatbefehle

#setglobal team.target 0x40001234
#set global team.message Привіт усім

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.SetGlobal("team.target", 0x40001234);
UO.Print(UO.GetGlobal("team.target"));

2

UO.SetGlobal("team.message", "Привіт");
UO.Print(UO.GetGlobal("team.message"));

3

UO.SetGlobal("team", "delay", "350");
UO.Print(Convert.ToString(UO.GetGlobal("team", "delay")));

4

new CommandSample().Execute(UO);

sealed class CommandSample
{
    public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
    {
        api.SetGlobal("team.target", 0x40001234);
        api.Print(api.GetGlobal("team.target"));
    }
}

Interne Aufrufe

CSharpGameApi.SetGlobal
  -> CSharpScriptGlobals
  -> InjectionScript.Runtime.InjectionApiUO.RegisterClientApiCompatibility
  -> InjectionScript.Runtime.State.Globals.SetGlobal
Globals -> SharedGlobalStore -> named mutex -> atomic JSON replacement


UO.SetMulPath

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

C#-Signaturen

void UO.SetMulPath(object? pathValue);

Speichert die Pfadzeichenfolge mulPath zur Laufzeit.

Parameter

  • pathValue – Text bis ToString; als übermittelt gespeichert.

Rückgabewert

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

Verhalten

  • Weist mulPath = ToString oder die leere Zeichenfolge zu. Die Datei wird nicht geöffnet, Kartendaten werden nicht neu geladen und die Pfadverfügbarkeit wird von dieser Funktion nicht überprüft.
  • Dies ist der Kompatibilitätsspeicher der aktuellen Laufzeit. Es gibt keine Verbraucher im Projekt privat mulPath/showZ; Durch die Änderung werden keine Assets neu geladen oder die Höhenanzeige geändert.

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.SetMulPath");
UO.SetMulPath("C:\\Ultima Online");

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Speichert die Pfadzeichenfolge mulPath zur Laufzeit.
UO.SetMulPath("C:\\Ultima Online");

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • Weist mulPath = ToString oder die leere Zeichenfolge zu. Die Datei wird nicht geöffnet, Kartendaten werden nicht neu geladen und die Pfadverfügbarkeit wird von dieser Funktion nicht überprüft.
return  RunScenario();
 object? RunScenario()
{
    UO.SetMulPath("");
    return null;
}

3. Vollständige Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • Dies ist der Kompatibilitätsspeicher der aktuellen Laufzeit. Es gibt keine Verbraucher im Projekt privat mulPath/showZ; Durch die Änderung werden keine Assets neu geladen oder die Höhenanzeige geä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()
    {
        ApplyValue("C:\\Ultima Online");
        return null;
    }

    void ApplyValue(dynamic value)
    {
        UO.SetMulPath(value);
    }
}

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.SetMulPath(pathValue) — UO.SetMulPath(Any)

Parameter: pathValue (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public void SetMulPath(InjectionValue pathValue) => mulPath = pathValue.ToString() ?? string.Empty;
⚠️ **GitHub.com Fallback** ⚠️