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

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

Handel

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

Fenster zum sicheren Austausch zwischen Spielern: Teilnehmer, Container, Status, Bestätigung und Stornierung.

Abschnitte

Thema Befehle und Erklärungen
IsTrade UO.IsTrade
Handelsgegner UO.GetTradeOpponent · UO.GetTradeOpponentName
Handelscontainer UO.GetTradeContainer
ConfirmTrade UO.ConfirmTrade
CancelTrade UO.CancelTrade

Alle Theme-Befehle

Sicherer Handel

UO.IsTrade · UO.TradeCount · UO.TradeCheck · UO.TradeContainer · UO.GetTradeContainer · UO.TradeOpponent · UO.GetTradeOpponent · UO.TradeName · UO.GetTradeOpponentName · UO.ConfirmTrade · UO.CancelTrade

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

Parameter, Ergebnis und alle Szenarien

var value = UO.GetTradeContainer(1, 1);
UO.Print(Hex(value));

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

UO.ConfirmTrade

Parameter, Ergebnis und alle Szenarien

var result = UO.ConfirmTrade(1);
if (Truth(Truth(result) == true))
{
    UO.Print("Local request processed");
}

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

Vollständige Befehlsreferenz


UO.CancelTrade

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

C#-Signaturen

dynamic UO.CancelTrade(object? tradeNum);

Bricht den ausgewählten Austausch ab und schließt sein Fenster.

Parameter

  • tradeNum – Ganzzahl: aktuelle Fensternummer von 1 bis TradeCount(). 0 und negative Werte sind nicht zulässig. Das ist nicht serial.

Rückgabewert

int: 1 (Bedingung erfüllt) – das Fenster wird gefunden, geschlossen und über das Schließen wird eine Löschanforderung gesendet; 0 (Bedingung nicht erfüllt) – kein Fenster. Dabei wird nicht auf eine Serverantwort gewartet. Durch erneutes Abbrechen des geschlossenen Fensters wird das zweite Paket nicht gesendet.

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

  • GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade Zahlenfenster mit 1; TradeContainer/TradeOpponent/TradeName und alle Formen von TradeCheck – ab 0. Dies ist eine offensichtliche Kompatibilität dieses Clients: Externe Nachschlagewerke für verschiedene Engines verwenden unterschiedliche Referenzpunkte.
  • Das Lesen erfolgt im Spielthread unter Verwendung von Live-Fenstern der aktuellen Welt. Geschlossene Fenster zählen nicht. Leseaufrufe senden keine Pakete und warten nicht auf eine Antwort. Die Reihenfolge von UI kann sich beim Öffnen, Schließen und Verschieben des Fensters nach oben ändern; Die Nummer ist keine dauerhafte Kennung.
  • ConfirmTrade und sein TradeCheck-Datensatz senden das Paket nur, wenn sich die Zustimmung ändert. Die Zustimmung einer anderen Person wird vom Server bestimmt. CancelTrade sendet die Stornierung einmalig. 1/true ist der örtliche Status/die Verarbeitung und keine Garantie für den Abschluss des Austauschs. Namen und beide Vereinbarungen beweisen nicht, dass sich die Zusammensetzung der Gegenstände nicht geändert hat.

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

1. Direktes Lesen oder Handeln – direktes Drehbuch

Parameter und Ablauf:

  • Der Aufruf erfolgt einmalig, das Ergebnis wird in value/result gespeichert. 0 ist der erste Index, 1 ist die erste Zahl (siehe Syntax dieses Befehls). HEX zeigt numerisches serial; Konvertieren.ToString – Zahl oder Zeichenfolge.
var result = UO.CancelTrade(1);
if (Truth(Truth(result) == true))
{
    UO.Print("Local request processed");
}

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

2. Andere Skripte und Optionen – Skriptfunktion

Parameter und Ablauf:

  • ConfirmTrade und sein TradeCheck-Datensatz senden das Paket nur, wenn sich die Zustimmung ändert. Die Zustimmung einer anderen Person wird vom Server bestimmt. CancelTrade sendet die Stornierung einmalig. 1/true ist der örtliche Status/die Verarbeitung und keine Garantie für den Abschluss des Austauschs. Namen und beide Vereinbarungen beweisen nicht, dass sich die Zusammensetzung der Gegenstände nicht geändert hat.
return  RunScenario();
 object? RunScenario()
{
    var tradeNumber = 2;
    if (Truth(UO.TradeCount() >= tradeNumber))
    {
        var result = UO.CancelTrade(tradeNumber);
        UO.Print(Convert.ToString(result));
    }

    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ändiger Helfer mit allen Funktionen – Skriptklasse

Parameter und Ablauf:

  • Der Helfer ist vollständig angegeben und wird tatsächlich vom Main aus angerufen. Bereichs-/ID-Prüfungen verringern das Fehlerrisiko, aber mehrere Aufrufe sind nicht atomar: Das Fenster kann sich zwischen ihnen ändern. Für Aktion expectedPartner – gespeichertes serial-Zeichen; Dies ist keine Überprüfung des Preises oder Inhalts der Börse.
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 expectedPartner = UO.GetTradeOpponent(1);
        var result = ApplyToPartner(1, expectedPartner);
        UO.Print(Convert.ToString(result));
        return null;
    }

    dynamic ApplyToPartner(dynamic tradeNumber, dynamic expectedPartner)
    {
        if (Truth(expectedPartner == 0))
        {
            return false;
        }

        if (Truth(UO.GetTradeOpponent(tradeNumber) != expectedPartner))
        {
            return false;
        }

        return UO.CancelTrade(tradeNumber);
    }

    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.CancelTrade(tradeNum) — UO.CancelTrade(Any)

Parameter: tradeNum (Any)

Ergebnis: dynamic / Any.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "canceltrade": return new InjectionValue(bridge.CancelTrade(Arg(0)));

UO.ConfirmTrade

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

C#-Signaturen

dynamic UO.ConfirmTrade(object? tradeNum);

Setzt das benutzerdefinierte Zustimmungsflag für die ausgewählte Börse.

Parameter

  • tradeNum – Ganzzahl: aktuelle Fensternummer von 1 bis TradeCount(). 0 und negative Werte sind nicht zulässig. Das ist nicht serial.

Rückgabewert

int: 1 (Bedingung erfüllt) – das Fenster wird gefunden und seine eigene Vereinbarung ist aktiviert (oder wurde bereits aktiviert); 0 (Bedingung nicht erfüllt) – kein Fenster. Bestätigt nicht die Übertragung von Elementen durch den Server. Durch einen erneuten Anruf wird die Einwilligung nicht widerrufen.

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

  • GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade Zahlenfenster mit 1; TradeContainer/TradeOpponent/TradeName und alle Formen von TradeCheck – ab 0. Dies ist eine offensichtliche Kompatibilität dieses Clients: Externe Nachschlagewerke für verschiedene Engines verwenden unterschiedliche Referenzpunkte.
  • Das Lesen erfolgt im Spielthread unter Verwendung von Live-Fenstern der aktuellen Welt. Geschlossene Fenster zählen nicht. Leseaufrufe senden keine Pakete und warten nicht auf eine Antwort. Die Reihenfolge von UI kann sich beim Öffnen, Schließen und Verschieben des Fensters nach oben ändern; Die Nummer ist keine dauerhafte Kennung.
  • ConfirmTrade und sein TradeCheck-Datensatz senden das Paket nur, wenn sich die Zustimmung ändert. Die Zustimmung einer anderen Person wird vom Server bestimmt. CancelTrade sendet die Stornierung einmalig. 1/true ist der örtliche Status/die Verarbeitung und keine Garantie für den Abschluss des Austauschs. Namen und beide Vereinbarungen beweisen nicht, dass sich die Zusammensetzung der Gegenstände nicht geändert hat.

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

1. Direktes Lesen oder Handeln – direktes Drehbuch

Parameter und Ablauf:

  • Der Aufruf erfolgt einmalig, das Ergebnis wird in value/result gespeichert. 0 ist der erste Index, 1 ist die erste Zahl (siehe Syntax dieses Befehls). HEX zeigt numerisches serial; Konvertieren.ToString – Zahl oder Zeichenfolge.
var result = UO.ConfirmTrade(1);
if (Truth(Truth(result) == true))
{
    UO.Print("Local request processed");
}

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

2. Andere Skripte und Optionen – Skriptfunktion

Parameter und Ablauf:

  • ConfirmTrade und sein TradeCheck-Datensatz senden das Paket nur, wenn sich die Zustimmung ändert. Die Zustimmung einer anderen Person wird vom Server bestimmt. CancelTrade sendet die Stornierung einmalig. 1/true ist der örtliche Status/die Verarbeitung und keine Garantie für den Abschluss des Austauschs. Namen und beide Vereinbarungen beweisen nicht, dass sich die Zusammensetzung der Gegenstände nicht geändert hat.
return  RunScenario();
 object? RunScenario()
{
    var tradeNumber = 2;
    if (Truth(UO.TradeCount() >= tradeNumber))
    {
        var result = UO.ConfirmTrade(tradeNumber);
        UO.Print(Convert.ToString(result));
    }

    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ändiger Helfer mit allen Funktionen – Skriptklasse

Parameter und Ablauf:

  • Der Helfer ist vollständig angegeben und wird tatsächlich vom Main aus angerufen. Bereichs-/ID-Prüfungen verringern das Fehlerrisiko, aber mehrere Aufrufe sind nicht atomar: Das Fenster kann sich zwischen ihnen ändern. Für Aktion expectedPartner – gespeichertes serial-Zeichen; Dies ist keine Überprüfung des Preises oder Inhalts der Börse.
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 expectedPartner = UO.GetTradeOpponent(1);
        var result = ApplyToPartner(1, expectedPartner);
        UO.Print(Convert.ToString(result));
        return null;
    }

    dynamic ApplyToPartner(dynamic tradeNumber, dynamic expectedPartner)
    {
        if (Truth(expectedPartner == 0))
        {
            return false;
        }

        if (Truth(UO.GetTradeOpponent(tradeNumber) != expectedPartner))
        {
            return false;
        }

        return UO.ConfirmTrade(tradeNumber);
    }

    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.ConfirmTrade(tradeNum) — UO.ConfirmTrade(Any)

Parameter: tradeNum (Any)

Ergebnis: dynamic / Any.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "confirmtrade": return new InjectionValue(bridge.ConfirmTrade(Arg(0)));

UO.GetTradeContainer

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

C#-Signaturen

dynamic UO.GetTradeContainer(object? tradeNum, object? num);

Gibt den numerischen serial eines von zwei Austauschcontainern zurück.

Parameter

  • tradeNum – Ganzzahl: aktuelle Fensternummer von 1 bis TradeCount(). 0 und negative Werte sind nicht zulässig. Das ist nicht serial.
  • num – 1 – eigener Container, 2 – Partner-Container. Die restlichen Werte geben 0 zurück.

Rückgabewert

int: 32 Bit serial Container; 0 wenn kein Fenster oder falsche Nummer vorhanden ist. Das ist nicht type. Das höchstwertige Bit bleibt erhalten: prüfen Sie != 0, nicht > 0 oder == true.

Verhalten

  • GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade Zahlenfenster mit 1; TradeContainer/TradeOpponent/TradeName und alle Formen von TradeCheck – ab 0. Dies ist eine offensichtliche Kompatibilität dieses Clients: Externe Nachschlagewerke für verschiedene Engines verwenden unterschiedliche Referenzpunkte.
  • Das Lesen erfolgt im Spielthread unter Verwendung von Live-Fenstern der aktuellen Welt. Geschlossene Fenster zählen nicht. Leseaufrufe senden keine Pakete und warten nicht auf eine Antwort. Die Reihenfolge von UI kann sich beim Öffnen, Schließen und Verschieben des Fensters nach oben ändern; Die Nummer ist keine dauerhafte Kennung.
  • ConfirmTrade und sein TradeCheck-Datensatz senden das Paket nur, wenn sich die Zustimmung ändert. Die Zustimmung einer anderen Person wird vom Server bestimmt. CancelTrade sendet die Stornierung einmalig. 1/true ist der örtliche Status/die Verarbeitung und keine Garantie für den Abschluss des Austauschs. Namen und beide Vereinbarungen beweisen nicht, dass sich die Zusammensetzung der Gegenstände nicht geändert hat.

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

1. Direktes Lesen oder Handeln – direktes Drehbuch

Parameter und Ablauf:

  • Der Aufruf erfolgt einmalig, das Ergebnis wird in value/result gespeichert. 0 ist der erste Index, 1 ist die erste Zahl (siehe Syntax dieses Befehls). HEX zeigt numerisches serial; Konvertieren.ToString – Zahl oder Zeichenfolge.
var value = UO.GetTradeContainer(1, 1);
UO.Print(Hex(value));

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

2. Andere Skripte und Optionen – Skriptfunktion

Parameter und Ablauf:

  • total – Momentaufnahme der Anzahl der Fenster; index – aktueller Index/Nummer. Das Aufzählungsbeispiel bestätigt nichts. In GetTradeContainer lesen zwei Aufrufe ihren Container (1) und den eines anderen (2) des ersten Fensters (1).
return  RunScenario();
 object? RunScenario()
{
    var ours = UO.GetTradeContainer(1, 1);
    var theirs = UO.GetTradeContainer(1, 2);
    UO.Print(Hex(ours) + " / " + Hex(theirs));
    return null;
}

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

3. Vollständiger Helfer mit allen Funktionen – Skriptklasse

Parameter und Ablauf:

  • Der Helfer ist vollständig angegeben und wird tatsächlich vom Main aus angerufen. Bereichs-/ID-Prüfungen verringern das Fehlerrisiko, aber mehrere Aufrufe sind nicht atomar: Das Fenster kann sich zwischen ihnen ändern. Für Aktion expectedPartner – gespeichertes serial-Zeichen; Dies ist keine Überprüfung des Preises oder Inhalts der Börse.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var value = ReadTradeValue(1);
        UO.Print(Hex(value));
        return null;
    }

    dynamic ReadTradeValue(dynamic index)
    {
        var total = UO.TradeCount();
        if (Truth(index < 1) || Truth(index >= total + 1))
        {
            return 0;
        }

        return UO.GetTradeContainer(index, 1);
    }

    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;
}

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.GetTradeContainer(tradeNum, num) — UO.GetTradeContainer(Any,Any)

Parameter: tradeNum (Any), num (Any)

Ergebnis: dynamic / Any.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "gettradecontainer": return new InjectionValue(bridge.GetTradeContainer(Arg(0), Arg(1)));

UO.GetTradeOpponent

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

C#-Signaturen

dynamic UO.GetTradeOpponent(object? tradeNum);

Gibt den numerischen serial des Partnerzeichens zurück.

Parameter

  • tradeNum – Ganzzahl: aktuelle Fensternummer von 1 bis TradeCount(). 0 und negative Werte sind nicht zulässig. Das ist nicht serial.

Rückgabewert

int: serial Zeichen aus LocalSerial Fenster; 0 wenn kein Fenster vorhanden ist. Kein Container und kein bool; check != 0.

Verhalten

  • GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade Zahlenfenster mit 1; TradeContainer/TradeOpponent/TradeName und alle Formen von TradeCheck – ab 0. Dies ist eine offensichtliche Kompatibilität dieses Clients: Externe Nachschlagewerke für verschiedene Engines verwenden unterschiedliche Referenzpunkte.
  • Das Lesen erfolgt im Spielthread unter Verwendung von Live-Fenstern der aktuellen Welt. Geschlossene Fenster zählen nicht. Leseaufrufe senden keine Pakete und warten nicht auf eine Antwort. Die Reihenfolge von UI kann sich beim Öffnen, Schließen und Verschieben des Fensters nach oben ändern; Die Nummer ist keine dauerhafte Kennung.
  • ConfirmTrade und sein TradeCheck-Datensatz senden das Paket nur, wenn sich die Zustimmung ändert. Die Zustimmung einer anderen Person wird vom Server bestimmt. CancelTrade sendet die Stornierung einmalig. 1/true ist der örtliche Status/die Verarbeitung und keine Garantie für den Abschluss des Austauschs. Namen und beide Vereinbarungen beweisen nicht, dass sich die Zusammensetzung der Gegenstände nicht geändert hat.

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

1. Direktes Lesen oder Handeln – direktes Drehbuch

Parameter und Ablauf:

  • Der Aufruf erfolgt einmalig, das Ergebnis wird in value/result gespeichert. 0 ist der erste Index, 1 ist die erste Zahl (siehe Syntax dieses Befehls). HEX zeigt numerisches serial; Konvertieren.ToString – Zahl oder Zeichenfolge.
var value = UO.GetTradeOpponent(1);
UO.Print(Hex(value));

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

2. Andere Skripte und Optionen – Skriptfunktion

Parameter und Ablauf:

  • total – Momentaufnahme der Anzahl der Fenster; index – aktueller Index/Nummer. Das Aufzählungsbeispiel bestätigt nichts. In GetTradeContainer lesen zwei Aufrufe ihren Container (1) und den eines anderen (2) des ersten Fensters (1).
return  RunScenario();
 object? RunScenario()
{
    var total = UO.TradeCount();
    for (int index = (int)(1); index <= total - 0; index += (int)(1))
    {
        var value = UO.GetTradeOpponent(index);
        UO.Print(Convert.ToString(index) + ": " + Hex(value));
    }

    return null;
}

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

3. Vollständiger Helfer mit allen Funktionen – Skriptklasse

Parameter und Ablauf:

  • Der Helfer ist vollständig angegeben und wird tatsächlich vom Main aus angerufen. Bereichs-/ID-Prüfungen verringern das Fehlerrisiko, aber mehrere Aufrufe sind nicht atomar: Das Fenster kann sich zwischen ihnen ändern. Für Aktion expectedPartner – gespeichertes serial-Zeichen; Dies ist keine Überprüfung des Preises oder Inhalts der Börse.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var value = ReadTradeValue(1);
        UO.Print(Hex(value));
        return null;
    }

    dynamic ReadTradeValue(dynamic index)
    {
        var total = UO.TradeCount();
        if (Truth(index < 1) || Truth(index >= total + 1))
        {
            return 0;
        }

        return UO.GetTradeOpponent(index);
    }

    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;
}

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.GetTradeOpponent(tradeNum) — UO.GetTradeOpponent(Any)

Parameter: tradeNum (Any)

Ergebnis: dynamic / Any.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "gettradeopponent": return new InjectionValue(bridge.GetTradeOpponent(Arg(0)));

UO.GetTradeOpponentName

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

C#-Signaturen

dynamic UO.GetTradeOpponentName(object? tradeNum);

Gibt den zusammen mit dem Austauschfenster erhaltenen Partnernamen zurück.

Parameter

  • tradeNum – Ganzzahl: aktuelle Fensternummer von 1 bis TradeCount(). 0 und negative Werte sind nicht zulässig. Das ist nicht serial.

Rückgabewert

string: Name aus dem Exchange-Eröffnungspaket; leere Zeichenfolge, wenn kein Fenster oder Name vorhanden ist. Fragt nicht noch einmal nach dem Namen.

Verhalten

  • GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade Zahlenfenster mit 1; TradeContainer/TradeOpponent/TradeName und alle Formen von TradeCheck – ab 0. Dies ist eine offensichtliche Kompatibilität dieses Clients: Externe Nachschlagewerke für verschiedene Engines verwenden unterschiedliche Referenzpunkte.
  • Das Lesen erfolgt im Spielthread unter Verwendung von Live-Fenstern der aktuellen Welt. Geschlossene Fenster zählen nicht. Leseaufrufe senden keine Pakete und warten nicht auf eine Antwort. Die Reihenfolge von UI kann sich beim Öffnen, Schließen und Verschieben des Fensters nach oben ändern; Die Nummer ist keine dauerhafte Kennung.
  • ConfirmTrade und sein TradeCheck-Datensatz senden das Paket nur, wenn sich die Zustimmung ändert. Die Zustimmung einer anderen Person wird vom Server bestimmt. CancelTrade sendet die Stornierung einmalig. 1/true ist der örtliche Status/die Verarbeitung und keine Garantie für den Abschluss des Austauschs. Namen und beide Vereinbarungen beweisen nicht, dass sich die Zusammensetzung der Gegenstände nicht geändert hat.

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

1. Direktes Lesen oder Handeln – direktes Drehbuch

Parameter und Ablauf:

  • Der Aufruf erfolgt einmalig, das Ergebnis wird in value/result gespeichert. 0 ist der erste Index, 1 ist die erste Zahl (siehe Syntax dieses Befehls). HEX zeigt numerisches serial; Konvertieren.ToString – Zahl oder Zeichenfolge.
var value = UO.GetTradeOpponentName(1);
UO.Print(Convert.ToString(value));

2. Andere Skripte und Optionen – Skriptfunktion

Parameter und Ablauf:

  • total – Momentaufnahme der Anzahl der Fenster; index – aktueller Index/Nummer. Das Aufzählungsbeispiel bestätigt nichts. In GetTradeContainer lesen zwei Aufrufe ihren Container (1) und den eines anderen (2) des ersten Fensters (1).
return  RunScenario();
 object? RunScenario()
{
    var total = UO.TradeCount();
    for (int index = (int)(1); index <= total - 0; index += (int)(1))
    {
        var value = UO.GetTradeOpponentName(index);
        UO.Print(Convert.ToString(index) + ": " + Convert.ToString(value));
    }

    return null;
}

3. Vollständiger Helfer mit allen Funktionen – Skriptklasse

Parameter und Ablauf:

  • Der Helfer ist vollständig angegeben und wird tatsächlich vom Main aus angerufen. Bereichs-/ID-Prüfungen verringern das Fehlerrisiko, aber mehrere Aufrufe sind nicht atomar: Das Fenster kann sich zwischen ihnen ändern. Für Aktion expectedPartner – gespeichertes serial-Zeichen; Dies ist keine Überprüfung des Preises oder Inhalts der Börse.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var value = ReadTradeValue(1);
        UO.Print(Convert.ToString(value));
        return null;
    }

    dynamic ReadTradeValue(dynamic index)
    {
        var total = UO.TradeCount();
        if (Truth(index < 1) || Truth(index >= total + 1))
        {
            return "";
        }

        return UO.GetTradeOpponentName(index);
    }

    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.GetTradeOpponentName(tradeNum) — UO.GetTradeOpponentName(Any)

Parameter: tradeNum (Any)

Ergebnis: dynamic / Any.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "gettradeopponentname": return new InjectionValue(bridge.GetTradeOpponentName(Arg(0)));

UO.IsTrade

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

C#-Signaturen

int UO.IsTrade();

Prüft, ob ein sicheres Austauschfenster geöffnet ist.

Parameter

Es gibt keine Parameter.

Rückgabewert

int: 1 (Bedingung erfüllt) – es liegt ein offener Austausch vor; 0 (Bedingung nicht erfüllt) – nein.

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

  • GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade Zahlenfenster mit 1; TradeContainer/TradeOpponent/TradeName und alle Formen von TradeCheck – ab 0. Dies ist eine offensichtliche Kompatibilität dieses Clients: Externe Nachschlagewerke für verschiedene Engines verwenden unterschiedliche Referenzpunkte.
  • Das Lesen erfolgt im Spielthread unter Verwendung von Live-Fenstern der aktuellen Welt. Geschlossene Fenster zählen nicht. Leseaufrufe senden keine Pakete und warten nicht auf eine Antwort. Die Reihenfolge von UI kann sich beim Öffnen, Schließen und Verschieben des Fensters nach oben ändern; Die Nummer ist keine dauerhafte Kennung.
  • ConfirmTrade und sein TradeCheck-Datensatz senden das Paket nur, wenn sich die Zustimmung ändert. Die Zustimmung einer anderen Person wird vom Server bestimmt. CancelTrade sendet die Stornierung einmalig. 1/true ist der örtliche Status/die Verarbeitung und keine Garantie für den Abschluss des Austauschs. Namen und beide Vereinbarungen beweisen nicht, dass sich die Zusammensetzung der Gegenstände nicht geändert hat.

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

1. Direktes Lesen oder Handeln – direktes Drehbuch

Parameter und Ablauf:

  • Der Aufruf erfolgt einmalig, das Ergebnis wird in value/result gespeichert. 0 ist der erste Index, 1 ist die erste Zahl (siehe Syntax dieses Befehls). HEX zeigt numerisches serial; Konvertieren.ToString – Zahl oder Zeichenfolge.
var value = UO.IsTrade();
UO.Print(Convert.ToString(value));

2. Andere Skripte und Optionen – Skriptfunktion

Parameter und Ablauf:

  • Vorher/Nachher – zwei separate Schnappschüsse mit einem Intervall von 500 Millisekunden. Die Pause wartet nicht auf einen bestimmten Austausch; Zwischen den Lesungen kann sich der Zustand mehrmals ändern.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.IsTrade();
    await Delay(500);
    var after = UO.IsTrade();
    UO.Print(Convert.ToString(before) + " -> " + Convert.ToString(after));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3. Vollständiger Helfer mit allen Funktionen – Skriptklasse

Parameter und Ablauf:

  • Der Helfer ist vollständig angegeben und wird tatsächlich vom Main aus angerufen. Bereichs-/ID-Prüfungen verringern das Fehlerrisiko, aber mehrere Aufrufe sind nicht atomar: Das Fenster kann sich zwischen ihnen ändern. Für Aktion expectedPartner – gespeichertes serial-Zeichen; Dies ist keine Überprüfung des Preises oder Inhalts der Börse.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var value = ReadTradeState();
        UO.Print(Convert.ToString(value));
        return null;
    }

    dynamic ReadTradeState()
    {
        return UO.IsTrade();
    }
}

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

Parameter: Keine Parameter.

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "istrade": return new InjectionValue(bridge.IsTrade());

UO.TradeCheck

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

C#-Signaturen

int UO.TradeCheck(object? windowIndex);
dynamic UO.TradeCheck(object? tradeNum, object? num);
int UO.TradeCheck(object? windowIndex, object? checkbox, object? stateValue);

Liest Zustimmungsflags; Das Drei-Parameter-Formular ändert auch sein eigenes Kontrollkästchen.

Parameter

  • windowIndex – Ganzzahl: aktueller Fensterindex von 0 bis TradeCount()-1. Ein negativer oder fehlender Index führt zu einem leeren Ergebnis. Das ist nicht serial.
  • tradeNum – Ganzzahl: aktueller Fensterindex von 0 bis TradeCount()-1. Ein negativer oder fehlender Index führt zu einem leeren Ergebnis. Das ist nicht serial.
  • num – Nur Zwei-Parameter-Formular: 1 – eigene Flagge, 2 – Flagge des Partners; andere Bedeutungen geben 0. TradeNum beginnt hier mit 0.
  • checkbox – Nur Drei-Parameter-Formular: 0 – Ihre eigene Flagge, 1 – die Ihres Partners. Die Flagge einer anderen Person wird nur gelesen; eine andere Bedeutung hat 0.
  • stateValue – Nur mit Kontrollkästchen=0: 0/false entfernt die Zustimmung, jede Zahl ungleich Null/true schließt ein. Wenn Kontrollkästchen=1, wird der Wert ignoriert.

Rückgabewert

int: 1 (Bedingung erfüllt) – das ausgewählte Kontrollkästchen ist aktiviert; 0 (Bedingung nicht erfüllt) – entfernt, das Fenster fehlt oder die Seite ist falsch. Das Datensatzformular gibt den Status und nicht den Hinweis auf eine erfolgreiche Transaktion zurück: Das Deaktivieren des Kontrollkästchens gibt 0 zurück.

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

  • GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade Zahlenfenster mit 1; TradeContainer/TradeOpponent/TradeName und alle Formen von TradeCheck – ab 0. Dies ist eine offensichtliche Kompatibilität dieses Clients: Externe Nachschlagewerke für verschiedene Engines verwenden unterschiedliche Referenzpunkte.
  • Das Lesen erfolgt im Spielthread unter Verwendung von Live-Fenstern der aktuellen Welt. Geschlossene Fenster zählen nicht. Leseaufrufe senden keine Pakete und warten nicht auf eine Antwort. Die Reihenfolge von UI kann sich beim Öffnen, Schließen und Verschieben des Fensters nach oben ändern; Die Nummer ist keine dauerhafte Kennung.
  • ConfirmTrade und sein TradeCheck-Datensatz senden das Paket nur, wenn sich die Zustimmung ändert. Die Zustimmung einer anderen Person wird vom Server bestimmt. CancelTrade sendet die Stornierung einmalig. 1/true ist der örtliche Status/die Verarbeitung und keine Garantie für den Abschluss des Austauschs. Namen und beide Vereinbarungen beweisen nicht, dass sich die Zusammensetzung der Gegenstände nicht geändert hat.

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

1. Direktes Lesen oder Handeln – direktes Drehbuch

Parameter und Ablauf:

  • UO.TradeCheck(0) und UO.TradeCheck(0,1) lesen ihre Zustimmung zum ersten Fenster; UO.TradeCheck(0,2) – jemand anderes. Es erfolgt keine Aufzeichnung und keine automatische Bestätigung.
var own = UO.TradeCheck(0);
var sameOwn = UO.TradeCheck(0, 1);
var other = UO.TradeCheck(0, 2);
UO.Print(Convert.ToString(own) + "/" + Convert.ToString(sameOwn) + "/" + Convert.ToString(other));

2. Andere Skripte und Optionen – Skriptfunktion

Parameter und Ablauf:

  • UO.TradeCheck(0,0,false) widerruft seine Einwilligung. UO.TradeCheck(0,1,false) liest nur die Zustimmung des Partners: false kann die Seite eines anderen nicht ändern. Wir erwarten das Ergebnis 0 nach dem Rückzug.
return  RunScenario();
 object? RunScenario()
{
    var cleared = UO.TradeCheck(0, 0, false);
    var other = UO.TradeCheck(0, 1, false);
    UO.Print(Convert.ToString(cleared) + "/" + Convert.ToString(other));
    return null;
}

3. Vollständiger Helfer mit allen Funktionen – Skriptklasse

Parameter und Ablauf:

  • Der Helfer ist vollständig angegeben und wird tatsächlich vom Main aus angerufen. Bereichs-/ID-Prüfungen verringern das Fehlerrisiko, aber mehrere Aufrufe sind nicht atomar: Das Fenster kann sich zwischen ihnen ändern. Für Aktion expectedPartner – gespeichertes serial-Zeichen; Dies ist keine Überprüfung des Preises oder Inhalts der Börse.
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 accepted = BothAccepted(0);
        if (Truth(Truth(accepted) == true))
        {
            UO.Print("Both boxes are checked; server completion is not known");
        }

        return null;
    }

    dynamic BothAccepted(dynamic index)
    {
        if (Truth(index < 0) || Truth(index >= UO.TradeCount()))
        {
            return false;
        }

        var own = UO.TradeCheck(index, 1);
        var other = UO.TradeCheck(index, 2);
        return Truth(Truth(own) == true) && Truth(Truth(other) == true);
    }

    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.TradeCheck(windowIndex) — UO.TradeCheck(Any)

Parameter: windowIndex (Any)

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public int TradeCheck(InjectionValue windowIndex)

            => bridge.TradeCheck(NumberConversions.ToInt(windowIndex), 0, 0, false);

UO.TradeCheck(tradeNum, num) — UO.TradeCheck(Any,Any)

Parameter: tradeNum (Any), num (Any)

Ergebnis: dynamic / Any.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "tradecheck":

                    // The compatibility reader uses participants 1/2; the legacy

                    // one/three-argument forms use checkbox indices 0/1.

                    int tradeSide = Arg(1);

                    return new InjectionValue(tradeSide is 1 or 2

                        ? bridge.TradeCheck(Arg(0), tradeSide - 1, 0, false) : 0);

UO.TradeCheck(windowIndex, checkbox, stateValue) — UO.TradeCheck(Any,Any,Any)

Parameter: windowIndex (Any), checkbox (Any), stateValue (Any)

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public int TradeCheck(InjectionValue windowIndex, InjectionValue checkbox, InjectionValue stateValue)

            => bridge.TradeCheck(NumberConversions.ToInt(windowIndex), NumberConversions.ToInt(checkbox), NumberConversions.ToInt(stateValue), true);

UO.TradeContainer

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

C#-Signaturen

string UO.TradeContainer(object? windowIndex);

Gibt serial seines Austauschcontainers als Hex-String zurück.

Parameter

  • windowIndex – Ganzzahl: aktueller Fensterindex von 0 bis TradeCount()-1. Ein negativer oder fehlender Index führt zu einem leeren Ergebnis. Das ist nicht serial.

Rückgabewert

string: Hex der Form „0x40000011“; „0x00000000“, wenn kein Fenster vorhanden ist. Dies ist der ID seines Containers, nicht bool und nicht die leere Zeichenfolge.

Verhalten

  • GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade Zahlenfenster mit 1; TradeContainer/TradeOpponent/TradeName und alle Formen von TradeCheck – ab 0. Dies ist eine offensichtliche Kompatibilität dieses Clients: Externe Nachschlagewerke für verschiedene Engines verwenden unterschiedliche Referenzpunkte.
  • Das Lesen erfolgt im Spielthread unter Verwendung von Live-Fenstern der aktuellen Welt. Geschlossene Fenster zählen nicht. Leseaufrufe senden keine Pakete und warten nicht auf eine Antwort. Die Reihenfolge von UI kann sich beim Öffnen, Schließen und Verschieben des Fensters nach oben ändern; Die Nummer ist keine dauerhafte Kennung.
  • ConfirmTrade und sein TradeCheck-Datensatz senden das Paket nur, wenn sich die Zustimmung ändert. Die Zustimmung einer anderen Person wird vom Server bestimmt. CancelTrade sendet die Stornierung einmalig. 1/true ist der örtliche Status/die Verarbeitung und keine Garantie für den Abschluss des Austauschs. Namen und beide Vereinbarungen beweisen nicht, dass sich die Zusammensetzung der Gegenstände nicht geändert hat.

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

1. Direktes Lesen oder Handeln – direktes Drehbuch

Parameter und Ablauf:

  • Der Aufruf erfolgt einmalig, das Ergebnis wird in value/result gespeichert. 0 ist der erste Index, 1 ist die erste Zahl (siehe Syntax dieses Befehls). HEX zeigt numerisches serial; Konvertieren.ToString – Zahl oder Zeichenfolge.
var value = UO.TradeContainer(0);
UO.Print(Convert.ToString(value));

2. Andere Skripte und Optionen – Skriptfunktion

Parameter und Ablauf:

  • total – Momentaufnahme der Anzahl der Fenster; index – aktueller Index/Nummer. Das Aufzählungsbeispiel bestätigt nichts. In GetTradeContainer lesen zwei Aufrufe ihren Container (1) und den eines anderen (2) des ersten Fensters (1).
return  RunScenario();
 object? RunScenario()
{
    var total = UO.TradeCount();
    for (int index = (int)(0); index <= total - 1; index += (int)(1))
    {
        var value = UO.TradeContainer(index);
        UO.Print(Convert.ToString(index) + ": " + Convert.ToString(value));
    }

    return null;
}

3. Vollständiger Helfer mit allen Funktionen – Skriptklasse

Parameter und Ablauf:

  • Der Helfer ist vollständig angegeben und wird tatsächlich vom Main aus angerufen. Bereichs-/ID-Prüfungen verringern das Fehlerrisiko, aber mehrere Aufrufe sind nicht atomar: Das Fenster kann sich zwischen ihnen ändern. Für Aktion expectedPartner – gespeichertes serial-Zeichen; Dies ist keine Überprüfung des Preises oder Inhalts der Börse.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var value = ReadTradeValue(0);
        UO.Print(Convert.ToString(value));
        return null;
    }

    dynamic ReadTradeValue(dynamic index)
    {
        var total = UO.TradeCount();
        if (Truth(index < 0) || Truth(index >= total + 0))
        {
            return "0x00000000";
        }

        return UO.TradeContainer(index);
    }

    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.TradeContainer(windowIndex) — UO.TradeContainer(Any)

Parameter: windowIndex (Any)

Ergebnis: string / String.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public string TradeContainer(InjectionValue windowIndex) => NumberConversions.ToHex(bridge.TradeContainer(NumberConversions.ToInt(windowIndex)));

UO.TradeCount

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

C#-Signaturen

int UO.TradeCount();

Gibt die Anzahl der offenen Austauschfenster zurück.

Parameter

Es gibt keine Parameter.

Rückgabewert

int: Anzahl der Fenster ab 0. Dies ist eine Größe, nicht bool; Um die Verfügbarkeit zu prüfen, verwenden Sie > 0.

Verhalten

  • GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade Zahlenfenster mit 1; TradeContainer/TradeOpponent/TradeName und alle Formen von TradeCheck – ab 0. Dies ist eine offensichtliche Kompatibilität dieses Clients: Externe Nachschlagewerke für verschiedene Engines verwenden unterschiedliche Referenzpunkte.
  • Das Lesen erfolgt im Spielthread unter Verwendung von Live-Fenstern der aktuellen Welt. Geschlossene Fenster zählen nicht. Leseaufrufe senden keine Pakete und warten nicht auf eine Antwort. Die Reihenfolge von UI kann sich beim Öffnen, Schließen und Verschieben des Fensters nach oben ändern; Die Nummer ist keine dauerhafte Kennung.
  • ConfirmTrade und sein TradeCheck-Datensatz senden das Paket nur, wenn sich die Zustimmung ändert. Die Zustimmung einer anderen Person wird vom Server bestimmt. CancelTrade sendet die Stornierung einmalig. 1/true ist der örtliche Status/die Verarbeitung und keine Garantie für den Abschluss des Austauschs. Namen und beide Vereinbarungen beweisen nicht, dass sich die Zusammensetzung der Gegenstände nicht geändert hat.

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

1. Direktes Lesen oder Handeln – direktes Drehbuch

Parameter und Ablauf:

  • Der Aufruf erfolgt einmalig, das Ergebnis wird in value/result gespeichert. 0 ist der erste Index, 1 ist die erste Zahl (siehe Syntax dieses Befehls). HEX zeigt numerisches serial; Konvertieren.ToString – Zahl oder Zeichenfolge.
var value = UO.TradeCount();
UO.Print(Convert.ToString(value));

2. Andere Skripte und Optionen – Skriptfunktion

Parameter und Ablauf:

  • Vorher/Nachher – zwei separate Schnappschüsse mit einem Intervall von 500 Millisekunden. Die Pause wartet nicht auf einen bestimmten Austausch; Zwischen den Lesungen kann sich der Zustand mehrmals ändern.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.TradeCount();
    await Delay(500);
    var after = UO.TradeCount();
    UO.Print(Convert.ToString(before) + " -> " + Convert.ToString(after));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3. Vollständiger Helfer mit allen Funktionen – Skriptklasse

Parameter und Ablauf:

  • Der Helfer ist vollständig angegeben und wird tatsächlich vom Main aus angerufen. Bereichs-/ID-Prüfungen verringern das Fehlerrisiko, aber mehrere Aufrufe sind nicht atomar: Das Fenster kann sich zwischen ihnen ändern. Für Aktion expectedPartner – gespeichertes serial-Zeichen; Dies ist keine Überprüfung des Preises oder Inhalts der Börse.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var value = ReadTradeState();
        UO.Print(Convert.ToString(value));
        return null;
    }

    dynamic ReadTradeState()
    {
        return UO.TradeCount();
    }
}

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

Parameter: Keine Parameter.

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

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

UO.TradeName

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

C#-Signaturen

string UO.TradeName(object? windowIndex);

Gibt den Namen des Partners aus dem Austauschfenster nach Index von Null zurück.

Parameter

  • windowIndex – Ganzzahl: aktueller Fensterindex von 0 bis TradeCount()-1. Ein negativer oder fehlender Index führt zu einem leeren Ergebnis. Das ist nicht serial.

Rückgabewert

string: gespeicherter Partnername; leere Zeichenfolge, wenn kein Fenster/Name vorhanden ist. Der Name des Containerelements wird nicht verwendet.

Verhalten

  • GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade Zahlenfenster mit 1; TradeContainer/TradeOpponent/TradeName und alle Formen von TradeCheck – ab 0. Dies ist eine offensichtliche Kompatibilität dieses Clients: Externe Nachschlagewerke für verschiedene Engines verwenden unterschiedliche Referenzpunkte.
  • Das Lesen erfolgt im Spielthread unter Verwendung von Live-Fenstern der aktuellen Welt. Geschlossene Fenster zählen nicht. Leseaufrufe senden keine Pakete und warten nicht auf eine Antwort. Die Reihenfolge von UI kann sich beim Öffnen, Schließen und Verschieben des Fensters nach oben ändern; Die Nummer ist keine dauerhafte Kennung.
  • ConfirmTrade und sein TradeCheck-Datensatz senden das Paket nur, wenn sich die Zustimmung ändert. Die Zustimmung einer anderen Person wird vom Server bestimmt. CancelTrade sendet die Stornierung einmalig. 1/true ist der örtliche Status/die Verarbeitung und keine Garantie für den Abschluss des Austauschs. Namen und beide Vereinbarungen beweisen nicht, dass sich die Zusammensetzung der Gegenstände nicht geändert hat.

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

1. Direktes Lesen oder Handeln – direktes Drehbuch

Parameter und Ablauf:

  • Der Aufruf erfolgt einmalig, das Ergebnis wird in value/result gespeichert. 0 ist der erste Index, 1 ist die erste Zahl (siehe Syntax dieses Befehls). HEX zeigt numerisches serial; Konvertieren.ToString – Zahl oder Zeichenfolge.
var value = UO.TradeName(0);
UO.Print(Convert.ToString(value));

2. Andere Skripte und Optionen – Skriptfunktion

Parameter und Ablauf:

  • total – Momentaufnahme der Anzahl der Fenster; index – aktueller Index/Nummer. Das Aufzählungsbeispiel bestätigt nichts. In GetTradeContainer lesen zwei Aufrufe ihren Container (1) und den eines anderen (2) des ersten Fensters (1).
return  RunScenario();
 object? RunScenario()
{
    var total = UO.TradeCount();
    for (int index = (int)(0); index <= total - 1; index += (int)(1))
    {
        var value = UO.TradeName(index);
        UO.Print(Convert.ToString(index) + ": " + Convert.ToString(value));
    }

    return null;
}

3. Vollständiger Helfer mit allen Funktionen – Skriptklasse

Parameter und Ablauf:

  • Der Helfer ist vollständig angegeben und wird tatsächlich vom Main aus angerufen. Bereichs-/ID-Prüfungen verringern das Fehlerrisiko, aber mehrere Aufrufe sind nicht atomar: Das Fenster kann sich zwischen ihnen ändern. Für Aktion expectedPartner – gespeichertes serial-Zeichen; Dies ist keine Überprüfung des Preises oder Inhalts der Börse.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var value = ReadTradeValue(0);
        UO.Print(Convert.ToString(value));
        return null;
    }

    dynamic ReadTradeValue(dynamic index)
    {
        var total = UO.TradeCount();
        if (Truth(index < 0) || Truth(index >= total + 0))
        {
            return "";
        }

        return UO.TradeName(index);
    }

    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.TradeName(windowIndex) — UO.TradeName(Any)

Parameter: windowIndex (Any)

Ergebnis: string / String.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public string TradeName(InjectionValue windowIndex) => bridge.TradeName(NumberConversions.ToInt(windowIndex));

UO.TradeOpponent

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

C#-Signaturen

string UO.TradeOpponent(object? windowIndex);

Gibt serial des Partnercontainers als Hex-String zurück; Dies ist kein ID-Zeichen.

Parameter

  • windowIndex – Ganzzahl: aktueller Fensterindex von 0 bis TradeCount()-1. Ein negativer oder fehlender Index führt zu einem leeren Ergebnis. Das ist nicht serial.

Rückgabewert

string: Hex serial der Container-ID2 einer anderen Person; „0x00000000“, wenn kein Fenster vorhanden ist. Für ein ID-Zeichen verwenden Sie GetTradeOpponent(Index + 1).

Verhalten

  • GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade Zahlenfenster mit 1; TradeContainer/TradeOpponent/TradeName und alle Formen von TradeCheck – ab 0. Dies ist eine offensichtliche Kompatibilität dieses Clients: Externe Nachschlagewerke für verschiedene Engines verwenden unterschiedliche Referenzpunkte.
  • Das Lesen erfolgt im Spielthread unter Verwendung von Live-Fenstern der aktuellen Welt. Geschlossene Fenster zählen nicht. Leseaufrufe senden keine Pakete und warten nicht auf eine Antwort. Die Reihenfolge von UI kann sich beim Öffnen, Schließen und Verschieben des Fensters nach oben ändern; Die Nummer ist keine dauerhafte Kennung.
  • ConfirmTrade und sein TradeCheck-Datensatz senden das Paket nur, wenn sich die Zustimmung ändert. Die Zustimmung einer anderen Person wird vom Server bestimmt. CancelTrade sendet die Stornierung einmalig. 1/true ist der örtliche Status/die Verarbeitung und keine Garantie für den Abschluss des Austauschs. Namen und beide Vereinbarungen beweisen nicht, dass sich die Zusammensetzung der Gegenstände nicht geändert hat.

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

1. Direktes Lesen oder Handeln – direktes Drehbuch

Parameter und Ablauf:

  • Der Aufruf erfolgt einmalig, das Ergebnis wird in value/result gespeichert. 0 ist der erste Index, 1 ist die erste Zahl (siehe Syntax dieses Befehls). HEX zeigt numerisches serial; Konvertieren.ToString – Zahl oder Zeichenfolge.
var value = UO.TradeOpponent(0);
UO.Print(Convert.ToString(value));

2. Andere Skripte und Optionen – Skriptfunktion

Parameter und Ablauf:

  • total – Momentaufnahme der Anzahl der Fenster; index – aktueller Index/Nummer. Das Aufzählungsbeispiel bestätigt nichts. In GetTradeContainer lesen zwei Aufrufe ihren Container (1) und den eines anderen (2) des ersten Fensters (1).
return  RunScenario();
 object? RunScenario()
{
    var total = UO.TradeCount();
    for (int index = (int)(0); index <= total - 1; index += (int)(1))
    {
        var value = UO.TradeOpponent(index);
        UO.Print(Convert.ToString(index) + ": " + Convert.ToString(value));
    }

    return null;
}

3. Vollständiger Helfer mit allen Funktionen – Skriptklasse

Parameter und Ablauf:

  • Der Helfer ist vollständig angegeben und wird tatsächlich vom Main aus angerufen. Bereichs-/ID-Prüfungen verringern das Fehlerrisiko, aber mehrere Aufrufe sind nicht atomar: Das Fenster kann sich zwischen ihnen ändern. Für Aktion expectedPartner – gespeichertes serial-Zeichen; Dies ist keine Überprüfung des Preises oder Inhalts der Börse.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var value = ReadTradeValue(0);
        UO.Print(Convert.ToString(value));
        return null;
    }

    dynamic ReadTradeValue(dynamic index)
    {
        var total = UO.TradeCount();
        if (Truth(index < 0) || Truth(index >= total + 0))
        {
            return "0x00000000";
        }

        return UO.TradeOpponent(index);
    }

    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.TradeOpponent(windowIndex) — UO.TradeOpponent(Any)

Parameter: windowIndex (Any)

Ergebnis: string / String.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public string TradeOpponent(InjectionValue windowIndex) => NumberConversions.ToHex(bridge.TradeOpponent(NumberConversions.ToInt(windowIndex)));
⚠️ **GitHub.com Fallback** ⚠️