DE UO Topic items Part 2 - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Home · C# · IDE · UO API · A–Z · Beispiele · Sprachen
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.MoveItem(object? id);
int UO.MoveItem(object? id, object? amount);
int UO.MoveItem(object? id, object? amount, object? targetContainer);
int UO.MoveItem(object? item, object? amount, object? container, object? x);
int UO.MoveItem(object? item, object? amount, object? container, object? x, object? y);
int UO.MoveItem(object? id, object? amount, object? targetContainer, object? x, object? y, object? z);
int UO.MoveItem(object? item, object? amount, object? container, object? x, object? y, object? z, object? timeout);
int UO.MoveItem(object? item, object? amount, object? container, object? x, object? y, object? z, object? timeout, object? waitConfirmation);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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var 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 RunScenario();
object? RunScenario()
{
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;C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: id (Any)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.MoveItem. -
InjectionScript.Runtime.InjectionApiUO.CompactMoveItem:CompactMoveItem(new[] { id }).
Interner Implementierungscode; kein eigenständiges Skript.
public int MoveItem(InjectionValue id)
=> CompactMoveItem(new[] { id });Parameter: id (Any), amount (Any)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.MoveItem. -
InjectionScript.Runtime.InjectionApiUO.CompactMoveItem:CompactMoveItem(new[] { id, amount }).
Interner Implementierungscode; kein eigenständiges Skript.
public int MoveItem(InjectionValue id, InjectionValue amount)
=> CompactMoveItem(new[] { id, amount });Parameter: id (Any), amount (Any), targetContainer (Any)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.MoveItem. -
InjectionScript.Runtime.InjectionApiUO.CompactMoveItem:CompactMoveItem(new[] { id, amount, targetContainer }).
Interner Implementierungscode; kein eigenständiges Skript.
public int MoveItem(InjectionValue id, InjectionValue amount, InjectionValue targetContainer)
=> CompactMoveItem(new[] { id, amount, targetContainer });Parameter: item (Any), amount (Any), container (Any), x (Any)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.Register [MoveItem]. -
InjectionScript.Runtime.InjectionApiUO.CompactMoveItem:CompactMoveItem(values).
Der Aufruf führt den gespeicherten Handler-Delegate aus. Die Registrierungsmethode erzeugt ihn beim Aufbau der API.
Interner Implementierungscode; kein eigenständiges Skript.
values => new InjectionValue(CompactMoveItem(values))Parameter: item (Any), amount (Any), container (Any), x (Any), y (Any)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.Register [MoveItem]. -
InjectionScript.Runtime.InjectionApiUO.CompactMoveItem:CompactMoveItem(values).
Der Aufruf führt den gespeicherten Handler-Delegate aus. Die Registrierungsmethode erzeugt ihn beim Aufbau der API.
Interner Implementierungscode; kein eigenständiges Skript.
values => new InjectionValue(CompactMoveItem(values))Parameter: id (Any), amount (Any), targetContainer (Any), x (Any), y (Any), z (Any)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.MoveItem. -
InjectionScript.Runtime.InjectionApiUO.CompactMoveItem:CompactMoveItem(new[] { id, amount, targetContainer, x, y, z }).
Interner Implementierungscode; kein eigenständiges Skript.
public int MoveItem(InjectionValue id, InjectionValue amount, InjectionValue targetContainer, InjectionValue x, InjectionValue y, InjectionValue z)
=> CompactMoveItem(new[] { id, amount, targetContainer, x, y, z });Parameter: item (Any), amount (Any), container (Any), x (Any), y (Any), z (Any), timeout (Any)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.Register [MoveItem]. -
InjectionScript.Runtime.InjectionApiUO.CompactMoveItem:CompactMoveItem(values).
Der Aufruf führt den gespeicherten Handler-Delegate aus. Die Registrierungsmethode erzeugt ihn beim Aufbau der API.
Interner Implementierungscode; kein eigenständiges Skript.
values => new InjectionValue(CompactMoveItem(values))
UO.MoveItem(item, amount, container, x, y, z, timeout, waitConfirmation) — UO.MoveItem(Any,Any,Any,Any,Any,Any,Any,Any)
Parameter: item (Any), amount (Any), container (Any), x (Any), y (Any), z (Any), timeout (Any), waitConfirmation (Any)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.Register [MoveItem]. -
InjectionScript.Runtime.InjectionApiUO.CompactMoveItem:CompactMoveItem(values).
Der Aufruf führt den gespeicherten Handler-Delegate aus. Die Registrierungsmethode erzeugt ihn beim Aufbau der API.
Interner Implementierungscode; kein eigenständiges Skript.
values => new InjectionValue(CompactMoveItem(values))Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.MoveItems(object? container, object? itemsType, object? itemsColor, object? moveIntoID, object? x, object? y, object? z, object? delayMS);Ü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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
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;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
UO.MoveItems(container, itemsType, itemsColor, moveIntoID, x, y, z, delayMS) — UO.MoveItems(Any,Any,Any,Any,Any,Any,Any,Any)
Parameter: container (Any), itemsType (Any), itemsColor (Any), moveIntoID (Any), x (Any), y (Any), z (Any), delayMS (Any)
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MoveItems:bridge.MoveItems(Arg(0), ResolveType(arguments[1]), Arg(2), Arg(3), Arg(4), Arg(5), Arg(6), Arg(7)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[1]).
Interner Implementierungscode; kein eigenständiges Skript.
case "moveitems": return new InjectionValue(bridge.MoveItems(Arg(0), ResolveType(arguments[1]), Arg(2), Arg(3), Arg(4), Arg(5), Arg(6), Arg(7)));Українська · Русский · 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.
- C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
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 RunScenario();
object? RunScenario()
{
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;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: string / String.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [Name]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetName:bridge.GetName(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Der Aufruf führt den gespeicherten Handler-Delegate aus. Die Registrierungsmethode erzeugt ihn beim Aufbau der API.
Interner Implementierungscode; kein eigenständiges Skript.
() => bridge.GetName(bridge.Self)API-Erstellung: Diese Funktionen registrieren die API. Sie werden nicht bei jedem Befehlsaufruf erneut ausgeführt.
Українська · Русский · 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 RunScenario();
object? RunScenario()
{
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;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.Picking. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Picking:bridge.Picking().
Interner Implementierungscode; kein eigenständiges Skript.
public int Picking() => bridge.Picking();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ReceiveObjectName(object? id);
void UO.ReceiveObjectName(object? id, object? timeout);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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.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;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: id (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ReceiveObjectName. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ReceiveObjectName:bridge.ReceiveObjectName(GetObject(id), 0). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Interner Implementierungscode; kein eigenständiges Skript.
public void ReceiveObjectName(InjectionValue id) => bridge.ReceiveObjectName(GetObject(id), 0);Parameter: id (Any), timeout (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ReceiveObjectName. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ReceiveObjectName:bridge.ReceiveObjectName(GetObject(id), NumberConversions.ToInt(timeout)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(timeout).
Interner Implementierungscode; kein eigenständiges Skript.
public void ReceiveObjectName(InjectionValue id, InjectionValue timeout) => bridge.ReceiveObjectName(GetObject(id), NumberConversions.ToInt(timeout));Українська · Русский · 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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var before = UO.TicksUse();
UO.Wait(250);
var after = UO.TicksUse();
UO.Print(before = after);
return null;
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: int / Integer.
Beim Aufruf:
Interner Implementierungscode; kein eigenständiges Skript.
public int TicksUse() => ticksUse;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.UpdateObject(object? id);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.
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 RunScenario();
object? RunScenario()
{
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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
ApplyToLoaded(UO.GetSerial("lasttarget"));
return null;
}
void ApplyToLoaded(dynamic id)
{
if (Truth(UO.Exists(id)))
{
UO.UpdateObject(id);
}
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: id (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.UpdateObject. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UpdateObject:bridge.UpdateObject(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Interner Implementierungscode; kein eigenständiges Skript.
public void UpdateObject(InjectionValue id) => bridge.UpdateObject(GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.UseFromGround(object? @type);
int UO.UseFromGround(object? @type, object? color);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 RunScenario();
object? RunScenario()
{
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;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: type (Any)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.UseFromGround. -
InjectionScript.Runtime.InjectionApiUO.UseFromGround:UseFromGround(type, new InjectionValue(-1)).
Interner Implementierungscode; kein eigenständiges Skript.
public int UseFromGround(InjectionValue type) => UseFromGround(type, new InjectionValue(-1));Parameter: type (Any), color (Any)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.UseFromGround. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.FindType:bridge.FindType(ResolveType(type), NumberConversions.ToInt(color), 1, -1, false). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(type). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(color). -
InjectionScript.Runtime.InjectionApiUO.UseObject:UseObject(id). -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage("No matching item found on ground.").
Interner Implementierungscode; kein eigenständiges Skript.
public int UseFromGround(InjectionValue type, InjectionValue color)
{
int id = bridge.FindType(ResolveType(type), NumberConversions.ToInt(color), 1, -1, false);
if (id != 0)
UseObject(id);
else
SystemMessage("No matching item found on ground.");
return id;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.UseItemOnMobile(object? itemSerial, object? targetSerial);Bereitet das Ziel des Charakters vor und verwendet den Gegenstand.
-
itemSerial– 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. -
targetSerial– 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.
- ExecuteClientApiCompatibility ruft zuerst Bridge.WaitTargetObject(TargetSerial) auf, dann Bridge.UseObject(ItemSerial). Argumente werden nicht vertauscht. Diese direkten Bridge-Aufrufe aktualisieren die TicksTarget/TicksUse-Laufzeit nicht.
- Überprüft den Ziel-/Elementtyp nicht und wartet nicht auf den Cursor. Durch die Vorbereitung des Ziels vor der Verwendung wird verhindert, dass ein schnell eintreffendes Ziel verfehlt wird. Der Server bestimmt jedoch dennoch, ob die Aktion gültig ist.
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.UseItemOnMobile");
UO.UseItemOnMobile("0x40001234", "self");Parameter und Ablauf:
- Bereitet das Ziel des Charakters vor und verwendet den Gegenstand.
UO.UseItemOnMobile("0x40001234", "self");Parameter und Ablauf:
- ExecuteClientApiCompatibility ruft zuerst Bridge.WaitTargetObject(TargetSerial) auf, dann Bridge.UseObject(ItemSerial). Argumente werden nicht vertauscht. Diese direkten Bridge-Aufrufe aktualisieren die TicksTarget/TicksUse-Laufzeit nicht.
return RunScenario();
object? RunScenario()
{
var item = UO.GetSerial("lastobject");
var mobile = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(item)) && Truth(UO.Exists(mobile)))
{
UO.UseItemOnMobile(item, mobile);
}
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:
- Überprüft den Ziel-/Elementtyp nicht und wartet nicht auf den Cursor. Durch die Vorbereitung des Ziels vor der Verwendung wird verhindert, dass ein schnell eintreffendes Ziel verfehlt wird. Der Server bestimmt jedoch dennoch, ob die Aktion gültig ist.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var item = UO.GetSerial("lastobject");
if (Truth(UO.Exists(item)))
{
UO.UseItemOnMobile(item, "self");
UO.Print(UO.Waiting());
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: itemSerial (Any), targetSerial (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.WaitTargetObject:bridge.WaitTargetObject(Arg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(1). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseObject:bridge.UseObject(Arg(0)).
Interner Implementierungscode; kein eigenständiges Skript.
case "useitemonmobile": bridge.WaitTargetObject(Arg(1)); bridge.UseObject(Arg(0)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.UseObject(object? objID);Fordert die Verwendung eines Objekts durch serial an. Bridge-Aufrufe GameActions.DoubleClick; Der Artikel wird nicht nach type gesucht.
-
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.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- GetObject erlaubt Alias; unbekannter Name ergibt -1. Nach dem Aufruf aktualisiert die Laufzeit TicksUse mit dem Wert von UO.Timer; Dies ist der Zeitpunkt der Anfrage, nicht die Bestätigung des Servers.
- 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.UseObject");
UO.UseObject(UO.GetSerial("lasttarget"));Parameter und Ablauf:
- Fordert die Verwendung eines Objekts durch serial an. Bridge-Aufrufe GameActions.DoubleClick; Der Artikel wird nicht nach type gesucht.
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.UseObject(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:
- GetObject erlaubt Alias; unbekannter Name ergibt -1. Nach dem Aufruf aktualisiert die Laufzeit TicksUse mit dem Wert von UO.Timer; Dies ist der Zeitpunkt der Anfrage, nicht die Bestätigung des Servers.
return RunScenario();
object? RunScenario()
{
var id = UO.GetSerial("self");
if (Truth(UO.Exists(id)))
{
UO.UseObject(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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
ApplyToLoaded(UO.GetSerial("lasttarget"));
return null;
}
void ApplyToLoaded(dynamic id)
{
if (Truth(UO.Exists(id)))
{
UO.UseObject(id);
}
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: objID (Any/Integer/String)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseObject:bridge.UseObject(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Interner Implementierungscode; kein eigenständiges Skript.
case "useobject": bridge.UseObject(Arg(0)); return InjectionValue.Unit;Parameter: objID (Any/Integer/String)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.UseObject. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseObject:bridge.UseObject(id). -
InjectionScript.Runtime.InjectionApiUO.Timer:Timer().
Interner Implementierungscode; kein eigenständiges Skript.
public void UseObject(int id)
{
bridge.UseObject(id);
ticksUse = Timer();
}Parameter: objID (Any/Integer/String)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.UseObject. -
InjectionScript.Runtime.InjectionApiUO.UseObject:UseObject(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Interner Implementierungscode; kein eigenständiges Skript.
public void UseObject(string id) => UseObject(GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.UseType(object? @type);
int UO.UseType(object? @type, object? color);
int UO.UseType(object? @type, object? color, object? container);
int UO.UseType(object? @type, object? color, object? container, object? distance);
int UO.UseType(object? @type, object? color, object? container, object? distance, object? nearest);
int UO.UseType(object? @type, object? color, object? container, object? distance, object? nearest, object? maxZ);Findet ein Element des gewünschten graphic/type und wendet es an. Trinken Sie beispielsweise einen Trank aus einem Rucksack, öffnen Sie einen Rucksack in der Nähe oder verwenden Sie einen Gegenstand aus einem ausgewählten Behälter. Dieser Befehl sucht nicht nach dem Zeichen und verschiebt es auch nicht. Wenn für ein Element ein Umfang erforderlich ist, muss das Ziel separat vorbereitet werden.
-
type– Grafik des Artikels: Zahl oder Hexadezimalzeichenfolge; 0x0F0C ist beispielsweise eine Art Heiltrank, 0x0E75 ist ein Rucksack. Dies ist kein serial- oder body-Zeichen. Eine negative Zahl oder 0xFFFF ermöglicht jedes type; Für eine sinnvolle Aktion ist genaues graphic besser. -
color– Farbton des Elements, Standard – 1 (beliebig). Jede negative Zahl oder 0xFFFF entfernt den Filter; 0 wählt den unbemalten Gegenstand. Keine Bekanntheit und nicht die Farbe des Textes. -
container– Standard -1: Ihr Rucksack und geladene Untercontainer. „my“ bedeutet dasselbe. „backpack“ oder das explizite serial des Containers gibt die Wurzel der rekursiven Durchquerung an. ground/"ground"/UO.Ground(), numerische 0/1 bezeichnen nur Objekte der Welt. Self ist kein Synonym für backpack; Verwenden Sie einen speziellen Rucksack. Ein unbekannter/null-Objektalias kann als Rucksack aufgelöst werden: Überprüfen Sie zunächst den übertragenen Container mit Exists. -
distance– Maximaler geometrischer X/Y-Bereich, nicht Pfadlänge. Das Standard- oder negative Argument ist FindDistance. 0 bedeutet dieselbe Zelle. Bei Gegenständen in einem Container berücksichtigt der Auftraggeber die Entfernung zum Eigentümer. -
nearest– Standard true: Wählen Sie das nächstgelegene Objekt aus, wenn es gleich ist, das kleinere serial. false: Zuerst beim Durchlaufen ohne Sortieren gefunden. Nicht die Anzahl der Artikel oder der Laufmodus. -
maxZ– Maximaler absoluter Unterschied zwischen der Welthöhe Z und dem Zeichen. Das Standard- oder negative Argument ist FindVertical. 0 erfordert das gleiche Z. Für den Gegenstand im Beutel wird die Höhe des äußeren Behälters auf dem Boden oder der Charakter des Besitzers verwendet; Interne Gump-Koordinaten gelten nicht als Weltkoordinaten. Hierbei handelt es sich um einen Höhenfilter, nicht um eine Überprüfung der Gehbarkeit oder Sichtlinie.
int - serial des Artikels, für den UseObject aufgerufen wird; 0, wenn es keine Übereinstimmungen gibt. Sogar die Registrierung mit ReturnKind object? gibt tatsächlich eine Zahl zurück. Dabei handelt es sich nicht um true/false oder eine Nutzungsbestätigung durch den Server: Prüfen Sie used != 0 statt used == true. Damit der Effekt erfolgreich ist, ist eine separate Prüfung auf Status, Inhalt oder Protokoll erforderlich.
- Von 1 bis 6 Argumenten. Um den Bereich festzulegen, geben Sie auch Farbe und Behälter an. Um maxZ anzugeben, füllen Sie alle sechs Positionen aus. Array type, Maske über | und zusätzliche Ziele werden von diesem Befehl nicht akzeptiert.
- Reguläre Formen mit int/string und erweiterte Formen verwenden CompactUseType: nur Elemente, Ignore, Abstand und Höhe; Container werden rekursiv über bereits geladene Inhalte durchlaufen. Der Ladebehälter öffnet sich nicht automatisch. FindItem/FindCount/GetFoundItems werden von diesem Zweig nicht aktualisiert.
- Die Höhe gemeinsam genutzter Eigentümer und Container wird einmal pro Aufruf berechnet, um eine Wiederholung des Durchlaufs für jeden Stapel zu vermeiden. Eine kreisförmige oder zu tiefe Containerkette (128-Links ohne gefundene Wurzel) wird nicht als Höhenübereinstimmung verwendet.
- Behielt eine gemeinsame kompatible Registrierung von zwei object? bei: Es leitet einen Anruf an Bridge.UseType weiter, indem es FindType über den Rucksack verwendet, Find* aktualisiert und das erste Ergebnis auswählt. Für eine vorhersehbare kompakte Form verwenden Sie int/string anstelle impliziter Konvertierungen ungeeigneter Werttypen.
- UseObject sendet eine Zauberaktion, aber der Befehl wartet nicht auf Ziel, Heilung, Trinken, Öffnen eines Fensters oder Serverausfall. Der Suchbereich erweitert nicht den vom Server zugelassenen Nutzungsbereich.
- Wenn es keine Übereinstimmung gibt, druckt das kompakte Formular die Nachricht und gibt 0 zurück. Liegt kein Charakter/Verbindung vor, ist das Ergebnis nicht als Handlungserlaubnis zu werten. Für präzises ID verwenden Sie UO.UseObject.
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.UseType(0x0F0C);
UO.Print("UseType: " + Convert.ToString(result));Parameter und Ablauf:
- 0x0F0C ist ein Beispiel für einen Standard-Heiltrank. Der Server lehnt die Aktion möglicherweise aufgrund des Charakterzustands, der Latenz oder seiner eigenen Regeln ab. Farbe und Bereich werden nicht separat angegeben: Es gelten die Standardwerte.
if (!(Truth(UO.Connected())) || Truth(UO.Dead()))
{
return null;
}
var used = UO.UseType(0x0F0C);
if (Truth(used == 0))
{
UO.Print("No matching healing potion in the loaded backpack");
}
else
{
UO.Print("Potion use requested; check health and the game message");
}
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:
- 0x0E75 – type eines Rucksacks, -1 – beliebige hue, ground – Objekte der Welt. 2 – Zellen X/Y, true – am nächsten, 4 – Differenz Z. Rücksendetasche – ID. Der Zugriff auf Inhalte wird vom Server bestimmt; Das Team holt den Rucksack nicht ab.
return RunScenario();
object? RunScenario()
{
var bag = UO.UseType(0x0E75, -1, "ground", 2, true, 4);
if (Truth(bag != 0))
{
UO.AddObject("nearby_bag", bag);
}
else
{
UO.Print("No suitable ground backpack within the selected bounds");
}
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:
- itemType – graphic Dinge, Quelle – separater serial Container. Der Helfer gibt serial/0 zurück, genau wie UseType. Sogar ein gefundener Gegenstand kann vom Server daran gehindert werden, aus einem anderen oder einem entfernten Container verwendet zu werden.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var source = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(source == 0) || !(Truth(UO.Exists(source))))
{
return null;
}
UO.AddObject("supply", source);
var used = UseFromNamedSupply(0x0F0C);
if (Truth(used == 0))
{
UO.Print("Supply item was not found with these filters");
}
return null;
}
dynamic UseFromNamedSupply(dynamic itemType)
{
var source = Asc(UO.GetSerial("supply"), 0);
if (Truth(source == 0) || !(Truth(UO.Exists(source))))
{
return 0;
}
return UO.UseType(itemType, 0, source, 2, false, 16);
}
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;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: type (Integer/String)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.UseType. -
InjectionScript.Runtime.InjectionApiUO.UseType:UseType(type, -1).
Interner Implementierungscode; kein eigenständiges Skript.
public int UseType(int type) => UseType(type, -1);Parameter: type (Integer/String)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.UseType. -
InjectionScript.Runtime.InjectionApiUO.UseType:UseType(ResolveType(type)). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(type).
Interner Implementierungscode; kein eigenständiges Skript.
public int UseType(string type) => UseType(ResolveType(type));Parameter: type (Any/Integer/String), color (Any/Integer/String)
Ergebnis: int / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseType:bridge.UseType(ResolveType(arguments[0]), arguments.Length > 1 ? Arg(1) : -1). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(1).
Interner Implementierungscode; kein eigenständiges Skript.
case "usetype": return new InjectionValue(bridge.UseType(ResolveType(arguments[0]), arguments.Length > 1 ? Arg(1) : -1));Parameter: type (Any/Integer/String), color (Any/Integer/String)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.UseType. -
InjectionScript.Runtime.InjectionApiUO.CompactUseType:CompactUseType(new[] { new InjectionValue(type), new InjectionValue(color) }).
Interner Implementierungscode; kein eigenständiges Skript.
public int UseType(int type, int color) => CompactUseType(new[]
{
new InjectionValue(type),
new InjectionValue(color)
});Parameter: type (Any/Integer/String), color (Any/Integer/String)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.UseType. -
InjectionScript.Runtime.InjectionApiUO.UseType:UseType(type, NumberConversions.ToInt(color)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(color).
Interner Implementierungscode; kein eigenständiges Skript.
public int UseType(int type, string color) => UseType(type, NumberConversions.ToInt(color));Parameter: type (Any/Integer/String), color (Any/Integer/String)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.UseType. -
InjectionScript.Runtime.InjectionApiUO.UseType:UseType(ResolveType(type), color). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(type).
Interner Implementierungscode; kein eigenständiges Skript.
public int UseType(string type, int color) => UseType(ResolveType(type), color);Parameter: type (Any/Integer/String), color (Any/Integer/String)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.UseType. -
InjectionScript.Runtime.InjectionApiUO.UseType:UseType(ResolveType(type), NumberConversions.ToInt(color)). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(type). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(color).
Interner Implementierungscode; kein eigenständiges Skript.
public int UseType(string type, string color) => UseType(ResolveType(type), NumberConversions.ToInt(color));Parameter: type (Any), color (Any), container (Any)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.Register [UseType]. -
InjectionScript.Runtime.InjectionApiUO.CompactUseType:CompactUseType(values).
Der Aufruf führt den gespeicherten Handler-Delegate aus. Die Registrierungsmethode erzeugt ihn beim Aufbau der API.
Interner Implementierungscode; kein eigenständiges Skript.
values => new InjectionValue(CompactUseType(values))Parameter: type (Any), color (Any), container (Any), distance (Any)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.Register [UseType]. -
InjectionScript.Runtime.InjectionApiUO.CompactUseType:CompactUseType(values).
Der Aufruf führt den gespeicherten Handler-Delegate aus. Die Registrierungsmethode erzeugt ihn beim Aufbau der API.
Interner Implementierungscode; kein eigenständiges Skript.
values => new InjectionValue(CompactUseType(values))Parameter: type (Any), color (Any), container (Any), distance (Any), nearest (Any)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.Register [UseType]. -
InjectionScript.Runtime.InjectionApiUO.CompactUseType:CompactUseType(values).
Der Aufruf führt den gespeicherten Handler-Delegate aus. Die Registrierungsmethode erzeugt ihn beim Aufbau der API.
Interner Implementierungscode; kein eigenständiges Skript.
values => new InjectionValue(CompactUseType(values))Parameter: type (Any), color (Any), container (Any), distance (Any), nearest (Any), maxZ (Any)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.Register [UseType]. -
InjectionScript.Runtime.InjectionApiUO.CompactUseType:CompactUseType(values).
Der Aufruf führt den gespeicherten Handler-Delegate aus. Die Registrierungsmethode erzeugt ihn beim Aufbau der API.
Interner Implementierungscode; kein eigenständiges Skript.
values => new InjectionValue(CompactUseType(values))Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.UseWorldObject(object? serialOrName);Aktiviert serialOrName bis GetObject und ruft UseObject auf. Der Stringname ist ein Objektalias, nicht der Name graphic/type.
-
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.
- In den Metadaten direkt bei UserObject registriert. Dies ist eine normale Verwendung von serial, keine serverweite Suche.
- 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.UseWorldObject");
UO.UseWorldObject(UO.GetSerial("lasttarget"));Parameter und Ablauf:
- Aktiviert serialOrName bis GetObject und ruft UseObject auf. Der Stringname ist ein Objektalias, nicht der Name graphic/type.
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.UseWorldObject(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:
- In den Metadaten direkt bei UserObject registriert. Dies ist eine normale Verwendung von serial, keine serverweite Suche.
return RunScenario();
object? RunScenario()
{
var id = UO.GetSerial("self");
if (Truth(UO.Exists(id)))
{
UO.UseWorldObject(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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
ApplyToLoaded(UO.GetSerial("lasttarget"));
return null;
}
void ApplyToLoaded(dynamic id)
{
if (Truth(UO.Exists(id)))
{
UO.UseWorldObject(id);
}
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: serialOrName (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.UserObject. -
InjectionScript.Runtime.InjectionApiUO.UseObject:UseObject(GetObject(serialOrName)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(serialOrName).
Interner Implementierungscode; kein eigenständiges Skript.
public void UserObject(InjectionValue serialOrName)
=> UseObject(GetObject(serialOrName));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.UserObject(object? serialOrName);Aktiviert serialOrName bis GetObject und ruft UseObject auf. Der Stringname ist ein Objektalias, nicht der Name graphic/type.
-
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.
- Gleicher Nutzungspfad wie UO.UseWorldObject. Der Befehl erstellt kein benutzerdefiniertes Objekt und fügt den Namen AddObject nicht hinzu.
- 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.UserObject");
UO.UserObject(UO.GetSerial("lasttarget"));Parameter und Ablauf:
- Aktiviert serialOrName bis GetObject und ruft UseObject auf. Der Stringname ist ein Objektalias, nicht der Name graphic/type.
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.UserObject(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:
- Gleicher Nutzungspfad wie UO.UseWorldObject. Der Befehl erstellt kein benutzerdefiniertes Objekt und fügt den Namen AddObject nicht hinzu.
return RunScenario();
object? RunScenario()
{
var id = UO.GetSerial("self");
if (Truth(UO.Exists(id)))
{
UO.UserObject(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 new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
ApplyToLoaded(UO.GetSerial("lasttarget"));
return null;
}
void ApplyToLoaded(dynamic id)
{
if (Truth(UO.Exists(id)))
{
UO.UserObject(id);
}
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: serialOrName (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.UserObject. -
InjectionScript.Runtime.InjectionApiUO.UseObject:UseObject(GetObject(serialOrName)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(serialOrName).
Interner Implementierungscode; kein eigenständiges Skript.
public void UserObject(InjectionValue serialOrName)
=> UseObject(GetObject(serialOrName));