DE UO Topic world geometry 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.GetZ();
int UO.GetZ(object? id);Liest das Z-Feld des geladenen Objekts oder des aktuellen Zeichens.
-
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.
int ist die Höhe von Z. Für ein unbekanntes Objekt wird 0 zurückgegeben. Null ist auch eine gültige Koordinate. Die Höhe kann negativ sein; Dies ist keine Ausrüstungsschicht oder ein statischer Index.
- 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.
- Für eine Figur oder ein Objekt auf dem Boden ist dies die Weltkoordinate. Der Gegenstand im Behälter hat eine X/Y-Position innerhalb des Gummis; Der Befehl übersetzt sie nicht in die Weltkoordinaten des Besitzers.
- Die aktuelle Koordinate des Objekts wird gelesen. Ausstehende Schritte werden durch diesen Befehl nicht in Routenberechnungen umgewandelt.
int z = UO.GetZ();
UO.Print($"Z = {z}");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.GetZ();
UO.Print("GetZ: " + Convert.ToString(result));Parameter und Ablauf:
- Das Formular ohne Argument wählt self, das aktuelle Zeichen.
- Position enthält die Höhe von Z, nicht serial.
var position = UO.GetZ();
UO.Print("Z: " + Convert.ToString(position));Parameter und Ablauf:
- lasttarget sollte auf den geladenen Charakter oder Gegenstand auf dem Boden zeigen.
- Delta – Differenz entlang einer Achse. Es kommt nicht auf die Länge der Strecke an; Der Wert kann negativ sein.
return RunScenario();
object? RunScenario()
{
var other = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(other)))
{
var delta = UO.GetZ(other) - UO.GetZ();
UO.Print("Difference: " + Convert.ToString(delta));
}
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="self" ist eine explizite Form der Zeichenauswahl. UO.Wait=500 Millisekunden.
- Der Vergleich zeigt nur die Änderung in der Z-Achse. Änderungen in der anderen Achse oder Drehung werden hier nicht berücksichtigt.
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.GetZ("self");
await Delay(500);
var after = UO.GetZ("self");
if (Truth(before != after))
{
UO.Print("Coordinate changed");
}
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.GetZ. -
InjectionScript.Runtime.InjectionApiUO.GetZ:GetZ("self").
Interner Implementierungscode; kein eigenständiges Skript.
public int GetZ() => GetZ("self");Parameter: id (Any/Integer/String)
Ergebnis: int / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetZ:bridge.GetZ(Arg(0, bridge.Self)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0, bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Interner Implementierungscode; kein eigenständiges Skript.
case "getz": return new InjectionValue(bridge.GetZ(Arg(0, bridge.Self)));Parameter: id (Any/Integer/String)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.GetZ. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetZ:bridge.GetZ(id).
Interner Implementierungscode; kein eigenständiges Skript.
public int GetZ(int id) => bridge.GetZ(id);Parameter: id (Any/Integer/String)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.GetZ. -
InjectionScript.Runtime.InjectionApiUO.GetZ:GetZ(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Interner Implementierungscode; kein eigenständiges Skript.
public int GetZ(string id) => GetZ(GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsMineTile(object? x, object? y);Überprüft die Eigenschaften einer Zelle anhand lokaler Kartendaten.
-
x— int X Zellen der aktuellen Karte; Weltkoordinate, kein Bildschirmpixel. -
y— int Y Zellen der aktuellen Karte; Weltkoordinate, kein Bildschirmpixel.
Numerisches Flag int: 1 – ein der Bedingung entsprechendes Objekt wurde gefunden; 0 - Es gibt kein solches Objekt oder die Zelle/Karte ist nicht zugänglich.
- AnyTileAt umgeht die TNext-Kette der geladenen Zelle. Bedingung IsMineTile: Statisch/Multi mit StaticFilters.IsRock oder einem Namen, der Höhle, Berg oder Felsen enthält, Groß- und Kleinschreibung wird nicht berücksichtigt.
- Die Prüfung beschreibt lokale Kacheldaten/Filter. Es verspricht nicht die Verfügbarkeit einer abgebauten Ressource, Geländegängigkeit, Reichweite oder Servererlaubnis für den Abbau.
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.IsMineTile(UO.GetX(), UO.GetY());
UO.Print("IsMineTile: " + Convert.ToString(result));Parameter und Ablauf:
- Überprüft die Eigenschaften einer Zelle anhand lokaler Kartendaten.
UO.Print(UO.IsMineTile(UO.GetX(), UO.GetY()));Parameter und Ablauf:
- AnyTileAt umgeht die TNext-Kette der geladenen Zelle. Bedingung IsMineTile: Statisch/Multi mit StaticFilters.IsRock oder einem Namen, der Höhle, Berg oder Felsen enthält, Groß- und Kleinschreibung wird nicht berücksichtigt.
return RunScenario();
object? RunScenario()
{
var x = UO.GetX() + 1;
var y = UO.GetY();
if (Truth(UO.IsMineTile(x, y)))
{
UO.Print("Local tile predicate matched");
}
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 beschreibt lokale Kacheldaten/Filter. Es verspricht nicht die Verfügbarkeit einer abgebauten Ressource, Geländegängigkeit, Reichweite oder Servererlaubnis für den Abbau.
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 x = UO.GetX();
var y = UO.GetY();
var before = UO.IsMineTile(x, y);
UO.Wait(500);
UO.Print(before = UO.IsMineTile(x, y));
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: x (Any), y (Any)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.IsMineTile. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsMineTile:bridge.IsMineTile(NumberConversions.ToInt(x), NumberConversions.ToInt(y)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(x).
Interner Implementierungscode; kein eigenständiges Skript.
public int IsMineTile(InjectionValue x, InjectionValue y) => bridge.IsMineTile(NumberConversions.ToInt(x), NumberConversions.ToInt(y));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsTreeTile(object? x, object? y);Überprüft die Eigenschaften einer Zelle anhand lokaler Kartendaten.
-
x— int X Zellen der aktuellen Karte; Weltkoordinate, kein Bildschirmpixel. -
y— int Y Zellen der aktuellen Karte; Weltkoordinate, kein Bildschirmpixel.
Numerisches Flag int: 1 – ein der Bedingung entsprechendes Objekt wurde gefunden; 0 - Es gibt kein solches Objekt oder die Zelle/Karte ist nicht zugänglich.
- AnyTileAt umgeht die TNext-Kette der geladenen Zelle. Bedingung IsTreeTile: Statisch/Multi erkannt durch StaticFilters.IsTree.
- Die Prüfung beschreibt lokale Kacheldaten/Filter. Es verspricht nicht die Verfügbarkeit einer abgebauten Ressource, Geländegängigkeit, Reichweite oder Servererlaubnis für den Abbau.
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.IsTreeTile(UO.GetX(), UO.GetY());
UO.Print("IsTreeTile: " + Convert.ToString(result));Parameter und Ablauf:
- Überprüft die Eigenschaften einer Zelle anhand lokaler Kartendaten.
UO.Print(UO.IsTreeTile(UO.GetX(), UO.GetY()));Parameter und Ablauf:
- AnyTileAt umgeht die TNext-Kette der geladenen Zelle. Bedingung IsTreeTile: Statisch/Multi erkannt durch StaticFilters.IsTree.
return RunScenario();
object? RunScenario()
{
var x = UO.GetX() + 1;
var y = UO.GetY();
if (Truth(UO.IsTreeTile(x, y)))
{
UO.Print("Local tile predicate matched");
}
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 beschreibt lokale Kacheldaten/Filter. Es verspricht nicht die Verfügbarkeit einer abgebauten Ressource, Geländegängigkeit, Reichweite oder Servererlaubnis für den Abbau.
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 x = UO.GetX();
var y = UO.GetY();
var before = UO.IsTreeTile(x, y);
UO.Wait(500);
UO.Print(before = UO.IsTreeTile(x, y));
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: x (Any), y (Any)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.IsTreeTile. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsTreeTile:bridge.IsTreeTile(NumberConversions.ToInt(x), NumberConversions.ToInt(y)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(x).
Interner Implementierungscode; kein eigenständiges Skript.
public int IsTreeTile(InjectionValue x, InjectionValue y) => bridge.IsTreeTile(NumberConversions.ToInt(x), NumberConversions.ToInt(y));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsWaterTile(object? x, object? y);Überprüft die Eigenschaften einer Zelle anhand lokaler Kartendaten.
-
x— int X Zellen der aktuellen Karte; Weltkoordinate, kein Bildschirmpixel. -
y— int Y Zellen der aktuellen Karte; Weltkoordinate, kein Bildschirmpixel.
Numerisches Flag int: 1 – ein der Bedingung entsprechendes Objekt wurde gefunden; 0 - Es gibt kein solches Objekt oder die Zelle/Karte ist nicht zugänglich.
- AnyTileAt umgeht die TNext-Kette der geladenen Zelle. Bedingung IsWaterTile: Landen Sie mit TileData.IsWet oder einem Objekt mit gültiger Statik graphic und Flagge IsWet.
- Die Prüfung beschreibt lokale Kacheldaten/Filter. Es verspricht nicht die Verfügbarkeit einer abgebauten Ressource, Geländegängigkeit, Reichweite oder Servererlaubnis für den Abbau.
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.IsWaterTile(UO.GetX(), UO.GetY());
UO.Print("IsWaterTile: " + Convert.ToString(result));Parameter und Ablauf:
- Überprüft die Eigenschaften einer Zelle anhand lokaler Kartendaten.
UO.Print(UO.IsWaterTile(UO.GetX(), UO.GetY()));Parameter und Ablauf:
- AnyTileAt umgeht die TNext-Kette der geladenen Zelle. Bedingung IsWaterTile: Landen Sie mit TileData.IsWet oder einem Objekt mit gültiger Statik graphic und Flagge IsWet.
return RunScenario();
object? RunScenario()
{
var x = UO.GetX() + 1;
var y = UO.GetY();
if (Truth(UO.IsWaterTile(x, y)))
{
UO.Print("Local tile predicate matched");
}
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 beschreibt lokale Kacheldaten/Filter. Es verspricht nicht die Verfügbarkeit einer abgebauten Ressource, Geländegängigkeit, Reichweite oder Servererlaubnis für den Abbau.
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 x = UO.GetX();
var y = UO.GetY();
var before = UO.IsWaterTile(x, y);
UO.Wait(500);
UO.Print(before = UO.IsWaterTile(x, y));
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: x (Any), y (Any)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.IsWaterTile. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsWaterTile:bridge.IsWaterTile(NumberConversions.ToInt(x), NumberConversions.ToInt(y)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(x).
Interner Implementierungscode; kein eigenständiges Skript.
public int IsWaterTile(InjectionValue x, InjectionValue y) => bridge.IsWaterTile(NumberConversions.ToInt(x), NumberConversions.ToInt(y));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.IsWorldCellPassable(object? currX, object? currY, object? currZ, object? destX, object? destY, object? destZ, object? worldNum);Überprüft einen Übergang zu einer angrenzenden Weltzelle und gibt die passable Flagge zusammen mit der Höhe zurück.
-
currX– Obligatorische Welt-X-Koordinate der Quellzelle. Ganzzahl 0..65535 innerhalb der geladenen Karte; Dies ist keine Gump-Koordinate. -
currY– Obligatorische Welt-Y-Koordinate der Quellzelle. Ganzzahl 0..65535 innerhalb der geladenen Karte; Dies ist keine Gump-Koordinate. -
currZ– Obligatorische Anfangshöhe −128..127. Dies ist die Höhe der Welt, nicht die Stockwerksnummer. Ungültige Höhe wird abgelehnt und nicht gekürzt. -
destX– Obligatorische Welt-X-Koordinate der Zielzelle. Ganzzahl 0..65535 innerhalb der geladenen Karte; Dies ist keine Gump-Koordinate. -
destY– Obligatorische Welt-Y-Koordinate der Zielzelle. Ganzzahl 0..65535 innerhalb der geladenen Karte; Dies ist keine Gump-Koordinate. -
destZ– Erforderlicher Eingangsspeicher Z, normalerweise CurrZ. Dies ist nicht var: Die Variable ändert sich nicht und legt nicht die erforderliche Untergrenze fest. Lesen Sie die berechnete Höhe aus dem Ergebnis ab [1]. Diese Brücke gibt immer ihre Höhe zurück; Das Argument wird für die Kompatibilität mit der Pascal-Form benötigt. -
worldNum– Obligatorische Kartennummer: UO.WorldNum(). Es wird nur die aktuelle Karte mit bekannten Abmessungen überprüft; Die andere Karte wird nicht geladen.
Array aus zwei int: [0] – Passierbarkeit, 1 (Bedingung erfüllt), 0 (Bedingung nicht erfüllt); [1] – berechnet Z. Nur das erste Element ist logisch. Das Array selbst kann nicht mit true verglichen werden. Höhe 0/negativ ist akzeptabel; für [0]=0 ist die Höhe kein Beweis für die Erreichbarkeit. Das Ablehnen von Argumenten gibt [0, CurrZ] zurück.
- Keine Bewegung, keine Türöffnung, kein Fadenkreuz oder keine Netzwerkpakete. Die vorhandene lokale Geometrie wird gelesen; Der Server kann den Schritt später ablehnen. Bei zwei Anfragen können unterschiedliche Zustände angezeigt werden.
- Die angrenzende Zelle wird akzeptiert (der X/Y-Unterschied beträgt nicht mehr als 1). Ein weiter entferntes Ziel, das über die Karte hinausgeht, das Fehlen eines Charakters/einer Karte und IsDestroyed führen zu einer Ablehnung vor der Berechnung. Für eine vollständige Route verwenden Sie GetPathArray oder NewMoveXY.
- Das gleiche gültige X/Y ergibt [1, CurrZ] ohne Kollisionsprüfung: kein Schritt erforderlich. Dies ist kein Test der Fähigkeit, aus dem Käfig zu entkommen. Der Zustand des Charakters und die aktuellen Pathfinder-Regeln wirken sich auf den nächsten Schritt aus; Ohne geladene Geometrie kann es abgelehnt werden.
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.IsWorldCellPassable(UO.GetX(), UO.GetY(), UO.GetZ(), UO.GetX() + 1, UO.GetY(), UO.GetZ(), UO.WorldNum());
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- x/y/z ist die Startposition, x+1/y ist die angrenzende Zelle, der sechste Parameter z ist das Ersatz-Z, der letzte ist die aktuelle Karte. result[0] wird vor der Verwendung von result[1] überprüft.
var x = UO.GetX();
var y = UO.GetY();
var z = UO.GetZ();
var result = UO.IsWorldCellPassable(x,y,z,x+1,y,z,UO.WorldNum());
if (Truth(Truth(result[0]) == true))
{
UO.Print("Passable, Z=" + Convert.ToString(result[1]));
}
else
{
UO.Print("Blocked");
}
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:
- proposedZ bleibt nach dem Aufruf 0. targetZ wird aus result[1] entnommen, nicht aus dem Argument. Im Fehlerfall werden aus dem Beispiel keine Rückschlüsse auf die Höhe gezogen.
return RunScenario();
object? RunScenario()
{
var x = UO.GetX();
var y = UO.GetY();
var z = UO.GetZ();
var proposedZ = 0;
var result = UO.IsWorldCellPassable(x, y, z, x, y + 1, proposedZ, UO.WorldNum());
if (Truth(result[0] == 1))
{
var targetZ = result[1];
UO.Print("Input=" + Convert.ToString(proposedZ) + "; result=" + Convert.ToString(targetZ));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Der vollständige Helfer unter Main akzeptiert Quelle X/Y/Z, Ziel X/Y und Karte. Es fügt das erforderliche sechste Argument hinzu und gibt nur int 1/0 zurück, kein Array. Daher kann das Ergebnis von IsCellOpen mit true verglichen werden. Der Code verschiebt das Zeichen nicht.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var x = UO.GetX();
var y = UO.GetY();
var openCell = IsCellOpen(x, y, UO.GetZ(), x + 1, y + 1, UO.WorldNum());
if (Truth(Truth(openCell) == true))
{
UO.Print("Diagonal cell is locally passable");
}
return null;
}
dynamic IsCellOpen(dynamic x, dynamic y, dynamic z, dynamic toX, dynamic toY, dynamic map)
{
var cellResult = UO.IsWorldCellPassable(x, y, z, toX, toY, z, map);
if (Truth(ArrayLength(cellResult) != 2))
{
return 0;
}
return cellResult[0];
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
UO.IsWorldCellPassable(currX, currY, currZ, destX, destY, destZ, worldNum) — UO.IsWorldCellPassable(Any,Any,Any,Any,Any,Any,Any)
Parameter: currX (Any), currY (Any), currZ (Any), destX (Any), destY (Any), destZ (Any), worldNum (Any)
Ergebnis: dynamic / Array.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(5). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CheckWorldStep:bridge.CheckWorldStep(Arg(0), Arg(1), Arg(2), Arg(3), Arg(4), Arg(6)).
Interner Implementierungscode; kein eigenständiges Skript.
case "isworldcellpassable":
{
int destinationZFallback = Arg(5);
int[] step = bridge.CheckWorldStep(Arg(0), Arg(1), Arg(2), Arg(3), Arg(4), Arg(6));
int passable = step.Length > 0 ? step[0] : 0;
int destinationZ = step.Length > 1 ? step[1] : destinationZFallback;
return new InjectionValue(new[] { new InjectionValue(passable), new InjectionValue(destinationZ) });
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LOSOptions();
dynamic UO.LOSOptions(object? value);Liest oder speichert die lokale Parametermaske LOS Laufzeit.
-
value– Optional int; Kein Argument, schreibgeschützt. In diesem Thread werden der Bereich und einzelne Bits nicht überprüft. Der Moll byte (Wert & 0xFF) wählt den Algorithmus 1..4; andere Werte des Moll-byte in CheckLosCell verwenden den 3-Algorithmus. Die Algorithmen 1/2 blockieren Wände und unpassierbar, 3 blockieren zusätzlich NoShoot und 4 aktivieren NoShoot nur mit 0x200 und erlauben Fensterhindernisse nur mit 0x400. Bit 0x100 überprüft zusätzlich beide Seitenzellen jedes diagonalen Strahlschritts für jeden ausgewählten Algorithmus. value=0 deaktiviert die zusätzlichen CheckLosCell/Diagonalprüfungen, BadLocations und CheckWorldStep bleiben jedoch bestehen. Zum Beispiel wählt 4+0x100+0x200+0x400 Benutzerdefiniert mit drei Flags aus; Setter behält den ursprünglichen int bei, nicht den normalisierten Algorithmus.
int - Zustand.LosOptions nach möglicher Aufnahme. Dies ist ein Parametercode/eine Parametermaske, nicht bool und nicht das Ergebnis einer Sichtbarkeitsprüfung.
- ExecuteClientApiCompatibility weist den Status zu. LosOptions hat ein Argument angegeben und gibt dasselbe Feld zurück. Der Aufruf führt CheckLOS nicht aus und prüft keine Wände.
- Die Einstellung gehört zur Laufzeit. Es garantiert keine Serversichtbarkeit und ist keine Möglichkeit, durch Hindernisse zu navigieren.
- In einem regulären Client-Host werden diese Statusdaten vom GetPersistentState-Manager übernommen und gelten für Skripte/Chat/Makros derselben Welt/dieselben Profils und gehören nicht zu einem einzigen Skript. Ein anderer Prozess oder ein scheinbar separater InjectionRuntimeState hat einen anderen Zustand. Das Laden/Löschen eines Profils kann es ersetzen; Die gespeicherten serial werden weiterhin mit der geladenen Welt verglichen.
- Minor byte (Wert & 0xFF) wählt Algorithmus 1..4; andere Werte des Moll-byte in CheckLosCell verwenden den 3-Algorithmus. Die Algorithmen 1/2 blockieren Mauer und unpassierbar, 3 zusätzlich NoShoot und 4 aktiviert NoShoot nur mit 0x200 und erlaubt Fensterhindernisse nur mit 0x400. Bit 0x100 überprüft zusätzlich beide Seitenzellen jedes diagonalen Strahlschritts für jeden ausgewählten Algorithmus. value=0 deaktiviert die zusätzlichen CheckLosCell/Diagonalprüfungen, BadLocations und CheckWorldStep bleiben jedoch bestehen. Zum Beispiel wählt 4+0x100+0x200+0x400 Benutzerdefiniert mit drei Flags aus; Setter behält den ursprünglichen int bei, nicht den normalisierten Algorithmus.
- Ein Balken mit einer Länge ungleich Null liest nur die aktuell geladene _world.Map/World.Map: via CheckWorldStep benötigt WorldNum == _world.MapIndex und Live Player.Pathfinder. Eine andere Facette ist nicht geladen oder angefordert; Es gibt keine Karte/Charakter/Pfadfinder oder der Schritt ist nicht verfügbar - 0. Durch das Ausschließen von identischem X/Y wird der gesamte Zellzyklus übersprungen: mit X/Y in 0..65535, WorldNum V 0..255 und abs(Zvon-Zto)<=20 kehrt zurück 1 auch ohne geladene Karte oder mit einer anderen Kartennummer. Dies ist kein Beweis für die Geometrie oder Erreichbarkeit. Das Ergebnis ist lokal, keine Lösung LOS Server.
- CheckLosCell umgeht das geladene Land/Static/Multi/Item einer Zelle. Unpassierbare Landblöcke mit abs(rayZ-land.Z)<=20. Die Static/Multi/Item-Flags sind nur im Bereich Tile.Z-2 . gültig. Tile.Z+max(1,Height)+2; Das zulässige benutzerdefinierte Fenster wird übersprungen, bis „Wand/Unpassierbar/NoShoot“ aktiviert ist. X/Y-Strahl verwendet Bresenham, maximale 4096 Schritte; Z wird von Flächen CheckWorldStep genommen, nicht auf Zto interpoliert, die endgültige Höhentoleranz beträgt 20.
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.LOSOptions();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- Liest oder speichert die lokale Parametermaske LOS Laufzeit.
UO.Print(UO.LOSOptions());Parameter und Ablauf:
- ExecuteClientApiCompatibility weist den Status zu. LosOptions hat ein Argument angegeben und gibt dasselbe Feld zurück. Der Aufruf führt CheckLOS nicht aus und prüft keine Wände.
return RunScenario();
object? RunScenario()
{
var before = UO.LOSOptions();
UO.Print(UO.LOSOptions(0));
UO.LOSOptions(before);
return null;
}Parameter und Ablauf:
- Die Einstellung gehört zur Laufzeit. Es garantiert keine Serversichtbarkeit und ist keine Möglichkeit, durch Hindernisse zu navigieren.
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 original = UO.LOSOptions();
UO.LOSOptions(original);
UO.Print(Convert.ToString(UO.LOSOptions() == original));
return null;
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Interner Implementierungscode; kein eigenständiges Skript.
case "losoptions": if (arguments.Length > 0) state.LosOptions = Arg(0); return new InjectionValue(state.LosOptions);Parameter: value (Any)
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Interner Implementierungscode; kein eigenständiges Skript.
case "losoptions": if (arguments.Length > 0) state.LosOptions = Arg(0); return new InjectionValue(state.LosOptions);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.PrivateGetTile(object? x, object? y, object? unknown, object? minTile, object? maxTile);Sucht nach dem ersten graphic im angegebenen Bereich in der lokalen Zelle.
-
x— int Weltkoordinaten der aktuellen Karte. -
y— int Weltkoordinaten der aktuellen Karte. -
unknown– Der Legacy-Parameter int bleibt in der Syntax erhalten, wird aber von der Bridge nicht verwendet. -
minTile- int inklusive Grenzen graphic. Die Reihenfolge ändert sich nicht automatisch; minTile>maxTile stimmt nicht überein. -
maxTile- int inklusive Grenzen graphic. Die Reihenfolge ändert sich nicht automatisch; minTile>maxTile stimmt nicht überein.
string „0xXXXX“ des ersten passenden graphic; „0x0000“ – kein Treffer oder Karte nicht geladen. Auch das reale graphic=0 hat diese Darstellung.
- PrivateGetTile durchläuft die TNext-Kette aller Zellobjekte in Kartenreihenfolge und vergleicht graphic>=minTile && graphic<=maxTile. Nur „Statisch“ filtert nicht und berücksichtigt nicht hue/Höhe.
- Keine Pathfinder-/Server-Anfrage. Für präzise strukturierte Geometrie verwenden Sie GetWorldCell/ReadStaticsXY. Der Wächter einer fehlenden Karte gibt den vorherigen No-Match-Wächter 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.PrivateGetTile(UO.GetX(), UO.GetY(), 0, 0, 65535);
UO.Print("PrivateGetTile: " + Convert.ToString(result));Parameter und Ablauf:
- Sucht nach dem ersten graphic im angegebenen Bereich in der lokalen Zelle.
UO.Print(UO.PrivateGetTile(UO.GetX(), UO.GetY(), 0, 0, 65535));Parameter und Ablauf:
- PrivateGetTile durchläuft die TNext-Kette aller Zellobjekte in Kartenreihenfolge und vergleicht graphic>=minTile && graphic<=maxTile. Nur „Statisch“ filtert nicht und berücksichtigt nicht hue/Höhe.
return RunScenario();
object? RunScenario()
{
UO.Print(UO.PrivateGetTile(UO.GetX(), UO.GetY(), 0, 0x0E21, 0x0E21));
return null;
}Parameter und Ablauf:
- Keine Pathfinder-/Server-Anfrage. Für präzise strukturierte Geometrie verwenden Sie GetWorldCell/ReadStaticsXY. Der Wächter einer fehlenden Karte gibt den vorherigen No-Match-Wächter zurück.
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 tile = UO.PrivateGetTile(UO.GetX(), UO.GetY(), 0, 0, 65535);
if (Truth(tile != "0x0000"))
{
UO.Print(tile);
}
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.
UO.PrivateGetTile(x, y, unknown, minTile, maxTile) — UO.PrivateGetTile(Integer,Integer,Integer,Integer,Integer)
Parameter: x (Integer), y (Integer), unknown (Integer), minTile (Integer), maxTile (Integer)
Ergebnis: string / String.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.PrivateGetTile. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.PrivateGetTile:bridge.PrivateGetTile(x, y, unknown, minTile, maxTile).
Interner Implementierungscode; kein eigenständiges Skript.
public string PrivateGetTile(int x, int y, int unknown, int minTile, int maxTile)
=> bridge.PrivateGetTile(x, y, unknown, minTile, maxTile);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.ReadStaticsXY(object? x, object? y, object? worldNum);Liest flache statische Datensätze der aktuellen Karte in der Zelle.
-
x— int Weltkoordinaten der Zelle. -
y— int Weltkoordinaten der Zelle. -
worldNum— int-Nummer der aktuellen Karte. Eine andere Karte wird nicht geladen und gibt ein leeres Array aus.
Array int, Tripel [graphic, Z, hue, graphic, Z, hue, ...]. Keine Zuordnung/Nichtübereinstimmung WorldNum ist ein leeres Array.
- Bridge.GetStaticTiles umfasst Static, Multi und Item aus der TNext-Kette der Zelle; Land ist ausgeschlossen. Dies ist kein Pascal-Datensatz oder ein Array aus verschachtelten Datensätzen mit drei Elementen.
- Anzahl der Datensätze = ArrayLength(Ergebnis)/3. Es werden nur heruntergeladene Daten gelesen; Es gibt keine Anfragen für unbekannte Geometrie an 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.ReadStaticsXY(UO.GetX(), UO.GetY(), UO.WorldNum());
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- Liest flache statische Datensätze der aktuellen Karte in der Zelle.
var records = UO.ReadStaticsXY(UO.GetX(), UO.GetY(), UO.WorldNum());
UO.Print(UO.GetArrayLength(records) / 3);Parameter und Ablauf:
- Bridge.GetStaticTiles umfasst Static, Multi und Item aus der TNext-Kette der Zelle; Land ist ausgeschlossen. Dies ist kein Pascal-Datensatz oder ein Array aus verschachtelten Datensätzen mit drei Elementen.
return RunScenario();
object? RunScenario()
{
var records = UO.ReadStaticsXY(UO.GetX(), UO.GetY(), UO.WorldNum());
if (Truth(UO.GetArrayLength(records) >= 3))
{
UO.Print(records[0]);
UO.Print(records[1]);
UO.Print(records[2]);
}
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:
- Anzahl der Datensätze = ArrayLength(Ergebnis)/3. Es werden nur heruntergeladene Daten gelesen; Es gibt keine Anfragen für unbekannte Geometrie an den Server.
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 map = UO.WorldNum();
var records = UO.ReadStaticsXY(UO.GetX(), UO.GetY(), map);
var i = 0;
while (Truth(i + 2 < UO.GetArrayLength(records)))
{
UO.Print(Convert.ToString(records[i]) + " " + Convert.ToString(records[i + 1]) + " " + Convert.ToString(records[i + 2]));
i = i + 3;
}
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: x (Any), y (Any), worldNum (Any)
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetStaticTiles:bridge.GetStaticTiles(Arg(0), Arg(1), Arg(2)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Interner Implementierungscode; kein eigenständiges Skript.
case "readstaticsxy":
return new InjectionValue(bridge.GetStaticTiles(Arg(0), Arg(1), Arg(2)).Select(value => new InjectionValue(value)).ToArray());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.RemoveUserStatic(object? id);Löscht den statischen Benutzerdatensatz unter ID.
-
id- int ID, zurückgegeben AddUserStatic; nicht graphic/type.
Numerisches Flag int: 1 – der Datensatz wurde gelöscht, 0 – ID fehlte.
- Erster Zustand.UserStatics.Remove; Nur wenn der Löschvorgang erfolgreich ist, wird bridge.RemoveUserStatic(id) aufgerufen. Das Löschen gilt nicht für standardmäßige statische Kartendateien.
- Die lokale benutzerdefinierte Geometrie wird aus dem aktuellen Status entfernt. Serverelemente und andere ID-Elemente ändern sich nicht.
- In einem regulären Client-Host werden diese Statusdaten vom GetPersistentState-Manager übernommen und gelten für Skripte/Chat/Makros derselben Welt/dieselben Profils und gehören nicht zu einem einzigen Skript. Ein anderer Prozess oder ein scheinbar separater InjectionRuntimeState hat einen anderen Zustand. Das Laden/Löschen eines Profils kann es ersetzen; Die gespeicherten serial werden weiterhin mit der geladenen Welt verglichen.
Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.
Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.
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.RemoveUserStatic(1);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- Löscht den statischen Benutzerdatensatz unter ID.
UO.Print(UO.RemoveUserStatic(1));Parameter und Ablauf:
- Erster Zustand.UserStatics.Remove; Nur wenn der Löschvorgang erfolgreich ist, wird bridge.RemoveUserStatic(id) aufgerufen. Das Löschen gilt nicht für standardmäßige statische Kartendateien.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.UserStaticExists(1)))
{
UO.Print(UO.RemoveUserStatic(1));
}
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 lokale benutzerdefinierte Geometrie wird aus dem aktuellen Status entfernt. Serverelemente und andere ID-Elemente ändern sich nicht.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var records = UO.GetUserStatics();
if (Truth(UO.GetArrayLength(records) > 0))
{
var id = records[0][0];
UO.Print(UO.RemoveUserStatic(id));
UO.Print(UO.UserStaticExists(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: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.RemoveUserStatic:bridge.RemoveUserStatic(id).
Interner Implementierungscode; kein eigenständiges Skript.
case "removeuserstatic":
{
int id = Arg(0);
bool removed = state.UserStatics.Remove(id);
if (removed) bridge.RemoveUserStatic(id);
return new InjectionValue(removed ? 1 : 0);
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.UserStaticExists(object? id);Überprüft das Vorhandensein von ID in statischen Benutzerdatensätzen.
-
id— int ID AddUserStatic; nicht graphic/type und nicht serial.
Numerisches Flag int: 1 – der Schlüssel ist im Zustand. UserStatics, 0 – fehlt.
- Im Laufzeitwörterbuch wird nur ContainsKey überprüft. Die Sichtbarkeit eines Objekts auf der Karte, die erfolgreiche Erstellung eines Brückenobjekts und die Serverwelt werden nicht überprüft.
- Liest den aktuellen lokalen Status. Es gibt kein Paket, Ziel oder automatische Aktualisierung; Einzelne Lesevorgänge können unterschiedliche Zustände aufweisen.
- In einem regulären Client-Host werden diese Statusdaten vom GetPersistentState-Manager übernommen und gelten für Skripte/Chat/Makros derselben Welt/dieselben Profils und gehören nicht zu einem einzigen Skript. Ein anderer Prozess oder ein scheinbar separater InjectionRuntimeState hat einen anderen Zustand. Das Laden/Löschen eines Profils kann es ersetzen; Die gespeicherten serial werden weiterhin mit der geladenen Welt verglichen.
Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.
Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.
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.UserStaticExists(1);
UO.Print("UserStaticExists: " + Convert.ToString(result));Parameter und Ablauf:
- Überprüft das Vorhandensein von ID in statischen Benutzerdatensätzen.
UO.Print(UO.UserStaticExists(1));Parameter und Ablauf:
- Im Laufzeitwörterbuch wird nur ContainsKey überprüft. Die Sichtbarkeit eines Objekts auf der Karte, die erfolgreiche Erstellung eines Brückenobjekts und die Serverwelt werden nicht überprüft.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.UserStaticExists(1)))
{
UO.Print(UO.GetUserStatic(1));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Liest den aktuellen lokalen Status. Es gibt kein Paket, Ziel oder automatische Aktualisierung; Einzelne Lesevorgänge können unterschiedliche Zustände aufweisen.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var records = UO.GetUserStatics();
if (Truth(UO.GetArrayLength(records) > 0))
{
UO.Print(UO.UserStaticExists(records[0][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;
}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.UserStaticExists. -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(id).
Interner Implementierungscode; kein eigenständiges Skript.
public int UserStaticExists(InjectionValue id)
=> state.UserStatics.ContainsKey(NumberConversions.ToInt(id)) ? 1 : 0;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.WorldNum();Liest die aktuelle Kartennummer vom Client-Modell.
Es gibt keine Parameter.
int – Index der aktuellen Karte des Kunden, normalerweise 0=Felucca, 1=Trammel, 2=Ilshenar, 3=Malas, 4=Tokuno, 5=Ter Mur. Der Benutzerserver verwendet möglicherweise einen anderen Kartensatz. 0 ist eine vollwertige Karte, kein Anzeichen eines Fehlers.
- 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.
object? result = UO.WorldNum();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- Der Aufruf ohne Argumente bezieht sich auf self. Im Wert wird die aktuelle Kartennummer gespeichert.
- Convert.ToString wandelt die auszugebende Zahl um und ändert die Bedeutung des Ergebnisses nicht.
var value = UO.WorldNum();
UO.Print("WorldNum: " + Convert.ToString(value));Parameter und Ablauf:
- Der Wert wird einmal ohne Argumente gelesen. Die aktuelle Kartennummer wird in der angezeigten Berechnung bzw. Bedingung verwendet.
- Numerische Schwellenwerte sind Beispiele für Skriptbedingungen und keine neuen Client-Grenzwerte. Das Feld speichert die oben beschriebenen Servereinheiten und Einschränkungen.
return RunScenario();
object? RunScenario()
{
var value = UO.WorldNum();
var land = UO.GetLandscapeTile(UO.GetX(), UO.GetY(), value);
UO.Print("Land record length: " + Convert.ToString(ArrayLength(land)));
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;Parameter und Ablauf:
- Beide Aufrufe ohne Argument lesen ihren aktuellen Wert. UO.Wait(1000) gibt eine Pause in Millisekunden zwischen den Aufnahmen.
- Die verglichene Änderung ist die Nummer der aktuellen Karte. Ein Beispiel ändert nichts auf der Welt und wartet nicht endlos. Ereignisse innerhalb dieser Sekunde können übersehen werden.
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.WorldNum();
await Delay(1000);
var after = UO.WorldNum();
if (Truth(before != after))
{
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
}
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: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.WorldNumber:bridge.WorldNumber.
Interner Implementierungscode; kein eigenständiges Skript.
case "worldnum": return new InjectionValue(bridge.WorldNumber);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.X();Liest die X-Koordinate aus dem Clientmodell.
Es gibt keine Parameter.
int ist die X-Koordinate des geladenen Objekts. Für einen Charakter/Weltgegenstand ist dies die Weltzelle; Für einen Artikel in der Tasche ist dies die Koordinate im Behälter. Ein unbekanntes Objekt ergibt 0, aber X=0 ist auch gültig.
- 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.X();
UO.Print("X: " + Convert.ToString(result));Parameter und Ablauf:
- Der Aufruf ohne Argumente bezieht sich auf self. Die x-Koordinate wird im Wert gespeichert.
- Convert.ToString wandelt die auszugebende Zahl um und ändert die Bedeutung des Ergebnisses nicht.
var value = UO.X();
UO.Print("X: " + Convert.ToString(value));Parameter und Ablauf:
- Der Wert wird einmal ohne Argumente gelesen. Die x-Koordinate wird in der angezeigten Berechnung oder Bedingung verwendet.
- Numerische Schwellenwerte sind Beispiele für Skriptbedingungen und keine neuen Client-Grenzwerte. Das Feld speichert die oben beschriebenen Servereinheiten und Einschränkungen.
return RunScenario();
object? RunScenario()
{
var value = UO.X();
UO.Print("Two tiles east would be X=" + Convert.ToString(value + 2));
return null;
}Parameter und Ablauf:
- Beide Aufrufe ohne Argument lesen ihren aktuellen Wert. UO.Wait(1000) gibt eine Pause in Millisekunden zwischen den Aufnahmen.
- Die Änderung wird verglichen: die X-Koordinate. Das Beispiel ändert nichts auf der Welt und wartet nicht auf unbestimmte Zeit. Ereignisse innerhalb dieser Sekunde können übersehen werden.
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.X();
await Delay(1000);
var after = UO.X();
if (Truth(before != after))
{
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
}
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.RegisterCharacterGetterAliases [X]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetX:bridge.GetX(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.GetX(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.Y();Liest die Y-Koordinate aus dem Clientmodell.
Es gibt keine Parameter.
int – Y-Koordinate des geladenen Objekts. Für einen Charakter/Weltgegenstand ist dies die Weltzelle, für einen Gegenstand im Beutel ist dies die Position innerhalb des Behälters. Ein unbekanntes Objekt ergibt 0.
- 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.Y();
UO.Print("Y: " + Convert.ToString(result));Parameter und Ablauf:
- Der Aufruf ohne Argumente bezieht sich auf self. Die y-Koordinate wird im Wert gespeichert.
- Convert.ToString wandelt die auszugebende Zahl um und ändert die Bedeutung des Ergebnisses nicht.
var value = UO.Y();
UO.Print("Y: " + Convert.ToString(value));Parameter und Ablauf:
- Der Wert wird einmal ohne Argumente gelesen. Die Y-Koordinate wird in der angezeigten Berechnung oder Bedingung verwendet.
- Numerische Schwellenwerte sind Beispiele für Skriptbedingungen und keine neuen Client-Grenzwerte. Das Feld speichert die oben beschriebenen Servereinheiten und Einschränkungen.
return RunScenario();
object? RunScenario()
{
var value = UO.Y();
UO.Print("Two tiles south would be Y=" + Convert.ToString(value + 2));
return null;
}Parameter und Ablauf:
- Beide Aufrufe ohne Argument lesen ihren aktuellen Wert. UO.Wait(1000) gibt eine Pause in Millisekunden zwischen den Aufnahmen.
- Die Änderung wird verglichen: die Y-Koordinate. Das Beispiel ändert nichts auf der Welt und wartet nicht auf unbestimmte Zeit. Ereignisse innerhalb dieser Sekunde können übersehen werden.
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.Y();
await Delay(1000);
var after = UO.Y();
if (Truth(before != after))
{
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
}
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.RegisterCharacterGetterAliases [Y]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetY:bridge.GetY(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.GetY(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.Z();Liest die Z-Höhe aus dem Clientmodell.
Es gibt keine Parameter.
int ist die Höhe des Objekts in Welteinheiten, normalerweise -128..127. Dabei handelt es sich nicht um eine Etagennummer oder eine Ausstattungsebene. 0 kann die tatsächliche Höhe oder das Ergebnis der Abwesenheit eines Objekts sein.
- 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.Z();
UO.Print("Z: " + Convert.ToString(result));Parameter und Ablauf:
- Der Aufruf ohne Argumente bezieht sich auf self. Die Z-Höhe wird im Wert gespeichert.
- Convert.ToString wandelt die auszugebende Zahl um und ändert die Bedeutung des Ergebnisses nicht.
var value = UO.Z();
UO.Print("Z: " + Convert.ToString(value));Parameter und Ablauf:
- Der Wert wird einmal ohne Argumente gelesen. Die Z-Höhe wird in der angezeigten Berechnung oder Bedingung verwendet.
- Numerische Schwellenwerte sind Beispiele für Skriptbedingungen und keine neuen Client-Grenzwerte. Das Feld speichert die oben beschriebenen Servereinheiten und Einschränkungen.
return RunScenario();
object? RunScenario()
{
var value = UO.Z();
var land = UO.GetLandscapeTile(UO.GetX(), UO.GetY(), UO.WorldNum());
if (Truth(ArrayLength(land) >= 3))
{
UO.Print("Height above land: " + Convert.ToString(value - land[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:
- Beide Aufrufe ohne Argument lesen ihren aktuellen Wert. UO.Wait(1000) gibt eine Pause in Millisekunden zwischen den Aufnahmen.
- Die verglichene Änderung ist die Höhe Z. Das Beispiel ändert nichts auf der Welt und wartet nicht auf unbestimmte Zeit. Ereignisse innerhalb dieser Sekunde können übersehen werden.
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.Z();
await Delay(1000);
var after = UO.Z();
if (Truth(before != after))
{
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
}
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.RegisterCharacterGetterAliases [Z]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetZ:bridge.GetZ(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.GetZ(bridge.Self)API-Erstellung: Diese Funktionen registrieren die API. Sie werden nicht bei jedem Befehlsaufruf erneut ausgeführt.