DE UO Topic quests virtues - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Home · C# · IDE · UO API · A–Z · Beispiele · Sprachen
Allgemeine Kundenanfragen zu Quests und Tugenden. Age of Power-Servermissionen werden in einem separaten Abschnitt des Wikis beschrieben.
| Thema | Befehle und Erklärungen |
|---|---|
| QuestRequest | UO.QuestRequest |
| Quest Arrow | UO.GetQuestArrow |
| Virtues Gump | UO.ReqVirtuesGump |
| UseVirtue | UO.UseVirtue |
UO.QuestRequest · UO.GetQuestArrow · UO.ReqVirtuesGump · UO.UseVirtue
Jede Befehlskarte verfügt über mehrere unabhängige Szenarien: Direktcode, Funktionen und Klassen. Nachfolgend finden Sie ausgewählte kurze Szenarien; Einschränkungen und eine vollständige Analyse sind geplant.
Parameter, Ergebnis und alle Szenarien
var 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;Parameter, Ergebnis und alle Szenarien
UO.Print(UO.UseVirtue("Honor"));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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.
-
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.
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.
- 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.
Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.
Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.
Das Ergebnis eines Aufrufs wird im Journal ausgegeben. Zahlen werden nicht in bool umgewandelt; bei Arrays wird die Anzahl der Elemente angezeigt.
object? result = UO.GetQuestArrow();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));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;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;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;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: dynamic / Array.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetQuestArrow:bridge.GetQuestArrow().
Interner Implementierungscode; kein eigenständiges Skript.
case "getquestarrow":
return new InjectionValue(bridge.GetQuestArrow().Select(value => new InjectionValue(value)).ToArray());Parameter: point (Any)
Ergebnis: dynamic / Array.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetQuestArrow:bridge.GetQuestArrow().
Interner Implementierungscode; kein eigenständiges Skript.
case "getquestarrow":
return new InjectionValue(bridge.GetQuestArrow().Select(value => new InjectionValue(value)).ToArray());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.QuestRequest();Fordert das Server-Task-Menü an.
Es gibt keine Parameter.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- 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.
Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.
Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.
Der Befehl steht in einer eigenen Anweisung. Die Meldung davor zeigt den Beginn des Aufrufs und bestätigt keine Serveraktion.
UO.Print("Calling UO.QuestRequest");
UO.QuestRequest();Parameter und Ablauf:
- Fordert das Server-Task-Menü an.
UO.QuestRequest();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;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;
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.QuestRequest:bridge.QuestRequest().
Interner Implementierungscode; kein eigenständiges Skript.
case "questrequest": bridge.QuestRequest(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ReqVirtuesGump();Fordert das Tugendfenster eines Charakters an.
Es gibt keine Parameter.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- 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.
Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.
Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.
Der Befehl steht in einer eigenen Anweisung. Die Meldung davor zeigt den Beginn des Aufrufs und bestätigt keine Serveraktion.
UO.Print("Calling UO.ReqVirtuesGump");
UO.ReqVirtuesGump();Parameter und Ablauf:
- Fordert das Tugendfenster eines Charakters an.
UO.ReqVirtuesGump();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;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;
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.RequestVirtuesGump:bridge.RequestVirtuesGump().
Interner Implementierungscode; kein eigenständiges Skript.
case "reqvirtuesgump": bridge.RequestVirtuesGump(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.UseVirtue(object? virtueName);Fordert die Anwendung der Tugend.
-
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.
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.
- 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.
Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.
Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.
Das Ergebnis eines Aufrufs wird im Journal ausgegeben. Zahlen werden nicht in bool umgewandelt; bei Arrays wird die Anzahl der Elemente angezeigt.
object? result = UO.UseVirtue("Honor");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- Fordert die Anwendung der Tugend.
UO.Print(UO.UseVirtue("Honor"));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;
}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;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: virtueName (Any)
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseVirtue:bridge.UseVirtue(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
Interner Implementierungscode; kein eigenständiges Skript.
case "usevirtue": return new InjectionValue(bridge.UseVirtue(Text(0)));