Repository navigation
DE UO Topic containers
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Home · C# · IDE · UO API · A–Z · Beispiele · Sprachen
Inhalt lesen, Zielcontainer öffnen und auswählen. Ein geschlossener oder noch nicht beladener Container liefert dem Kunden keine vollständige Liste der Artikel.
| Thema | Befehle und Erklärungen |
|---|---|
| Backpack | UO.Backpack |
| Bank | UO.ObjAtLayerEx · UO.OpenContainer |
| OpenContainer | UO.OpenContainer |
| LastContainer | UO.LastContainer |
| ContainerOf | UO.ContainerOf · UO.GetParent |
| IsContainer | UO.IsContainer |
| Verschachtelte Container | UO.GetContent · UO.FindTypeEx · UO.FindTypesArrayEx |
| Receiving Container | UO.SetReceivingContainer · UO.UnsetReceivingContainer |
| Catch Bag | UO.SetCatchBag · UO.UnsetCatchBag |
| Container Transfers | UO.MoveItem · UO.MoveItems · UO.MassMove · UO.EmptyContainer |
UO.ContainerOf · UO.GetParent · UO.ContainerOff
UO.SetReceivingContainer · UO.UnsetReceivingContainer
UO.SetCatchBag · UO.UnsetCatchBag
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
UO.OpenContainer("lasttarget");Parameter, Ergebnis und alle Szenarien
UO.Print("Select a chest or corpse");
var sent = UO.EmptyContainer(350);
if (Truth(sent == 0))
{
UO.Print("Cancelled, empty, unavailable, or a transfer failed");
}
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 · 繁體中文 · 日本語 · 한국어
int UO.Backpack();Gibt den ID des ausgerüsteten Rucksacks des aktuellen Charakters zurück.
Es gibt keine Parameter.
int - serial/ID, nicht graphic/type, Schicht, Anzahl der Elemente oder bool. 0 – es gibt kein aktuelles Objekt. Alle 32 Bits serial werden gespeichert; check != 0, nicht == true oder > 0. Das gespeicherte Ergebnis wird nicht selbst aktualisiert. Sucht nach einem wiederhergestellten Element auf Ebene Backpack des aktuellen Players. Kein/zerstörter Spieler, kein Rucksack oder Tasche entfernt – 0. Gibt den Container zurück, nicht den Inhalt; erstellt keine neue Tasche.
- Es gibt keine Parameter. Liest lokale Daten über Invoke im Spielstream; Das Abbrechen des Skripts unterbricht das Warten auf diesen Thread. Versendet das Paket nicht, öffnet den Container/das Ziel nicht und überträgt den Artikel nicht.
- Das eingebaute self/backpack ohne Klammern wird erneut gelesen, sofern es nicht durch eine Skriptvariable überschrieben wird. String-Namen werden vom empfangenden Befehl verarbeitet. Im Trageziel bedeutet „self“ den Rucksack und UO.Self() gibt das serial des Charakters zurück. Verwenden Sie für den ID-Container explizit UO.Backpack().
- World.Clear entfernt Player; Nachfolgende Messungen ergeben 0. Das Betreten der Welt oder das Wechseln der ausgerüsteten Tasche kann ID verändern. Einzelne Lesevorgänge sind nicht atomar. Ein ID ungleich Null ist kein Beweis für die Verbindung, die Serverauflösung oder das Laden von Inhalten.
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.Backpack();
UO.Print("Backpack: " + Convert.ToString(result));Parameter und Ablauf:
- id speichert das Ergebnis eines Aufrufs; HEX formatiert serial für Protokoll. Das Beispiel wählt oder verwendet nichts.
var id = UO.Backpack();
UO.Print("ID: " + Hex(id));
string Hex(object? value) => Convert.ToInt64(value).ToString("X");Parameter und Ablauf:
- Vorher/Nachher werden in Abständen von 250 ms gelesen. UO.Wait wurde nur als Beispiel hinzugefügt. Gleichheit bedeutet identisches Endergebnis ID; Zwischenänderungen können übersehen werden.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.Backpack();
await Delay(250);
var after = UO.Backpack();
if (Truth(before != after))
{
UO.Print("ID changed: " + Hex(after));
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
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;Parameter und Ablauf:
- Kandidat - gespeichert ID LastTarget. IsOwnSerial(Kandidat) nimmt ein serial und gibt bool zurück: true für den aktuellen eigenen Nicht-Null-Wert ID, andernfalls false. Die Funktionsdefinition ist vollständig angegeben; Ziel ändert sich nicht.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var candidate = UO.LastTarget();
if (Truth(Truth(IsOwnSerial(candidate)) == true))
{
UO.Print("Own object selected");
}
else
{
UO.Print("Different object or no own object");
}
return null;
}
dynamic IsOwnSerial(dynamic candidate)
{
var current = UO.Backpack();
return Truth(current != 0) && Truth(current == candidate);
}
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: Keine Parameter.
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Backpack:bridge.Backpack.
Interner Implementierungscode; kein eigenständiges Skript.
case "backpack": return new InjectionValue(bridge.Backpack);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.ContainerOf(object? name);Liest das unmittelbare übergeordnete Element des Elements.
-
name– Seriell/ID eines bestimmten Objekts: int, Dezimal-/Hex-Zeichenfolge oder Set-Alias self, backpack, lasttarget, lastobject oder Name AddObject. Dies ist nicht graphic/type.
string der Form „0x40001234“ – serial des Container-/Charakterbesitzers. Für einen Gegenstand am Boden ist es entweder „0x00000000“ oder „0xFFFFFFFF“. Für unbekannten Namen/Objekt oder Mobil – „0x00000000“. Es ist nicht das graphic des Containers, nicht das ID des Elements selbst und nicht der Root-Besitzer des verschachtelten Beutels.
- Das Containerfeld eines lokalen Elements wird ohne rekursives Durchlaufen und Aufrufen des Servers gelesen. Überprüfen Sie „Exists“, bevor Sie ein Nullergebnis interpretieren. Ground verwendet zwei gültige Darstellungen.
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.ContainerOf("backpack");
UO.Print("ContainerOf: " + Convert.ToString(result));Parameter und Ablauf:
- Element ist serial des gefundenen Stapels. type=0x0EED wird nur von FindType übertragen.
- Das übergeordnete Element bezeichnet den tatsächlichen Rucksack, nicht das Zeichen, das den Rucksack enthält.
var item = UO.FindType(0x0EED, -1, "backpack");
if (Truth(item != ""))
{
var parent = UO.ContainerOf(item);
UO.Print(Convert.ToString(parent));
}
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:
- Das Argument ist der Rucksack selbst.
- Das übergeordnete Element des ausgerüsteten Rucksacks ist der serial des Charakters.
return RunScenario();
object? RunScenario()
{
var bag = UO.GetSerial("backpack");
if (Truth(UO.Exists(bag)))
{
UO.Print(Convert.ToString(UO.ContainerOf(bag)));
}
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:
- GetContent("ground") ergibt ID Gegenstände außerhalb von Containern.
- Beide Grundstücksdarstellungen sind gültig. Ein Null-Elternteil ohne Exists reicht nicht aus, um auf die Position eines Elements zu schließen.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var items = UO.GetContent("ground");
if (Truth(ArrayLength(items) > 0))
{
var item = items[0];
if (Truth(UO.Exists(item)))
{
UO.Print(Convert.ToString(UO.ContainerOf(item)));
}
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: name (Any)
Ergebnis: string / String.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ContainerOf. -
InjectionScript.Runtime.InjectionApiUO.TryGetObject:TryGetObject(name, out int id). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ContainerOf:bridge.ContainerOf(id).
Interner Implementierungscode; kein eigenständiges Skript.
public string ContainerOf(InjectionValue name)
{
if (TryGetObject(name, out int id))
{
var containerId = bridge.ContainerOf(id);
if (containerId < 0)
return "0xFFFFFFFF";
return $"0x{containerId:X8}";
}
return "0x00000000";
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ContainerOff();Setzt den angegebenen empfangenden Laufzeitcontainer zurück.
Es gibt keine Parameter.
void – kein Rückgabewert.
- Ruft UnsetReceivingContainer auf und schreibt State.ReceivingContainer=0. Die folgenden Grab-Vorgänge ohne explizite Zuweisung verwenden den Rucksack, sofern einer verfügbar ist. Elemente werden nicht verschoben und das Containerfenster wird nicht geschlossen.
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.
Der Befehl steht in einer eigenen Anweisung. Die Meldung davor zeigt den Beginn des Aufrufs und bestätigt keine Serveraktion.
UO.Print("Calling UO.ContainerOff");
UO.ContainerOff();Parameter und Ablauf:
- Der Zustand ReceivingContainer wird zu 0.
UO.ContainerOff();Parameter und Ablauf:
- Die Zuweisung wird gelöscht; Durch die Aktion wird der Inhalt nicht verschoben.
return RunScenario();
object? RunScenario()
{
UO.SetReceivingContainer("backpack");
UO.ContainerOff();
return null;
}Parameter und Ablauf:
- Der Nullzustand ermöglicht ein wiederholtes Zurücksetzen.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.ContainerOff();
UO.ContainerOff();
return null;
}
}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: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.UnsetReceivingContainer. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UnsetReceivingContainer:bridge.UnsetReceivingContainer().
Interner Implementierungscode; kein eigenständiges Skript.
public void UnsetReceivingContainer() => bridge.UnsetReceivingContainer();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetContent(object? id);Liest den direkten Inhalt eines Containers oder geladener Gegenstände am Boden.
-
id– Seriell/ID eines bestimmten Objekts: int, Dezimal-/Hex-Zeichenfolge oder Set-Alias self, backpack, lasttarget, lastobject oder Name AddObject. Dies ist nicht graphic/type. Die Zeilen my/backpack wählen den Rucksack aus. Nur explizites 0, „0“ oder „ground“ Land auswählen. Ein unbekannter Alias, ein fehlender Rucksack, ein negatives ID oder ein unpassender Werttyp führen zu einem leeren Array.
Array – serial jedes direkten untergeordneten Elements. Für ground/0 – Gegenstände außerhalb von Behältern; Dabei werden die beiden normalen Bodenmarkierungen 0 und 0xFFFFFFFF berücksichtigt. Ohne Einträge wird ein leeres Array zurückgegeben. Die Liste enthält ID, nicht type und keine Ebenen.
- Vom Client bereits heruntergeladene Daten werden gelesen. Der Befehl öffnet nicht den Container, verschiebt keine Elemente und lädt keine Objekte vom gesamten Server herunter.
- Array – Array mit Indizes beginnend bei 0. Speichern Sie es in var, überprüfen Sie ArrayLength, bevor Sie darauf zugreifen. Nach der Aufnahme eines Schnappschusses können Elemente aus der Welt verschwinden: Überprüfen Sie „Exists(serial)“, bevor Sie Maßnahmen ergreifen.
- Es gibt kein rekursives Durchlaufen verschachtelter Taschen, keine Entfernungssortierung und keinen Ignore- oder FindDistance/FindVertical-Filter. Der reguläre FindType-Snapshot bleibt unverändert.
- Eine ungeöffnete Truhe kann leer erscheinen: Das Fehlen empfangener Daten beweist nicht, dass der Server leer ist. Verwenden Sie zunächst einen offenen Behälter und warten Sie auf den Inhalt.
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.GetContent("backpack");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- ID="backpack" – Rucksack des aktuellen Charakters, nur direkt verschachtelte Gegenstände.
- Länge – Anzahl der Datensätze/ID. Dies ist nicht die Anzahl der Stapel. Die leere Liste ergibt 0.
var items = UO.GetContent("backpack");
UO.Print(Convert.ToString(ArrayLength(items)));
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;Parameter und Ablauf:
- ID="backpack" – Rucksack des aktuellen Charakters, nur direkt verschachtelte Gegenstände.
- items[i] – numerisch serial. Hex wird nur für die Ausgabe verwendet. Die Schleife greift nicht auf den letzten Index zu.
return RunScenario();
object? RunScenario()
{
var items = UO.GetContent("backpack");
var i = 0;
while (Truth(i < ArrayLength(items)))
{
UO.Print("0x" + Hex(items[i]));
i = i + 1;
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- ID="backpack" – Rucksack des aktuellen Charakters, nur direkt verschachtelte Gegenstände.
- Es werden zwei verschiedene Dinge überprüft: der Datensatz im Snapshot und die aktuelle Existenz des Objekts. Ordnung ohne explizite Sortierung bedeutet nicht Nähe.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var items = UO.GetContent("backpack");
if (Truth(ArrayLength(items) > 0))
{
var first = items[0];
if (Truth(UO.Exists(first)))
{
UO.Print(UO.GetName(first));
}
}
else
{
UO.Print("Empty list");
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Parameter und Ablauf:
- ID="ground" wählt explizit den Boden aus. NPC/Spieler sind in dieser Liste nicht enthalten.
- Der Suchradius ist hier nicht auf FindDistance beschränkt. Für Filter type und Distanz gibt es GetWorldItems(type,Farbe,Distanz).
var groundItems = UO.GetContent("ground");
UO.Print(Convert.ToString(ArrayLength(groundItems)));
int ArrayLength(object? value) => value is System.Array array ? array.Length : 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: id (Any)
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
InjectionScript.Runtime.NumberConversions.TryStr2Int:NumberConversions.TryStr2Int(text, out int literal). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(text). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetEquipment:bridge.GetEquipment(container). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetContent:bridge.GetContent(container). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Backpack:bridge.Backpack.
Interner Implementierungscode; kein eigenständiges Skript.
case "getcontent":
case "getequipment":
{
InjectionValue selection = arguments[0];
bool ground = false, explicitZero;
int container;
if (selection.Kind == InjectionValueKind.String)
{
string text = Text(0).Trim();
ground = text.Equals("ground", StringComparison.OrdinalIgnoreCase);
explicitZero = NumberConversions.TryStr2Int(text, out int literal) && literal == 0;
container = ground ? 0 : text.Equals("my", StringComparison.OrdinalIgnoreCase)
? bridge.Backpack : GetObject(text);
}
else
{
if (selection.Kind != InjectionValueKind.Integer && selection.Kind != InjectionValueKind.Decimal)
return new InjectionValue(Array.Empty<InjectionValue>());
container = Arg(0);
explicitZero = selection.Kind == InjectionValueKind.Integer ? selection.Integer == 0 : selection.Decimal == 0d;
}
// Only an explicit ground/zero selector may query world items.
if (container < 0 || container == 0 && !ground && !explicitZero)
return new InjectionValue(Array.Empty<InjectionValue>());
bool equipment = name.Equals("GetEquipment", StringComparison.OrdinalIgnoreCase);
int[] items = equipment
? container == 0 ? Array.Empty<int>() : bridge.GetEquipment(container)
: bridge.GetContent(container);
return new InjectionValue(items.Select(serial => new InjectionValue(serial)).ToArray());
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetParent(object? objID);Liest das unmittelbare übergeordnete Element des Elements.
-
objID– Seriell/ID eines bestimmten Objekts: int, Dezimal-/Hex-Zeichenfolge oder Set-Alias self, backpack, lasttarget, lastobject oder Name AddObject. Dies ist nicht graphic/type.
int – serial Container-/Charakterbesitzer. Für einen Gegenstand am Boden ist es 0 oder -1 (Bits 0xFFFFFFFF), je nach Eingabe des Kunden. Für ein unbekanntes Objekt oder Mobilgerät – 0. Es ist nicht das graphic des Containers, nicht das ID des Elements selbst und nicht der Root-Besitzer des verschachtelten Beutels.
- Das Containerfeld eines lokalen Elements wird ohne rekursives Durchlaufen und Aufrufen des Servers gelesen. Überprüfen Sie „Exists“, bevor Sie ein Nullergebnis interpretieren. Ground verwendet zwei gültige Darstellungen.
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.GetParent("backpack");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- Element ist serial des gefundenen Stapels. type=0x0EED wird nur von FindType übertragen.
- Das übergeordnete Element bezeichnet den tatsächlichen Rucksack, nicht das Zeichen, das den Rucksack enthält.
var item = UO.FindType(0x0EED, -1, "backpack");
if (Truth(item != ""))
{
var parent = UO.GetParent(item);
UO.Print(Convert.ToString(parent));
}
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:
- Das Argument ist der Rucksack selbst.
- Das übergeordnete Element des ausgerüsteten Rucksacks ist der serial des Charakters.
return RunScenario();
object? RunScenario()
{
var bag = UO.GetSerial("backpack");
if (Truth(UO.Exists(bag)))
{
UO.Print(Convert.ToString(UO.GetParent(bag)));
}
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:
- GetContent("ground") ergibt ID Gegenstände außerhalb von Containern.
- Beide Grundstücksdarstellungen sind gültig. Ein Null-Elternteil ohne Exists reicht nicht aus, um auf die Position eines Elements zu schließen.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var items = UO.GetContent("ground");
if (Truth(ArrayLength(items) > 0))
{
var item = items[0];
if (Truth(UO.Exists(item)))
{
UO.Print(Convert.ToString(UO.GetParent(item)));
}
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: objID (Any)
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ContainerOf:bridge.ContainerOf(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Interner Implementierungscode; kein eigenständiges Skript.
case "getparent": return new InjectionValue(bridge.ContainerOf(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Ground();Gibt einen speziellen Landbezeichner für den Suchcontainerparameter oder das Übertragungsziel zurück.
Es gibt keine Parameter.
int, immer 0. Diese Null ist ein gültiger Bodenbezeichner, kein false, kein Suchfehler, kein ID-Element, kein graphic, keine Kartennummer oder Koordinate. Markieren Sie Ground() nicht als Erfolgszeichen; Überprüfen Sie das Such- oder Übertragungsergebnis, dem dieser Wert übergeben wurde.
- Es gibt keine Parameter. Der Ground()-Aufruf selbst sucht nicht nach irgendetwas, verschiebt nichts, öffnet kein Ziel, sendet keine Pakete und ändert nicht die Ergebnisse der vorherigen Suche. Vor dem Betreten des Spiels wird außerdem 0 zurückgegeben.
- Senden Sie die Befehle FindType, FindList, Count, FindTypeEx, FindTypesArrayEx, CountEx oder MoveItem an die Container-/Zielposition. Die Suche erkennt geladene Weltobjekte, lädt jedoch keine entfernten Zellen. Für die Übertragung auf den Boden sind X/Y/Z die Weltkoordinaten, nicht die Pixel des Containerfensters.
- FindType(type, Farbe) sieht immer noch im Inventar aus: Der zweite Parameter ist Farbe. Schreiben Sie für Land FindType(type, Farbe, UO.Ground()). Im alten Kompakt FindType/MoveItem gibt die Zahl -1 den Bestand an; in kompatibel FindTypeEx/FindTypesArrayEx/CountEx - 1 ist auch als Masse zulässig. Verwenden Sie UO.Ground() oder den expliziten Namen ground, übertragen Sie numerische Bezeichnungen nicht ungeprüft zwischen verschiedenen Befehlen.
- Die Notationsunterschiede zwischen den Befehlen und den obigen Beispielen beschreiben diesen Client.
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.Ground();
UO.Print("Ground: " + Convert.ToString(result));Parameter und Ablauf:
- Ziel empfängt int 0, Print druckt diese Zahl. Der Anruf selbst wirft nichts weg.
var destination = UO.Ground();
UO.Print(Convert.ToString(destination));Parameter und Ablauf:
- 0x0EED – goldene Grafiken; das zweite -1 bedeutet jedes hue. Ground() setzt eine Suche in der Welt, false deaktiviert die Containerrekursion. FindTypeEx gibt ein serial oder 0 zurück, wenn kein Ergebnis vorliegt. != 0 prüft dies serial. Es werden der aktuelle FindDistance/FindVertical und die Liste Ignore verwendet.
return RunScenario();
object? RunScenario()
{
var id = UO.FindTypeEx(0x0EED, -1, UO.Ground(), false);
if (Truth(id != 0))
{
UO.Print(Hex(id));
}
else
{
UO.Print("0");
}
return null;
}
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- FindGroundTypes(firstType, secondType, Radius, Höhe) sucht nach Gold 0x0EED und schwarzer Perle 0x0F7A mit Radius=5 und Höhe=10. Durch die Deklaration der Variablentypen[1] werden zwei Zellen erstellt. Farben[0] und Behälter[0] – jeweils einer. Der gesamte Stapel zählt als ein Ergebnis; Typen/Farben sind Alternativen, sich überschneidende Container duplizieren ID nicht. Die Funktion gibt das gespeicherte Array serial zurück; Stellt schließlich beide Grenzwerte wieder her. Hauptausgänge alle ID. Der Funktionscode ist vollständig angegeben.
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 ids = FindGroundTypes(0x0EED, 0x0F7A, 5, 10);
foreach (var id in ids)
{
UO.Print(Hex(id));
}
return null;
}
dynamic FindGroundTypes(dynamic firstType, dynamic secondType, dynamic radius, dynamic height)
{
var oldDistance = UO.FindDistance();
var oldVertical = UO.FindVertical();
dynamic[] types = new dynamic[checked((int)(1) + 1)];
types[0] = firstType;
types[1] = secondType;
dynamic[] colors = new dynamic[checked((int)(0) + 1)];
colors[0] = -1;
dynamic[] containers = new dynamic[checked((int)(0) + 1)];
containers[0] = UO.Ground();
try
{
UO.FindDistance(radius);
UO.FindVertical(height);
UO.FindTypesArrayEx(types, colors, containers, false);
return UO.GetFoundItems();
}
finally
{
UO.FindDistance(oldDistance);
UO.FindVertical(oldVertical);
}
}
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
}Parameter und Ablauf:
- Ersetzen Sie 0x40001001 durch serial eines verfügbaren Artikels. IsObjectExists prüft zunächst das geladene Objekt. MoveItem(Gegenstand, Menge, Ziel, X, Y, Z): Menge=0 – der gesamte Stapel, Ground() – Land, GetX/GetY/GetZ – die Weltzelle des Charakters. Das Ergebnis ist 1, wenn der Client die Übertragungsanforderung akzeptiert hat, andernfalls 0. Dies ist das Ergebnis von MoveItem, nicht Ground() und keine Zustellbestätigung vom Server.
var item = 0x40001001;
if (Truth(UO.IsObjectExists(item)))
{
var result = UO.MoveItem(item, 0, UO.Ground(), UO.GetX("self"), UO.GetY("self"), UO.GetZ("self"));
}
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: Keine Parameter.
Ergebnis: int / Integer.
Beim Aufruf:
Interner Implementierungscode; kein eigenständiges Skript.
case "ground": return new InjectionValue(0);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsContainer(object? objID);Überprüft das Container-Flag in den Kacheldaten des Grafiktyps des geladenen Elements.
-
objID– Obligatorisches serial/ID eines bestimmten Objekts: int, Hex-String oder Alias self, backpack, lasttarget, lastobject, lastcontainer, laststatus, finditem, lastcorpse oder Name AddObject. Dies ist nicht graphic/type. Nicht angegebener Name wird zu 0 aufgelöst; Der Befehl öffnet kein neues Ziel.
int 1 – ein bekanntes Element hat ein Containerattribut in seinen graphic-Daten. int 0 – es gibt kein solches Zeichen, das Objekt ist mobile, unbekannt oder gelöscht. Dabei handelt es sich nicht um die Anzahl der Dinge im Behälter, nicht um ein Zeichen eines offenen Deckels und nicht um eine Bestätigung des Zugriffs auf den Inhalt.
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.
- Das lokale Clientmodell wird gelesen; Es gibt keine Anfragen an den Server, kein Warten oder Verschieben.
- Das Ergebnis bezieht sich auf den Moment des Lesens. Nach UO.Wait oder einer anderen Aktion können sich das Objekt und seine Flags ändern.
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.IsContainer(UO.GetSerial("lastobject"));
UO.Print("IsContainer: " + Convert.ToString(result));Parameter und Ablauf:
- Das Element ist das serial des Objekts lastobject, nicht sein type.
- Der Befehl liest nur das Containerattribut und öffnet es nicht.
var item = UO.GetSerial("lastobject");
if (Truth(UO.IsContainer(item)))
{
UO.Print("Known container: " + item);
}
else
{
UO.Print("Not a known container");
}
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:
- Die Tasche muss vorab ausgewählt werden und der Inhalt muss dem Kunden bekannt sein.
- FindType erhält type Gold, alle hue- und serial-Container. Ein leeres Ergebnis beweist nicht, dass der Servercontainer leer ist.
return RunScenario();
object? RunScenario()
{
var bag = UO.GetSerial("lasttarget");
if (Truth(UO.IsContainer(bag)))
{
var found = UO.FindType(0x0EED, -1, bag);
UO.Print("Known gold item: " + found);
}
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:
- Exists und IsContainer beantworten unterschiedliche Fragen zum gleichen serial.
- Wenn Tiledata ungeeignet oder noch nicht verfügbar sind, kann die Klassifizierung von der erwarteten abweichen; Verwenden Sie es nicht zur Überprüfung der Brustrechte.
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 bag = UO.GetSerial("backpack");
var exists = UO.Exists(bag);
var container = UO.IsContainer(bag);
UO.Print("Loaded: " + Convert.ToString(exists));
UO.Print("Container flag: " + Convert.ToString(container));
return null;
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: objID (Any)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsContainer:bridge.IsContainer(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Interner Implementierungscode; kein eigenständiges Skript.
case "iscontainer": return new InjectionValue(bridge.IsContainer(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LastContainer();Liest serial des letzten Containers.
Es gibt keine Parameter.
int – gespeichert serial; 0 bedeutet, dass serial nicht installiert ist. Es ist nicht bool und nicht graphic/type; ein ID ungleich Null existiert möglicherweise nicht mehr auf der Welt.
- Feldquelle: _world.LastContainer. Der Befehl wählt das Objekt nicht aus, verwendet es nicht und greift es auch nicht an.
- Liest den aktuellen lokalen Status. Es gibt kein Paket, Ziel oder automatische Aktualisierung; Einzelne Lesevorgänge können unterschiedliche Zustände aufweisen.
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.LastContainer();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- Liest serial des letzten Containers.
var id = UO.LastContainer();
UO.Print(Hex(id));
string Hex(object? value) => Convert.ToInt64(value).ToString("X");Parameter und Ablauf:
- Feldquelle: _world.LastContainer. Der Befehl wählt das Objekt nicht aus, verwendet es nicht und greift es auch nicht an.
return RunScenario();
object? RunScenario()
{
var id = UO.LastContainer();
if (Truth(id != 0) && Truth(UO.Exists(id)))
{
UO.Print(UO.GetName(id));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Liest den aktuellen lokalen Status. Es gibt kein Paket, Ziel oder automatische Aktualisierung; Einzelne Lesevorgänge können unterschiedliche Zustände aufweisen.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var before = UO.LastContainer();
UO.Wait(500);
var after = UO.LastContainer();
UO.Print(before = after);
return null;
}
}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: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetLastContainer:bridge.GetLastContainer().
Interner Implementierungscode; kein eigenständiges Skript.
case "lastcontainer": return new InjectionValue(bridge.GetLastContainer());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.OpenContainer(object? id);
void UO.OpenContainer(object? id, object? timeout);Anfragen zum Öffnen eines Containers.
-
id– Serielles/ID-Objekt: int, numerische/Hex-Zeichenfolge oder etablierter Alias, zum Beispiel „lasttarget“. Dies ist nicht graphic/type. Überprüfen Sie das geladene Objekt, bevor Sie Maßnahmen ergreifen. -
timeout– Optional int, Millisekunden; Der Standardwert ist 0. Ein negativer Wert erhöht die Vorfreude nicht.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- Bridge.OpenContainer ruft UseObject(id) auf, dann UO.Wait(timeout) nur, wenn Timeout>0. Die Pause ist festgelegt; die Anwesenheit/der Inhalt des Behälters wird nicht überprüft.
- Ohne Timeout gibt es keine Pause. Das Ende der Pause sollte nicht als Beweis dafür gewertet werden, dass der Inhalt geöffnet oder vollständig geladen wurde.
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.
Der Befehl steht in einer eigenen Anweisung. Die Meldung davor zeigt den Beginn des Aufrufs und bestätigt keine Serveraktion.
UO.Print("Calling UO.OpenContainer");
UO.OpenContainer("lasttarget");Parameter und Ablauf:
- Anfragen zum Öffnen eines Containers.
UO.OpenContainer("lasttarget");Parameter und Ablauf:
- Bridge.OpenContainer ruft UseObject(id) auf, dann UO.Wait(timeout) nur, wenn Timeout>0. Die Pause ist festgelegt; die Anwesenheit/der Inhalt des Behälters wird nicht überprüft.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Exists("lasttarget")))
{
UO.OpenContainer("lasttarget", 1000);
}
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:
- Ohne Timeout gibt es keine Pause. Das Ende der Pause sollte nicht als Beweis dafür gewertet werden, dass der Inhalt geöffnet oder vollständig geladen wurde.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.OpenContainer(id, 1000);
UO.Print(UO.GetName(id));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: id (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.OpenContainer. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.OpenContainer:bridge.OpenContainer(GetObject(id), 0). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Interner Implementierungscode; kein eigenständiges Skript.
public void OpenContainer(InjectionValue id) => bridge.OpenContainer(GetObject(id), 0);Parameter: id (Any), timeout (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.OpenContainer. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.OpenContainer:bridge.OpenContainer(GetObject(id), NumberConversions.ToInt(timeout)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(timeout).
Interner Implementierungscode; kein eigenständiges Skript.
public void OpenContainer(InjectionValue id, InjectionValue timeout) => bridge.OpenContainer(GetObject(id), NumberConversions.ToInt(timeout));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetCatchBag();
void UO.SetCatchBag(object? container);-
container– Seriennummer des Containers, sein gespeicherter Name, „backpack“ oder „my“. 0 hebt die Zuweisung auf. Ohne Argumente wird lastobject verwendet – das zuletzt angewendete Objekt, nicht zurückgesetzt. Wenn sich der Name nicht in ein positives serial auflöst, wird die Zuweisung entfernt. Die Installation selbst prüft nicht die Serververfügbarkeit und Eignung des Objekts für die Migration.
void: Kein Rückgabewert. Sie können var result = UO.SetCatchBag(...) nicht verwenden, wenn UO.SetCatchBag(...), oder die Zahl 1 als Bestätigung erwarten. Die eigentliche Bewegung wird durch einen separaten Befehl ausgeführt, beispielsweise Grab.
- UO.SetCatchBag() und UO.SetReceivingContainer() haben unterschiedliche Formwerte ohne Argumente: Der erste übernimmt lastobject, der zweite setzt den Container zurück.
- Explizites Zurücksetzen: UO.UnsetCatchBag(), UO.UnsetReceivingContainer() oder UO.SetCatchBag(0). Nach dem Reset nutzt Grab seinen Rucksack ohne gesonderte Zuweisung.
- Die Einstellung serial bedeutet nicht, dass der Server die Platzierung des Artikels dort zulässt. Bei der eigentlichen Übertragung werden Entfernung, Existenz und Verfügbarkeit geprüft.
- In einem regulären Client-Host werden diese Statusdaten vom GetPersistentState-Manager übernommen und gelten für Skripte/Chat/Makros derselben Welt/dieselben Profils und gehören nicht zu einem einzigen Skript. Ein anderer Prozess oder ein scheinbar separater InjectionRuntimeState hat einen anderen Zustand. Das Laden/Löschen eines Profils kann es ersetzen; Die gespeicherten serial werden weiterhin mit der geladenen Welt verglichen.
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.
Der Befehl steht in einer eigenen Anweisung. Die Meldung davor zeigt den Beginn des Aufrufs und bestätigt keine Serveraktion.
UO.Print("Calling UO.SetCatchBag");
UO.SetCatchBag();Parameter und Ablauf:
- Der einzelne Containerparameter erhält die Zeichenfolge „backpack“. Runtime ermöglicht es in serial Ihres Rucksacks.
- Der Aufruf wird in eine separate Zeile ohne var-Ergebnis geschrieben, da er Unit zurückgibt. Die Meldung Print beschreibt die Einstellung und bestätigt nicht die Übertragung des Artikels.
var destination = "backpack";
UO.SetCatchBag(destination);
UO.Print("Receiving container: own backpack");Parameter und Ablauf:
- Diese Überladung hat keine Parameter: Intern wird der Name lastobject verwendet.
- Leere Klammern bedeuten kein Zurücksetzen. Wählen Sie einfach per Doppelklick den passenden Container vorab aus. Die Verfügbarkeit von Taschen für den tatsächlichen Transport hängt vom aktuellen Stand des Spiels ab.
return RunScenario();
object? RunScenario()
{
UO.SetCatchBag();
UO.Print("Destination taken from lastobject");
return null;
}3. Legen Sie einen bestimmten serial fest und geben Sie dann das Standardziel zurück – die Skriptklasse
Parameter und Ablauf:
- Beim ersten Aufruf enthält „container=bag“ den Hex-String „serial“. 0x40001234 ist ein Beispiel, Sie müssen es durch Ihren eigenen Wert ersetzen.
- Im zweiten Aufruf hebt container=0 die Zuweisung auf. Die folgenden Grab ohne expliziten Container verwenden einen Rucksack.
- Der Reset befindet sich nach dem vorgesehenen Carry-Block. Setzen und Zurücksetzen geben kein Ergebnis zurück und verschieben keine Elemente von selbst.
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 bag = "0x40001234";
UO.SetCatchBag(bag);
UO.Print("Configured destination: " + bag);
UO.SetCatchBag(0);
UO.Print("Destination reset to the normal backpack fallback");
return null;
}
}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: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.SetReceivingContainer:SetReceivingContainer(arguments.Length > 0 ? arguments[0].ToString() : "lastobject"). -
InjectionScript.Runtime.InjectionValue.ToString:arguments[0].ToString().
Interner Implementierungscode; kein eigenständiges Skript.
case "setcatchbag":
SetReceivingContainer(arguments.Length > 0 ? arguments[0].ToString() : "lastobject");
break;Parameter: container (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.SetReceivingContainer:SetReceivingContainer(arguments.Length > 0 ? arguments[0].ToString() : "lastobject"). -
InjectionScript.Runtime.InjectionValue.ToString:arguments[0].ToString().
Interner Implementierungscode; kein eigenständiges Skript.
case "setcatchbag":
SetReceivingContainer(arguments.Length > 0 ? arguments[0].ToString() : "lastobject");
break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetReceivingContainer();
void UO.SetReceivingContainer(object? id);Legt den Empfangsbehälter für den zukünftigen Grab fest.
-
id– Optional serial/Alias. „my“/“backpack“ – aktueller Rucksack. Positives ID bleibt ohne Existenzprüfung erhalten; 0/negativ/kein Argument löscht die Einstellung.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- Die Zeichenfolge wird mit GetObject aufgelöst, mit Ausnahme des speziellen my/backpack. Bridge.SetReceivingContainer weist State zu.ReceivingContainer. Der Artikel wird durch diesen Aufruf nicht übernommen.
- Nach der Räumung verwendet Grab den Rucksack ohne expliziten Zweck. Ein positives ID allein bestätigt nicht, dass der Container geladen ist oder für den Server zugänglich ist.
- In einem regulären Client-Host werden diese Statusdaten vom GetPersistentState-Manager übernommen und gelten für Skripte/Chat/Makros derselben Welt/dieselben Profils und gehören nicht zu einem einzigen Skript. Ein anderer Prozess oder ein scheinbar separater InjectionRuntimeState hat einen anderen Zustand. Das Laden/Löschen eines Profils kann es ersetzen; Die gespeicherten serial werden weiterhin mit der geladenen Welt verglichen.
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.
Der Befehl steht in einer eigenen Anweisung. Die Meldung davor zeigt den Beginn des Aufrufs und bestätigt keine Serveraktion.
UO.Print("Calling UO.SetReceivingContainer");
UO.SetReceivingContainer();Parameter und Ablauf:
- Legt den Empfangsbehälter für den zukünftigen Grab fest.
UO.SetReceivingContainer("backpack");Parameter und Ablauf:
- Die Zeichenfolge wird mit GetObject aufgelöst, mit Ausnahme des speziellen my/backpack. Bridge.SetReceivingContainer weist State zu.ReceivingContainer. Der Artikel wird durch diesen Aufruf nicht übernommen.
return RunScenario();
object? RunScenario()
{
UO.SetReceivingContainer();
return null;
}Parameter und Ablauf:
- Nach der Räumung verwendet Grab den Rucksack ohne expliziten Zweck. Ein positives ID allein bestätigt nicht, dass der Container geladen ist oder für den Server zugänglich ist.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var bag = UO.GetSerial("lastcontainer");
if (Truth(UO.IsContainer(bag)))
{
UO.SetReceivingContainer(bag);
}
return null;
}
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: Keine Parameter.
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.SetReceivingContainer. -
InjectionScript.Runtime.InjectionApiUO.UnsetReceivingContainer:UnsetReceivingContainer().
Interner Implementierungscode; kein eigenständiges Skript.
public void SetReceivingContainer() => UnsetReceivingContainer();Parameter: id (Integer/String)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.SetReceivingContainer. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UnsetReceivingContainer:bridge.UnsetReceivingContainer(). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetReceivingContainer:bridge.SetReceivingContainer(id).
Interner Implementierungscode; kein eigenständiges Skript.
public void SetReceivingContainer(int id)
{
if (id <= 0)
bridge.UnsetReceivingContainer();
else
bridge.SetReceivingContainer(id);
}Parameter: id (Integer/String)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.SetReceivingContainer. -
InjectionScript.Runtime.InjectionApiUO.SetReceivingContainer:SetReceivingContainer(bridge.Backpack). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Backpack:bridge.Backpack.
Interner Implementierungscode; kein eigenständiges Skript.
public void SetReceivingContainer(string id)
{
string name = (id ?? string.Empty).Trim();
if (name.Equals("my", StringComparison.OrdinalIgnoreCase)
|| name.Equals("backpack", StringComparison.OrdinalIgnoreCase))
{
SetReceivingContainer(bridge.Backpack);
return;
}
SetReceivingContainer(GetObject(id));
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.UnsetCatchBag();Löscht den Empfangscontainer für Grab.
Es gibt keine Parameter.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- ExecuteLegacyManualAlias ruft UnsetReceivingContainer auf; Bridge weist ReceivingContainer=0 zu. Nachfolgendes Grab verwendet einen Rucksack. Dies ist keine Beutelentfernung.
- Ändert oder zeigt nur die angegebenen lokalen Daten an. Für diesen Befehl gibt es keine Serverbestätigung.
- In einem regulären Client-Host werden diese Statusdaten vom GetPersistentState-Manager übernommen und gelten für Skripte/Chat/Makros derselben Welt/dieselben Profils und gehören nicht zu einem einzigen Skript. Ein anderer Prozess oder ein scheinbar separater InjectionRuntimeState hat einen anderen Zustand. Das Laden/Löschen eines Profils kann es ersetzen; Die gespeicherten serial werden weiterhin mit der geladenen Welt verglichen.
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.
Der Befehl steht in einer eigenen Anweisung. Die Meldung davor zeigt den Beginn des Aufrufs und bestätigt keine Serveraktion.
UO.Print("Calling UO.UnsetCatchBag");
UO.UnsetCatchBag();Parameter und Ablauf:
- Löscht den Empfangscontainer für Grab.
UO.UnsetCatchBag();Parameter und Ablauf:
- ExecuteLegacyManualAlias ruft UnsetReceivingContainer auf; Bridge weist ReceivingContainer=0 zu. Nachfolgendes Grab verwendet einen Rucksack. Dies ist keine Beutelentfernung.
return RunScenario();
object? RunScenario()
{
UO.SetCatchBag("backpack");
UO.UnsetCatchBag();
return null;
}Parameter und Ablauf:
- Ändert oder zeigt nur die angegebenen lokalen Daten an. Für diesen Befehl gibt es keine Serverbestätigung.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.UnsetCatchBag();
UO.Print(UO.Backpack());
return null;
}
}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: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.UnsetReceivingContainer:UnsetReceivingContainer().
Interner Implementierungscode; kein eigenständiges Skript.
case "unsetcatchbag": UnsetReceivingContainer(); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.UnsetReceivingContainer();Löscht den gespeicherten Empfangscontainer.
Es gibt keine Parameter.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- UnsetReceivingContainer weist ReceivingContainer=0 zu. Nachfolgendes Grab verwendet einen Rucksack ohne expliziten Zweck. Artikel werden nicht übertragen.
- Ändert oder zeigt nur die angegebenen lokalen Daten an. Für diesen Befehl gibt es keine Serverbestätigung.
- In einem regulären Client-Host werden diese Statusdaten vom GetPersistentState-Manager übernommen und gelten für Skripte/Chat/Makros derselben Welt/dieselben Profils und gehören nicht zu einem einzigen Skript. Ein anderer Prozess oder ein scheinbar separater InjectionRuntimeState hat einen anderen Zustand. Das Laden/Löschen eines Profils kann es ersetzen; Die gespeicherten serial werden weiterhin mit der geladenen Welt verglichen.
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.
Der Befehl steht in einer eigenen Anweisung. Die Meldung davor zeigt den Beginn des Aufrufs und bestätigt keine Serveraktion.
UO.Print("Calling UO.UnsetReceivingContainer");
UO.UnsetReceivingContainer();Parameter und Ablauf:
- Löscht den gespeicherten Empfangscontainer.
UO.UnsetReceivingContainer();Parameter und Ablauf:
- UnsetReceivingContainer weist ReceivingContainer=0 zu. Nachfolgendes Grab verwendet einen Rucksack ohne expliziten Zweck. Artikel werden nicht übertragen.
return RunScenario();
object? RunScenario()
{
UO.SetReceivingContainer("backpack");
UO.UnsetReceivingContainer();
return null;
}Parameter und Ablauf:
- Ändert oder zeigt nur die angegebenen lokalen Daten an. Für diesen Befehl gibt es keine Serverbestätigung.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.UnsetReceivingContainer();
UO.Print(UO.Backpack());
return null;
}
}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: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.UnsetReceivingContainer. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UnsetReceivingContainer:bridge.UnsetReceivingContainer().
Interner Implementierungscode; kein eigenständiges Skript.
public void UnsetReceivingContainer() => bridge.UnsetReceivingContainer();ClassicUO — Bad Newbie & C# Scripts IDE