DE UO Topic quests virtues - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki

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

Quests und Tugenden

Home · C# · IDE · UO API · A–Z · Beispiele · Sprachen

Allgemeine Kundenanfragen zu Quests und Tugenden. Age of Power-Servermissionen werden in einem separaten Abschnitt des Wikis beschrieben.

Abschnitte

Thema Befehle und Erklärungen
QuestRequest UO.QuestRequest
Quest Arrow UO.GetQuestArrow
Virtues Gump UO.ReqVirtuesGump
UseVirtue UO.UseVirtue

Alle Theme-Befehle

Quests / Tugenden

UO.QuestRequest · UO.GetQuestArrow · UO.ReqVirtuesGump · UO.UseVirtue

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

Parameter, Ergebnis und alle Szenarien

var arrow = UO.GetQuestArrow();
if (Truth(Truth(arrow[0]) == true))
{
    UO.Print(Convert.ToString(arrow[1]) + ", " + Convert.ToString(arrow[2]));
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

UO.UseVirtue

Parameter, Ergebnis und alle Szenarien

UO.Print(UO.UseVirtue("Honor"));

Vollständige Befehlsreferenz


UO.GetQuestArrow

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

C#-Signaturen

dynamic UO.GetQuestArrow();
dynamic UO.GetQuestArrow(object? point);

Liest die Position des Server-Task-Pfeils. Ermöglicht dem Skript zu wissen, wohin der vom Server empfangene Pfeil zeigt; Sie liest den Track-Befehl nicht.

Parameter

  • point – Veralteter optionaler Platzhalter. Aus Kompatibilitätsgründen wird die Form UO.GetQuestArrow(point) beibehalten; Das Argument wird nicht gelesen oder geändert. Verwenden Sie UO.GetQuestArrow() und sein Rückgabearray.

Rückgabewert

Array [existiert, x, y], genau drei ganze Zahlen. [0] - 1 (true), wenn ein Serverpfeil vorhanden ist, andernfalls 0 (false); [1] – X, [2] – Y. Ohne Pfeil [0, 0, 0]. Nur das Feld [0] ist ein boolesches Attribut; das gesamte Array ist nicht bool. Bei mehreren Pfeilen wird der erste gespeicherte gelesen, eine Auswahl durch ID gibt es nicht.

Verhalten

  • Server- und lokale Pfeile werden getrennt gespeichert. Track(0) entfernt den Serverpfeil nicht. Ohne Grafik wird der Marker gespeichert und erscheint beim Öffnen des Fensters. Durch das Schließen des Spielfensters werden keine Markierungen entfernt; Durch das Unterbrechen der Verbindung werden sie gelöscht. Der Server kann seinen Pfeil bewegen oder entfernen. Koordinaten beweisen nicht, dass das Ziel erreichbar ist.
  • Zellenkoordinaten auf der aktuellen Karte, keine Fensterpixel. Z und Kartennummer werden nicht akzeptiert. Wählen Sie einen vorhandenen Punkt auf Ihrer Karte aus. Das Team prüft nicht das Gelände, plant keine Route und verfolgt kein sich bewegendes Ziel.
  • Veralteter optionaler Platzhalter. Aus Kompatibilitätsgründen wird die Form UO.GetQuestArrow(point) beibehalten; Das Argument wird nicht gelesen oder geändert. Verwenden Sie UO.GetQuestArrow() und sein Rückgabearray.

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.GetQuestArrow();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Direkte Bewerbung – direktes Skript

Parameter und Ablauf:

  • Zuerst wird [0] geprüft; dann kann [1]/[2] als X/Y gelesen werden. Übergeben Sie nicht das gesamte Array als serial oder bool.
var arrow = UO.GetQuestArrow();
if (Truth(Truth(arrow[0]) == true))
{
    UO.Print(Convert.ToString(arrow[1]) + ", " + Convert.ToString(arrow[2]));
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2. Spielzustand – Szenariofunktion

Parameter und Ablauf:

  • Kopiert die Koordinaten des Serverpfeils auf den lokalen Track-Marker. Das ist keine Bewegung. Wenn der Server später den Pfeil verschiebt, bleibt der lokale an der gleichen Stelle.
return  RunScenario();
 object? RunScenario()
{
    var arrow = UO.GetQuestArrow();
    if (Truth(arrow[0] == 1))
    {
        UO.Track(1, arrow[1], arrow[2]);
    }

    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. Vollständige Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • ArrowDistance gibt die Entfernung UO.GetDistance(x,y) zum Serverpunkt zurück oder −1, wenn kein Pfeil vorhanden ist. Bei einem Abstand von bis zu zwei Zellen wird nur der lokale Track entfernt, der Serverpfeil bleibt erhalten.
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 distance = ArrowDistance();
        if (Truth(distance >= 0) && Truth(distance <= 2))
        {
            UO.Track(0);
        }

        return null;
    }

    dynamic ArrowDistance()
    {
        var arrow = UO.GetQuestArrow();
        if (Truth(arrow[0] == 0))
        {
            return -1;
        }

        return UO.GetDistance(arrow[1], arrow[2]);
    }

    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.GetQuestArrow() — UO.GetQuestArrow()

Parameter: Keine Parameter.

Ergebnis: dynamic / Array.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "getquestarrow":

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

UO.GetQuestArrow(point) — UO.GetQuestArrow(Any)

Parameter: point (Any)

Ergebnis: dynamic / Array.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "getquestarrow":

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

UO.QuestRequest

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

C#-Signaturen

void UO.QuestRequest();

Fordert das Server-Task-Menü an.

Parameter

Es gibt keine Parameter.

Rückgabewert

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

Verhalten

  • QuestRequest übergibt GameActions.RequestQuestMenu(_world) an den Spielstream. Das Team liest oder erstellt keine Aufgaben.
  • In den Beispielen gibt UO.Wait nur eine Skriptpause an; Das Ende der Pause beweist nicht, dass der Server die Anfrage abgeschlossen hat.

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.QuestRequest");
UO.QuestRequest();

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Fordert das Server-Task-Menü an.
UO.QuestRequest();

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • QuestRequest übergibt GameActions.RequestQuestMenu(_world) an den Spielstream. Das Team liest oder erstellt keine Aufgaben.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.IsOnline()))
    {
        UO.QuestRequest();
    }

    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:

  • In den Beispielen gibt UO.Wait nur eine Skriptpause an; Das Ende der Pause beweist nicht, dass der Server die Anfrage abgeschlossen hat.
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.QuestRequest();
        UO.Wait(500);
        UO.Print(UO.GetGumpsCount());
        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.QuestRequest() — UO.QuestRequest()

Parameter: Keine Parameter.

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "questrequest": bridge.QuestRequest(); return InjectionValue.Unit;

UO.ReqVirtuesGump

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

C#-Signaturen

void UO.ReqVirtuesGump();

Fordert das Tugendfenster eines Charakters an.

Parameter

Es gibt keine Parameter.

Rückgabewert

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

Verhalten

  • RequestVirtuesGump, wenn es einen Spieler gibt, ruft ReplyGump mit gumpID=0x1CD, Button=1 und serial Zeichen auf. Ohne Player gibt es keine Anfrage.
  • In den Beispielen gibt UO.Wait nur eine Skriptpause an; Das Ende der Pause beweist nicht, dass der Server die Anfrage abgeschlossen hat.

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.ReqVirtuesGump");
UO.ReqVirtuesGump();

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Fordert das Tugendfenster eines Charakters an.
UO.ReqVirtuesGump();

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • RequestVirtuesGump, wenn es einen Spieler gibt, ruft ReplyGump mit gumpID=0x1CD, Button=1 und serial Zeichen auf. Ohne Player gibt es keine Anfrage.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Self() != 0))
    {
        UO.ReqVirtuesGump();
    }

    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:

  • In den Beispielen gibt UO.Wait nur eine Skriptpause an; Das Ende der Pause beweist nicht, dass der Server die Anfrage abgeschlossen hat.
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.ReqVirtuesGump();
        UO.Wait(500);
        UO.Print(UO.GetGumpsCount());
        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.ReqVirtuesGump() — UO.ReqVirtuesGump()

Parameter: Keine Parameter.

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "reqvirtuesgump": bridge.RequestVirtuesGump(); return InjectionValue.Unit;

UO.UseVirtue

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

C#-Signaturen

dynamic UO.UseVirtue(object? virtueName);

Fordert die Anwendung der Tugend.

Parameter

  • virtueName – Name Ehre/Opfer/Tapferkeit/Mitgefühl/Ehrlichkeit/Demut/Gerechtigkeit/Spiritualität ohne Berücksichtigung der Groß-/Kleinschreibung, ohne Leerzeichen, oder double-Text ID 1..8.

Rückgabewert

Numerisches Flag int: 1 – gültig ID 1..8 gesendet über Send_InvokeVirtueRequest; 0 – unbekannter Name/ungültiger ID. Dies ist keine Bestätigung des Servereffekts.

Verhalten

  • Die Namen entsprechen ID: Ehre=1, Opfer=2, Tapferkeit=3, Mitgefühl=4, Ehrlichkeit=5, Demut=6, Gerechtigkeit=7, Spiritualität=8. Die numerische Analyse dieser Funktion verwendet int.TryParse, keine 0x-Konvertierung.
  • Das Team selbst legt kein Folgeziel fest und prüft auch nicht die Tugendpunkte/Verfügbarkeit; Dies wird vom Server bestimmt.

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.UseVirtue("Honor");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Fordert die Anwendung der Tugend.
UO.Print(UO.UseVirtue("Honor"));

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • Die Namen entsprechen ID: Ehre=1, Opfer=2, Tapferkeit=3, Mitgefühl=4, Ehrlichkeit=5, Demut=6, Gerechtigkeit=7, Spiritualität=8. Die numerische Analyse dieser Funktion verwendet int.TryParse, keine 0x-Konvertierung.
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.UseVirtue("1"));
    return null;
}

3. Vollständige Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • Das Team selbst legt kein Folgeziel fest und prüft auch nicht die Tugendpunkte/Verfügbarkeit; Dies wird vom Server bestimmt.
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 accepted = UO.UseVirtue("Honor");
        if (Truth(accepted))
        {
            UO.Print("Virtue request sent");
        }

        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.UseVirtue(virtueName) — UO.UseVirtue(Any)

Parameter: virtueName (Any)

Ergebnis: dynamic / Any.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "usevirtue": return new InjectionValue(bridge.UseVirtue(Text(0)));
⚠️ **GitHub.com Fallback** ⚠️