Repository navigation
DE UO Topic targeting
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Home · C# · IDE · UO API · A–Z · Beispiele · Sprachen
Manuelle Reaktion mit Zielcursor und voreingestellter Reaktion WaitTarget. Das Festlegen eines erwarteten Ziels und das Ausführen einer Aktion sind separate Vorgänge.
| Thema | Befehle und Erklärungen |
|---|---|
| Target | UO.Target |
| TargetID | UO.TargetID |
| TargetToObject | UO.TargetToObject |
| TargetToTile | UO.TargetToTile |
| TargetToXYZ | UO.TargetToXYZ |
| TargetByResource | UO.TargetByResource |
| WaitTarget | UO.WaitTarget |
| WaitTargetObject | UO.WaitTargetObject |
| WaitTargetType | UO.WaitTargetType |
| WaitTargetTile | UO.WaitTargetTile |
| WaitTargetXYZ | UO.WaitTargetXYZ |
| WaitTargetSelf | UO.WaitTargetSelf |
| LastTarget | UO.LastTarget |
| CancelTarget | UO.CancelTarget |
| Client Target Response | UO.ClientRequestObjectTarget · UO.ClientRequestTileTarget · UO.WaitForClientTargetResponse · UO.ClientTargetResponse |
UO.Target · UO.TargetID · UO.Targeting · UO.TargetPresent · UO.TargetToObject · UO.TargetToTile · UO.TargetToXYZ · UO.TargetByResource · UO.LastTarget · UO.LastTargetX · UO.LastTargetY · UO.LastTile · UO.TicksTarget
UO.WaitTarget · UO.WaitTargetObject · UO.WaitTargetType · UO.WaitTargetObjectType · UO.WaitTargetTile · UO.WaitTargetXYZ · UO.WaitTargetSelf · UO.WaitTargetGround · UO.WaitTargetLast · UO.WaitForTarget · UO.IsWaitTargetActive · UO.CancelTarget · UO.CancelWaitTarget
UO.ClientRequestObjectTarget · UO.ClientRequestTileTarget · UO.ClientTargetResponse · UO.ClientTargetResponsePresent · UO.WaitForClientTargetResponse
Jede Befehlskarte verfügt über mehrere unabhängige Szenarien: Direktcode, Funktionen und Klassen. Nachfolgend finden Sie ausgewählte kurze Szenarien; Einschränkungen und eine vollständige Analyse sind geplant.
Parameter, Ergebnis und alle Szenarien
UO.CancelWaitTarget();
UO.WaitTargetObject("self");
UO.UseSkill("Anatomy");Parameter, Ergebnis und alle Szenarien
if (Truth(UO.TargetPresent()))
{
UO.TargetToXYZ(1445, 1690, 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 · 繁體中文 · 日本語 · 한국어
void UO.CancelTarget();Bricht den aktiven Cursor ab und löscht vorbereitete Fadenkreuzantworten.
Es gibt keine Parameter.
void – kein Rückgabewert. Rufen Sie eine separate Leitung an; Nicht als true/false, serial oder type verwenden. Metadaten object? für kompatible Formulare ändert das tatsächliche Ergebnis nicht void.
- Bereits an den Server gesendete Antworten werden nicht zurückgerufen.
- Das lokale Rückrufziel wird abgebrochen; Für ein aktives Serverziel wird eine Zielstornierung gesendet.
- Die Warteschlange ist dem Client gemeinsam: Ihre Löschung gilt für die vorbereiteten Antworten aller Prozeduren.
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.CancelTarget");
UO.CancelTarget();Parameter und Ablauf:
- Es gibt keine Argumente.
- Die ausstehende Antwort auf self wird gelöscht.
UO.WaitTargetSelf();
UO.CancelTarget();Parameter und Ablauf:
- 1445/1690/0 ist ein Beispiel für einen neuen Punkt auf der Welt.
- Alte Antworten werden entfernt, bevor ein neues Ziel festgelegt wird.
return RunScenario();
object? RunScenario()
{
UO.CancelTarget();
UO.WaitTargetXYZ(1445, 1690, 0);
return null;
}Parameter und Ablauf:
- UO.Wait=1000 ms ist eine Einschränkung dieses Beispiels.
- Die verbleibende Warteschlange wird überprüft, nicht der Erfolg des Skills. Wenn kein Server-Fadenkreuz vorhanden ist, erhält der nächste fremde Befehl nicht die alte Antwort.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
UO.WaitTargetSelf();
UO.UseSkill("Anatomy");
await Delay(1000);
if (Truth(UO.IsWaitTargetActive()))
{
UO.CancelTarget();
}
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: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.CancelTarget. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetWaitTargetQueue:bridge.GetWaitTargetQueue(). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsTargeting:bridge.IsTargeting(). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CancelTarget:bridge.CancelTarget(). -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage("Targeting cancelled").
Interner Implementierungscode; kein eigenständiges Skript.
public void CancelTarget()
{
var waitTargetQueue = bridge.GetWaitTargetQueue();
if (waitTargetQueue.Length > 0 || bridge.IsTargeting() != 0)
{
bridge.CancelTarget();
SystemMessage("Targeting cancelled");
}
else
SystemMessage("Error: no target to cancel");
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.CancelWaitTarget();Löscht vorbereitete Fadenkreuzantworten.
Es gibt keine Parameter.
void – kein Rückgabewert. Rufen Sie eine separate Leitung an; Nicht als true/false, serial oder type verwenden. Metadaten object? für kompatible Formulare ändert das tatsächliche Ergebnis nicht void.
- Bereits an den Server gesendete Antworten werden nicht zurückgerufen.
- Der geöffnete Cursor bleibt aktiv; es kann später manuell bearbeitet werden.
- Die Warteschlange ist dem Client gemeinsam: Ihre Löschung gilt für die vorbereiteten Antworten aller Prozeduren.
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.CancelWaitTarget");
UO.CancelWaitTarget();Parameter und Ablauf:
- Es gibt keine Argumente.
- Die ausstehende Antwort auf self wird gelöscht.
UO.WaitTargetSelf();
UO.CancelWaitTarget();Parameter und Ablauf:
- 1445/1690/0 ist ein Beispiel für einen neuen Punkt auf der Welt.
- Alte Antworten werden entfernt, bevor ein neues Ziel festgelegt wird.
return RunScenario();
object? RunScenario()
{
UO.CancelWaitTarget();
UO.WaitTargetXYZ(1445, 1690, 0);
return null;
}Parameter und Ablauf:
- UO.Wait=1000 ms ist eine Einschränkung dieses Beispiels.
- Die verbleibende Warteschlange wird überprüft, nicht der Erfolg des Skills. Wenn kein Server-Fadenkreuz vorhanden ist, erhält der nächste fremde Befehl nicht die alte Antwort.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
UO.WaitTargetSelf();
UO.UseSkill("Anatomy");
await Delay(1000);
if (Truth(UO.IsWaitTargetActive()))
{
UO.CancelWaitTarget();
}
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: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CancelWaitTarget:bridge.CancelWaitTarget().
Interner Implementierungscode; kein eigenständiges Skript.
case "cancelwaittarget": bridge.CancelWaitTarget(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ClientRequestObjectTarget();Öffnet ein lokales Fadenkreuz zur manuellen Auswahl eines Gegenstands oder Charakters.
Es gibt keine Parameter.
void – kein Rückgabewert. Rufen Sie eine separate Leitung an; Nicht als true/false, serial oder type verwenden. Metadaten object? für kompatible Formulare ändert das tatsächliche Ergebnis nicht void.
- Das vorherige Ergebnis dieser Laufzeit wird zurückgesetzt. Der Befehl kehrt sofort zurück, ohne auf einen Klick zu warten.
- Das Ergebnis wird ClientTargetResponse nach WaitForClientTargetResponse oder ClientTargetResponsePresent gelesen.
- Durch das Stoppen einer laufenden Prozedur wird der zu ihr gehörende Bereich im nächsten Frame entfernt. Wenn der Cursor bereits durch eine andere Anfrage ersetzt wurde, ist der Abbruch davon nicht betroffen.
- Ein Fadenkreuz der Client-Schnittstelle kann nicht gleichzeitig für zwei unabhängige manuelle Auswahlen verwendet werden. Starten Sie keine neue Anfrage, bis die vorherige bearbeitet wurde.
Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.
Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.
Der Befehl steht in einer eigenen Anweisung. Die Meldung davor zeigt den Beginn des Aufrufs und bestätigt keine Serveraktion.
UO.Print("Calling UO.ClientRequestObjectTarget");
UO.ClientRequestObjectTarget();Parameter und Ablauf:
- 5000 – Klick-Wartezeitüberschreitung in Millisekunden. Die neue Abfrage setzt das vorherige Ergebnis zurück.
- Ein Array aus fünf Feldern zeigt das ausgewählte Objekt an. Ergebnis[0] ist serial, nicht type.
UO.ClientRequestObjectTarget();
if (Truth(UO.WaitForClientTargetResponse(5000)))
{
var result = UO.ClientTargetResponse();
if (Truth(ArrayLength(result) == 5))
{
UO.Print("Serial: " + UO.Int2Hex(result[0]));
}
else
{
UO.Print("Selection cancelled");
}
}
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:
- CancelTarget bricht die lokale Auswahl ab; Rückruf gibt leeres Ergebnis zurück.
- ClientTargetResponsePresent ergibt 1, aber die Länge des Arrays beträgt 0. Greifen Sie nicht auf result[0] zu, ohne die Länge zu überprüfen.
return RunScenario();
object? RunScenario()
{
UO.ClientRequestObjectTarget();
UO.CancelTarget();
if (Truth(UO.ClientTargetResponsePresent()))
{
var result = UO.ClientTargetResponse();
UO.Print("Fields: " + Convert.ToString(ArrayLength(result)));
}
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:
- Die Antwort enthält fünf Felder; serial ist im Ergebnis[0]. Timeout und Abbruch führen zu keinem nutzbaren serial.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.ClientRequestObjectTarget();
if (UO.WaitForClientTargetResponse(5000) == 0)
return false;
var result = UO.ClientTargetResponse();
if (((object? [])result).Length != 5 || Convert.ToInt32(result[0]) == 0)
return false;
UO.AddObject("selected_object", result[0]);
UO.Print($"Saved object: {UO.GetName(result[0])}");
return true;
return null;
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.RequestClientTarget:bridge.RequestClientTarget(false).
Interner Implementierungscode; kein eigenständiges Skript.
case "clientrequestobjecttarget": bridge.RequestClientTarget(false); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ClientRequestTileTarget();Öffnet ein lokales Fadenkreuz zur manuellen Auswahl eines Punktes/einer Kachel oder eines Objekts.
Es gibt keine Parameter.
void – kein Rückgabewert. Rufen Sie eine separate Leitung an; Nicht als true/false, serial oder type verwenden. Metadaten object? für kompatible Formulare ändert das tatsächliche Ergebnis nicht void.
- Das vorherige Ergebnis dieser Laufzeit wird zurückgesetzt. Der Befehl kehrt sofort zurück, ohne auf einen Klick zu warten.
- Das Ergebnis wird ClientTargetResponse nach WaitForClientTargetResponse oder ClientTargetResponsePresent gelesen.
- Durch das Stoppen einer laufenden Prozedur wird der zu ihr gehörende Bereich im nächsten Frame entfernt. Wenn der Cursor bereits durch eine andere Anfrage ersetzt wurde, ist der Abbruch davon nicht betroffen.
- Ein Fadenkreuz der Client-Schnittstelle kann nicht gleichzeitig für zwei unabhängige manuelle Auswahlen verwendet werden. Starten Sie keine neue Anfrage, bis die vorherige bearbeitet wurde.
Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.
Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.
Der Befehl steht in einer eigenen Anweisung. Die Meldung davor zeigt den Beginn des Aufrufs und bestätigt keine Serveraktion.
UO.Print("Calling UO.ClientRequestTileTarget");
UO.ClientRequestTileTarget();Parameter und Ablauf:
- Ergebnis[1] - graphic, Ergebnis[2]/[3]/[4] - X/Y/Z. Das Weltplättchen serial hat ein Ergebnis[0] gleich 0.
- Typ, Koordinaten und serial sind separate Felder. In diesem Array gibt es keinen statischen Layer-Index.
UO.ClientRequestTileTarget();
if (Truth(UO.WaitForClientTargetResponse(5000)))
{
var result = UO.ClientTargetResponse();
if (Truth(ArrayLength(result) == 5))
{
UO.Print("Type: " + UO.Int2Hex(result[1]));
UO.Print(Convert.ToString(result[2]) + "," + Convert.ToString(result[3]) + "," + Convert.ToString(result[4]));
}
}
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:
- Für die Zelle stehen X/Y/Z in den Feldern 2/3/4. Globale Stores-Strings; graphic und serial ersetzen hier keine Koordinaten.
return RunScenario();
object? RunScenario()
{
UO.ClientRequestTileTarget();
if (UO.WaitForClientTargetResponse(5000) == 0)
return false;
var selection = (object? [])UO.ClientTargetResponse();
if (selection.Length != 5)
return false;
UO.SetGlobal("route.x", Convert.ToString(selection[2]));
UO.SetGlobal("route.y", Convert.ToString(selection[3]));
UO.SetGlobal("route.z", Convert.ToString(selection[4]));
return true;
return null;
}Parameter und Ablauf:
- CancelTarget überschreibt den lokalen Cursor. Das Vorliegen eines Rückrufs nach der Stornierung bedeutet nicht das Vorliegen einer erfolgreichen Auswahl.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
UO.ClientRequestTileTarget();
await WaitAsync(1000);
UO.CancelTarget();
if (UO.ClientTargetResponsePresent() != 0)
{
var result = (object? [])UO.ClientTargetResponse();
UO.Print($"Response after cancel: {result.Length} fields");
}
return null;
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.RequestClientTarget:bridge.RequestClientTarget(true).
Interner Implementierungscode; kein eigenständiges Skript.
case "clientrequesttiletarget": bridge.RequestClientTarget(true); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.ClientTargetResponse();Kopiert das Ergebnis des letzten lokalen ClientRequest* in ein Array.
Es gibt keine Parameter.
Array aus fünf int: [0]=serial Objekt (0 in Bodennähe/statisch), [1]=graphic/type, [2]=X, [3]=Y, [4]=Z. Vor der Auswahl, nach dem Zurücksetzen durch eine neue Anfrage oder bei Abbruch oder ungeeigneter Auswahl wird ein leeres Array zurückgegeben. Es fehlen hue, Karte, statischer Layer-Index und Land-/statisches Attribut. Dies ist kein Objekt mit benannten Feldern.
- Beim Lesen wird das Ergebnis nicht verbraucht: Es kann erneut gelesen werden. Das neue ClientRequest* ersetzt es.
- Überprüfen Sie immer ArrayLength(result)=5, bevor Sie auf Indizes zugreifen.
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.ClientTargetResponse();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- 5000 – Klick-Wartezeitüberschreitung in Millisekunden. Die neue Abfrage setzt das vorherige Ergebnis zurück.
- Ein Array aus fünf Feldern zeigt das ausgewählte Objekt an. Ergebnis[0] ist serial, nicht type.
UO.ClientRequestObjectTarget();
if (Truth(UO.WaitForClientTargetResponse(5000)))
{
var result = UO.ClientTargetResponse();
if (Truth(ArrayLength(result) == 5))
{
UO.Print("Serial: " + UO.Int2Hex(result[0]));
}
else
{
UO.Print("Selection cancelled");
}
}
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:
- Ergebnis[1] - graphic, Ergebnis[2]/[3]/[4] - X/Y/Z. Das Weltplättchen serial hat ein Ergebnis[0] gleich 0.
- Typ, Koordinaten und serial sind separate Felder. In diesem Array gibt es keinen statischen Layer-Index.
return RunScenario();
object? RunScenario()
{
UO.ClientRequestTileTarget();
if (Truth(UO.WaitForClientTargetResponse(5000)))
{
var result = UO.ClientTargetResponse();
if (Truth(ArrayLength(result) == 5))
{
UO.Print("Type: " + UO.Int2Hex(result[1]));
UO.Print(Convert.ToString(result[2]) + "," + Convert.ToString(result[3]) + "," + Convert.ToString(result[4]));
}
}
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:
- CancelTarget bricht die lokale Auswahl ab; Rückruf gibt leeres Ergebnis zurück.
- ClientTargetResponsePresent ergibt 1, aber die Länge des Arrays beträgt 0. Greifen Sie nicht auf result[0] zu, ohne die Länge zu überprüfen.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.ClientRequestObjectTarget();
UO.CancelTarget();
if (Truth(UO.ClientTargetResponsePresent()))
{
var result = UO.ClientTargetResponse();
UO.Print("Fields: " + Convert.ToString(ArrayLength(result)));
}
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.ClientTargetResponse:bridge.ClientTargetResponse().
Interner Implementierungscode; kein eigenständiges Skript.
case "clienttargetresponse":
return new InjectionValue(bridge.ClientTargetResponse().Select(value => new InjectionValue(value)).ToArray());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.ClientTargetResponsePresent();Überprüft, ob eine Antwort auf die letzte lokale Auswahlanforderung empfangen wurde.
Es gibt keine Parameter.
int 1 – Rückruf hat bereits geantwortet, einschließlich Stornierung; 0 – die neue Auswahl ist noch nicht abgeschlossen. Der Wert 1 garantiert nicht die Existenz des Objekts: Bei Abbruch gibt ClientTargetResponse ein leeres Array 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.
- Zeigt nicht das Vorhandensein einer Serversicht an und beschreibt nicht die WaitTarget-Warteschlange.
- Das Lesen des Ergebnisses setzt dieses Flag nicht zurück; es wird beim nächsten ClientRequest* zurückgesetzt.
Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.
Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.
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.ClientTargetResponsePresent();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- CancelTarget bricht die lokale Auswahl ab; Rückruf gibt leeres Ergebnis zurück.
- ClientTargetResponsePresent ergibt 1, aber die Länge des Arrays beträgt 0. Greifen Sie nicht auf result[0] zu, ohne die Länge zu überprüfen.
UO.ClientRequestObjectTarget();
UO.CancelTarget();
if (Truth(UO.ClientTargetResponsePresent()))
{
var result = UO.ClientTargetResponse();
UO.Print("Fields: " + Convert.ToString(ArrayLength(result)));
}
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:
- Sowohl die Bereitschaft der Antwort als auch ihr Inhalt werden überprüft. Das Attribut 1 ist nicht das serial-Objekt.
return RunScenario();
object? RunScenario()
{
UO.ClientRequestObjectTarget();
if (UO.WaitForClientTargetResponse(5000) == 0)
return false;
if (UO.ClientTargetResponsePresent() == 0)
return false;
var response = (object? [])UO.ClientTargetResponse();
return response.Length == 5 && Convert.ToInt32(response[0]) != 0;
return null;
}Parameter und Ablauf:
- Die Abfrage ist auf fünf Sekunden begrenzt. Erfolgt keine Antwort, wird der Cursor abgebrochen; X/Y/Z-Felder werden nur aus der vollständigen Antwort gelesen.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
UO.ClientRequestTileTarget();
for (int attempt = 0; attempt < 50; attempt++)
{
if (UO.ClientTargetResponsePresent() != 0)
{
var response = (object? [])UO.ClientTargetResponse();
if (response.Length == 5)
UO.Print($"Selected tile: {response[2]},{response[3]},{response[4]}");
return null;
}
await WaitAsync(100);
}
UO.CancelTarget();
UO.Print("Selection timed out");
return null;
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ClientTargetResponsePresent:bridge.ClientTargetResponsePresent().
Interner Implementierungscode; kein eigenständiges Skript.
case "clienttargetresponsepresent": return new InjectionValue(bridge.ClientTargetResponsePresent());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.IsWaitTargetActive();Prüft, ob vorbereitete Antworten in der Zielwarteschlange verbleiben.
Es gibt keine Parameter.
int 1 – es liegt ein nicht aufgehobenes aufgeschobenes Ziel eines Objekts, einer Kachel oder eine Aufhebung der nächsten Sicht vor; 0 – Warteschlange ist leer. Es liegt daran, dass der Cursor nicht geöffnet ist. Verwenden Sie für den Cursor TargetPresent/Targeting.
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.
- Die gesamte Warteschlange des Clients wird gelesen. Wenn mehrere Prozeduren gleichzeitig laufen, werden die Reaktionen jedes einzelnen berücksichtigt.
- Null bedeutet nur, dass keine Antwort aussteht. Es bestätigt nicht den erfolgreichen Einsatz einer Fertigkeit oder eines Zaubers auf dem 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.IsWaitTargetActive();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- Nach WaitTargetSelf und vor dem Serverziel 1 wird erwartet.
- CancelWaitTarget löscht die Warteschlange; Der nächste Test ergibt 0.
UO.WaitTargetSelf();
UO.Print(Convert.ToString(UO.IsWaitTargetActive()));
UO.CancelWaitTarget();Parameter und Ablauf:
- Die Prüfung hat keine Parameter. UO.Wait=50 ms, maximale 20 Erwartungen.
- Bleibt die Antwort bestehen, wird sie abgebrochen. Fügen Sie separat eine Prüfung für das Ergebnis der Serveraktion hinzu.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var attempts = 0;
while (Truth(UO.IsWaitTargetActive()) && Truth(attempts < 20))
{
await Delay(50);
attempts = attempts + 1;
}
if (Truth(UO.IsWaitTargetActive()))
{
UO.CancelWaitTarget();
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Die erste Zeile zeigt die verzögerten Reaktionen, die zweite den Sehzustand.
- Eine Warteschlange ohne Cursor und ein Cursor ohne Warteschlange sind möglich; diese Werte sind nicht austauschbar.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.Print("Queued: " + Convert.ToString(UO.IsWaitTargetActive()));
UO.Print("Cursor: " + Convert.ToString(UO.TargetPresent()));
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.Waiting:Waiting().
Interner Implementierungscode; kein eigenständiges Skript.
case "iswaittargetactive": return new InjectionValue(Waiting());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.LastTarget();Liest serial des zuletzt gespeicherten Zielobjekts.
Es gibt keine Parameter.
int - serial/ID, nicht type und nicht bool. 0 bedeutet das Fehlen eines Zielobjekts; Boden und statisch haben auch serial 0, obwohl Koordinaten gespeichert werden können. Alle 32-Bits bleiben erhalten. Um nach einem ID ungleich Null zu suchen, verwenden Sie != 0, nicht > 0, oder == true.
- Keine Parameter. Schaltet das Visier nicht ein, wählt kein neues Ziel aus, greift nicht an und sendet keine Pakete. LastTarget unterscheidet sich von LastAttack und LastStatus. Die normale Wahl self ersetzt nicht das letzte Ziel; ein explizites ClientMarkChar kann es ändern.
- Bei SetEntity bleibt die bekannte Entity.X/Y erhalten; Bei einem Artikel in einem Container könnten dies die Koordinaten des Inhalts sein. SetLand/SetStatic speichert die Welt X/Y des ausgewählten Punktes. Eine spätere Bewegung/Entfernung des Objekts verändert die gespeicherten Koordinaten nicht. Für die aktuelle Position verwenden Sie GetX/GetY(serial).
- Klare und klare Aufzeichnung, auch beim Speichern von Skripten. Das unbekannte serial erbt in einer expliziten Einstellung nicht das vorherige X/Y: Sie werden zu 0. Dies garantiert nicht, dass das Ziel auf dem Server vorhanden ist.
- Das Lesen von serial und X/Y durch separate Befehle ist nicht atomar. Für das Zielobjekt LastTile speichert das Netzwerk X/Y=65535; Dies ist keine gespeicherte Objektposition. Für Erde/statisch LastTile(1)/(2) lesen Sie die ausgewählten X/Y. lasttarget ohne Klammern ist ein integrierter Live-Wert, sofern er nicht durch eine Variable überschrieben wird.
- World.Clear-Anrufe ClearWorldState: Setzt den aktiven Rückruf, das gespeicherte Ziel und das Wiedergabepaket zurück. Ein normaler Reset speichert den Verlauf. Intern TargetLast sendet das gespeicherte Paket nur an das aktive Serverziel; Ohne Verlauf oder für einen lokalen Rückruf sendet es nichts und speichert das Ziel. Ein aktiver Client-Rückruf erhält einmal null als Stornierung: ClientTargetResponsePresent wird zu 1, wenn die Antwort leer ist. Eine abgeschlossene Auswahl wird nicht erneut benachrichtigt.
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.LastTarget();
UO.Print("LastTarget: " + Convert.ToString(result));Parameter und Ablauf:
- value ist das einzige Ergebnis des Befehls; HEX zeigt ID, Konvertieren.ToString ist die Koordinate. Der Anruf wählt nichts aus.
var value = UO.LastTarget();
UO.Print("Saved value: " + Hex(value));
string Hex(object? value) => Convert.ToInt64(value).ToString("X");Parameter und Ablauf:
- id – gespeichert serial. Exists prüft vor GetX/GetY, ob ein Objekt vorhanden ist. Gespeicherte und aktuelle Koordinaten können abweichen. Mit serial=0 gibt das Beispiel den ausgewählten Punkt aus, aber 0 selbst beweist nicht, dass der Punkt ausgewählt wurde.
return RunScenario();
object? RunScenario()
{
var id = UO.LastTarget();
var x = UO.LastTargetX();
var y = UO.LastTargetY();
UO.Print("Saved XY: " + Convert.ToString(x) + "," + Convert.ToString(y));
if (Truth(id != 0) && Truth(UO.Exists(id)))
{
UO.Print("Live XY: " + Convert.ToString(UO.GetX(id)) + "," + Convert.ToString(UO.GetY(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:
- Minimum/Maximum gibt den akzeptablen Bereich des Assistentenergebnisses an, nicht die API-Parameter. Der Assistent ist vollständig definiert; -1 ist ein eigenes Zeichen dafür, dass der Wert außerhalb des Bereichs liegt. Für ID speichert die Prüfung alle serial ungleich Null, einschließlich des höchstwertigen Bits, anstelle des Bereichs.
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 value = ReadTargetValue();
UO.Print("Checked value: " + Convert.ToString(value));
return null;
}
dynamic ReadTargetValue()
{
var value = UO.LastTarget();
if (Truth(value == 0))
{
return -1;
}
return value;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastTarget:bridge.LastTarget.
Interner Implementierungscode; kein eigenständiges Skript.
case "lasttarget": return new InjectionValue(bridge.LastTarget);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.LastTargetX();Liest die X-Koordinate, die bei der letzten Auswahl des Ziels gespeichert wurde.
Es gibt keine Parameter.
int ist die gespeicherte X-Koordinate, kein Bildschirmpixel. Vorher/nachher Löschen oder für ein unbekanntes Objekt – 0; die reale Koordinate 0 ist ebenfalls akzeptabel. Ist nicht bool. Für Erde/Statik funktioniert es auch mit LastTarget()=0.
- Keine Parameter. Schaltet das Visier nicht ein, wählt kein neues Ziel aus, greift nicht an und sendet keine Pakete. LastTarget unterscheidet sich von LastAttack und LastStatus. Die normale Wahl self ersetzt nicht das letzte Ziel; ein explizites ClientMarkChar kann es ändern.
- Bei SetEntity bleibt die bekannte Entity.X/Y erhalten; Bei einem Artikel in einem Container könnten dies die Koordinaten des Inhalts sein. SetLand/SetStatic speichert die Welt X/Y des ausgewählten Punktes. Eine spätere Bewegung/Entfernung des Objekts verändert die gespeicherten Koordinaten nicht. Für die aktuelle Position verwenden Sie GetX/GetY(serial).
- Klare und klare Aufzeichnung, auch beim Speichern von Skripten. Das unbekannte serial erbt in einer expliziten Einstellung nicht das vorherige X/Y: Sie werden zu 0. Dies garantiert nicht, dass das Ziel auf dem Server vorhanden ist.
- Das Lesen von serial und X/Y durch separate Befehle ist nicht atomar. Für das Zielobjekt LastTile speichert das Netzwerk X/Y=65535; Dies ist keine gespeicherte Objektposition. Für Erde/statisch LastTile(1)/(2) lesen Sie die ausgewählten X/Y. lasttarget ohne Klammern ist ein integrierter Live-Wert, sofern er nicht durch eine Variable überschrieben wird.
- World.Clear-Anrufe ClearWorldState: Setzt den aktiven Rückruf, das gespeicherte Ziel und das Wiedergabepaket zurück. Ein normaler Reset speichert den Verlauf. Intern TargetLast sendet das gespeicherte Paket nur an das aktive Serverziel; Ohne Verlauf oder für einen lokalen Rückruf sendet es nichts und speichert das Ziel. Ein aktiver Client-Rückruf erhält einmal null als Stornierung: ClientTargetResponsePresent wird zu 1, wenn die Antwort leer ist. Eine abgeschlossene Auswahl wird nicht erneut benachrichtigt.
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.LastTargetX();
UO.Print("LastTargetX: " + Convert.ToString(result));Parameter und Ablauf:
- value ist das einzige Ergebnis des Befehls; HEX zeigt ID, Konvertieren.ToString ist die Koordinate. Der Anruf wählt nichts aus.
var value = UO.LastTargetX();
UO.Print("Saved value: " + Convert.ToString(value));Parameter und Ablauf:
- id – gespeichert serial. Exists prüft vor GetX/GetY, ob ein Objekt vorhanden ist. Gespeicherte und aktuelle Koordinaten können abweichen. Mit serial=0 gibt das Beispiel den ausgewählten Punkt aus, aber 0 selbst beweist nicht, dass der Punkt ausgewählt wurde.
return RunScenario();
object? RunScenario()
{
var id = UO.LastTarget();
var x = UO.LastTargetX();
var y = UO.LastTargetY();
UO.Print("Saved XY: " + Convert.ToString(x) + "," + Convert.ToString(y));
if (Truth(id != 0) && Truth(UO.Exists(id)))
{
UO.Print("Live XY: " + Convert.ToString(UO.GetX(id)) + "," + Convert.ToString(UO.GetY(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:
- Minimum/Maximum gibt den akzeptablen Bereich des Assistentenergebnisses an, nicht die API-Parameter. Der Assistent ist vollständig definiert; -1 ist ein eigenes Zeichen dafür, dass der Wert außerhalb des Bereichs liegt. Für ID speichert die Prüfung alle serial ungleich Null, einschließlich des höchstwertigen Bits, anstelle des Bereichs.
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 value = ReadTargetValue(0, 65535);
UO.Print("Checked value: " + Convert.ToString(value));
return null;
}
dynamic ReadTargetValue(dynamic minimum, dynamic maximum)
{
var value = UO.LastTargetX();
if (Truth(value < minimum) || Truth(value > maximum))
{
return -1;
}
return value;
}
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.LastTargetX. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetX:bridge.GetX(bridge.LastTarget). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastTarget:bridge.LastTarget.
Interner Implementierungscode; kein eigenständiges Skript.
public int LastTargetX() => bridge is ITargetSnapshotBridge snapshot ? snapshot.LastTargetX : bridge.GetX(bridge.LastTarget);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.LastTargetY();Liest die Y-Koordinate, die bei der letzten Auswahl des Ziels gespeichert wurde.
Es gibt keine Parameter.
int ist die gespeicherte Y-Koordinate, kein Bildschirmpixel. Vorher/nachher Löschen oder für ein unbekanntes Objekt – 0; die reale Koordinate 0 ist ebenfalls akzeptabel. Ist nicht bool. Für Erde/Statik funktioniert es auch mit LastTarget()=0.
- Keine Parameter. Schaltet das Visier nicht ein, wählt kein neues Ziel aus, greift nicht an und sendet keine Pakete. LastTarget unterscheidet sich von LastAttack und LastStatus. Die normale Wahl self ersetzt nicht das letzte Ziel; ein explizites ClientMarkChar kann es ändern.
- Bei SetEntity bleibt die bekannte Entity.X/Y erhalten; Bei einem Artikel in einem Container könnten dies die Koordinaten des Inhalts sein. SetLand/SetStatic speichert die Welt X/Y des ausgewählten Punktes. Eine spätere Bewegung/Entfernung des Objekts verändert die gespeicherten Koordinaten nicht. Für die aktuelle Position verwenden Sie GetX/GetY(serial).
- Klare und klare Aufzeichnung, auch beim Speichern von Skripten. Das unbekannte serial erbt in einer expliziten Einstellung nicht das vorherige X/Y: Sie werden zu 0. Dies garantiert nicht, dass das Ziel auf dem Server vorhanden ist.
- Das Lesen von serial und X/Y durch separate Befehle ist nicht atomar. Für das Zielobjekt LastTile speichert das Netzwerk X/Y=65535; Dies ist keine gespeicherte Objektposition. Für Erde/statisch LastTile(1)/(2) lesen Sie die ausgewählten X/Y. lasttarget ohne Klammern ist ein integrierter Live-Wert, sofern er nicht durch eine Variable überschrieben wird.
- World.Clear-Anrufe ClearWorldState: Setzt den aktiven Rückruf, das gespeicherte Ziel und das Wiedergabepaket zurück. Ein normaler Reset speichert den Verlauf. Intern TargetLast sendet das gespeicherte Paket nur an das aktive Serverziel; Ohne Verlauf oder für einen lokalen Rückruf sendet es nichts und speichert das Ziel. Ein aktiver Client-Rückruf erhält einmal null als Stornierung: ClientTargetResponsePresent wird zu 1, wenn die Antwort leer ist. Eine abgeschlossene Auswahl wird nicht erneut benachrichtigt.
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.LastTargetY();
UO.Print("LastTargetY: " + Convert.ToString(result));Parameter und Ablauf:
- value ist das einzige Ergebnis des Befehls; HEX zeigt ID, Konvertieren.ToString ist die Koordinate. Der Anruf wählt nichts aus.
var value = UO.LastTargetY();
UO.Print("Saved value: " + Convert.ToString(value));Parameter und Ablauf:
- id – gespeichert serial. Exists prüft vor GetX/GetY, ob ein Objekt vorhanden ist. Gespeicherte und aktuelle Koordinaten können abweichen. Mit serial=0 gibt das Beispiel den ausgewählten Punkt aus, aber 0 selbst beweist nicht, dass der Punkt ausgewählt wurde.
return RunScenario();
object? RunScenario()
{
var id = UO.LastTarget();
var x = UO.LastTargetX();
var y = UO.LastTargetY();
UO.Print("Saved XY: " + Convert.ToString(x) + "," + Convert.ToString(y));
if (Truth(id != 0) && Truth(UO.Exists(id)))
{
UO.Print("Live XY: " + Convert.ToString(UO.GetX(id)) + "," + Convert.ToString(UO.GetY(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:
- Minimum/Maximum gibt den akzeptablen Bereich des Assistentenergebnisses an, nicht die API-Parameter. Der Assistent ist vollständig definiert; -1 ist ein eigenes Zeichen dafür, dass der Wert außerhalb des Bereichs liegt. Für ID speichert die Prüfung alle serial ungleich Null, einschließlich des höchstwertigen Bits, anstelle des Bereichs.
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 value = ReadTargetValue(0, 65535);
UO.Print("Checked value: " + Convert.ToString(value));
return null;
}
dynamic ReadTargetValue(dynamic minimum, dynamic maximum)
{
var value = UO.LastTargetY();
if (Truth(value < minimum) || Truth(value > maximum))
{
return -1;
}
return value;
}
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.LastTargetY. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetY:bridge.GetY(bridge.LastTarget). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastTarget:bridge.LastTarget.
Interner Implementierungscode; kein eigenständiges Skript.
public int LastTargetY() => bridge is ITargetSnapshotBridge snapshot ? snapshot.LastTargetY : bridge.GetY(bridge.LastTarget);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.LastTile();
int UO.LastTile(object? index);Liest das zuletzt gespeicherte Kachelziel.
-
index- Optional int 0..3: 0=graphic, 1=X, 2=Y, 3=Z. Außerhalb des Bereichs – 0. Ohne Index wird die Zeile des gesamten Datensatzes zurückgegeben.
Ohne Argumente string „graphic X Y Z“ mit Dezimalfeldern; mit Index - int eines Feldes. Der fehlende/kurze Eintrag wird mit Nullen aufgefüllt.
- NormalizeLastTile ergänzt die fehlenden Felder auf vier. Die Zeile enthält nicht map/hue/serial. Der Wert 0 kann ein echtes graphic/Koordinate oder kein Feld bedeuten.
- Der Befehl liest nur das gespeicherte Kachelziel; erstellt kein Ziel und wählt keine neue Zelle aus. WaitTargetTile("lasttile") verwendet eine separate Datensatzpräsenzprüfung.
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.LastTile();
UO.Print("LastTile: " + Convert.ToString(result));Parameter und Ablauf:
- Liest das zuletzt gespeicherte Kachelziel.
UO.Print(UO.LastTile());Parameter und Ablauf:
- NormalizeLastTile ergänzt die fehlenden Felder auf vier. Die Zeile enthält nicht map/hue/serial. Der Wert 0 kann ein echtes graphic/Koordinate oder kein Feld bedeuten.
return RunScenario();
object? RunScenario()
{
UO.Print(UO.LastTile(1));
UO.Print(UO.LastTile(2));
UO.Print(UO.LastTile(3));
return null;
}Parameter und Ablauf:
- Der Befehl liest nur das gespeicherte Kachelziel; erstellt kein Ziel und wählt keine neue Zelle aus. WaitTargetTile("lasttile") verwendet eine separate Datensatzpräsenzprüfung.
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 graphic = UO.LastTile(0);
var x = UO.LastTile(1);
var y = UO.LastTile(2);
var z = UO.LastTile(3);
UO.Print(Convert.ToString(graphic) + " " + Convert.ToString(x) + " " + Convert.ToString(y) + " " + Convert.ToString(z));
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: string / String.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.LastTile. -
InjectionScript.Runtime.InjectionApiUO.NormalizeLastTile:NormalizeLastTile(bridge.LastTile()). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastTile:bridge.LastTile().
Interner Implementierungscode; kein eigenständiges Skript.
public string LastTile()
{
int[] tileInfo = NormalizeLastTile(bridge.LastTile());
return $"{tileInfo[0]} {tileInfo[1]} {tileInfo[2]} {tileInfo[3]}";
}Parameter: index (Any)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.LastTile. -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(index). -
InjectionScript.Runtime.InjectionApiUO.NormalizeLastTile:NormalizeLastTile(bridge?.LastTile()).
Interner Implementierungscode; kein eigenständiges Skript.
public int LastTile(InjectionValue index)
{
var i = NumberConversions.ToInt(index);
if (i < 0 || i > 3)
return 0;
return NormalizeLastTile(bridge?.LastTile())[i];
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Target();
void UO.Target(object? @object);
void UO.Target(object? targetKey, object? target);
void UO.Target(object? targetKey, object? target, object? targetType, object? @type, object? x, object? y, object? z);Storniert/setzt das erwartete Ziel oder sendet ein explizites Zielpaket.
-
object– Ein Argument: serial/alias wird durch WaitTargetObject platziert. Ohne Argumente - CancelTarget. -
targetKey– In den 2/7-Formen der int-Argumente der ID-Zielabfrage, normalerweise UO.TargetID(). Es wird direkt an das Paket übergeben und ist kein Tastendruck. -
target– Form 2: serial/alias oder „lasttile“. Form 7: serial Objekt; „ground“ hinterlässt serial=0. -
targetType– 7-Formular nur: Protokolltypziel, normalerweise 0-Objekt, 1-Kachel. Reduzierbar auf byte. -
type- 7 nur Form: graphic und Weltkoordinaten für Kachel/unbekanntes Objekt; graphic/X/Y werden auf ushort, Z auf sbyte reduziert. Ersetzt diese bei einer bekannten Entitätsbrücke durch die tatsächlichen Entitätsfelder. -
x- 7 nur Form: graphic und Weltkoordinaten für Kachel/unbekanntes Objekt; graphic/X/Y werden auf ushort, Z auf sbyte reduziert. Ersetzt diese bei einer bekannten Entitätsbrücke durch die tatsächlichen Entitätsfelder. -
y- 7 nur Form: graphic und Weltkoordinaten für Kachel/unbekanntes Objekt; graphic/X/Y werden auf ushort, Z auf sbyte reduziert. Ersetzt diese bei einer bekannten Entitätsbrücke durch die tatsächlichen Entitätsfelder. -
z- 7 nur Form: graphic und Weltkoordinaten für Kachel/unbekanntes Objekt; graphic/X/Y werden auf ushort, Z auf sbyte reduziert. Ersetzt diese bei einer bekannten Entitätsbrücke durch die tatsächlichen Entitätsfelder.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- Formulare ohne/eins-Argumente gehen entlang ExecuteLegacyManualAlias und steuern die Warteschlange. Formulare 2/7 rufen Target direkt auf und senden Send_TargetObject, nicht die Warteschlange des nächsten Ziels.
- In der Form 2 übernimmt „lasttile“ das graphic/X/Y/Z der gespeicherten Zielkachel; Bei Abwesenheit wird eine Meldung angezeigt. Bei einem unbekannten Objektalias wird ebenfalls eine Meldung angezeigt. Die Form 7 mit targetType=0 versucht serial aufzulösen; andere Typen lassen serial=0.
- Bridge.Target überprüft den aktiven Cursor/die Übereinstimmung mit targetKey nicht; Übergeben Sie den Strom ID. Verwenden Sie nicht den alten Schlüssel aus der vorherigen Anfrage. Der Anruf wartet nicht darauf, vom Server angenommen zu werden.
- Explizite Formen der 2/7-Argumente senden das Paket direkt: negatives serial wird zu 0, targetKey wird zu uint reduziert; Dieser Zweig löscht nicht den lokalen Cursor/die lokale Warteschlange oder aktualisiert TicksTarget. TargetToObject/TargetToTile verwenden Sie einen anderen Weg für das aktive Ziel des Klienten.
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.Target");
UO.Target();Parameter und Ablauf:
- Storniert/setzt das erwartete Ziel oder sendet ein explizites Zielpaket.
UO.Target("self");
UO.Print(UO.Waiting());
UO.Target();Parameter und Ablauf:
- Formulare ohne/eins-Argumente gehen entlang ExecuteLegacyManualAlias und steuern die Warteschlange. Formulare 2/7 rufen Target direkt auf und senden Send_TargetObject, nicht die Warteschlange des nächsten Ziels.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.TargetPresent()))
{
UO.Target(UO.TargetID(), "self");
}
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.Target überprüft den aktiven Cursor/die Übereinstimmung mit targetKey nicht; Übergeben Sie den Strom ID. Verwenden Sie nicht den alten Schlüssel aus der vorherigen Anfrage. Der Anruf wartet nicht darauf, vom Server angenommen 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()
{
if (Truth(UO.TargetPresent()))
{
UO.Target(UO.TargetID(), "ground", 1, 0, UO.GetX(), UO.GetY(), UO.GetZ());
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.WaitTargetObject:WaitTargetObject(arguments[0].ToString()). -
InjectionScript.Runtime.InjectionValue.ToString:arguments[0].ToString(). -
InjectionScript.Runtime.InjectionApiUO.CancelTarget:CancelTarget().
Interner Implementierungscode; kein eigenständiges Skript.
case "target":
if (arguments.Length > 0) WaitTargetObject(arguments[0].ToString());
else CancelTarget();
break;Parameter: object (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.WaitTargetObject:WaitTargetObject(arguments[0].ToString()). -
InjectionScript.Runtime.InjectionValue.ToString:arguments[0].ToString(). -
InjectionScript.Runtime.InjectionApiUO.CancelTarget:CancelTarget().
Interner Implementierungscode; kein eigenständiges Skript.
case "target":
if (arguments.Length > 0) WaitTargetObject(arguments[0].ToString());
else CancelTarget();
break;Parameter: targetKey (Any), target (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.Target. -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(targetKey). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastTile:bridge.LastTile(). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Target:bridge.Target(key, 0, 1, tile[0], tile[1], tile[2], tile[3]). -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage("UO.Target: lasttile is unavailable"). -
InjectionScript.Runtime.InjectionApiUO.TryGetObject:TryGetObject(target, out int serial).
Interner Implementierungscode; kein eigenständiges Skript.
public void Target(InjectionValue targetKey, InjectionValue target)
{
int key = NumberConversions.ToInt(targetKey);
string selector = target.Kind == InjectionValueKind.String ? target.String : string.Empty;
if (selector.Equals("lasttile", StringComparison.OrdinalIgnoreCase))
{
int[] tile = bridge.LastTile() ?? Array.Empty<int>();
if (tile.Length >= 4)
bridge.Target(key, 0, 1, tile[0], tile[1], tile[2], tile[3]);
else
SystemMessage("UO.Target: lasttile is unavailable");
return;
}
if (TryGetObject(target, out int serial))
bridge.Target(key, serial, 0, 0, 0, 0, 0);
else
SystemMessage($"UO.Target: invalid target '{selector}'");
}Parameter: targetKey (Any), target (Any), targetType (Any), type (Any), x (Any), y (Any), z (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.Target. -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(targetType). -
InjectionScript.Runtime.InjectionApiUO.TryGetObject:TryGetObject(target, out serial). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Target:bridge.Target ( NumberConversions.ToInt(targetKey), serial, targetTypeValue, ResolveType(type), NumberConversions.ToInt(x), NumberConversions.ToInt(y), NumberConversions.ToInt(z) ). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(type).
Interner Implementierungscode; kein eigenständiges Skript.
public void Target
(
InjectionValue targetKey,
InjectionValue target,
InjectionValue targetType,
InjectionValue type,
InjectionValue x,
InjectionValue y,
InjectionValue z
)
{
int targetTypeValue = NumberConversions.ToInt(targetType);
string selector = target.Kind == InjectionValueKind.String ? target.String : string.Empty;
int serial = 0;
if (targetTypeValue == 0 && !selector.Equals("ground", StringComparison.OrdinalIgnoreCase))
TryGetObject(target, out serial);
bridge.Target
(
NumberConversions.ToInt(targetKey),
serial,
targetTypeValue,
ResolveType(type),
NumberConversions.ToInt(x),
NumberConversions.ToInt(y),
NumberConversions.ToInt(z)
);
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.TargetByResource(object? objID, object? resource);Sucht nach einem Gegenstand bei graphic, bereitet ein bestimmtes Ziel vor und verwendet den gefundenen Gegenstand.
-
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. -
resource– Zu durchsuchendes Grafik-/type-Element, ResolveType zulässig; Dies ist nicht die Ressourcenfeldnummer von Pascal API.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- In dieser Implementierung sucht FindType(ResolveType(Ressource), -1, 0, -1, true) nach einem Element. Wenn gefunden != 0, zuerst Bridge.WaitTargetObject(ObjID), dann Bridge.UseObject(gefunden).
- Es wurde nichts gefunden - nichts ist installiert oder verwendet. Der Befehl sendet kein separates Ressourcenzielpaket; Scope=0 wählt Gegenstände mit RootContainer=Player.Serial aus, einschließlich Inventarinhalten/Ausrüstung; recursive=true wird an Bridge übergeben, aber dieser Scope0-Zweig selbst verwendet RootContainer.
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.TargetByResource");
UO.TargetByResource("self", "0x0E21");Parameter und Ablauf:
- Sucht nach einem Gegenstand bei graphic, bereitet ein bestimmtes Ziel vor und verwendet den gefundenen Gegenstand.
UO.TargetByResource("self", "0x0E21");Parameter und Ablauf:
- In dieser Implementierung sucht FindType(ResolveType(Ressource), -1, 0, -1, true) nach einem Element. Wenn gefunden != 0, zuerst Bridge.WaitTargetObject(ObjID), dann Bridge.UseObject(gefunden).
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Exists("lasttarget")))
{
UO.TargetByResource("lasttarget", "0x0E21");
}
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:
- Es wurde nichts gefunden - nichts ist installiert oder verwendet. Der Befehl sendet kein separates Ressourcenzielpaket; Scope=0 wählt Gegenstände mit RootContainer=Player.Serial aus, einschließlich Inventarinhalten/Ausrüstung; recursive=true wird an Bridge übergeben, aber dieser Scope0-Zweig selbst verwendet RootContainer.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.TargetByResource("self", "0x0E21");
UO.Print(UO.Waiting());
UO.CancelWaitTarget();
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), resource (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.FindType:bridge.FindType(ResolveType(arguments[1]), -1, 0, -1, true). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[1]). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.WaitTargetObject:bridge.WaitTargetObject(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseObject:bridge.UseObject(found).
Interner Implementierungscode; kein eigenständiges Skript.
case "targetbyresource":
{
int found = bridge.FindType(ResolveType(arguments[1]), -1, 0, -1, true);
if (found != 0) { bridge.WaitTargetObject(Arg(0)); bridge.UseObject(found); }
return InjectionValue.Unit;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.TargetID();Liest die ID des aktuellen Zielcursors.
Es gibt keine Parameter.
int - 32 Bit ID des Cursors, nicht serial des letzten Objekts. Wenn kein Cursor vorhanden ist, wird 0 zurückgegeben. Wenn das höchstwertige Bit gesetzt ist, ist int negativ; Int2Hex speichert seine Bits. Echtes cursorID=0 und lokaler Bereich können auch 0 ergeben: Überprüfen Sie TargetPresent auf Aktivität. In diesem Client wird die spezielle Nicht-Null-Ersetzung für die Null ID nicht verwendet.
- LastTarget/GetSerial(„lasttarget“) beziehen sich auf das ausgewählte Objekt, TargetID bezieht sich auf die Zielanforderung. Diese Werte können nicht untereinander ersetzt 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.TargetID();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- Es gibt keine Argumente.
- Mit Int2Hex können Sie alle Bits von ID sehen, einschließlich des höchstwertigen Bits.
if (Truth(UO.TargetPresent()))
{
UO.Print(UO.Int2Hex(UO.TargetID()));
}
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:
- Cursor – ID des Visiers, object – serial des Objekts.
- In TargetToObject wird object übergeben, nicht der Cursor.
return RunScenario();
object? RunScenario()
{
var cursor = UO.TargetID();
var targetSerial = UO.GetSerial("lasttarget");
UO.Print("Cursor: " + UO.Int2Hex(cursor));
UO.Print("Object: " + targetSerial);
return null;
}Parameter und Ablauf:
- 1000 – Wartezeitüberschreitung in Millisekunden.
- Das Vorzeichen des Auftretens ist das Ergebnis WaitForTarget; Das Cursorzeichen wird hierfür nicht überprüft.
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(UO.WaitForTarget(1000)))
{
var cursor = UO.TargetID();
UO.Print("Request: " + UO.Int2Hex(cursor));
}
else
{
UO.Print("No cursor arrived");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetTargetCursorId:bridge.GetTargetCursorId().
Interner Implementierungscode; kein eigenständiges Skript.
case "targetid": return new InjectionValue(bridge.GetTargetCursorId());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.TargetPresent();Prüft, ob im Client ein aktiver Zielauswahlcursor vorhanden ist.
Es gibt keine Parameter.
int 1 - TargetManager.IsTargeting installiert; 0 – kein aktiver Cursor. Dabei wird auch das lokale Rückrufziel berücksichtigt. Dies ist nicht serial oder der Warteschlangenstatus WaitTarget.
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.
- Liest den Zustand einmal; wartet nicht darauf, dass der Cursor erscheint.
- Um nach einer Spielaktion auf ein Server-Fadenkreuz zu warten, verwenden Sie WaitForTarget. Für das Ergebnis von lokal ClientRequest* - WaitForClientTargetResponse.
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.TargetPresent();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- Es gibt keine Argumente.
- 1 oder 0 wird angezeigt.
UO.Print(Convert.ToString(UO.TargetPresent()));Parameter und Ablauf:
- Die Bedingung wird vom aktiven Cursor überprüft.
- CancelTarget löscht in diesem Client auch vorbereitete Antworten.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.TargetPresent()))
{
UO.CancelTarget();
}
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:
- UseSkill fordert den Skill an, WaitForTarget wartet bis 3000 ms.
- TargetToObject reagiert nur auf das aktive Serverziel; Bei einem Timeout wird die Verzweigung nicht ausgeführt.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.UseSkill("Anatomy");
if (Truth(UO.WaitForTarget(3000)))
{
if (Truth(UO.TargetPresent()))
{
UO.TargetToObject("self");
}
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.IsTargeting:IsTargeting().
Interner Implementierungscode; kein eigenständiges Skript.
case "targetpresent": return new InjectionValue(IsTargeting());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.TargetToObject(object? objID);Reagiert sofort auf ein bereits aktives Serverzielobjekt serial.
-
objID– Seriennummer/ID eines Elements oder Zeichens, einer Zahl oder einer Hex-/Dezimalzeichenfolge, self/backpack/lasttarget/lastobject oder gespeicherter Name AddObject. Das ist nicht type. Bevor Sie auf ein benanntes Objekt einwirken, prüfen Sie Exists; Ein nicht aufgelöster Alias ergibt serial 0.
void – kein Rückgabewert. Rufen Sie eine separate Leitung an; Nicht als true/false, serial oder type verwenden. Metadaten object? für kompatible Formulare ändert das tatsächliche Ergebnis nicht void.
- Ohne einen aktiven Server-Cursor erfolgt keine Aktion und es wird keine verzögerte Antwort erstellt. Zur vorbereitenden Vorbereitung verwenden Sie WaitTargetObject/WaitTargetTile/WaitTargetXYZ.
- Lokale ClientRequest* und andere Callback-Sichtungen werden von diesem Befehl nicht verarbeitet.
- Der Server bestimmt, ob das Ziel gültig ist. Bei serial, der nicht über genügend Arbeitsspeicher verfügt, wird ID mit null Grafik-/Koordinatenfeldern gesendet.
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.TargetToObject");
UO.TargetToObject("self");Parameter und Ablauf:
- Die Parameter definieren das Zeichen selbst.
- Der zukünftigen Bereichswarteschlange wird nichts hinzugefügt.
if (Truth(UO.TargetPresent()))
{
UO.TargetToObject("self");
}
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:
- 3000 – maximale Wartezeit in Millisekunden; Die Aktion, die die Sichtung angefordert hat, muss zuvor ausgeführt werden.
- Der Befehl wird erst aufgerufen, nachdem der Anblick erscheint; Die Spielaktion kann dann mit einem Serverausfall enden.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.WaitForTarget(3000)))
{
UO.TargetToObject("self");
}
else
{
UO.Print("Target timeout");
}
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:
- CancelTarget schließt die alte Sicht und löscht die Warteschlange.
- In Ermangelung eines neuen Spielraums weckt die Herausforderung keine Vorfreude. Die Warteschlangenausgabe bleibt 0, es sei denn, ein anderes Skript hat sie geändert.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.CancelTarget();
UO.TargetToObject("self");
UO.Print("Queued: " + Convert.ToString(UO.IsWaitTargetActive()));
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: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TargetToObject:bridge.TargetToObject(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Interner Implementierungscode; kein eigenständiges Skript.
case "targettoobject": bridge.TargetToObject(Arg(0)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.TargetToTile(object? tile, object? x, object? y, object? z);Reagiert sofort mit Kachelkoordinaten auf ein bereits aktives Serverziel.
-
tile– Grafik/type Kachel, 0..65535, nicht serial. Null gibt ein Koordinatenziel ohne angegebene Grafik an. -
x– Welt-X-Koordinate auf der aktuellen Karte, 0..65535. Dies ist kein Bildschirmpixel oder eine Gump-Koordinate. -
y– Welt-Y-Koordinate auf der aktuellen Karte, 0..65535. -
z– Höhe des Spielpunkts, für ein Netzwerkziel verwenden Sie -128..127. Dabei handelt es sich nicht um einen Boden oder eine Geräteschicht.
void – kein Rückgabewert. Rufen Sie eine separate Leitung an; Nicht als true/false, serial oder type verwenden. Metadaten object? für kompatible Formulare ändert das tatsächliche Ergebnis nicht void.
- Ohne einen aktiven Server-Cursor erfolgt keine Aktion und es wird keine verzögerte Antwort erstellt. Zur vorbereitenden Vorbereitung verwenden Sie WaitTargetObject/WaitTargetTile/WaitTargetXYZ.
- Lokale ClientRequest* und andere Callback-Sichtungen werden von diesem Befehl nicht verarbeitet.
- Ein Ziel mit graphic=0 erfordert ein Fadenkreuz; Das Objektvisier nimmt den Boden nicht an.
Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.
Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.
Der Befehl steht in einer eigenen Anweisung. Die Meldung davor zeigt den Beginn des Aufrufs und bestätigt keine Serveraktion.
UO.Print("Calling UO.TargetToTile");
UO.TargetToTile(0x0CCA, 1445, 1690, 0);Parameter und Ablauf:
- Die Parameter geben ein Beispiel für einen realen Punkt: Ersetzen Sie die Koordinaten und graphic durch die gewünschten Werte.
- Der zukünftigen Bereichswarteschlange wird nichts hinzugefügt.
if (Truth(UO.TargetPresent()))
{
UO.TargetToTile(0x0CCA, 1445, 1690, 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:
- 3000 – maximale Wartezeit in Millisekunden; Die Aktion, die die Sichtung angefordert hat, muss zuvor ausgeführt werden.
- Der Befehl wird erst aufgerufen, nachdem der Anblick erscheint; Die Spielaktion kann dann mit einem Serverausfall enden.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.WaitForTarget(3000)))
{
UO.TargetToTile(0x0CCA, 1445, 1690, 0);
}
else
{
UO.Print("Target timeout");
}
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:
- CancelTarget schließt die alte Sicht und löscht die Warteschlange.
- In Ermangelung eines neuen Spielraums weckt die Herausforderung keine Vorfreude. Die Warteschlangenausgabe bleibt 0, es sei denn, ein anderes Skript hat sie geändert.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.CancelTarget();
UO.TargetToTile(0x0CCA, 1445, 1690, 0);
UO.Print("Queued: " + Convert.ToString(UO.IsWaitTargetActive()));
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: tile (Any), x (Any), y (Any), z (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TargetToTile:bridge.TargetToTile(Arg(0), Arg(1), Arg(2), Arg(3)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Interner Implementierungscode; kein eigenständiges Skript.
case "targettotile":
bridge.TargetToTile(Arg(0), Arg(1), Arg(2), Arg(3)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.TargetToXYZ(object? x, object? y, object? z);Reagiert sofort mit Kachelkoordinaten auf ein bereits aktives Serverziel.
-
x– Welt-X-Koordinate auf der aktuellen Karte, 0..65535. Dies ist kein Bildschirmpixel oder eine Gump-Koordinate. -
y– Welt-Y-Koordinate auf der aktuellen Karte, 0..65535. -
z– Höhe des Spielpunkts, für ein Netzwerkziel verwenden Sie -128..127. Dabei handelt es sich nicht um einen Boden oder eine Geräteschicht.
void – kein Rückgabewert. Rufen Sie eine separate Leitung an; Nicht als true/false, serial oder type verwenden. Metadaten object? für kompatible Formulare ändert das tatsächliche Ergebnis nicht void.
- Ohne einen aktiven Server-Cursor erfolgt keine Aktion und es wird keine verzögerte Antwort erstellt. Zur vorbereitenden Vorbereitung verwenden Sie WaitTargetObject/WaitTargetTile/WaitTargetXYZ.
- Lokale ClientRequest* und andere Callback-Sichtungen werden von diesem Befehl nicht verarbeitet.
- Ein Ziel mit graphic=0 erfordert ein Fadenkreuz; Das Objektvisier nimmt den Boden nicht an.
Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.
Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.
Der Befehl steht in einer eigenen Anweisung. Die Meldung davor zeigt den Beginn des Aufrufs und bestätigt keine Serveraktion.
UO.Print("Calling UO.TargetToXYZ");
UO.TargetToXYZ(1445, 1690, 0);Parameter und Ablauf:
- Die Parameter geben ein Beispiel für einen realen Punkt: Ersetzen Sie die Koordinaten und graphic durch die gewünschten Werte.
- Der zukünftigen Bereichswarteschlange wird nichts hinzugefügt.
if (Truth(UO.TargetPresent()))
{
UO.TargetToXYZ(1445, 1690, 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:
- 3000 – maximale Wartezeit in Millisekunden; Die Aktion, die die Sichtung angefordert hat, muss zuvor ausgeführt werden.
- Der Befehl wird erst aufgerufen, nachdem der Anblick erscheint; Die Spielaktion kann dann mit einem Serverausfall enden.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.WaitForTarget(3000)))
{
UO.TargetToXYZ(1445, 1690, 0);
}
else
{
UO.Print("Target timeout");
}
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:
- CancelTarget schließt die alte Sicht und löscht die Warteschlange.
- In Ermangelung eines neuen Spielraums weckt die Herausforderung keine Vorfreude. Die Warteschlangenausgabe bleibt 0, es sei denn, ein anderes Skript hat sie geändert.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.CancelTarget();
UO.TargetToXYZ(1445, 1690, 0);
UO.Print("Queued: " + Convert.ToString(UO.IsWaitTargetActive()));
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), z (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TargetToTile:bridge.TargetToTile(0, Arg(0), Arg(1), Arg(2)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Interner Implementierungscode; kein eigenständiges Skript.
case "targettoxyz":
bridge.TargetToTile(0, Arg(0), Arg(1), Arg(2)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Targeting();Prüft, ob im Client ein aktiver Zielauswahlcursor vorhanden ist.
Es gibt keine Parameter.
int 1 - TargetManager.IsTargeting installiert; 0 – kein aktiver Cursor. Dabei wird auch das lokale Rückrufziel berücksichtigt. Dies ist nicht serial oder der Warteschlangenstatus WaitTarget.
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.
- Liest den Zustand einmal; wartet nicht darauf, dass der Cursor erscheint.
- Um nach einer Spielaktion auf ein Server-Fadenkreuz zu warten, verwenden Sie WaitForTarget. Für das Ergebnis von lokal ClientRequest* - WaitForClientTargetResponse.
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.Targeting();
UO.Print("Targeting: " + Convert.ToString(result));Parameter und Ablauf:
- Es gibt keine Argumente.
- 1 oder 0 wird angezeigt.
UO.Print(Convert.ToString(UO.Targeting()));Parameter und Ablauf:
- Die Bedingung wird vom aktiven Cursor überprüft.
- CancelTarget löscht in diesem Client auch vorbereitete Antworten.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Targeting()))
{
UO.CancelTarget();
}
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:
- UseSkill fordert den Skill an, WaitForTarget wartet bis 3000 ms.
- TargetToObject reagiert nur auf das aktive Serverziel; Bei einem Timeout wird die Verzweigung nicht ausgeführt.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.UseSkill("Anatomy");
if (Truth(UO.WaitForTarget(3000)))
{
if (Truth(UO.Targeting()))
{
UO.TargetToObject("self");
}
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.IsTargeting. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsTargeting:bridge.IsTargeting().
Interner Implementierungscode; kein eigenständiges Skript.
public int IsTargeting() => bridge.IsTargeting();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.TicksTarget();Liest den letzten Bereitstellungszeitstempel des Ziels über WaitTargetObject/WaitTargetTile und deren aufrufende Shells.
Es gibt keine Parameter.
int – der Wert von UO.Timer zum Zeitpunkt der Vorbereitung, in Zehntelsekunden ab Beginn der Laufzeit. Vor dem ersten derartigen Training - 0. Dies ist eine Markierung, keine Wartezeit, keine Millisekunde und kein ID-Ziel.
- Sofort TargetToObject/TargetToTile/TargetToXYZ Bereiten Sie die Warteschlange nicht vor und aktualisieren Sie diese Markierung nicht.
- Einige Suchbefehle geben die Antwort direkt über die Brücke weiter; TicksTarget ist nicht die universelle Zeit einer Zieländerung.
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.TicksTarget();
UO.Print("TicksTarget: " + Convert.ToString(result));Parameter und Ablauf:
- Es gibt keine Argumente; WaitTargetSelf aktualisiert die Höhe.
- Der Stempel wird in Zehntelsekunden gemessen.
UO.WaitTargetSelf();
var stamp = UO.TicksTarget();
UO.Print(Convert.ToString(stamp));
UO.CancelWaitTarget();Parameter und Ablauf:
- UO.Wait=250 Millisekunden.
- Aufgrund der diskreten Natur der Markierung ist die verstrichene Zeit normalerweise 2 oder 3 und nicht 250.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.WaitTargetObject("self");
await Delay(250);
var elapsed = UO.Timer() - UO.TicksTarget();
UO.Print("Tenths: " + Convert.ToString(elapsed));
UO.CancelWaitTarget();
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Parameter und Ablauf:
- selfId - int serial deines Charakters.
- Die numerische Form aktualisiert die Markierung wie die Zeichenfolgenform; TicksTarget hat keine Parameter.
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 selfId = UO.Hex2Int(UO.GetSerial("self"));
UO.WaitTargetObject(selfId);
UO.Print(Convert.ToString(UO.TicksTarget()));
UO.CancelWaitTarget();
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 TicksTarget() => ticksTarget;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.WaitForClientTargetResponse(object? maxWaitTimeMS);Wartet darauf, dass die lokale Auswahl ClientRequestObjectTarget/ClientRequestTileTarget abgeschlossen ist.
-
maxWaitTimeMS– Maximale Zeit in Millisekunden. 0 und negative Werte ergeben einen Scheck, ohne auf unbestimmte Zeit zu warten.
int 1 – Antwort wurde bereits empfangen, einschließlich Stornierung; 0 – Timeout ist abgelaufen. Überprüfen Sie für 1 weiterhin die Länge von ClientTargetResponse. Bei 0 schließt sich der Cursor selbst nicht automatisch.
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 Warten erfolgt im Skript-Thread in Abständen von bis zu 25 ms und wird durch Stoppen des Skripts unterbrochen.
- Ohne das vorherige ClientRequest* startet die neue Auswahl nicht.
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.WaitForClientTargetResponse(5000);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- 5000 – Klick-Wartezeitüberschreitung in Millisekunden. Die neue Abfrage setzt das vorherige Ergebnis zurück.
- Ein Array aus fünf Feldern zeigt das ausgewählte Objekt an. Ergebnis[0] ist serial, nicht type.
UO.ClientRequestObjectTarget();
if (Truth(UO.WaitForClientTargetResponse(5000)))
{
var result = UO.ClientTargetResponse();
if (Truth(ArrayLength(result) == 5))
{
UO.Print("Serial: " + UO.Int2Hex(result[0]));
}
else
{
UO.Print("Selection cancelled");
}
}
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:
- Ergebnis[1] - graphic, Ergebnis[2]/[3]/[4] - X/Y/Z. Das Weltplättchen serial hat ein Ergebnis[0] gleich 0.
- Typ, Koordinaten und serial sind separate Felder. In diesem Array gibt es keinen statischen Layer-Index.
return RunScenario();
object? RunScenario()
{
UO.ClientRequestTileTarget();
if (Truth(UO.WaitForClientTargetResponse(5000)))
{
var result = UO.ClientTargetResponse();
if (Truth(ArrayLength(result) == 5))
{
UO.Print("Type: " + UO.Int2Hex(result[1]));
UO.Print(Convert.ToString(result[2]) + "," + Convert.ToString(result[3]) + "," + Convert.ToString(result[4]));
}
}
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:
- Der Timeout wird in Millisekunden angegeben. Ein erfolgreiches Warten bedeutet eine Antwort, deren Inhalt gesondert geprüft werden muss.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.ClientRequestTileTarget();
int ready = UO.WaitForClientTargetResponse(3000);
if (ready == 0)
{
UO.CancelTarget();
UO.Print("Selection timed out");
return false;
}
var response = (object? [])UO.ClientTargetResponse();
if (response.Length != 5)
return false;
UO.Print($"Tile coordinates: {response[2]}, {response[3]}, {response[4]}");
return true;
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: maxWaitTimeMS (Any)
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.WaitForClientTargetResponse:bridge.WaitForClientTargetResponse(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Interner Implementierungscode; kein eigenständiges Skript.
case "waitforclienttargetresponse": return new InjectionValue(bridge.WaitForClientTargetResponse(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.WaitForTarget(object? maxWaitTimeMS);Wartet darauf, dass der aktive Zielcursor innerhalb des Timeouts erscheint.
-
maxWaitTimeMS– Maximale Wartezeit in Millisekunden. Null- und negative Werte ergeben eine sofortige Prüfung; Es ist kein endloses Warten.
int 1 — Der Cursor war während des Tests aktiv; 0 — Timeout ohne Cursor. Auch das lokale Rückrufziel erfüllt diesen Test. Dies ist keine Bestätigung der Verwendung des vorbereiteten Produkts WaitTarget: Die automatische Reaktion kann den Cursor bereits vor der Überprüfung aufbrauchen.
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.
- Die Prüfung erfolgt mit Pausen von bis zu 25 ms im Skript-Thread und kann durch Stoppen unterbrochen werden.
- Die Methode selbst erstellt kein Fadenkreuz und wählt kein Ziel aus.
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.WaitForTarget(3000);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- MaxWaitTimeMS=3000, dann wird self ausgewählt.
- WaitTargetSelf ist nicht voreingestellt: Dieses Beispiel antwortet explizit.
UO.UseSkill("Anatomy");
if (Truth(UO.WaitForTarget(3000)))
{
UO.TargetToObject("self");
}
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:
- MaxWaitTimeMS=0.
- bereit - 1 oder 0; Es gibt keine lange Pause.
return RunScenario();
object? RunScenario()
{
var ready = UO.WaitForTarget(0);
UO.Print(Convert.ToString(ready));
return null;
}Parameter und Ablauf:
- 500 – eine halbe Sekunde.
- Das Fehlen einer Sicht kann bedeuten, dass die Aktion fehlgeschlagen ist oder automatisch ausgeführt wird: Überprüfen Sie das Spielprotokoll.
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(UO.WaitForTarget(500) == 0))
{
UO.CancelWaitTarget();
UO.Print("Cursor did not arrive");
}
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: maxWaitTimeMS (Any)
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.WaitUntilTargeting:bridge.WaitUntilTargeting(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Interner Implementierungscode; kein eigenständiges Skript.
case "waitfortarget": return new InjectionValue(bridge.WaitUntilTargeting(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.WaitTarget(object? target);
void UO.WaitTarget(object? target, object? @type);
void UO.WaitTarget(object? target, object? @type, object? color);
void UO.WaitTarget(object? target, object? @type, object? color, object? distance);
void UO.WaitTarget(object? target, object? @type, object? color, object? distance, object? notoriety);
void UO.WaitTarget(object? target, object? @type, object? color, object? distance, object? notoriety, object? nearest);
void UO.WaitTarget(object? target, object? @type, object? color, object? distance, object? notoriety, object? nearest, object? maxZ);Platziert serial in der Warteschlange der nächsten Zielanforderung oder wählt mithilfe von Filtern ein Ziel aus.
-
target– Positiv erlaubt serial/alias wird direkt gesetzt, andere Parameter werden ignoriert. 0 oder -1 ermöglicht die Suche; Ein weiterer numerischer Wächter löscht das nächste Ziel. -
type– Optional graphic/type oder Typmaske; -1 ohne Einschränkung. Benannte Typen werden durch ResolveType/ParseTypeMask aufgelöst. -
color- Optional hue: -1 oder 0xFFFF ohne Einschränkung. -
distance– Optionaler maximaler Abstand in Zellen; Der Standardwert ist GetFindDistance. Das Parsen von ResolveCompactDistance ermöglicht spezielle Werte entsprechend der Sucheinstellung. -
notoriety– Optionale Zahlen-/Maskenbekanntheit. Eine nicht leere Maske schränkt mobile Kandidaten ein; Ohne sie werden Mobiltelefone und world-Artikel berücksichtigt. -
nearest– Optional bool, Standard true: Sortiert nach Entfernung, dann serial. -
maxZ– Optionale maximale Bauchmuskeln (Z-selfZ), Standard GetFindVertical.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- Bei der Suche werden self, serial=0, reguläre Ignorierlisten und ausgewählte benannte type-Filter ausgeschlossen; Duplikate werden entfernt. Direkt positiv serial passiert diese Filter nicht.
- Die Suche liest nur geladene Objekte. Keine Übereinstimmungen/ungültige Sentinel-Nachricht und CancelNextTarget. Eine erfolgreiche Auswahl ruft WaitTargetObject auf und aktualisiert TicksTarget. WaitTarget selbst verwendet das Element nicht, öffnet das Ziel nicht und wartet nicht darauf, dass der Server es verarbeitet.
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.WaitTarget");
UO.WaitTarget("self");Parameter und Ablauf:
- Platziert serial in der Warteschlange der nächsten Zielanforderung oder wählt mithilfe von Filtern ein Ziel aus.
UO.WaitTarget("self");Parameter und Ablauf:
- Bei der Suche werden self, serial=0, reguläre Ignorierlisten und ausgewählte benannte type-Filter ausgeschlossen; Duplikate werden entfernt. Direkt positiv serial passiert diese Filter nicht.
return RunScenario();
object? RunScenario()
{
UO.WaitTarget(0, -1, -1, 10, 3, true, 20);
return null;
}Parameter und Ablauf:
- Die Suche liest nur geladene Objekte. Keine Übereinstimmungen/ungültige Sentinel-Nachricht und CancelNextTarget. Eine erfolgreiche Auswahl ruft WaitTargetObject auf und aktualisiert TicksTarget. WaitTarget selbst verwendet das Element nicht, öffnet das Ziel nicht und wartet nicht darauf, dass der Server es verarbeitet.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.WaitTarget("lasttarget");
UO.Print(UO.Waiting());
UO.CancelWaitTarget();
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: target (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitTarget]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitTarget:CompactWaitTarget(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 =>
{
CompactWaitTarget(values);
return InjectionValue.Unit;
}Parameter: target (Any), type (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitTarget]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitTarget:CompactWaitTarget(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 =>
{
CompactWaitTarget(values);
return InjectionValue.Unit;
}Parameter: target (Any), type (Any), color (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitTarget]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitTarget:CompactWaitTarget(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 =>
{
CompactWaitTarget(values);
return InjectionValue.Unit;
}Parameter: target (Any), type (Any), color (Any), distance (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitTarget]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitTarget:CompactWaitTarget(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 =>
{
CompactWaitTarget(values);
return InjectionValue.Unit;
}Parameter: target (Any), type (Any), color (Any), distance (Any), notoriety (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitTarget]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitTarget:CompactWaitTarget(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 =>
{
CompactWaitTarget(values);
return InjectionValue.Unit;
}
UO.WaitTarget(target, type, color, distance, notoriety, nearest) — UO.WaitTarget(Any,Any,Any,Any,Any,Any)
Parameter: target (Any), type (Any), color (Any), distance (Any), notoriety (Any), nearest (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitTarget]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitTarget:CompactWaitTarget(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 =>
{
CompactWaitTarget(values);
return InjectionValue.Unit;
}
UO.WaitTarget(target, type, color, distance, notoriety, nearest, maxZ) — UO.WaitTarget(Any,Any,Any,Any,Any,Any,Any)
Parameter: target (Any), type (Any), color (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitTarget]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitTarget:CompactWaitTarget(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 =>
{
CompactWaitTarget(values);
return InjectionValue.Unit;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.WaitTargetGround(object? @type);
void UO.WaitTargetGround(object? @type, object? color);Sucht nach einem Element bei graphic/hue und platziert es in der Warteschlange des nächsten Ziels.
-
type– Grafik/type int, Hex-Zeichenfolge oder Satz mit dem Namen type. Dies ist kein serial-Artikel. -
color– Optional int hue; Standard -1 – jede Farbe.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- Geltungsbereich: ground/Containerselektor 1 ohne rekursive Suche. Bridge.FindType gibt das gefundene serial zurück; wenn serial>0 Brücke.WaitTargetObject aufgerufen wird. Diese Methoden aktualisieren die Laufzeit TicksTarget nicht direkt.
- Kein Artikel – Nachricht und CancelNextTarget. Die Suche kann das allgemeine FindItem/FoundItems ändern; Der Befehl verwendet das gefundene Element nicht und wartet nicht auf den Cursor.
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.WaitTargetGround");
UO.WaitTargetGround("0x0E21");Parameter und Ablauf:
- Sucht nach einem Element bei graphic/hue und platziert es in der Warteschlange des nächsten Ziels.
UO.WaitTargetGround("0x0E21");Parameter und Ablauf:
- Geltungsbereich: ground/Containerselektor 1 ohne rekursive Suche. Bridge.FindType gibt das gefundene serial zurück; wenn serial>0 Brücke.WaitTargetObject aufgerufen wird. Diese Methoden aktualisieren die Laufzeit TicksTarget nicht direkt.
return RunScenario();
object? RunScenario()
{
UO.WaitTargetGround("0x0E21", -1);
return null;
}Parameter und Ablauf:
- Kein Artikel – Nachricht und CancelNextTarget. Die Suche kann das allgemeine FindItem/FoundItems ändern; Der Befehl verwendet das gefundene Element nicht und wartet nicht auf den Cursor.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.WaitTargetGround("0x0E21", -1);
UO.Print(UO.Waiting());
UO.CancelWaitTarget();
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: type (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.WaitTargetGround. -
InjectionScript.Runtime.InjectionApiUO.WaitTargetGround:WaitTargetGround(type, new InjectionValue(-1)).
Interner Implementierungscode; kein eigenständiges Skript.
public void WaitTargetGround(InjectionValue type) => WaitTargetGround(type, new InjectionValue(-1));Parameter: type (Any), color (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.WaitTargetGround. -
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.SystemMessage:SystemMessage("No ground item found. Next target request will be canceled"). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CancelNextTarget:bridge.CancelNextTarget(). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.WaitTargetObject:bridge.WaitTargetObject(item).
Interner Implementierungscode; kein eigenständiges Skript.
public void WaitTargetGround(InjectionValue type, InjectionValue color)
{
int item = bridge.FindType(ResolveType(type), NumberConversions.ToInt(color), 1, -1, false);
if (item <= 0)
{
SystemMessage("No ground item found. Next target request will be canceled");
bridge.CancelNextTarget();
}
else
bridge.WaitTargetObject(item);
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.WaitTargetLast();Bereitet über den Alias lasttarget eine Antwort an das nächste Serverziel vor.
Es gibt keine Parameter.
void – kein Rückgabewert. Rufen Sie eine separate Leitung an; Nicht als true/false, serial oder type verwenden. Metadaten object? für kompatible Formulare ändert das tatsächliche Ergebnis nicht void.
- Das Team bereitet lediglich eine Antwort vor: Es verwendet nicht den Gegenstand, die Fertigkeit oder den Zauber selbst. Das nächste Serverziel erhält das vorbereitete Ziel bei der Verarbeitung des Client-Frames.
- Aufeinanderfolgende Anrufe bilden eine gemeinsame Client-Warteschlange. Objekte und Koordinatenziele werden einzeln verarbeitet; lokale Auswahlfenster ClientRequest*/Info/container verbrauchen es nicht.
- CancelWaitTarget löscht die Warteschlange. TerminateAll reinigt es vollständig; Durch das Stoppen einer noch laufenden Prozedur werden auch die eigenen ausstehenden Antworten ungültig. Das Abschließen eines kurzen Vorgangs führt normalerweise nicht zum Abbruch des vorbereiteten Ziels.
- Das Senden einer Antwort garantiert keine Aktion auf dem Server: Es überprüft die Reichweite, die Zugänglichkeit des Objekts, die Sichtbarkeit und die Aktionsregeln. Zur Kontrolle nutzen Sie das Spielergebnis und das Protokoll.
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.WaitTargetLast");
UO.WaitTargetLast();Parameter und Ablauf:
- Es gibt keine Argumente; lasttarget wird verwendet.
- Der Befehl öffnet nicht das Visier und führt die Aktion selbst aus.
UO.WaitTargetLast();Parameter und Ablauf:
- lasttarget muss für diese Fertigkeit zum geladenen Charakter aufgelöst werden.
- Die Exists-Prüfung filtert ein unbekanntes Objekt heraus; Die Wahl des Objekttyps und die Gültigkeit der Fähigkeit bleiben Skriptbedingungen.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Exists("lasttarget")))
{
UO.CancelWaitTarget();
UO.WaitTargetLast();
UO.UseSkill("Anatomy");
}
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:
- IsWaitTargetActive prüft die Antwortwarteschlange.
- CancelWaitTarget hebt die Vorbereitung auf, ohne das bereits geöffnete benutzerdefinierte Fadenkreuz zu schließen.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.WaitTargetLast();
if (Truth(UO.IsWaitTargetActive()))
{
UO.CancelWaitTarget();
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.WaitTargetLast. -
InjectionScript.Runtime.InjectionApiUO.WaitTargetObject:WaitTargetObject("lasttarget").
Interner Implementierungscode; kein eigenständiges Skript.
public void WaitTargetLast() => WaitTargetObject("lasttarget");Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.WaitTargetObject(object? objID);
void UO.WaitTargetObject(object? id1, object? id2);Bereitet eine oder zwei aufeinanderfolgende serial-Antworten auf Server-Sichtungen vor.
-
objID / id1 / id2– Seriennummer/ID eines Elements oder Zeichens, einer Zahl oder einer Hex-/Dezimalzeichenfolge, self/backpack/lasttarget/lastobject oder gespeicherter Name AddObject. Das ist nicht type. Bevor Sie auf ein benanntes Objekt einwirken, prüfen Sie Exists; Ein nicht aufgelöster Alias ergibt serial 0. Ein einzelnes Argument spezifiziert ein Ziel. Die numerischen und Zeichenfolgenformen aktualisieren TicksTarget auf die gleiche Weise. -
objID– Seriennummer/ID eines Elements oder Zeichens, einer Zahl oder einer Hex-/Dezimalzeichenfolge, self/backpack/lasttarget/lastobject oder gespeicherter Name AddObject. Das ist nicht type. Bevor Sie auf ein benanntes Objekt einwirken, prüfen Sie Exists; Ein nicht aufgelöster Alias ergibt serial 0. Ein einzelnes Argument spezifiziert ein Ziel. Die numerischen und Zeichenfolgenformen aktualisieren TicksTarget auf die gleiche Weise. -
id1– Seriennummer/ID eines Elements oder Zeichens, einer Zahl oder einer Hex-/Dezimalzeichenfolge, self/backpack/lasttarget/lastobject oder gespeicherter Name AddObject. Das ist nicht type. Bevor Sie auf ein benanntes Objekt einwirken, prüfen Sie Exists; Ein nicht aufgelöster Alias ergibt serial 0. Das erste Ziel des Formulars besteht aus zwei Zeilen. -
id2– Seriennummer/ID eines Elements oder Zeichens, einer Zahl oder einer Hex-/Dezimalzeichenfolge, self/backpack/lasttarget/lastobject oder gespeicherter Name AddObject. Das ist nicht type. Bevor Sie auf ein benanntes Objekt einwirken, prüfen Sie Exists; Ein nicht aufgelöster Alias ergibt serial 0. Der zweite Zweck des Formulars besteht darin, zwei Zeilen zu verwenden. gilt für den nächsten Einzelbereich.
void – kein Rückgabewert. Rufen Sie eine separate Leitung an; Nicht als true/false, serial oder type verwenden. Metadaten object? für kompatible Formulare ändert das tatsächliche Ergebnis nicht void.
- Das Team bereitet lediglich eine Antwort vor: Es verwendet nicht den Gegenstand, die Fertigkeit oder den Zauber selbst. Das nächste Serverziel erhält das vorbereitete Ziel bei der Verarbeitung des Client-Frames.
- Aufeinanderfolgende Anrufe bilden eine gemeinsame Client-Warteschlange. Objekte und Koordinatenziele werden einzeln verarbeitet; lokale Auswahlfenster ClientRequest*/Info/container verbrauchen es nicht.
- CancelWaitTarget löscht die Warteschlange. TerminateAll reinigt es vollständig; Durch das Stoppen einer noch laufenden Prozedur werden auch die eigenen ausstehenden Antworten ungültig. Das Abschließen eines kurzen Vorgangs führt normalerweise nicht zum Abbruch des vorbereiteten Ziels.
- Das Senden einer Antwort garantiert keine Aktion auf dem Server: Es überprüft die Reichweite, die Zugänglichkeit des Objekts, die Sichtbarkeit und die Aktionsregeln. Zur Kontrolle nutzen Sie das Spielergebnis und das Protokoll.
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.WaitTargetObject");
UO.WaitTargetObject("self");Parameter und Ablauf:
- id="self" - serial deines Charakters. CancelWaitTarget entfernt zuvor vorbereitete Antworten.
- UseSkill fordert eine Fertigkeit an; Sein Servervisier erhält ein vorbereitetes Ziel.
UO.CancelWaitTarget();
UO.WaitTargetObject("self");
UO.UseSkill("Anatomy");Parameter und Ablauf:
- objectId – Beispiel serial: durch Ihr eigenes ersetzen. Dies ist nicht graphic/type.
- Hier wurde gerade das Ziel vorbereitet. Der nächste Schritt des Skripts sollte eine Aktion aufrufen, die tatsächlich ein Ziel erwartet.
return RunScenario();
object? RunScenario()
{
var objectId = 0x40001234;
if (Truth(UO.Exists(objectId)))
{
UO.WaitTargetObject(objectId);
UO.Print("Object target prepared");
}
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:
- Quelle und Ziel sind vordefinierte Namen AddObject. GetSerial gibt Zeilen zurück, die der Form id1/id2 entsprechen.
- Der erste Server-Anblick verwendet den ersten, der zweite den zweiten. Nur für Action mit zwei aufeinanderfolgenden Visierungen geeignet; Löschen Sie ein unnötiges zweites Ziel, bevor Sie eine weitere Aktion ausführen.
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 first = UO.GetSerial("source");
var second = UO.GetSerial("destination");
if (Truth(UO.Exists(first)) && Truth(UO.Exists(second)))
{
UO.CancelWaitTarget();
UO.WaitTargetObject(first, second);
}
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: objID (Any/String)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.WaitTargetObject:WaitTargetObject(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Interner Implementierungscode; kein eigenständiges Skript.
case "waittargetobject": WaitTargetObject(Arg(0)); return InjectionValue.Unit;Parameter: objID (Any/String)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.WaitTargetObject. -
InjectionScript.Runtime.InjectionApiUO.WaitTargetObject:WaitTargetObject(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Interner Implementierungscode; kein eigenständiges Skript.
public void WaitTargetObject(string id) => WaitTargetObject(GetObject(id));Parameter: id1 (String), id2 (String)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.WaitTargetObject. -
InjectionScript.Runtime.InjectionApiUO.WaitTargetObject:WaitTargetObject(GetObject(id1), GetObject(id2)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id1).
Interner Implementierungscode; kein eigenständiges Skript.
public void WaitTargetObject(string id1, string id2) => WaitTargetObject(GetObject(id1), GetObject(id2));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.WaitTargetObjectType(object? id, object? @type);
void UO.WaitTargetObjectType(object? id, object? @type, object? color);Bereitet zwei aufeinanderfolgende Ziele vor: ein bestimmtes Objekt und ein gefundenes Objekt auf dem Boden.
-
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. -
type– Grafik/type des zweiten Elements, int/hex/benannt type. -
color– Optionales hue des zweiten Fachs; -1 standardmäßig beliebig.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- Ermöglicht zuerst serial bis GetObject; die zweite sucht nach FindType(type,color,1,-1,false). Wenn beide positiv sind, wird „bridge.WaitTargetObject(first,second)“ aufgerufen. Die Reihenfolge der Ziele bleibt erhalten.
- Wenn mindestens ein Ziel fehlt/nicht positiv ist – Meldung und CancelNextTarget, werden beide Ziele nicht gesetzt. Der Zweig aktualisiert TicksTarget nicht und verwendet das Element nicht.
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.WaitTargetObjectType");
UO.WaitTargetObjectType("self", "0x0E21");Parameter und Ablauf:
- Bereitet zwei aufeinanderfolgende Ziele vor: ein bestimmtes Objekt und ein gefundenes Objekt auf dem Boden.
UO.WaitTargetObjectType("self", "0x0E21");Parameter und Ablauf:
- Ermöglicht zuerst serial bis GetObject; die zweite sucht nach FindType(type,color,1,-1,false). Wenn beide positiv sind, wird „bridge.WaitTargetObject(first,second)“ aufgerufen. Die Reihenfolge der Ziele bleibt erhalten.
return RunScenario();
object? RunScenario()
{
UO.WaitTargetObjectType("lasttarget", "0x0E21", -1);
return null;
}Parameter und Ablauf:
- Wenn mindestens ein Ziel fehlt/nicht positiv ist – Meldung und CancelNextTarget, werden beide Ziele nicht gesetzt. Der Zweig aktualisiert TicksTarget nicht und verwendet das Element 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()
{
UO.WaitTargetObjectType("self", "0x0E21", -1);
UO.Print(UO.Waiting());
UO.CancelWaitTarget();
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: id (Any), type (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.WaitTargetObjectType. -
InjectionScript.Runtime.InjectionApiUO.WaitTargetObjectType:WaitTargetObjectType(id, type, new InjectionValue(-1)).
Interner Implementierungscode; kein eigenständiges Skript.
public void WaitTargetObjectType(InjectionValue id, InjectionValue type)
=> WaitTargetObjectType(id, type, new InjectionValue(-1));Parameter: id (Any), type (Any), color (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.WaitTargetObjectType. -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id). -
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.SystemMessage:SystemMessage("UO.WaitTargetObjectType: object or ground item not found"). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CancelNextTarget:bridge.CancelNextTarget(). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.WaitTargetObject:bridge.WaitTargetObject(first, second).
Interner Implementierungscode; kein eigenständiges Skript.
public void WaitTargetObjectType(InjectionValue id, InjectionValue type, InjectionValue color)
{
int first = GetObject(id);
int second = bridge.FindType(ResolveType(type), NumberConversions.ToInt(color), 1, -1, false);
if (first <= 0 || second <= 0)
{
SystemMessage("UO.WaitTargetObjectType: object or ground item not found");
bridge.CancelNextTarget();
return;
}
bridge.WaitTargetObject(first, second);
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.WaitTargetSelf();Bereitet über den Alias self eine Antwort an das nächste Serverziel vor.
Es gibt keine Parameter.
void – kein Rückgabewert. Rufen Sie eine separate Leitung an; Nicht als true/false, serial oder type verwenden. Metadaten object? für kompatible Formulare ändert das tatsächliche Ergebnis nicht void.
- Das Team bereitet lediglich eine Antwort vor: Es verwendet nicht den Gegenstand, die Fertigkeit oder den Zauber selbst. Das nächste Serverziel erhält das vorbereitete Ziel bei der Verarbeitung des Client-Frames.
- Aufeinanderfolgende Anrufe bilden eine gemeinsame Client-Warteschlange. Objekte und Koordinatenziele werden einzeln verarbeitet; lokale Auswahlfenster ClientRequest*/Info/container verbrauchen es nicht.
- CancelWaitTarget löscht die Warteschlange. TerminateAll reinigt es vollständig; Durch das Stoppen einer noch laufenden Prozedur werden auch die eigenen ausstehenden Antworten ungültig. Das Abschließen eines kurzen Vorgangs führt normalerweise nicht zum Abbruch des vorbereiteten Ziels.
- Das Senden einer Antwort garantiert keine Aktion auf dem Server: Es überprüft die Reichweite, die Zugänglichkeit des Objekts, die Sichtbarkeit und die Aktionsregeln. Zur Kontrolle nutzen Sie das Spielergebnis und das Protokoll.
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.WaitTargetSelf");
UO.WaitTargetSelf();Parameter und Ablauf:
- Es gibt keine Argumente; self wird verwendet.
- Der Befehl öffnet nicht das Visier und führt die Aktion selbst aus.
UO.WaitTargetSelf();Parameter und Ablauf:
- self muss für diese Fertigkeit zum geladenen Charakter aufgelöst werden.
- Die Exists-Prüfung filtert ein unbekanntes Objekt heraus; Die Wahl des Objekttyps und die Gültigkeit der Fähigkeit bleiben Skriptbedingungen.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Exists("self")))
{
UO.CancelWaitTarget();
UO.WaitTargetSelf();
UO.UseSkill("Anatomy");
}
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:
- IsWaitTargetActive prüft die Antwortwarteschlange.
- CancelWaitTarget hebt die Vorbereitung auf, ohne das bereits geöffnete benutzerdefinierte Fadenkreuz zu schließen.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.WaitTargetSelf();
if (Truth(UO.IsWaitTargetActive()))
{
UO.CancelWaitTarget();
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.WaitTargetSelf. -
InjectionScript.Runtime.InjectionApiUO.WaitTargetObject:WaitTargetObject("self").
Interner Implementierungscode; kein eigenständiges Skript.
public void WaitTargetSelf() => WaitTargetObject("self");Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.WaitTargetTile(object? selector);
void UO.WaitTargetTile(object? x, object? y, object? z);
void UO.WaitTargetTile(object? @type, object? x, object? y, object? z);Bereitet ein Koordinatenziel mit optionalen Kachelgrafiken vor.
-
selector– Nur in Ein-Argument-Form: die Zeichenfolge „lasttile“, die den gespeicherten Punkt wiederholt. -
type– Grafik/type Kachel, 0..65535, nicht serial. Null gibt ein Koordinatenziel ohne angegebene Grafik an. Präsens in Form mit vier Argumenten; in der Form x/y/z ist gleich 0. -
x– Welt-X-Koordinate auf der aktuellen Karte, 0..65535. Dies ist kein Bildschirmpixel oder eine Gump-Koordinate. -
y– Welt-Y-Koordinate auf der aktuellen Karte, 0..65535. -
z– Höhe des Spielpunkts, für ein Netzwerkziel verwenden Sie -128..127. Dabei handelt es sich nicht um einen Boden oder eine Geräteschicht.
void – kein Rückgabewert. Rufen Sie eine separate Leitung an; Nicht als true/false, serial oder type verwenden. Metadaten object? für kompatible Formulare ändert das tatsächliche Ergebnis nicht void.
- Das Team bereitet lediglich eine Antwort vor: Es verwendet nicht den Gegenstand, die Fertigkeit oder den Zauber selbst. Das nächste Serverziel erhält das vorbereitete Ziel bei der Verarbeitung des Client-Frames.
- Aufeinanderfolgende Anrufe bilden eine gemeinsame Client-Warteschlange. Objekte und Koordinatenziele werden einzeln verarbeitet; lokale Auswahlfenster ClientRequest*/Info/container verbrauchen es nicht.
- CancelWaitTarget löscht die Warteschlange. TerminateAll reinigt es vollständig; Durch das Stoppen einer noch laufenden Prozedur werden auch die eigenen ausstehenden Antworten ungültig. Das Abschließen eines kurzen Vorgangs führt normalerweise nicht zum Abbruch des vorbereiteten Ziels.
- Das Senden einer Antwort garantiert keine Aktion auf dem Server: Es überprüft die Reichweite, die Zugänglichkeit des Objekts, die Sichtbarkeit und die Aktionsregeln. Zur Kontrolle nutzen Sie das Spielergebnis und das Protokoll.
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.WaitTargetTile");
UO.WaitTargetTile("lasttile");Parameter und Ablauf:
- x=1445, y=1690, z=0; das fehlende type ist gleich 0.
- Das ist der Sinn der Welt. Der Befehl bewegt den Charakter nicht und platziert den Gegenstand nicht im Gump.
UO.CancelWaitTarget();
UO.WaitTargetTile(1445, 1690, 0);Parameter und Ablauf:
- type=0x0CCA – Beispiel für Grafiken; Verwenden Sie das echte type der ausgewählten Kachel. x/y/z ist seine Weltposition.
- Grafik und Koordinaten müssen das gewünschte Kartenobjekt beschreiben; Der Server prüft die Gültigkeit des Ziels.
return RunScenario();
object? RunScenario()
{
UO.CancelWaitTarget();
UO.WaitTargetTile(0x0CCA, 1445, 1690, 0);
return null;
}Parameter und Ablauf:
- Der Selektor erlaubt nur die Zeichenfolge „lasttile“, wobei die Groß-/Kleinschreibung nicht beachtet wird. Eine andere Zeichenfolge oder Zahl in Ein-Argument-Form verursacht einen Fehler.
- Es werden die letzten Felder der Kachel in TargetManager verwendet. Vor der ersten Wahl können sie Null sein: Wählen Sie zunächst den gewünschten Punkt im Spiel aus. Mit drei oder vier Argumenten können Sie es explizit festlegen.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.WaitTargetTile("lasttile");
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: selector (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.WaitTargetTile. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastTile:bridge.LastTile(). -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage("UO.WaitTargetTile: lasttile is unavailable; next target request canceled."). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CancelNextTarget:bridge.CancelNextTarget(). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.WaitTargetTile:bridge.WaitTargetTile(tile[0], tile[1], tile[2], tile[3]). -
InjectionScript.Runtime.InjectionApiUO.Timer:Timer().
Interner Implementierungscode; kein eigenständiges Skript.
public void WaitTargetTile(InjectionValue selector)
{
string name = selector.Kind == InjectionValueKind.String
? (selector.String ?? string.Empty).Trim()
: string.Empty;
if (!name.Equals("lasttile", StringComparison.OrdinalIgnoreCase))
throw new NativeSubrutineException("UO.WaitTargetTile(one argument) accepts only 'lasttile'.");
int[] tile = bridge.LastTile() ?? Array.Empty<int>();
if (tile.Length < 4)
{
SystemMessage("UO.WaitTargetTile: lasttile is unavailable; next target request canceled.");
bridge.CancelNextTarget();
return;
}
bridge.WaitTargetTile(tile[0], tile[1], tile[2], tile[3]);
ticksTarget = Timer();
}Parameter: x (Any), y (Any), z (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.WaitTargetTile. -
InjectionScript.Runtime.InjectionApiUO.WaitTargetTile:WaitTargetTile(new InjectionValue(0), x, y, z).
Interner Implementierungscode; kein eigenständiges Skript.
public void WaitTargetTile(InjectionValue x, InjectionValue y, InjectionValue z)
=> WaitTargetTile(new InjectionValue(0), x, y, z);Parameter: type (Any), x (Any), y (Any), z (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.WaitTargetTile. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.WaitTargetTile:bridge.WaitTargetTile(ResolveType(type), NumberConversions.ToInt(x), NumberConversions.ToInt(y), NumberConversions.ToInt(z)). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(type). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(x). -
InjectionScript.Runtime.InjectionApiUO.Timer:Timer().
Interner Implementierungscode; kein eigenständiges Skript.
public void WaitTargetTile(InjectionValue type, InjectionValue x, InjectionValue y, InjectionValue z)
{
bridge.WaitTargetTile(ResolveType(type), NumberConversions.ToInt(x), NumberConversions.ToInt(y), NumberConversions.ToInt(z));
ticksTarget = Timer();
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.WaitTargetType(object? @type);
void UO.WaitTargetType(object? @type, object? color);Sucht nach einem Element bei graphic/hue und platziert es in der Warteschlange des nächsten Ziels.
-
type– Grafik/type int, Hex-Zeichenfolge oder Satz mit dem Namen type. Dies ist kein serial-Artikel. -
color– Optional int hue; Standard -1 – jede Farbe.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- Geltungsbereich: Rucksack mit rekursiver Suche. Bridge.FindType gibt das gefundene serial zurück; wenn serial>0 Brücke.WaitTargetObject aufgerufen wird. Diese Methoden aktualisieren die Laufzeit TicksTarget nicht direkt.
- Kein Artikel – Nachricht und CancelNextTarget. Die Suche kann das allgemeine FindItem/FoundItems ändern; Der Befehl verwendet das gefundene Element nicht und wartet nicht auf den Cursor.
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.WaitTargetType");
UO.WaitTargetType("0x0E21");Parameter und Ablauf:
- Sucht nach einem Element bei graphic/hue und platziert es in der Warteschlange des nächsten Ziels.
UO.WaitTargetType("0x0E21");Parameter und Ablauf:
- Geltungsbereich: Rucksack mit rekursiver Suche. Bridge.FindType gibt das gefundene serial zurück; wenn serial>0 Brücke.WaitTargetObject aufgerufen wird. Diese Methoden aktualisieren die Laufzeit TicksTarget nicht direkt.
return RunScenario();
object? RunScenario()
{
UO.WaitTargetType("0x0E21", -1);
return null;
}Parameter und Ablauf:
- Kein Artikel – Nachricht und CancelNextTarget. Die Suche kann das allgemeine FindItem/FoundItems ändern; Der Befehl verwendet das gefundene Element nicht und wartet nicht auf den Cursor.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.WaitTargetType("0x0E21", -1);
UO.Print(UO.Waiting());
UO.CancelWaitTarget();
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: type (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.WaitTargetType. -
InjectionScript.Runtime.InjectionApiUO.WaitTargetType:WaitTargetType(ResolveType(type), -1). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(type).
Interner Implementierungscode; kein eigenständiges Skript.
public void WaitTargetType(InjectionValue type) => WaitTargetType(ResolveType(type), -1);Parameter: type (Any), color (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.WaitTargetType. -
InjectionScript.Runtime.InjectionApiUO.WaitTargetType:WaitTargetType(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 void WaitTargetType(InjectionValue type, InjectionValue color)
=> WaitTargetType(ResolveType(type), NumberConversions.ToInt(color));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.WaitTargetXYZ(object? x, object? y, object? z);Bereitet ein Koordinatenziel mit graphic=0 für die nächste Serversicht vor.
-
x– Welt-X-Koordinate auf der aktuellen Karte, 0..65535. Dies ist kein Bildschirmpixel oder eine Gump-Koordinate. -
y– Welt-Y-Koordinate auf der aktuellen Karte, 0..65535. -
z– Höhe des Spielpunkts, für ein Netzwerkziel verwenden Sie -128..127. Dabei handelt es sich nicht um einen Boden oder eine Geräteschicht.
void – kein Rückgabewert. Rufen Sie eine separate Leitung an; Nicht als true/false, serial oder type verwenden. Metadaten object? für kompatible Formulare ändert das tatsächliche Ergebnis nicht void.
- Das Team bereitet lediglich eine Antwort vor: Es verwendet nicht den Gegenstand, die Fertigkeit oder den Zauber selbst. Das nächste Serverziel erhält das vorbereitete Ziel bei der Verarbeitung des Client-Frames.
- Aufeinanderfolgende Anrufe bilden eine gemeinsame Client-Warteschlange. Objekte und Koordinatenziele werden einzeln verarbeitet; lokale Auswahlfenster ClientRequest*/Info/container verbrauchen es nicht.
- CancelWaitTarget löscht die Warteschlange. TerminateAll reinigt es vollständig; Durch das Stoppen einer noch laufenden Prozedur werden auch die eigenen ausstehenden Antworten ungültig. Das Abschließen eines kurzen Vorgangs führt normalerweise nicht zum Abbruch des vorbereiteten Ziels.
- Das Senden einer Antwort garantiert keine Aktion auf dem Server: Es überprüft die Reichweite, die Zugänglichkeit des Objekts, die Sichtbarkeit und die Aktionsregeln. Zur Kontrolle nutzen Sie das Spielergebnis und das Protokoll.
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.WaitTargetXYZ");
UO.WaitTargetXYZ(1445, 1690, 0);Parameter und Ablauf:
- X=1445, Y=1690, Z=0. Grafik entspricht 0.
- Die Antwort wird gesendet, wenn das Serverkoordinatenvisier erscheint.
UO.WaitTargetXYZ(1445, 1690, 0);Parameter und Ablauf:
- X/Y/Z werden aus Ihrem eigenen Charakter gelesen.
- Dies ist ein Koordinatenziel, kein object-Ziel auf dem serial des Charakters. Für Letzteres benötigen Sie WaitTargetSelf.
return RunScenario();
object? RunScenario()
{
var x = UO.GetX();
var y = UO.GetY();
var z = UO.GetZ();
UO.WaitTargetXYZ(x, y, z);
return null;
}Parameter und Ablauf:
- Ersetzen Sie die Koordinaten durch den Extraktionspunkt. UseType sucht im Rucksack nach einer Schaufel type=0x0F39 beliebiger Farbe.
- Wenn kein geeignetes Werkzeug verfügbar ist, entfernen Sie das Präparat über CancelWaitTarget, bevor Sie mit einer anderen Aktion fortfahren.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.CancelWaitTarget();
UO.WaitTargetXYZ(1445, 1690, 0);
UO.UseType(0x0F39, -1);
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), z (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.WaitTargetTile:WaitTargetTile(new InjectionValue(0), arguments[0], arguments[1], arguments[2]).
Interner Implementierungscode; kein eigenständiges Skript.
case "waittargetxyz": WaitTargetTile(new InjectionValue(0), arguments[0], arguments[1], arguments[2]); return InjectionValue.Unit;ClassicUO — Bad Newbie & C# Scripts IDE