Skip to content

DE UO Topic targeting

Codex edited this page Oct 12, 2026 · 4 revisions

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Targeting

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.

Abschnitte

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

Alle Theme-Befehle

Ziele

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

Waiting / Abbrechen

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

Client Target Antwort

UO.ClientRequestObjectTarget · UO.ClientRequestTileTarget · UO.ClientTargetResponse · UO.ClientTargetResponsePresent · UO.WaitForClientTargetResponse

Beispiele zum Thema

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.

UO.WaitTargetObject

Parameter, Ergebnis und alle Szenarien

UO.CancelWaitTarget();
UO.WaitTargetObject("self");
UO.UseSkill("Anatomy");

UO.TargetToXYZ

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;

Vollständige Befehlsreferenz


UO.CancelTarget

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#-Signaturen

void UO.CancelTarget();

Bricht den aktiven Cursor ab und löscht vorbereitete Fadenkreuzantworten.

Parameter

Es gibt keine Parameter.

Rückgabewert

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.

Verhalten

  • 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.

Eigenständige C#-Skripte

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.

Einfaches Beispiel

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();

1. Unvorbereitet – direktes Skript

Parameter und Ablauf:

  • Es gibt keine Argumente.
  • Die ausstehende Antwort auf self wird gelöscht.
UO.WaitTargetSelf();
UO.CancelTarget();

2. Ersetzen Sie einen zuvor vorbereiteten Punkt – eine Skriptfunktion

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;
}

3. Nach Zeitüberschreitung ablehnen – Skriptklasse

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;
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.CancelTarget() — UO.CancelTarget()

Parameter: Keine Parameter.

Ergebnis: void / Unit.

Beim Aufruf:

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");

        }

UO.CancelWaitTarget

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#-Signaturen

void UO.CancelWaitTarget();

Löscht vorbereitete Fadenkreuzantworten.

Parameter

Es gibt keine Parameter.

Rückgabewert

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.

Verhalten

  • 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.

Eigenständige C#-Skripte

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.

Einfaches Beispiel

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();

1. Unvorbereitet – direktes Skript

Parameter und Ablauf:

  • Es gibt keine Argumente.
  • Die ausstehende Antwort auf self wird gelöscht.
UO.WaitTargetSelf();
UO.CancelWaitTarget();

2. Ersetzen Sie einen zuvor vorbereiteten Punkt – eine Skriptfunktion

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;
}

3. Nach Zeitüberschreitung ablehnen – Skriptklasse

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;
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.CancelWaitTarget() — UO.CancelWaitTarget()

Parameter: Keine Parameter.

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "cancelwaittarget": bridge.CancelWaitTarget(); return InjectionValue.Unit;

UO.ClientRequestObjectTarget

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#-Signaturen

void UO.ClientRequestObjectTarget();

Öffnet ein lokales Fadenkreuz zur manuellen Auswahl eines Gegenstands oder Charakters.

Parameter

Es gibt keine Parameter.

Rückgabewert

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.

Verhalten

  • 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.

Eigenständige C#-Skripte

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.

Einfaches Beispiel

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();

1. Wählen Sie einen Gegenstand oder Charakter aus – direktes Skript

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;

2. Abbrechen ist eine Antwort, aber kein Objekt – eine Skriptfunktion

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;

3. Wählen Sie „Objekt“ und speichern Sie „Benannte Referenz – Skriptklasse“.

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;
    }
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.ClientRequestObjectTarget() — UO.ClientRequestObjectTarget()

Parameter: Keine Parameter.

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "clientrequestobjecttarget": bridge.RequestClientTarget(false); return InjectionValue.Unit;

UO.ClientRequestTileTarget

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#-Signaturen

void UO.ClientRequestTileTarget();

Öffnet ein lokales Fadenkreuz zur manuellen Auswahl eines Punktes/einer Kachel oder eines Objekts.

Parameter

Es gibt keine Parameter.

Rückgabewert

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.

Verhalten

  • 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.

Eigenständige C#-Skripte

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.

Einfaches Beispiel

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();

1. Lesen Sie die Koordinaten der ausgewählten Kachel – direktes Skript

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;

2. Speichern Sie die Koordinaten der ausgewählten Zelle – Skriptfunktion

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;
}

3. Lokale Zellenauswahl abbrechen – Skriptklasse

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;
    }
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.ClientRequestTileTarget() — UO.ClientRequestTileTarget()

Parameter: Keine Parameter.

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "clientrequesttiletarget": bridge.RequestClientTarget(true); return InjectionValue.Unit;

UO.ClientTargetResponse

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#-Signaturen

dynamic UO.ClientTargetResponse();

Kopiert das Ergebnis des letzten lokalen ClientRequest* in ein Array.

Parameter

Es gibt keine Parameter.

Rückgabewert

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.

Verhalten

  • 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.

Eigenständige C#-Skripte

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.

Einfaches Beispiel

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));

1. Wählen Sie einen Gegenstand oder Charakter aus – direktes Skript

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;

2. Lesen Sie die Koordinaten der ausgewählten Kachel aus – Skriptfunktion

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;

3. Abbrechen ist eine Antwort, aber kein Objekt – eine Skriptklasse

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;
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.ClientTargetResponse() — UO.ClientTargetResponse()

Parameter: Keine Parameter.

Ergebnis: dynamic / Any.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "clienttargetresponse":

                    return new InjectionValue(bridge.ClientTargetResponse().Select(value => new InjectionValue(value)).ToArray());

UO.ClientTargetResponsePresent

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#-Signaturen

dynamic UO.ClientTargetResponsePresent();

Überprüft, ob eine Antwort auf die letzte lokale Auswahlanforderung empfangen wurde.

Parameter

Es gibt keine Parameter.

Rückgabewert

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.

Verhalten

  • 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.

Eigenständige C#-Skripte

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.

Einfaches Beispiel

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));

1. Abbrechen ist eine Antwort, aber kein Objekt – ein reines Skript

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;

2. Überprüfen Sie die Bereitschaft nach der Auswahl eines Objekts – Skriptfunktion

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;
}

3. Umfrage zur Zellauswahlbereitschaft – Skriptklasse

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;
    }
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.ClientTargetResponsePresent() — UO.ClientTargetResponsePresent()

Parameter: Keine Parameter.

Ergebnis: dynamic / Any.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "clienttargetresponsepresent": return new InjectionValue(bridge.ClientTargetResponsePresent());

UO.IsWaitTargetActive

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#-Signaturen

dynamic UO.IsWaitTargetActive();

Prüft, ob vorbereitete Antworten in der Zielwarteschlange verbleiben.

Parameter

Es gibt keine Parameter.

Rückgabewert

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.

Verhalten

  • 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.

Eigenständige C#-Skripte

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.

Einfaches Beispiel

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));

1. Vorbereitung prüfen – Direktskript

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();

2. Warten Sie, bis die Antwort ausgegeben wird – Skriptfunktion

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;

3. Unterschied zwischen Warteschlange und Sicht anzeigen – Skriptklasse

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;
    }
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.IsWaitTargetActive() — UO.IsWaitTargetActive()

Parameter: Keine Parameter.

Ergebnis: dynamic / Any.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "iswaittargetactive": return new InjectionValue(Waiting());

UO.LastTarget

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#-Signaturen

int UO.LastTarget();

Liest serial des zuletzt gespeicherten Zielobjekts.

Parameter

Es gibt keine Parameter.

Rückgabewert

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.

Verhalten

  • 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.

Eigenständige C#-Skripte

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.

Einfaches Beispiel

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));

1. Gespeicherten Wert lesen – direktes Skript

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");

2. Gespeicherte und aktuelle Position vergleichen – Script-Funktion

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;

3. Vollständiger Helfer ReadTargetValue – Skriptklasse

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;
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.LastTarget() — UO.LastTarget()

Parameter: Keine Parameter.

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "lasttarget": return new InjectionValue(bridge.LastTarget);

UO.LastTargetX

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#-Signaturen

int UO.LastTargetX();

Liest die X-Koordinate, die bei der letzten Auswahl des Ziels gespeichert wurde.

Parameter

Es gibt keine Parameter.

Rückgabewert

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.

Verhalten

  • 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.

Eigenständige C#-Skripte

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.

Einfaches Beispiel

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));

1. Gespeicherten Wert lesen – direktes Skript

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));

2. Gespeicherte und aktuelle Position vergleichen – Script-Funktion

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;

3. Vollständiger Helfer ReadTargetValue – Skriptklasse

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;
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.LastTargetX() — UO.LastTargetX()

Parameter: Keine Parameter.

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public int LastTargetX() => bridge is ITargetSnapshotBridge snapshot ? snapshot.LastTargetX : bridge.GetX(bridge.LastTarget);

UO.LastTargetY

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#-Signaturen

int UO.LastTargetY();

Liest die Y-Koordinate, die bei der letzten Auswahl des Ziels gespeichert wurde.

Parameter

Es gibt keine Parameter.

Rückgabewert

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.

Verhalten

  • 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.

Eigenständige C#-Skripte

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.

Einfaches Beispiel

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));

1. Gespeicherten Wert lesen – direktes Skript

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));

2. Gespeicherte und aktuelle Position vergleichen – Script-Funktion

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;

3. Vollständiger Helfer ReadTargetValue – Skriptklasse

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;
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.LastTargetY() — UO.LastTargetY()

Parameter: Keine Parameter.

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public int LastTargetY() => bridge is ITargetSnapshotBridge snapshot ? snapshot.LastTargetY : bridge.GetY(bridge.LastTarget);

UO.LastTile

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#-Signaturen

string UO.LastTile();
int UO.LastTile(object? index);

Liest das zuletzt gespeicherte Kachelziel.

Parameter

  • 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.

Rückgabewert

Ohne Argumente string „graphic X Y Z“ mit Dezimalfeldern; mit Index - int eines Feldes. Der fehlende/kurze Eintrag wird mit Nullen aufgefüllt.

Verhalten

  • 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.

Eigenständige C#-Skripte

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.

Einfaches Beispiel

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));

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Liest das zuletzt gespeicherte Kachelziel.
UO.Print(UO.LastTile());

2. Explizite Option – Skriptfunktion

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;
}

3. Vollständige Hilfsfunktion – Skriptklasse

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;
    }
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.LastTile() — UO.LastTile()

Parameter: Keine Parameter.

Ergebnis: string / String.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public string LastTile()

        {

            int[] tileInfo = NormalizeLastTile(bridge.LastTile());



            return $"{tileInfo[0]} {tileInfo[1]} {tileInfo[2]} {tileInfo[3]}";

        }

UO.LastTile(index) — UO.LastTile(Any)

Parameter: index (Any)

Ergebnis: int / Integer.

Beim Aufruf:

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];



        }

UO.Target

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#-Signaturen

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.

Parameter

  • 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.

Rückgabewert

void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.

Verhalten

  • 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.

Eigenständige C#-Skripte

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.

Einfaches Beispiel

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();

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Storniert/setzt das erwartete Ziel oder sendet ein explizites Zielpaket.
UO.Target("self");
UO.Print(UO.Waiting());
UO.Target();

2. Explizite Option – Skriptfunktion

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;

3. Vollständige Hilfsfunktion – Skriptklasse

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;
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.Target() — UO.Target()

Parameter: Keine Parameter.

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "target":

                    if (arguments.Length > 0) WaitTargetObject(arguments[0].ToString());

                    else CancelTarget();

                    break;

UO.Target(object) — UO.Target(Any)

Parameter: object (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "target":

                    if (arguments.Length > 0) WaitTargetObject(arguments[0].ToString());

                    else CancelTarget();

                    break;

UO.Target(targetKey, target) — UO.Target(Any,Any)

Parameter: targetKey (Any), target (Any)

Ergebnis: void / Unit.

Beim Aufruf:

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}'");

        }

UO.Target(targetKey, target, targetType, type, x, y, z) — UO.Target(Any,Any,Any,Any,Any,Any,Any)

Parameter: targetKey (Any), target (Any), targetType (Any), type (Any), x (Any), y (Any), z (Any)

Ergebnis: void / Unit.

Beim Aufruf:

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)

            );

        }

UO.TargetByResource

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#-Signaturen

void UO.TargetByResource(object? objID, object? resource);

Sucht nach einem Gegenstand bei graphic, bereitet ein bestimmtes Ziel vor und verwendet den gefundenen Gegenstand.

Parameter

  • 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.

Rückgabewert

void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.

Verhalten

  • 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.

Eigenständige C#-Skripte

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.

Einfaches Beispiel

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");

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Sucht nach einem Gegenstand bei graphic, bereitet ein bestimmtes Ziel vor und verwendet den gefundenen Gegenstand.
UO.TargetByResource("self", "0x0E21");

2. Explizite Option – Skriptfunktion

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;

3. Vollständige Hilfsfunktion – Skriptklasse

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;
    }
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.TargetByResource(objID, resource) — UO.TargetByResource(Any,Any)

Parameter: objID (Any), resource (Any)

Ergebnis: void / Unit.

Beim Aufruf:

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;

                }

UO.TargetID

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#-Signaturen

dynamic UO.TargetID();

Liest die ID des aktuellen Zielcursors.

Parameter

Es gibt keine Parameter.

Rückgabewert

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.

Verhalten

  • LastTarget/GetSerial(„lasttarget“) beziehen sich auf das ausgewählte Objekt, TargetID bezieht sich auf die Zielanforderung. Diese Werte können nicht untereinander ersetzt werden.

Eigenständige C#-Skripte

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.

Einfaches Beispiel

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));

1. Drucken Sie ID des aktiven Cursors – direktes Skript

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;

2. Unterscheiden Sie zwischen zwei Typen ID - Skriptfunktion

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;
}

3. Nach dem Warten prüfen – Skriptklasse

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;
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.TargetID() — UO.TargetID()

Parameter: Keine Parameter.

Ergebnis: dynamic / Any.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "targetid": return new InjectionValue(bridge.GetTargetCursorId());

UO.TargetPresent

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#-Signaturen

dynamic UO.TargetPresent();

Prüft, ob im Client ein aktiver Zielauswahlcursor vorhanden ist.

Parameter

Es gibt keine Parameter.

Rückgabewert

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.

Verhalten

  • 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.

Eigenständige C#-Skripte

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.

Einfaches Beispiel

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));

1. Status anzeigen – direktes Skript

Parameter und Ablauf:

  • Es gibt keine Argumente.
  • 1 oder 0 wird angezeigt.
UO.Print(Convert.ToString(UO.TargetPresent()));

2. Offenen Cursor abbrechen – Skriptfunktion

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;

3. Nach Anforderung einer Spielaktion - Szenarioklasse

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;
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.TargetPresent() — UO.TargetPresent()

Parameter: Keine Parameter.

Ergebnis: dynamic / Any.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "targetpresent": return new InjectionValue(IsTargeting());

UO.TargetToObject

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#-Signaturen

void UO.TargetToObject(object? objID);

Reagiert sofort auf ein bereits aktives Serverzielobjekt serial.

Parameter

  • 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.

Rückgabewert

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.

Verhalten

  • 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.

Eigenständige C#-Skripte

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.

Einfaches Beispiel

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");

1. Antwort auf Open Sight – Direct Script

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;

2. Zuerst auf Sicht warten – Skriptfunktion

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;

3. Auf verzögerte Antwort prüfen – Skriptklasse

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;
    }
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.TargetToObject(objID) — UO.TargetToObject(Any)

Parameter: objID (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "targettoobject": bridge.TargetToObject(Arg(0)); return InjectionValue.Unit;

UO.TargetToTile

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#-Signaturen

void UO.TargetToTile(object? tile, object? x, object? y, object? z);

Reagiert sofort mit Kachelkoordinaten auf ein bereits aktives Serverziel.

Parameter

  • 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.

Rückgabewert

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.

Verhalten

  • 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.

Eigenständige C#-Skripte

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.

Einfaches Beispiel

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);

1. Antwort auf Open Sight – Direct Script

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;

2. Zuerst auf Sicht warten – Skriptfunktion

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;

3. Auf verzögerte Antwort prüfen – Skriptklasse

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;
    }
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.TargetToTile(tile, x, y, z) — UO.TargetToTile(Any,Any,Any,Any)

Parameter: tile (Any), x (Any), y (Any), z (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "targettotile":

                    bridge.TargetToTile(Arg(0), Arg(1), Arg(2), Arg(3)); return InjectionValue.Unit;

UO.TargetToXYZ

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#-Signaturen

void UO.TargetToXYZ(object? x, object? y, object? z);

Reagiert sofort mit Kachelkoordinaten auf ein bereits aktives Serverziel.

Parameter

  • 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.

Rückgabewert

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.

Verhalten

  • 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.

Eigenständige C#-Skripte

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.

Einfaches Beispiel

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);

1. Antwort auf Open Sight – Direct Script

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;

2. Zuerst auf Sicht warten – Skriptfunktion

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;

3. Auf verzögerte Antwort prüfen – Skriptklasse

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;
    }
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.TargetToXYZ(x, y, z) — UO.TargetToXYZ(Any,Any,Any)

Parameter: x (Any), y (Any), z (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "targettoxyz":

                    bridge.TargetToTile(0, Arg(0), Arg(1), Arg(2)); return InjectionValue.Unit;

UO.Targeting

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#-Signaturen

int UO.Targeting();

Prüft, ob im Client ein aktiver Zielauswahlcursor vorhanden ist.

Parameter

Es gibt keine Parameter.

Rückgabewert

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.

Verhalten

  • 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.

Eigenständige C#-Skripte

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.

Einfaches Beispiel

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));

1. Status anzeigen – direktes Skript

Parameter und Ablauf:

  • Es gibt keine Argumente.
  • 1 oder 0 wird angezeigt.
UO.Print(Convert.ToString(UO.Targeting()));

2. Offenen Cursor abbrechen – Skriptfunktion

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;

3. Nach Anforderung einer Spielaktion - Szenarioklasse

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;
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.Targeting() — UO.Targeting()

Parameter: Keine Parameter.

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public int IsTargeting() => bridge.IsTargeting();

UO.TicksTarget

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#-Signaturen

int UO.TicksTarget();

Liest den letzten Bereitstellungszeitstempel des Ziels über WaitTargetObject/WaitTargetTile und deren aufrufende Shells.

Parameter

Es gibt keine Parameter.

Rückgabewert

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.

Verhalten

  • 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.

Eigenständige C#-Skripte

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.

Einfaches Beispiel

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));

1. Erinnern Sie sich an den Moment der Vorbereitung – direktes Drehbuch

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();

2. Verstrichene Zeit berechnen – Skriptfunktion

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)));

3. Stellen Sie die gleiche Zeit für die numerische serial – Szenarioklasse sicher

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;
    }
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.TicksTarget() — UO.TicksTarget()

Parameter: Keine Parameter.

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public int TicksTarget() => ticksTarget;

UO.WaitForClientTargetResponse

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#-Signaturen

dynamic UO.WaitForClientTargetResponse(object? maxWaitTimeMS);

Wartet darauf, dass die lokale Auswahl ClientRequestObjectTarget/ClientRequestTileTarget abgeschlossen ist.

Parameter

  • maxWaitTimeMS – Maximale Zeit in Millisekunden. 0 und negative Werte ergeben einen Scheck, ohne auf unbestimmte Zeit zu warten.

Rückgabewert

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.

Verhalten

  • 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.

Eigenständige C#-Skripte

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.

Einfaches Beispiel

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));

1. Wählen Sie einen Gegenstand oder Charakter aus – direktes Skript

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;

2. Lesen Sie die Koordinaten der ausgewählten Kachel aus – Skriptfunktion

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;

3. Separates Timeout von der vollständigen Antwortstruktur – Skriptklasse

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;
    }
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.WaitForClientTargetResponse(maxWaitTimeMS) — UO.WaitForClientTargetResponse(Any)

Parameter: maxWaitTimeMS (Any)

Ergebnis: dynamic / Any.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "waitforclienttargetresponse": return new InjectionValue(bridge.WaitForClientTargetResponse(Arg(0)));

UO.WaitForTarget

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#-Signaturen

dynamic UO.WaitForTarget(object? maxWaitTimeMS);

Wartet darauf, dass der aktive Zielcursor innerhalb des Timeouts erscheint.

Parameter

  • maxWaitTimeMS – Maximale Wartezeit in Millisekunden. Null- und negative Werte ergeben eine sofortige Prüfung; Es ist kein endloses Warten.

Rückgabewert

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.

Verhalten

  • 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.

Eigenständige C#-Skripte

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.

Einfaches Beispiel

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));

1. Warten Sie auf den Fertigkeitsblick – direktes Skript

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;

2. Eine Prüfung – Skriptfunktion

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;
}

3. Timeout behandeln – Skriptklasse

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;
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.WaitForTarget(maxWaitTimeMS) — UO.WaitForTarget(Any)

Parameter: maxWaitTimeMS (Any)

Ergebnis: dynamic / Any.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "waitfortarget": return new InjectionValue(bridge.WaitUntilTargeting(Arg(0)));

UO.WaitTarget

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#-Signaturen

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.

Parameter

  • 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.

Rückgabewert

void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.

Verhalten

  • 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.

Eigenständige C#-Skripte

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.

Einfaches Beispiel

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");

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Platziert serial in der Warteschlange der nächsten Zielanforderung oder wählt mithilfe von Filtern ein Ziel aus.
UO.WaitTarget("self");

2. Explizite Option – Skriptfunktion

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;
}

3. Vollständige Hilfsfunktion – Skriptklasse

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;
    }
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.WaitTarget(target) — UO.WaitTarget(Any)

Parameter: target (Any)

Ergebnis: void / Unit.

Beim Aufruf:

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) — UO.WaitTarget(Any,Any)

Parameter: target (Any), type (Any)

Ergebnis: void / Unit.

Beim Aufruf:

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) — UO.WaitTarget(Any,Any,Any)

Parameter: target (Any), type (Any), color (Any)

Ergebnis: void / Unit.

Beim Aufruf:

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) — UO.WaitTarget(Any,Any,Any,Any)

Parameter: target (Any), type (Any), color (Any), distance (Any)

Ergebnis: void / Unit.

Beim Aufruf:

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) — UO.WaitTarget(Any,Any,Any,Any,Any)

Parameter: target (Any), type (Any), color (Any), distance (Any), notoriety (Any)

Ergebnis: void / Unit.

Beim Aufruf:

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:

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:

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.WaitTargetGround

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#-Signaturen

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.

Parameter

  • 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.

Rückgabewert

void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.

Verhalten

  • 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.

Eigenständige C#-Skripte

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.

Einfaches Beispiel

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");

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Sucht nach einem Element bei graphic/hue und platziert es in der Warteschlange des nächsten Ziels.
UO.WaitTargetGround("0x0E21");

2. Explizite Option – Skriptfunktion

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;
}

3. Vollständige Hilfsfunktion – Skriptklasse

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;
    }
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.WaitTargetGround(type) — UO.WaitTargetGround(Any)

Parameter: type (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public void WaitTargetGround(InjectionValue type) => WaitTargetGround(type, new InjectionValue(-1));

UO.WaitTargetGround(type, color) — UO.WaitTargetGround(Any,Any)

Parameter: type (Any), color (Any)

Ergebnis: void / Unit.

Beim Aufruf:

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);

        }

UO.WaitTargetLast

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#-Signaturen

void UO.WaitTargetLast();

Bereitet über den Alias ​​lasttarget eine Antwort an das nächste Serverziel vor.

Parameter

Es gibt keine Parameter.

Rückgabewert

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.

Verhalten

  • 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.

Eigenständige C#-Skripte

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.

Einfaches Beispiel

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();

1. Bereiten Sie das Ziel vor – direktes Skript

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();

2. Auf Vorhandensein des ausgewählten Objekts prüfen – Skriptfunktion

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;

3. Vorbereitetes Ziel abbrechen – Skriptklasse

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;
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.WaitTargetLast() — UO.WaitTargetLast()

Parameter: Keine Parameter.

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public void WaitTargetLast() => WaitTargetObject("lasttarget");

UO.WaitTargetObject

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#-Signaturen

void UO.WaitTargetObject(object? objID);
void UO.WaitTargetObject(object? id1, object? id2);

Bereitet eine oder zwei aufeinanderfolgende serial-Antworten auf Server-Sichtungen vor.

Parameter

  • 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.

Rückgabewert

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.

Verhalten

  • 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.

Eigenständige C#-Skripte

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.

Einfaches Beispiel

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");

1. Wählen Sie sich selbst für eine Fertigkeit aus – direktes Skript

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");

2. Wählen Sie ein bekanntes Objekt mit der numerischen serial-Skriptfunktion aus

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;

3. Zwei Sehenswürdigkeiten: das erste Objekt und das zweite Objekt – die Skriptklasse

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;
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.WaitTargetObject(objID) — UO.WaitTargetObject(Any)

Parameter: objID (Any/String)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "waittargetobject": WaitTargetObject(Arg(0)); return InjectionValue.Unit;

UO.WaitTargetObject(objID) — UO.WaitTargetObject(String)

Parameter: objID (Any/String)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public void WaitTargetObject(string id) => WaitTargetObject(GetObject(id));

UO.WaitTargetObject(id1, id2) — UO.WaitTargetObject(String,String)

Parameter: id1 (String), id2 (String)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public void WaitTargetObject(string id1, string id2) => WaitTargetObject(GetObject(id1), GetObject(id2));

UO.WaitTargetObjectType

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#-Signaturen

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.

Parameter

  • 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.

Rückgabewert

void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.

Verhalten

  • 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.

Eigenständige C#-Skripte

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.

Einfaches Beispiel

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");

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Bereitet zwei aufeinanderfolgende Ziele vor: ein bestimmtes Objekt und ein gefundenes Objekt auf dem Boden.
UO.WaitTargetObjectType("self", "0x0E21");

2. Explizite Option – Skriptfunktion

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;
}

3. Vollständige Hilfsfunktion – Skriptklasse

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;
    }
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.WaitTargetObjectType(id, type) — UO.WaitTargetObjectType(Any,Any)

Parameter: id (Any), type (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public void WaitTargetObjectType(InjectionValue id, InjectionValue type)

            => WaitTargetObjectType(id, type, new InjectionValue(-1));

UO.WaitTargetObjectType(id, type, color) — UO.WaitTargetObjectType(Any,Any,Any)

Parameter: id (Any), type (Any), color (Any)

Ergebnis: void / Unit.

Beim Aufruf:

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);

        }

UO.WaitTargetSelf

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#-Signaturen

void UO.WaitTargetSelf();

Bereitet über den Alias ​​self eine Antwort an das nächste Serverziel vor.

Parameter

Es gibt keine Parameter.

Rückgabewert

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.

Verhalten

  • 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.

Eigenständige C#-Skripte

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.

Einfaches Beispiel

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();

1. Bereiten Sie das Ziel vor – direktes Skript

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();

2. Auf Vorhandensein des ausgewählten Objekts prüfen – Skriptfunktion

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;

3. Vorbereitetes Ziel abbrechen – Skriptklasse

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;
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.WaitTargetSelf() — UO.WaitTargetSelf()

Parameter: Keine Parameter.

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public void WaitTargetSelf() => WaitTargetObject("self");

UO.WaitTargetTile

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#-Signaturen

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.

Parameter

  • 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.

Rückgabewert

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.

Verhalten

  • 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.

Eigenständige C#-Skripte

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.

Einfaches Beispiel

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");

1. Koordinaten ohne graphic - direktes Skript

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);

2. Geben Sie die Kachel-Skriptfunktion graphic explizit an

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;
}

3. Wiederholen Sie den gespeicherten Punkt des letzten Ziels – Skriptklasse

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;
    }
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.WaitTargetTile(selector) — UO.WaitTargetTile(Any)

Parameter: selector (Any)

Ergebnis: void / Unit.

Beim Aufruf:

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();

        }

UO.WaitTargetTile(x, y, z) — UO.WaitTargetTile(Any,Any,Any)

Parameter: x (Any), y (Any), z (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public void WaitTargetTile(InjectionValue x, InjectionValue y, InjectionValue z)

            => WaitTargetTile(new InjectionValue(0), x, y, z);

UO.WaitTargetTile(type, x, y, z) — UO.WaitTargetTile(Any,Any,Any,Any)

Parameter: type (Any), x (Any), y (Any), z (Any)

Ergebnis: void / Unit.

Beim Aufruf:

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();

        }

UO.WaitTargetType

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#-Signaturen

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.

Parameter

  • 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.

Rückgabewert

void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.

Verhalten

  • 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.

Eigenständige C#-Skripte

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.

Einfaches Beispiel

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");

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Sucht nach einem Element bei graphic/hue und platziert es in der Warteschlange des nächsten Ziels.
UO.WaitTargetType("0x0E21");

2. Explizite Option – Skriptfunktion

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;
}

3. Vollständige Hilfsfunktion – Skriptklasse

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;
    }
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.WaitTargetType(type) — UO.WaitTargetType(Any)

Parameter: type (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public void WaitTargetType(InjectionValue type) => WaitTargetType(ResolveType(type), -1);

UO.WaitTargetType(type, color) — UO.WaitTargetType(Any,Any)

Parameter: type (Any), color (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public void WaitTargetType(InjectionValue type, InjectionValue color)

            => WaitTargetType(ResolveType(type), NumberConversions.ToInt(color));

UO.WaitTargetXYZ

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#-Signaturen

void UO.WaitTargetXYZ(object? x, object? y, object? z);

Bereitet ein Koordinatenziel mit graphic=0 für die nächste Serversicht vor.

Parameter

  • 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.

Rückgabewert

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.

Verhalten

  • 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.

Eigenständige C#-Skripte

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.

Einfaches Beispiel

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);

1. Geben Sie einen Punkt in der Welt an – direktes Skript

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);

2. Punkt unter Zeichen verwenden – Skriptfunktion

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;
}

3. Tool Point vorbereiten – Skriptklasse

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;
    }
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.WaitTargetXYZ(x, y, z) — UO.WaitTargetXYZ(Any,Any,Any)

Parameter: x (Any), y (Any), z (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "waittargetxyz": WaitTargetTile(new InjectionValue(0), arguments[0], arguments[1], arguments[2]); return InjectionValue.Unit;

Clone this wiki locally