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

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

Menüs und Kontextmenüs

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

Alte Menüs, Kontextmenüs und Texteingabe. Dies sind separate Mechanismen; Entnehmen Sie die Artikelnummer aus der Antwort des gewünschten Menüs.

Abschnitte

Thema Befehle und Erklärungen
AutoMenu UO.AutoMenu
WaitMenu UO.WaitMenu
Menu Hooks UO.MenuHookPresent · UO.CancelAllMenuHooks
Menüelemente UO.GetMenuItems · UO.GetMenuItemsEx · UO.GetLastMenuItems
CancelMenu UO.CancelMenu
Context Menu UO.GetContextMenu · UO.ClearContextMenu
RequestContextMenu UO.RequestContextMenu
Context Menu Hooks UO.SetContextMenuHook

Alle Theme-Befehle

Menüs

UO.AutoMenu · UO.WaitMenu · UO.GetMenuItems · UO.GetMenuItemsEx · UO.GetLastMenuItems · UO.MenuHookPresent · UO.MenuPresent · UO.CancelAllMenuHooks · UO.CancelMenu · UO.CloseMenu · UO.WaitingForMenu · UO.WaitingMenu

Kontextmenü

UO.GetContextMenu · UO.RequestContextMenu · UO.SetContextMenuHook · UO.ClearContextMenu

Texteingabe

UO.WaitTextEntry · UO.ConsoleEntryReply · UO.ConsoleEntryUnicodeReply

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

Parameter, Ergebnis und alle Szenarien

var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
    UO.RequestContextMenu(id);
}

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

UO.WaitMenu

Parameter, Ergebnis und alle Szenarien

UO.WaitMenu("Craft", "Tools");

Vollständige Befehlsreferenz


UO.AutoMenu

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

C#-Signaturen

void UO.AutoMenu(object? prompt, object? choice);

Registriert einen dauerhaften Menü-Hook: Wenn ein Servermenü mit einer passenden Beschriftung erscheint, wählt der Client das entsprechende Element aus. Der Aufruf öffnet das Menü nicht und wartet nicht synchron darauf.

Parameter

  • prompt – Teilzeichenfolge des Servermenütitels.
  • choice – Teilzeichenfolge der Menüpunktsignatur.

Rückgabewert

void. Der Aufruf registriert nur einen Hook und meldet nicht, ob das Menü gefunden wurde oder ob der Eintrag erfolgreich ausgewählt wurde.

Verhalten

  • Bei jeder Aktualisierung des Clients sucht der Hook nach einem Servermenü, das noch nicht geschlossen wurde und dessen Titel prompt enthält. Wenn ein Element gefunden wird, dessen Signatur choice enthält, wählt der Client es aus. Der Hook bleibt nach der Auswahl registriert, sodass er bei nachfolgenden passenden Menüs funktioniert. Sie können Haken mit UO.CancelMenu() entfernen.

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.AutoMenu");
UO.AutoMenu("Choose material", "Copper");

1. Warten Sie auf ein Menü mit dem Titel „Material auswählen“ und wählen Sie den Eintrag mit dem Text „Kupfer“ aus. - direktes Drehbuch

Parameter und Ablauf:

  • Warten Sie auf ein Menü mit dem Titel „Material auswählen“ und wählen Sie den Eintrag mit dem Text „Kupfer“ aus.
UO.AutoMenu("Choose material", "Copper");

2. Teilzeichenfolgen werden ohne Berücksichtigung der Groß- und Kleinschreibung verglichen. Hook wirkt sich auch auf nachfolgende übereinstimmende Menüs aus. - Skriptfunktion

Parameter und Ablauf:

  • Teilzeichenfolgen werden ohne Berücksichtigung der Groß- und Kleinschreibung verglichen. Hook wirkt sich auch auf nachfolgende übereinstimmende Menüs aus.
return  RunScenario();
 object? RunScenario()
{
    var menuCaption = "choose color";
    var itemCaption = "blue";
    UO.AutoMenu(menuCaption, itemCaption);
    return null;
}

3. Registrieren Sie einen Hook für die Dauer dieser Aufgabe und löschen Sie dann alle Hooks für diesen Client. - Skriptklasse

Parameter und Ablauf:

  • Registrieren Sie einen Hook für die Dauer dieser Aufgabe und löschen Sie dann alle Hooks für diesen Client.
  • Bevor das Menü angezeigt wird, können weitere Skriptaktionen ausgeführt 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()
    {
        UO.AutoMenu("Choose material", "Iron");
        UO.CancelMenu();
        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.AutoMenu(prompt, choice) — UO.AutoMenu(Any,Any)

Parameter: prompt (Any), choice (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "automenu":

                    if (arguments.Length >= 2) bridge.AddMenuHook(arguments[0].ToString(), arguments[1].ToString(), true);

                    break;

UO.CancelAllMenuHooks

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

C#-Signaturen

void UO.CancelAllMenuHooks();

Entfernt alle registrierten automatischen Hooks aus alten Client-Server-Menüs.

Parameter

Es gibt keine Parameter.

Rückgabewert

void – kein Rückgabewert.

Verhalten

  • Ruft den ClearMenuHooks-Manager an. Einzelne und dauerhafte Auswahlregeln werden entfernt, einschließlich AutoMenu und WaitMenu. Dieser Befehl schließt bereits geöffnete Menüs nicht; Hierfür wird CloseMenu verwendet.

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

1. Alle Hooks entfernen – direktes Skript

Parameter und Ablauf:

  • Die Entfernung gilt für den gesamten Satz von Client-Menü-Hooks.
UO.CancelAllMenuHooks();

2. Aktion einschränken AutoMenu - Skriptfunktion

Parameter und Ablauf:

  • Der Haken wird sofort entfernt; Zukünftig passende Menüs werden nicht mehr automatisch ausgewählt.
return  RunScenario();
 object? RunScenario()
{
    UO.AutoMenu("Choose material", "Iron");
    UO.CancelAllMenuHooks();
    return null;
}

3. Stoppen Sie die automatische Auswahl und schließen Sie das Menü – Skriptklasse

Parameter und Ablauf:

  • Der erste Befehl entfernt Hooks; Der zweite bricht separat geöffnete alte Menüs ab.
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.CancelAllMenuHooks();
        UO.CloseMenu();
        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.CancelAllMenuHooks() — UO.CancelAllMenuHooks()

Parameter: Keine Parameter.

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "cancelallmenuhooks": bridge.ClearMenuHooks(); return InjectionValue.Unit;

UO.CancelMenu

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

C#-Signaturen

void UO.CancelMenu();

Entfernt alle registrierten automatischen Hooks aus alten Client-Server-Menüs.

Parameter

Es gibt keine Parameter.

Rückgabewert

void – kein Rückgabewert.

Verhalten

  • Ruft den ClearMenuHooks-Manager an. Einzelne und dauerhafte Auswahlregeln werden entfernt, einschließlich AutoMenu und WaitMenu. Dieser Befehl schließt bereits geöffnete Menüs nicht; Hierfür wird CloseMenu verwendet.

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

1. Alle Hooks entfernen – direktes Skript

Parameter und Ablauf:

  • Die Entfernung gilt für den gesamten Satz von Client-Menü-Hooks.
UO.CancelMenu();

2. Aktion einschränken AutoMenu - Skriptfunktion

Parameter und Ablauf:

  • Der Haken wird sofort entfernt; Zukünftig passende Menüs werden nicht mehr automatisch ausgewählt.
return  RunScenario();
 object? RunScenario()
{
    UO.AutoMenu("Choose material", "Iron");
    UO.CancelMenu();
    return null;
}

3. Stoppen Sie die automatische Auswahl und schließen Sie das Menü – Skriptklasse

Parameter und Ablauf:

  • Der erste Befehl entfernt Hooks; Der zweite bricht separat geöffnete alte Menüs ab.
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.CancelMenu();
        UO.CloseMenu();
        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.CancelMenu() — UO.CancelMenu()

Parameter: Keine Parameter.

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "cancelmenu": bridge.ClearMenuHooks(); break;

UO.ClearContextMenu

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

C#-Signaturen

void UO.ClearContextMenu();

Entfernt das aktuelle lokale Kontextmenümodell.

Parameter

Es gibt keine Parameter.

Rückgabewert

void – kein Rückgabewert.

Verhalten

  • Ruft Dispose auf ServerMenus.Context auf, wenn ein Modell vorhanden ist; Nach der nächsten Anfrage erscheint möglicherweise ein neues Servermenü. Das ist nicht CloseMenu.

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

1. Status löschen – direktes Skript

Parameter und Ablauf:

  • Entfernt das aktuelle lokale Kontextmenümodell.
UO.ClearContextMenu();

2. Nach dem Setup löschen – Skriptfunktion

Parameter und Ablauf:

  • Lokales Kontextmenü nach dem Lesen des Snapshots entfernen.
return  RunScenario();
 object? RunScenario()
{
    var entries = UO.GetContextMenu();
    UO.ClearContextMenu();
    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.ClearContextMenu();
        UO.ClearContextMenu();
        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.ClearContextMenu() — UO.ClearContextMenu()

Parameter: Keine Parameter.

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "clearcontextmenu": bridge.ClearContextMenu(); return InjectionValue.Unit;

UO.CloseMenu

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

C#-Signaturen

void UO.CloseMenu();

Bricht alle aktiven alten Servermenüs über CancelForYoko ab.

Parameter

Es gibt keine Parameter.

Rückgabewert

void – kein Rückgabewert.

Verhalten

  • Durchläuft Snapshot ServerMenus und verwirft jedes Modell. Entfernt keine automatischen Menü-Hooks und schließt keine beliebigen Gump-/Schnittstellenfenster.

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

1. Offene Menüs abbrechen – direktes Skript

Parameter und Ablauf:

  • Die Stornierung gilt für alte MenuGump/Server-Menüs.
UO.CloseMenu();

2. Haken entfernen und Menü abbrechen – Skriptfunktion

Parameter und Ablauf:

  • Die automatische Auswahl und das Öffnen von Menüs werden durch separate Befehle verwaltet.
return  RunScenario();
 object? RunScenario()
{
    UO.CancelAllMenuHooks();
    UO.CloseMenu();
    return null;
}

3. Nach Ansicht abbrechen – Skriptklasse

Parameter und Ablauf:

  • Ein Schnappschuss der Liste wird auch nach dem Abbrechen des Menüs in den Elementen gespeichert.
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 items = UO.GetLastMenuItems();
        UO.Print(Convert.ToString(ArrayLength(items)));
        UO.CloseMenu();
        return null;
    }

    int ArrayLength(object? value) => value is System.Array array ? array.Length : 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.CloseMenu() — UO.CloseMenu()

Parameter: Keine Parameter.

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "closemenu": bridge.CloseMenu(); return InjectionValue.Unit;

UO.ConsoleEntryReply

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

C#-Signaturen

void UO.ConsoleEntryReply(object? text);

Antwortet mit Text auf die Eingabeaufforderung des aktiven Servers über MessageManager.SendServerPromptResponse.

Parameter

  • text – Der Wert, der in eine Zeichenfolge konvertiert werden soll. Als leere Antwort wird ein leerer String gesendet.

Rückgabewert

void – kein Rückgabewert.

Verhalten

  • Beide Teams gehen zu ReplyServerPrompt. Der Pakettyp ASCII/Unicode wird basierend auf dem gespeicherten Server-Prompt-Status ausgewählt; Der Befehlsname erzwingt keine separate Kodierung. Wenn keine aktive Eingabeaufforderung vorliegt, sendet der Manager keine Antwort.

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

1. Antwort auf die Eingabeaufforderung – direktes Skript

Parameter und Ablauf:

  • Das Senden bezieht sich auf die aktuelle Server-Eingabeanforderung.
UO.ConsoleEntryReply("reply");

2. Leere Antwort – Skriptfunktion

Parameter und Ablauf:

  • Leerer Text wird als leere Antwort an den Manager gesendet.
return  RunScenario();
 object? RunScenario()
{
    UO.ConsoleEntryReply("");
    return null;
}

3. Antwort von Variable – Skriptklasse

Parameter und Ablauf:

  • Der Variablenname hat keinen Einfluss auf das ausgewählte Server-Eingabeaufforderungsformat.
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 reply = "New item name";
        UO.ConsoleEntryReply(reply);
        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.ConsoleEntryReply(text) — UO.ConsoleEntryReply(Any)

Parameter: text (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "consoleentryreply":

                case "consoleentryunicodereply": bridge.ReplyServerPrompt(Text(0)); return InjectionValue.Unit;

UO.ConsoleEntryUnicodeReply

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

C#-Signaturen

void UO.ConsoleEntryUnicodeReply(object? text);

Antwortet mit Text auf die Eingabeaufforderung des aktiven Servers über MessageManager.SendServerPromptResponse.

Parameter

  • text – Der Wert, der in eine Zeichenfolge konvertiert werden soll. Als leere Antwort wird ein leerer String gesendet.

Rückgabewert

void – kein Rückgabewert.

Verhalten

  • Beide Teams gehen zu ReplyServerPrompt. Der Pakettyp ASCII/Unicode wird basierend auf dem gespeicherten Server-Prompt-Status ausgewählt; Der Befehlsname erzwingt keine separate Kodierung. Wenn keine aktive Eingabeaufforderung vorliegt, sendet der Manager keine Antwort.

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

1. Antwort auf die Eingabeaufforderung – direktes Skript

Parameter und Ablauf:

  • Das Senden bezieht sich auf die aktuelle Server-Eingabeanforderung.
UO.ConsoleEntryUnicodeReply("reply");

2. Leere Antwort – Skriptfunktion

Parameter und Ablauf:

  • Leerer Text wird als leere Antwort an den Manager gesendet.
return  RunScenario();
 object? RunScenario()
{
    UO.ConsoleEntryUnicodeReply("");
    return null;
}

3. Antwort von Variable – Skriptklasse

Parameter und Ablauf:

  • Der Variablenname hat keinen Einfluss auf das ausgewählte Server-Eingabeaufforderungsformat.
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 reply = "New item name";
        UO.ConsoleEntryUnicodeReply(reply);
        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.ConsoleEntryUnicodeReply(text) — UO.ConsoleEntryUnicodeReply(Any)

Parameter: text (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "consoleentryreply":

                case "consoleentryunicodereply": bridge.ReplyServerPrompt(Text(0)); return InjectionValue.Unit;

UO.GetContextMenu

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

C#-Signaturen

dynamic UO.GetContextMenu();

Liest die Elementzeichenfolgen des aktuellen Kontextmenümodells.

Parameter

Es gibt keine Parameter.

Rückgabewert

Array von Strings aus ServerMenus.Context.GetYokoItems(); Wenn kein Modell vorhanden ist, ein leeres Array.

Verhalten

  • Sendet kein RequestContextMenu und wartet nicht auf eine Serverantwort. Um ein neues Menü zu erhalten, fordern Sie es zunächst separat an und warten Sie, bis das Modell angezeigt wird. ClearContextMenu löscht das Modell nach dem Lesen.

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

1. Aktuelles Menü lesen – Direktskript

Parameter und Ablauf:

  • Das vorhandene Modell wird gelesen.
var entries = UO.GetContextMenu();
for (int i = (int)(0); i <= ArrayLength(entries)-1; i += (int)(1))
{
    UO.Print(entries[i]);
}

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

2. Anfordern und später lesen – Skriptfunktion

Parameter und Ablauf:

  • 500 ms – Beispielpause, keine Garantie für eine Serverantwort; Ein leeres Array ist akzeptabel.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    UO.RequestContextMenu(UO.Self());
    await Delay(500);
    var entries = UO.GetContextMenu();
    UO.Print(Convert.ToString(ArrayLength(entries)));
    return null;
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3. Snapshot vor der Bereinigung – Skriptklasse

Parameter und Ablauf:

  • Das gespeicherte Array verschwindet nach dem Löschen des Menümodells nicht.
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 entries = UO.GetContextMenu();
        UO.ClearContextMenu();
        UO.Print(Convert.ToString(ArrayLength(entries)));
        return null;
    }

    int ArrayLength(object? value) => value is System.Array array ? array.Length : 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.GetContextMenu() — UO.GetContextMenu()

Parameter: Keine Parameter.

Ergebnis: dynamic / Any.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "getcontextmenu": return StringArray(bridge.GetContextMenu());

UO.GetLastMenuItems

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

C#-Signaturen

dynamic UO.GetLastMenuItems();

Liest die Elemente des bereits geöffneten alten Servermenüs.

Parameter

Es gibt keine Parameter.

Rückgabewert

Array von Strings. Artikelname/Beschreibungszeilen GetYokoItems. Das Fehlen eines geeigneten Menüs führt zu einem leeren Array.

Verhalten

  • Das letzte Fotomenü ServerMenus ist ausgewählt. Der Befehl öffnet das Menü nicht, setzt keinen Haken und wählt kein Element aus. Dies ist kein Kontextmenü oder ein normales Server-Gump.
  • Die Reihenfolge entspricht den Punkten des Modells. Die Liste ist eine Momentaufnahme; Nachfolgende Menüänderungen aktualisieren das gespeicherte Array 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.GetLastMenuItems();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Alle Elemente anzeigen – direktes Skript

Parameter und Ablauf:

  • Ein leeres Array ist schleifensicher.
var items = UO.GetLastMenuItems();
for (int i = (int)(0); i <= ArrayLength(items)-1; i += (int)(1))
{
    UO.Print(items[i]);
}

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

2. Der erste Punkt ist die Skriptfunktion

Parameter und Ablauf:

  • Der Index 0 wird erst nach Überprüfung der Größe gelesen.
return  RunScenario();
 object? RunScenario()
{
    var items = UO.GetLastMenuItems();
    if (Truth(ArrayLength(items) > 0))
    {
        UO.Print(items[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;

3. Snapshot vor dem Schließen speichern – Skriptklasse

Parameter und Ablauf:

  • Das Array bleibt auch nach Abbruch des Servermenüs verfügbar.
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 items = UO.GetLastMenuItems();
        UO.CloseMenu();
        UO.Print(Convert.ToString(ArrayLength(items)));
        return null;
    }

    int ArrayLength(object? value) => value is System.Array array ? array.Length : 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.GetLastMenuItems() — UO.GetLastMenuItems()

Parameter: Keine Parameter.

Ergebnis: dynamic / Any.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "getlastmenuitems": return StringArray(bridge.GetLastMenuItems());

UO.GetMenuItems

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

C#-Signaturen

dynamic UO.GetMenuItems(object? caption);

Liest die Elemente des bereits geöffneten alten Servermenüs.

Parameter

  • caption – Teilzeichenfolge des Titels des alten Servermenüs; Suche OrdinalIgnoreCase. Eine leere Zeile entspricht einer beliebigen Überschrift.

Rückgabewert

Array von Strings. Artikelname/Beschreibungszeilen GetYokoItems. Das Fehlen eines geeigneten Menüs führt zu einem leeren Array.

Verhalten

  • Das letzte nicht entsorgte Menü mit der passenden Titelteilzeichenfolge wird ausgewählt. Der Befehl öffnet das Menü nicht, setzt keinen Haken und wählt kein Element aus. Dies ist kein Kontextmenü oder ein normales Server-Gump.
  • Die Reihenfolge entspricht den Punkten des Modells. Die Liste ist eine Momentaufnahme; Nachfolgende Menüänderungen aktualisieren das gespeicherte Array 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.GetMenuItems("");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Alle Elemente anzeigen – direktes Skript

Parameter und Ablauf:

  • Ein leeres Array ist schleifensicher.
var items = UO.GetMenuItems("");
for (int i = (int)(0); i <= ArrayLength(items)-1; i += (int)(1))
{
    UO.Print(items[i]);
}

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

2. Der erste Punkt ist die Skriptfunktion

Parameter und Ablauf:

  • Der Index 0 wird erst nach Überprüfung der Größe gelesen.
return  RunScenario();
 object? RunScenario()
{
    var items = UO.GetMenuItems("");
    if (Truth(ArrayLength(items) > 0))
    {
        UO.Print(items[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;

3. Snapshot vor dem Schließen speichern – Skriptklasse

Parameter und Ablauf:

  • Das Array bleibt auch nach Abbruch des Servermenüs verfügbar.
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 items = UO.GetMenuItems("");
        UO.CloseMenu();
        UO.Print(Convert.ToString(ArrayLength(items)));
        return null;
    }

    int ArrayLength(object? value) => value is System.Array array ? array.Length : 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.GetMenuItems(caption) — UO.GetMenuItems(Any)

Parameter: caption (Any)

Ergebnis: dynamic / Any.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "getmenuitems": return StringArray(bridge.GetMenuItems(Text(0), false));

UO.GetMenuItemsEx

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

C#-Signaturen

dynamic UO.GetMenuItemsEx(object? caption);

Liest die Elemente des bereits geöffneten alten Servermenüs.

Parameter

  • caption – Teilzeichenfolge des Titels des alten Servermenüs; Suche OrdinalIgnoreCase. Eine leere Zeile entspricht einer beliebigen Überschrift.

Rückgabewert

Array von Strings. Zeichenfolgen graphicHex|hueHex|index|name, zum Beispiel 0x0001|0x0000|1|choice. Das Fehlen eines geeigneten Menüs führt zu einem leeren Array.

Verhalten

  • Das letzte nicht entsorgte Menü mit der passenden Titelteilzeichenfolge wird ausgewählt. Der Befehl öffnet das Menü nicht, setzt keinen Haken und wählt kein Element aus. Dies ist kein Kontextmenü oder ein normales Server-Gump.
  • Die Reihenfolge entspricht den Punkten des Modells. Die Liste ist eine Momentaufnahme; Nachfolgende Menüänderungen aktualisieren das gespeicherte Array 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.GetMenuItemsEx("");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Alle Elemente anzeigen – direktes Skript

Parameter und Ablauf:

  • Ein leeres Array ist schleifensicher.
var items = UO.GetMenuItemsEx("");
for (int i = (int)(0); i <= ArrayLength(items)-1; i += (int)(1))
{
    UO.Print(items[i]);
}

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

2. Der erste Punkt ist die Skriptfunktion

Parameter und Ablauf:

  • Der Index 0 wird erst nach Überprüfung der Größe gelesen.
return  RunScenario();
 object? RunScenario()
{
    var items = UO.GetMenuItemsEx("");
    if (Truth(ArrayLength(items) > 0))
    {
        UO.Print(items[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;

3. Snapshot vor dem Schließen speichern – Skriptklasse

Parameter und Ablauf:

  • Das Array bleibt auch nach Abbruch des Servermenüs verfügbar.
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 items = UO.GetMenuItemsEx("");
        UO.CloseMenu();
        UO.Print(Convert.ToString(ArrayLength(items)));
        return null;
    }

    int ArrayLength(object? value) => value is System.Array array ? array.Length : 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.GetMenuItemsEx(caption) — UO.GetMenuItemsEx(Any)

Parameter: caption (Any)

Ergebnis: dynamic / Any.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "getmenuitemsex": return StringArray(bridge.GetMenuItems(Text(0), true));

UO.MenuHookPresent

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

C#-Signaturen

dynamic UO.MenuHookPresent();

Liest das Vorhandensein registrierter Menü-Hooks.

Parameter

Es gibt keine Parameter.

Rückgabewert

Numerisches Flag int: 1 – _manager.HasMenuHooks, 0 – keine Haken. Möglicherweise fehlt noch das Menü selbst.

Verhalten

  • Liest das Vorhandensein registrierter Menü-Hooks. Wartet nicht auf ein Menü, prüft nicht auf Serverprobleme und verbraucht keinen Hook.
  • Liest den aktuellen lokalen Status. Es gibt kein Paket, Ziel oder automatische Aktualisierung; Einzelne Lesevorgänge können unterschiedliche Zustände aufweisen.

Eigenständige C#-Skripte

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

Einfaches Beispiel

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

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

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

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Liest das Vorhandensein registrierter Menü-Hooks.
UO.Print(UO.MenuHookPresent());

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • Liest das Vorhandensein registrierter Menü-Hooks. Wartet nicht auf ein Menü, prüft nicht auf Serverprobleme und verbraucht keinen Hook.
return  RunScenario();
 object? RunScenario()
{
    UO.WaitMenu("Craft", "Tools");
    UO.Print(UO.MenuHookPresent());
    return null;
}

3. Vollständige Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • Liest den aktuellen lokalen Status. Es gibt kein Paket, Ziel oder automatische Aktualisierung; Einzelne Lesevorgänge können unterschiedliche Zustände aufweisen.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var before = UO.MenuHookPresent();
        UO.Wait(500);
        var after = UO.MenuHookPresent();
        UO.Print(before);
        UO.Print(after);
        return null;
    }
}

Implementierung des Befehls

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

UO.MenuHookPresent() — UO.MenuHookPresent()

Parameter: Keine Parameter.

Ergebnis: dynamic / Any.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "menuhookpresent": return new InjectionValue(bridge.MenuHookPresent());

UO.MenuPresent

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

C#-Signaturen

dynamic UO.MenuPresent();

MenuPresent ruft direkt WaitingMenu auf.

Parameter

Es gibt keine Parameter.

Rückgabewert

Numerisches Flag int: 1 – es gibt ein Servermenü, 0 – nein.

Verhalten

  • MenuPresent ruft direkt WaitingMenu auf. Überprüft nicht GetGumpsCount, Kontextmenüs oder registrierte Hooks.
  • Liest den aktuellen lokalen Status. Es gibt kein Paket, Ziel oder automatische Aktualisierung; Einzelne Lesevorgänge können unterschiedliche Zustände aufweisen.

Eigenständige C#-Skripte

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

Einfaches Beispiel

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

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

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

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • MenuPresent ruft direkt WaitingMenu auf.
UO.Print(UO.MenuPresent());

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • MenuPresent ruft direkt WaitingMenu auf. Überprüft nicht GetGumpsCount, Kontextmenüs oder registrierte Hooks.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.MenuPresent()))
    {
        UO.Print(UO.GetLastMenuItems());
    }

    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:

  • Liest den aktuellen lokalen Status. Es gibt kein Paket, Ziel oder automatische Aktualisierung; Einzelne Lesevorgänge können unterschiedliche Zustände aufweisen.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var before = UO.MenuPresent();
        UO.Wait(500);
        var after = UO.MenuPresent();
        UO.Print(before);
        UO.Print(after);
        return null;
    }
}

Implementierung des Befehls

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

UO.MenuPresent() — UO.MenuPresent()

Parameter: Keine Parameter.

Ergebnis: dynamic / Any.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "menupresent": return new InjectionValue(bridge.MenuPresent());

UO.RequestContextMenu

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

C#-Signaturen

void UO.RequestContextMenu(object? objID);

Fordert das Kontextmenü des Objekts an.

Parameter

  • objID – Serielles/ID-Objekt: int, numerische/Hex-Zeichenfolge oder etablierter Alias, zum Beispiel „lasttarget“. Dies ist nicht graphic/type. Überprüfen Sie das geladene Objekt, bevor Sie Maßnahmen ergreifen.

Rückgabewert

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

Verhalten

  • Bridge-Aufrufe GameActions.OpenPopupMenu. Die Antwort wird separat gespeichert und lautet GetContextMenu; Der Befehl wählt die Menüleiste nicht aus.
  • Bridge sendet die Anfrage im Game-Stream. Es gelten die Serverregeln; Es gibt kein eingebautes Warten auf Bestätigung.

Eigenständige C#-Skripte

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

Einfaches Beispiel

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

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

UO.Print("Calling UO.RequestContextMenu");
UO.RequestContextMenu(UO.GetSerial("lasttarget"));

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Fordert das Kontextmenü des Objekts an.
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
    UO.RequestContextMenu(id);
}

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-Aufrufe GameActions.OpenPopupMenu. Die Antwort wird separat gespeichert und lautet GetContextMenu; Der Befehl wählt die Menüleiste nicht aus.
return  RunScenario();
 object? RunScenario()
{
    var id = UO.GetSerial("self");
    if (Truth(UO.Exists(id)))
    {
        UO.RequestContextMenu(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. Vollständige Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • Bridge sendet die Anfrage im Game-Stream. Es gelten die Serverregeln; Es gibt kein eingebautes Warten auf Bestätigung.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        ApplyToLoaded(UO.GetSerial("lasttarget"));
        return null;
    }

    void ApplyToLoaded(dynamic id)
    {
        if (Truth(UO.Exists(id)))
        {
            UO.RequestContextMenu(id);
        }
    }

    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.RequestContextMenu(objID) — UO.RequestContextMenu(Any)

Parameter: objID (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "requestcontextmenu": bridge.RequestContextMenu(Arg(0)); return InjectionValue.Unit;

UO.SetContextMenuHook

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

C#-Signaturen

void UO.SetContextMenuHook(object? menuID, object? entryNumber);

Registriert eine einmalige Auswahl eines Kontextmenüelements.

Parameter

  • menuID – Seriennummer des Menüobjekts, reduziert auf uint; 0 passt zu jedem serial. Das ist kein Serverfehler ID.
  • entryNumber — Nullpunktindex; Ein negativer Wert deaktiviert den ausstehenden Kontext-Hook. 0..GetArrayLength(UO.GetContextMenu())-1.

Rückgabewert

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

Verhalten

  • Bridge übergibt Daten an _manager.SetContextMenuHook, wo _contextMenuSerial/_contextMenuEntry gespeichert ist. Der ProcessMenuHooks-Handler wartet auf ein vorhandenes passendes Kontextmenü.
  • Wenn SelectYokoItem erfolgreich ist, werden die Felder auf 0/-1 gelöscht. Das Menü wird von diesem Setter nicht angefordert: Verwenden Sie nur RequestContextMenu. Der Aufruf selbst blockiert oder bestätigt die Serveraktion 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.

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

UO.Print("Calling UO.SetContextMenuHook");
UO.SetContextMenuHook(0, 0);

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Registriert eine einmalige Auswahl eines Kontextmenüelements.
UO.SetContextMenuHook(0, 0);

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • Bridge übergibt Daten an _manager.SetContextMenuHook, wo _contextMenuSerial/_contextMenuEntry gespeichert ist. Der ProcessMenuHooks-Handler wartet auf ein vorhandenes passendes Kontextmenü.
return  RunScenario();
 object? RunScenario()
{
    var id = UO.GetSerial("lasttarget");
    UO.SetContextMenuHook(UO.Hex2Int(id), 0);
    UO.RequestContextMenu(id);
    return null;
}

3. Vollständige Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • Wenn SelectYokoItem erfolgreich ist, werden die Felder auf 0/-1 gelöscht. Das Menü wird von diesem Setter nicht angefordert: Verwenden Sie nur RequestContextMenu. Der Aufruf selbst blockiert oder bestätigt die Serveraktion nicht.
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.SetContextMenuHook(0, -1);
        UO.Print(UO.GetContextMenu());
        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.SetContextMenuHook(menuID, entryNumber) — UO.SetContextMenuHook(Any,Any)

Parameter: menuID (Any), entryNumber (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "setcontextmenuhook": bridge.SetContextMenuHook(Arg(0), Arg(1)); return InjectionValue.Unit;

UO.WaitMenu

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

C#-Signaturen

void UO.WaitMenu(object? menuCaption, object? elementCaption);
void UO.WaitMenu(object? prompt1, object? choice1, object? prompt2, object? choice2);
void UO.WaitMenu(object? prompt1, object? choice1, object? prompt2, object? choice2, object? prompt3, object? choice3);

Registriert bis zu drei einmalige Menü-Hooks.

Parameter

  • menuCaption / prompt1 / prompt2 / prompt3 – Vorlagenzeichenfolge für den Titel des Servermenüs. Paare werden in der Reihenfolge Header, Element übergeben.
  • menuCaption – Vorlagenzeichenfolge für den Titel des Servermenüs. Paare werden in der Reihenfolge Header, Element übergeben.
  • prompt1 – Vorlagenzeichenfolge für den Titel des Servermenüs. Paare werden in der Reihenfolge Header, Element übergeben.
  • prompt2 – Vorlagenzeichenfolge für den Titel des Servermenüs. Paare werden in der Reihenfolge Header, Element übergeben.
  • prompt3 – Vorlagenzeichenfolge für den Titel des Servermenüs. Paare werden in der Reihenfolge Header, Element übergeben.
  • elementCaption / choice1 / choice2 / choice3 — Zeile zur Auswahl eines Elements für den entsprechenden Header. Nicht die normale Gump-Taste ID.
  • elementCaption — Zeile zur Auswahl eines Elements für den entsprechenden Header. Nicht die normale Gump-Taste ID.
  • choice1 — Zeile zur Auswahl eines Elements für den entsprechenden Header. Nicht die normale Gump-Taste ID.
  • choice2 — Zeile zur Auswahl eines Elements für den entsprechenden Header. Nicht die normale Gump-Taste ID.
  • choice3 — Zeile zur Auswahl eines Elements für den entsprechenden Header. Nicht die normale Gump-Taste ID.

Rückgabewert

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

Verhalten

  • Jedes Paar wird an _manager.AddMenuHook(prompt, choice, false) übergeben. Registrierte Formen sind 2/4/6-Argumente. false bezeichnet einen einmaligen Hook; AutoMenu/zwei Argumente VendorMenu verwenden einen konstanten Hook.
  • Blockiert das Skript nicht, bis das Menü angezeigt wird. Hook wird vom Manager verbraucht, wenn das Menü geeignet ist; Das Ergebnis der Ausführung durch den Server wird nicht zurückgegeben. Für ein Menü verwenden Sie WaitingMenu, für Hooks - MenuHookPresent.
  • Bei Menü-/Auswahlformularen wählt der Manager das erste Menü aus, dessen Titel Eingabeaufforderung enthält, ohne Berücksichtigung der Groß- und Kleinschreibung; SessionMenu wählt das erste Element aus, dessen Name eine Auswahl enthält, wobei die Groß- und Kleinschreibung ebenfalls nicht berücksichtigt wird. Leerer Text ist für jeden geeignet; Numerischer Text ist ein Fragment des Namens, kein Index. Bei erfolgreicher Auswahl wird eine Antwort gesendet und das lokale Menü geschlossen. Ein einmaliger Hook wird erst nach erfolgreicher Auswahl gelöscht; Es bleibt ein permanenter Haken übrig.

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.WaitMenu");
UO.WaitMenu("Craft", "Tools");

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Registriert bis zu drei einmalige Menü-Hooks.
UO.WaitMenu("Craft", "Tools");

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • Jedes Paar wird an _manager.AddMenuHook(prompt, choice, false) übergeben. Registrierte Formen sind 2/4/6-Argumente. false bezeichnet einen einmaligen Hook; AutoMenu/zwei Argumente VendorMenu verwenden einen konstanten Hook.
return  RunScenario();
 object? RunScenario()
{
    UO.WaitMenu("Craft", "Tools", "Tools", "Shovel");
    return null;
}

3. Vollständige Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • Blockiert das Skript nicht, bis das Menü angezeigt wird. Hook wird vom Manager verbraucht, wenn das Menü geeignet ist; Das Ergebnis der Ausführung durch den Server wird nicht zurückgegeben. Für ein Menü verwenden Sie WaitingMenu, für Hooks - MenuHookPresent.
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.WaitMenu("Craft", "Tools", "Tools", "Shovel", "Amount", "One");
        UO.Print(UO.MenuHookPresent());
        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.WaitMenu(menuCaption, elementCaption) — UO.WaitMenu(Any,Any)

Parameter: menuCaption (Any/String), elementCaption (Any/String)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "waitmenu": bridge.WaitMenu(arguments.Select(value => value.ToString()).ToArray()); return InjectionValue.Unit;

UO.WaitMenu(menuCaption, elementCaption) — UO.WaitMenu(String,String)

Parameter: menuCaption (Any/String), elementCaption (Any/String)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public void WaitMenu(string prompt, string choice)

            => bridge.WaitMenu(prompt, choice);

UO.WaitMenu(prompt1, choice1, prompt2, choice2) — UO.WaitMenu(String,String,String,String)

Parameter: prompt1 (String), choice1 (String), prompt2 (String), choice2 (String)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public void WaitMenu(string prompt1, string choice1, string prompt2, string choice2)

            => bridge.WaitMenu(prompt1, choice1, prompt2, choice2);

UO.WaitMenu(prompt1, choice1, prompt2, choice2, prompt3, choice3) — UO.WaitMenu(String,String,String,String,String,String)

Parameter: prompt1 (String), choice1 (String), prompt2 (String), choice2 (String), prompt3 (String), choice3 (String)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public void WaitMenu(string prompt1, string choice1, string prompt2, string choice2, string prompt3, string choice3)

            => bridge.WaitMenu(prompt1, choice1, prompt2, choice2, prompt3, choice3);

UO.WaitTextEntry

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

C#-Signaturen

void UO.WaitTextEntry(object? value);

Versucht, Text in den Texteintrag des aktuellen Gumps zu schreiben.

Parameter

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

Rückgabewert

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

Verhalten

  • ExecuteClientApiCompatibility ruft SetGumpValue(-1, „textentry“, -1, Text(0)) auf. key=-1 ist kein normaler Nullindex: Schreiben ist nur möglich, wenn ein vorhandenes Feld einem solchen ID in der Gump-Implementierung zugeordnet ist.
  • Wartet nicht auf einen zukünftigen Gump, öffnet keine Eingabeaufforderung und registriert keinen Hook. Wenn kein passendes Feld vorhanden ist, zeigt SetGumpValue eine Meldung an. Verwenden Sie für ein bekanntes Feld SetGump mit einem expliziten ID/index.

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

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Versucht, Text in den Texteintrag des aktuellen Gumps zu schreiben.
UO.WaitTextEntry("Example");

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • ExecuteClientApiCompatibility ruft SetGumpValue(-1, „textentry“, -1, Text(0)) auf. key=-1 ist kein normaler Nullindex: Schreiben ist nur möglich, wenn ein vorhandenes Feld einem solchen ID in der Gump-Implementierung zugeordnet ist.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.GetGumpsCount() > 0))
    {
        UO.WaitTextEntry("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:

  • Wartet nicht auf einen zukünftigen Gump, öffnet keine Eingabeaufforderung und registriert keinen Hook. Wenn kein passendes Feld vorhanden ist, zeigt SetGumpValue eine Meldung an. Verwenden Sie für ein bekanntes Feld SetGump mit einem expliziten ID/index.
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.WaitTextEntry("Example");
        UO.Print("Check the target field in the current gump");
        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.WaitTextEntry(value) — UO.WaitTextEntry(Any)

Parameter: value (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "waittextentry": bridge.SetGumpValue(-1, "textentry", -1, Text(0)); return InjectionValue.Unit;

UO.WaitingForMenu

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

C#-Signaturen

int UO.WaitingForMenu(object? delay);
int UO.WaitingForMenu(object? delay, object? menuCount);
int UO.WaitingForMenu(object? delay, object? menuCount, object? blockMenu);
int UO.WaitingForMenu(object? delay, object? menuCount, object? blockMenu, object? menuName);
int UO.WaitingForMenu(object? delayValue, object? menuCountValue, object? blockMenuValue, object? menuNameValue, object? skillOrSerial);

Die erforderliche Anzahl an Servermenüauftritten ist begrenzt.

Parameter

  • delay – int-Timeout in Millisekunden, negativ wird zu 0. Auch bei 0 wird eine Prüfung durchgeführt.
  • delayValue – int-Timeout in Millisekunden, negativ wird zu 0. Auch bei 0 wird eine Prüfung durchgeführt.
  • menuCount – Optionale Anzahl von Auftritten, mindestens 1; Der Standardwert ist 1. Dies ist nicht die Anzahl der Menüpunkte.
  • menuCountValue – Optionale Anzahl von Auftritten, mindestens 1; Der Standardwert ist 1. Dies ist nicht die Anzahl der Menüpunkte.
  • blockMenu – Eine optionale Zahl ungleich Null schließt das Menü, wenn die Bedingung erfüllt ist; 0 verlässt ihn.
  • blockMenuValue – Eine optionale Zahl ungleich Null schließt das Menü, wenn die Bedingung erfüllt ist; 0 verlässt ihn.
  • menuName – Optionaler genauer Titel, Groß- und Kleinschreibung beachten; leer erlaubt jedem.
  • menuNameValue – Optionaler genauer Titel, Groß- und Kleinschreibung beachten; leer erlaubt jedem.
  • skillOrSerial – Optionales letztes Argument: TriggerWaitAction kann zuerst die Fertigkeit mit dem Namen oder das Objekt mit dem Namen serial verwenden. Standardmäßig ist 0 keine Aktion.

Rückgabewert

Numerisches Flag int: 1 – mindestens menuCount verschiedene Vorkommen werden bemerkt und das letzte hat den gewünschten Titel; 0 – Zeitüberschreitung. Das vorhandene Menü kann sofort gezählt werden.

Verhalten

  • Nach TriggerWaitAction steht GetLastMenuIdentity; Die neue Identität erhöht den Zähler. Eine leere Identität setzt den Speicher der vorherigen zurück, sodass dasselbe Menü nach dem Schließen/Neuöffnen erneut gezählt werden kann.
  • Die Zählgrenze wird nur mit einer neuen Identität überprüft. Wenn und übereinstimmt, schließt blockMenu das Menü. Zwischen den Prüfungen UO.Wait bis 25 ms; Der Header wird anhand der Ordinalzahl überprüft, nicht anhand der Teilzeichenfolge.

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

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Die erforderliche Anzahl an Servermenüauftritten ist begrenzt.
UO.Print(UO.WaitingForMenu(3000));

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • Nach TriggerWaitAction steht GetLastMenuIdentity; Die neue Identität erhöht den Zähler. Eine leere Identität setzt den Speicher der vorherigen zurück, sodass dasselbe Menü nach dem Schließen/Neuöffnen erneut gezählt werden kann.
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.WaitingForMenu(3000, 1, 1, "Craft"));
    return null;
}

3. Vollständige Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • Die Zählgrenze wird nur mit einer neuen Identität überprüft. Wenn und übereinstimmt, schließt blockMenu das Menü. Zwischen den Prüfungen UO.Wait bis 25 ms; Der Header wird anhand der Ordinalzahl überprüft, nicht anhand der Teilzeichenfolge.
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 found = UO.WaitingForMenu(3000, 1, 0, "Craft", "lasttarget");
        if (Truth(found))
        {
            UO.Print(UO.GetLastMenuItems());
        }

        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.WaitingForMenu(delay) — UO.WaitingForMenu(Any)

Parameter: delay (Any)

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public int WaitingForMenu(InjectionValue delay) => WaitingForMenu(delay, InjectionValue.Zero, InjectionValue.Zero, new InjectionValue(string.Empty), InjectionValue.Zero);

UO.WaitingForMenu(delay, menuCount) — UO.WaitingForMenu(Any,Any)

Parameter: delay (Any), menuCount (Any)

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public int WaitingForMenu(InjectionValue delay, InjectionValue menuCount) => WaitingForMenu(delay, menuCount, InjectionValue.Zero, new InjectionValue(string.Empty), InjectionValue.Zero);

UO.WaitingForMenu(delay, menuCount, blockMenu) — UO.WaitingForMenu(Any,Any,Any)

Parameter: delay (Any), menuCount (Any), blockMenu (Any)

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public int WaitingForMenu(InjectionValue delay, InjectionValue menuCount, InjectionValue blockMenu) => WaitingForMenu(delay, menuCount, blockMenu, new InjectionValue(string.Empty), InjectionValue.Zero);

UO.WaitingForMenu(delay, menuCount, blockMenu, menuName) — UO.WaitingForMenu(Any,Any,Any,Any)

Parameter: delay (Any), menuCount (Any), blockMenu (Any), menuName (Any)

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public int WaitingForMenu(InjectionValue delay, InjectionValue menuCount, InjectionValue blockMenu, InjectionValue menuName) => WaitingForMenu(delay, menuCount, blockMenu, menuName, InjectionValue.Zero);

UO.WaitingForMenu(delayValue, menuCountValue, blockMenuValue, menuNameValue, skillOrSerial) — UO.WaitingForMenu(Any,Any,Any,Any,Any)

Parameter: delayValue (Any), menuCountValue (Any), blockMenuValue (Any), menuNameValue (Any), skillOrSerial (Any)

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public int WaitingForMenu(InjectionValue delayValue, InjectionValue menuCountValue, InjectionValue blockMenuValue, InjectionValue menuNameValue, InjectionValue skillOrSerial)

        {

            int delay = Math.Max(0, NumberConversions.ToInt(delayValue));

            int requiredMenuCount = Math.Max(1, NumberConversions.ToInt(menuCountValue));

            bool blockMenu = NumberConversions.ToInt(blockMenuValue) != 0;

            string expectedName = menuNameValue.ToString() ?? string.Empty;

            DateTime deadline = timeSource.Now.AddMilliseconds(delay);

            string previousIdentity = string.Empty;

            int observedMenuCount = 0;



            TriggerWaitAction(skillOrSerial);



            do

            {

                string identity = bridge.GetLastMenuIdentity() ?? string.Empty;

                if (identity.Length == 0)

                {

                    // Reset between server menus so an identical menu opened again

                    // still counts as a new appearance.

                    previousIdentity = string.Empty;

                }

                else if (!identity.Equals(previousIdentity, StringComparison.Ordinal))

                {

                    previousIdentity = identity;

                    observedMenuCount++;

                    string caption = bridge.GetLastMenuCaption() ?? string.Empty;

                    bool nameMatches = expectedName.Length == 0

                        || caption.Equals(expectedName, StringComparison.Ordinal);

                    if (observedMenuCount >= requiredMenuCount && nameMatches)

                    {

                        if (blockMenu)

                            bridge.CloseMenu();

                        return 1;

                    }

                }



                if (timeSource.Now >= deadline)

                    break;

                bridge.Wait(Math.Min(25, Math.Max(1, delay)));

            }

            while (true);



            return 0;

        }

UO.WaitingMenu

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

C#-Signaturen

int UO.WaitingMenu();

Liest _world.ServerMenus.Snapshot().Length != 0.

Parameter

Es gibt keine Parameter.

Rückgabewert

Numerisches Flag int: 1 – ServerMenus hat mindestens ein Menü, 0 – nicht. Hier geht es darum, ein Menü zu haben und nicht auf ein Skript zu warten.

Verhalten

  • Liest _world.ServerMenus.Snapshot().Length != 0. Legacy-Servermenüs sind von regulären Server-Gumps und Kontextmenüs getrennt.
  • Liest den aktuellen lokalen Status. Es gibt kein Paket, Ziel oder automatische Aktualisierung; Einzelne Lesevorgänge können unterschiedliche Zustände aufweisen.

Eigenständige C#-Skripte

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

Einfaches Beispiel

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

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

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

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Liest _world.ServerMenus.Snapshot().Length != 0.
UO.Print(UO.WaitingMenu());

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • Liest _world.ServerMenus.Snapshot().Length != 0. Legacy-Servermenüs sind von regulären Server-Gumps und Kontextmenüs getrennt.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.WaitingMenu()))
    {
        UO.Print(UO.GetLastMenuItems());
    }

    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:

  • Liest den aktuellen lokalen Status. Es gibt kein Paket, Ziel oder automatische Aktualisierung; Einzelne Lesevorgänge können unterschiedliche Zustände aufweisen.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var before = UO.WaitingMenu();
        UO.Wait(500);
        var after = UO.WaitingMenu();
        UO.Print(before);
        UO.Print(after);
        return null;
    }
}

Implementierung des Befehls

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

UO.WaitingMenu() — UO.WaitingMenu()

Parameter: Keine Parameter.

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public int WaitingMenu() => bridge.WaitingMenu();
⚠️ **GitHub.com Fallback** ⚠️