DE UO Topic trade - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Home · C# · IDE · UO API · A–Z · Beispiele · Sprachen
Fenster zum sicheren Austausch zwischen Spielern: Teilnehmer, Container, Status, Bestätigung und Stornierung.
| Thema | Befehle und Erklärungen |
|---|---|
| IsTrade | UO.IsTrade |
| Handelsgegner | UO.GetTradeOpponent · UO.GetTradeOpponentName |
| Handelscontainer | UO.GetTradeContainer |
| ConfirmTrade | UO.ConfirmTrade |
| CancelTrade | UO.CancelTrade |
UO.IsTrade · UO.TradeCount · UO.TradeCheck · UO.TradeContainer · UO.GetTradeContainer · UO.TradeOpponent · UO.GetTradeOpponent · UO.TradeName · UO.GetTradeOpponentName · UO.ConfirmTrade · UO.CancelTrade
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.
Parameter, Ergebnis und alle Szenarien
var value = UO.GetTradeContainer(1, 1);
UO.Print(Hex(value));
string Hex(object? value) => Convert.ToInt64(value).ToString("X");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;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.CancelTrade(object? tradeNum);Bricht den ausgewählten Austausch ab und schließt sein Fenster.
-
tradeNum– Ganzzahl: aktuelle Fensternummer von 1 bis TradeCount(). 0 und negative Werte sind nicht zulässig. Das ist nicht serial.
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.
- 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.
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.
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));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;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;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;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: tradeNum (Any)
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CancelTrade:bridge.CancelTrade(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Interner Implementierungscode; kein eigenständiges Skript.
case "canceltrade": return new InjectionValue(bridge.CancelTrade(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.ConfirmTrade(object? tradeNum);Setzt das benutzerdefinierte Zustimmungsflag für die ausgewählte Börse.
-
tradeNum– Ganzzahl: aktuelle Fensternummer von 1 bis TradeCount(). 0 und negative Werte sind nicht zulässig. Das ist nicht serial.
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.
- 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.
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.
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));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;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;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;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: tradeNum (Any)
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ConfirmTrade:bridge.ConfirmTrade(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Interner Implementierungscode; kein eigenständiges Skript.
case "confirmtrade": return new InjectionValue(bridge.ConfirmTrade(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetTradeContainer(object? tradeNum, object? num);Gibt den numerischen serial eines von zwei Austauschcontainern zurück.
-
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.
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.
- 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.
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.
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));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");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");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;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: tradeNum (Any), num (Any)
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetTradeContainer:bridge.GetTradeContainer(Arg(0), Arg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Interner Implementierungscode; kein eigenständiges Skript.
case "gettradecontainer": return new InjectionValue(bridge.GetTradeContainer(Arg(0), Arg(1)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetTradeOpponent(object? tradeNum);Gibt den numerischen serial des Partnerzeichens zurück.
-
tradeNum– Ganzzahl: aktuelle Fensternummer von 1 bis TradeCount(). 0 und negative Werte sind nicht zulässig. Das ist nicht serial.
int: serial Zeichen aus LocalSerial Fenster; 0 wenn kein Fenster vorhanden ist. Kein Container und kein bool; check != 0.
- 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.
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.
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));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");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");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;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: tradeNum (Any)
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetTradeOpponent:bridge.GetTradeOpponent(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Interner Implementierungscode; kein eigenständiges Skript.
case "gettradeopponent": return new InjectionValue(bridge.GetTradeOpponent(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetTradeOpponentName(object? tradeNum);Gibt den zusammen mit dem Austauschfenster erhaltenen Partnernamen zurück.
-
tradeNum– Ganzzahl: aktuelle Fensternummer von 1 bis TradeCount(). 0 und negative Werte sind nicht zulässig. Das ist nicht serial.
string: Name aus dem Exchange-Eröffnungspaket; leere Zeichenfolge, wenn kein Fenster oder Name vorhanden ist. Fragt nicht noch einmal nach dem Namen.
- 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.
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.
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));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));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;
}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;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: tradeNum (Any)
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetTradeOpponentName:bridge.GetTradeOpponentName(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Interner Implementierungscode; kein eigenständiges Skript.
case "gettradeopponentname": return new InjectionValue(bridge.GetTradeOpponentName(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsTrade();Prüft, ob ein sicheres Austauschfenster geöffnet ist.
Es gibt keine Parameter.
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.
- 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.
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.
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));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));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)));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();
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsTrade:bridge.IsTrade().
Interner Implementierungscode; kein eigenständiges Skript.
case "istrade": return new InjectionValue(bridge.IsTrade());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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.
-
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.
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.
- 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.
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.
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));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));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;
}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;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: windowIndex (Any)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.TradeCheck. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TradeCheck:bridge.TradeCheck(NumberConversions.ToInt(windowIndex), 0, 0, false). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(windowIndex).
Interner Implementierungscode; kein eigenständiges Skript.
public int TradeCheck(InjectionValue windowIndex)
=> bridge.TradeCheck(NumberConversions.ToInt(windowIndex), 0, 0, false);Parameter: tradeNum (Any), num (Any)
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(1). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TradeCheck:bridge.TradeCheck(Arg(0), tradeSide - 1, 0, false).
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);Parameter: windowIndex (Any), checkbox (Any), stateValue (Any)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.TradeCheck. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TradeCheck:bridge.TradeCheck(NumberConversions.ToInt(windowIndex), NumberConversions.ToInt(checkbox), NumberConversions.ToInt(stateValue), true). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(windowIndex).
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);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.TradeContainer(object? windowIndex);Gibt serial seines Austauschcontainers als Hex-String zurück.
-
windowIndex– Ganzzahl: aktueller Fensterindex von 0 bis TradeCount()-1. Ein negativer oder fehlender Index führt zu einem leeren Ergebnis. Das ist nicht serial.
string: Hex der Form „0x40000011“; „0x00000000“, wenn kein Fenster vorhanden ist. Dies ist der ID seines Containers, nicht bool und nicht die leere Zeichenfolge.
- 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.
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.
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));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));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;
}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;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: windowIndex (Any)
Ergebnis: string / String.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.TradeContainer. -
InjectionScript.Runtime.NumberConversions.ToHex:NumberConversions.ToHex(bridge.TradeContainer(NumberConversions.ToInt(windowIndex))). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TradeContainer:bridge.TradeContainer(NumberConversions.ToInt(windowIndex)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(windowIndex).
Interner Implementierungscode; kein eigenständiges Skript.
public string TradeContainer(InjectionValue windowIndex) => NumberConversions.ToHex(bridge.TradeContainer(NumberConversions.ToInt(windowIndex)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.TradeCount();Gibt die Anzahl der offenen Austauschfenster zurück.
Es gibt keine Parameter.
int: Anzahl der Fenster ab 0. Dies ist eine Größe, nicht bool; Um die Verfügbarkeit zu prüfen, verwenden Sie > 0.
- 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.
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.
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));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));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)));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();
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.TradeCount. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TradeCount:bridge.TradeCount().
Interner Implementierungscode; kein eigenständiges Skript.
public int TradeCount() => bridge.TradeCount();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.TradeName(object? windowIndex);Gibt den Namen des Partners aus dem Austauschfenster nach Index von Null zurück.
-
windowIndex– Ganzzahl: aktueller Fensterindex von 0 bis TradeCount()-1. Ein negativer oder fehlender Index führt zu einem leeren Ergebnis. Das ist nicht serial.
string: gespeicherter Partnername; leere Zeichenfolge, wenn kein Fenster/Name vorhanden ist. Der Name des Containerelements wird nicht verwendet.
- 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.
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.
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));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));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;
}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;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: windowIndex (Any)
Ergebnis: string / String.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.TradeName. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TradeName:bridge.TradeName(NumberConversions.ToInt(windowIndex)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(windowIndex).
Interner Implementierungscode; kein eigenständiges Skript.
public string TradeName(InjectionValue windowIndex) => bridge.TradeName(NumberConversions.ToInt(windowIndex));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.TradeOpponent(object? windowIndex);Gibt serial des Partnercontainers als Hex-String zurück; Dies ist kein ID-Zeichen.
-
windowIndex– Ganzzahl: aktueller Fensterindex von 0 bis TradeCount()-1. Ein negativer oder fehlender Index führt zu einem leeren Ergebnis. Das ist nicht serial.
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).
- 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.
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.
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));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));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;
}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;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: windowIndex (Any)
Ergebnis: string / String.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.TradeOpponent. -
InjectionScript.Runtime.NumberConversions.ToHex:NumberConversions.ToHex(bridge.TradeOpponent(NumberConversions.ToInt(windowIndex))). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TradeOpponent:bridge.TradeOpponent(NumberConversions.ToInt(windowIndex)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(windowIndex).
Interner Implementierungscode; kein eigenständiges Skript.
public string TradeOpponent(InjectionValue windowIndex) => NumberConversions.ToHex(bridge.TradeOpponent(NumberConversions.ToInt(windowIndex)));