Repository navigation
DE UO Topic items
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Home · C# · IDE · UO API · A–Z · Beispiele · Sprachen
Eigenschaften, Nutzung und Überlassung von Gegenständen. Serial wählt einen bestimmten Artikel aus; type/graphic wählt die Ansicht aus. Die Übergabe der Stapeleinheiten und die Anzahl der überführten Artikel haben unterschiedliche Parameter.
| Thema | Befehle und Erklärungen |
|---|---|
| Item Properties | UO.GetSerial · UO.GetType · UO.GetGraphic · UO.GetColor · UO.GetQuantity · UO.GetName · UO.GetTooltip · UO.ContainerOf · UO.GetParent · UO.GetLayer · UO.IsMovable · UO.GetX · UO.GetY · UO.GetZ |
| Artikel finden | UO.FindType · UO.FindTypeEx · UO.FindTypesArrayEx · UO.FindItem · UO.FindAnyType · UO.FindAtCoord · UO.FindList · UO.FindDistance · UO.FindVertical |
| Elemente verwenden | UO.UseObject · UO.UseType · UO.UseFromGround · UO.UseWorldObject · UO.UseItemOnMobile |
| Moving Artikel | UO.Grab · UO.Drag · UO.Drop · UO.MoveItem · UO.MoveItems · UO.MassMove · UO.EmptyContainer |
| Ground Artikel | UO.GetWorldItems · UO.FindType · UO.CountGround · UO.MoveItem |
| Containerartikel | UO.GetContent · UO.FindTypeEx · UO.OpenContainer |
| Fake-/Kundenartikel | UO.MakeFakeItem · UO.DeleteObject |
| Dye | UO.Dye |
UO.Exists · UO.IsObjectExists · UO.GetSerial · UO.GetType · UO.GetGraphic · UO.GetColor · UO.GetQuantity · UO.Name · UO.GetName · UO.GetAltName · UO.GetTooltip · UO.GetTooltipRec · UO.GetLayer · UO.GetLocked · UO.IsMovable · UO.GetFlags · UO.ReceiveObjectName · UO.UpdateObject
UO.UseObject · UO.UseType · UO.UseFromGround · UO.UseWorldObject · UO.UseItemOnMobile · UO.ClickOnObject · UO.TicksUse
UO.Grab · UO.Drag · UO.DragItem · UO.Drop · UO.DropHere · UO.DropItem · UO.MoveItem · UO.MoveItems · UO.MassMove · UO.EmptyContainer · UO.DropDelay · UO.DropCheckCoord · UO.Picking
UO.MakeFakeItem · UO.DeleteObject
UO.AddObject · UO.AddType · UO.EasyObject · UO.UserObject · UO.LastObject · UO.Forget
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 ok = UO.MoveItem("loot");
UO.Print("Move request: " + Convert.ToString(ok));Parameter, Ergebnis und alle Szenarien
UO.MassMove(350, 0);
UO.Print("Drag one sample item to the destination container");Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AddObject(object? arg0);
void UO.AddObject(object? arg0, object? arg1);Speichert ein benanntes serial-Objekt zur späteren Verwendung durch Skripte. Die Form mit zwei Argumenten gibt das Objekt sofort an; Ein Argument löst die Auswahl eines Objekts durch den Cursor aus.
-
nameist ein nicht leerer Name, unter dem das Objekt zur Laufzeit verfügbar ist. -
objectRawId- serial oder ein bereits gespeicherter Objektname. Die Ein-Argument-Überladung akzeptiert diesen Parameter nicht, sondern fordert stattdessen die Auswahl eines Objekts an.
void. Überprüfen Sie die gespeicherte Bindung, indem Sie das Objekt anhand seines Namens lesen. Der Anruf gibt nicht serial zurück.
- Bei zwei Argumenten löst die Laufzeit
objectRawIdauf und speichert serial untername. Mit einem Argument fordert der Client eine Objektauswahl an: Das Element oder mobile wird ausgewählt, nicht jedoch die Kartenzelle. Vor der Auswahl wird die vorherige Bindung mit demselben Namen gelöscht; Durch Abbrechen/Verlieren des Cursors wird dieser nicht wiederhergestellt.
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.AddObject");
UO.AddObject("target");Parameter und Ablauf:
- Speichern Sie serial eines bekannten Artikels unter einem passenden Namen.
UO.AddObject("supplyBox", "0x40012345");2. Fordern Sie die Auswahl eines Elements an oder mobile mit dem Cursor und nennen Sie es Ziel. - Skriptfunktion
Parameter und Ablauf:
- Fordern Sie die Auswahl eines Elements an oder mobile mit dem Cursor und nennen Sie es Ziel.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.AddObject("target");
return null;
}3. Durch erneutes Speichern des Namens wird die Bindung durch ein neues serial ersetzt. - Skriptklasse
Parameter und Ablauf:
- Durch erneutes Speichern des Namens wird die Bindung durch ein neues serial ersetzt.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var selectedSerial = "0x40012345";
UO.AddObject("supplyBox", selectedSerial);
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AddType(object? arg0);
void UO.AddType(object? arg0, object? arg1);Speichert einen Anzeigenamen für den Element- oder Körpergrafiktyp mobile. Beispielsweise können Sie nach UO.AddType("bandage", 0x0E21) über den Namen „Bandage“ nach Bandagen suchen oder diese verwenden, ohne die Ziffer type in jeder Zeile zu wiederholen. Dabei wird ein Name → grafische Zuordnung eingerichtet, kein Element erstellt oder ein bestimmtes ID gespeichert.
-
name– Erforderliche Zeichenfolge in Anführungszeichen – Ihr Typname. Randabstände werden entfernt, Groß- und Kleinschreibung spielt keine Rolle: „Bandage“ und „bandage“ sind ein Eintrag. Leere Zeichenfolge, numerischer Name, beliebiges Wort, Symbol | und Steuerzeichen sind verboten. Dies ist der Parameterwert, keine neue Variable oder kein UO-Befehl: Nachfolgende Aufrufe erfordern ebenfalls Anführungszeichen. -
type– Optional int 0..65535: Grafik/type, wie 0x0E21 oder 3617. Eine Zeichenfolge mit einer Dezimal-/Hexadezimalzahl oder dem Namen eines bereits gespeicherten Typs ist akzeptabel. Letzterer kopiert seine aktuelle Nummer, stellt keine Verbindung zwischen Namen her. ID der Form 0x40001001, negative Zahlen, Brüche und unbekannte Namen werden nicht akzeptiert. Wenn kein Argument vorhanden ist, erscheint ein Auswahlcursor: Klicken Sie auf das geladene Element, auch innerhalb des Containers, oder mobile. Die Grafik des ausgewählten Objekts wird gespeichert; Bodenbelag und statische Fliesen sind nicht geeignet.
void – kein Rückgabewert. Schreiben Sie in eine separate Zeile, ohne var Ergebnis = und ohne Vergleich mit true/1. Der Befehl gibt nicht das ausgewählte type, serial oder Erfolgsflag zurück. Beim Abbrechen mit der Maus bleibt die alte Eingabe erhalten; wenn vorher kein Name vorhanden war, bleibt er undefiniert. Die nächste Skriptzeile wird nach einem normalen Abbruch ausgeführt. Lösen Sie die Aktion also nicht automatisch aus, vorausgesetzt, der Benutzer hat definitiv ein neues Element ausgewählt.
- Die Form AddType(Name, type) speichert die Nummer sofort, ohne Cursor und ohne Netzwerkaktion. Eine Wiederholung mit demselben Namen ersetzt ihren Typ. Ein fehlerhafter Wert zerstört den vorherigen Eintrag nicht. Das Formular AddType(Name) wartet auf Auswahl; Esc, das Ersetzen des Cursors durch eine andere Aktion oder ein ungeeignetes Ziel lässt den Eintrag unverändert. Durch das erzwungene Anhalten des Skripts wird die Wartezeit unterbrochen und nur der dazugehörige Cursor freigegeben.
- Typnamen werden von AddObject getrennt gehalten: Das gleiche Wort könnte type in FindType und serial in UseObject darstellen. AddType("supply", 0x0E21) allein macht UseObject("supply") nicht gültig. Verwenden Sie für einen bestimmten Artikel AddObject/GetSerial; für eine Artikelfamilie - AddType und Parameter type.
- Namen werden in den Parametern type FindType (alle Formen), FindTypeEx, FindTypesArrayEx, FindList, FindNotoriety, GetWorldItems, UseType, UseFromGround, Count, aufgelöst. CountGround, CountEx, EquipT, WaitTargetType, WaitTargetGround und WaitTargetObjectType. In Masken der Typen GetMobiles/FindAnyType/WaitTarget können Sie Namen über | kombinieren oder Array; Die Regeln der Bekanntheit bleiben getrennt. Die Wörter menschlich/nah und andere FindMobile-Filter werden nicht überschrieben.
- Es wird nur die Grafik gespeichert, keine Farbe, Menge, Behälter, Artikelname, Ebene oder Eigenschaften. Zwei Artikel desselben Typs mit unterschiedlichen Farben erfordern bei der Suche eine separate Farbe. Der Eintrag bestätigt nicht, dass das Element derzeit vorhanden ist, verfügbar ist oder dass der Server die Aktion zulässt.
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.AddType");
UO.AddType("my_tool");Parameter und Ablauf:
- gold_stack – Name; 0x0EED – Grafisches Gold. FindType: -1 – jede Farbe, ground – Erde, 2 – Suchradius. Es wird der String serial oder ein leerer String zurückgegeben.
- MoveItem erhält das gefundene serial, 0 für den gesamten Stapel und backpack als Ziel. Dies ist ein Stapel, nicht alle Stapel im Umkreis. Die Verfügbarkeit der Übertragung und das tatsächliche Ergebnis hängen vom Server ab; Die Typdefinition selbst trägt nichts.
UO.AddType("gold_stack", 0x0EED);
var item = UO.FindType("gold_stack", -1, "ground", 2);
if (Truth(item == ""))
{
UO.Print("No loaded gold stack within 2 tiles");
return null;
}
var moved = UO.MoveItem(item, 0, "backpack");
if (Truth(moved == 0))
{
UO.Print("Move request failed");
}
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 Zeichenfolgennummer 0x0E21 wird als int Grafik gespeichert. Life/MaxHP vergleiche HP Zeichen. FindType sucht rekursiv nach einer beliebigen Farbe im Rucksack; -1 in der Ferne verwendet das Standardsuchverhalten.
- self ist der Anwendungszweck, Verband nach FindType ist eine Variable mit serial. Die Warteschlange des Ziels wird vorbereitet, bevor der Gegenstand verwendet wird. Das Skript sendet die Verwendung und behauptet nicht, dass die Behandlung bereits abgeschlossen ist; Der Behandlungstimer/die Regeln hängen vom Server ab.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.AddType("bandage", "0x0E21");
if (Truth(UO.Life() >= UO.MaxHP()))
{
return null;
}
var bandage = UO.FindType("bandage", -1, "backpack", -1, true);
if (Truth(bandage == ""))
{
UO.Print("No loaded bandages in backpack");
return null;
}
UO.WaitTargetObject("self");
UO.UseObject(bandage);
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:
- Main enthält nur den Namen, daher wird der Cursor geöffnet. Der Werkzeugtyp wird gespeichert, nicht sein ID und nicht seine Farbe. UseSavedTool ist eine normale eigenständige Prozedur C#, kein integrierter Befehl.
- UseType sucht im Rucksack nach einer Instanz eines gespeicherten Typs einer beliebigen Farbe und verwendet sie; gibt int serial oder 0 zurück, wenn es fehlt. Wenn der Name nie definiert wurde, handelt es sich um einen Argumentfehler und nicht um das Ergebnis von 0. Nach der Aufhebung der Zuweisung ruft Main UseSavedTool nicht auf.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
UO.AddType("my_tool");
return null;
}
void UseSavedTool()
{
var used = UO.UseType("my_tool", -1, "backpack");
if (Truth(used == 0))
{
UO.Print("No matching loaded tool in backpack");
}
}
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 · 繁體中文 · 日本語 · 한국어
void UO.ClickOnObject(object? arg0);Sendet einen einzelnen Klick auf ein Objekt über GameActions.SingleClick.
-
ObjID– Seriennummer des Objekts oder unterstützter Name von self/backpack/lasttarget/saved object; Numerische Zeichenfolgen und 0x-Zeichenfolgen werden zur Laufzeit aufgelöst.
void – kein Rückgabewert.
- Click löst die Verbindung durch ObjectChecked auf. ClickOnObject verwendet zunächst Arg für serial und ruft Click(int) auf. Hierbei handelt es sich um eine Bitte um die Unterschrift/Informationen des Artikels, nicht um DoubleClick oder die Verwendung des Artikels. Die Serverantwort kommt asynchron.
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.ClickOnObject");
UO.ClickOnObject("self");Parameter und Ablauf:
- Ein einzelner Klick wird an self gesendet.
UO.ClickOnObject("self");Parameter und Ablauf:
- Vor dem Senden wird die lokale Existenz des Ziels überprüft.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var target = UO.LastTarget();
if (Truth(UO.Exists(target)))
{
UO.ClickOnObject(target);
}
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:
- Ein einzelner Klick auf einen Rucksack öffnet ihn nicht wie ein Doppelklick.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var bag = UO.Backpack();
if (Truth(bag != 0))
{
UO.ClickOnObject(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;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.DeleteObject(object? arg0);Entfernt den gespeicherten Objektnamen aus der Laufzeittabelle.
-
name– string Name in der Objekttabelle; Nur dieser Eintrag wird gelöscht.
void – kein Rückgabewert.
- Wenn ein Name gefunden wird, wird der Eintrag gelöscht und eine Bestätigung gedruckt. Wenn kein Name vorhanden ist, wird die Meldung „nicht gefunden“ ausgegeben. Das Serverobjekt und sein Inhalt werden nicht gelöscht.
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.DeleteObject");
UO.DeleteObject("temporary");Parameter und Ablauf:
- Es wird nur die temporäre Verbindung mit dem serial des Charakters entfernt.
UO.AddObject("temporary",UO.Self());
UO.DeleteObject("temporary");Parameter und Ablauf:
- Ein fehlender Name führt zu einer Diagnosemeldung.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.DeleteObject("missing-example-name");
return null;
}Parameter und Ablauf:
- Die string-Variable gibt den genauen Eintrag an, der gelöscht werden soll.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var name = "temporary";
UO.AddObject(name, UO.Self());
UO.DeleteObject(name);
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Drag(object? arg0);
int UO.Drag(object? arg0, object? arg1);
int UO.Drag(object? arg0, object? arg1, object? arg2);
void UO.Drag(object? arg0, object? arg1, object? arg2, object? arg3);Bringt ein bestimmtes Element zum Cursor; Ein separates Formular mit vier Argumenten zieht die Maus in einem Windows-Fenster.
-
id– Seriennummer eines bestimmten Elements/Zeichens: Zahl, Hexadezimal-/Dezimalzeichenfolge, self/backpack/lasttarget/lastobject/lastcontainer/lastcorpse/finditem/laststatus oder gespeicherter Name AddObject. Das ist nicht type. Das Objekt muss geladen sein; Überprüfen Sie vor der Aktion Exists. -
amount– Anzahl der Einheiten in einem Stapel. 0 oder ein negativer Wert bedeutet den gesamten Stapel; Das Positive wird durch die verfügbare Menge begrenzt. Es ist NICHT die Anzahl der Stapel, die MassMove begrenzt. Wenn nicht vorhanden, entspricht 0. -
timeout– Optionales drittes Argument: auf beobachtbares Picking warten, bis die angegebene Anzahl von Millisekunden erreicht ist; Der Standardwert ist 0. Ein negativer Wert entspricht 0. -
fromX– Nur vier int-Formulare: das anfängliche X der Maus in Client-Fensterpixeln. -
fromY– Ursprüngliches Maus-Y in den Pixeln des Client-Fensters. -
toX– Das End-X der Maus in Pixel. -
toY– Das End-Y der Maus in Pixel.
Mit 1..3 int-Argumenten: 1 — die Lift-Anfrage wurde vom Client akzeptiert (mit Timeout>0 wurde auch ein beschäftigter Cursor beobachtet); 0 – Aufzug abgelehnt oder Zeitüberschreitung abgelaufen. Wenn vier Argumente null sind: Es gibt keinen Rückgabewert. Dies ist kein ID-Artikel.
- Für die Spielübertragung ist die bevorzugte Form id[,amount[,timeout]] gefolgt von DropItem oder einem einzelnen MoveItem.
- Das Formular fromX/fromY/toX/toY verwendet Windows-Mausereignisse: Bewegen, Drücken, Bewegen, Loslassen. Es gibt keine Serverbestätigung und hängt vom tatsächlichen Inhalt/Fokus des Fensters ab.
- Ein besetzter Cursor ist nicht gleichbedeutend mit einer erfolgreichen Übertragung zum Ziel. Erfassung und Freigabe sind separate Aktionen.
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.Drag("lasttarget");
UO.Print("Drag: " + Convert.ToString(result));Parameter und Ablauf:
- Beute – serial bis AddObject. amount=0 bedeutet den gesamten Stapel; -1/-1 legt den automatischen Platz im Gump fest.
- DropItem beendet die Erfassung derselben Laufzeit. Eins bedeutet, dass die Anfrage gesendet wurde, nicht die Bestätigung des Servers.
if (Truth(UO.Drag("loot", 0)))
{
var dropped = UO.DropItem("backpack", -1, -1, 0);
UO.Print("Drop request: " + Convert.ToString(dropped));
}
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:
- Menge=10 — bis zu zehn Einheiten eines Stapels; Timeout=500 ms.
- 44/55 – Koordinaten im Rucksack, nicht auf der Karte. Wenn der Gegenstand nicht genommen werden kann, wird DropItem nicht aufgerufen.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.Drag("loot", 10, 500)))
{
var dropped = UO.DropItem("backpack", 44, 55, 0);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Ein Drag-Argument bedeutet den gesamten Stapel und Timeout=0.
- Picking prüft den freigegebenen Cursor des Clients. Führen Sie nicht zwei unabhängige Migrationen gleichzeitig durch.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
if (Truth(UO.Picking() == 0))
{
if (Truth(UO.Drag("loot")))
{
var dropped = UO.DropItem("backpack", -1, -1, 0);
}
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Parameter und Ablauf:
- Dies sind die Fensterpixel: Start (100,120), Ende (260,180). Es gibt keinen serial, Betrag oder Timeout.
- Nur verwenden, wenn sich die gewünschten Elemente an diesen Stellen befinden; Bei Objekten ist die Adressierung über serial zuverlässiger.
UO.Drag(100, 120, 260, 180);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.DragItem(object? arg0, object? arg1);Nimmt einen bestimmten Gegenstand auf und merkt sich ihn für DropItem dieser Laufzeit.
-
ObjID– Seriennummer eines bestimmten Elements/Zeichens: Zahl, Hexadezimal-/Dezimalzeichenfolge, self/backpack/lasttarget/lastobject/lastcontainer/lastcorpse/finditem/laststatus oder gespeicherter Name AddObject. Das ist nicht type. Das Objekt muss geladen sein; Überprüfen Sie vor der Aktion Exists. -
Count– Anzahl der Einheiten in einem Stapel. 0 oder ein negativer Wert bedeutet den gesamten Stapel; Das Positive wird durch die verfügbare Menge begrenzt. Es ist NICHT die Anzahl der Stapel, die MassMove begrenzt.
int 1 – der Kunde hat den Anstieg akzeptiert; 0 – Artikel nicht gefunden oder PickUp abgelehnt. Kompatibilitätsmetadaten object? bedeutet nicht, dass es sich um einen beliebigen Ergebnistyp handelt. Das ist nicht serial.
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.
- Beide Argumente sind erforderlich. Es gibt kein eingebautes Warten auf Bestätigung; Die Form Drag(id,amount,timeout) fügt eine Wartezeit für das lokale Picking hinzu.
- Führen Sie nach einer erfolgreichen Erfassung die Aktion DropItem aus. Ein manuell mit der Maus aufgenommenes Element setzt nicht den DragItem-Speicher dieser Laufzeit.
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.DragItem("lasttarget", 0);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- ObjID=Loot über AddObject, Count=0 ist der gesamte Stapel.
- Das zweite Team lässt den gleichen aufgenommenen Gegenstand fallen.
if (Truth(UO.DragItem("loot", 0)))
{
var ok = UO.DropItem("backpack", -1, -1, 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:
- Ersetzen Sie ObjID durch Ihr serial. Count=5 bezieht sich auf Einheiten desselben Stapels.
- Der Standort 44/55 befindet sich im Rucksack-Gummi.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.DragItem(0x40001234, 5)))
{
var ok = UO.DropItem("backpack", 44, 55, 0);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- picked — int 1/0.
- Rufen Sie DropItem nicht nach einer fehlgeschlagenen Erfassung auf: Der Cursor gehört möglicherweise zu einer anderen Aktivität.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var picked = UO.DragItem("loot", 0);
if (Truth(picked == 0))
{
UO.Print("Item was not picked up");
}
else
{
var ok = UO.DropItem("backpack", -1, -1, 0);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Drop(object? arg0);
int UO.Drop(object? arg0, object? arg1);
int UO.Drop(object? arg0, object? arg1, object? arg2);
dynamic UO.Drop(object? arg0, object? arg1, object? arg2, object? arg3, object? arg4);Führt eine vollständige Übertragung des angegebenen Gegenstands durch, standardmäßig auf den Boden unter dem Charakter.
-
object– Seriennummer eines bestimmten Elements/Zeichens: Zahl, Hexadezimal-/Dezimalzeichenfolge, self/backpack/lasttarget/lastobject/lastcontainer/lastcorpse/finditem/laststatus oder gespeicherter Name AddObject. Das ist nicht type. Das Objekt muss geladen sein; Überprüfen Sie vor der Aktion Exists. -
ObjID– Seriennummer eines bestimmten Elements/Zeichens: Zahl, Hexadezimal-/Dezimalzeichenfolge, self/backpack/lasttarget/lastobject/lastcontainer/lastcorpse/finditem/laststatus oder gespeicherter Name AddObject. Das ist nicht type. Das Objekt muss geladen sein; Überprüfen Sie vor der Aktion Exists. -
count– Anzahl der Einheiten in einem Stapel. 0 oder ein negativer Wert bedeutet den gesamten Stapel; Das Positive wird durch die verfügbare Menge begrenzt. Es ist NICHT die Anzahl der Stapel, die MassMove begrenzt. In der Kurzform ohne Zählung lautet es 0. -
Count– Anzahl der Einheiten in einem Stapel. 0 oder ein negativer Wert bedeutet den gesamten Stapel; Das Positive wird durch die verfügbare Menge begrenzt. Es ist NICHT die Anzahl der Stapel, die MassMove begrenzt. In der Kurzform ohne Zählung lautet es 0. -
destination– Nur in der Form mit drei Argumenten: Seriennummer des Containers oder Setname AddObject; backpack/self/my wähle einen Rucksack, receiving/catchbag - SetCatchBag, und ohne einen Rucksack. lastcontainer/lastobject/lasttarget/lastcorpse/finditem/laststatus sind gültig, wenn sie in den richtigen Container aufgelöst werden. ground oder 0 wählt explizit Land aus; -1 – der gleiche Rucksackwähler. Ein unbekannter oder nicht angegebener Name verursacht einen Fehler, bevor das Element erfasst wird. Ohne Zielargument wird der Rucksack verwendet. -
X– Nur in Form mit fünf Argumenten: Welt-X-Ziel auf der Erde. -
Y– Welt Y für die Form mit fünf Argumenten. -
Z– Welthöhe für die Form mit fünf Argumenten.
int 1 – vollständige Übertragungsanforderung vom Kunden akzeptiert; 0 – fehlgeschlagen. Das mit fünf Argumenten kompatible Formular hat die Metadaten object?, gibt aber tatsächlich auch int 1/0 zurück. Dies ist kein Zurücksetzen des zuvor genommenen DragItem: Verwenden Sie dafür DropItem.
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.
- Formulare mit den Argumenten 1, 2, 3 und 5 werden registriert. Es gibt kein Formular mit vier Argumenten.
- Drop(item) überträgt den gesamten Stapel auf den Boden darunter; Drop(item,count) gibt Einheiten an; Drop(item,count,destination) ermöglicht den Container.
- Drop(item,count,X,Y,Z) bedeutet immer Land. Für einen Container mit Gump-Koordinaten verwenden Sie MoveItem.
- Es gelten Hebe-, DropCheckCoord- und Server-Check-Einschränkungen. Das Team wartet nicht auf eine gesonderte Lieferbestätigung.
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.Drop("lasttarget");
UO.Print("Drop: " + Convert.ToString(result));Parameter und Ablauf:
- object=loot über AddObject, count=0 standardmäßig.
- Ziel – der aktuelle Punkt des Charakters auf dem Boden.
var ok = UO.Drop("loot");Parameter und Ablauf:
- count=5 Einheiten eines Stapels; Ziel=backpack.
- Das dritte Argument hier ist ein Container, nicht X.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var ok = UO.Drop("loot", 5, "backpack");
return null;
}Parameter und Ablauf:
- Ersetzen Sie ObjID durch Ihr serial; Count=0 gesamter Stapel; X/Y/Z=1445/1690/0.
- Für dieses Formular ist der dritte Wert X. Vorläufiges Drag ist nicht erforderlich.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var ok = UO.Drop(0x40001234, 0, 1445, 1690, 0);
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.DropCheckCoord();
dynamic UO.DropCheckCoord(object? arg0);Liest oder ändert die Koordinatenbereichsprüfung, wenn Gegenstände auf den Boden fallen gelassen werden.
-
value– Optionaler Wert: 0 deaktiviert, int ungleich Null aktiviert. Ohne Argument wird der Zustand nur gelesen.
int 0/1 — aktueller Zustand nach möglicher Aufzeichnung; beide Formen geben eine Zahl zurück.
- Wenn MoveItemChecked einem Boden zugewiesen ist und die Flagge aktiviert ist, wird der Tschebyscheff-X/Y-Abstand zurückgewiesen, der größer als 2 Zellen vom Charakter ist. Bei der Prüfung werden die Koordinaten nicht geändert und die Serverberechtigung zur Übertragung wird nicht überprüft. Containerzuweisungen sind nicht auf dieses Flag beschränkt.
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.DropCheckCoord();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- Read gibt die aktuelle normalisierte Einstellung zurück.
var enabled = UO.DropCheckCoord();
UO.Print(Convert.ToString(enabled));Parameter und Ablauf:
- Bodentransfers über MoveItemChecked sind jetzt auf zwei Felder beschränkt.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var enabled = UO.DropCheckCoord(1);
UO.Print(Convert.ToString(enabled));
return null;
}Parameter und Ablauf:
- Der ursprüngliche Wert wird gespeichert und explizit wiederhergestellt.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var old = UO.DropCheckCoord();
var temporary = UO.DropCheckCoord(0);
var restored = UO.DropCheckCoord(old);
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.DropDelay();
dynamic UO.DropDelay(object? arg0);Liest oder ändert die GrabDelay-Laufzeitverzögerung, die von Elementübertragungen verwendet wird.
-
value– Optionale Verzögerung in Millisekunden; Brückengrenzen auf 50..10000.
Ohne int-Argument mit aktuellem GrabDelay. Das Eingabeformular gibt null zurück, obwohl die Metadaten beider Formulare „object?“ enthalten.
- SetDropDelay und GetDropDelay verwenden State. GrabDelay. Die Einstellung gibt die Client-Verzögerung von Übertragungen an und nicht die Bestätigung ihres Abschlusses durch den Server.
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.DropDelay();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- Read gibt Millisekunden zurück.
var ms = UO.DropDelay();
UO.Print(Convert.ToString(ms));Parameter und Ablauf:
- Der Eintrag setzt 250 ms.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.DropDelay(250);
return null;
}Parameter und Ablauf:
- Der Nullwert ist auf 50 ms begrenzt und wird danach auf den vorherigen Wert zurückgesetzt.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var previous = UO.DropDelay();
UO.DropDelay(0);
UO.Print(Convert.ToString(UO.DropDelay()));
UO.DropDelay(previous);
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.DropHere(object? arg0);Überträgt den gesamten angegebenen Gegenstand/Stapel am aktuellen Punkt des Charakters auf den Boden.
-
object– Seriennummer eines bestimmten Elements/Zeichens: Zahl, Hexadezimal-/Dezimalzeichenfolge, self/backpack/lasttarget/lastobject/lastcontainer/lastcorpse/finditem/laststatus oder gespeicherter Name AddObject. Das ist nicht type. Das Objekt muss geladen sein; Überprüfen Sie vor der Aktion Exists.
int 1 – die Übertragungsanfrage wurde vom Kunden angenommen; 0 – nicht abgeschlossen. Dies ist keine serial oder Serverbestätigung.
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.
- Es wurde ein Formular mit genau einem Argument registriert. Für einen Teil des Stapels verwenden Sie Drop(item,count) oder MoveItem.
- X/Y/Z werden während des Aufrufs vom Zeichen übernommen. Es ist kein vorheriges DragItem erforderlich.
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.DropHere(UO.LastTarget());
UO.Print("DropHere: " + Convert.ToString(result));Parameter und Ablauf:
- object - serial, durch real ersetzen.
- Der gesamte Stapel wird auf den Charakter übertragen.
var ok = UO.DropHere(0x40001234);Parameter und Ablauf:
- Beute wird über AddObject angegeben.
- Exists prüft die Verfügbarkeit, nicht die Migrationsberechtigung des Servers.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.Exists("loot")))
{
var ok = UO.DropHere("loot");
}
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:
- ok — int 1/0.
- Um das Serverergebnis zu bestätigen, überprüfen Sie separat die Position und den Container des Artikels.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var ok = UO.DropHere("loot");
if (Truth(ok == 0))
{
UO.Print("Drop request was not accepted");
}
return null;
}
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.DropItem(object? arg0, object? arg1, object? arg2, object? arg3);Setzt einen zuvor erfolgreich per Drag/DragItem aufgenommenen Gegenstand in derselben Laufzeit zurück.
-
MoveIntoID– Serielles Ziel, backpack oder Name des Sets AddObject. Die Zahl 0 bedeutet Erde. Verwenden Sie backpack anstelle von self: Dieses Argument auf niedriger Ebene löst self in das serial eines Zeichens auf. -
X– Für einen Behälter – in den Gummi stellen (-1/65535 automatisch); für die Erde - Welt X. -
Y– Für einen Behälter – in den Gummi stellen (-1/65535 automatisch); für die Erde - Welt Y. -
Z– Höhe zurücksetzen; im Container normalerweise 0, am Boden der tatsächliche Z-Punkt.
int 1 – der Reset wurde gesendet und der Cursor ist als Dropped markiert; 0 - Es gab kein erfolgreiches DragItem, der Cursor hat sich geändert/nicht erreichbar oder die Zuweisung ist ungültig. Metadaten object? Die Kompatibilität ändert an diesem Ergebnis nichts. Es ist keine Menge oder serial.
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.
- Alle vier Argumente sind erforderlich. Bei dieser Option wird der Gegenstand nicht erneut eingenommen; Drop und MoveItem führen eine vollständige Übertragung durch serial.
- Es wird überprüft, ob das von dieser Laufzeit gespeicherte Element gehalten wird. Ein von jemand anderem oder mit der Hand genommener Gegenstand darf nicht versehentlich fallen gelassen werden.
- Nach dem Senden wird der Aufnahmespeicher gelöscht. Die Einstellung GrabDelay fügt dem Skriptfluss eine Pause hinzu. Nach Rückkehr ist ein Serverausfall möglich.
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.DropItem("backpack", -1, -1, 0);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- MoveIntoID=backpack, X/Y=-1, Z=0.
- Die erfolgreiche Erfassung wird vor der Freigabe überprüft.
if (Truth(UO.DragItem("loot", 0)))
{
var ok = UO.DropItem("backpack", -1, -1, 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:
- Brust wird über AddObject angegeben. X=60/Y=70 – Koordinaten in seinem Gaumen.
- amount=10 bezieht sich auf Drag, DropItem hat keinen eigenen Betrag.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.Drag("loot", 10)))
{
var ok = UO.DropItem("chest", 60, 70, 0);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- MoveIntoID=0 wählt eindeutig Land aus.
- X/Y/Z ist der Weltpunkt, nicht die Koordinaten des Containers.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var x = UO.GetX();
var y = UO.GetY();
var z = UO.GetZ();
if (Truth(UO.DragItem("loot", 0)))
{
var ok = UO.DropItem(0, x, y, z);
}
return null;
}
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 · 繁體中文 · 日本語 · 한국어
void UO.Dye(object? arg0);
void UO.Dye(object? arg0, object? arg1);Verwendet den übertragenen Farbgegenstand; Das zweite Argument gibt das Objekt UO.Wait-target vor.
-
dyeObject– Seriennummer des Objekts oder unterstützter Name von self/backpack/lasttarget/saved object; Numerische Zeichenfolgen und 0x-Zeichenfolgen werden zur Laufzeit aufgelöst. -
target– Optionales Objekt/serial nächstes Ziel. Ohne das zweite Argument wird kein neues Ziel gesetzt.
void – kein Rückgabewert.
- Das Formular mit zwei Argumenten ruft zuerst WaitTargetObject(Ziel) und dann UseObject(dyeObject) auf. Die Ein-Argument-Formular verwendet nur das Subjekt. Dies ist das Senden von Aktionen; Farbe, Färberecht und Gesamtmenge werden vom Server bestimmt.
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.Dye");
UO.Dye(UO.LastObject());Parameter und Ablauf:
- Ein Aufruf mit einem Argument gibt kein Ziel an.
var dye = UO.LastObject();
if (Truth(UO.Exists(dye)))
{
UO.Dye(dye);
}
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:
- Target wird vor dem Doppelklick auf Farbstoff platziert.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var dye = UO.LastObject();
var target = UO.LastTarget();
if (Truth(UO.Exists(dye)) && Truth(UO.Exists(target)))
{
UO.Dye(dye, target);
}
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:
- Das Beispiel verwendet die zuvor gespeicherten Namen Farbstoff und Stoff.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
if (Truth(UO.Exists("dye")) && Truth(UO.Exists("cloth")))
{
UO.Dye("dye", "cloth");
}
return null;
}
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 · 繁體中文 · 日本語 · 한국어
void UO.EasyObject(object? arg0);
void UO.EasyObject(object? arg0, object? arg1);Speichert den Objektnamen ohne interaktive Zielabfrage.
-
name– Der Name des Laufzeitobjekteintrags, der in string aufgelöst wird. -
object– Optional serial/Link. Ohne sie bleibt GetLastObject erhalten.
void – kein Rückgabewert.
- State.Objects.Set ersetzt den Namenseintrag. Das Ein-Argument-Formular verwendet das zuletzt verwendete Objekt und nicht LastTarget. Die Anwesenheit eines Objekts in der Welt wird von diesem Zweig nicht separat überprüft.
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.EasyObject");
UO.EasyObject("last-used");Parameter und Ablauf:
- Der Name wird dem aktuellen LastObject gegeben.
UO.EasyObject("last-used");Parameter und Ablauf:
- Die Form mit zwei Argumenten behält das übergebene serial bei.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.EasyObject("me", UO.Self());
return null;
}Parameter und Ablauf:
- Forget löscht nur die gespeicherte Namenszuordnung.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
UO.EasyObject("temporary", UO.Self());
UO.Forget("temporary");
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.EmptyContainer(object? arg0);
int UO.EmptyContainer(object? arg0, object? arg1);
int UO.EmptyContainer(object? arg0, object? arg1, object? arg2);Überträgt den gesamten direkten Inhalt einer Truhe, Tasche oder Leiche in den angegebenen Behälter. Der erste Parameter ist immer die Verzögerung in Millisekunden. Wenn keine Quelle angegeben ist, wird ein lokaler Bereich angezeigt: Wählen Sie den Quellcontainer aus. Das Standardziel ist der Rucksack des aktuellen Charakters.
-
delay– Erster erforderlicher Parameter: Verzögerung zwischen Übertragungen, in Millisekunden. Zum Beispiel 350 - 0,35 Sekunden. Es werden ganzzahlige Werte verwendet; negative werden auf 0 reduziert. GrabDelay wird dieser Verzögerung nicht separat hinzugefügt. Die letzte Pause wird gespeichert, damit die nächste Zeile die letzte Anfrage nicht überholt. -
source– Zweiter optionaler Parameter: serial des Quellcontainers, eine numerische/hexadezimale Zeichenfolge oder ein gespeicherter Objektname. lastobject, lastcontainer, lasttarget, lastcorpse, backpack/my werden unterstützt. Wenn der Parameter fehlt oder gleich 0 ist, erscheint ein Fadenkreuz. Wählen Sie einen Containergegenstand oder eine Leiche aus; Esc bricht die Aktion ab. -
destination– Der dritte optionale Parameter ist serial oder der gespeicherte Name des Zielcontainers. backpack/self/my wähle den Rucksack des Charakters aus. receiving/catchbag wählen Sie den installierten SetCatchBag Container (oder Rucksack, falls nicht installiert) aus. lastcontainer/lastobject/lasttarget/lastcorpse/finditem/laststatus sind gültig, wenn sie in einen zugänglichen Container aufgelöst werden. Ein unbekannter oder nicht festgelegter Alias führt zu einem Fehler. Wenn der Parameter nicht angegeben ist, wird der Rucksack verwendet. Die Containereinstellung receiving ändert diese Auswahl nicht. Das Ziel muss vorhanden sein und sich von der Quelle unterscheiden. Ground/0 ist hier kein gültiger Zielcontainer.
int: 1 wenn die Quelle nicht leer war und für jedes ausgewählte direkte Element eine Übertragungsanforderung gesendet werden konnte; 0 wenn die Quelle leer ist, der Bereich abgebrochen ist, das Ziel falsch ist, das Download-Timeout oder ein teilweiser/vollständiger Sendefehler vorliegt. Dies ist das Ergebnis von Client-Anfragen und keine Garantie für eine vom Server bestätigte Entleerung.
- Genaue Formen: EmptyContainer(Verzögerung), EmptyContainer(Verzögerung, Quelle), EmptyContainer(Verzögerung, Quelle, Ziel). Im Spielchat mit dem Standardpräfix: ,emptycontainer 350; aus dem Skript: UO.EmptyContainer(350).
- Beim Zielen wartet der Befehl auf Auswahl, Abbruch oder Notstopp. Der Client aktualisiert weiterhin das Image und das Netzwerk. Esc sendet keine Überträge, verwendet nicht das alte Objekt und gibt 0 zurück. Wenn diese Auswahl durch eine andere Sehenswürdigkeit ersetzt wird, wird die Aktion ebenfalls abgebrochen.
- Wenn der Inhalt noch nicht heruntergeladen wurde, öffnet der Client die Quelle und wartet bis 3000 ms auf die Antwort des Servers. Inhalte, die dem Client verborgen bleiben, können nicht ohne Einholung der Serverdaten übertragen werden. Eine unzugängliche/zu weit entfernte Truhe oder ein Serververbot führt eher zu einem Fehler als zur Auswahl eines anderen Containers.
- Nach Erhalt der Daten wird eine Liste der direkten Artikel erstellt. Jeder Stapel wird vollständig migriert, mit jeweils einer Erfassungs- und Rücksetzanforderung. Die beiliegende Tasche wird komplett getragen; Der Inhalt wird nicht separat durchsucht. Später hinzugefügte neue Elemente werden nicht in die aktuelle Liste aufgenommen.
- Vor jeder Anfrage wird erneut überprüft, ob sich der Artikel noch im Originalbehälter befindet. Sie können einen Container nicht in sich selbst oder in seinem eigenen untergeordneten Element verschachteln. Wenn der Cursor von einem anderen Element belegt ist, wird er durch den Befehl nicht in Ihrem Namen zurückgesetzt.
- Ein fehlender Zielbehälter wird nicht durch einen Rucksack ersetzt. Ein Ergebnis von 1 bedeutet nicht, dass der Server alle Aktionen akzeptiert hat: Überprüfen Sie ggf. den Inhalt nach der Aktualisierung des Servers. Ein Notstopp unterbricht das Warten; Bereits gesendete Aktionen werden nicht zurückgesetzt.
- Ein unbekannter gespeicherter Name oder ein ungültiges Argumentformat führt zu einem API-Fehler und nicht zu einer 0-Rückgabe. Unterscheiden Sie dies von einem gültigen serial fehlenden Objekt: Dafür gibt die Operation 0 zurück.
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.EmptyContainer(350);
UO.Print("EmptyContainer: " + Convert.ToString(result));1. Wählen Sie eine Truhe oder Leiche mit einem Visier aus und übertragen Sie sie in den Rucksack – direktes Skript
Parameter und Ablauf:
- Der einzige Parameter „delay=350“ gibt das Intervall 350 ms an. Die Quelle fehlt, daher erscheint das Fadenkreuz.
- Auch das Ziel fehlt: Der Inhalt wandert in den Rucksack des Charakters. Wählen Sie den Behälter/die Leiche selbst, nicht nur einen Gegenstand darin.
- gesendet empfängt 1 oder 0. Die Bedeutung von 0 vereint Aufhebung, Leere und Scheitern; Weitere Informationen finden Sie auch im Magazin.
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;Parameter und Ablauf:
- Verzögerung=350; Quelle ist das tatsächliche serial der Brust, ersetzen Sie das ungefähre ID durch Ihr eigenes. Der Anblick erscheint nicht.
- Der dritte Parameter ist nicht angegeben, daher ist „destination=backpack“. Im Übertrag sind alle Arten von Direktartikeln und Vollstapeln enthalten.
- Print zeigt das Übermittlungsergebnis des Clients an, nicht die Anzahl der Elemente oder die Bestätigung des Servers.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var source = "0x40001234";
var sent = UO.EmptyContainer(350, source);
UO.Print("Client request result: " + Convert.ToString(sent));
return null;
}Parameter und Ablauf:
- AddObject mit einem Parameter fordert Sie auf, ein Objekt auszuwählen und speichert seinen Namen. Die beiden Auswahlen werden nacheinander durchgeführt.
- U EmptyContainer delay=350; source=source_bag; ziel=destination_bag. Der dritte Parameter gibt eine bestimmte Tasche anstelle eines Rucksacks an.
- Die Namen müssen sich auf verschiedene Container beziehen. Das gestrichene AddObject entfernt die bisherige Bedeutung seines Namens, sodass die alte Tasche nicht versehentlich verwendet wird.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
UO.Print("Select source");
UO.AddObject("source_bag");
UO.Print("Select destination");
UO.AddObject("destination_bag");
var sent = UO.EmptyContainer(350, "source_bag", "destination_bag");
UO.Print("Client request result: " + Convert.ToString(sent));
return null;
}
}Parameter und Ablauf:
- Verzögerung=500 – Halbsekundenintervall. source=lastcontainer – der letzte vom Server in diesem Client geöffnete Container.
- Ziel – explizites ID Ihrer Brust; Beispiel ersetzen. lastcontainer und lastobject haben unterschiedliche Bedeutungen: der zuletzt geöffnete Container und das zuletzt verwendete Objekt.
- Bevor Sie beginnen, stellen Sie sicher, dass die zuletzt geöffnete Quelle diejenige war, die Sie benötigen. Der Carry öffnet seine verschachtelten Taschen nicht rekursiv.
var destination = "0x40005678";
UO.EmptyContainer(500, "lastcontainer", destination);Parameter und Ablauf:
- Verzögerung=350; source=0 ruft gezielt den Bereich auf, behält aber die Möglichkeit, einen dritten Parameter zu übergeben.
- „destination=storage“ verweist auf eine zuvor gespeicherte Truhe. Sobald Sie eine Quelle auswählen, werden die Inhalte dorthin übertragen.
- Esc gibt „send=0“ ohne Umbruch zurück. Wenn der Speicher unbekannt ist oder nicht vorhanden ist, wird nicht automatisch ein anderer Container ausgewählt.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.AddObject("storage", "0x40005678");
var sent = UO.EmptyContainer(350, 0, "storage");
return null;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Exists(object? arg0);Überprüft das Vorhandensein eines nicht gelöschten Objekts in der lokalen Welt des Clients.
-
id– 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. -
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 - serial löst sich jetzt in geladenes Element oder mobile auf. int 0 – Das Objekt ist dem Client unbekannt, gelöscht oder der Alias ist nicht festgelegt. Dies ist keine Serverantwort über die Existenz eines Objekts: Ein Element außerhalb des sichtbaren Bereichs kann auf dem Server vorhanden sein und hier 0 geben.
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.Exists("backpack");
UO.Print("Exists: " + Convert.ToString(result));Parameter und Ablauf:
- Argument backpack ist ein Alias serial des Rucksacks Ihres eigenen Charakters.
- 1 bedeutet nicht, dass der Inhalt des Rucksacks bereits vollständig erhalten oder geöffnet wurde.
var present = UO.Exists("backpack");
if (Truth(present))
{
UO.Print("Backpack is loaded");
}
else
{
UO.Print("Backpack is unavailable");
}
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 Ziel speichert das spezifische serial. Der neue Wert lasttarget wird ihn nicht ersetzen.
- Nach der Pause 500 ms könnte das Objekt außer Sichtweite geraten sein, daher wird die Prüfung erneut durchgeführt.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var target = UO.GetSerial("lasttarget");
await Delay(500);
if (Truth(UO.Exists(target)))
{
UO.Print(UO.GetName(target));
}
else
{
UO.Print("Saved target is no longer loaded");
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- GetSerial formatiert die Zahl 1073746484 als 0x40001234, auch wenn kein Objekt vorhanden ist.
- Erst die nächste Prüfung meldet die Anwesenheit dieses serial in der aktuellen lokalen Welt.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var serial = UO.GetSerial("1073746484");
UO.Print("Serial: " + serial);
var present = UO.Exists(serial);
UO.Print("Present 1/0: " + Convert.ToString(present));
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Forget(object? arg0);Entfernt ohne Meldung den gespeicherten Namen aus Laufzeitobjekten.
-
name– Der Eintragsname, der in string konvertiert wird.
void – kein Rückgabewert.
- Der Zweig ruft state.Objects.Remove auf. Im Gegensatz zu DeleteObject druckt dieses Formular keine Bestätigung aus und meldet auch keinen fehlenden Namen. Das Spielweltobjekt wird nicht gelöscht.
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.Forget");
UO.Forget("temporary");Parameter und Ablauf:
- Lediglich die Zuordnung des Namens zu serial wird entfernt.
UO.EasyObject("temporary",UO.Self());
UO.Forget("temporary");Parameter und Ablauf:
- Ein fehlender Name ist ohne Nachricht zulässig.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.Forget("missing-example-name");
return null;
}Parameter und Ablauf:
- Die Löschung bezieht sich auf die genaue Namenszeichenfolge.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var name = "temporary";
UO.EasyObject(name, UO.Self());
UO.Forget(name);
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetAltName(object? arg0);Liest den dem Kunden bekannten Titel des Charakters: zum Beispiel Beruf oder Unterschrift nach dem Namen.
-
ObjID– Erforderliches serial/ID-Objekt, nicht type und nicht cliloc. Akzeptiert int, Dezimal-/Hex-Zeichenfolge, self, backpack, lasttarget, finditem oder den Namen AddObject. 0 bedeutet kein Objekt.
string – Text des Titelfelds für Mobilgeräte. Leere Zeichenfolge, wenn der Titel unbekannt ist, das Objekt kein Zeichen ist oder ID fehlt. Es handelt sich nicht um serial, einen vollständigen Namen oder eine Reihe von Eigenschaften. GetAltName verwendet das gleiche Feld wie GetTitle.
- Der Aufruf selbst liest lokale Daten, wartet nicht auf den Server und sendet keinen einzigen Klick. Um einen Namen/Titel anzufordern, verwenden Sie nur ClickOnObject; Die Antwort kommt asynchron.
- Für ein vorhandenes Zeichen ist auch eine leere Zeichenfolge akzeptabel. Die Exists-Prüfung beantwortet eine weitere Frage: ob das Objekt geladen ist.
- In dieser Implementierung wird der alternative Name dem Titelfeld des Charakters zugeordnet.
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.GetAltName("self");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- ObjID=self – Charakter des aktuellen Clients.
- title enthält nur den Titel; Ein leeres Feld bedeutet keinen Skriptfehler.
var title = UO.GetAltName("self");
UO.Print(title);Parameter und Ablauf:
- ObjID=id – serial des letzten Ziels. GetName und Titel werden separat gelesen.
- Das Elementziel verfügt über kein Titelfeld und gibt eine leere Zeichenfolge aus.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
var title = UO.GetAltName(id);
if (Truth(title != ""))
{
UO.Print(UO.GetName(id) + " " + title);
}
}
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:
- 350 – Beispiel einer Pause in Millisekunden nach einem einzelnen Klick; Dies ist kein Getter-Parameter.
- Der Server antwortet möglicherweise später oder überträgt den Titel nicht. Behalten Sie die Behandlung leerer Zeichenfolgen bei.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.ClickOnObject(id);
UO.Wait(350);
UO.Print(UO.GetAltName(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;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetColor();
string UO.GetColor(object? arg0);Liest das hue-Objekt und formatiert es als hexadezimale Zeichenfolge.
-
idist die Seriennummer/ID des Objekts, nicht graphic/type. Zahl, Hex-String, Standardname self/backpack/lasttarget/lastobject/lastcontainer/laststatus/finditem/lastcorpse oder Name AddObject. Der Alias muss festgelegt werden; Die Existenz wird durch Exists überprüft. Das registrierte Formular ohne Argumente verwendet self.
string der Form „0x0481“ – Code hue/Farbe, vier Hexadezimalziffern nach 0x. Für ein fehlendes Objekt wird „0x0000“ zurückgegeben; Der gleiche Code tritt für einen unbemalten Artikel auf. Die Farbe ist nicht graphic/type oder eindeutig serial.
- Es werden die aktuellsten, dem Client bereits bekannten Daten gelesen; Die Update-Anfrage wird nicht an den Server gesendet.
- Ein unbekanntes Objekt und eine Eigenschaft, die noch nicht abgerufen wurde, können einen Null-/leeren Wert haben. Überprüfen Sie Exists und die Bedingungen einer bestimmten Aktion.
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.GetColor("lastobject");
UO.Print("GetColor: " + Convert.ToString(result));Parameter und Ablauf:
- id=lastobject – zuletzt verwendetes Objekt.
- Das Ergebnis ist bereits eine Hex-Zeichenfolge und erfordert kein Int2Hex.
var hue = UO.GetColor("lastobject");
UO.Print(hue);Parameter und Ablauf:
- type und hue sind unterschiedliche Merkmale der Probe; FindType akzeptiert beide Hex-Darstellungen.
- Übereinstimmung – serial oder eine leere Zeichenfolge gefunden. Farbe ersetzt nicht type.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var sample = UO.GetSerial("lastobject");
if (Truth(UO.Exists(sample)))
{
var type = UO.GetGraphic(sample);
var hue = UO.GetColor(sample);
var match = UO.FindType(type, hue, "backpack");
UO.Print(match);
}
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:
- GetColor liest self; Hex2Int wandelt Hex-Text in int um.
- Die Null hue allein sagt nicht aus, ob ein Zeichen in der Welt vorhanden ist.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var hue = UO.Hex2Int(UO.GetColor("self"));
if (Truth(hue == 0))
{
UO.Print("Hue is zero");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetFlags(object? arg0);Liest die Entity.Flags-Bitmaske aus einem lokal bekannten Objekt.
-
id– Seriennummer des Objekts oder unterstützter Name von self/backpack/lasttarget/saved object; Numerische Zeichenfolgen und 0x-Zeichenfolgen werden zur Laufzeit aufgelöst.
int – ursprüngliche Entity.Flags. Unbekannte/fehlende Entität gibt 0 zurück; es ist eine Maske, kein logisches Ergebnis.
- GetObject löst den Link auf, dann liest bridge.World.Get Entity.Flags im Spielstream. Ein Nullwert könnte ein Objekt ohne Flags oder ohne Modell bedeuten; Exists trennt diese Fälle. Der Befehl fordert keine Statusaktualisierung an.
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.GetFlags("self");
UO.Print("GetFlags: " + Convert.ToString(result));Parameter und Ablauf:
- Die Maske des aktuellen Zeichens wird angezeigt.
var flags = UO.GetFlags("self");
UO.Print(Convert.ToString(flags));Parameter und Ablauf:
- Die Exists-Prüfung erkennt ein fehlendes Modell.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var id = UO.LastTarget();
if (Truth(UO.Exists(id)))
{
var flags = UO.GetFlags(id);
UO.Print(Convert.ToString(flags));
}
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:
- Ein Nullwert serial stimmt normalerweise nicht mit einer Entität überein und gibt 0 zurück.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var flags = UO.GetFlags(0);
UO.Print(Convert.ToString(flags));
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetGraphic();
string UO.GetGraphic(object? arg0);Liest den graphic eines Elements oder den body eines Zeichens und gibt ihn in hexadezimalem Text zurück.
-
id– Seriennummer eines bestimmten Objekts oder ein auflösbarer Alias, zum Beispiel „self“, „backpack“, „lasttarget“ oder der von AddObject gespeicherte Name. Grafik/type wird hier nicht übertragen. Die Form ohne Argumente verwendet self.
string der Form „0x0EED“ – grafisches type/body-Objekt. Dies ist kein eindeutiges ID/serial. Für ein unbekanntes Objekt gibt Bridge graphic 0 zurück, das als „0x0000“ formatiert ist. Der Befehl gibt nicht true/false zurück.
- Der Befehl liest die lokalen Daten des Clients. Es sendet kein Ziel und ändert das Objekt auf dem Server nicht.
- Die Zahl 0 kann ein gültiger Datenwert sein. Überprüfen Sie das Fehlen eines Objekts anhand von Exists(serial) und nicht nur anhand des Werts seiner Eigenschaft.
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.GetGraphic();
UO.Print("GetGraphic: " + Convert.ToString(result));Parameter und Ablauf:
- FindType erhält type Gold und gibt serial zurück.
- GetGraphic(serial) gibt den Text „0x0EED“ zurück; Die Variablen item und graphic haben unterschiedliche Bedeutungen.
var item = UO.FindType(0x0EED, -1, "backpack");
if (Truth(item != ""))
{
var graphic = UO.GetGraphic(item);
UO.Print("Graphic: " + graphic);
}
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 Form ohne Argumente verwendet self.
- body ist der Code für das Aussehen des Charakters, nicht sein serial.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var body = UO.GetGraphic();
UO.Print("Body graphic: " + body);
return null;
}Parameter und Ablauf:
- lastobject – Probe; graphic ist eine Hex-Zeichenfolge, die FindType als type akzeptiert.
- -1 erlaubt jede Farbe, backpack gibt den Suchbereich an. sameType ist wieder serial.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var graphic = UO.GetGraphic("lastobject");
var sameType = UO.FindType(graphic, -1, "backpack");
if (Truth(sameType != ""))
{
UO.Print("Matching serial: " + sameType);
}
return null;
}
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 · 繁體中文 · 日本語 · 한국어
string UO.GetLayer();
string UO.GetLayer(object? arg0);-
id– Seriennummer eines bestimmten Objekts oder ein auflösbarer Alias, zum Beispiel „self“, „backpack“, „lasttarget“ oder der von AddObject gespeicherte Name. Grafik/type wird hier nicht übertragen. Die Form ohne Argumente verwendet self.
string ist der Name der Ebene, z. B. „Rhand“, „Lhand“, „Hat“, „Bpack“ oder „Mount“. Der erste kanonische Name für die Layer-Nummer wird zurückgegeben, sodass Helmet als „Hat“ und Backpack als „Bpack“ ausgegeben wird. Ebene 0, unbekanntes Element oder self geben „Ungültig“ aus. Eine unbekannte Zahl ungleich Null wird als „0xNN“ formatiert. Es ist nicht serial, nicht graphic und nicht die Höhe Z.
- Der Befehl liest die lokalen Daten des Clients. Es sendet kein Ziel und ändert das Objekt auf dem Server nicht.
- Die Zahl 0 kann ein gültiger Datenwert sein. Überprüfen Sie das Fehlen eines Objekts anhand von Exists(serial) und nicht nur anhand des Werts seiner Eigenschaft.
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.GetLayer("backpack");
UO.Print("GetLayer: " + Convert.ToString(result));Parameter und Ablauf:
- ObjAtLayer("Rhand") wählt ein Element auf der rechten Seite aus; 0 bedeutet leerer Steckplatz.
- GetLayer empfängt serial des gefundenen Gegenstands und gibt die Zeichenfolge „Rhand“ zurück.
object? item = UO.ObjAtLayer("Rhand");
if (item is string serial)
{
var layer = UO.GetLayer(serial);
UO.Print(layer);
}
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" — serial des Rucksacks des aktuellen Charakters.
- Der kanonische Name Bpack wird überprüft, nicht der Alias Backpack.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var layer = UO.GetLayer("backpack");
if (Truth(layer == "Bpack"))
{
UO.Print("Player backpack layer");
}
else
{
UO.Print("Layer: " + layer);
}
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:
- lastobject muss ein tatsächlicher Alias des Elements sein.
- Ungültig bedeutet Schicht Null. Dies allein beweist nicht, dass der Gegenstand fehlt: Der Gegenstand in der Tasche ist ebenfalls nicht ausgerüstet.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var layer = UO.GetLayer("lastobject");
if (Truth(layer == "Invalid"))
{
UO.Print("No equipment layer");
}
else
{
UO.Print("Equipment layer: " + layer);
}
return null;
}
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.GetLocked(object? arg0);Überprüft mobile Lähmung.
-
id– 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. Das Argument ist erforderlich; Bestehen Sie für sich selbst self. -
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. Das Argument ist erforderlich; Bestehen Sie für sich selbst self. -
MobID– 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. Das Argument ist erforderlich; Bestehen Sie für sich selbst self.
int 1 - geladen mobile hat das Attribut IsParalyzed. int 0 – das Attribut fehlt, das Objekt ist nicht mobile, unbekannt oder gelöscht. Trotz des Namens „Gesperrt“ handelt es sich nicht um ein Truhenschloss, einen zu sichernden Gegenstand oder einen Grund dafür, dass man sich nicht bewegen kann. Das gleiche Flag wird als Paralyzed gelesen.
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.
- Trotz des Namens „Gesperrt“ handelt es sich nicht um ein Truhenschloss, einen zu sichernden Gegenstand oder einen Grund dafür, dass man sich nicht bewegen kann. Es wird das gleiche Flag wie Paralyzed gelesen.
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.GetLocked("self");
UO.Print("GetLocked: " + Convert.ToString(result));Parameter und Ablauf:
- Das Argument self wählt explizit seinen Charakter aus. Zustand – nur 1/0.
- Trotz des Namens „Gesperrt“ handelt es sich nicht um ein Truhenschloss, einen zu sichernden Gegenstand oder einen Grund dafür, dass man sich nicht bewegen kann. Es wird das gleiche Flag wie Paralyzed gelesen.
var state = UO.GetLocked("self");
var paralyzed = UO.Paralyzed();
UO.Print("GetLocked: " + Convert.ToString(state));
UO.Print("Paralyzed: " + Convert.ToString(paralyzed));Parameter und Ablauf:
- IsNpc schließt Subjekt und unbekanntes Objekt aus. Das Ziel speichert ein einzelnes serial und keinen Live-Verweis auf ein sich änderndes lasttarget.
- Das Ergebnis bezieht sich auf das Feld IsParalyzed. Die Daten werden erst aktualisiert, nachdem der Client den entsprechenden Status erhält.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var target = UO.GetSerial("lasttarget");
if (Truth(UO.IsNPC(target)))
{
var state = UO.GetLocked(target);
UO.Print("Selected mobile state 1/0: " + Convert.ToString(state));
}
else
{
UO.Print("No loaded mobile selected");
}
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:
- UO.Wait(500) – Pause in Millisekunden. Anschließend wird separat geprüft, ob mobile noch vorhanden ist.
- Zwei Fotos werden verglichen. Zwischenänderungen können unter Umständen übersehen werden und es handelt sich hierbei nicht um ein fortlaufendes Abonnement von Serverereignissen.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var target = UO.GetSerial("lasttarget");
if (Truth(UO.IsNPC(target)))
{
var before = UO.GetLocked(target);
await Delay(500);
if (Truth(UO.IsNPC(target)))
{
var after = UO.GetLocked(target);
if (Truth(before != after))
{
UO.Print("Flag changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
}
}
else
{
UO.Print("Mobile left the local world");
}
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetName();
string UO.GetName(object? arg0);Liest den Namen eines dem Client bekannten Gegenstands oder Charakters.
-
idist die Seriennummer/ID des Objekts, nicht graphic/type. Zahl, Hex-String, Standardname self/backpack/lasttarget/lastobject/lastcontainer/laststatus/finditem/lastcorpse oder Name AddObject. Der Alias muss festgelegt werden; Die Existenz wird durch Exists überprüft. Das registrierte Formular ohne Argumente verwendet self. -
ObjIDist die Seriennummer/ID des Objekts, nicht graphic/type. Zahl, Hex-String, Standardname self/backpack/lasttarget/lastobject/lastcontainer/laststatus/finditem/lastcorpse oder Name AddObject. Der Alias muss festgelegt werden; Die Existenz wird durch Exists überprüft. Das registrierte Formular ohne Argumente verwendet self.
string – Objektname. Ein unbekanntes Objekt oder ein noch nicht ermittelter Name führt zu der leeren Zeichenfolge „“. Dies ist nicht serial, nicht type oder die vollständige Liste der Eigenschaften aus dem Tooltip.
- Es werden die aktuellsten, dem Client bereits bekannten Daten gelesen; Die Update-Anfrage wird nicht an den Server gesendet.
- Ein unbekanntes Objekt und eine Eigenschaft, die noch nicht abgerufen wurde, können einen Null-/leeren Wert haben. Überprüfen Sie Exists und die Bedingungen einer bestimmten Aktion.
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.GetName();
UO.Print("GetName: " + Convert.ToString(result));Parameter und Ablauf:
- Ohne Argument wird self verwendet.
- Das Ergebnis ist der Text des Namens, dieser kann direkt angezeigt werden.
var name = UO.GetName();
UO.Print(name);Parameter und Ablauf:
- lasttarget – Objektalias. GetName öffnet kein neues Ziel.
- Ein leerer Name beweist nicht die Abwesenheit eines Objekts: Informationen über serial ohne Namen hätten an erster Stelle stehen können.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var name = UO.GetName("lasttarget");
if (Truth(name == ""))
{
UO.Print("Name is not available");
}
else
{
UO.Print("Target: " + name);
}
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:
- ToLowerInvariant wandelt die Zeichenfolge zum Vergleich in Kleinbuchstaben um.
- Der Name wird vom Server festgelegt und kann lokalisiert werden. Um nach Grafiktyp zu filtern, verwenden Sie FindType/GetGraphic.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var name = UO.GetName("lastobject");
if (Truth(Convert.ToString(name) == "gold"))
{
UO.Print("Known name matches");
}
return null;
}
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.GetQuantity(object? arg0);Liest die Anzahl der Einheiten in einem Artikelstapel.
-
idist die Seriennummer/ID des Objekts, nicht graphic/type. Zahl, Hex-String, Standardname self/backpack/lasttarget/lastobject/lastcontainer/laststatus/finditem/lastcorpse oder Name AddObject. Der Alias muss festgelegt werden; Die Existenz wird durch Exists überprüft. Das registrierte Formular ohne Argumente verwendet self. Für diesen Befehl ist die ID erforderlich. -
ObjIDist die Seriennummer/ID des Objekts, nicht graphic/type. Zahl, Hex-String, Standardname self/backpack/lasttarget/lastobject/lastcontainer/laststatus/finditem/lastcorpse oder Name AddObject. Der Alias muss festgelegt werden; Die Existenz wird durch Exists überprüft. Das registrierte Formular ohne Argumente verwendet self. Für diesen Befehl ist die ID erforderlich.
int – Betragsfeld eines bestimmten Artikels. Ein Stapel von 1000-Einheiten gibt normalerweise 1000 zurück; Einzelstück - 1. Für das unbekannte serial und für das Zeichen wird 0 zurückgegeben. Dies ist nicht die Anzahl der untergeordneten Gegenstände der Truhe und nicht die Gegenstandsgrenze des Befehls MassMove.
- Es werden die aktuellsten, dem Client bereits bekannten Daten gelesen; Die Update-Anfrage wird nicht an den Server gesendet.
- Ein unbekanntes Objekt und eine Eigenschaft, die noch nicht abgerufen wurde, können einen Null-/leeren Wert haben. Überprüfen Sie Exists und die Bedingungen einer bestimmten Aktion.
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.GetQuantity("lastobject");
UO.Print("GetQuantity: " + Convert.ToString(result));Parameter und Ablauf:
- FindType sucht im Rucksack nach type Gold beliebiger Farbe.
- Gold enthält ein serial, daher gilt der Betrag nur für einen gefundenen Stapel.
var gold = UO.FindType(0x0EED, -1, "backpack");
if (Truth(gold != ""))
{
var amount = UO.GetQuantity(gold);
UO.Print("Units in this stack: " + Convert.ToString(amount));
}
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=sample – zuletzt verwendeter Artikel.
- 50 bedeutet diejenigen im angegebenen Stapel. 50 einzelne Artikel werden hier nicht gezählt.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var sample = UO.GetSerial("lastobject");
if (Truth(UO.Exists(sample)))
{
if (Truth(UO.GetQuantity(sample) >= 50))
{
UO.Print("At least 50 units in this item");
}
}
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:
- FindCount bezieht sich auf die Ergebnisse der letzten Suche; GetQuantity - zu einem serial.
- Zahlen können stark variieren. MassMove Die Menge begrenzt ganze Artikel, einschließlich Stapel.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var item = UO.FindType(0x0EED, -1, "backpack");
var stacks = UO.FindCount();
if (Truth(item != ""))
{
var units = UO.GetQuantity(item);
UO.Print("Matching items: " + Convert.ToString(stacks));
UO.Print("Units in selected item: " + Convert.ToString(units));
}
return null;
}
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 · 繁體中文 · 日本語 · 한국어
string UO.GetSerial();
string UO.GetSerial(object? arg0);Löst den Objektnamen in seinen serial auf und formatiert serial als Hex-String.
-
id– Optionale Zeichenfolge: Standardalias, Name AddObject oder numerischer Text (dezimal/hex). Ohne Argument wird das serial des aktuellen Zeichens verwendet.
string der Form „0x40001234“ ist ein eindeutiges serial/ID-Objekt, acht Hexadezimalziffern nach 0x. Der nicht aufgelöste Name lautet „0x00000000“. Das ist nicht type. Numerischer Text wird auch dann formatiert, wenn kein solches Objekt geladen ist; GetSerial prüft Exists nicht selbst.
- Aliasnamen werden aus dem aktuellen Skript-/Client-Status gelesen. Die gespeicherte Zeichenfolge serial ändert sich nicht automatisch, wenn der Alias später auf ein anderes Objekt verweist.
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.GetSerial();
UO.Print("GetSerial: " + Convert.ToString(result));Parameter und Ablauf:
- Es gibt keine Parameter, self ist ausgewählt.
- serial – Hex-Zeichenfolge. Der Wert 0x00000000 bedeutet kein serial-Zeichen.
var serial = UO.GetSerial();
UO.Print(serial);Parameter und Ablauf:
- id="lasttarget" wird in serial letztes Ziel aufgelöst.
- Exists prüft die Existenz eines Objekts, GetName liest seinen dem Client bekannten Namen.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var serial = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(serial)))
{
UO.Print(UO.GetName(serial));
}
else
{
UO.Print("Target is not loaded");
}
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:
- id ist eine Zeichenfolge mit der Dezimalzahl serial 1073746484.
- Das Ergebnis 0x40001234 zeigt die Formatierung. Dies ist ein Beispiel für eine Zahl, sie erstellt kein Objekt und garantiert nicht dessen Existenz.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var serial = UO.GetSerial("1073746484");
UO.Print(serial);
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetTooltip(object? arg0);Liest den fertigen Objekteigenschaftentext aus OPL. GetTooltip und GetCliloc sind Synonyme.
-
ObjID– Erforderliches serial/ID-Objekt, nicht type und nicht cliloc. Akzeptiert int, Dezimal-/Hex-Zeichenfolge, self, backpack, lasttarget, finditem oder den Namen AddObject. 0 bedeutet kein Objekt.
string – der Name und der Text der Eigenschaften, getrennt durch eine neue Zeile, oder nur der nicht leere Teil. Leerer String, wenn ObjID=0 oder wenn Eigenschaften nicht empfangen werden. Dies ist ein vorgefertigter Text; Numerisch ID cliloc und Parameter werden von GetTooltipRec zurückgegeben.
- Wenn der Eintrag bereits in OPL vorhanden ist, wird sein Text sofort zurückgegeben. Wenn kein Eintrag vorhanden ist, wird eine Eigenschaftsanforderung gesendet und eine Antwort wird bis zu 200 ms mit einer Überprüfung alle 10 ms erwartet. Eine Pause garantiert keine Antwort.
- Wir benötigen ein zugängliches Objekt und Unterstützung für Eigenschaften durch den Server. Ein leeres Ergebnis ist kein Beweis dafür, dass das Objekt nicht existiert: Verwenden Sie Exists separat.
- Der Text kann Server-Markup enthalten. Analysieren Sie numerische Eigenschaften nicht nach Zeilenposition. Verwenden Sie dazu GetTooltipRec.
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.GetTooltip("backpack");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- FindType: Gold 0x0EED, beliebig hue=-1, direkter Inhalt backpack. ObjID=Artikel – gefunden serial.
- Das Getter-Ergebnis ist Text, nicht die Goldmenge. Für die Menge verwenden Sie FindCount(item).
var item = UO.FindType(0x0EED, -1, "backpack");
if (Truth(item != ""))
{
UO.Print(UO.GetTooltip(item));
}
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:
- ObjID=lasttarget muss auf das gewünschte Objekt zeigen.
- Eine leere Zeichenfolge wird separat verarbeitet; Es ist nicht erforderlich, die Anfrage automatisch in einer Endlosschleife zu wiederholen.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var text = UO.GetTooltip("lasttarget");
if (Truth(text == ""))
{
UO.Print("No properties received");
}
else
{
UO.Print(text);
}
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:
- „id“ und „saveed“ sind separate Variablen: das eindeutige ID des Objekts und eine Momentaufnahme seines Textes.
- Die gespeicherten Werte ändern sich nicht automatisch, wenn sich die Eigenschaften auf dem Server später ändern.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var id = UO.GetSerial("lasttarget");
var saved = UO.GetTooltip(id);
UO.Print("Object: 0x" + Hex(id));
UO.Print(saved);
return null;
}
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetTooltipRec(object? arg0);Liest strukturierte Eigenschaften: Cliloc ID und Parameter jedes Eintrags OPL.
-
ObjID– Erforderliches serial/ID-Objekt, nicht type und nicht cliloc. Akzeptiert int, Dezimal-/Hex-Zeichenfolge, self, backpack, lasttarget, finditem oder den Namen AddObject. 0 bedeutet kein Objekt.
Array ist eine einzelne Momentaufnahme von Eigenschaftszeilen. Jede Zeile ist gleich [clilocID:int, Parameter:Array]. rows[i][0] ist die Nummer der lokalisierten Nachricht, rows[i][1] ist ein Array von Parametern. ArrayLength(Zeilen) – Anzahl der Eigenschaften; ArrayLength(Parameter) – die Anzahl der Parameter für eine Eigenschaft. Ein leeres Array, wenn ObjID=0 oder keine Datensätze empfangen wurden. Dies ist keine Liste von ID-Elementen oder ein fertiger Text.
- Der Cache-Eintrag wird sofort zurückgegeben. Wenn OPL fehlt, werden Eigenschaften mit einer Wartezeit von bis zu 120 ms abgefragt; Durch den Abbruch des Vorgangs wird die Wartezeit unterbrochen. Das bekannte leere OPL löst keine Vorfreude aus.
- Die anfänglichen Service-Registerkarten werden wie in ClilocLoader übersprungen. Leere interne Parameter speichern Positionen; #Die Nummer wird zur späteren Lokalisierung als Zeichenfolge gespeichert. Unbekannte Parameter erzeugen ein leeres Array.
- Durch das Ändern des zurückgegebenen Arrays wird der Cache des Clients nicht geändert. Für Text verwenden Sie GetTooltip/GetCliloc; um eine Zeile zu übersetzen - GetClilocByID(clilocID, Parameter).
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.GetTooltipRec("lasttarget");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- ObjID=lasttarget – Objekt. rows enthält Eigenschaften, i ist der Index von 0. row[0] ist cliloc, nicht serial.
- Die Schleife schlägt bei einem leeren Array fehl. Jeder Datensatz wird einmal verarbeitet.
var rows = UO.GetTooltipRec("lasttarget");
var i = 0;
while (Truth(i < ArrayLength(rows)))
{
var row = rows[i];
UO.Print("Cliloc: " + Convert.ToString(row[0]));
i = i + 1;
}
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:
- GetClilocByID empfängt clilocID=row[0] und Substitution array=row[1].
- Die Parameter werden in Ordnung gehalten. Übergeben Sie nicht die gesamte Zeile anstelle eines Arrays von Parametern.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var rows = UO.GetTooltipRec("lasttarget");
var i = 0;
while (Truth(i < ArrayLength(rows)))
{
var row = rows[i];
var text = UO.GetClilocByID(row[0], row[1]);
UO.Print(text);
i = i + 1;
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- gesucht – Beispiel für ID-Eigenschaften; durch den gewünschten Cliloc ersetzen. args[0] ist der erste Parameter, zunächst ein string.
- Die Anzahl der Parameter und das Zahlenformat werden vor Val überprüft. Der Parameter kann Text oder ein #cliloc-Link sein.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var rows = UO.GetTooltipRec("lasttarget");
var wanted = 1060401;
var i = 0;
while (Truth(i < ArrayLength(rows)))
{
var row = rows[i];
var args = row[1];
if (Truth(row[0] == wanted) && Truth(ArrayLength(args) > 0))
{
if (Truth(IsNumeric(args[0])))
{
UO.Print("Value: " + Convert.ToString(Val(args[0])));
}
}
i = i + 1;
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool IsNumeric(object? value) => double.TryParse(Convert.ToString(value), System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out _);
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
double Val(object? value) => double.TryParse(Convert.ToString(value), System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out var number) ? number : 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetType(object? arg0);Liest den numerischen graphic eines Elements oder body eines Zeichens.
int - graphic/type eines Gegenstands oder body eines Charakters, zum Beispiel 0x0EED (3821) für Gold. Der Wert 0 wird zurückgegeben, wenn das Objekt nicht gefunden wird. GetType gibt weder serial noch den Text „0x...“ zurück; die Stringform ist durch GetGraphic gegeben.
- Der Befehl liest die lokalen Daten des Clients. Es sendet kein Ziel und ändert das Objekt auf dem Server nicht.
- Die Zahl 0 kann ein gültiger Datenwert sein. Überprüfen Sie das Fehlen eines Objekts anhand von Exists(serial) und nicht nur anhand des Werts seiner Eigenschaft.
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.GetType("lastobject");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- ObjID="lastobject" – Alias eines bestimmten Objekts.
- 0x0EED ist die Anzahl von graphic; Der Vergleich sucht nicht nach einem Objekt mit einem solchen serial.
var graphic = UO.GetType("lastobject");
if (Truth(graphic == 0x0EED))
{
UO.Print("Gold graphic");
}
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:
- ObjID="backpack" – aktueller Rucksack.
- Convert.ToString formatiert die zurückgegebene Zahl für die Ausgabe.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var graphic = UO.GetType("backpack");
UO.Print("Backpack type: " + Convert.ToString(graphic));
return null;
}Parameter und Ablauf:
- Die leere Zeichenfolge FindType wird vor Exists überprüft.
- Exists gibt den booleschen Wert 1/0 zurück; GetType gibt die Zahl graphic zurück.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var item = UO.FindType(0x0EED, -1, "backpack");
if (Truth(item != ""))
{
if (Truth(UO.Exists(item)))
{
UO.Print("Type: " + Convert.ToString(UO.GetType(item)));
}
}
return null;
}
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.Grab();
int UO.Grab(object? arg0);
int UO.Grab(object? arg0, object? arg1);
int UO.Grab(object? arg0, object? arg1, object? arg2);
int UO.Grab(object? arg0, object? arg1, object? arg2, object? arg3);Überträgt einen Artikel in den angegebenen/empfangenden Behälter oder öffnet die Artikelauswahl.
-
id– Seriennummer/Alias des Artikels. Ohne Argumente beginnt die interaktive Auswahl; mit einem Argument genau 1 wird die Einheit dieses Items übernommen. -
item– Seriennummer/Alias des Artikels. Ohne Argumente beginnt die interaktive Auswahl; mit einem Argument genau 1 wird die Einheit dieses Items übernommen. -
ObjID– Seriennummer/Alias des Artikels. Ohne Argumente beginnt die interaktive Auswahl; mit einem Argument genau 1 wird die Einheit dieses Items übernommen. -
amount– In den Formen 2..4 – Menge als erstes Argument, dann Artikel. 0 bedeutet den gesamten Stapel gemäß den Regeln MoveItem; Ändern Sie die Bestellung nicht mit dem Grab(item)-Formular. -
Count– In den Formen 2..4 – Menge als erstes Argument, dann Artikel. 0 bedeutet den gesamten Stapel gemäß den Regeln MoveItem; Ändern Sie die Bestellung nicht mit dem Grab(item)-Formular. -
container– Nur Formen 3/4: Explizite Zuordnung. Ohne es - Zustand.ReceivingContainer, wenn >0, sonst backpack. Die Zeilen self/my/backpack im Ziel bedeuten Rucksack; ground - Boden. - Nur Form
timeout- 4, Millisekunden. Wird an CompactMoveItem gesendet und wartet auf Bestätigung; Koordinaten ground werden von self übernommen, Container - 0xFFFF/0xFFFF/0.
Numerisches Flag int: 1 – interaktive Auswahl akzeptiert oder Übertragung akzeptiert/bestätigt gemäß der ausgewählten Form; 0 – Fehler/kein passender Artikel. Ein Ergebnis ohne Argument bedeutet nicht, dass das Element bereits übertragen wurde.
- CompactGrab behält die historische Form Grab(item)=1 Einheit. Formulare ohne Timeout verwenden CompactMoveItem, ohne eine Bestätigungswartezeit zu erzwingen; Das Formular mit Timeout gibt UO.Wait=true an.
- Serielles 0 ergibt sofort 0. Nicht aufgelöste/unangemessene Objekte werden von MoveItem weiter geprüft. Serverregeln, Stapelmenge und aktueller Container beeinflussen das Ergebnis. Drei/vier Argumente sind keine Drop-Koordinaten.
- amount<=0 fordert den gesamten Stapel an. In einem Formular mit Timeout wird eine negative Pause zu 0, es wird jedoch mindestens eine lokale Prüfung durchgeführt; zwischen den Kontrollen UO.Wait(10). Eine teilweise Übertragung wird durch eine Verringerung der Anfangsmenge bestätigt, eine vollständige Übertragung wird durch die Zuordnung und für ground X/Y/Z bestätigt. Dies ist eine Beobachtung des Zustands der Welt, keine neue Protokollantwort auf die ID-Anfrage; ein bereits geeigneter Zustand kann sofort 1 geben. Timeout gibt 0 aus, obwohl die Anfrage möglicherweise bereits gesendet 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.
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.Grab();
UO.Print("Grab: " + Convert.ToString(result));Parameter und Ablauf:
- Überträgt einen Artikel in den angegebenen/empfangenden Behälter oder öffnet die Artikelauswahl.
var accepted = UO.Grab();
UO.Print(accepted);Parameter und Ablauf:
- CompactGrab behält die historische Form Grab(item)=1 Einheit. Formulare ohne Timeout verwenden CompactMoveItem, ohne eine Bestätigungswartezeit zu erzwingen; Das Formular mit Timeout gibt UO.Wait=true an.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.Exists("lastobject")))
{
UO.Print(UO.Grab("lastobject"));
}
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:
- Serielles 0 ergibt sofort 0. Nicht aufgelöste/unangemessene Objekte werden von MoveItem weiter geprüft. Serverregeln, Stapelmenge und aktueller Container beeinflussen das Ergebnis. Drei/vier Argumente sind keine Drop-Koordinaten.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
if (Truth(UO.Exists("lastobject")))
{
UO.Print(UO.Grab(0, "lastobject", "backpack", 2000));
}
return null;
}
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.IsMovable(object? arg0);Überprüft lokale Anzeichen der Tragbarkeit eines bekannten Artikels mithilfe der klassischen UO-Auswahlregeln.
-
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 – Der Gegenstand wird nicht entfernt, nicht mehrfach und nicht durch die lokale Gewichts-/Beweglichkeitsregel für Gegenstände auf dem Boden blockiert. int 0 - mobile, mehrfach, unbekanntes/entferntes Objekt oder blockiertes Objekt am Boden. 1 garantiert keinen erfolgreichen Drag/MoveItem: Bereich, Zugriff, Cursorstatus und endgültige Serverentscheidung werden separat geprüft.
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.
- Am Boden gilt ein Gegenstand als gesperrt, wenn das Gewicht seines Kacheldateneintrags größer als 90 ist und das Flag „Movable server“ fehlt. Für Gewichte 90 und kleiner ist dieses Flag nicht erforderlich.
- Innerhalb eines Containers gilt die Regel, einen Gegenstand auf dem Boden zu blockieren, nicht. Die Gewichtung der Kacheldaten ist hier ein Dienstattribut, nicht GetQuantity und nicht die aktuelle Gewichtung des Zeichens.
- Andere Kundendokumentationen können abweichende Gewichtsbeschreibungen enthalten. Dies beschreibt die eigentliche Regel GameActions.PickUp dieses Clients.
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.IsMovable(UO.GetSerial("lastobject"));
UO.Print("IsMovable: " + Convert.ToString(result));Parameter und Ablauf:
- Artikel – serial des zuletzt verwendeten Artikels. Die Anzahl der beweglichen Dinge ist nicht ihre Menge.
- Das Beispiel holt nichts ab und sendet nichts an den Server.
var item = UO.GetSerial("lastobject");
var movable = UO.IsMovable(item);
UO.Print("Locally movable 1/0: " + Convert.ToString(movable));Parameter und Ablauf:
- Für einen Gegenstand am Boden zeigt GetDistance die bekannte Reichweite des Kunden an.
- Selbst mit beweglichen =1 kann es sein, dass der Gegenstand zu weit entfernt ist. Ein positives Ergebnis bedeutet nicht, dass der Server die Erlaubnis zur Übertragung erteilt hat.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var item = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(item)))
{
var movable = UO.IsMovable(item);
var distance = UO.GetDistance(item);
UO.Print("Movable: " + Convert.ToString(movable));
UO.Print("Distance: " + Convert.ToString(distance));
}
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:
- FindType wählt ein serial Gold einer beliebigen Farbe im Rucksack aus.
- IsMovable prüft den gesamten Artikel. GetQuantity liest die Anzahl der Einheiten separat; das Ergebnis IsMovable ersetzt diesen Zähler nicht.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var item = UO.FindType(0x0EED, -1, "backpack");
if (Truth(item != ""))
{
if (Truth(UO.IsMovable(item)))
{
var units = UO.GetQuantity(item);
UO.Print("Selected stack units: " + Convert.ToString(units));
}
}
return null;
}
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.IsObjectExists(object? arg0);Überprüft das Vorhandensein eines nicht gelöschten Objekts in der lokalen Welt des Clients.
-
id– 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. -
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 - serial löst sich jetzt in geladenes Element oder mobile auf. int 0 – Das Objekt ist dem Client unbekannt, gelöscht oder der Alias ist nicht festgelegt. Dies ist keine Serverantwort über die Existenz eines Objekts: Ein Element außerhalb des sichtbaren Bereichs kann auf dem Server vorhanden sein und hier 0 geben.
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.IsObjectExists("backpack");
UO.Print("IsObjectExists: " + Convert.ToString(result));Parameter und Ablauf:
- Argument backpack ist ein Alias serial des Rucksacks Ihres eigenen Charakters.
- 1 bedeutet nicht, dass der Inhalt des Rucksacks bereits vollständig erhalten oder geöffnet wurde.
var present = UO.IsObjectExists("backpack");
if (Truth(present))
{
UO.Print("Backpack is loaded");
}
else
{
UO.Print("Backpack is unavailable");
}
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 Ziel speichert das spezifische serial. Der neue Wert lasttarget wird ihn nicht ersetzen.
- Nach der Pause 500 ms könnte das Objekt außer Sichtweite geraten sein, daher wird die Prüfung erneut durchgeführt.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var target = UO.GetSerial("lasttarget");
await Delay(500);
if (Truth(UO.IsObjectExists(target)))
{
UO.Print(UO.GetName(target));
}
else
{
UO.Print("Saved target is no longer loaded");
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- GetSerial formatiert die Zahl 1073746484 als 0x40001234, auch wenn kein Objekt vorhanden ist.
- Erst die nächste Prüfung meldet die Anwesenheit dieses serial in der aktuellen lokalen Welt.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var serial = UO.GetSerial("1073746484");
UO.Print("Serial: " + serial);
var present = UO.IsObjectExists(serial);
UO.Print("Present 1/0: " + Convert.ToString(present));
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LastObject();Liest serial des zuletzt verwendeten Objekts.
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.LastObject. 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.LastObject();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- Liest serial des zuletzt verwendeten Objekts.
var id = UO.LastObject();
UO.Print(Hex(id));
string Hex(object? value) => Convert.ToInt64(value).ToString("X");Parameter und Ablauf:
- Feldquelle: _world.LastObject. Der Befehl wählt das Objekt nicht aus, verwendet es nicht und greift es auch nicht an.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var id = UO.LastObject();
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 await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var before = UO.LastObject();
UO.Wait(500);
var after = UO.LastObject();
UO.Print(before = after);
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.MakeFakeItem(object? arg0);
void UO.MakeFakeItem(object? arg0, object? arg1);
void UO.MakeFakeItem(object? arg0, object? arg1, object? arg2);
void UO.MakeFakeItem(object? arg0, object? arg1, object? arg2, object? arg3);
void UO.MakeFakeItem(object? arg0, object? arg1, object? arg2, object? arg3, object? arg4);
void UO.MakeFakeItem(object? arg0, object? arg1, object? arg2, object? arg3, object? arg4, object? arg5);Erstellt oder ändert nur ein lokales Clientelement.
-
type– Pflicht graphic 1..65535; Unbenannt type bis ResolveType: Dieser Legacy-Zweig verwendet Arg/int. -
serial– Optionaler serial-Artikel. 0 (Standard) weist ein freies ID aus dem lokalen Bereich um 0x7FFEFFFF zu; Ein explizites Element serial kann mit einem bereits geladenen Element übereinstimmen und sein lokales Modell ändern. -
count– Optionale Menge, Standard 1. Das Kraftschluss wird zu 1; maximal 65535. -
color– Optional hue, Standard 0; begrenzt auf 0..65535. -
x– Optionale Weltkoordinaten, Standard self; Negative verwenden self und beschränken sich dann auf 0..65535. Z ist immer der aktuelle Spieler.Z. -
y– Optionale Weltkoordinaten, Standard self; Negative verwenden self und beschränken sich dann auf 0..65535. Z ist immer der aktuelle Spieler.Z.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- CreateFakeItem erfordert Spieler und gültiges graphic/Gegenstand serial. GetOrCreateItem gibt das lokale Modell zurück; Wenn es sich in einem Container befindet, wird die Verbindung gelöscht. Weist ground Container 0xFFFFFFFF, graphic/amount/hue/X/Y/Z, Layer.Invalid, AllowedToDraw=true zu, IsDamageable=false und IsMulti=false.
- Der Legacy-Befehl verwirft das zurückgegebene serial. Wenn 0 eine Fehlermeldung anzeigt. Der Server erstellt den Gegenstand nicht: Die Aktion stellt keinen echten Gegenstand, keine Beute oder Übertragungsrechte bereit. Belassen Sie beispielsweise serial=0.
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.MakeFakeItem");
UO.MakeFakeItem(0x0E21);Parameter und Ablauf:
- Erstellt oder ändert nur ein lokales Clientelement.
UO.MakeFakeItem(0x0E21);Parameter und Ablauf:
- CreateFakeItem erfordert Spieler und gültiges graphic/Gegenstand serial. GetOrCreateItem gibt das lokale Modell zurück; Wenn es sich in einem Container befindet, wird die Verbindung gelöscht. Weist ground Container 0xFFFFFFFF, graphic/amount/hue/X/Y/Z, Layer.Invalid, AllowedToDraw=true zu, IsDamageable=false und IsMulti=false.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.MakeFakeItem(0x0E21, 0, 5, 0);
return null;
}Parameter und Ablauf:
- Der Legacy-Befehl verwirft das zurückgegebene serial. Wenn 0 eine Fehlermeldung anzeigt. Der Server erstellt den Gegenstand nicht: Die Aktion stellt keinen echten Gegenstand, keine Beute oder Übertragungsrechte bereit. Belassen Sie beispielsweise serial=0.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
UO.MakeFakeItem(0x0E21, 0, 1, 0, UO.GetX(), UO.GetY());
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.MassMove();
void UO.MassMove(object? arg0);
void UO.MassMove(object? arg0, object? arg1);
void UO.MassMove(object? arg0, object? arg1, object? arg2);
void UO.MassMove(object? arg0, object? arg1, object? arg2, object? arg3);
void UO.MassMove(object? arg0, object? arg1, object? arg2, object? arg3, object? arg4, object? arg5, object? arg6);Ermöglicht eine einmalige Massenübertragung von Artikeln des ausgewählten Typs. Ziehen Sie nach dem Aktivieren von MassMove ein passendes Element mit der Maus: Der Quellcontainer wird daraus ermittelt. Weitere Artikel dieser Art aus derselben Quelle folgen automatisch. Der dritte Parameter ist TYPE/Grafik, nicht der ID des Elements. Alle Formulare beinhalten das Warten auf die erste manuelle Übertragung; Das explizite Ziel gibt an, wohin es gehen soll.
-
delay– Der erste Parameter ist die Verzögerung zwischen Übertragungsanforderungen in Millisekunden, eine Ganzzahl von 0 bis 2147483647. 350 bedeutet 0,35 Sekunden. Mit 0 wird pro Spielframe nicht mehr als ein nächster Carry gesendet. Zu GrabDelay wird keine Verzögerung hinzugefügt. Ein negativer Wert deaktiviert den Modus und löscht die Warteschlange. zum Ausschalten ist eine eindeutige UO.MassMove()-Notation zu bevorzugen. -
quantity– Der zweite Parameter ist das TOTAL-Limit einzelner Artikel (Artikel), einschließlich der ersten manuellen Übertragung. Ein Stapel gilt als ein Artikel, unabhängig von der Menge darin. 50 bedeutet bis zu 50 ganze Stapel oder 50 einzelne Artikel. Der Stapel wird bei diesem Limit NICHT geteilt. 0 oder kein Parameter – alle geeigneten Elemente. Negative Werte sind nicht zulässig. -
type– Der dritte Parameter ist der Artikeltypcode (Grafik/Typ), die Ganzzahl 0..65535, zum Beispiel 0x0EED oder die Zeichenfolge „0x0EED“ für Gold. Dies ist NICHT serial/ID und NICHT der Name AddObject. 0 oder Abwesenheit bestimmt den Typ bei der ersten manuellen Übertragung. Bei einem expliziten Typ wird die Warteschlange durch Ziehen eines anderen Typs nicht aktiviert; Der Modus wartet weiterhin auf ein passendes Element. -
destination– Der vierte Parameter ist der Zweck. Seriennummer der Truhe (Nummer/Hex-String) oder gespeicherter Name AddObject wählt den Behälter aus; X/Y ist ein Ort innerhalb seines Fensters. backpack, self und my wählen den Rucksack des aktuellen Charakters aus, auch mit Koordinaten im Rucksack. ground oder 0 wählt Land aus: X/Y/Z – absolute Position auf der Karte, alle drei Parameter sind erforderlich. lastcontainer – zuletzt geöffneter Behälter; lastobject, lasttarget, lastcorpse, finditem, laststatus sind gültig, wenn sie auf einen verfügbaren Container verweisen. receiving und catchbag wählen den installierten SetCatchBag-Container und, falls nicht installiert, den Rucksack aus. self/my bedeutet hier den Rucksack, obwohl GetX(self) die Position des Charakters anzeigt. Beim Vergleich der Namen wird die Groß-/Kleinschreibung nicht beachtet. Ein unbekannter oder noch nicht festgelegter Name führt zu einer Fehlermeldung, anstatt den Gegenstand auf den Boden fallen zu lassen. Ohne Ziel wird der Standort vom ersten manuellen Zurücksetzen an gespeichert: Sie können die Probe entweder in den Behälter oder auf den Boden legen. Für die Erde wird an die Welt X/Y/Z des ersten Resets erinnert. -
x– Fünfter Parameter. Bei einem Container die Koordinate innerhalb des Containers; -1 oder 65535 bedeutet automatische Platzierung. Für Land die absolute Kartenkoordinate, von 0 bis 65535. Für ein Formular ohne X/Y/Z wird -1 in einem expliziten Container verwendet. -
y– Sechster Parameter. Für einen Container – die Koordinate innerhalb des Containers, -1/65535 für die automatische Platzierung; für den Boden - die absolute Kartenkoordinate 0..65535. Für ein Formular ohne Koordinaten in einem expliziten Container verwenden Sie -1. -
z– Der siebte Parameter ist die Zielhöhe, Ganzzahl -128..127. Der Behälter enthält normalerweise 0; am Boden zeigen die tatsächliche Höhe an. In der Kurzform werden Höhe und X/Y aus der manuellen Übertragung übernommen.
void: kein Wert. MassMove aktivieren bedeutet, das manuelle Warten auf Übertragungen zu aktivieren. Die Gesamtzeile gibt die Anzahl der einzelnen Artikel an, für die Anfragen gesendet wurden, einschließlich des ersten Artikels. Ein Stapel gilt als ein Gegenstand; Das Ergebnis bestätigt nicht die Annahme jeder Anfrage durch den Server.
- Formulare mit den Argumenten 0, 1, 2, 3, 4 und 7 werden registriert. X/Y/Z werden nur gemeinsam angegeben. Formulare mit den Argumenten 5, 6 oder 8 werden nicht unterstützt. Reihenfolge: Verzögerung, Menge, type, Ziel, x, y, z.
- Aktivieren Sie den VOR-Mauserfassungsmodus. Die erste manuelle Übertragung gilt als ein Element: Der Stapel von 1000 wird vollständig übertragen und belegt nur einen Platz ab dem Limit 50. Der aktivierte Modus nimmt vollständige Stapel ohne einen geteilten Dialog auf. Wenn ein Teil des Stapels vor der Aufnahme genommen wurde, wird die Übertragung abgelehnt: Legen Sie den Teil zurück und beginnen Sie erneut.
- Eine Aktivierung bezieht sich auf eine manuelle Übertragung. Nach der Auswahl einer Probe wird der Auswahlmodus ausgeschaltet; Die verbleibende Warteschlange wird automatisch verarbeitet. Ein normaler Aufruf von MoveItem aus einem anderen Skript zählt nicht als manuelle Probenauswahl.
- Der Grafiktyp wird verglichen. Die Farbe wird in diesem Befehl nicht gefiltert. Es werden nur die direkten Inhalte des Quellcontainers verarbeitet; Die beiliegenden Beutel lassen sich nicht öffnen. Neue Elemente, die nach dem Erstellen der Warteschlange angezeigt werden, werden dieser nicht hinzugefügt. Wenn die Probe auf dem Boden lag, werden geladene Objekte gleicher Art im Einfangradius berücksichtigt.
- Die Menge ist die Obergrenze der Anfragen. Der Befehl wiederholt nicht automatisch Übertragungen, die vom Server abgelehnt wurden. Wenn der Server ausfällt, das Ziel nicht verfügbar ist, der Charakter stirbt oder der nächste Gegenstand nicht genommen werden kann, wird der Vorgang abgebrochen. Wenn der Cursor beschäftigt ist, wartet die Warteschlange bis zu 5 Sekunden, bis sie frei wird.
- UO.MassMove() schaltet den Modus aus und löscht die verbleibende Warteschlange. UO.TerminateAll() und das Verlassen des Zeichens brechen es ebenfalls ab. Eine bereits gesendete Anfrage wird durch einen Abbruch nicht zurückgesetzt. Die Warteschlange wird vom Client ausgeführt, nachdem der Befehl zurückgegeben wurde. Die nächste Zeile des Skripts bedeutet nicht, dass der Server die Übertragung bereits abgeschlossen hat.
- Um verschiedene Arten von Inhalten vollständig zu migrieren, verwenden Sie EmptyContainer. Um einen bestimmten Gegenstand zu tragen – MoveItem. Die acht Argumente Quelle, type, Farbe, Ziel, x, y, z, Verzögerung beziehen sich auf MoveItems, nicht auf MassMove.
- Wiederholtes korrektes Aufrufen desselben Befehls, während der Modus noch auf das erste Ziehen mit der Maus wartet, schaltet das Warten ab: Deaktivieren MassMove/MassPriceMove erscheint direkt im Spielfenster. Beim nächsten Anruf wird der Modus wieder aktiviert. Verwenden Sie nach der ersten Übertragung das Formular ohne Argumente, um die verbleibende Warteschlange zu stoppen. Bereits gesendete Anfragen werden nicht zurückgesetzt.
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.MassMove");
UO.MassMove(350, 0);Parameter und Ablauf:
- Verzögerung=350: Die nächsten Anfragen liegen mindestens 350 ms auseinander. Menge=0: Es gibt keine obere Benutzergrenze.
- type, Ziel und X/Y/Z werden nicht übertragen. Nachdem Sie MassMove aktiviert haben, ziehen Sie die Probe aus dem Beutel zur Truhe: Der Typ und die Quelle werden ihr entnommen, das Ziel ist der Ablageort.
- Wenn es sich bei der Probe um Gold handelt, werden die geladenen Goldstapel desselben Originalbehälters verschoben. Elemente anderer Art bleiben erhalten. Print erläutert nur die anschließende manuelle Aktion.
UO.MassMove(350, 0);
UO.Print("Drag one sample item to the destination container");Parameter und Ablauf:
- Verzögerung setzt 350 ms. total wird an den zweiten Mengenparameter übergeben und beschränkt den GESAMTEN Vorgang 50 auf einzelne Artikel.
- Wenn die Quelle 100 Stacks desselben Typs enthält, werden 50 ganze Stacks übertragen: der erste manuelle und ein weiterer 49. Each stack may contain a different amount; it does not affect the counter. Handelt es sich um Einzelposten, werden 50 Einzelposten übertragen.
- Es gibt keine weiteren Möglichkeiten: Die erste Erfassung und Zuordnung werden nach dem Aufruf mit der Maus ausgewählt.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var delay = 350;
var total = 50;
UO.MassMove(delay, total);
return null;
}Parameter und Ablauf:
- goldType – TYPE Gold, nicht ID ein separater Stapel. AddObject speichert serial der Truhe in der Truhe; Ersetzen Sie 0x40005678 durch Ihr ID.
- Verzögerung=350 ms, Menge=50 einzelne Artikel, type=0x0EED, Ziel=Truhe. Das Limit umfasst den ersten Stapel und nicht mehr als 49; das Ganze.
- x=-1 und y=-1 legen die automatische Platzierung in der Brust fest, z=0. Dies sind alles sieben Parameter.
- Die Warteschlange beginnt, nachdem Sie das Gold manuell gezogen haben. Seine Originaltasche wird zur Quelle. Eine explizite Truhe ersetzt den Ort zum Zurücksetzen der Maus; Ein Element eines anderen Typs startet die Warteschlange nicht.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var goldType = "0x0EED";
UO.AddObject("chest", "0x40005678");
UO.MassMove(350, 50, goldType, "chest", -1, -1, 0);
UO.Print("Now drag one gold stack from the source bag");
return null;
}
}4. Wählen Sie eine Probe mit der Maus aus, aber legen Sie den Grund im Voraus fest – direktes Skript
Parameter und Ablauf:
- Verzögerung=350 ms, Menge=0 – alle geeigneten Elemente. type=0 übernimmt den Typ aus der zukünftigen manuellen Übertragung.
- Destination=0 bedeutet Land, daher ist das vollständige Tripel x,y,z gegeben. GetX/GetY/GetZ gibt hier die aktuelle Position des Zeichens zurück.
- Nach dem Aufruf können Sie die Probe mit der Maus aufnehmen und ablegen. Der Befehl sendet es und andere passende Elemente an die angegebenen Koordinaten, auch wenn sich die Maus über dem Container befindet. Der Server prüft die Verfügbarkeit von Grundstücken.
var x = UO.GetX();
var y = UO.GetY();
var z = UO.GetZ();
UO.MassMove(350, 0, 0, 0, x, y, z);Parameter und Ablauf:
- Verzögerung=500 — eine halbe Sekunde; Menge=10 – zehn einzelne Artikel/Stapel für den gesamten Vorgang.
- type=0x0F7A – Grafiktyp des Elements. Bitte geben Sie Ihren Typ an; Seriennummer der Form 0x40001234 ist hier nicht zulässig.
- Ziel=backpack – Rucksack des Charakters. Die Koordinaten werden nicht übertragen, daher werden darin x=-1, y=-1, z=0 verwendet.
- Die Quelle wird ausgewählt, indem zunächst manuell ein passender Artikel übertragen wird. Wenn es sich bei der Quelle bereits um einen Rucksack handelt, wählen Sie für den praktischen Transport eine andere Quellentasche.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.MassMove(500, 10, "0x0F7A", "backpack");
UO.Print("Drag one matching item from the source chest");
return null;
}6. Wählen Sie einen Platz in einer Truhe basierend auf einem bereits liegenden Gegenstand aus – Szenarioklasse
Parameter und Ablauf:
- Platzieren Sie den Gegenstand zunächst manuell an der gewünschten Stelle in der Truhe. Der erste AddObject wählt die Truhe selbst aus und speichert sie ID in der Truhe. Der zweite wählt das darin enthaltene Element aus und speichert ID in position_sample.
- GetX/GetY für ein Element in einem Container gibt seine Koordinaten innerhalb dieses Containers zurück. Sie hängen nicht davon ab, wo sich das Brustfenster auf dem Bildschirm befindet.
- Verzögerung=350 ms, Menge=50 ganzzahlige Elemente, type=0 bestimmt durch zukünftige manuelle Übertragung von der Quelle, Ziel=Truhe.
- x und y definieren den ausgewählten Ort innerhalb der Truhe, das letzte z=0. Das position_sample-Objekt dient nur zum Lesen von Koordinaten; Die zu migrierende Quelle und der Typ werden durch die anschließende manuelle Migration bestimmt.
- Ersetzen Sie bei einem Rucksack die Truhe durch backpack oder self. Verwenden Sie für Land ground und Kartenkoordinaten wie UO.GetX(), UO.GetY(), UO.GetZ() ohne Argumente für die aktuelle Position des Charakters.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
UO.Print("Select the destination chest");
UO.AddObject("chest");
UO.Print("Select an item already at the desired position inside that chest");
UO.AddObject("position_sample");
var x = UO.GetX("position_sample");
var y = UO.GetY("position_sample");
UO.MassMove(350, 50, 0, "chest", x, y, 0);
UO.Print("Drag one source item to start the transfer");
return null;
}
}Parameter und Ablauf:
- Verzögerung=350 – mindestens 350 ms zwischen aufeinanderfolgenden Anfragen. Menge=50 – bis zu 50 einzelne Artikel/ganze Stapel, einschließlich einer Probe; Dies sind keine 50-Einheiten aus demselben Stapel.
- Nachdem Sie MassMove aktiviert haben, nehmen Sie den Gegenstand in der offenen Truhe auf und legen Sie ihn mit der Maus auf den Boden. Sein Typ und die ursprüngliche Truhe werden durch das Muster bestimmt; Weltweite X/Y/Z-Ziele werden an der Position dieser Zurücksetzung gespeichert.
- Die restlichen geladenen Gegenstände derselben Art aus dieser Truhe werden an denselben Punkt auf dem Boden geschickt. Der Inhalt von verschachtelten Beuteln und anderen Beuteltypen ist davon nicht betroffen. Ersetzen Sie für alle passenden Artikel 50 durch 0.
- MassMove hat keinen Rückgabewert. Der Vorgang endet nach der Aktivierung des Modus, die Warteschlange arbeitet im Client weiter. Die letzte Nachricht zählt die gesendeten Anfragen, nicht die Serverbestätigungen. Um die verbleibende Warteschlange zu löschen, rufen Sie UO.MassMove() auf.
UO.MassMove(350, 50);
UO.Print("Drag one item from the chest onto the ground");Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.MoveItem(object? arg0);
int UO.MoveItem(object? arg0, object? arg1);
int UO.MoveItem(object? arg0, object? arg1, object? arg2);
int UO.MoveItem(object? arg0, object? arg1, object? arg2, object? arg3);
int UO.MoveItem(object? arg0, object? arg1, object? arg2, object? arg3, object? arg4);
int UO.MoveItem(object? arg0, object? arg1, object? arg2, object? arg3, object? arg4, object? arg5);
int UO.MoveItem(object? arg0, object? arg1, object? arg2, object? arg3, object? arg4, object? arg5, object? arg6);
int UO.MoveItem(object? arg0, object? arg1, object? arg2, object? arg3, object? arg4, object? arg5, object? arg6, object? arg7);Transportiert einen bestimmten Gegenstand/Stapel durch serial: gefangen und in einen Behälter oder auf den Boden fallen gelassen.
-
id– Seriennummer eines bestimmten Elements/Zeichens: Zahl, Hexadezimal-/Dezimalzeichenfolge, self/backpack/lasttarget/lastobject/lastcontainer/lastcorpse/finditem/laststatus oder gespeicherter Name AddObject. Das ist nicht type. Das Objekt muss geladen sein; Überprüfen Sie vor der Aktion Exists. -
item– Seriennummer eines bestimmten Elements/Zeichens: Zahl, Hexadezimal-/Dezimalzeichenfolge, self/backpack/lasttarget/lastobject/lastcontainer/lastcorpse/finditem/laststatus oder gespeicherter Name AddObject. Das ist nicht type. Das Objekt muss geladen sein; Überprüfen Sie vor der Aktion Exists. -
amount– Anzahl der Einheiten in einem Stapel. 0 oder ein negativer Wert bedeutet den gesamten Stapel; Das Positive wird durch die verfügbare Menge begrenzt. Es ist NICHT die Anzahl der Stapel, die MassMove begrenzt. Der Standardwert ist 0. -
targetContainer– Seriennummer des Containers oder Setname AddObject; backpack/self/my wähle einen Rucksack, receiving/catchbag - SetCatchBag, und ohne einen Rucksack. lastcontainer/lastobject/lasttarget/lastcorpse/finditem/laststatus sind gültig, wenn sie in den richtigen Container aufgelöst werden. ground oder 0 wählt explizit Land aus; -1 – der gleiche Rucksackwähler. Ein unbekannter oder nicht angegebener Name verursacht einen Fehler, bevor das Element erfasst wird. Ohne Zielargument wird der Rucksack verwendet. -
container– Seriennummer des Containers oder Setname AddObject; backpack/self/my wähle einen Rucksack, receiving/catchbag - SetCatchBag, und ohne einen Rucksack. lastcontainer/lastobject/lasttarget/lastcorpse/finditem/laststatus sind gültig, wenn sie in den richtigen Container aufgelöst werden. ground oder 0 wählt explizit Land aus; -1 – der gleiche Rucksackwähler. Ein unbekannter oder nicht angegebener Name verursacht einen Fehler, bevor das Element erfasst wird. Ohne Zielargument wird der Rucksack verwendet. -
x– Mit einem Container – X im Gump, Standard 65535 (automatisch). Am Boden – Welt X, Standardcharakter X. -
y— Y im Gump oder Welt Y; Standardmäßig ist 65535 für Container oder Y-Zeichen für Land. -
z– Höhe, standardmäßig 0 in einem Container oder Z eines Charakters auf dem Boden. -
timeout– Siebtes Argument: maximale Wartezeit in ms, Standard 1000; ein negativer Wert entspricht 0. Wird nur mit dem achten waitConfirmation=true verwendet. -
waitConfirmation– Achtes Argument: true/1 beinhaltet die Erwartung einer beobachteten Veränderung in der Welt; false/0 (Standard) gibt das Ergebnis des Sendens einer Anfrage zurück.
int 1 – der Client hat die Erfassungs- und Rücksetzanforderung akzeptiert; 0 – Die Anfrage konnte nicht abgeschlossen werden. Bei waitConfirmation=true ist zusätzlich eine beobachtbare Änderung des Containers/der Koordinaten oder eine Verringerung des ursprünglichen Stapels erforderlich. Dies ist nicht der serial des neuen Stapels und nicht die Anzahl der übertragenen Gegenstände. Der Server kann den Betrieb verweigern.
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.
- Alle Argumentlängen von 1 bis 8 werden unterstützt. Bei gegebenem x können Sie y/z weglassen: Für sie werden die beschriebenen Standardwerte verwendet.
- Der bekannte Zielname wird vor der Erfassung aufgelöst. Verwenden Sie für Erde explizit „ground/0“; Ein Tippfehler im Namen sollte den Artikel nicht auf den Boden werfen.
- Der Gegenstand kann sich in einer Truhe, einer Tasche oder einem Rucksack befinden: ground legt den Zielort auf dem Boden fest, unabhängig vom Originalbehälter. Das erste Argument gibt den serial des Gegenstands selbst an, nicht die Truhe oder type. Das Team führt den Tackling selbst aus; Es ist nicht erforderlich, das Element zuerst mit der Maus anzufassen.
- Wenn DropCheckCoord eingeschaltet ist, wird das Ablassen auf den Boden über zwei Zellen hinaus abgelehnt. Zusätzlich prüft der Server die Verfügbarkeit von Speicherplatz. X/Y sind Kartenzellen, keine Gump-Pixel; Z – Höhe der ausgewählten Fläche, einschließlich Negativ. Bei einem Container bedeutet X/Y immer noch die Position innerhalb seines Gummis.
- Beim Warten auf Bestätigung wird der Zustand der Welt des Kunden verwendet: für einen Teilstapel eine Mengenreduzierung, für einen Ganzen einen Container und für den Boden ein anderes X/Y/Z. Die genaue Lage des Kaugummis im Inneren des Behälters wird durch diese Erwartung nicht bestätigt; Verschwindende/verschmelzende Stapel können die Überprüfung erschweren.
- Dies ist keine Bestätigung einer separaten Transaktion ID. Wenn sich der Artikel bereits im selben Container befand, beweist die Zuordnung des Containers nicht, dass es sich um eine neue Bewegung innerhalb des Gumps handelt.
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.MoveItem("lasttarget");
UO.Print("MoveItem: " + Convert.ToString(result));Parameter und Ablauf:
- Beute – Name AddObject; Betrag fehlt und entspricht 0, Ziel ist Rucksack.
- Es wird ein Artikel/Stapel übertragen, nicht alle Artikel eines bestimmten Typs.
var ok = UO.MoveItem("loot");
UO.Print("Move request: " + Convert.ToString(ok));Parameter und Ablauf:
- Menge=10 Einheiten eines Stapels, Truhe ist der Name des Behälters, x/y=60/70 im Gump, z=0.
- Die Menge hat nicht den von MassMove übernommenen Wert „zehn Stapel“.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var ok = UO.MoveItem("loot", 10, "chest", 60, 70, 0);
return null;
}Parameter und Ablauf:
- ground wählt explizit Land aus; fehlende X/Y/Z werden aus dem Zeichen übernommen.
- Übergeben Sie für einen anderen Punkt dessen Weltkoordinaten unter Berücksichtigung der Entfernung und DropCheckCoord.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var ok = UO.MoveItem("loot", 0, "ground");
return null;
}
}Parameter und Ablauf:
- ground_item – serial des ausgewählten Gegenstands in einer offenen Truhe gespeichert. Die ursprüngliche Truhe wird nicht als separater Parameter übergeben. amount=0 nimmt den gesamten Stapel; Beispielsweise nimmt 10 bis zu zehn Einheiten dieses Stapels ein.
- ground wählt eindeutig Land aus. x/y – absolute Koordinaten der Zelle eine Zelle entlang X vom Zeichen entfernt; z wird aus dem Zeichen übernommen und ist geeignet, wenn die angrenzende Fläche auf gleicher Höhe liegt. Stellen Sie auf einer Treppe, einem Tisch oder einem anderen Boden den tatsächlichen Z der gewünschten Oberfläche ein.
- sent=1 bedeutet das Senden einer Anfrage durch den Client; Ohne den achten Parameter wird keine Serverbestätigung erwartet. Der Wert 0 bedeutet, dass die Anfrage fehlgeschlagen ist. Dies ist das numerische Flag int 1/0: Scheck gesendet != 0 oder gesendet == 0; Der Vergleich mit bool ist ungültig.
- Um direkt vor Ihren Füßen zurückzusetzen, reicht UO.MoveItem('ground_item', 0, 'ground'): Alle drei Koordinaten werden vom Charakter übernommen. Um es in einer Truhe zu platzieren, geben Sie anstelle von ground serial/den Namen der Truhe und die Koordinaten ihres Zahnfleisches an.
UO.AddObject("ground_item");
var x = UO.GetX() + 1;
var y = UO.GetY();
var z = UO.GetZ();
var sent = UO.MoveItem("ground_item", 0, "ground", x, y, z);
if (Truth(sent == 1))
{
UO.Print("Ground move request sent");
}
else
{
UO.Print("Ground move request was not sent");
}
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:
- timeout=1500 ms wird verwendet, weil waitConfirmation=true. x/y=-1 – automatische Platzierung.
- 0 kann auf eine Zeitüberschreitung für eine bereits gesendete Anfrage hinweisen. Wiederholen Sie die Übertragung nicht blind; Bitte überprüfen Sie zunächst den aktuellen Zustand des Artikels.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var ok = UO.MoveItem("loot", 0, "backpack", -1, -1, 0, 1500, true);
if (Truth(ok == 0))
{
UO.Print("Move was rejected or not confirmed");
}
return null;
}
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.MoveItems(object? arg0, object? arg1, object? arg2, object? arg3, object? arg4, object? arg5, object? arg6, object? arg7);Überträgt alle geeigneten Gegenstände direkt von einem Behälter in einen anderen oder auf den Boden. Elemente werden mit graphic und hue ausgewählt; Jeder Stapel wird vollständig übertragen. Dabei geht es um das Tragen von Dingen, nicht um das Gehen von Charakteren oder die interaktive Aktivierung von MassMove.
-
Container– Seriennummer des Quellcontainers, z. B. backpack, „backpack“, Name AddObject oder Hex-ID. Der Inhalt muss bereits heruntergeladen sein. 0 ist keine gültige Quelle; ground wählt keine Dinge rund um den Charakter aus. Verwenden Sie für einen Rucksack backpack anstelle von self. -
ItemsType– Grafisches Element, zum Beispiel 0x0EED – Gold. Nicht ID Dinge und nicht mobile Körper. Negative Zahl oder 0xFFFF – alle Typen. Array-/Typmaske wird nicht akzeptiert. -
ItemsColor– Dinge färben. -1 (oder eine andere negative Zahl) und 0xFFFF – beliebig; 0 - nur hue 0. Nicht serial und keine Bekanntheit. -
MoveIntoID– Seriennummer des Zielcontainers oder Objektalias. Für deinen Rucksack – backpack. Für Land – die Zahl 0 (auch ground/"ground"/UO.Ground()). Quelle und Ziel müssen unterschiedlich sein. -1 ist in diesem Befehl nicht die Abkürzung für backpack. Self - serial mobile anstatt seinen Rucksack automatisch auszutauschen. -
X– Für einen Container ungleich Null die Position INNERHALB seines Gumps; -1,-1 überlassen Sie die Platzierung dem Server. Am Boden – Weltkoordinaten 0..65535, beide sind erforderlich und nicht negativ. Nicht die Bildschirmpixel der Spielwelt und nicht der Endpunkt der Route. -
Y– Für einen Container ungleich Null die Position INNERHALB seines Gumps; -1,-1 überlassen Sie die Platzierung dem Server. Am Boden – Weltkoordinaten 0..65535, beide sind erforderlich und nicht negativ. Nicht die Bildschirmpixel der Spielwelt und nicht der Endpunkt der Route. -
Z– Höhe der Welt, wenn sie auf dem Boden liegt; Verwenden Sie die tatsächliche Höhe des Standorts (Protokollbereich -128..127). Geben Sie im Containerbeispiel 0 an. Dies ist kein Ausrüstungsschichtindex. -
DelayMS– Verzögerung zwischen akzeptierten Anfragen in Millisekunden. In Wirklichkeit ist max(GrabDelay, max(0, DelayMS)); Es gibt auch eine Wartezeit nach der letzten gesendeten Überweisung. 350 bedeutet nicht 350 Elemente und garantiert keine Bestätigung in 350 ms.
Registrierung object? gibt tatsächlich int 1/true zurück, wenn mindestens eine Übertragungsanforderung akzeptiert wird, andernfalls 0/false. Hierbei handelt es sich nicht um eine Anzahl von Artikeln oder um eine Garantie dafür, dass ALLE Übereinstimmungen übertragen werden. Überprüfen Sie den Inhalt, nachdem der Server antwortet. Eine Notstornierung bricht den Vorgang ab und ist nicht zur Rückgabe von false erforderlich.
- Alle acht Argumente sind erforderlich. Eine Liste direkter Kinder des Originalcontainers wird einmal erstellt; Es gibt keine rekursive Durchquerung. Sobald eine Tasche in der Liste enthalten ist, wird sie zusammen mit ihrem Inhalt als ein Element verschoben und nicht ausgepackt.
- Nimmt den gesamten aktuellen Stapel jedes Spiels. Der Grenzwert für die Anzahl der Artikel oder Einheiten wird durch diesen Befehl nicht festgelegt; für solche Szenarien siehe UO.MassMove. Ignore wird für dieses Beispiel nicht als zusätzlicher Filter verwendet.
- Vor jeder Aktion wird erneut überprüft, ob sich der Artikel noch im Originalbehälter befindet. Das Verbot, einen Container in sich selbst/einen Nachkommen zu verschachteln, und die Nichtverfügbarkeit des Artikels können zu einem Überspringen führen. Eine Warteschlange ist keine Transaktion: Bereits übermittelte Aktionen werden nicht zurückgesetzt.
- Wenn Quelle=0, identische Quelle/Ziel oder Masse mit negativem X/Y, wird 0 zurückgegeben und ein Fehler gemeldet. Der Server bestimmt die Auflösung, den Bereich, die Kapazität und das Endergebnis. Führen Sie keine anderen Arbeiten mit angehobenen Gegenständen gleichzeitig durch.
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.MoveItems("lasttarget", 0x0EED, -1, "backpack", -1, -1, 0, 350);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- 0x0EED - type Gold; -1 bis ItemsColor – jedes hue. -1,-1 nach backpack ist die automatische Position im Gump, nicht am Boden. 350 ms – die minimal gewünschte Verzögerung unter Berücksichtigung von GrabDelay. Alle geraden Goldstapel werden im Ganzen genommen.
var source = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(source == 0) || Truth(source == UO.Backpack()) || !(Truth(UO.Exists(source))))
{
return null;
}
var sent = UO.MoveItems(source, 0x0EED, -1, "backpack", -1, -1, 0, 350);
if (Truth(Truth(sent) == false))
{
UO.Print("No gold transfer request was accepted");
}
int Asc(object? value, int fallback = 0) { string text = Convert.ToString(value) ?? ""; if (text.StartsWith("0x", StringComparison.OrdinalIgnoreCase)) return int.TryParse(text[2..], System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out int hex) ? hex : fallback; return int.TryParse(text, out int number) ? number : fallback; }
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:
- 0x0E21 – Bandagen, nicht der menschliche Körper. backpack ist die Quelle, Ziel ist serial der Truhe. Alle Spiele sind auf einen Punkt gerichtet 30,40; Der Server kann die Stapel zusammenführen oder die Position anpassen.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var destination = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(destination == 0) || Truth(destination == UO.Backpack()) || !(Truth(UO.Exists(destination))))
{
return null;
}
var sent = UO.MoveItems("backpack", 0x0E21, -1, destination, 30, 40, 0, 350);
if (Truth(sent != 0))
{
UO.Print("Transfer requested; verify the destination contents");
}
return null;
}
int Asc(object? value, int fallback = 0)
{
string text = Convert.ToString(value) ?? "";
if (text.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
return int.TryParse(text[2..], System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out int hex) ? hex : fallback;
return int.TryParse(text, out int number) ? number : fallback;
}
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:
- itemType gibt den Typ an, nicht die Menge; Alle geraden Stapel werden in einem Rucksack transportiert. X+1/Y/Z ist ein Beispiel für einen benachbarten Punkt auf gleicher Höhe: Wählen Sie für eine Neigung/Wand die richtige Koordinate aus. Für den Weltmodus ist eine 0-Zuweisung erforderlich. true gibt nur eine akzeptierte Anfrage an, keinen freigegebenen Rucksack.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
if (!(Truth(DropTypeBesideMe(0x0EED))))
{
UO.Print("No ground drop request was accepted");
}
return null;
}
dynamic DropTypeBesideMe(dynamic itemType)
{
if (!(Truth(UO.Connected())) || Truth(UO.Dead()))
{
return false;
}
var x = UO.GetX() + 1;
var y = UO.GetY();
var z = UO.GetZ();
return UO.MoveItems("backpack", itemType, -1, 0, x, y, z, 350);
}
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 · 繁體中文 · 日本語 · 한국어
string UO.Name();Liest den Namen des Charakters.
Es gibt keine Parameter.
string ist ein dem Client bekannter Name. Eine leere Zeichenfolge bedeutet einen leeren/unbekannten Wert oder kein Objekt. Dies ist nicht serial oder ein Profilpfad. Der Name/Titel des Spiels ist nicht in die Sprache übersetzt IDE.
- Bereits empfangene lokale Daten werden gelesen. Die Anfrage öffnet den Status nicht und zwingt den Server nicht, ein Update zu senden. Nach einem Tod, einem Kartenübergang oder einer Objektlöschung können sich die Werte zwischen zwei Aufrufen ändern.
- Dabei handelt es sich um Lesefunktionen: Durch Zuweisen des Ergebnisses zu einer Variablen wird der Snapshot gespeichert. Die Eigenschaften des Charakters werden dadurch nicht verändert. Bei Namen wird die Groß-/Kleinschreibung nicht beachtet. Verwenden Sie genau die angezeigte Form mit der erforderlichen Anzahl von Argumenten.
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.Name();
UO.Print("Name: " + Convert.ToString(result));Parameter und Ablauf:
- Es gibt keine Parameter: self wird gelesen.
- Die leere Zeichenfolge wird explizit behandelt; Dies ist nicht der Text „0“.
var text = UO.Name();
if (Truth(text != ""))
{
UO.Print(text);
}
else
{
UO.Print("Text is unavailable");
}
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:
- Ihr Zeichen wird gelesen, der Wert wird als Zeile gespeichert.
- Der +-Operator verbindet Zeichenfolgen. Convert.ToString wird für dieses Ergebnis nicht benötigt.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var text = UO.Name();
UO.Print("Player имя: " + text);
return null;
}Parameter und Ablauf:
- Beide Aufrufe beziehen sich auf self; UO.Wait legt die Pause 1000 ms fest.
- Der Unterschied kann bedeuten, dass Daten aktualisiert werden oder die Welt verlassen wird. Das Beispiel ändert weder den Namen noch den Titel.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var previous = UO.Name();
await Delay(1000);
var current = UO.Name();
if (Truth(previous != current))
{
UO.Print("Updated text: " + current);
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Picking();Überprüft, ob der Cursor des Kunden mit einem abgeholten Artikel belegt ist.
Es gibt keine Parameter.
int 1 - ItemHold.Enabled set; 0 – nicht installiert. Dies ist ein Client-Status, kein ID oder eine Serverzustellungsbestätigung. Ein mit der Maus oder einem anderen Skript aufgenommenes Objekt wird berücksichtigt.
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.
- Beim Lesen wird kein Gegenstand hochgehoben oder fallen gelassen.
- Überprüfen Sie für Ihre eigene Übertragung auch das Ergebnis von Drag/DragItem; Der beschäftigte Cursor einer anderen Person bedeutet nicht, dass das gewünschte Element erfolgreich übernommen 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.
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.Picking();
UO.Print("Picking: " + Convert.ToString(result));Parameter und Ablauf:
- Es gibt keine Argumente.
- 1 oder 0 wird angezeigt.
UO.Print(Convert.ToString(UO.Picking()));Parameter und Ablauf:
- Ein Drag-Argument bedeutet den gesamten Stapel und Timeout=0.
- Picking prüft den freigegebenen Cursor des Clients. Führen Sie nicht zwei unabhängige Migrationen gleichzeitig durch.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.Picking() == 0))
{
if (Truth(UO.Drag("loot")))
{
var dropped = UO.DropItem("backpack", -1, -1, 0);
}
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Die Prüfung wird bis zu zwanzig Mal mit Pausen von 50 ms wiederholt.
- Der Befehl lässt den Cursor nicht los und bricht die Bewegung einer anderen Person nicht ab.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var tries = 0;
while (Truth(UO.Picking()) && Truth(tries < 20))
{
await Delay(50);
tries = tries + 1;
}
if (Truth(UO.Picking()))
{
UO.Print("Cursor is still occupied");
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ReceiveObjectName(object? arg0);
void UO.ReceiveObjectName(object? arg0, object? arg1);Fordert den Namen eines Objekts mit einer Einzelklick-Anfrage an.
-
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.ReceiveObjectName ruft Click(id) auf und wartet dann bis max(0,timeout) bis GetName(id) leer ist; Pause nicht länger als 25 ms. Ein bereits bekannter Name beendet das Warten sofort.
- Ohne Timeout wird nur Click ausgeführt. Es gibt keinen Rückgabenamen: GetName separat lesen; Das Ende der Wartezeit kann eine Zeitüberschreitung bedeuten.
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.ReceiveObjectName");
UO.ReceiveObjectName("lasttarget");Parameter und Ablauf:
- Fordert den Namen eines Objekts mit einer Einzelklick-Anfrage an.
UO.ReceiveObjectName("lasttarget");Parameter und Ablauf:
- Bridge.ReceiveObjectName ruft Click(id) auf und wartet dann bis max(0,timeout) bis GetName(id) leer ist; Pause nicht länger als 25 ms. Ein bereits bekannter Name beendet das Warten sofort.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.Exists("lasttarget")))
{
UO.ReceiveObjectName("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 wird nur Click ausgeführt. Es gibt keinen Rückgabenamen: GetName separat lesen; Das Ende der Wartezeit kann eine Zeitüberschreitung bedeuten.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.ReceiveObjectName(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;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.TicksUse();Liest die gespeicherte Marke TicksUse.
Es gibt keine Parameter.
int – markieren Sie UO.Timer in Zehntelsekunden ab Beginn der Laufzeit. 0 – die Marke wurde noch nicht gesetzt oder das Ereignis ist in der ersten Zehntelsekunde eingetreten; es handelt sich nicht um Millisekunden oder Kalenderzeit.
- Gibt das Feld ticksUse zurück. Es wird von UseObject aktualisiert; Es handelt sich nicht um eine automatische Überwachung aller manuellen/Serveraktivitäten. Der Befehl selbst ändert die Markierung nicht.
- UO.Timer() – die Marke berechnet das Alter in Zehntelsekunden. Markierungen zwischen verschiedenen Laufzeiten werden nicht 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.
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.TicksUse();
UO.Print("TicksUse: " + Convert.ToString(result));Parameter und Ablauf:
- Liest die gespeicherte Marke TicksUse.
var stamp = UO.TicksUse();
UO.Print(stamp);Parameter und Ablauf:
- Gibt das Feld ticksUse zurück. Es wird von UseObject aktualisiert; Es handelt sich nicht um eine automatische Überwachung aller manuellen/Serveraktivitäten. Der Befehl selbst ändert die Markierung nicht.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var stamp = UO.TicksUse();
var ageTenths = UO.Timer() - stamp;
UO.Print(ageTenths);
return null;
}Parameter und Ablauf:
- UO.Timer() – die Marke berechnet das Alter in Zehntelsekunden. Markierungen zwischen verschiedenen Laufzeiten werden nicht verglichen.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var before = UO.TicksUse();
UO.Wait(250);
var after = UO.TicksUse();
UO.Print(before = after);
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.UpdateObject(object? arg0);Fordert eine Aktualisierung eines bereits geladenen Objekts an.
-
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. -
ObjID– Serielles/ID-Objekt: int, numerische/Hex-Zeichenfolge oder etablierter Alias, zum Beispiel „lasttarget“. Dies ist nicht graphic/type. Überprüfen Sie das geladene Objekt, bevor Sie Maßnahmen ergreifen. -
serialOrName– 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.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- Für Mobilgeräte heißt es RequestMobileStatus(..., true), für Artikel - SingleClick. Wenn serial nicht in beiden lokalen Tabellen vorhanden ist, gibt es keine Aktion. Dabei handelt es sich weder um das Herunterladen eines unbekannten Objekts noch um die Bestätigung eines Updates.
- Bridge sendet die Anfrage im Game-Stream. Es gelten die Serverregeln; Es gibt kein eingebautes Warten auf Bestätigung.
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.UpdateObject");
UO.UpdateObject(UO.GetSerial("lasttarget"));Parameter und Ablauf:
- Fordert eine Aktualisierung eines bereits geladenen Objekts an.
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.UpdateObject(id);
}
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:
- Für Mobilgeräte heißt es RequestMobileStatus(..., true), für Artikel - SingleClick. Wenn serial nicht in beiden lokalen Tabellen vorhanden ist, gibt es keine Aktion. Dabei handelt es sich weder um das Herunterladen eines unbekannten Objekts noch um die Bestätigung eines Updates.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var id = UO.GetSerial("self");
if (Truth(UO.Exists(id)))
{
UO.UpdateObject(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:
- Bridge sendet die Anfrage im Game-Stream. Es gelten die Serverregeln; Es gibt kein eingebautes Warten auf Bestätigung.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
ApplyToLoaded(UO.GetSerial("lasttarget"));
return null;
}
void ApplyToLoaded(dynamic id)
{
if (Truth(UO.Exists(id)))
{
UO.UpdateObject(id);
}
}
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.UseFromGround(object? arg0);
int UO.UseFromGround(object? arg0, object? arg1);Sucht nach einem Objekt des gegebenen graphic am Boden/in der Welt und ruft sofort dessen Anwendung auf. Wird normalerweise für in der Nähe befindliche Objekte verwendet, z. B. zum Öffnen eines Rucksacks. Ein wichtiges Merkmal dieser Laufzeit: Die Suche basiert auf FindType und kann auch mobile mit demselben body finden; Hierbei handelt es sich nicht unbedingt um eine reine Artikelauswahl. Für Elemente mit explizitem Radius und engster Auswahl verwenden Sie UseType(..., ground, ...).
-
type– Obligatorisch graphic. 0x0E75 ist beispielsweise ein Rucksack. Zahl oder numerischer Hex-String; negative Zahl/0xFFFF – beliebig graphic. Körperwerte wie 0x0190 (männlich) und 0x0191 (weiblich) können mobile auswählen; Ersetzen Sie sie nicht durch das Element type. Mit diesem Formular werden nicht zwei Typen gleichzeitig übertragen. -
color– Optional hue, Standard – 1 (beliebig). Negative Zahl/0xFFFF – beliebig, 0 – nur hue 0. Es gibt keine weiteren Parameter: Container, Entfernung, nächstgelegene und maxZ werden diesem Befehl nicht hinzugefügt.
int - serial des ersten gefundenen Objekts, übergeben an UseObject oder 0. Dies ist nicht die Anzahl der Objekte, nicht graphic und nicht true/false. Das Objekt wurde möglicherweise gefunden, aber der Server lässt möglicherweise nicht zu, dass es verwendet wird. Überprüfen Sie die ID != 0 und den erwarteten Spieleffekt separat.
- Verwendet die aktuellen FindDistance und FindVertical, berücksichtigt Ignore. Der Suchcontainer ist auf ground festgelegt, verschachtelte Inhalte werden nicht durchsucht. Mobiltelefone schließen self aus; Es gibt keine gesonderte Einschränkung in Bezug auf Leben/Sichtbarkeit/Berühmtheit.
- Aktualisiert FindItem/FindCount/GetFoundItems mit allen Suchtreffern, wendet jedoch nur das erste Ergebnis an. Die nächstgelegene ist nicht garantiert; Weltobjekte werden vor Mobiltelefonen überprüft.
- Nimmt keinen Gegenstand im Rucksack auf, bewegt den Charakter nicht, wartet nicht auf eine Serverantwort oder das Ende des Ziels. Wenn es keine Übereinstimmung gibt, wird eine Nachricht gedruckt. Um ohne Aktion zu suchen, verwenden Sie UO.FindType.
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.UseFromGround(0x0E75);
UO.Print("UseFromGround: " + Convert.ToString(result));Parameter und Ablauf:
- nur type; irgendein hue. Es werden die aktuellen FindDistance/FindVertical verwendet. Tasche – ID des ersten Ergebnisses, nicht unbedingt das nächstgelegene. Der Inhalt wird nur geöffnet, wenn der Server dies zulässt.
var bag = UO.UseFromGround(0x0E75);
if (Truth(bag != 0))
{
UO.AddObject("ground_bag", bag);
}
else
{
UO.Print("No loaded ground backpack matches the search settings");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;2. Tragen Sie einen Rucksack der gewünschten Farbe in der Nähe auf gleicher Höhe auf – Skriptfunktion
Parameter und Ablauf:
- Die Suche ist auf zwei Zellen und das gleiche Z beschränkt. Die Farbe 0x0044 dient als Beispiel: Ersetzen Sie sie durch hue Ihres Artikels. Die Einstellungen werden auch im Fehlerfall wiederhergestellt.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var oldDistance = UO.FindDistance();
var oldZ = UO.FindVertical();
try
{
UO.FindDistance(2);
UO.FindVertical(0);
var bag = UO.UseFromGround(0x0E75, 0x0044);
if (Truth(bag != 0))
{
UO.AddObject("colored_ground_bag", bag);
}
}
finally
{
UO.FindDistance(oldDistance);
UO.FindVertical(oldZ);
}
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:
- radius gibt FindDistance anstelle des dritten Arguments UseFromGround an. 3000 ms – Zeit zum Betrachten des Beispiels, nicht zur Bestätigung des Öffnens; Fenstertyp 3 – Container. Die Ergebnisse dieser Suche verbleiben in Suchen*.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var selected = OpenGroundBagWithin(2);
if (Truth(selected != 0))
{
await Delay(3000);
UO.CloseClientUIWindow(3, selected);
}
return null;
}
dynamic OpenGroundBagWithin(dynamic radius)
{
var previous = UO.FindDistance();
try
{
UO.FindDistance(radius);
return UO.UseFromGround(0x0E75, -1);
}
finally
{
UO.FindDistance(previous);
}
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}ClassicUO — Bad Newbie & C# Scripts IDE