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

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

Gump-Fenster

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

Serverfenster lesen und Antworten senden: Schaltflächen, Kontrollkästchen, Optionsfelder und Felder. ID-Fenster, serial-Eigentümer und geöffneter Fensterindex sind nicht austauschbar.

Abschnitte

Thema Befehle und Erklärungen
GetGump UO.GetGump
GetGumpInfo UO.GetGumpInfo
Gump ID / Serial UO.GetGumpID · UO.GetGumpSerial
Text Lines UO.GetGumpTextLines · UO.GetGumpFullLines · UO.GetGumpShortLines
Buttons UO.GetGumpButtonsDescription · UO.NumGumpButton
CheckBox UO.NumGumpCheckBox · UO.GumpAutoCheckBox
RadioButton UO.NumGumpRadiobutton · UO.GumpAutoRadiobutton
TextEntry UO.NumGumpTextEntry · UO.GumpAutoTextEntry
WaitGump UO.WaitGump
SelectGump UO.SelectGump
SendGumpSelect UO.SendGumpSelect
Ignore Gumps UO.AddGumpIgnoreByID · UO.AddGumpIgnoreBySerial · UO.ClearGumpsIgnore
Close Gump UO.IsGumpCanBeClosed · UO.CloseClientGump · UO.CancelGump

Alle Theme-Befehle

Gump-Informationen

UO.GetGump · UO.GetGumpID · UO.GetGumpSerial · UO.GetGumpCount · UO.GetGumpsCount · UO.GetGumpInfo · UO.GetGumpButtonsDescription · UO.GetGumpFullLines · UO.GetGumpShortLines · UO.GetGumpTextLines · UO.GumpObject · UO.LastGump · UO.IsGump · UO.GumpExists · UO.IsGumpCanBeClosed

Antworten

UO.NumGumpButton · UO.NumGumpCheckBox · UO.NumGumpRadiobutton · UO.NumGumpTextEntry · UO.GumpAutoCheckBox · UO.GumpAutoRadiobutton · UO.GumpAutoTextEntry · UO.WaitGump · UO.WaitGumpCheck · UO.WaitGumpEntry · UO.SelectGump · UO.SendGumpSelect · UO.SetGump

Ignore / Schließen

UO.AddGumpIgnoreByID · UO.AddGumpIgnoreBySerial · UO.ClearGumpsIgnore · UO.CancelGump · UO.CloseClientGump

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

Parameter, Ergebnis und alle Szenarien

var info = UO.GetGumpInfo(0);
if (Truth(ArrayLength(info) == 5))
{
    UO.Print("Serial=" + Hex(info[0]));
    UO.Print("GumpID=" + Hex(info[1]));
}

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

UO.WaitGump

Parameter, Ergebnis und alle Szenarien

UO.WaitGump(100);
UO.UseObject("0x40001234");

Vollständige Befehlsreferenz


UO.AddGumpIgnoreByID

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

C#-Signaturen

void UO.AddGumpIgnoreByID(object? id);

Fügt den numerischen ID-Gump zur lokalen Ausnahmeliste hinzu, die von UO.GetGumpInfo verwendet wird.

Parameter

  • id ist ein numerischer ID-Gump, der UO.GetGumpInfo zurückgibt.

Rückgabewert

void. Durch das Hinzufügen von ID wird das Fenster nicht geschlossen und es wird auch nicht bestätigt, dass der Server es verarbeitet hat.

Verhalten

Eigenständige C#-Skripte

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

Einfaches Beispiel

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

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

UO.Print("Calling UO.AddGumpIgnoreByID");
UO.AddGumpIgnoreByID(123);

1. Beseitigen Sie Gump mit ID 123 aus dem Ergebnis von UO.GetGumpInfo. - direktes Drehbuch

Parameter und Ablauf:

  • Beseitigen Sie Gump mit ID 123 aus dem Ergebnis von UO.GetGumpInfo.
UO.AddGumpIgnoreByID(123);

2. Speichern Sie ID in einer Variablen, bevor Sie die Ausnahme auslösen. - Skriptfunktion

Parameter und Ablauf:

  • Speichern Sie ID in einer Variablen, bevor Sie die Ausnahme auslösen.
return  RunScenario();
 object? RunScenario()
{
    var ignoredId = 123;
    UO.AddGumpIgnoreByID(ignoredId);
    return null;
}

3. Fügen Sie etwas ID hinzu; Jede Ausnahme betrifft GetGumpInfo. - Skriptklasse

Parameter und Ablauf:

  • Fügen Sie etwas ID hinzu; Jede Ausnahme betrifft GetGumpInfo.
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.AddGumpIgnoreByID(123);
        UO.AddGumpIgnoreByID(456);
        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.AddGumpIgnoreByID(id) — UO.AddGumpIgnoreByID(Any)

Parameter: id (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "addgumpignorebyid": state.IgnoredGumpIds.Add(Arg(0)); return InjectionValue.Unit;

UO.AddGumpIgnoreBySerial

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

C#-Signaturen

void UO.AddGumpIgnoreBySerial(object? serial);

Fügt serial gump zur lokalen Ausnahmeliste hinzu, die von UO.GetGumpInfo verwendet wird.

Parameter

  • serial ist ein numerischer serial-Gump, der UO.GetGumpInfo zurückgibt.

Rückgabewert

void. Durch das Hinzufügen von serial wird das Fenster nicht geschlossen und es wird auch nicht bestätigt, dass der Server es verarbeitet hat.

Verhalten

Eigenständige C#-Skripte

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

Einfaches Beispiel

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

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

UO.Print("Calling UO.AddGumpIgnoreBySerial");
UO.AddGumpIgnoreBySerial(1073741824);

1. Beseitigen Sie Gummi mit serial 1073741824 aus dem Ergebnis UO.GetGumpInfo. - direktes Drehbuch

Parameter und Ablauf:

  • Beseitigen Sie Gummi mit serial 1073741824 aus dem Ergebnis UO.GetGumpInfo.
UO.AddGumpIgnoreBySerial(1073741824);

2. Übergeben Sie serial aus der Variablen. - Skriptfunktion

Parameter und Ablauf:

  • Übergeben Sie serial aus der Variablen.
return  RunScenario();
 object? RunScenario()
{
    var ignoredSerial = 1073741824;
    UO.AddGumpIgnoreBySerial(ignoredSerial);
    return null;
}

3. Eliminieren Sie zwei serial Gumps aus der Ausgabe von GetGumpInfo. - Skriptklasse

Parameter und Ablauf:

  • Eliminieren Sie zwei serial Gumps aus der Ausgabe von GetGumpInfo.
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.AddGumpIgnoreBySerial(1073741824);
        UO.AddGumpIgnoreBySerial(1073741825);
        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.AddGumpIgnoreBySerial(serial) — UO.AddGumpIgnoreBySerial(Any)

Parameter: serial (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "addgumpignorebyserial": state.IgnoredGumpSerials.Add(Arg(0)); return InjectionValue.Unit;

UO.CancelGump

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

C#-Signaturen

void UO.CancelGump();
void UO.CancelGump(object? gumpId);

Schließt den ausgewählten Server-Gump über einen kompatiblen Resolver CloseSimpleGump.

Parameter

  • gumpId – Optionaler int/numerischer Wert. Der Resolver sucht zunächst nach einem passenden Server/Lokal serial und dann nach dem Server-Gump-Index. Ohne Argument wird -1 übergeben und der letzte Gump ausgewählt.

Rückgabewert

void – kein Rückgabewert.

Verhalten

  • Ein Argument namens gumpId garantiert nicht, dass nur ID gesucht wird. CloseGumpUnsafe für Server-Gump sendet die Schaltfläche 0 und löscht dann das lokale Fenster. Wenn kein Gump gefunden wird, gibt es keine Aktion. Dies ist weder CancelMenu, noch löscht es das ausstehende WaitGump.

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

1. Letzte Lücke schließen – direktes Skript

Parameter und Ablauf:

  • Das Formular ohne Argument wählt den neuesten verfügbaren Server-Gump aus.
UO.CancelGump();

2. Gump mit bekannter ID-Skriptfunktion schließen

Parameter und Ablauf:

  • Es wird der tatsächliche ID des ersten Gumps verwendet; Die Liste kann sich zwischen Anrufen ändern.
return  RunScenario();
 object? RunScenario()
{
    var id = UO.GetGumpID(0);
    if (Truth(id != 0))
    {
        UO.CancelGump(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;

3. Expliziter letzter Index – Skriptklasse

Parameter und Ablauf:

  • Der Wert -1 wählt explizit den letzten Gump im Resolver aus.
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.CancelGump(-1);
        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.CancelGump() — UO.CancelGump()

Parameter: Keine Parameter.

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "cancelgump": bridge.CloseSimpleGump(arguments.Length > 0 ? Arg(0) : -1); break;

UO.CancelGump(gumpId) — UO.CancelGump(Any)

Parameter: gumpId (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "cancelgump": bridge.CloseSimpleGump(arguments.Length > 0 ? Arg(0) : -1); break;

UO.ClearGumpsIgnore

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

C#-Signaturen

void UO.ClearGumpsIgnore();

Löscht beide Sätze der ignorierten Laufzeit von Gump ID und Gump serial.

Parameter

Es gibt keine Parameter.

Rückgabewert

void – kein Rückgabewert.

Verhalten

  • Schließt die Fenster nicht. Nach dem Löschen kann GetGumpInfo erneut einen Schnappschuss des zuvor ignorierten Gumps zurückgeben.

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

1. Status löschen – direktes Skript

Parameter und Ablauf:

  • Löscht beide Sätze der ignorierten Laufzeit von Gump ID und Gump serial.
UO.ClearGumpsIgnore();

2. Nach dem Setup löschen – Skriptfunktion

Parameter und Ablauf:

  • Entfernen Sie die hinzugefügte Ignorierregel.
return  RunScenario();
 object? RunScenario()
{
    UO.AddGumpIgnoreByID(0x1234);
    UO.ClearGumpsIgnore();
    return null;
}

3. Re-Purge – Skriptklasse

Parameter und Ablauf:

  • Das Löschen eines leeren Satzes ist akzeptabel und erstellt keine neue Einstellung.
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.ClearGumpsIgnore();
        UO.ClearGumpsIgnore();
        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.ClearGumpsIgnore() — UO.ClearGumpsIgnore()

Parameter: Keine Parameter.

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "cleargumpsignore":

                    state.IgnoredGumpIds.Clear(); state.IgnoredGumpSerials.Clear(); return InjectionValue.Unit;

UO.CloseClientGump

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

C#-Signaturen

void UO.CloseClientGump(object? id);

Entfernt lokale Server-Gumps, deren ServerSerial mit dem übergebenen ID übereinstimmt.

Parameter

  • id - int/numerisch ID Gump im Vergleich zu ServerSerial. Dies ist weder ein Listenindex noch ein lokaler serial.

Rückgabewert

void – kein Rückgabewert.

Verhalten

  • Durchläuft ServerGumpsUnsafe, erstellt einen Snapshot aller Übereinstimmungen und ruft Dispose auf. Sendet die Schaltfläche 0 oder das Formularergebnis nicht an den Server. Wenn es keine Übereinstimmungen gibt, ändert sich 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.

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

UO.Print("Calling UO.CloseClientGump");
UO.CloseClientGump(UO.GetGumpID(0));

1. Schließen Sie den ersten Schritt mit ID – direktes Skript

Parameter und Ablauf:

  • GetGumpID stellt Server ID bereit; CloseClientGump entfernt übereinstimmende lokale Fenster.
if (Truth(UO.GetGumpsCount() > 0))
{
    var id = UO.GetGumpID(0);
    UO.CloseClientGump(id);
}

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

2. ID aus Variable – Skriptfunktion

Parameter und Ablauf:

  • Geben Sie ID des gewünschten Server-Gumps an; Es sind keine Übereinstimmungen akzeptabel.
return  RunScenario();
 object? RunScenario()
{
    var id = 0x12345678;
    UO.CloseClientGump(id);
    return null;
}

3. Reclose – Skriptklasse

Parameter und Ablauf:

  • Nach dem ersten Dispose findet der zweite Close das Fenster meist nicht mehr.
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.GetGumpID(0);
        if (Truth(id != 0))
        {
            UO.CloseClientGump(id);
            UO.CloseClientGump(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.CloseClientGump(id) — UO.CloseClientGump(Any)

Parameter: id (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "closeclientgump": bridge.CloseClientGump(Arg(0)); return InjectionValue.Unit;

UO.GetGump

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

C#-Signaturen

dynamic UO.GetGump(object? identifier);
dynamic UO.GetGump(object? gumpId, object? identifier);
dynamic UO.GetGump(object? gumpId, object? identifier, object? key);

Liest ein Feld des ausgewählten Server-Gumps. Ermöglicht Ihnen, die Fensterauswahl explizit festzulegen.

Parameter

  • gumpId – Optionales erstes int in den Formen (gumpId,Bezeichner) und (gumpId,Bezeichner,Schlüssel). int oder numerische Zeichenfolge: Sucht zuerst nach einer genauen GumpID/serial-Übereinstimmung, dann nach dem Index mit 0. -1 ist der von diesem Skript ausgewählte Gump, und wenn er nicht vorhanden ist, der letzte in der aktuellen Liste. Andere negative int behalten 32-Bit ID. Dies ist ein Selektor, im Gegensatz zum strikten GumpIndex in NumGump*.
  • identifier - string Groß- und Kleinschreibung wird nicht beachtet. Alle unterstützten Werte und Ergebnistypen werden im Abschnitt „Rückgaben“ aufgeführt. Unbekannter Name gibt eine leere Zeichenfolge zurück.
  • key – Optional int, Standard – 1. Index mit 0 für Schaltfläche/Text/object/Befehl; Dies ist keine ID-Steuerung. Ein negativer Index und außerhalb der Grenzen führen zu 0 für Schaltflächen oder einer leeren Zeichenfolge für Textfelder. Andere Bezeichner verwenden keinen Schlüssel.

Rückgabewert

Die Art des Ergebnisses hängt vom Identifikator ab. int: buttonlen – Anzahl der regulären Tasten; button – ButtonID nach Indexschlüssel; textlen – Anzahl der verfügbaren Textelemente; injid – aktueller Fensterindex; antwortete – 0 (Antwortverlauf wird nicht gespeichert); inclient – ​​1 für ein gefundenes Live-Fenster, 0 falls nicht vorhanden; objectcount – Anzahl der Live-Steuerelemente, einschließlich verschachtelter. string: serial und Gumpid – Hex-Strings 0xXXXXXXXX; text – Elementtext am Indexschlüssel; object – Name des Steuerungstyps; Befehl – ​​Beschreibung des Steuerelements (Typ, Seite, ID, Koordinaten, Abmessungen und unterstützte Felder). Wenn kein Fenster vorhanden ist, ergeben numerische Bezeichner 0, Zeichenfolgenbezeichner eine leere Zeichenfolge. injid=0 ist ebenfalls ein gültiger erster Index: 0 allein beweist nicht das Fehlen eines Fensters. Dies ist kein Array oder Pascal TGumpInfo.

Verhalten

  • Funktioniert mit aktiven Server-Gumps. Rucksack, Karte, Einstellungen und andere lokale Fenster sind in dieser Liste nicht enthalten. Ein Aufruf liest Daten im Spielthread; Verschiedene Anrufe können unterschiedliche Zustände der Liste sehen.
  • SelectGump/InfoGump gibt das ausgewählte Fenster nur in der aktuellen Laufzeit an. Wenn das ausgewählte Fenster geschlossen ist, wird das letzte Element in der aktuellen Liste verwendet, das nicht unbedingt das aktuellste Element ist.
  • textlen/text beziehen sich auf die verfügbaren Textsteuerelemente, nicht auf den ursprünglichen String-Pool des Serverpakets. object/Befehl bezieht sich auf den gesamten Baum der Live-Steuerelemente. Indizes aus verschiedenen Listen können nicht gemischt werden.
  • Jeder Aufruf liest den aktuellen Zustand separat aus. Für übereinstimmende serial, GumpID und Listen verwenden Sie GetGumpInfo.

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

1. ID des ausgewählten Fensters lesen – Direktskript

Parameter und Ablauf:

  • gumpid und serial geben Strings zurück, die bereits hexadezimal formatiert sind; kein zusätzliches Hex erforderlich. Leere Zeilen bedeuten, dass beim Lesen kein Fenster vorhanden ist.
var id = UO.GetGump("gumpid");
var serial = UO.GetGump("serial");
UO.Print(id + " / " + serial);

2. ButtonID aufzählen – Skriptfunktion

Parameter und Ablauf:

  • buttonlen – Anzahl der Knöpfe; i ist der Index der Zeile von 0 bis count-1. Schaltfläche – ID für Antwort, nicht für Grafiken oder Index. Wenn Sie das Fenster wechseln, lesen Sie die Liste erneut.
return  RunScenario();
 object? RunScenario()
{
    var count = UO.GetGump("buttonlen");
    var i = 0;
    while (Truth(i < count))
    {
        var button = UO.GetGump("button", i);
        UO.Print(Convert.ToString(button));
        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. Text nach der Auswahl lesen – Skriptklasse

Parameter und Ablauf:

  • 0x12345678 ist ein Beispiel für GumpID/serial, ersetzen Sie ID durch die gewünschte Form. text mit key=0 liest das erste verfügbare Textsteuerelement; Dies ist eine andere Liste als die Schaltfläche.
  • SelectGump meldet das Fehlen des angegebenen Fensters, blockiert jedoch nicht das nachfolgende Lesen: Überprüfen Sie das zurückgegebene Gumpid bei Bedarf separat.
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.SelectGump(0x12345678);
        if (Truth(UO.GetGump("inclient")))
        {
            var count = UO.GetGump("textlen");
            if (Truth(count > 0))
            {
                UO.Print(UO.GetGump("text", 0));
            }
        }

        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.GetGump(identifier) — UO.GetGump(String)

Parameter: identifier (String)

Ergebnis: dynamic / Any.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public InjectionValue GetGump(string identifier) => LastGump(identifier, -1);

UO.GetGump(gumpId, identifier) — UO.GetGump(Integer,String)

Parameter: gumpId (Integer/String), identifier (String/Integer)

Ergebnis: dynamic / Any.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public InjectionValue GetGump(int gumpId, string identifier) => GetGump(gumpId, identifier, -1);

UO.GetGump(gumpId, identifier) — UO.GetGump(String,Integer)

Parameter: gumpId (Integer/String), identifier (String/Integer)

Ergebnis: dynamic / Any.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public InjectionValue GetGump(string identifier, int key) => LastGump(identifier, key);

UO.GetGump(gumpId, identifier, key) — UO.GetGump(Integer,String,Integer)

Parameter: gumpId (Integer), identifier (String), key (Integer)

Ergebnis: dynamic / Any.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public InjectionValue GetGump(int gumpId, string identifier, int key)

            => ConvertGumpValue(identifier, bridge.GetGumpValue(gumpId, identifier, key));

UO.GetGumpButtonsDescription

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

C#-Signaturen

dynamic UO.GetGumpButtonsDescription(object? gumpIndex);

Gibt Beschreibungen der regulären Server-Gump-Schaltflächen zurück.

Parameter

  • gumpIndex – Obligatorisch int – Index des aktiven Server-Gumps, von 0 bis GetGumpsCount()-1. Dies ist nicht GumpID/serial. Negative Zahlen und Indizes außerhalb der Liste sind ungültig. Das Öffnen, Schließen und Neuanordnen von Fenstern kann den Index ändern; Überprüfen Sie GetGumpID/GetGumpSerial, bevor Sie handeln.

Rückgabewert

Array – Beschreibungen der regulären Schaltflächen. [] – ungültiger Index oder keine passenden Elemente. Der Zeilenindex beginnt mit 0; es handelt sich nicht um eine ID-Steuerung.

Verhalten

  • Funktioniert mit aktiven Server-Gumps. Rucksack, Karte, Einstellungen und andere lokale Fenster sind in dieser Liste nicht enthalten. Ein Aufruf liest Daten im Spielthread; Verschiedene Anrufe können unterschiedliche Zustände der Liste sehen.
  • Jede Zeile enthält ButtonID, Aktion, toPage und Grafiken. Optionsfelder sind keine normalen Antwortschaltflächen.
  • Bei SilentMode=0 wird das nicht leere Ergebnis auch zum Textfenster hinzugefügt und dieses geöffnet. SetSilentMode(1) lässt nur die Rückgabe des Arrays zu.

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

1. Lesen Sie die erste Zeile – direktes Skript

Parameter und Ablauf:

  • 0 – Fensterindex. ArrayLength prüft, ob eine Leitung vorhanden ist, bevor Leitungen aufgerufen werden[0].
var lines = UO.GetGumpButtonsDescription(0);
if (Truth(ArrayLength(lines) > 0))
{
    UO.Print(lines[0]);
}

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

2. Durchlaufen aller Zeilen ohne automatische Fensterfunktion – Skriptfunktion

Parameter und Ablauf:

  • SetSilentMode(1) deaktiviert das zusätzliche Textfenster. Der explizite Print im Beispiel gibt weiterhin Zeichenfolgen aus.
  • i ist der Array-Index; Entnehmen Sie ID des gewünschten Tasters/Schalters der entsprechenden Beschreibung.
return  RunScenario();
 object? RunScenario()
{
    UO.SetSilentMode(1);
    var lines = UO.GetGumpButtonsDescription(0);
    var i = 0;
    while (Truth(i < ArrayLength(lines)))
    {
        UO.Print(lines[i]);
        i = i + 1;
    }

    return null;
}

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

3. Daten des letzten geöffneten Serverfensters lesen – Skriptklasse

Parameter und Ablauf:

  • Der Zählerstand wird in den Index des letzten Fensters umgerechnet. Die Daten werden vom geladenen Server-Gump gelesen; Lokale Fenster sind hier nicht enthalten.
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()
    {
        int count = UO.GetGumpsCount();
        if (count == 0)
            return null;
        int index = count - 1;
        var lines = UO.GetGumpButtonsDescription(index);
        foreach (object? line in (object? [])lines)
            UO.Print(Convert.ToString(line) ?? "");
        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.GetGumpButtonsDescription(gumpIndex) — UO.GetGumpButtonsDescription(Any)

Parameter: gumpIndex (Any)

Ergebnis: dynamic / Array.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "getgumpbuttonsdescription": return GumpLinesResult(bridge.GetGumpButtonsDescription(Arg(0)));

UO.GetGumpCount

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

C#-Signaturen

int UO.GetGumpCount();

Kurzfassung GetGumpsCount: Anzahl der aktiven Server-Gumps.

Parameter

Es gibt keine Parameter.

Rückgabewert

int >= 0 — Anzahl der Fenster, nicht der Index des letzten Fensters. 0 – die Liste ist leer.

Verhalten

  • Funktioniert mit aktiven Server-Gumps. Rucksack, Karte, Einstellungen und andere lokale Fenster sind in dieser Liste nicht enthalten. Ein Aufruf liest Daten im Spielthread; Verschiedene Anrufe können unterschiedliche Zustände der Liste sehen.

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

1. Suchen Sie nach Serverfenstern – direktes Skript

Parameter und Ablauf:

  • Dies ist die Anzahl der Server-Gumps, nicht der Fensterindex; Lokaler Rucksack und Karte sind hier nicht enthalten.
int count = UO.GetGumpCount();
UO.Print($"Active server gumps: {count}");

2. Offene Fenster-IDs lesen – Skriptfunktion

Parameter und Ablauf:

  • Indizes beginnen bei Null. Die Liste kann sich zwischen Anrufen ändern, daher wird vor dem Lesen die aktuelle Menge überprüft.
return  RunScenario();
 object? RunScenario()
{
    int count = UO.GetGumpCount();
    for (int index = 0; index < count; index++)
    {
        if (index >= UO.GetGumpCount())
            break;
        UO.Print($"Gump {index}: ID={UO.GetGumpID(index)}, serial={UO.GetGumpSerial(index)}");
    }

    return null;
}

3. Warten Sie auf das Zeitfenster – Skriptklasse

Parameter und Ablauf:

  • Die Wartezeit ist durch ein Timeout begrenzt. Das bloße Vorhandensein eines Fensters beweist nicht, dass es sich hierbei um einen notwendigen Fehler handelt; Zur Auswahl markieren Sie es ID.
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()
    {
        bool appeared = await WaitForGump(3000);
        UO.Print(appeared ? "A server gump appeared" : "No server gump within the timeout");
        return null;
    }

    async Task<bool> WaitForGump(int timeoutMs)
    {
        var timer = System.Diagnostics.Stopwatch.StartNew();
        while (timer.ElapsedMilliseconds < timeoutMs)
        {
            if (UO.GetGumpCount() > 0)
                return true;
            await WaitAsync(50);
        }

        return false;
    }
}

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

Parameter: Keine Parameter.

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public int GetGumpCount() => bridge.GetGumpCount();

UO.GetGumpFullLines

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

C#-Signaturen

dynamic UO.GetGumpFullLines(object? gumpIndex);

Gibt Beschreibungen aller lebenden Elemente zurück, einschließlich verschachtelter Server-Gumps.

Parameter

  • gumpIndex – Obligatorisch int – Index des aktiven Server-Gumps, von 0 bis GetGumpsCount()-1. Dies ist nicht GumpID/serial. Negative Zahlen und Indizes außerhalb der Liste sind ungültig. Das Öffnen, Schließen und Neuanordnen von Fenstern kann den Index ändern; Überprüfen Sie GetGumpID/GetGumpSerial, bevor Sie handeln.

Rückgabewert

Array – Beschreibungen aller lebenden Elemente, einschließlich verschachtelter. [] – ungültiger Index oder keine passenden Elemente. Der Zeilenindex beginnt mit 0; es handelt sich nicht um eine ID-Steuerung.

Verhalten

  • Funktioniert mit aktiven Server-Gumps. Rucksack, Karte, Einstellungen und andere lokale Fenster sind in dieser Liste nicht enthalten. Ein Aufruf liest Daten im Spielthread; Verschiedene Anrufe können unterschiedliche Zustände der Liste sehen.
  • Beschreibungen des aktuellen Kontrollbaums: Typ, Seite, ID, X/Y, Größen und unterstützte Felder. Dies ist kein rohes Server-Markup-Paket.
  • Bei SilentMode=0 wird das nicht leere Ergebnis auch zum Textfenster hinzugefügt und dieses geöffnet. SetSilentMode(1) lässt nur die Rückgabe des Arrays zu.

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

1. Lesen Sie die erste Zeile – direktes Skript

Parameter und Ablauf:

  • 0 – Fensterindex. ArrayLength prüft, ob eine Leitung vorhanden ist, bevor Leitungen aufgerufen werden[0].
var lines = UO.GetGumpFullLines(0);
if (Truth(ArrayLength(lines) > 0))
{
    UO.Print(lines[0]);
}

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

2. Durchlaufen aller Zeilen ohne automatische Fensterfunktion – Skriptfunktion

Parameter und Ablauf:

  • SetSilentMode(1) deaktiviert das zusätzliche Textfenster. Der explizite Print im Beispiel gibt weiterhin Zeichenfolgen aus.
  • i ist der Array-Index; Entnehmen Sie ID des gewünschten Tasters/Schalters der entsprechenden Beschreibung.
return  RunScenario();
 object? RunScenario()
{
    UO.SetSilentMode(1);
    var lines = UO.GetGumpFullLines(0);
    var i = 0;
    while (Truth(i < ArrayLength(lines)))
    {
        UO.Print(lines[i]);
        i = i + 1;
    }

    return null;
}

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

3. Daten des letzten geöffneten Serverfensters lesen – Skriptklasse

Parameter und Ablauf:

  • Der Zählerstand wird in den Index des letzten Fensters umgerechnet. Die Daten werden vom geladenen Server-Gump gelesen; Lokale Fenster sind hier nicht enthalten.
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()
    {
        int count = UO.GetGumpsCount();
        if (count == 0)
            return null;
        int index = count - 1;
        var lines = UO.GetGumpFullLines(index);
        foreach (object? line in (object? [])lines)
            UO.Print(Convert.ToString(line) ?? "");
        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.GetGumpFullLines(gumpIndex) — UO.GetGumpFullLines(Any)

Parameter: gumpIndex (Any)

Ergebnis: dynamic / Array.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "getgumpfulllines": return GumpLinesResult(bridge.GetGumpFullLines(Arg(0)));

UO.GetGumpID

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

C#-Signaturen

int UO.GetGumpID(object? gumpIndex);

Liest die GumpID-Fenstertyp-ID aus dem Gump-Index des Servers.

Parameter

  • gumpIndex – Obligatorisch int – Index des aktiven Server-Gumps, von 0 bis GetGumpsCount()-1. Dies ist nicht GumpID/serial. Negative Zahlen und Indizes außerhalb der Liste sind ungültig. Das Öffnen, Schließen und Neuanordnen von Fenstern kann den Index ändern; Überprüfen Sie GetGumpID/GetGumpSerial, bevor Sie handeln.

Rückgabewert

int – 32-Bit-Fenstertyp-ID GumpID. 0 ist ein ungültiger Index (serial=0 kann auch im Fenster selbst vorhanden sein). Wenn das höchstwertige Bit gesetzt ist, ist int negativ: Verwenden Sie Hex(Wert) zur Anzeige. Dies ist kein type eines Themas oder ein Index.

Verhalten

  • Funktioniert mit aktiven Server-Gumps. Rucksack, Karte, Einstellungen und andere lokale Fenster sind in dieser Liste nicht enthalten. Ein Aufruf liest Daten im Spielthread; Verschiedene Anrufe können unterschiedliche Zustände der Liste sehen.
  • Verwenden Sie für ein übereinstimmendes serial/GumpID-Paar ein GetGumpInfo: die Felder info[0] und info[1].

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

1. ID im Hexadezimalformat anzeigen – direktes Skript

Parameter und Ablauf:

  • 0 ist der erste Index der Serverliste. Hex speichert die Bitdarstellung des negativen int.
var value = UO.GetGumpID(0);
UO.Print(Hex(value));

string Hex(object? value) => Convert.ToInt64(value).ToString("X");

2. Checklistengrenze – Skriptfunktion

Parameter und Ablauf:

  • Bei einer unveränderlichen Liste liegt die Anzahl nach dem letzten Index, also fehlt=0. Der letzte gültige Index ist count-1.
return  RunScenario();
 object? RunScenario()
{
    var count = UO.GetGumpsCount();
    var missing = UO.GetGumpID(count);
    UO.Print(Hex(missing));
    return null;
}

string Hex(object? value) => Convert.ToInt64(value).ToString("X");

3. Offenes Fenster nach bekannter ID-Skriptklasse finden

Parameter und Ablauf:

  • 0x999 ist ein Beispiel für ID; Ersetzen Sie es durch das echte ID des gewünschten Fensters. Index, ID und serial Besitzer sind unterschiedliche Werte.
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()
    {
        int wantedId = 0x00000999;
        int count = UO.GetGumpsCount();
        for (int index = 0; index < count; index++)
        {
            if (index >= UO.GetGumpsCount())
                break;
            if (UO.GetGumpID(index) == wantedId)
            {
                UO.Print($"Gump index {index}, serial {UO.GetGumpSerial(index)}");
                return index;
            }
        }

        return -1;
        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.GetGumpID(gumpIndex) — UO.GetGumpID(Any)

Parameter: gumpIndex (Any)

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "getgumpid": return new InjectionValue(bridge.GetGumpId(Arg(0)));

UO.GetGumpInfo

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

C#-Signaturen

dynamic UO.GetGumpInfo(object? gumpIndex);

Gibt eine konsistente Momentaufnahme der Bezeichner und Elemente eines einzelnen Server-Gumps zurück.

Parameter

  • gumpIndex – Obligatorisch int – Index des aktiven Server-Gumps, von 0 bis GetGumpsCount()-1. Dies ist nicht GumpID/serial. Negative Zahlen und Indizes außerhalb der Liste sind ungültig. Das Öffnen, Schließen und Neuanordnen von Fenstern kann den Index ändern; Überprüfen Sie GetGumpID/GetGumpSerial, bevor Sie handeln.

Rückgabewert

Array – genau fünf Elemente: [0] int serial; [1] int GumpID; [2] Array nicht leerer Texte; [3] Array Beschreibungen regulärer Schaltflächen; [4] Array mit Beschreibungen aller lebenden Elemente, einschließlich verschachtelter Elemente. Ein ungültiger/geschlossener oder von diesem Skript ignorierter Gump erzeugt ein leeres Array []. ID mit dem höchstwertigen Bit wird durch einen negativen int dargestellt. Ein leeres Textarray an sich bedeutet nicht, dass kein Fenster vorhanden ist.

Verhalten

  • Funktioniert mit aktiven Server-Gumps. Rucksack, Karte, Einstellungen und andere lokale Fenster sind in dieser Liste nicht enthalten. Ein Aufruf liest Daten im Spielthread; Verschiedene Anrufe können unterschiedliche Zustände der Liste sehen.
  • Der gesamte Snapshot wird in einer Game-Thread-Anfrage kopiert. Durch Ändern/Schließen des Fensters nach der Rückkehr wird das gespeicherte Array nicht geändert.
  • Die Beschreibung des Steuerelements gibt den Typ, die Seite, ID, X/Y und die Abmessungen an. Schaltflächen enthalten zusätzlich ButtonID, Aktion, toPage und graphic; Schalter - ID, geprüft, inaktiv/aktiv. Texte dürfen Leerzeichen und = enthalten; Die Zeichenfolge kann nicht bedingungslos durch Leerzeichen analysiert werden.
  • AddGumpIgnoreByID/AddGumpIgnoreBySerial verbirgt nur das Ergebnis dieser Lesung im aktuellen Skript; ClearGumpsIgnore entfernt diese Filter. GetGumpsCount verringert sich nicht.

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

1. Lesen Sie beide ID – direktes Skript

Parameter und Ablauf:

  • GumpIndex=0 – der erste Server-Gump. Die Längenprüfung schützt den Zugriff auf fehlende Fensterfelder.
  • info[0] – serial, info[1] – GumpID; beide gehören zur selben Aufnahme.
var info = UO.GetGumpInfo(0);
if (Truth(ArrayLength(info) == 5))
{
    UO.Print("Serial=" + Hex(info[0]));
    UO.Print("GumpID=" + Hex(info[1]));
}

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

2. Echte ButtonIDs auflisten – Skriptfunktion

Parameter und Ablauf:

  • info[3] – Array von Schaltflächenbeschreibungen; Das ButtonID-Feld in der Zeile gibt ID für die Antwort an. i ist nur der Zeilenindex, nicht die ButtonID.
  • Optionsfelder sind Optionsfelder und erscheinen in der Info[4], nicht in der Liste der regulären Schaltflächen.
return  RunScenario();
 object? RunScenario()
{
    var info = UO.GetGumpInfo(0);
    if (Truth(ArrayLength(info) == 5))
    {
        var buttons = info[3];
        var i = 0;
        while (Truth(i < ArrayLength(buttons)))
        {
            UO.Print(buttons[i]);
            i = i + 1;
        }
    }

    return null;
}

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

3. Text bis zum Schließen speichern – Skriptklasse

Parameter und Ablauf:

  • info[2] – Kopie der Texte. Das Schließen ist nur für das nicht gesperrte Fenster NoClose zulässig.
  • Beim Schließen werden gespeicherte Texte nicht gelöscht; Für ein bestehendes Fenster ist auch ein leeres Textarray akzeptabel.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var info = UO.GetGumpInfo(0);
        if (Truth(ArrayLength(info) == 5))
        {
            var texts = info[2];
            UO.CloseSimpleGump(0);
            if (Truth(ArrayLength(texts) > 0))
            {
                UO.Print(texts[0]);
            }
        }

        return null;
    }

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

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.GetGumpInfo(gumpIndex) — UO.GetGumpInfo(Any)

Parameter: gumpIndex (Any)

Ergebnis: dynamic / Array.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "getgumpinfo":

                {

                    int index = Arg(0);

                    GumpSnapshot snapshot;

                    if (bridge is IApiGumpAccess reader)

                        snapshot = reader.ReadGump(index);

                    else

                    {

                        int id = bridge.GetGumpId(index);

                        snapshot = id == 0 ? null : new GumpSnapshot(bridge.GetGumpSerial(index), id,

                            bridge.GetGumpTextLines(index), bridge.GetGumpButtonsDescription(index), bridge.GetGumpFullLines(index));

                    }

                    if (snapshot == null || state.IgnoredGumpIds.Contains(snapshot.Id)

                        || state.IgnoredGumpSerials.Contains(snapshot.Serial))

                        return new InjectionValue(Array.Empty<InjectionValue>());

                    return new InjectionValue(new[]

                    {

                        new InjectionValue(snapshot.Serial), new InjectionValue(snapshot.Id), StringArray(snapshot.Text),

                        StringArray(snapshot.Buttons), StringArray(snapshot.Controls)

                    });

                }

UO.GetGumpSerial

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

C#-Signaturen

int UO.GetGumpSerial(object? gumpIndex);

Liest serial Instanz-/Fensterbesitzer nach Server-Gump-Index.

Parameter

  • gumpIndex – Obligatorisch int – Index des aktiven Server-Gumps, von 0 bis GetGumpsCount()-1. Dies ist nicht GumpID/serial. Negative Zahlen und Indizes außerhalb der Liste sind ungültig. Das Öffnen, Schließen und Neuanordnen von Fenstern kann den Index ändern; Überprüfen Sie GetGumpID/GetGumpSerial, bevor Sie handeln.

Rückgabewert

int ist das 32-Bit serial der Fensterinstanz/des Fensterbesitzers. 0 ist ein ungültiger Index (serial=0 kann auch im Fenster selbst vorhanden sein). Wenn das höchstwertige Bit gesetzt ist, ist int negativ: Verwenden Sie Hex(Wert) zur Anzeige. Dies ist nicht das type des Themas und kein Index.

Verhalten

  • Funktioniert mit aktiven Server-Gumps. Rucksack, Karte, Einstellungen und andere lokale Fenster sind in dieser Liste nicht enthalten. Ein Aufruf liest Daten im Spielthread; Verschiedene Anrufe können unterschiedliche Zustände der Liste sehen.
  • Verwenden Sie für ein übereinstimmendes serial/GumpID-Paar ein GetGumpInfo: die Felder info[0] und info[1].

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

1. ID im Hexadezimalformat anzeigen – direktes Skript

Parameter und Ablauf:

  • 0 ist der erste Index der Serverliste. Hex speichert die Bitdarstellung des negativen int.
var value = UO.GetGumpSerial(0);
UO.Print(Hex(value));

string Hex(object? value) => Convert.ToInt64(value).ToString("X");

2. Checklistengrenze – Skriptfunktion

Parameter und Ablauf:

  • Bei einer unveränderlichen Liste liegt die Anzahl nach dem letzten Index, also fehlt=0. Der letzte gültige Index ist count-1.
return  RunScenario();
 object? RunScenario()
{
    var count = UO.GetGumpsCount();
    var missing = UO.GetGumpSerial(count);
    UO.Print(Hex(missing));
    return null;
}

string Hex(object? value) => Convert.ToInt64(value).ToString("X");

3. Besitzer aller geladenen Serverfenster anzeigen – Skriptklasse

Parameter und Ablauf:

  • Serial ist Eigentum des Serverfensters oder seines Eigentümers gemäß dem Befehlsvertrag. Es kann nicht anstelle des Gump-Index verwendet werden.
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()
    {
        int count = UO.GetGumpsCount();
        for (int index = 0; index < count; index++)
        {
            if (index >= UO.GetGumpsCount())
                break;
            int serial = UO.GetGumpSerial(index);
            UO.Print($"Window {index}: serial={UO.Int2Hex(serial)}, ID={UO.GetGumpID(index)}");
        }

        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.GetGumpSerial(gumpIndex) — UO.GetGumpSerial(Any)

Parameter: gumpIndex (Any)

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "getgumpserial": return new InjectionValue(bridge.GetGumpSerial(Arg(0)));

UO.GetGumpShortLines

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

C#-Signaturen

dynamic UO.GetGumpShortLines(object? gumpIndex);

Gibt Beschreibungen von Textelementen und Schaltflächen des Server-Gumps zurück.

Parameter

  • gumpIndex – Obligatorisch int – Index des aktiven Server-Gumps, von 0 bis GetGumpsCount()-1. Dies ist nicht GumpID/serial. Negative Zahlen und Indizes außerhalb der Liste sind ungültig. Das Öffnen, Schließen und Neuanordnen von Fenstern kann den Index ändern; Überprüfen Sie GetGumpID/GetGumpSerial, bevor Sie handeln.

Rückgabewert

Array – Beschreibungen von Textelementen und Schaltflächen. [] – ungültiger Index oder keine passenden Elemente. Der Zeilenindex beginnt mit 0; es handelt sich nicht um eine ID-Steuerung.

Verhalten

  • Funktioniert mit aktiven Server-Gumps. Rucksack, Karte, Einstellungen und andere lokale Fenster sind in dieser Liste nicht enthalten. Ein Aufruf liest Daten im Spielthread; Verschiedene Anrufe können unterschiedliche Zustände der Liste sehen.
  • Die kurze Liste schließt Dekorationen ohne Text und ohne den Button-Typ aus; Enthält Optionsfelder.
  • Bei SilentMode=0 wird das nicht leere Ergebnis auch zum Textfenster hinzugefügt und dieses geöffnet. SetSilentMode(1) lässt nur die Rückgabe des Arrays zu.

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

1. Lesen Sie die erste Zeile – direktes Skript

Parameter und Ablauf:

  • 0 – Fensterindex. ArrayLength prüft, ob eine Leitung vorhanden ist, bevor Leitungen aufgerufen werden[0].
var lines = UO.GetGumpShortLines(0);
if (Truth(ArrayLength(lines) > 0))
{
    UO.Print(lines[0]);
}

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

2. Durchlaufen aller Zeilen ohne automatische Fensterfunktion – Skriptfunktion

Parameter und Ablauf:

  • SetSilentMode(1) deaktiviert das zusätzliche Textfenster. Der explizite Print im Beispiel gibt weiterhin Zeichenfolgen aus.
  • i ist der Array-Index; Entnehmen Sie ID des gewünschten Tasters/Schalters der entsprechenden Beschreibung.
return  RunScenario();
 object? RunScenario()
{
    UO.SetSilentMode(1);
    var lines = UO.GetGumpShortLines(0);
    var i = 0;
    while (Truth(i < ArrayLength(lines)))
    {
        UO.Print(lines[i]);
        i = i + 1;
    }

    return null;
}

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

3. Daten des letzten geöffneten Serverfensters lesen – Skriptklasse

Parameter und Ablauf:

  • Der Zählerstand wird in den Index des letzten Fensters umgerechnet. Die Daten werden vom geladenen Server-Gump gelesen; Lokale Fenster sind hier nicht enthalten.
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()
    {
        int count = UO.GetGumpsCount();
        if (count == 0)
            return null;
        int index = count - 1;
        var lines = UO.GetGumpShortLines(index);
        foreach (object? line in (object? [])lines)
            UO.Print(Convert.ToString(line) ?? "");
        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.GetGumpShortLines(gumpIndex) — UO.GetGumpShortLines(Any)

Parameter: gumpIndex (Any)

Ergebnis: dynamic / Array.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "getgumpshortlines": return GumpLinesResult(bridge.GetGumpShortLines(Arg(0)));

UO.GetGumpTextLines

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

C#-Signaturen

dynamic UO.GetGumpTextLines(object? gumpIndex);

Gibt nicht leere Texte von Beschriftungen, HTML, Eingabefeldern und Beschriftungen von Server-Gump-Schaltern zurück.

Parameter

  • gumpIndex – Obligatorisch int – Index des aktiven Server-Gumps, von 0 bis GetGumpsCount()-1. Dies ist nicht GumpID/serial. Negative Zahlen und Indizes außerhalb der Liste sind ungültig. Das Öffnen, Schließen und Neuanordnen von Fenstern kann den Index ändern; Überprüfen Sie GetGumpID/GetGumpSerial, bevor Sie handeln.

Rückgabewert

Array – nicht leere Texte von Beschriftungen, HTML, Eingabefeldern und Schalterbeschriftungen. [] – ungültiger Index oder keine passenden Elemente. Der Zeilenindex beginnt mit 0; es handelt sich nicht um eine ID-Steuerung.

Verhalten

  • Funktioniert mit aktiven Server-Gumps. Rucksack, Karte, Einstellungen und andere lokale Fenster sind in dieser Liste nicht enthalten. Ein Aufruf liest Daten im Spielthread; Verschiedene Anrufe können unterschiedliche Zustände der Liste sehen.
  • Nur Text; ButtonID, Abmessungen und Struktur sind nicht enthalten. Druckt nichts extra.
  • GetGumpTextLines öffnet kein Textfenster.

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

1. Lesen Sie die erste Zeile – direktes Skript

Parameter und Ablauf:

  • 0 – Fensterindex. ArrayLength prüft, ob eine Leitung vorhanden ist, bevor Leitungen aufgerufen werden[0].
var lines = UO.GetGumpTextLines(0);
if (Truth(ArrayLength(lines) > 0))
{
    UO.Print(lines[0]);
}

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

2. Durchlaufen aller Zeilen ohne automatische Fensterfunktion – Skriptfunktion

Parameter und Ablauf:

  • SetSilentMode(1) deaktiviert das zusätzliche Textfenster. Der explizite Print im Beispiel gibt weiterhin Zeichenfolgen aus.
  • i ist der Array-Index; Entnehmen Sie ID des gewünschten Tasters/Schalters der entsprechenden Beschreibung.
return  RunScenario();
 object? RunScenario()
{
    UO.SetSilentMode(1);
    var lines = UO.GetGumpTextLines(0);
    var i = 0;
    while (Truth(i < ArrayLength(lines)))
    {
        UO.Print(lines[i]);
        i = i + 1;
    }

    return null;
}

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

3. Daten des letzten geöffneten Serverfensters lesen – Skriptklasse

Parameter und Ablauf:

  • Der Zählerstand wird in den Index des letzten Fensters umgerechnet. Die Daten werden vom geladenen Server-Gump gelesen; Lokale Fenster sind hier nicht enthalten.
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()
    {
        int count = UO.GetGumpsCount();
        if (count == 0)
            return null;
        int index = count - 1;
        var lines = UO.GetGumpTextLines(index);
        foreach (object? line in (object? [])lines)
            UO.Print(Convert.ToString(line) ?? "");
        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.GetGumpTextLines(gumpIndex) — UO.GetGumpTextLines(Any)

Parameter: gumpIndex (Any)

Ergebnis: dynamic / Array.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "getgumptextlines": return StringArray(bridge.GetGumpTextLines(Arg(0)));

UO.GetGumpsCount

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

C#-Signaturen

int UO.GetGumpsCount();

Gibt die Anzahl der aktiven Server-Gumps zurück.

Parameter

Es gibt keine Parameter.

Rückgabewert

int >= 0 — Anzahl der Fenster, nicht der Index des letzten Fensters. 0 – die Liste ist leer.

Verhalten

  • Funktioniert mit aktiven Server-Gumps. Rucksack, Karte, Einstellungen und andere lokale Fenster sind in dieser Liste nicht enthalten. Ein Aufruf liest Daten im Spielthread; Verschiedene Anrufe können unterschiedliche Zustände der Liste sehen.

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

1. Suchen Sie nach Windows-Direktskripten

Parameter und Ablauf:

  • Es gibt keine Argumente. count=0 bedeutet, dass in der aktuellen Liste keine Serverfenster vorhanden sind.
var count = UO.GetGumpsCount();
if (Truth(count == 0))
{
    UO.Print("No server gumps");
}

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

2. Liste ID – Skriptfunktion

Parameter und Ablauf:

  • i ist der Index mit 0. Das resultierende ID identifiziert Fenstertypen und nicht Positionen in der Liste.
  • Wenn sich die Fenster während des Spaziergangs ändern, muss die Liste erneut gelesen werden. count blockiert die Schnittstelle nicht.
return  RunScenario();
 object? RunScenario()
{
    var count = UO.GetGumpsCount();
    var i = 0;
    while (Truth(i < count))
    {
        UO.Print(Hex(UO.GetGumpID(i)));
        i = i + 1;
    }

    return null;
}

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

3. Letztes Element der Liste lesen – Skriptklasse

Parameter und Ablauf:

  • count-1 ist der letzte Index der aktuellen Liste, keine Garantie für das neueste Fenster. info ist leer, wenn das Fenster vor dem Lesen verschwunden ist.
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 count = UO.GetGumpsCount();
        if (Truth(count > 0))
        {
            var info = UO.GetGumpInfo(count - 1);
            UO.Print(ArrayLength(info));
        }

        return null;
    }

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

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

Parameter: Keine Parameter.

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "getgumpscount": return new InjectionValue(bridge.GetGumpCount());

UO.GumpAutoCheckBox

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

C#-Signaturen

void UO.GumpAutoCheckBox(object? checkBoxID, object? value);

Setzt den Wert des Elements einmal im ersten geeigneten Server-Gump; Wenn das Element noch nicht existiert, wird das Warten erspart.

Parameter

  • checkBoxID - int - genaues ID des Elements des entsprechenden Typs. Dies ist kein Index, keine GumpID und kein serial-Fenster; 0 ist das übliche ID, ohne Ersetzung des ersten Elements.
  • value - int - 1 aktivieren, 0 deaktivieren. Zu den numerischen Werten ungleich Null gehören auch; 0/1 werden empfohlen. Durch die Auswahl eines Optionsfelds wird die Auswahl der benachbarten Optionsfelder seiner Gruppe aufgehoben.

Rückgabewert

void – gibt nichts zurück: weder Erfolg, noch einen neuen Wert, noch Serverbestätigung.

Verhalten

  • Überprüft zunächst vorhandene Fenster in der aktuellen Schnittstellenreihenfolge, dann neue oder aktualisierte Serverlayouts. Wird einmalig beim ersten Treffer des Typs und ID ausgelöst. Verwenden Sie für ein bestimmtes Fenster NumGump* mit einem Index.
  • Alle ausstehenden Felder werden vor den automatischen Schaltflächenantworten angewendet. Wiederholung desselben Typs und ID in einem Skript ersetzt einen Wert, der noch nicht ausgeführt wurde. Limit – 1024 ausstehende Client-Felder; Eine Überschreitung führt zu einem Skriptfehler.
  • Der normale Abschluss des Vorgangs erspart das Warten. Wenn Sie den Eigentümer oder Terminate mit seinem Namen stornieren, werden seine Wartezeiten entfernt; TerminateAll löscht alles, einschließlich derjenigen, die nach Abschluss der Verfahren übrig bleiben. Die Veränderung der Welt macht die Warteschlange frei. Erwartungen werden nicht im Profil gespeichert.

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.GumpAutoCheckBox");
UO.GumpAutoCheckBox(33, 1);

1. Sofortige Befüllung – direktes Skript

Parameter und Ablauf:

  • Der erste Parameter 33 ist ein Beispiel ID des gewünschten Elements; Ersetzen Sie es durch das echte ID von InfoGump. Der zweite ist der einzustellende Wert. Wenn kein Element vorhanden ist, bleibt die Aktion ausstehend.
UO.GumpAutoCheckBox(33, 1);

2. Vor dem Öffnen ausfüllen – Skriptfunktion

Parameter und Ablauf:

  • 33 ist ID des Elements, 100 ist ein Beispiel für eine Bestätigungs-ButtonID, 0x40001234 ist serial des Objekts, das das Formular öffnet. Ersetzen Sie alle drei Werte durch Ihre eigenen. Das Feld wird vor der Antwort ausgefüllt, auch wenn das Fenster später eintrifft.
return  RunScenario();
 object? RunScenario()
{
    UO.GumpAutoCheckBox(33, 1);
    UO.WaitGump(100);
    UO.UseObject("0x40001234");
    return null;
}

3. Ersetzen eines ausstehenden Werts – Skriptklasse

Parameter und Ablauf:

  • Beide Anrufe verwenden ID 33. Ist das Element noch nicht erschienen, gilt der letzte Wert. Ist das Fenster bereits geöffnet, werden beide Änderungen sofort der Reihe nach durchgeführt.
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.GumpAutoCheckBox(33, 1);
        UO.GumpAutoCheckBox(33, 0);
        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.GumpAutoCheckBox(checkBoxID, value) — UO.GumpAutoCheckBox(Any,Any)

Parameter: checkBoxID (Any), value (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "gumpautocheckbox": QueueGumpControl("checkbox", Arg(0), Text(1)); return InjectionValue.Unit;

UO.GumpAutoRadiobutton

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

C#-Signaturen

void UO.GumpAutoRadiobutton(object? radiobuttonID, object? value);

Setzt den Wert des Elements einmal im ersten geeigneten Server-Gump; Wenn das Element noch nicht existiert, wird das Warten erspart.

Parameter

  • radiobuttonID - int - genaues ID des Elements des entsprechenden Typs. Dies ist kein Index, keine GumpID und kein serial-Fenster; 0 ist das übliche ID, ohne Ersetzung des ersten Elements.
  • value - int - 1 aktivieren, 0 deaktivieren. Zu den numerischen Werten ungleich Null gehören auch; 0/1 werden empfohlen. Durch die Auswahl eines Optionsfelds wird die Auswahl der benachbarten Optionsfelder seiner Gruppe aufgehoben.

Rückgabewert

void – gibt nichts zurück: weder Erfolg, noch einen neuen Wert, noch Serverbestätigung.

Verhalten

  • Überprüft zunächst vorhandene Fenster in der aktuellen Schnittstellenreihenfolge, dann neue oder aktualisierte Serverlayouts. Wird einmalig beim ersten Treffer des Typs und ID ausgelöst. Verwenden Sie für ein bestimmtes Fenster NumGump* mit einem Index.
  • Alle ausstehenden Felder werden vor den automatischen Schaltflächenantworten angewendet. Wiederholung desselben Typs und ID in einem Skript ersetzt einen Wert, der noch nicht ausgeführt wurde. Limit – 1024 ausstehende Client-Felder; Eine Überschreitung führt zu einem Skriptfehler.
  • Der normale Abschluss des Vorgangs erspart das Warten. Wenn Sie den Eigentümer oder Terminate mit seinem Namen stornieren, werden seine Wartezeiten entfernt; TerminateAll löscht alles, einschließlich derjenigen, die nach Abschluss der Verfahren übrig bleiben. Die Veränderung der Welt macht die Warteschlange frei. Erwartungen werden nicht im Profil gespeichert.

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.GumpAutoRadiobutton");
UO.GumpAutoRadiobutton(33, 1);

1. Sofortige Befüllung – direktes Skript

Parameter und Ablauf:

  • Der erste Parameter 33 ist ein Beispiel ID des gewünschten Elements; Ersetzen Sie es durch das echte ID von InfoGump. Der zweite ist der einzustellende Wert. Wenn kein Element vorhanden ist, bleibt die Aktion ausstehend.
UO.GumpAutoRadiobutton(33, 1);

2. Vor dem Öffnen ausfüllen – Skriptfunktion

Parameter und Ablauf:

  • 33 ist ID des Elements, 100 ist ein Beispiel für eine Bestätigungs-ButtonID, 0x40001234 ist serial des Objekts, das das Formular öffnet. Ersetzen Sie alle drei Werte durch Ihre eigenen. Das Feld wird vor der Antwort ausgefüllt, auch wenn das Fenster später eintrifft.
return  RunScenario();
 object? RunScenario()
{
    UO.GumpAutoRadiobutton(33, 1);
    UO.WaitGump(100);
    UO.UseObject("0x40001234");
    return null;
}

3. Ersetzen eines ausstehenden Werts – Skriptklasse

Parameter und Ablauf:

  • Beide Anrufe verwenden ID 33. Ist das Element noch nicht erschienen, gilt der letzte Wert. Ist das Fenster bereits geöffnet, werden beide Änderungen sofort der Reihe nach durchgeführt.
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.GumpAutoRadiobutton(33, 1);
        UO.GumpAutoRadiobutton(33, 0);
        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.GumpAutoRadiobutton(radiobuttonID, value) — UO.GumpAutoRadiobutton(Any,Any)

Parameter: radiobuttonID (Any), value (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "gumpautoradiobutton": QueueGumpControl("radio", Arg(0), Text(1)); return InjectionValue.Unit;

UO.GumpAutoTextEntry

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

C#-Signaturen

void UO.GumpAutoTextEntry(object? textEntryID, object? value);

Setzt den Wert des Elements einmal im ersten geeigneten Server-Gump; Wenn das Element noch nicht existiert, wird das Warten erspart.

Parameter

  • textEntryID - int - genaues ID des Elements des entsprechenden Typs. Dies ist kein Index, keine GumpID und kein serial-Fenster; 0 ist das übliche ID, ohne Ersetzung des ersten Elements.
  • value - string – Feldtext, einschließlich einer Leerzeile zum Löschen. Einschränkungen hinsichtlich der Länge und zulässigen Zeichen des Feldes selbst bleiben erhalten.

Rückgabewert

void – gibt nichts zurück: weder Erfolg, noch einen neuen Wert, noch Serverbestätigung.

Verhalten

  • Überprüft zunächst vorhandene Fenster in der aktuellen Schnittstellenreihenfolge, dann neue oder aktualisierte Serverlayouts. Wird einmalig beim ersten Treffer des Typs und ID ausgelöst. Verwenden Sie für ein bestimmtes Fenster NumGump* mit einem Index.
  • Alle ausstehenden Felder werden vor den automatischen Schaltflächenantworten angewendet. Wiederholung desselben Typs und ID in einem Skript ersetzt einen Wert, der noch nicht ausgeführt wurde. Limit – 1024 ausstehende Client-Felder; Eine Überschreitung führt zu einem Skriptfehler.
  • Der normale Abschluss des Vorgangs erspart das Warten. Wenn Sie den Eigentümer oder Terminate mit seinem Namen stornieren, werden seine Wartezeiten entfernt; TerminateAll löscht alles, einschließlich derjenigen, die nach Abschluss der Verfahren übrig bleiben. Die Veränderung der Welt macht die Warteschlange frei. Erwartungen werden nicht im Profil gespeichert.
  • Durch ein Feld begrenzter Text kann gekürzt oder abgelehnt werden; Das gefundene Element verbraucht weiterhin eine einmalige Aktion. Der Befehl sendet keine Schaltflächenantwort und wartet nicht auf den Server. Verwenden Sie zur Überprüfung GetGumpInfo/NumGumpTextEntry.

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.GumpAutoTextEntry");
UO.GumpAutoTextEntry(33, "500");

1. Sofortige Befüllung – direktes Skript

Parameter und Ablauf:

  • Der erste Parameter 33 ist ein Beispiel ID des gewünschten Elements; Ersetzen Sie es durch das echte ID von InfoGump. Der zweite ist der einzustellende Wert. Wenn kein Element vorhanden ist, bleibt die Aktion ausstehend.
UO.GumpAutoTextEntry(33, "500");

2. Vor dem Öffnen ausfüllen – Skriptfunktion

Parameter und Ablauf:

  • 33 ist ID des Elements, 100 ist ein Beispiel für eine Bestätigungs-ButtonID, 0x40001234 ist serial des Objekts, das das Formular öffnet. Ersetzen Sie alle drei Werte durch Ihre eigenen. Das Feld wird vor der Antwort ausgefüllt, auch wenn das Fenster später eintrifft.
return  RunScenario();
 object? RunScenario()
{
    UO.GumpAutoTextEntry(33, "500");
    UO.WaitGump(100);
    UO.UseObject("0x40001234");
    return null;
}

3. Ersetzen eines ausstehenden Werts – Skriptklasse

Parameter und Ablauf:

  • Beide Anrufe verwenden ID 33. Ist das Element noch nicht erschienen, gilt der letzte Wert. Ist das Fenster bereits geöffnet, werden beide Änderungen sofort der Reihe nach durchgeführt.
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.GumpAutoTextEntry(33, "500");
        UO.GumpAutoTextEntry(33, "");
        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.GumpAutoTextEntry(textEntryID, value) — UO.GumpAutoTextEntry(Any,Any)

Parameter: textEntryID (Any), value (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "gumpautotextentry": QueueGumpControl("textentry", Arg(0), Text(1)); return InjectionValue.Unit;

UO.GumpExists

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

C#-Signaturen

int UO.GumpExists(object? id);
int UO.GumpExists(object? firstId, object? secondId);

Überprüft das Vorhandensein eines Server-Gump mithilfe eines Selektors oder des genauen Paares serial/GumpID.

Parameter

  • id – Ein-Argument-Formular: numerisch serial, GumpID oder Index mit 0. -1 wählt hier nicht den letzten Gump aus.
  • firstId – Form mit zwei Argumenten: numerisches 32-Bit serial, einschließlich negatives int mit höchstwertigem Bit.
  • secondId – Zwei-Argument-Form: genaue 32-Bit-GumpID. 0 ist eine exakte Zahl, kein Platzhalter. Nur -1 schaltet zurück zur Ein-Argument-Prüfung von firstId als serial/GumpID/index.

Rückgabewert

int - 1, wenn das entsprechende Fenster jetzt existiert; 0 sonst. Gibt keinen Index, serial oder Anzahl der Übereinstimmungen zurück.

Verhalten

  • Funktioniert mit aktiven Server-Gumps. Rucksack, Karte, Einstellungen und andere lokale Fenster sind in dieser Liste nicht enthalten. Ein Aufruf liest Daten im Spielthread; Verschiedene Anrufe können unterschiedliche Zustände der Liste sehen.
  • Die Prüfung wählt kein Fenster aus und reserviert es nicht. Das Paar ID wird als Ganzes geprüft; ID mit dem höchstwertigen Bit deaktiviert den Filter nicht.

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

1. Bekanntes ID prüfen – Direktskript

Parameter und Ablauf:

  • 0x87654321 – die gewünschte GumpID oder serial. Ein Argument unterscheidet nicht zwischen diesen Leerzeichen ID.
var exists = UO.GumpExists(0x87654321);
UO.Print(Convert.ToString(exists));

2. Genaues Paar prüfen – Skriptfunktion

Parameter und Ablauf:

  • Die erste Zahl ist serial, die zweite ist GumpID. Beide sind im vorzeichenbehafteten int negativ, aber der Vergleich behält alle 32-Bits bei.
return  RunScenario();
 object? RunScenario()
{
    var exists = UO.GumpExists(0x87654321, 0x98765432);
    if (Truth(exists))
    {
        UO.Print("Matching pair exists");
    }

    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. Überprüfen Sie „Gespeicherte Bezeichner – Skriptklasse“.

Parameter und Ablauf:

  • info[0]/info[1] gehören zum selben Bild. exist=1 bedeutet, dass das Paar jetzt existiert; Ein erneut geöffnetes Fenster mit demselben Paar unterscheidet sich nicht vom vorherigen.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var info = UO.GetGumpInfo(0);
        if (Truth(ArrayLength(info) == 5))
        {
            var exists = UO.GumpExists(info[0], info[1]);
            UO.Print(Convert.ToString(exists));
        }

        return null;
    }

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

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.GumpExists(id) — UO.GumpExists(Any)

Parameter: id (Any)

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public int GumpExists(InjectionValue id) => bridge.GumpExists(NumberConversions.ToInt(id), -1);

UO.GumpExists(firstId, secondId) — UO.GumpExists(Any,Any)

Parameter: firstId (Any), secondId (Any)

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public int GumpExists(InjectionValue firstId, InjectionValue secondId)

            => bridge.GumpExists(NumberConversions.ToInt(firstId), NumberConversions.ToInt(secondId));

UO.GumpObject

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

C#-Signaturen

void UO.GumpObject(object? gumpId);

Wählt einen vorhandenen Server-Gump für nachfolgende Aufrufe aus.

Parameter

  • gumpId – int: Entspricht zuerst LocalSerial oder ServerSerial, dann Index Null in der aktuellen Gumps-Liste. Dies sind keine ID-Tasten.

Rückgabewert

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

Verhalten

  • Bridge.SelectGump speichert _selectedServerGump. Wenn serial nicht übereinstimmt, wird der Index 0..count-1 verwendet. Nicht gefunden – der ausgewählte Gump wird zu null und eine Meldung wird angezeigt.
  • Gump öffnet sich nicht und es wird keine Antwort an den Server gesendet. Indizes ändern sich, wenn Fenster geöffnet/geschlossen werden; Für eine stabile Auswahl verwenden Sie die aktuelle serial/id.

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

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Wählt einen vorhandenen Server-Gump für nachfolgende Aufrufe aus.
if (Truth(UO.GumpExists(0)))
{
    UO.GumpObject(0);
}

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

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • Bridge.SelectGump speichert _selectedServerGump. Wenn serial nicht übereinstimmt, wird der Index 0..count-1 verwendet. Nicht gefunden – der ausgewählte Gump wird zu null und eine Meldung wird angezeigt.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.GetGumpsCount() > 0))
    {
        var serial = UO.GetGumpSerial(0);
        UO.GumpObject(serial);
    }

    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 Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • Gump öffnet sich nicht und es wird keine Antwort an den Server gesendet. Indizes ändern sich, wenn Fenster geöffnet/geschlossen werden; Für eine stabile Auswahl verwenden Sie die aktuelle serial/id.
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(UO.GetGumpsCount() > 0))
        {
            UO.GumpObject(0);
            UO.Print(UO.LastGump("gumpid"));
        }

        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.GumpObject(gumpId) — UO.GumpObject(Any)

Parameter: gumpId (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "gumpobject": bridge.SelectGump(Arg(0)); break;

UO.IsGump

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

C#-Signaturen

int UO.IsGump();

Überprüft, ob mindestens ein aktiver Server-Gump vorhanden ist.

Parameter

Es gibt keine Parameter.

Rückgabewert

int — 1, wenn die Liste nicht leer ist; 0 wenn leer. Dies ist ein Zeichen der Verfügbarkeit, nicht der Anzahl der Fenster.

Verhalten

  • Funktioniert mit aktiven Server-Gumps. Rucksack, Karte, Einstellungen und andere lokale Fenster sind in dieser Liste nicht enthalten. Ein Aufruf liest Daten im Spielthread; Verschiedene Anrufe können unterschiedliche Zustände der Liste sehen.

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

1. Bedingtes Lesen – Direktes Skript

Parameter und Ablauf:

  • Es gibt keine Argumente. GetGumpInfo(0) liest das erste Element und gibt möglicherweise ein leeres Array zurück, wenn das Fenster bereits geschlossen wurde.
if (Truth(UO.IsGump()))
{
    var info = UO.GetGumpInfo(0);
    UO.Print(ArrayLength(info));
}

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

2. Quantität und Präsenz unterscheiden – Skriptfunktion

Parameter und Ablauf:

  • Wenn drei stabile Fenster vorhanden sind=1, Anzahl=3.
return  RunScenario();
 object? RunScenario()
{
    var present = UO.IsGump();
    var count = UO.GetGumpsCount();
    UO.Print(Convert.ToString(present) + "/" + Convert.ToString(count));
    return null;
}

3. Begrenztes Warten – Skriptklasse

Parameter und Ablauf:

  • Warten Sie nicht länger als ca. 3000 ms, prüfen Sie alle 50 ms. Das letzte Geschenk zeigt den Zustand nach dem Warten.
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()
    {
        var started = Now();
        while (Truth(UO.IsGump() == 0) && Truth(Now() - started < 3000))
        {
            await Delay(50);
        }

        var present = UO.IsGump();
        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;
    private int Now() => global::ClassicUO.CSharp.CSharpScriptContext.Current.Now();
}

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

Parameter: Keine Parameter.

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "isgump": return new InjectionValue(bridge.GetGumpCount() > 0 ? 1 : 0);

UO.IsGumpCanBeClosed

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

C#-Signaturen

int UO.IsGumpCanBeClosed(object? gumpIndex);

Überprüft, ob das lokale Schließen des Server-Gumps mit der rechten Maustaste zulässig ist.

Parameter

  • gumpIndex – Obligatorisch int – Index des aktiven Server-Gumps, von 0 bis GetGumpsCount()-1. Dies ist nicht GumpID/serial. Negative Zahlen und Indizes außerhalb der Liste sind ungültig. Das Öffnen, Schließen und Neuanordnen von Fenstern kann den Index ändern; Überprüfen Sie GetGumpID/GetGumpSerial, bevor Sie handeln.

Rückgabewert

int — 1, wenn das Fenster existiert und CanCloseWithRightClick aktiviert ist; andernfalls 0. Dies ist nicht auf das Schließen oder das Vorhandensein einer Schaltfläche „Abbrechen“ zurückzuführen.

Verhalten

  • Funktioniert mit aktiven Server-Gumps. Rucksack, Karte, Einstellungen und andere lokale Fenster sind in dieser Liste nicht enthalten. Ein Aufruf liest Daten im Spielthread; Verschiedene Anrufe können unterschiedliche Zustände der Liste sehen.
  • NoClose verbietet CloseSimpleGump; Die Möglichkeit, ButtonID an den Server zu senden, ist eine separate Aktion.

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

1. Bedingtes Schließen – direktes Skript

Parameter und Ablauf:

  • 0 – Fensterindex. Verifizierung und Abschluss sind unterschiedliche Herausforderungen; Der Index kann sich zwischen ihnen ändern.
if (Truth(UO.IsGumpCanBeClosed(0)))
{
    UO.CloseSimpleGump(0);
}

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

2. Show Close Disable – Skriptfunktion

Parameter und Ablauf:

  • closable=0 für ein vorhandenes Fenster bedeutet, dass das Fenster nicht geschlossen werden kann, nicht das Fehlen des Fensters.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.GetGumpsCount() > 0))
    {
        var closable = UO.IsGumpCanBeClosed(0);
        UO.Print(Convert.ToString(closable));
    }

    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. Ungültiger Index – Skriptklasse

Parameter und Ablauf:

  • -1 ist für diesen Indexbefehl nicht gültig und ergibt 0; Dies ist nicht die letzte Fensterauswahl.
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 result = UO.IsGumpCanBeClosed(-1);
        UO.Print(Convert.ToString(result));
        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.IsGumpCanBeClosed(gumpIndex) — UO.IsGumpCanBeClosed(Any)

Parameter: gumpIndex (Any)

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "isgumpcanbeclosed": return new InjectionValue(bridge.IsGumpCanBeClosed(Arg(0)));

UO.LastGump

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

C#-Signaturen

dynamic UO.LastGump(object? identifier);
dynamic UO.LastGump(object? identifier, object? key);

Liest ein Feld des ausgewählten Server-Gumps. Verwendet das von diesem Skript ausgewählte Fenster oder das letzte Element der aktuellen Liste.

Parameter

  • identifier - string Groß- und Kleinschreibung wird nicht beachtet. Alle unterstützten Werte und Ergebnistypen werden im Abschnitt „Rückgaben“ aufgeführt. Unbekannter Name gibt eine leere Zeichenfolge zurück.
  • key – Optional int, Standard – 1. Index mit 0 für Schaltfläche/Text/object/Befehl; Dies ist keine ID-Steuerung. Ein negativer Index und außerhalb der Grenzen führen zu 0 für Schaltflächen oder einer leeren Zeichenfolge für Textfelder. Andere Bezeichner verwenden keinen Schlüssel.

Rückgabewert

Die Art des Ergebnisses hängt vom Identifikator ab. int: buttonlen – Anzahl der regulären Tasten; button – ButtonID nach Indexschlüssel; textlen – Anzahl der verfügbaren Textelemente; injid – aktueller Fensterindex; antwortete – 0 (Antwortverlauf wird nicht gespeichert); inclient – ​​1 für ein gefundenes Live-Fenster, 0 falls nicht vorhanden; objectcount – Anzahl der Live-Steuerelemente, einschließlich verschachtelter. string: serial und Gumpid – Hex-Strings 0xXXXXXXXX; text – Elementtext am Indexschlüssel; object – Name des Steuerungstyps; Befehl – ​​Beschreibung des Steuerelements (Typ, Seite, ID, Koordinaten, Abmessungen und unterstützte Felder). Wenn kein Fenster vorhanden ist, ergeben numerische Bezeichner 0, Zeichenfolgenbezeichner eine leere Zeichenfolge. injid=0 ist ebenfalls ein gültiger erster Index: 0 allein beweist nicht das Fehlen eines Fensters. Dies ist kein Array oder Pascal TGumpInfo.

Verhalten

  • Funktioniert mit aktiven Server-Gumps. Rucksack, Karte, Einstellungen und andere lokale Fenster sind in dieser Liste nicht enthalten. Ein Aufruf liest Daten im Spielthread; Verschiedene Anrufe können unterschiedliche Zustände der Liste sehen.
  • SelectGump/InfoGump gibt das ausgewählte Fenster nur in der aktuellen Laufzeit an. Wenn das ausgewählte Fenster geschlossen ist, wird das letzte Element in der aktuellen Liste verwendet, das nicht unbedingt das aktuellste Element ist.
  • textlen/text beziehen sich auf die verfügbaren Textsteuerelemente, nicht auf den ursprünglichen String-Pool des Serverpakets. object/Befehl bezieht sich auf den gesamten Baum der Live-Steuerelemente. Indizes aus verschiedenen Listen können nicht gemischt werden.
  • Jeder Aufruf liest den aktuellen Zustand separat aus. Für übereinstimmende serial, GumpID und Listen verwenden Sie GetGumpInfo.

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

1. ID des ausgewählten Fensters lesen – Direktskript

Parameter und Ablauf:

  • gumpid und serial geben Strings zurück, die bereits hexadezimal formatiert sind; kein zusätzliches Hex erforderlich. Leere Zeilen bedeuten, dass beim Lesen kein Fenster vorhanden ist.
var id = UO.LastGump("gumpid");
var serial = UO.LastGump("serial");
UO.Print(id + " / " + serial);

2. ButtonID aufzählen – Skriptfunktion

Parameter und Ablauf:

  • buttonlen – Anzahl der Knöpfe; i ist der Index der Zeile von 0 bis count-1. Schaltfläche – ID für Antwort, nicht für Grafiken oder Index. Wenn Sie das Fenster wechseln, lesen Sie die Liste erneut.
return  RunScenario();
 object? RunScenario()
{
    var count = UO.LastGump("buttonlen");
    var i = 0;
    while (Truth(i < count))
    {
        var button = UO.LastGump("button", i);
        UO.Print(Convert.ToString(button));
        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. Text nach der Auswahl lesen – Skriptklasse

Parameter und Ablauf:

  • 0x12345678 ist ein Beispiel für GumpID/serial, ersetzen Sie ID durch die gewünschte Form. text mit key=0 liest das erste verfügbare Textsteuerelement; Dies ist eine andere Liste als die Schaltfläche.
  • SelectGump meldet das Fehlen des angegebenen Fensters, blockiert jedoch nicht das nachfolgende Lesen: Überprüfen Sie das zurückgegebene Gumpid bei Bedarf separat.
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.SelectGump(0x12345678);
        if (Truth(UO.LastGump("inclient")))
        {
            var count = UO.LastGump("textlen");
            if (Truth(count > 0))
            {
                UO.Print(UO.LastGump("text", 0));
            }
        }

        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.LastGump(identifier) — UO.LastGump(String)

Parameter: identifier (String)

Ergebnis: dynamic / Any.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public InjectionValue LastGump(string identifier) => LastGump(identifier, -1);

UO.LastGump(identifier, key) — UO.LastGump(String,Integer)

Parameter: identifier (String), key (Integer)

Ergebnis: dynamic / Any.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public InjectionValue LastGump(string identifier, int key) => ConvertGumpValue(identifier, bridge.GetGumpValue(-1, identifier, key));

UO.NumGumpButton

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

C#-Signaturen

int UO.NumGumpButton(object? gumpIndex, object? value);

Aktiviert eine vorhandene Server-Gump-Schaltfläche basierend auf dem strengen Fensterindex und der genauen ButtonID.

Parameter

  • gumpIndex – Obligatorisch int – Index des aktiven Server-Gumps, von 0 bis GetGumpsCount()-1. Dies ist nicht GumpID/serial. Negative Zahlen und Indizes außerhalb der Liste sind ungültig. Das Öffnen, Schließen und Neuanordnen von Fenstern kann den Index ändern; Überprüfen Sie GetGumpID/GetGumpSerial, bevor Sie handeln.
  • value – int – ButtonID aus der Beschreibung eines regulären Buttons. Nicht die Zeilennummer, nicht die Schaltfläche graphic, nicht die GumpID.

Rückgabewert

int (bool) – 1, wenn das Fenster und die Schaltfläche gefunden werden und die lokale Aktion ausgeführt wird; 0 wenn kein Fenster/Knopf vorhanden ist. Beim Wechseln der Seite wird auch 1 zurückgegeben. Dies ist keine Bestätigung der Serververarbeitung.

Das Ergebnis des Befehls ist ein numerisches Flag: 1 bedeutet eine erfüllte Bedingung, 0 bedeutet eine nicht erfüllte Bedingung. Nach var result = command(...) prüfen, ob (result != 0) oder if (result == 0). Speichern Sie das Ergebnis eines Aufrufs: Ein wiederholter Aufruf kann die Aktion erneut ausführen oder den Status lesen, der sich bereits geändert hat.

Verhalten

  • Funktioniert mit aktiven Server-Gumps. Rucksack, Karte, Einstellungen und andere lokale Fenster sind in dieser Liste nicht enthalten. Ein Aufruf liest Daten im Spielthread; Verschiedene Anrufe können unterschiedliche Zustände der Liste sehen.
  • Die Schaltfläche SwitchPage schaltet die Seite lokal um. Die Schaltfläche „Aktivieren“ löst eine Gump-Reaktion aus; Normalerweise schließt sich das Fenster. Im Gegensatz zu SendGumpSelect erfordert dieser Befehl eine vorhandene ButtonID im Kontrollbaum.

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

1. Drücken Sie einen bekannten Knopf – Direktskript

Parameter und Ablauf:

  • 0 ist der Fensterindex, 77 ist eine Beispiel-ButtonID aus dem Inspektor. Ihr Formular benötigt sein echtes ID.
var ok = UO.NumGumpButton(0, 77);
if (Truth(ok == 0))
{
    UO.Print("Button not found");
}

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

2. Überprüfen Sie zuerst den Fenstertyp – Skriptfunktion

Parameter und Ablauf:

  • 0x12345678 ist die erwartete GumpID, 100 ist die ButtonID. Diese beiden Zahlen gehören zu unterschiedlichen Räumen ID.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.GetGumpID(0) == 0x12345678))
    {
        var ok = UO.NumGumpButton(0, 100);
    }

    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. Kontrollkästchen vor der Schaltfläche ändern – Skriptklasse

Parameter und Ablauf:

  • 33 – ID-Kontrollkästchen, 1 – aktivieren, 100 – ID-Taste. Der Kontrollkästchenstatus wird nur für die Schaltfläche „Aktivieren“ in die Antwort einbezogen.
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(UO.NumGumpCheckBox(0, 33, 1)))
        {
            var ok = UO.NumGumpButton(0, 100);
        }

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

Parameter: gumpIndex (Any), value (Any)

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "numgumpbutton": return (bridge is IApiGumpAccess buttons

                    ? buttons.ActivateGumpButtonAtIndex(Arg(0), Arg(1)) : bridge.ActivateGumpButton(Arg(0), Arg(1))) != 0 ? InjectionValue.True : InjectionValue.False;

UO.NumGumpCheckBox

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

C#-Signaturen

int UO.NumGumpCheckBox(object? gumpIndex, object? cbid, object? value);

Legt den Status des Flags im Server anhand des Index fest.

Parameter

  • gumpIndex – Obligatorisch int – Index des aktiven Server-Gumps, von 0 bis GetGumpsCount()-1. Dies ist nicht GumpID/serial. Negative Zahlen und Indizes außerhalb der Liste sind ungültig. Das Öffnen, Schließen und Neuanordnen von Fenstern kann den Index ändern; Überprüfen Sie GetGumpID/GetGumpSerial, bevor Sie handeln.
  • cbid – int – das genaue ID-Element aus der Gump-Beschreibung. Dies ist nicht die Seriennummer des Elements; das fehlende ID wird nicht durch einen Index ersetzt.
  • value - int - 1 aktivieren/auswählen, 0 deaktivieren. Numerische Werte ungleich Null, true und geprüft werden ebenfalls erkannt. 0 und 1 werden empfohlen.

Rückgabewert

int (bool) — 1, wenn das erforderliche Element gefunden wird und sein Endwert mit dem angegebenen übereinstimmt; 0, wenn der Index ungültig ist, der ID/Elementtyp fehlt oder wenn das Feld keinen genauen Wert angenommen hat. Auch das Zurücksetzen eines bereits eingestellten Wertes gelingt.

Das Ergebnis des Befehls ist ein numerisches Flag: 1 bedeutet eine erfüllte Bedingung, 0 bedeutet eine nicht erfüllte Bedingung. Nach var result = command(...) prüfen, ob (result != 0) oder if (result == 0). Speichern Sie das Ergebnis eines Aufrufs: Ein wiederholter Aufruf kann die Aktion erneut ausführen oder den Status lesen, der sich bereits geändert hat.

Verhalten

  • Funktioniert mit aktiven Server-Gumps. Rucksack, Karte, Einstellungen und andere lokale Fenster sind in dieser Liste nicht enthalten. Ein Aufruf liest Daten im Spielthread; Verschiedene Anrufe können unterschiedliche Zustände der Liste sehen.
  • Ändert den lokalen Status. Die Felder und aktivierten Optionsfelder werden gesendet, gefolgt von der Schaltflächenantwort.
  • Durch die Auswahl eines Optionsfelds wird die Auswahl des benachbarten Optionsfelds derselben Gruppe aufgehoben. Normale Kontrollkästchen sind unabhängig.

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

1. Stellen Sie den Wert ein und überprüfen Sie das Ergebnis – direktes Skript

Parameter und Ablauf:

  • 0 – Fensterindex; 33 – exaktes CBID; 1 – neuer Wert. Ersetzen Sie 33 durch ID aus Ihrem Gump.
var ok = UO.NumGumpCheckBox(0, 33, 1);
if (Truth(ok == 0))
{
    UO.Print("Control missing or value rejected");
}

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

2. Wert löschen – Skriptfunktion

Parameter und Ablauf:

  • 0 löscht das Feld oder deaktiviert es. Es wird der Erfolg der Änderung zurückgegeben, nicht der neue Wert des Feldes.
return  RunScenario();
 object? RunScenario()
{
    var ok = UO.NumGumpCheckBox(0, 33, 0);
    UO.Print(Convert.ToString(ok));
    return null;
}

3. Vor der Antwort ausfüllen – Skriptklasse

Parameter und Ablauf:

  • 100 – Beispiel einer Server-ButtonID-Bestätigung; Es muss ID Ihres Fensters ersetzt werden. 0 bis SendGumpSelect(0,100) ist der Fensterindex.
  • Die Antwort kann den Gump schließen und die Indizes ändern. Gesendet bedeutet lokales Senden, das Ergebnis einer vom Server nicht bestätigten Operation.
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(UO.NumGumpCheckBox(0, 33, 1)))
        {
            var sent = UO.SendGumpSelect(0, 100);
            UO.Print(Convert.ToString(sent));
        }

        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.NumGumpCheckBox(gumpIndex, cbid, value) — UO.NumGumpCheckBox(Any,Any,Any)

Parameter: gumpIndex (Any), cbid (Any), value (Any)

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "numgumpcheckbox": return SetIndexedGumpValue(Arg(0), "checkbox", Arg(1), Text(2));

UO.NumGumpRadiobutton

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

C#-Signaturen

int UO.NumGumpRadiobutton(object? gumpIndex, object? radiobuttonID, object? value);

Legt den Status eines Optionsfelds in einem Server anhand des Index fest.

Parameter

  • gumpIndex – Obligatorisch int – Index des aktiven Server-Gumps, von 0 bis GetGumpsCount()-1. Dies ist nicht GumpID/serial. Negative Zahlen und Indizes außerhalb der Liste sind ungültig. Das Öffnen, Schließen und Neuanordnen von Fenstern kann den Index ändern; Überprüfen Sie GetGumpID/GetGumpSerial, bevor Sie handeln.
  • radiobuttonID – int – das genaue ID-Element aus der Gump-Beschreibung. Dies ist nicht die Seriennummer des Elements; das fehlende ID wird nicht durch einen Index ersetzt.
  • value - int - 1 aktivieren/auswählen, 0 deaktivieren. Numerische Werte ungleich Null, true und geprüft werden ebenfalls erkannt. 0 und 1 werden empfohlen.

Rückgabewert

int (bool) — 1, wenn das erforderliche Element gefunden wird und sein Endwert mit dem angegebenen übereinstimmt; 0, wenn der Index ungültig ist, der ID/Elementtyp fehlt oder wenn das Feld keinen genauen Wert angenommen hat. Auch das Zurücksetzen eines bereits eingestellten Wertes gelingt.

Das Ergebnis des Befehls ist ein numerisches Flag: 1 bedeutet eine erfüllte Bedingung, 0 bedeutet eine nicht erfüllte Bedingung. Nach var result = command(...) prüfen, ob (result != 0) oder if (result == 0). Speichern Sie das Ergebnis eines Aufrufs: Ein wiederholter Aufruf kann die Aktion erneut ausführen oder den Status lesen, der sich bereits geändert hat.

Verhalten

  • Funktioniert mit aktiven Server-Gumps. Rucksack, Karte, Einstellungen und andere lokale Fenster sind in dieser Liste nicht enthalten. Ein Aufruf liest Daten im Spielthread; Verschiedene Anrufe können unterschiedliche Zustände der Liste sehen.
  • Ändert den lokalen Status. Die Felder und aktivierten Optionsfelder werden gesendet, gefolgt von der Schaltflächenantwort.
  • Durch die Auswahl eines Optionsfelds wird die Auswahl des benachbarten Optionsfelds derselben Gruppe aufgehoben. Normale Kontrollkästchen sind unabhängig.

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

1. Stellen Sie den Wert ein und überprüfen Sie das Ergebnis – direktes Skript

Parameter und Ablauf:

  • 0 – Fensterindex; 33 – genaue RadiobuttonID; 1 – neuer Wert. Ersetzen Sie 33 durch ID aus Ihrem Gump.
var ok = UO.NumGumpRadiobutton(0, 33, 1);
if (Truth(ok == 0))
{
    UO.Print("Control missing or value rejected");
}

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

2. Wert löschen – Skriptfunktion

Parameter und Ablauf:

  • 0 löscht das Feld oder deaktiviert es. Es wird der Erfolg der Änderung zurückgegeben, nicht der neue Wert des Feldes.
return  RunScenario();
 object? RunScenario()
{
    var ok = UO.NumGumpRadiobutton(0, 33, 0);
    UO.Print(Convert.ToString(ok));
    return null;
}

3. Vor der Antwort ausfüllen – Skriptklasse

Parameter und Ablauf:

  • 100 – Beispiel einer Server-ButtonID-Bestätigung; Es muss ID Ihres Fensters ersetzt werden. 0 bis SendGumpSelect(0,100) ist der Fensterindex.
  • Die Antwort kann den Gump schließen und die Indizes ändern. Gesendet bedeutet lokales Senden, das Ergebnis einer vom Server nicht bestätigten Operation.
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(UO.NumGumpRadiobutton(0, 33, 1)))
        {
            var sent = UO.SendGumpSelect(0, 100);
            UO.Print(Convert.ToString(sent));
        }

        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.NumGumpRadiobutton(gumpIndex, radiobuttonID, value) — UO.NumGumpRadiobutton(Any,Any,Any)

Parameter: gumpIndex (Any), radiobuttonID (Any), value (Any)

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "numgumpradiobutton": return SetIndexedGumpValue(Arg(0), "radio", Arg(1), Text(2));

UO.NumGumpTextEntry

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

C#-Signaturen

int UO.NumGumpTextEntry(object? gumpIndex, object? textEntryID, object? value);

Legt den Text des Eingabefelds im Server nach Index fest.

Parameter

  • gumpIndex – Obligatorisch int – Index des aktiven Server-Gumps, von 0 bis GetGumpsCount()-1. Dies ist nicht GumpID/serial. Negative Zahlen und Indizes außerhalb der Liste sind ungültig. Das Öffnen, Schließen und Neuanordnen von Fenstern kann den Index ändern; Überprüfen Sie GetGumpID/GetGumpSerial, bevor Sie handeln.
  • textEntryID – int – das genaue ID-Element aus der Gump-Beschreibung. Dies ist nicht die Seriennummer des Elements; das fehlende ID wird nicht durch einen Index ersetzt.
  • value - string – neuer Text. Eine leere Zeichenfolge löscht das Feld; Längen-/Zeichenbeschränkungen für das Feld selbst bleiben erhalten.

Rückgabewert

int (bool) — 1, wenn das erforderliche Element gefunden wird und sein Endwert mit dem angegebenen übereinstimmt; 0, wenn der Index ungültig ist, der ID/Elementtyp fehlt oder wenn das Feld keinen genauen Wert angenommen hat. Auch das Zurücksetzen eines bereits eingestellten Wertes gelingt.

Das Ergebnis des Befehls ist ein numerisches Flag: 1 bedeutet eine erfüllte Bedingung, 0 bedeutet eine nicht erfüllte Bedingung. Nach var result = command(...) prüfen, ob (result != 0) oder if (result == 0). Speichern Sie das Ergebnis eines Aufrufs: Ein wiederholter Aufruf kann die Aktion erneut ausführen oder den Status lesen, der sich bereits geändert hat.

Verhalten

  • Funktioniert mit aktiven Server-Gumps. Rucksack, Karte, Einstellungen und andere lokale Fenster sind in dieser Liste nicht enthalten. Ein Aufruf liest Daten im Spielthread; Verschiedene Anrufe können unterschiedliche Zustände der Liste sehen.
  • Ändert den lokalen Status. Die Felder und aktivierten Optionsfelder werden gesendet, gefolgt von der Schaltflächenantwort.
  • Durch die Auswahl eines Optionsfelds wird die Auswahl des benachbarten Optionsfelds derselben Gruppe aufgehoben. Normale Kontrollkästchen sind unabhängig.

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.NumGumpTextEntry(0, 33, "500");
UO.Print("NumGumpTextEntry: " + Convert.ToString(result));

1. Stellen Sie den Wert ein und überprüfen Sie das Ergebnis – direktes Skript

Parameter und Ablauf:

  • 0 – Fensterindex; 33 – exaktes TextEntryID; „500“ ist der neue Wert. Ersetzen Sie 33 durch ID aus Ihrem Gump.
var ok = UO.NumGumpTextEntry(0, 33, "500");
if (Truth(ok == 0))
{
    UO.Print("Control missing or value rejected");
}

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

2. Wert löschen – Skriptfunktion

Parameter und Ablauf:

  • '' löscht das Feld oder deaktiviert es. Es wird der Erfolg der Änderung zurückgegeben, nicht der neue Wert des Feldes.
return  RunScenario();
 object? RunScenario()
{
    var ok = UO.NumGumpTextEntry(0, 33, "");
    UO.Print(Convert.ToString(ok));
    return null;
}

3. Vor der Antwort ausfüllen – Skriptklasse

Parameter und Ablauf:

  • 100 – Beispiel einer Server-ButtonID-Bestätigung; Es muss ID Ihres Fensters ersetzt werden. 0 bis SendGumpSelect(0,100) ist der Fensterindex.
  • Die Antwort kann den Gump schließen und die Indizes ändern. Gesendet bedeutet lokales Senden, das Ergebnis einer vom Server nicht bestätigten Operation.
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(UO.NumGumpTextEntry(0, 33, "500")))
        {
            var sent = UO.SendGumpSelect(0, 100);
            UO.Print(Convert.ToString(sent));
        }

        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.NumGumpTextEntry(gumpIndex, textEntryID, value) — UO.NumGumpTextEntry(Any,Any,Any)

Parameter: gumpIndex (Any), textEntryID (Any), value (Any)

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "numgumptextentry": return SetIndexedGumpValue(Arg(0), "textentry", Arg(1), Text(2));

UO.SelectGump

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

C#-Signaturen

void UO.SelectGump(object? id);

Wählt einen vorhandenen Server-Gump für nachfolgende Aufrufe aus.

Parameter

  • id – int: Entspricht zuerst LocalSerial oder ServerSerial, dann Index Null in der aktuellen Gumps-Liste. Dies sind keine ID-Tasten.

Rückgabewert

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

Verhalten

  • Bridge.SelectGump speichert _selectedServerGump. Wenn serial nicht übereinstimmt, wird der Index 0..count-1 verwendet. Nicht gefunden – der ausgewählte Gump wird zu null und eine Meldung wird angezeigt.
  • Gump öffnet sich nicht und es wird keine Antwort an den Server gesendet. Indizes ändern sich, wenn Fenster geöffnet/geschlossen werden; Für eine stabile Auswahl verwenden Sie die aktuelle serial/id.

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

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Wählt einen vorhandenen Server-Gump für nachfolgende Aufrufe aus.
if (Truth(UO.GumpExists(0)))
{
    UO.SelectGump(0);
}

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

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • Bridge.SelectGump speichert _selectedServerGump. Wenn serial nicht übereinstimmt, wird der Index 0..count-1 verwendet. Nicht gefunden – der ausgewählte Gump wird zu null und eine Meldung wird angezeigt.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.GetGumpsCount() > 0))
    {
        var serial = UO.GetGumpSerial(0);
        UO.SelectGump(serial);
    }

    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 Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • Gump öffnet sich nicht und es wird keine Antwort an den Server gesendet. Indizes ändern sich, wenn Fenster geöffnet/geschlossen werden; Für eine stabile Auswahl verwenden Sie die aktuelle serial/id.
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(UO.GetGumpsCount() > 0))
        {
            UO.SelectGump(0);
            UO.Print(UO.LastGump("gumpid"));
        }

        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.SelectGump(id) — UO.SelectGump(Any)

Parameter: id (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public void SelectGump(InjectionValue id) => bridge.SelectGump(NumberConversions.ToInt(id));

UO.SendGumpSelect

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

C#-Signaturen

int UO.SendGumpSelect(object? triggerId);
int UO.SendGumpSelect(object? gumpIndex, object? triggerId);
int UO.SendGumpSelect(object? serial, object? gumpId, object? triggerId);
int UO.SendGumpSelect(object? serial, object? gumpId, object? triggerId, object? timeout);

Sendet die ButtonID für den ausgewählten Server-Gump.

Parameter

  • triggerId – int oder numerische Zeichenfolge – Server-ButtonID. 0 bedeutet normalerweise Schließen/Ablehnen, aber die genaue Aktion wird vom Server bestimmt. Eine sichtbare ButtonID im Baum ist nicht erforderlich.
  • gumpIndex – Obligatorisch int – Index des aktiven Server-Gumps, von 0 bis GetGumpsCount()-1. Dies ist nicht GumpID/serial. Negative Zahlen und Indizes außerhalb der Liste sind ungültig. Das Öffnen, Schließen und Neuanordnen von Fenstern kann den Index ändern; Überprüfen Sie GetGumpID/GetGumpSerial, bevor Sie handeln. Wird nur in der Form mit zwei Argumenten verwendet (gumpIndex, triggerId).
  • serial – In den Argumentformen 3/4 das numerische 32-Bit serial. 0 oder -1 deaktiviert den Filter serial; die restlichen Zahlen, auch die negativen mit dem höchstwertigen Bit, werden exakt verglichen.
  • gumpId – In den Argumentformen 3/4 die numerische 32-Bit-GumpID. 0 oder -1 deaktiviert den GumpID-Filter. Hex-Strings sind erlaubt; Namen AddObject sind hier nicht erlaubt.
  • timeout – Optionales viertes Argument, int Millisekunden, um auf ein passendes ID-Paar zu warten. Standardmäßig ist 0 ein sofortiger Versuch; das Negativ ist auf 0 begrenzt. Wiederholungsintervall 20 ms.

Rückgabewert

int – 1, wenn ein Live-Server-Gump gefunden wird und die Antwort aufgerufen wird; 0, wenn das Fenster nicht vor Ablauf des Timeouts gefunden wird. Gibt den ausgewählten ID nicht zurück und wartet nicht darauf, dass der Server das Ergebnis bestätigt.

Verhalten

  • Funktioniert mit aktiven Server-Gumps. Rucksack, Karte, Einstellungen und andere lokale Fenster sind in dieser Liste nicht enthalten. Ein Aufruf liest Daten im Spielthread; Verschiedene Anrufe können unterschiedliche Zustände der Liste sehen.
  • Ein Argument wählt den Gump aus, der zuvor von diesem Skript ausgewählt wurde; wenn es geschlossen/nicht ausgewählt ist – das letzte Element der aktuellen Liste. Zwei Argumente geben einen strikten Index an. Drei/Vier – ein Paar ID mit Filtern.
  • Das Auswählen und Aufrufen einer Antwort erfolgt in einer Game-Thread-Anfrage. Das Warten wird durch Stoppen des Vorgangs abgebrochen. Verwechseln Sie direkte Serverantwort nicht mit Seitenwechsel: Die Schaltfläche SwitchPage erfordert NumGumpButton.

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

1. Auf ausgewähltes Fenster antworten – Direktskript

Parameter und Ablauf:

  • SelectGump wählt Typ/serial 0x12345678 oder meldet Abwesenheit; 100 – ButtonID.
  • Wenn kein ausgewähltes Fenster mehr vorhanden ist, verwendet das Ein-Argument-Formular das letzte verfügbare Fenster. Für eine strikte Identität verwenden Sie ein Formular mit zwei ID.
UO.SelectGump(0x12345678);
var sent = UO.SendGumpSelect(100);
UO.Print(Convert.ToString(sent));

2. Auf erstes Listenelement antworten – Skriptfunktion

Parameter und Ablauf:

  • 0 – Index, 100 – ButtonID. Dies ist nicht serial=0 und nicht GumpID=100.
return  RunScenario();
 object? RunScenario()
{
    var sent = UO.SendGumpSelect(0, 100);
    if (Truth(sent == 0))
    {
        UO.Print("No gump at index zero");
    }

    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. Reagieren Sie speziell auf das Fenster aus der Snapshot-Skriptklasse

Parameter und Ablauf:

  • info[0] – serial, info[1] – GumpID, 100 – ButtonID. Durch Ändern des Index wird die Antwort nicht an einen anderen Typ/Besitzer umgeleitet.
  • Serial/GumpID-Werte 0/-1 sind uneingeschränkte Filter; Identische Paare unterscheiden nicht erneut geöffnete Instanzen.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var info = UO.GetGumpInfo(0);
        if (Truth(ArrayLength(info) == 5))
        {
            var sent = UO.SendGumpSelect(info[0], info[1], 100);
        }

        return null;
    }

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

4. Erwarten Sie einen bestimmten Typ – direktes Skript

Parameter und Ablauf:

  • 0 deaktiviert den Filter serial; 0x87654321 – exaktes ID mit dem höchstwertigen Bit; 100 – Taste; 2000 – maximale Wartezeit in ms. Wird nicht als unbedingter Platzhalter verwendet.
var sent = UO.SendGumpSelect(0, 0x87654321, 100, 2000);
UO.Print(Convert.ToString(sent));

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.SendGumpSelect(triggerId) — UO.SendGumpSelect(Integer)

Parameter: triggerId (Integer/String)

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public int SendGumpSelect(int triggerId) => bridge.SendGumpSelect(triggerId);

UO.SendGumpSelect(triggerId) — UO.SendGumpSelect(String)

Parameter: triggerId (Integer/String)

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public int SendGumpSelect(string triggerId) => SendGumpSelect(NumberConversions.ToInt(triggerId));

UO.SendGumpSelect(gumpIndex, triggerId) — UO.SendGumpSelect(Any,Any)

Parameter: gumpIndex (Any), triggerId (Any)

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public int SendGumpSelect(InjectionValue gumpIndex, InjectionValue triggerId)

            => bridge.SendGumpSelect(NumberConversions.ToInt(gumpIndex), NumberConversions.ToInt(triggerId));

UO.SendGumpSelect(serial, gumpId, triggerId) — UO.SendGumpSelect(Any,Any,Any)

Parameter: serial (Any), gumpId (Any), triggerId (Any)

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public int SendGumpSelect(InjectionValue serial, InjectionValue gumpId, InjectionValue triggerId)

            => bridge.SendGumpSelect(NumberConversions.ToInt(serial), NumberConversions.ToInt(gumpId), NumberConversions.ToInt(triggerId));

UO.SendGumpSelect(serial, gumpId, triggerId, timeout) — UO.SendGumpSelect(Any,Any,Any,Any)

Parameter: serial (Any), gumpId (Any), triggerId (Any), timeout (Any)

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public int SendGumpSelect(InjectionValue serial, InjectionValue gumpId, InjectionValue triggerId, InjectionValue timeout)

            => bridge.SendGumpSelect(NumberConversions.ToInt(serial), NumberConversions.ToInt(gumpId),

                NumberConversions.ToInt(triggerId), Math.Max(0, NumberConversions.ToInt(timeout)));

UO.SetGump

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

C#-Signaturen

void UO.SetGump(object? identifier, object? key, object? stateValue);
void UO.SetGump(object? gumpId, object? identifier, object? key, object? stateValue);

Ändert das Feld eines vorhandenen Server-Gumps.

Parameter

  • gumpId – Nur Form mit vier Argumenten: serial/id oder Null-Gump-Index. Das Formular mit drei Verwendungen -1 - der ausgewählte/letzte Gump.
  • identifier – String „checkbox“, „radio“ oder „textentry“, Groß- und Kleinschreibung spielt keine Rolle. Ein nicht unterstützter Name ändert das Feld nicht.
  • key – int: erstes LocalSerial/ID-Element, dann Nullindex unter den Elementen der angegebenen Art. Kein Element – ​​Fehlermeldung.
  • stateValue – Für Kontrollkästchen/Radio: „markiert“, „true“ Groß-/Kleinschreibung wird nicht beachtet oder ein Wert ungleich Null wird erkannt. int umfasst; der andere schaltet sich aus. Für die Texteingabe – der gesamte Text bis ToString.

Rückgabewert

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

Verhalten

  • SetGumpValue ruft TrySetGumpValue auf; Mit 0 wird eine Meldung angezeigt. Ändert das lokale Feld eines bereits vorhandenen Gumps und registriert keinen Hook, der auf ein neues Fenster wartet.
  • Beim Ändern des Kontrollkästchens/Texteintrags wird selbst keine Antwort an den Server gesendet. Um zu antworten, wählen Sie die Schaltfläche über SendGumpSelect/WaitGump; Optionsfelder werden in einer separaten Ansicht verarbeitet.

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.SetGump");
UO.SetGump("checkbox", 0, 1);

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Ändert das Feld eines vorhandenen Server-Gumps.
if (Truth(UO.GetGumpsCount() > 0))
{
    UO.SetGump("checkbox", 0, 1);
}

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

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • SetGumpValue ruft TrySetGumpValue auf; Mit 0 wird eine Meldung angezeigt. Ändert das lokale Feld eines bereits vorhandenen Gumps und registriert keinen Hook, der auf ein neues Fenster wartet.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.GetGumpsCount() > 0))
    {
        UO.SetGump(0, "textentry", 0, "Example");
    }

    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 Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • Beim Ändern des Kontrollkästchens/Texteintrags wird selbst keine Antwort an den Server gesendet. Um zu antworten, wählen Sie die Schaltfläche über SendGumpSelect/WaitGump; Optionsfelder werden in einer separaten Ansicht verarbeitet.
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(UO.GetGumpsCount() > 0))
        {
            UO.SetGump("radio", 0, "true");
            UO.SetGump("checkbox", 0, 0);
        }

        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.SetGump(identifier, key, stateValue) — UO.SetGump(Any,Any,Any)

Parameter: identifier (Any), key (Any), stateValue (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public void SetGump(InjectionValue identifier, InjectionValue key, InjectionValue stateValue)

            => bridge.SetGumpValue(-1, identifier.ToString(), NumberConversions.ToInt(key), stateValue.ToString());

UO.SetGump(gumpId, identifier, key, stateValue) — UO.SetGump(Any,Any,Any,Any)

Parameter: gumpId (Any), identifier (Any), key (Any), stateValue (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public void SetGump(InjectionValue gumpId, InjectionValue identifier, InjectionValue key, InjectionValue stateValue)

            => bridge.SetGumpValue(NumberConversions.ToInt(gumpId), identifier.ToString(), NumberConversions.ToInt(key), stateValue.ToString());

UO.WaitGump

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

C#-Signaturen

void UO.WaitGump(object? value);
void UO.WaitGump(object? trigger1, object? trigger2);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7, object? trigger8);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7, object? trigger8, object? trigger9);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7, object? trigger8, object? trigger9, object? trigger10);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7, object? trigger8, object? trigger9, object? trigger10, object? trigger11);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7, object? trigger8, object? trigger9, object? trigger10, object? trigger11, object? trigger12);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7, object? trigger8, object? trigger9, object? trigger10, object? trigger11, object? trigger12, object? trigger13);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7, object? trigger8, object? trigger9, object? trigger10, object? trigger11, object? trigger12, object? trigger13, object? trigger14);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7, object? trigger8, object? trigger9, object? trigger10, object? trigger11, object? trigger12, object? trigger13, object? trigger14, object? trigger15);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7, object? trigger8, object? trigger9, object? trigger10, object? trigger11, object? trigger12, object? trigger13, object? trigger14, object? trigger15, object? trigger16);

Registriert eine Folge einmaliger Reaktionen auf Schaltflächen. Das Skript läuft sofort weiter; Das Fehlen eines Fensters führt nicht zu einer Verzögerung von 30 Sekunden.

Parameter

  • value – Sequenzelement: int ButtonID, numerisch string, Zeichenfolge mit |/Komma oder Array solcher Elemente. Die Reihenfolge erfolgt von links nach rechts. Es gelten die allgemeinen Grenzen und Regeln triggerId. Wert ist der Name des einzigen Parameters der Form object?, der auch ein Array akzeptiert.
  • trigger1 – Sequenzelement: int ButtonID, numerisch string, Zeichenfolge mit |/Komma oder Array solcher Elemente. Die Reihenfolge erfolgt von links nach rechts. Es gelten die allgemeinen Grenzen und Regeln triggerId. Wert ist der Name des einzigen Parameters der Form object?, der auch ein Array akzeptiert.
  • trigger2 – Sequenzelement: int ButtonID, numerisch string, Zeichenfolge mit |/Komma oder Array solcher Elemente. Die Reihenfolge erfolgt von links nach rechts. Es gelten die allgemeinen Grenzen und Regeln triggerId. Wert ist der Name des einzigen Parameters der Form object?, der auch ein Array akzeptiert.
  • trigger3 – Sequenzelement: int ButtonID, numerisch string, Zeichenfolge mit |/Komma oder Array solcher Elemente. Die Reihenfolge erfolgt von links nach rechts. Es gelten die allgemeinen Grenzen und Regeln triggerId. Wert ist der Name des einzigen Parameters der Form object?, der auch ein Array akzeptiert.
  • trigger4 – Sequenzelement: int ButtonID, numerisch string, Zeichenfolge mit |/Komma oder Array solcher Elemente. Die Reihenfolge erfolgt von links nach rechts. Es gelten die allgemeinen Grenzen und Regeln triggerId. Wert ist der Name des einzigen Parameters der Form object?, der auch ein Array akzeptiert.
  • trigger5 – Sequenzelement: int ButtonID, numerisch string, Zeichenfolge mit |/Komma oder Array solcher Elemente. Die Reihenfolge erfolgt von links nach rechts. Es gelten die allgemeinen Grenzen und Regeln triggerId. Wert ist der Name des einzigen Parameters der Form object?, der auch ein Array akzeptiert.
  • trigger6 – Sequenzelement: int ButtonID, numerisch string, Zeichenfolge mit |/Komma oder Array solcher Elemente. Die Reihenfolge erfolgt von links nach rechts. Es gelten die allgemeinen Grenzen und Regeln triggerId. Wert ist der Name des einzigen Parameters der Form object?, der auch ein Array akzeptiert.
  • trigger7 – Sequenzelement: int ButtonID, numerisch string, Zeichenfolge mit |/Komma oder Array solcher Elemente. Die Reihenfolge erfolgt von links nach rechts. Es gelten die allgemeinen Grenzen und Regeln triggerId. Wert ist der Name des einzigen Parameters der Form object?, der auch ein Array akzeptiert.
  • trigger8 – Sequenzelement: int ButtonID, numerisch string, Zeichenfolge mit |/Komma oder Array solcher Elemente. Die Reihenfolge erfolgt von links nach rechts. Es gelten die allgemeinen Grenzen und Regeln triggerId. Wert ist der Name des einzigen Parameters der Form object?, der auch ein Array akzeptiert.
  • trigger9 – Sequenzelement: int ButtonID, numerisch string, Zeichenfolge mit |/Komma oder Array solcher Elemente. Die Reihenfolge erfolgt von links nach rechts. Es gelten die allgemeinen Grenzen und Regeln triggerId. Wert ist der Name des einzigen Parameters der Form object?, der auch ein Array akzeptiert.
  • trigger10 – Sequenzelement: int ButtonID, numerisch string, Zeichenfolge mit |/Komma oder Array solcher Elemente. Die Reihenfolge erfolgt von links nach rechts. Es gelten die allgemeinen Grenzen und Regeln triggerId. Wert ist der Name des einzigen Parameters der Form object?, der auch ein Array akzeptiert.
  • trigger11 – Sequenzelement: int ButtonID, numerisch string, Zeichenfolge mit |/Komma oder Array solcher Elemente. Die Reihenfolge erfolgt von links nach rechts. Es gelten die allgemeinen Grenzen und Regeln triggerId. Wert ist der Name des einzigen Parameters der Form object?, der auch ein Array akzeptiert.
  • trigger12 – Sequenzelement: int ButtonID, numerisch string, Zeichenfolge mit |/Komma oder Array solcher Elemente. Die Reihenfolge erfolgt von links nach rechts. Es gelten die allgemeinen Grenzen und Regeln triggerId. Wert ist der Name des einzigen Parameters der Form object?, der auch ein Array akzeptiert.
  • trigger13 – Sequenzelement: int ButtonID, numerisch string, Zeichenfolge mit |/Komma oder Array solcher Elemente. Die Reihenfolge erfolgt von links nach rechts. Es gelten die allgemeinen Grenzen und Regeln triggerId. Wert ist der Name des einzigen Parameters der Form object?, der auch ein Array akzeptiert.
  • trigger14 – Sequenzelement: int ButtonID, numerisch string, Zeichenfolge mit |/Komma oder Array solcher Elemente. Die Reihenfolge erfolgt von links nach rechts. Es gelten die allgemeinen Grenzen und Regeln triggerId. Wert ist der Name des einzigen Parameters der Form object?, der auch ein Array akzeptiert.
  • trigger15 – Sequenzelement: int ButtonID, numerisch string, Zeichenfolge mit |/Komma oder Array solcher Elemente. Die Reihenfolge erfolgt von links nach rechts. Es gelten die allgemeinen Grenzen und Regeln triggerId. Wert ist der Name des einzigen Parameters der Form object?, der auch ein Array akzeptiert.
  • trigger16 – Sequenzelement: int ButtonID, numerisch string, Zeichenfolge mit |/Komma oder Array solcher Elemente. Die Reihenfolge erfolgt von links nach rechts. Es gelten die allgemeinen Grenzen und Regeln triggerId. Wert ist der Name des einzigen Parameters der Form object?, der auch ein Array akzeptiert.

Rückgabewert

void – gibt nichts zurück: weder Erfolg, noch einen neuen Wert, noch Serverbestätigung.

Verhalten

  • Sucht nach einem echten Activate-Button mit der gewünschten ButtonID; Schaltflächen zum Wechseln von Seiten und Fenstern ohne die erforderliche Schaltfläche werden übersprungen. Nachfolgende ID umgehen nicht das erste Warten. Für eine Markup-Übermittlung – nicht mehr als eine Antwort in einem Fenster. Das aktualisierte Markup kann dasselbe Fensterobjekt verwenden.
  • Der nächste WaitGump desselben Skripts schließt seine ausstehende Sequenz ab. Die Suche ist nicht auf GumpID beschränkt: Verwenden Sie NumGumpButton oder SendGumpSelect für eine genaue Auswahl. ButtonID=0 funktioniert nur, wenn eine vorhandene Aktivierungsschaltfläche mit ID 0 vorhanden ist; Dies ist kein universeller Verschluss.
  • Der normale Abschluss des Vorgangs erspart das Warten. Wenn Sie den Eigentümer oder Terminate mit seinem Namen stornieren, werden seine Wartezeiten entfernt; TerminateAll löscht alles, einschließlich derjenigen, die nach Abschluss der Verfahren übrig bleiben. Die Veränderung der Welt macht die Warteschlange frei. Erwartungen werden nicht im Profil gespeichert.

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

1. Eine Antwort: direktes Drehbuch

Parameter und Ablauf:

  • 100 – ButtonID der Antwort. WaitGump registriert es vor UseObject; Eine weitere Ausführung bedeutet nicht, dass der Server die Antwort bereits akzeptiert hat.
UO.WaitGump(100);
UO.UseObject("0x40001234");

2. Mehrere Schritte – Skriptfunktion

Parameter und Ablauf:

  • 7, 22 und 1 sind die ButtonIDs der sequentiellen Formulare. Diese ID werden der Reihe nach überprüft. Die Anzahl der Argumente gibt nicht die Verzögerung an; Der Anruf protokolliert die gesamte Sequenz.
return  RunScenario();
 object? RunScenario()
{
    UO.WaitGump(7, 22, 1);
    UO.UseObject("0x40001234");
    return null;
}

3. Erwartungen abbrechen – Skriptklasse

Parameter und Ablauf:

  • Die Zeile 7|22|1 gibt die gleiche Reihenfolge an. TerminateAll löscht dann alle ausstehenden Gumps und stoppt alle Vorgänge; Dies ist eine globale Aktion.
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.WaitGump("7|22|1");
        UO.TerminateAll();
        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.WaitGump(value) — UO.WaitGump(Any)

Parameter: value (Any/Integer/String)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "waitgump": CompactWaitGump(arguments); return InjectionValue.Unit;

UO.WaitGump(value) — UO.WaitGump(Integer)

Parameter: value (Any/Integer/String)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public void WaitGump(int triggerId)

        {

            if (bridge is IApiGumpAutomation automation) automation.QueueGumpButtons(new[] { triggerId });

            else bridge.WaitGumpSelect(triggerId, 30_000);

        }

UO.WaitGump(value) — UO.WaitGump(String)

Parameter: value (Any/Integer/String)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public void WaitGump(string triggerId)

        {

            string text = (triggerId ?? string.Empty).Trim();

            if (text.Contains('|') || text.Contains(','))

            {

                InjectionValue[] chain = text.Split(new[] { '|', ',' }, StringSplitOptions.RemoveEmptyEntries)

                    .Select(value => new InjectionValue(value.Trim())).ToArray();

                CompactWaitGump(chain);

                return;

            }

            WaitGump(NumberConversions.ToInt(triggerId));

        }

UO.WaitGump(trigger1, trigger2) — UO.WaitGump(Any,Any)

Parameter: trigger1 (Any), trigger2 (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Der Aufruf führt den gespeicherten Handler-Delegate aus. Die Registrierungsmethode erzeugt ihn beim Aufbau der API.

Interner Implementierungscode; kein eigenständiges Skript.

values =>

                    {

                        CompactWaitGump(values);

                        return InjectionValue.Unit;

                    }

UO.WaitGump(trigger1, trigger2, trigger3) — UO.WaitGump(Any,Any,Any)

Parameter: trigger1 (Any), trigger2 (Any), trigger3 (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Der Aufruf führt den gespeicherten Handler-Delegate aus. Die Registrierungsmethode erzeugt ihn beim Aufbau der API.

Interner Implementierungscode; kein eigenständiges Skript.

values =>

                    {

                        CompactWaitGump(values);

                        return InjectionValue.Unit;

                    }

UO.WaitGump(trigger1, trigger2, trigger3, trigger4) — UO.WaitGump(Any,Any,Any,Any)

Parameter: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Der Aufruf führt den gespeicherten Handler-Delegate aus. Die Registrierungsmethode erzeugt ihn beim Aufbau der API.

Interner Implementierungscode; kein eigenständiges Skript.

values =>

                    {

                        CompactWaitGump(values);

                        return InjectionValue.Unit;

                    }

UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5) — UO.WaitGump(Any,Any,Any,Any,Any)

Parameter: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Der Aufruf führt den gespeicherten Handler-Delegate aus. Die Registrierungsmethode erzeugt ihn beim Aufbau der API.

Interner Implementierungscode; kein eigenständiges Skript.

values =>

                    {

                        CompactWaitGump(values);

                        return InjectionValue.Unit;

                    }

UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6) — UO.WaitGump(Any,Any,Any,Any,Any,Any)

Parameter: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Der Aufruf führt den gespeicherten Handler-Delegate aus. Die Registrierungsmethode erzeugt ihn beim Aufbau der API.

Interner Implementierungscode; kein eigenständiges Skript.

values =>

                    {

                        CompactWaitGump(values);

                        return InjectionValue.Unit;

                    }

UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7) — UO.WaitGump(Any,Any,Any,Any,Any,Any,Any)

Parameter: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Der Aufruf führt den gespeicherten Handler-Delegate aus. Die Registrierungsmethode erzeugt ihn beim Aufbau der API.

Interner Implementierungscode; kein eigenständiges Skript.

values =>

                    {

                        CompactWaitGump(values);

                        return InjectionValue.Unit;

                    }

UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7, trigger8) — UO.WaitGump(Any,Any,Any,Any,Any,Any,Any,Any)

Parameter: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any), trigger8 (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Der Aufruf führt den gespeicherten Handler-Delegate aus. Die Registrierungsmethode erzeugt ihn beim Aufbau der API.

Interner Implementierungscode; kein eigenständiges Skript.

values =>

                    {

                        CompactWaitGump(values);

                        return InjectionValue.Unit;

                    }

UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7, trigger8, trigger9) — UO.WaitGump(Any,Any,Any,Any,Any,Any,Any,Any,Any)

Parameter: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any), trigger8 (Any), trigger9 (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Der Aufruf führt den gespeicherten Handler-Delegate aus. Die Registrierungsmethode erzeugt ihn beim Aufbau der API.

Interner Implementierungscode; kein eigenständiges Skript.

values =>

                    {

                        CompactWaitGump(values);

                        return InjectionValue.Unit;

                    }

UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7, trigger8, trigger9, trigger10) — UO.WaitGump(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)

Parameter: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any), trigger8 (Any), trigger9 (Any), trigger10 (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Der Aufruf führt den gespeicherten Handler-Delegate aus. Die Registrierungsmethode erzeugt ihn beim Aufbau der API.

Interner Implementierungscode; kein eigenständiges Skript.

values =>

                    {

                        CompactWaitGump(values);

                        return InjectionValue.Unit;

                    }

UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7, trigger8, trigger9, trigger10, trigger11) — UO.WaitGump(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)

Parameter: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any), trigger8 (Any), trigger9 (Any), trigger10 (Any), trigger11 (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Der Aufruf führt den gespeicherten Handler-Delegate aus. Die Registrierungsmethode erzeugt ihn beim Aufbau der API.

Interner Implementierungscode; kein eigenständiges Skript.

values =>

                    {

                        CompactWaitGump(values);

                        return InjectionValue.Unit;

                    }

UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7, trigger8, trigger9, trigger10, trigger11, trigger12) — UO.WaitGump(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)

Parameter: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any), trigger8 (Any), trigger9 (Any), trigger10 (Any), trigger11 (Any), trigger12 (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Der Aufruf führt den gespeicherten Handler-Delegate aus. Die Registrierungsmethode erzeugt ihn beim Aufbau der API.

Interner Implementierungscode; kein eigenständiges Skript.

values =>

                    {

                        CompactWaitGump(values);

                        return InjectionValue.Unit;

                    }

UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7, trigger8, trigger9, trigger10, trigger11, trigger12, trigger13) — UO.WaitGump(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)

Parameter: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any), trigger8 (Any), trigger9 (Any), trigger10 (Any), trigger11 (Any), trigger12 (Any), trigger13 (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Der Aufruf führt den gespeicherten Handler-Delegate aus. Die Registrierungsmethode erzeugt ihn beim Aufbau der API.

Interner Implementierungscode; kein eigenständiges Skript.

values =>

                    {

                        CompactWaitGump(values);

                        return InjectionValue.Unit;

                    }

UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7, trigger8, trigger9, trigger10, trigger11, trigger12, trigger13, trigger14) — UO.WaitGump(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)

Parameter: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any), trigger8 (Any), trigger9 (Any), trigger10 (Any), trigger11 (Any), trigger12 (Any), trigger13 (Any), trigger14 (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Der Aufruf führt den gespeicherten Handler-Delegate aus. Die Registrierungsmethode erzeugt ihn beim Aufbau der API.

Interner Implementierungscode; kein eigenständiges Skript.

values =>

                    {

                        CompactWaitGump(values);

                        return InjectionValue.Unit;

                    }

UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7, trigger8, trigger9, trigger10, trigger11, trigger12, trigger13, trigger14, trigger15) — UO.WaitGump(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)

Parameter: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any), trigger8 (Any), trigger9 (Any), trigger10 (Any), trigger11 (Any), trigger12 (Any), trigger13 (Any), trigger14 (Any), trigger15 (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Der Aufruf führt den gespeicherten Handler-Delegate aus. Die Registrierungsmethode erzeugt ihn beim Aufbau der API.

Interner Implementierungscode; kein eigenständiges Skript.

values =>

                    {

                        CompactWaitGump(values);

                        return InjectionValue.Unit;

                    }

UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7, trigger8, trigger9, trigger10, trigger11, trigger12, trigger13, trigger14, trigger15, trigger16) — UO.WaitGump(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)

Parameter: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any), trigger8 (Any), trigger9 (Any), trigger10 (Any), trigger11 (Any), trigger12 (Any), trigger13 (Any), trigger14 (Any), trigger15 (Any), trigger16 (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Der Aufruf führt den gespeicherten Handler-Delegate aus. Die Registrierungsmethode erzeugt ihn beim Aufbau der API.

Interner Implementierungscode; kein eigenständiges Skript.

values =>

                    {

                        CompactWaitGump(values);

                        return InjectionValue.Unit;

                    }

UO.WaitGumpCheck

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

C#-Signaturen

void UO.WaitGumpCheck(object? index, object? state);
void UO.WaitGumpCheck(object? index, object? state, object? index2, object? state2);
void UO.WaitGumpCheck(object? index, object? state, object? index2, object? state2, object? index3, object? state3);

Ändert bis zu drei Kontrollkästchenfelder des aktuellen Gumps.

Parameter

  • index – int ID Element oder Nullindex, wie SetGump. Die Argumente kommen paarweise vor: Selektor, Wert.
  • index2 – int ID Element oder Nullindex, wie SetGump. Die Argumente kommen paarweise vor: Selektor, Wert.
  • index3 – int ID Element oder Nullindex, wie SetGump. Die Argumente kommen paarweise vor: Selektor, Wert.
  • state – Feldwert bis ToString. Das Kontrollkästchen enthält „markiert“/„true“/eine Zahl ungleich Null; textentry akzeptiert Text.
  • state2 – Feldwert bis ToString. Das Kontrollkästchen enthält „markiert“/„true“/eine Zahl ungleich Null; textentry akzeptiert Text.
  • state3 – Feldwert bis ToString. Das Kontrollkästchen enthält „markiert“/„true“/eine Zahl ungleich Null; textentry akzeptiert Text.

Rückgabewert

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

Verhalten

  • ExecuteLegacyManualAlias geht die Argumente paarweise durch und ruft für jedes einzelne SetGumpValue(-1, „checkbox“, selector, value) auf. Alle registrierten Formen sind 2-, 4- oder 6-Argumente.
  • Der Name UO.Wait bedeutet nicht warten: Es gibt keine Blockierung und keine Warteschlange für zukünftiges Warten. Fehlt das Feld, wird ein Fehler angezeigt. Die Schaltflächenantwort wird nicht gesendet.

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.WaitGumpCheck");
UO.WaitGumpCheck(0, 1);

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Ändert bis zu drei Kontrollkästchenfelder des aktuellen Gumps.
if (Truth(UO.GetGumpsCount() > 0))
{
    UO.WaitGumpCheck(0, 1);
}

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

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • ExecuteLegacyManualAlias geht die Argumente paarweise durch und ruft für jedes einzelne SetGumpValue(-1, „checkbox“, selector, value) auf. Alle registrierten Formen sind 2-, 4- oder 6-Argumente.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.GetGumpsCount() > 0))
    {
        UO.WaitGumpCheck(0, 1, 1, 0);
    }

    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 Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • Der Name UO.Wait bedeutet nicht warten: Es gibt keine Blockierung und keine Warteschlange für zukünftiges Warten. Fehlt das Feld, wird ein Fehler angezeigt. Die Schaltflächenantwort wird nicht gesendet.
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(UO.GetGumpsCount() > 0))
        {
            UO.WaitGumpCheck(0, 1, 1, 0, 2, 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.WaitGumpCheck(index, state) — UO.WaitGumpCheck(Any,Any)

Parameter: index (Any), state (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "waitgumpcheck":

                    for (int index = 0; index + 1 < arguments.Length; index += 2)

                        bridge.SetGumpValue(-1, "checkbox", Arg(index), Text(index + 1));

                    break;

UO.WaitGumpCheck(index, state, index2, state2) — UO.WaitGumpCheck(Any,Any,Any,Any)

Parameter: index (Any), state (Any), index2 (Any), state2 (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "waitgumpcheck":

                    for (int index = 0; index + 1 < arguments.Length; index += 2)

                        bridge.SetGumpValue(-1, "checkbox", Arg(index), Text(index + 1));

                    break;

UO.WaitGumpCheck(index, state, index2, state2, index3, state3) — UO.WaitGumpCheck(Any,Any,Any,Any,Any,Any)

Parameter: index (Any), state (Any), index2 (Any), state2 (Any), index3 (Any), state3 (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "waitgumpcheck":

                    for (int index = 0; index + 1 < arguments.Length; index += 2)

                        bridge.SetGumpValue(-1, "checkbox", Arg(index), Text(index + 1));

                    break;

UO.WaitGumpEntry

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

C#-Signaturen

void UO.WaitGumpEntry(object? index, object? text);
void UO.WaitGumpEntry(object? index, object? text, object? index2, object? text2);
void UO.WaitGumpEntry(object? index, object? text, object? index2, object? text2, object? index3, object? text3);

Ändert bis zu drei Texteingabefelder des aktuellen Gumps.

Parameter

  • index – int ID Element oder Nullindex, wie SetGump. Die Argumente kommen paarweise vor: Selektor, Wert.
  • index2 – int ID Element oder Nullindex, wie SetGump. Die Argumente kommen paarweise vor: Selektor, Wert.
  • index3 – int ID Element oder Nullindex, wie SetGump. Die Argumente kommen paarweise vor: Selektor, Wert.
  • text – Feldwert bis ToString. Das Kontrollkästchen enthält „markiert“/„true“/eine Zahl ungleich Null; textentry akzeptiert Text.
  • text2 – Feldwert bis ToString. Das Kontrollkästchen enthält „markiert“/„true“/eine Zahl ungleich Null; textentry akzeptiert Text.
  • text3 – Feldwert bis ToString. Das Kontrollkästchen enthält „markiert“/„true“/eine Zahl ungleich Null; textentry akzeptiert Text.

Rückgabewert

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

Verhalten

  • ExecuteLegacyManualAlias geht die Argumente paarweise durch und ruft für jedes Argument SetGumpValue(-1, „textentry“, selector, value) auf. Alle registrierten Formen sind 2-, 4- oder 6-Argumente.
  • Der Name UO.Wait bedeutet nicht warten: Es gibt keine Blockierung und keine Warteschlange für zukünftiges Warten. Fehlt das Feld, wird ein Fehler angezeigt. Die Schaltflächenantwort wird nicht gesendet.

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.WaitGumpEntry");
UO.WaitGumpEntry(0, "Example");

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Ändert bis zu drei Texteingabefelder des aktuellen Gumps.
if (Truth(UO.GetGumpsCount() > 0))
{
    UO.WaitGumpEntry(0, "Example");
}

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

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • ExecuteLegacyManualAlias geht die Argumente paarweise durch und ruft für jedes Argument SetGumpValue(-1, „textentry“, selector, value) auf. Alle registrierten Formen sind 2-, 4- oder 6-Argumente.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.GetGumpsCount() > 0))
    {
        UO.WaitGumpEntry(0, "First", 1, "Second");
    }

    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 Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • Der Name UO.Wait bedeutet nicht warten: Es gibt keine Blockierung und keine Warteschlange für zukünftiges Warten. Fehlt das Feld, wird ein Fehler angezeigt. Die Schaltflächenantwort wird nicht gesendet.
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(UO.GetGumpsCount() > 0))
        {
            UO.WaitGumpEntry(0, "First", 1, "Second", 2, "Third");
        }

        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.WaitGumpEntry(index, text) — UO.WaitGumpEntry(Any,Any)

Parameter: index (Any), text (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "waitgumpentry":

                    for (int index = 0; index + 1 < arguments.Length; index += 2)

                        bridge.SetGumpValue(-1, "textentry", Arg(index), Text(index + 1));

                    break;

UO.WaitGumpEntry(index, text, index2, text2) — UO.WaitGumpEntry(Any,Any,Any,Any)

Parameter: index (Any), text (Any), index2 (Any), text2 (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "waitgumpentry":

                    for (int index = 0; index + 1 < arguments.Length; index += 2)

                        bridge.SetGumpValue(-1, "textentry", Arg(index), Text(index + 1));

                    break;

UO.WaitGumpEntry(index, text, index2, text2, index3, text3) — UO.WaitGumpEntry(Any,Any,Any,Any,Any,Any)

Parameter: index (Any), text (Any), index2 (Any), text2 (Any), index3 (Any), text3 (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "waitgumpentry":

                    for (int index = 0; index + 1 < arguments.Length; index += 2)

                        bridge.SetGumpValue(-1, "textentry", Arg(index), Text(index + 1));

                    break;
⚠️ **GitHub.com Fallback** ⚠️