DE UO Topic multis houses - 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
Zusammengesetzte Objekte der Welt: Häuser und andere Multis, ihre Teile und Position auf der Karte.
| Thema | Befehle und Erklärungen |
|---|---|
| GetMultis | UO.GetMultis |
| Multi Parts | UO.GetMultiAllParts |
| Parts at Position | UO.GetMultiPartsAtPosition |
| IsHouse | UO.IsHouse |
UO.GetMultis · UO.GetMultiAllParts · UO.GetMultiPartsAtPosition · UO.IsHouse
Jede Befehlskarte verfügt über mehrere unabhängige Szenarien: Direktcode, Funktionen und Klassen. Nachfolgend finden Sie ausgewählte kurze Szenarien; Einschränkungen und eine vollständige Analyse sind geplant.
Parameter, Ergebnis und alle Szenarien
var items = UO.GetMultis();
UO.Print(Convert.ToString(ArrayLength(items)));
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;Parameter, Ergebnis und alle Szenarien
var houses = UO.GetMultis();
if (Truth(ArrayLength(houses) == 0))
{
return null;
}
var parts = UO.GetMultiAllParts(houses[0]);
UO.Print(Convert.ToString(ArrayLength(parts)));
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;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetMultiAllParts(object? multiID);Liest Aufzeichnungen einer Komponente eines Hauses.
-
multiID– Seriell/ID eines bestimmten Objekts: int, Dezimal-/Hex-Zeichenfolge oder Set-Alias self, backpack, lasttarget, lastobject oder Name AddObject. Dies ist nicht graphic/type. Es sollte ID zu Hause in HouseManager geladen sein.
Array<Array>. Jede Zeile enthält 9 Felder: [0] graphic/type Komponenten, [1] hue, [2] Welt X, [3] Welt Y, [4] Welt Z, [5] multiOffsetX – Offset X von Multi, [6] multiOffsetY – Offset Y, [7] multiOffsetZ – Offset Z, [8] multiSerial - serial zu Hause. Keine Komponenten – leeres Array. Grafik ist nicht ID; Die einzelnen statischen Komponenten haben hier keine eigene serial.
- Vom Client bereits heruntergeladene Daten werden gelesen. Der Befehl öffnet nicht den Container, verschiebt keine Elemente und lädt keine Objekte vom gesamten Server herunter.
- Array – Array mit Indizes beginnend bei 0. Speichern Sie es in var, überprüfen Sie ArrayLength, bevor Sie darauf zugreifen. Nach der Aufnahme eines Schnappschusses können Elemente aus der Welt verschwinden: Überprüfen Sie „Exists(serial)“, bevor Sie Maßnahmen ergreifen.
- Es werden die bekannten, nicht gelöschten Komponenten HouseManager zurückgegeben. Separate statische Karten und Grundstücke sind in dieser Liste nicht enthalten. Zeilen sind eine Momentaufnahme; Eine feste Reihenfolge oder Z-Sortierung wird nicht versprochen.
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.
var multis = (object?[])UO.GetMultis();
if (multis.Length > 0) {
var parts = (object?[])UO.GetMultiAllParts(multis[0]);
UO.Print("Parts: " + parts.Length);
}Parameter und Ablauf:
- Zunächst wird ein beladenes Haus ausgewählt.
- Die Länge ist die Anzahl der Komponenten, nicht deren Höhe oder die Anzahl der Häuser.
var houses = UO.GetMultis();
if (Truth(ArrayLength(houses) == 0))
{
return null;
}
var parts = UO.GetMultiAllParts(houses[0]);
UO.Print(Convert.ToString(ArrayLength(parts)));
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:
- parts[0] ist die erste Zeile des Arrays. Ihr [0] – type, [2]/[3]/[4] – Welt X/Y/Z.
- Die Indizes [5]/[6]/[7] enthalten stattdessen relative Offsets.
return RunScenario();
object? RunScenario()
{
var houses = UO.GetMultis();
if (Truth(ArrayLength(houses) == 0))
{
return null;
}
var parts = UO.GetMultiAllParts(houses[0]);
if (Truth(ArrayLength(parts) > 0))
{
var part = parts[0];
UO.Print("Type: 0x" + Hex(part[0]));
UO.Print(Convert.ToString(part[2]) + "," + Convert.ToString(part[3]) + "," + Convert.ToString(part[4]));
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- [8] ist serial zu Hause, [7] ist der Offset von Z Komponenten.
- Übergeben Sie Teil[0] nicht an einen Befehl, der zu Hause serial erwartet: Das ist graphic einer separaten Komponente.
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 houses = UO.GetMultis();
if (Truth(ArrayLength(houses) == 0))
{
return null;
}
var parts = UO.GetMultiAllParts(houses[0]);
var i = 0;
while (Truth(i < ArrayLength(parts)))
{
var part = parts[i];
UO.Print("Multi: 0x" + Hex(part[8]) + ", offset Z: " + Convert.ToString(part[7]));
i = i + 1;
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: multiID (Any)
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetMultiAllParts:bridge.GetMultiAllParts(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Interner Implementierungscode; kein eigenständiges Skript.
case "getmultiallparts":
return new InjectionValue((bridge.GetMultiAllParts(Arg(0)) ?? Array.Empty<int[]>())
.Select(part => new InjectionValue((part ?? Array.Empty<int>()).Select(value => new InjectionValue(value)).ToArray())).ToArray());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetMultiPartsAtPosition(object? x, object? y);Liest die Komponenten von Häusern in der angegebenen Weltzelle.
-
x– Welt-X-Koordinate der aktuellen Kartenzelle, nicht der Versatz innerhalb des Hauses. -
y— Weltkoordinate Y der Zelle. Die Komponenten aller beladenen Häuser in dieser Zelle werden auf allen Z-Höhen zurückgegeben.
Array<Array>. Jede Zeile enthält 9 Felder: [0] graphic/type Komponenten, [1] hue, [2] Welt X, [3] Welt Y, [4] Welt Z, [5] multiOffsetX – Offset X von Multi, [6] multiOffsetY – Offset Y, [7] multiOffsetZ – Offset Z, [8] multiSerial - serial zu Hause. Keine Komponenten – leeres Array. Grafik ist nicht ID; Die einzelnen statischen Komponenten haben hier keine eigene serial.
- Vom Client bereits heruntergeladene Daten werden gelesen. Der Befehl öffnet nicht den Container, verschiebt keine Elemente und lädt keine Objekte vom gesamten Server herunter.
- Array – Array mit Indizes beginnend bei 0. Speichern Sie es in var, überprüfen Sie ArrayLength, bevor Sie darauf zugreifen. Nach der Aufnahme eines Schnappschusses können Elemente aus der Welt verschwinden: Überprüfen Sie „Exists(serial)“, bevor Sie Maßnahmen ergreifen.
- Es werden die bekannten, nicht gelöschten Komponenten HouseManager zurückgegeben. Separate statische Karten und Grundstücke sind in dieser Liste nicht enthalten. Zeilen sind eine Momentaufnahme; Eine feste Reihenfolge oder Z-Sortierung wird nicht versprochen.
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.GetMultiPartsAtPosition(UO.GetX(), UO.GetY());
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- X/Y – die aktuelle Position des Charakters.
- Die Länge ist die Anzahl der Komponenten, nicht deren Höhe oder die Anzahl der Häuser.
var parts = UO.GetMultiPartsAtPosition(UO.GetX(), UO.GetY());
UO.Print(Convert.ToString(ArrayLength(parts)));
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;Parameter und Ablauf:
- parts[0] ist die erste Zeile des Arrays. Ihr [0] – type, [2]/[3]/[4] – Welt X/Y/Z.
- Die Indizes [5]/[6]/[7] enthalten stattdessen relative Offsets.
return RunScenario();
object? RunScenario()
{
var parts = UO.GetMultiPartsAtPosition(UO.GetX(), UO.GetY());
if (Truth(ArrayLength(parts) > 0))
{
var part = parts[0];
UO.Print("Type: 0x" + Hex(part[0]));
UO.Print(Convert.ToString(part[2]) + "," + Convert.ToString(part[3]) + "," + Convert.ToString(part[4]));
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- [8] ist serial zu Hause, [7] ist der Offset von Z Komponenten.
- Übergeben Sie Teil[0] nicht an einen Befehl, der zu Hause serial erwartet: Das ist graphic einer separaten Komponente.
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 parts = UO.GetMultiPartsAtPosition(UO.GetX(), UO.GetY());
var i = 0;
while (Truth(i < ArrayLength(parts)))
{
var part = parts[i];
UO.Print("Multi: 0x" + Hex(part[8]) + ", offset Z: " + Convert.ToString(part[7]));
i = i + 1;
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}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: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetMultiPartsAtPosition:bridge.GetMultiPartsAtPosition(Arg(0), Arg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Interner Implementierungscode; kein eigenständiges Skript.
case "getmultipartsatposition":
return new InjectionValue((bridge.GetMultiPartsAtPosition(Arg(0), Arg(1)) ?? Array.Empty<int[]>())
.Select(part => new InjectionValue((part ?? Array.Empty<int>()).Select(value => new InjectionValue(value)).ToArray())).ToArray());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetMultis();Liste der geladenen Objekte, die vom Client als Home/Multi erkannt wurden.
Es gibt keine Parameter.
Array ist serial von Weltelementen, für die IsHouse 1 zurückgibt. Ein leeres Array, wenn keine solchen Objekte vorhanden sind. Dies sind ID Häuser, keine Liste von Grafikkomponenten, keine Koordinaten und keine Liste aller Häuser auf dem Server.
- Vom Client bereits heruntergeladene Daten werden gelesen. Der Befehl öffnet nicht den Container, verschiebt keine Elemente und lädt keine Objekte vom gesamten Server herunter.
- Array – Array mit Indizes beginnend bei 0. Speichern Sie es in var, überprüfen Sie ArrayLength, bevor Sie darauf zugreifen. Nach der Aufnahme eines Schnappschusses können Elemente aus der Welt verschwinden: Überprüfen Sie „Exists(serial)“, bevor Sie Maßnahmen ergreifen.
- Daten werden von geladenen Weltelementen gelesen. Für Komponenten eines Hauses verwenden Sie GetMultiAllParts(serial).
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.GetMultis();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- Es gibt keine Parameter; Beladene Haus-/Mehrfachartikel sind ausgewählt.
- Länge – Anzahl der Datensätze/ID. Dies ist nicht die Anzahl der Stapel. Die leere Liste ergibt 0.
var items = UO.GetMultis();
UO.Print(Convert.ToString(ArrayLength(items)));
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;Parameter und Ablauf:
- Es gibt keine Parameter; Beladene Haus-/Mehrfachartikel sind ausgewählt.
- items[i] – numerisch serial. Hex wird nur für die Ausgabe verwendet. Die Schleife greift nicht auf den letzten Index zu.
return RunScenario();
object? RunScenario()
{
var items = UO.GetMultis();
var i = 0;
while (Truth(i < ArrayLength(items)))
{
UO.Print("0x" + Hex(items[i]));
i = i + 1;
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Es gibt keine Parameter; Beladene Haus-/Mehrfachartikel sind ausgewählt.
- Es werden zwei verschiedene Dinge überprüft: der Datensatz im Snapshot und die aktuelle Existenz des Objekts. Ordnung ohne explizite Sortierung bedeutet nicht Nähe.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var items = UO.GetMultis();
if (Truth(ArrayLength(items) > 0))
{
var first = items[0];
if (Truth(UO.Exists(first)))
{
UO.Print(UO.GetName(first));
}
}
else
{
UO.Print("Empty list");
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}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.GetWorldItems:bridge.GetWorldItems(). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsHouse:bridge.IsHouse(id).
Interner Implementierungscode; kein eigenständiges Skript.
case "getmultis":
return new InjectionValue(bridge.GetWorldItems().Where(id => bridge.IsHouse(id) != 0).Select(id => new InjectionValue(id)).ToArray());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsHouse(object? objID);Überprüft das Multi-Flag für ein geladenes Objekt: ein Haus, ein Schiff oder eine andere Struktur mit mehreren Kacheln.
-
objID– Obligatorisches serial/ID eines bestimmten Objekts: int, Hex-String oder Alias self, backpack, lasttarget, lastobject, lastcontainer, laststatus, finditem, lastcorpse oder Name AddObject. Dies ist nicht graphic/type. Nicht angegebener Name wird zu 0 aufgelöst; Der Befehl öffnet kein neues Ziel.
int 1 – ein Artikel mit dem Attribut IsMulti. int 0 – ein gewöhnliches Objekt, mobile, ein unbekanntes oder entferntes Objekt. Der Name beschränkt das Ergebnis nicht auf Häuser: Ein Schiff kann auch 1 geben. Das Team gibt keinen Hausbesitzer, keine Region oder kein Gebiet zurück.
Das Ergebnis des Befehls ist ein numerisches Flag: 1 bedeutet eine erfüllte Bedingung, 0 bedeutet eine nicht erfüllte Bedingung. Nach var result = command(...) prüfen, ob (result != 0) oder if (result == 0). Speichern Sie das Ergebnis eines Aufrufs: Ein wiederholter Aufruf kann die Aktion erneut ausführen oder den Status lesen, der sich bereits geändert hat.
- Das lokale Clientmodell wird gelesen; Es gibt keine Anfragen an den Server, kein Warten oder Verschieben.
- Das Ergebnis bezieht sich auf den Moment des Lesens. Nach UO.Wait oder einer anderen Aktion können sich das Objekt und seine Flags ändern.
Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.
Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.
Das Ergebnis eines Aufrufs wird im Journal ausgegeben. Zahlen werden nicht in bool umgewandelt; bei Arrays wird die Anzahl der Elemente angezeigt.
var result = UO.IsHouse(UO.GetSerial("lasttarget"));
UO.Print("IsHouse: " + Convert.ToString(result));Parameter und Ablauf:
- Das Ziel sollte den serial des Mehrfachobjekts enthalten, nicht den graphic der einzelnen Wand.
- 1 bedeutet Klasse Multi; Dies ist kein Beweis dafür, dass es sich bei dem Bauwerk um ein Wohngebäude handelt.
var target = UO.GetSerial("lasttarget");
if (Truth(UO.IsHouse(target)))
{
UO.Print("Loaded multi structure");
}
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:
- Zuerst wird die Anwesenheit geprüft, dann wird mobile eliminiert.
- „Zero without Exists“ könnte das Fehlen eines Objekts und nicht eines gewöhnlichen Objekts bedeuten.
return RunScenario();
object? RunScenario()
{
var target = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(target)))
{
if (Truth(UO.IsNPC(target) == 0))
{
if (Truth(UO.IsHouse(target)))
{
UO.Print("Multi");
}
else
{
UO.Print("Ordinary item");
}
}
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- self ist mobile, also ist das erste Ergebnis 0, sogar innerhalb des Hauses.
- Um ein Konstrukt zu testen, übergeben Sie sein eigenes serial; Das Team sucht nicht nach einem Haus rund um den Charakter.
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 selfIsMulti = UO.IsHouse("self");
var selectedIsMulti = UO.IsHouse("lasttarget");
UO.Print("Self: " + Convert.ToString(selfIsMulti));
UO.Print("Selected object: " + Convert.ToString(selectedIsMulti));
return null;
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: objID (Any)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsHouse:bridge.IsHouse(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Interner Implementierungscode; kein eigenständiges Skript.
case "ishouse": return new InjectionValue(bridge.IsHouse(Arg(0)));