Repository navigation
DE UO Topic client ui
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Home · C# · IDE · UO API · A–Z · Beispiele · Sprachen
Meldungen anzeigen, Fenster warten, Objekte anzeigen und IDE öffnen. Diese Schritte ersetzen nicht das Senden von Sprache an den Server.
| Thema | Befehle und Erklärungen |
|---|---|
| UO.Print | |
| ClientPrint | UO.ClientPrint |
| Info Window | UO.FillInfoWindow · UO.ClearInfoWindow · UO.FillNewWindow |
| Text Window | UO.TextOpen · UO.TextPrint · UO.TextClear · UO.TextClose |
| Einfache Gumps | UO.CloseSimpleGump |
| Close UI Window | UO.CloseClientUIWindow |
| Circle Transparency | UO.CircleTrans |
| Show Z | UO.SetShowZ |
| Open IDE | UO.OpenIDE |
UO.Print · UO.ClientPrint · UO.ClientPrintEx · UO.CharPrint · UO.ColorPrint · UO.ConsolePrint · UO.ServerPrint · UO.SetSilentMode · UO.ConColor · UO.FontColor
UO.ClearInfoWindow · UO.FillInfoWindow · UO.FillNewWindow · UO.TextOpen · UO.TextClear · UO.TextClose · UO.TextPrint · UO.CloseSimpleGump · UO.CloseClientUIWindow · UO.ShowJournal · UO.OpenIDE · UO.HelpRequest · UO.ActivateHandle · UO.CloseHandle · UO.Snap
UO.Hide · UO.ClientHide · UO.ClientMarkChar · UO.CircleTrans · UO.SetShowZ · UO.Morph
UO.AddFigure · UO.UpdateFigure · UO.RemoveFigure · UO.ClearFigures
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 processed = 12;
UO.Print("Processed item entries: " + Convert.ToString(processed), 0x0044);Parameter, Ergebnis und alle Szenarien
UO.FillInfoWindow("Status ready");Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ActivateHandle();Fordert Windows/SDL auf, das aktuelle Clientfenster in den Vordergrund zu bringen. Es gibt keine Argumente oder Ergebnisse. Dies ist ein Fensterbefehl, kein Gegenstand, keine Fertigkeit oder Zielanwendung; Der tatsächliche Fokus hängt vom Fenstersystem ab.
Es gibt keine Parameter.
void. Der Aufruf fordert lediglich die Aktivierung des Fensters an; Es erkennt nicht an, dass das Fenstersystem es in den Vordergrund gebracht hat.
- Der Client öffnet das Spielansichtsfenster über SDL. Der Befehl sendet kein Spielpaket und führt keine Aktion in der Welt aus. Ein minimiertes Fenster oder Einschränkungen des Fenstersystems können den tatsächlichen Fokus verhindern.
- RequireGameView erfordert Client.Game. Wenn das ClassicUO-Grafikfenster nicht geöffnet ist, löst Bridge InvalidOperationException aus. SDL_RaiseWindow fordert, dass ein vorhandenes Fenster geöffnet wird; Die Entscheidung über den Fokus bleibt dem Fenstersystem überlassen.
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.ActivateHandle");
UO.ActivateHandle();Parameter und Ablauf:
- Fordern Sie an, dass das Clientfenster in den Vordergrund gebracht wird.
UO.ActivateHandle();2. Fordern Sie keinen Fensterfokus an, bevor Sie eine Verbindung zum Spiel herstellen. - Skriptfunktion
Parameter und Ablauf:
- Fordern Sie keinen Fensterfokus an, bevor Sie eine Verbindung zum Spiel herstellen.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.Connected()))
{
UO.ActivateHandle();
}
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:
- Wickeln Sie die Fensteraktion in eine wiederverwendbare Prozedur ein.
- Führen Sie die Anforderung über ein Hilfsverfahren aus.
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()
{
RunAction();
return null;
}
void RunAction()
{
UO.ActivateHandle();
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.AddFigure(object? arg0);Fügt der ClassicUO-Weltkarte eine lokale Figur hinzu und gibt ihre ID zurück. Die Zahl wird clientseitig gespeichert, der Spielserver wird nicht benachrichtigt.
int ist das positive ID der hinzugefügten Zahl. 0 wird zurückgegeben, wenn die Zahlendaten falsch sind oder die Karte das Hinzufügen verweigert. Übertragen Sie das empfangene ID an UO.UpdateFigure oder UO.RemoveFigure.
- Erstellt eine lokale Figur für
WorldMapGump. Linie, Ellipse, Rechteck, Richtungspfeil und Text werden unterstützt. DiefcWorld-Koordinaten folgen der Kartentransformation und dem Maßstab;fcScreenwerden relativ zum Kartenfenster gemessen. Die Formen für die ausgewählte Facette werden angezeigt.
Array-Format: [kind, coord, x1, y1, x2, y2, brushColor, brushStyle, color, worldNum, text]. kind: 0 Linie, 1 Ellipse, 2 Rechteck, 3 Richtungspfeil, 4 Text. coord: 0 world, 1 Bildschirm. color verwendet die Bytereihenfolge Delphi TColor (0x00BBGGRR). Bei einem Pfeil mit Weltkoordinaten und x2=0,y2=0 ist der Startpunkt das aktuelle Zeichen. Aus Kompatibilitätsgründen werden die historischen Versionen brushColor und brushStyle übernommen; Die visuelle Schattierung garantiert keine vollständige Übereinstimmung mit Delphi.
Die Figur verbleibt in der Client-Sammlung, bis sie gelöscht/bereinigt wird oder der Prozess endet. Bei einem Facettenwechsel werden nur Figuren ausgeblendet, die zu einer anderen Facette gehören.
- Es werden mindestens 9 Felder akzeptiert. Fehlt worldNum, wird die aktuelle Karte verwendet; ohne Text wird ein leerer String genommen. Art ist beschränkt auf 0..4, Koordinate - 0..1; andere Bedeutungen geben 0. Negativ worldNum ermöglicht die Anzeige auf jeder Facette. Der ID-Zähler wird erhöht, bevor SetYokoMapFigure geprüft wird, sodass ein abgelehntes Stück eine Lücke in ID hinterlassen kann. Sammlung WorldMapGump statisch in Bearbeitung; Reguläre Skripte eines Managers verwenden einen gemeinsamen persistenten Laufzeitstatus.
- brushColor und brushStyle werden im Eintrag gespeichert, aber der aktuelle Renderer verwendet sie nicht. Die Linie und das Rechteck werden als Umriss gezeichnet; Die Ellipse besteht aus 32 Segmenten. Die Textsignatur wird nur für kind=4; andere Arten geben es nicht aus. Farbe gibt den Umriss im Format COLORREF 0x00BBGGRR an.
Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.
Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.
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.AddFigure(new object?[] { 0, 0, UO.X(), UO.Y(), UO.X() + 3, UO.Y(), 0, 0, 255 });
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- kind=2 zeichnet einen roten Umriss. Das Textfeld mit dem Wert Fläche wird gespeichert, aber für diesen Typ wird die Beschriftung nicht gezeichnet; Der Text gibt kind=4 aus.
dynamic[] fig = new dynamic[checked((int)(11) + 1)];
fig[0] = 2;
fig[1] = 0;
fig[2] = UO.GetX("self")-3;
fig[3] = UO.GetY("self")-3;
fig[4] = UO.GetX("self")+3;
fig[5] = UO.GetY("self")+3;
fig[6] = 0;
fig[7] = 1;
fig[8] = 255;
fig[9] = UO.WorldNum();
fig[10] = "Area";
var figureId = UO.AddFigure(fig);Parameter und Ablauf:
- Mit world-Koordinaten und x2=0,y2=0 wird der Ursprung des Pfeils von der Position des Zeichens beim Zeichnen übernommen. Text mit dem Wert East für kind=3 wird nicht ausgegeben.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
dynamic[] dirFig = new dynamic[checked((int)(11) + 1)];
dirFig[0] = 3;
dirFig[1] = 0;
dirFig[2] = UO.GetX("self") + 10;
dirFig[3] = UO.GetY("self");
dirFig[4] = 0;
dirFig[5] = 0;
dirFig[6] = 0;
dirFig[7] = 1;
dirFig[8] = 65280;
dirFig[9] = UO.WorldNum();
dirFig[10] = "East";
var arrowId = UO.AddFigure(dirFig);
return null;
}Parameter und Ablauf:
- Erstellen Sie eine blaue Linie zwischen zwei Punkten der aktuellen Facette.
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()
{
dynamic[] lineFig = new dynamic[checked((int)(11) + 1)];
lineFig[0] = 0;
lineFig[1] = 0;
lineFig[2] = UO.GetX("self");
lineFig[3] = UO.GetY("self");
lineFig[4] = UO.GetX("self") + 8;
lineFig[5] = UO.GetY("self");
lineFig[6] = 0;
lineFig[7] = 1;
lineFig[8] = 16711680;
lineFig[9] = UO.WorldNum();
lineFig[10] = "";
var lineId = UO.AddFigure(lineFig);
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.CharPrint(object? arg0, object? arg1);
void UO.CharPrint(object? arg0, object? arg1, object? arg2);Erstellt eine nur für Sie sichtbare Inschrift über dem geladenen Objekt: zum Beispiel eine Markierung des ausgewählten Ziels oder eine Warnung über Ihrem Charakter. Dies ist weder die Rede des Charakters noch die Nachricht am unteren Rand des Spielfensters.
-
idist die Seriennummer des Objekts, nicht graphic/type oder eine Koordinate. UO.CharPrint in der Form mit drei Argumenten versteht auch self, lasttarget und gespeicherte Objektnamen. Verwenden Sie für SenderID in UO.ClientPrintEx eine Zahl, z. B. UO.Hex2Int(UO.GetSerial("self")); String-Aliase werden dort nicht als Objekte aufgelöst. -
colorist UO hue, nicht RGB. Die niedrigstwertigen 16 Bits der Zahl werden genommen; 0x0044 ist ein Beispiel. -1 wird zu 0xFFFF und bedeutet nicht „jede Farbe“. Die Farbe ConColor wird hier nicht verwendet.
Ein Aufruf einer Methode mit einem Rückgabetyp void wird als eigenständige Anweisung C# geschrieben; Das Ergebnis ist nicht zuordenbar oder überprüfbar. Das Ausfüllen der Abrechnung stellt keine Bestätigung des Spielservers dar.
- Das Objekt muss in der geladenen Welt vorhanden sein und darf nicht gelöscht werden; Leerer Text oder fehlendes Ziel werden nicht gezeichnet. Der Befehl lädt das Objekt nicht vom Server herunter. Der Server und andere Spieler erhalten diese Nachricht nicht. Ohne das Spielfenster ist die Inschrift in der Welt nicht zu sehen; Es ist kein Ersatz für das Syslog des Managers.
- UO.CharPrint(color, msg) wählt seinen Charakter aus. UO.CharPrint(id, color, msg) wählt das angegebene Objekt aus. Beide Formulare verwenden die Schriftart 3. UO.ClientPrintEx erfordert alle vier Argumente in der Reihenfolge SenderID, Farbe, Schriftart, Text.
- Die Schriftartnummer ist UO, nicht die Punktgröße oder der Windows-Schriftartname. Die Anzahl ist auf den Bereich 0..255 beschränkt; Die Verfügbarkeit einer bestimmten Schriftart hängt von den Spieldateien ab. Im Beispiel ist 3 die normale Schriftartnummer.
- GetSerial gibt eine Hex-Zeichenfolge zurück. Hex2Int wandelt es in ein int um, bevor es mit der Zahl 0 verglichen wird; Die Zeichenfolge „0x00000000“ kann nicht als Zahl 0 überprüft werden.
- UO.Print · UO.CharPrint · UO.ClientPrintEx · UO.AddToSystemJournalEx
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.CharPrint");
UO.CharPrint(0x0044, "Ready");Parameter und Ablauf:
- Die erste Form CharPrint platziert „Ready“ über ihrem Zeichen. ClientPrintEx empfängt es serial über UO.Hex2Int(UO.GetSerial("self")) und übergibt die Schriftart explizit an 3. Die Aufschrift beinhaltet keinen Spielmodus.
- GetSerial gibt eine Hex-Zeichenfolge zurück. Hex2Int wandelt es in ein int um, bevor es mit der Zahl 0 verglichen wird; Die Zeichenfolge „0x00000000“ kann nicht als Zahl 0 überprüft werden.
UO.CharPrint(0x0044, "Ready");Parameter und Ablauf:
- Ziel – serial des letzten Ziels. Null bedeutet, dass in diesem Beispiel niemand markiert werden kann. Ausgewähltes Ziel – nur lokale Signatur: Das Ziel wird nicht angegriffen und das aktive Serverziel wird nicht gefüllt.
- GetSerial gibt eine Hex-Zeichenfolge zurück. Hex2Int wandelt es in ein int um, bevor es mit der Zahl 0 verglichen wird; Die Zeichenfolge „0x00000000“ kann nicht als Zahl 0 überprüft werden.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var target = UO.Hex2Int(UO.GetSerial("lasttarget"));
if (Truth(target != 0))
{
UO.CharPrint(target, 0x0044, "Selected target");
}
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:
- ShowWeightWarning wird im Folgenden vollständig deklariert. Sie vergleicht das Gewicht mit einem positiven bekannten Grenzwert und überschreibt ihre Figur nur, wenn sie überlastet ist; wirft nichts weg. Convert.ToString wandelt die Gewichtung in Text um.
- GetSerial gibt eine Hex-Zeichenfolge zurück. Hex2Int wandelt es in ein int um, bevor es mit der Zahl 0 verglichen wird; Die Zeichenfolge „0x00000000“ kann nicht als Zahl 0 überprüft werden.
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()
{
ShowWeightWarning(UO.Weight(), UO.MaxWeight());
return null;
}
void ShowWeightWarning(dynamic weight, dynamic maximum)
{
if (Truth(maximum > 0) && Truth(weight >= maximum))
{
UO.CharPrint(UO.Hex2Int(UO.GetSerial("self")), 0x0044, "Too heavy: " + Convert.ToString(weight));
}
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.CircleTrans();
void UO.CircleTrans(object? arg0);Liest oder ändert die Transparenzkreiseinstellung des aktiven Profils.
-
enabled- int: 0 deaktiviert, jeder Wert ungleich Null aktiviert. Ohne Argument ist die Einstellung schreibgeschützt.
Ohne Argument int 1/0; Das Formular mit einem Argument gibt null zurück.
- Das Lesen ohne Profil ergibt 0. Ein Eintrag ohne Profil gibt einen Fehler aus; Wenn ein Profil vorhanden ist, ändert sich UseCircleOfTransparency und speichert das Profil. Dies ist eine visuelle Anpassung des Clients.
Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.
Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.
Das Ergebnis eines Aufrufs wird im Journal ausgegeben. Zahlen werden nicht in bool umgewandelt; bei Arrays wird die Anzahl der Elemente angezeigt.
var result = UO.CircleTrans();
UO.Print("CircleTrans: " + Convert.ToString(result));Parameter und Ablauf:
- Das Lesen verändert das Profil nicht.
var enabled = UO.CircleTrans();
UO.Print(Convert.ToString(enabled));Parameter und Ablauf:
- Bei der Aufnahme bleibt der Transparenzkreis eingeschaltet.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.CircleTrans(1);
return null;
}Parameter und Ablauf:
- Das gespeicherte Flag wird nach einer vorübergehenden Änderung der Einstellung wiederhergestellt.
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()
{
var previous = UO.CircleTrans();
UO.CircleTrans(0);
UO.CircleTrans(previous);
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ClearFigures();Löscht alle benutzerdefinierten Kartenformen und ihre Laufzeiteinträge.
Es gibt keine Parameter.
void – kein Rückgabewert.
- Löscht WorldMapGump.ClearYokoMapFigures und Status.MapFigures. Die Basiskarte und UserStatics werden nicht verändert.
- ClearYokoMapFigures löscht die laufende statische Sammlung von WorldMapGump, dann löscht der Befehl MapFigures aus seinem Laufzeitstatus. Dieser Bereinigungsbereich wird durch die gesamte Clientsammlung bestimmt, nicht nur durch den Namen des aufrufenden Skripts.
- Reguläre benutzerdefinierte Kartenbeschriftungen (userMarkers.usr) bleiben erhalten.
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.ClearFigures");
UO.ClearFigures();Parameter und Ablauf:
- Löscht alle benutzerdefinierten Kartenformen und ihre Laufzeiteinträge.
UO.ClearFigures();Parameter und Ablauf:
- Erstellen Sie eine lokale Form für die aktuelle Karte und löschen Sie dann alle benutzerdefinierten Formen.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
dynamic[] figure = new dynamic[checked((int)(9) + 1)];
figure[0] = 0;
figure[1] = 0;
figure[2] = UO.GetX();
figure[3] = UO.GetY();
figure[4] = figure[2] + 1;
figure[5] = figure[3] + 1;
figure[6] = 0;
figure[7] = 0;
figure[8] = 0;
figure[9] = UO.WorldNum();
var figureId = UO.AddFigure(figure);
UO.ClearFigures();
return null;
}Parameter und Ablauf:
- Das Löschen eines leeren Satzes ist akzeptabel und erstellt keine neue Einstellung.
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.ClearFigures();
UO.ClearFigures();
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ClearInfoWindow();Löscht die Zeilen des Client-Textfensters.
Es gibt keine Parameter.
void – kein Rückgabewert.
- TextClear löscht den Puffer; Wenn das Fenster geöffnet war, wird es mit leerem Inhalt aktualisiert. Das Fenster schließt sich nicht unbedingt.
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.ClearInfoWindow");
UO.ClearInfoWindow();Parameter und Ablauf:
- Löscht die Zeilen des Client-Textfensters.
UO.ClearInfoWindow();Parameter und Ablauf:
- Löschen Sie eine zuvor hinzugefügte Textfensterzeile.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.FillInfoWindow("status");
UO.ClearInfoWindow();
return null;
}Parameter und Ablauf:
- Das Löschen eines leeren Satzes ist akzeptabel und erstellt keine neue Einstellung.
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.ClearInfoWindow();
UO.ClearInfoWindow();
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.ClientHide(object? arg0);Versteckt serial einen geladenen Gegenstand oder einen anderen Charakter nur in der ClassicUO-Anzeige, einschließlich Containern, Papierpuppen und ausgerüsteten Gegenständen.
-
ObjID– Seriennummer des spezifischen geladenen Objekts: int oder Hexadezimal-/Dezimalzeichenfolge. Dies ist nicht graphic/type. Für einen gespeicherten Namen verwenden Sie GetSerial(Name). Der Parameter ist erforderlich; der Anblick erscheint nicht.
int 1 nach der Übertragung des Bridge-Befehls. Das historische Ergebnis bestätigt nicht das Vorhandensein des Objekts: Selbst für ein unbekanntes serial oder self gibt die Brücke einen Fehler aus und die Laufzeit gibt 1 zurück. Verwenden Sie diesen Wert nicht als Test für das erfolgreiche Ausblenden. Die Kompatibilitätsmetadaten zeigen object?.
- Es ist genau ein Argument erforderlich. Um mit der Maus auszuwählen, verwenden Sie UO.Hide().
- Hide(serial) wirkt sofort auf ein bekanntes geladenes Objekt. Übergeben Sie serial eines bestimmten Stapels/Gegenstands anstelle von graphic/type. Der ausgewählte Stapel wird unabhängig von der Menge vollständig ausgeblendet.
- Der Artikel bleibt im Container: Menge, Eigentümer, Inhalt und Serverstatus ändern sich nicht. FindType/GetContent kann es immer noch finden. Beim Verstecken handelt es sich nicht um einen Suchfilter, eine Übertragung, ein Löschen, eine Fähigkeit zum Verstecken oder eine serverseitige Unsichtbarkeit.
- Der normale Container, das Handelsfenster und das Beutegitter zeichnen den versteckten Gegenstand nicht und akzeptieren keine Klicks/Ziehungen darauf. Das Flag bleibt bestehen, wenn das Fenster neu erstellt und erneut geöffnet wird, während dasselbe geladene Objekt verwendet wird.
- Der ausgerüstete Gegenstand verschwindet von der Paperdoll, vom kleinen Slot und vom Charakterbild. Es bleibt ausgerüstet: Die Ebene, die Panzerung und der Status auf dem Server ändern sich nicht. Das versteckte Gewand überlappt nicht mehr die Unterwäsche. Das Charakterbild im Manager wird mit demselben Flag aktualisiert; Die Liste der tatsächlichen Geräte bleibt verfügbar.
- Hide verbirgt seinen eigenen Charakter, sein Land und seine Statik nicht. Das nicht vorhandene serial gibt eine Nachricht. Durch das Ausblenden der Tasche selbst wird weder das bereits geöffnete Inhaltsfenster geschlossen, noch werden automatisch alle darin enthaltenen Artikel ausgeblendet.
- Im aktuellen API gibt es keinen separaten Befehl zum Einblenden. Das Ausblenden gehört zur geladenen Objektinstanz: Wenn Sie sie aus der Client-Welt entfernen und erneut laden (z. B. beim erneuten Verbinden), wird das Flag zurückgesetzt. Das einfache Schließen/Öffnen einer Truhe ist keine garantierte Möglichkeit, einen Artikel zurückzugeben.
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.ClientHide(0x40001234);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- ObjID ist ein bestimmtes Element, nicht sein type. Es verschwindet von der Anzeige und verbleibt in seinem Behälter.
var item = 0x40001234;
if (Truth(UO.Exists(item)))
{
UO.ClientHide(item);
}
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:
- FindType sucht nach graphic 0x0EED einer beliebigen Farbe in backpack. Das zurückgegebene serial wird an ClientHide übertragen; Der gesamte Stapel ist vollständig ausgeblendet.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var item = UO.FindType(0x0EED, -1, "backpack");
if (Truth(item != ""))
{
UO.ClientHide(item);
UO.Print("Amount is still: " + Convert.ToString(UO.GetQuantity(item)));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- GetSerial löst den zuvor gespeicherten Dekorationsnamen auf. Der Artikel muss zunächst geladen werden, beispielsweise durch Öffnen seines Behälters.
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()
{
var item = UO.GetSerial("decoration");
if (Truth(UO.Exists(item)) && Truth(item != UO.GetSerial("self")))
{
UO.ClientHide(item);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ClientMarkChar(object? arg0, object? arg1);Aktualisiert die Client-Beschriftungen LastTarget und/oder LastAttack.
-
actionIndex- int: 1 - LastTarget; 2 - LastAttack; 3 – beides. Andere Werte geben einen Fehler aus. -
id– Seriennummer des Objekts oder unterstützter Name von self/backpack/lasttarget/saved object; Numerische Zeichenfolgen und 0x-Zeichenfolgen werden zur Laufzeit aufgelöst.
void – kein Rückgabewert.
- ClientMarkChar modifiziert gespeicherte Ziele, ohne einen Angriff zu senden oder auf das Serverziel zu reagieren. Nachfolgende Befehle können die neue Bezeichnung verwenden.
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.ClientMarkChar");
UO.ClientMarkChar(1, "self");Parameter und Ablauf:
- Das gespeicherte Ziel wird zu Ihrem eigenen Charakter.
UO.ClientMarkChar(1,"self");Parameter und Ablauf:
- Letzteres Ziel wird für beide Client-Tags verwendet.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var target = UO.LastTarget();
if (Truth(UO.Exists(target)))
{
UO.ClientMarkChar(3, target);
}
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:
- Null ist nicht Teil des Aktionssatzes und führt zu einer Fehlermeldung.
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.ClientMarkChar(0, "self");
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ClientPrint(object? arg0);Zeigt eine lokale Meldung über den Skriptfortschritt oder die Stoppbedingung an. Du siehst es, nicht andere Spieler.
Ein Aufruf einer Methode mit einem Rückgabetyp void wird als eigenständige Anweisung C# geschrieben; Das Ergebnis ist nicht zuordenbar oder überprüfbar. Das Ausfüllen der Abrechnung stellt keine Bestätigung des Spielservers dar.
- Die Nachricht wird im unteren linken Bereich des Spielfensters und im lokalen Protokoll angezeigt. Eine Kopie ist im Ausgang IDE verfügbar. Aktivieren Sie im allgemeinen Protokoll des Managers den Skriptnachrichtenfilter: Der Eintrag ist ohne das Spielfenster verfügbar. Der Nachrichtenfilter des Serversystems wählt solche Datensätze nicht aus. Das Netzwerk-Sprachpaket wird nicht gesendet. Für die Inschrift über dem Kopf steht UO.CharPrint.
-
UO.Printfügt einen neuen Eintrag zum Spielnachrichtenprotokoll hinzu: Lesen oder speichern Sie zuerst die gewünschte Suchzeichenfolge/das gewünschte Suchergebnis und zeichnen Sie dann die Diagnosemeldung auf. Zeichnen Sie in einer schnellen Schleife Nachrichten auf, wenn Änderungen auftreten, und nicht bei jeder Iteration. - Die Farbe der Systemmeldungen dieser Skriptlaufzeit wird verwendet: zunächst 0x0440, geändert UO.ConColor. Dies ist ein lokaler Eintrag; Der Befehlsname bedeutet nicht, dass er an den Server gesendet wird.
- UO.Print · UO.CharPrint · UO.Say · UO.ConColor
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 und hat keinen Rückgabewert (void). Der Meldungstext steht direkt im Aufruf.
UO.ClientPrint("Hello from C#");Parameter und Ablauf:
- verarbeitet=12 — Demo-Anzahl der bereits verarbeiteten Elemente. Convert.ToString wandelt es in einen String um. In diesem Beispiel wird nur eine Zahl gemeldet. Die Objekte selbst werden nicht übertragen.
var processed = 12;
UO.ClientPrint("Processed item entries: " + Convert.ToString(processed));Parameter und Ablauf:
- Das Gewicht und das Maximum des Zeichens werden gelesen. Ein Null-/unbekanntes Maximum gilt nicht als Überlastung. Wenn Gewicht >= Maximum, wird eine Zeile gedruckt und Main endet; Gegenstände werden nicht weggeworfen.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var weight = UO.Weight();
var maximum = UO.MaxWeight();
if (Truth(maximum > 0) && Truth(weight >= maximum))
{
UO.ClientPrint("Too heavy: " + Convert.ToString(weight) + "/" + Convert.ToString(maximum));
return null;
}
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:
- Main merkt sich das Gewicht, wartet 1000 Millisekunden und ruft das vollständig deklarierte ReportWeight auf. Der Assistent druckt nur, wenn sich das Gewicht geändert hat, und gibt das neue Gewicht für die nächste Überprüfung zurück. Es erzeugt selbst keine Endlosschleife.
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()
{
var previous = UO.Weight();
UO.Wait(1000);
previous = ReportWeight(previous, UO.Weight());
return null;
}
dynamic ReportWeight(dynamic previous, dynamic current)
{
if (Truth(previous != current))
{
UO.ClientPrint("Weight changed: " + Convert.ToString(current));
}
return current;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ClientPrintEx(object? arg0, object? arg1, object? arg2, object? arg3);Erstellt eine nur für Sie sichtbare Inschrift über dem geladenen Objekt: zum Beispiel eine Markierung des ausgewählten Ziels oder eine Warnung über Ihrem Charakter. Dies ist weder die Rede des Charakters noch die Nachricht am unteren Rand des Spielfensters.
-
SenderIDist die Seriennummer des Objekts, nicht graphic/type oder eine Koordinate. UO.CharPrint in der Form mit drei Argumenten versteht auch self, lasttarget und gespeicherte Objektnamen. Verwenden Sie für SenderID in UO.ClientPrintEx eine Zahl, z. B. UO.Hex2Int(UO.GetSerial("self")); String-Aliase werden dort nicht als Objekte aufgelöst. -
Colorist UO hue, nicht RGB. Die niedrigstwertigen 16 Bits der Zahl werden genommen; 0x0044 ist ein Beispiel. -1 wird zu 0xFFFF und bedeutet nicht „jede Farbe“. Die Farbe ConColor wird hier nicht verwendet. -
Font– Schriftartnummer UO, nicht die Punktgröße oder der Windows-Schriftartname. Die Anzahl ist auf den Bereich 0..255 beschränkt; Die Verfügbarkeit einer bestimmten Schriftart hängt von den Spieldateien ab. Im Beispiel ist 3 die normale Schriftartnummer.
Ein Aufruf einer Methode mit einem Rückgabetyp void wird als eigenständige Anweisung C# geschrieben; Das Ergebnis ist nicht zuordenbar oder überprüfbar. Das Ausfüllen der Abrechnung stellt keine Bestätigung des Spielservers dar.
- Das Objekt muss in der geladenen Welt vorhanden sein und darf nicht gelöscht werden; Leerer Text oder fehlendes Ziel werden nicht gezeichnet. Der Befehl lädt das Objekt nicht vom Server herunter. Der Server und andere Spieler erhalten diese Nachricht nicht. Ohne das Spielfenster ist die Inschrift in der Welt nicht zu sehen; Es ist kein Ersatz für das Syslog des Managers.
- UO.CharPrint(color, msg) wählt seinen Charakter aus. UO.CharPrint(id, color, msg) wählt das angegebene Objekt aus. Beide Formulare verwenden die Schriftart 3. UO.ClientPrintEx erfordert alle vier Argumente in der Reihenfolge SenderID, Farbe, Schriftart, Text.
- Die Schriftartnummer ist UO, nicht die Punktgröße oder der Windows-Schriftartname. Die Anzahl ist auf den Bereich 0..255 beschränkt; Die Verfügbarkeit einer bestimmten Schriftart hängt von den Spieldateien ab. Im Beispiel ist 3 die normale Schriftartnummer.
- GetSerial gibt eine Hex-Zeichenfolge zurück. Hex2Int wandelt es in ein int um, bevor es mit der Zahl 0 verglichen wird; Die Zeichenfolge „0x00000000“ kann nicht als Zahl 0 überprüft werden.
- UO.Print · UO.CharPrint · UO.ClientPrintEx · UO.AddToSystemJournalEx
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.ClientPrintEx");
UO.ClientPrintEx(UO.Hex2Int(UO.GetSerial("self")), 0x0044, 3, "Ready");Parameter und Ablauf:
- Die erste Form CharPrint platziert „Ready“ über ihrem Zeichen. ClientPrintEx empfängt es serial über UO.Hex2Int(UO.GetSerial("self")) und übergibt die Schriftart explizit an 3. Die Aufschrift beinhaltet keinen Spielmodus.
- GetSerial gibt eine Hex-Zeichenfolge zurück. Hex2Int wandelt es in ein int um, bevor es mit der Zahl 0 verglichen wird; Die Zeichenfolge „0x00000000“ kann nicht als Zahl 0 überprüft werden.
UO.ClientPrintEx(UO.Hex2Int(UO.GetSerial("self")), 0x0044, 3, "Ready");Parameter und Ablauf:
- Ziel – serial des letzten Ziels. Null bedeutet, dass in diesem Beispiel niemand markiert werden kann. Ausgewähltes Ziel – nur lokale Signatur: Das Ziel wird nicht angegriffen und das aktive Serverziel wird nicht gefüllt.
- GetSerial gibt eine Hex-Zeichenfolge zurück. Hex2Int wandelt es in ein int um, bevor es mit der Zahl 0 verglichen wird; Die Zeichenfolge „0x00000000“ kann nicht als Zahl 0 überprüft werden.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var target = UO.Hex2Int(UO.GetSerial("lasttarget"));
if (Truth(target != 0))
{
UO.ClientPrintEx(target, 0x0044, 3, "Selected target");
}
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:
- ShowWeightWarning wird im Folgenden vollständig deklariert. Sie vergleicht das Gewicht mit einem positiven bekannten Grenzwert und überschreibt ihre Figur nur, wenn sie überlastet ist; wirft nichts weg. Convert.ToString wandelt die Gewichtung in Text um.
- GetSerial gibt eine Hex-Zeichenfolge zurück. Hex2Int wandelt es in ein int um, bevor es mit der Zahl 0 verglichen wird; Die Zeichenfolge „0x00000000“ kann nicht als Zahl 0 überprüft werden.
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()
{
ShowWeightWarning(UO.Weight(), UO.MaxWeight());
return null;
}
void ShowWeightWarning(dynamic weight, dynamic maximum)
{
if (Truth(maximum > 0) && Truth(weight >= maximum))
{
UO.ClientPrintEx(UO.Hex2Int(UO.GetSerial("self")), 0x0044, 3, "Too heavy: " + Convert.ToString(weight));
}
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.CloseClientUIWindow(object? arg0, object? arg1);Schließt das lokale Clientfenster des angegebenen Typs für ein bestimmtes Objekt. Sie können beispielsweise die Papierpuppe des Charakters, seinen Status oder das Rucksackfenster entfernen. Der Befehl schließt den Spielclient nicht und reagiert nicht auf Server-Gump-Schaltflächen.
-
UIWindowType– Obligatorischer numerischer Fenstercode: 0 – Paperdoll (Ausrüstung), 1 – Charakterstatus, 2 – Profil, 3 – Container. Dies ist eine separate Liste mit vier Codes, nicht graphic/type Body und nicht ID Server Gump. Andere Nummern finden das Fenster nicht. -
ID– Seriennummer des Objekts, zu dem das Fenster gehört: self/serial Zeichen für die Typen 0..2, backpack/serial Container für den Typ 3. Akzeptiert eine Zahl, eine Hexadezimalzeichenfolge oder einen auflösbaren Objektalias. Dies ist nicht die Fensternummer in der Liste InfoGumps. Ein unbekannter Objektalias wird in 0 umgewandelt.
void – kein Wert. Der Aufruf wird in eine separate Zeile geschrieben, ohne var result = und ohne if UO.CloseClientUIWindow(...). Wenn kein passendes offenes Fenster vorhanden ist, passiert nichts; Der Befehl gibt nicht true/false zurück.
- Beide Parameter sind erforderlich. Es werden sowohl die Fensterklasse als auch LocalSerial verglichen. Das Aufrufen mit (3, self) bedeutet nicht Rucksack: Der Rucksack erfordert backpack.
- Bypass betrifft offene, noch nicht zerstörte Fenster dieses Typs/serial; Alle passenden Fenster im Spielthread werden geschlossen. Die restlichen Fenster bleiben geöffnet.
- Die Schnittstelle wird geschlossen, Gegenstände werden nicht aus dem Container entfernt und der Charakter verschwindet nicht aus der Welt. Man kann es getrost wiederholen: Wenn das Fenster bereits geschlossen ist, gibt es keine Übereinstimmung.
- Für serverseitige Dialoge studieren Sie UO.CloseSimpleGump und UO.NumGumpButton; die Codes 0..3 dieses Befehls gelten dort nicht.
Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.
Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.
Der Befehl steht in einer eigenen Anweisung. Die Meldung davor zeigt den Beginn des Aufrufs und bestätigt keine Serveraktion.
UO.Print("Calling UO.CloseClientUIWindow");
UO.CloseClientUIWindow(0, "self");Parameter und Ablauf:
- Nur das Fenster für die Ausrüstung deines Charakters schließt sich; Sein Status, sein Profil und sein Rucksack bleiben separate Fenster.
UO.CloseClientUIWindow(0, "self");Parameter und Ablauf:
- Wenn der Rucksack nicht geöffnet wurde, ändert die Aktion nichts. Dieser Befehl verschiebt keine Elemente und gibt kein Ergebnis zurück.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.Connected()) && Truth(UO.Exists("backpack")))
{
UO.CloseClientUIWindow(3, "backpack");
}
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:
- 1 – Status, 2 – Profil. Die ID ist serial des ausgewählten mobile. ASC(text,0) analysiert hier die Zeichenfolge serial in eine Zahl mit einem Ersatz 0. Das Benutzerverfahren verspricht nichts über das Vorhandensein eines Fensters; beide Anrufe haben Unit.
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()
{
var selected = Asc(UO.GetSerial("lasttarget"), 0);
CloseMobilePanels(selected);
return null;
}
void CloseMobilePanels(dynamic id)
{
if (Truth(id == 0) || !(Truth(UO.Exists(id))))
{
return;
}
UO.CloseClientUIWindow(1, id);
UO.CloseClientUIWindow(2, id);
}
int Asc(object? value, int fallback = 0)
{
string text = Convert.ToString(value) ?? "";
if (text.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
return int.TryParse(text[2..], System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out int hex) ? hex : fallback;
return int.TryParse(text, out int number) ? number : fallback;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.CloseHandle();Fordert die aktuelle Clientanwendung zum Beenden über Client.Game.Exit auf.
Es gibt keine Parameter.
void – kein Rückgabewert.
- CloseUO wird an dieselbe Bridge gesendet.CloseHandle. Exit wird im Spielthread ausgeführt; Wenn Client.Game fehlt, gibt es keine Aktion. Der Befehl ist kein Herunterfahren eines separaten Gumps.
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.CloseHandle");
UO.CloseHandle();Parameter und Ablauf:
- Der Aufruf fordert die Beendigung der Clientanwendung an.
UO.CloseHandle();Parameter und Ablauf:
- Das Beispiel zeigt einen kontrollierten Zustand; Der Wert 0 hält den Client geöffnet.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var finishClient = 0;
if (Truth(finishClient))
{
UO.CloseHandle();
}
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:
- Ein vollständig deklarierter Helfer ermöglicht die explizite Exit-Aktivierung.
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()
{
FinishClient(0);
return null;
}
void FinishClient(dynamic enabled)
{
if (Truth(enabled))
{
UO.CloseHandle();
}
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.CloseSimpleGump(object? arg0);Schließt lokal einen Server-Gump, der durch einen strikten Index geschlossen werden darf.
-
GumpIndex– Obligatorisch int – Index des aktiven Server-Gumps, von 0 bis GetGumpsCount()-1. Dies ist nicht GumpID/serial. Negative Zahlen und Indizes außerhalb der Liste sind ungültig. Das Öffnen, Schließen und Neuanordnen von Fenstern kann den Index ändern; Überprüfen Sie GetGumpID/GetGumpSerial, bevor Sie handeln.
void – gibt nichts zurück. Das Ergebnis sollte nicht als Bestätigung des Servers oder bool interpretiert werden.
- Funktioniert mit aktiven Server-Gumps. Rucksack, Karte, Einstellungen und andere lokale Fenster sind in dieser Liste nicht enthalten. Ein Aufruf liest Daten im Spielthread; Verschiedene Anrufe können unterschiedliche Zustände der Liste sehen.
- Ungültiger Index und NoClose ändern nichts. Der Befehl sendet die Schaltflächenantwort nicht an den Server. Verwenden Sie für diese Antwort SendGumpSelect.
- Durch das Schließen werden die Liste und die Indizes geändert. Um einen Massenabschluss durchzuführen, durchlaufen Sie die Liste vom letzten Index zum ersten.
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.CloseSimpleGump");
UO.CloseSimpleGump(0);Parameter und Ablauf:
- 0 ist ein Index, nicht ID. Wenn das Fenster das Schließen verbietet, bleibt es geöffnet.
UO.CloseSimpleGump(0);Parameter und Ablauf:
- Durch die umgekehrte Durchquerung werden die Auswirkungen von Indexverschiebungen nach dem Börsenschluss reduziert. Überprüfen Sie beim parallelen Öffnen neuer Fenster die Liste erneut.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var i = UO.GetGumpsCount() - 1;
while (Truth(i >= 0))
{
UO.CloseSimpleGump(i);
i = i - 1;
}
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:
- info[1] – gespeicherte GumpID. Die Aktion gibt nichts zurück, daher wird das Ergebnis nicht der Variablen zugewiesen.
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()
{
var info = UO.GetGumpInfo(0);
if (Truth(ArrayLength(info) == 5))
{
UO.CloseSimpleGump(0);
UO.Print(Hex(info[1]));
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ColorPrint(object? arg0, object? arg1);Zeigt eine lokale Meldung über den Skriptfortschritt oder die Stoppbedingung an. Du siehst es, nicht andere Spieler.
-
color- UO hue, nicht RGB. Zahl oder Hexadezimalzeichenfolge; Die Brücke verwendet die niedrigen 16-Bits. Nicht zu verwechseln mit graphic/type. 0x0044 ist im Beispiel das ausgewählte hue. Ohne Farbe wird hue 0x03B2 verwendet. UO.Print(text, color) akzeptiert zuerst Text; UO.ColorPrint(color, text) – Farbe zuerst.
Ein Aufruf einer Methode mit einem Rückgabetyp void wird als eigenständige Anweisung C# geschrieben; Das Ergebnis ist nicht zuordenbar oder überprüfbar. Das Ausfüllen der Abrechnung stellt keine Bestätigung des Spielservers dar.
- Die Nachricht wird im unteren linken Bereich des Spielfensters und im lokalen Protokoll angezeigt. Eine Kopie ist im Ausgang IDE verfügbar. Aktivieren Sie im allgemeinen Protokoll des Managers den Skriptnachrichtenfilter: Der Eintrag ist ohne das Spielfenster verfügbar. Der Nachrichtenfilter des Serversystems wählt solche Datensätze nicht aus. Das Netzwerk-Sprachpaket wird nicht gesendet. Für die Inschrift über dem Kopf steht UO.CharPrint.
-
UO.Printfügt einen neuen Eintrag zum Spielnachrichtenprotokoll hinzu: Lesen oder speichern Sie zuerst die gewünschte Suchzeichenfolge/das gewünschte Suchergebnis und zeichnen Sie dann die Diagnosemeldung auf. Zeichnen Sie in einer schnellen Schleife Nachrichten auf, wenn Änderungen auftreten, und nicht bei jeder Iteration. - Ohne Farbe wird hue 0x03B2 verwendet. UO.Print(text, color) akzeptiert zuerst Text; UO.ColorPrint(color, text) – Farbe zuerst.
- UO.Print · UO.CharPrint · UO.Say · UO.ConColor
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 und hat keinen Rückgabewert (void). Der Meldungstext steht direkt im Aufruf.
UO.ColorPrint(0x0044, "Hello from C#");Parameter und Ablauf:
- verarbeitet=12 — Demo-Anzahl der bereits verarbeiteten Elemente. Convert.ToString wandelt es in einen String um. In diesem Beispiel wird nur eine Zahl gemeldet. Die Objekte selbst werden nicht übertragen.
var processed = 12;
UO.ColorPrint(0x0044, "Processed item entries: " + Convert.ToString(processed));Parameter und Ablauf:
- Das Gewicht und das Maximum des Zeichens werden gelesen. Ein Null-/unbekanntes Maximum gilt nicht als Überlastung. Wenn Gewicht >= Maximum, wird eine Zeile gedruckt und Main endet; Gegenstände werden nicht weggeworfen.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var weight = UO.Weight();
var maximum = UO.MaxWeight();
if (Truth(maximum > 0) && Truth(weight >= maximum))
{
UO.ColorPrint(0x0044, "Too heavy: " + Convert.ToString(weight) + "/" + Convert.ToString(maximum));
return null;
}
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:
- Main merkt sich das Gewicht, wartet 1000 Millisekunden und ruft das vollständig deklarierte ReportWeight auf. Der Assistent druckt nur, wenn sich das Gewicht geändert hat, und gibt das neue Gewicht für die nächste Überprüfung zurück. Es erzeugt selbst keine Endlosschleife.
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()
{
var previous = UO.Weight();
UO.Wait(1000);
previous = ReportWeight(previous, UO.Weight());
return null;
}
dynamic ReportWeight(dynamic previous, dynamic current)
{
if (Truth(previous != current))
{
UO.ColorPrint(0x0044, "Weight changed: " + Convert.ToString(current));
}
return current;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ConColor(object? arg0);Setzt UO hue für nachfolgende Systemmeldungen dieser Skriptlaufzeit.
-
color- UO hue, nicht RGB. Zahl oder Hexadezimalzeichenfolge; Die Brücke verwendet die niedrigen 16-Bits. Nicht zu verwechseln mit graphic/type. 0x0044 ist im Beispiel das ausgewählte hue.
Ein Aufruf einer Methode mit einem Rückgabetyp void wird als eigenständige Anweisung C# geschrieben; Das Ergebnis ist nicht zuordenbar oder überprüfbar. Das Ausfüllen der Abrechnung stellt keine Bestätigung des Spielservers dar.
- Betrifft nachfolgende UO.ClientPrint, UO.AddToJournal und UO.AddToSystemJournal. Färbt vorherige Zeilen nicht neu, ändert nicht das SpeechHue-Profil und ändert nicht die Farbe von UO.Print ohne Farbargument. Der alte Color Getter ist nicht hier: Speichern Sie den ausgewählten regulären hue in seiner Variablen.
- UO.Print · UO.CharPrint · UO.Say · UO.ConColor
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.ConColor");
UO.ConColor(0x0044);Parameter und Ablauf:
- 0x0044 wird zur Farbe der nächsten Systemzeile. ConColor selbst druckt nichts.
UO.ConColor(0x0044);
UO.AddToSystemJournal("Notice");Parameter und Ablauf:
- Das normale Print behält seine 0x03B2-Farbe und AddToJournal verwendet das angegebene 0x0044. Beide Nachrichten sind lokal.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.ConColor(0x0044);
UO.Print("Normal Print color");
UO.AddToJournal("System color");
return null;
}Parameter und Ablauf:
- usualHue=0x0440 ist eindeutig die ausgewählte Normalfarbe, nicht der alte gelesene Wert. Der Versuch verwendet das temporäre 0x0035;
finallygibt usualHue zurück, dann wird die nächste Zeile wieder in normaler Farbe gedruckt.
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()
{
var usualHue = 0x0440;
UO.ConColor(usualHue);
try
{
UO.ConColor(0x0035);
UO.AddToSystemJournal("Temporary warning");
}
finally
{
UO.ConColor(usualHue);
}
UO.AddToSystemJournal("Normal messages again");
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ConsolePrint(object? arg0);Zeigt eine lokale Meldung über den Skriptfortschritt oder die Stoppbedingung an. Du siehst es, nicht andere Spieler.
Ein Aufruf einer Methode mit einem Rückgabetyp void wird als eigenständige Anweisung C# geschrieben; Das Ergebnis ist nicht zuordenbar oder überprüfbar. Das Ausfüllen der Abrechnung stellt keine Bestätigung des Spielservers dar.
- Die Nachricht wird im unteren linken Bereich des Spielfensters und im lokalen Protokoll angezeigt. Eine Kopie ist im Ausgang IDE verfügbar. Aktivieren Sie im allgemeinen Protokoll des Managers den Skriptnachrichtenfilter: Der Eintrag ist ohne das Spielfenster verfügbar. Der Nachrichtenfilter des Serversystems wählt solche Datensätze nicht aus. Das Netzwerk-Sprachpaket wird nicht gesendet. Für die Inschrift über dem Kopf steht UO.CharPrint.
-
UO.Printfügt einen neuen Eintrag zum Spielnachrichtenprotokoll hinzu: Lesen oder speichern Sie zuerst die gewünschte Suchzeichenfolge/das gewünschte Suchergebnis und zeichnen Sie dann die Diagnosemeldung auf. Zeichnen Sie in einer schnellen Schleife Nachrichten auf, wenn Änderungen auftreten, und nicht bei jeder Iteration. - Ohne Farbe wird hue 0x03B2 verwendet. UO.Print(text, color) akzeptiert zuerst Text; UO.ColorPrint(color, text) – Farbe zuerst.
- Trotz der Konsole im Namen handelt es sich hierbei um dieselbe lokale Spielausgabe und nicht um ein separates Windows-Terminal.
- UO.Print · UO.CharPrint · UO.Say · UO.ConColor
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 und hat keinen Rückgabewert (void). Der Meldungstext steht direkt im Aufruf.
UO.ConsolePrint("Hello from C#");Parameter und Ablauf:
- verarbeitet=12 — Demo-Anzahl der bereits verarbeiteten Elemente. Convert.ToString wandelt es in einen String um. In diesem Beispiel wird nur eine Zahl gemeldet. Die Objekte selbst werden nicht übertragen.
var processed = 12;
UO.ConsolePrint("Processed item entries: " + Convert.ToString(processed));Parameter und Ablauf:
- Das Gewicht und das Maximum des Zeichens werden gelesen. Ein Null-/unbekanntes Maximum gilt nicht als Überlastung. Wenn Gewicht >= Maximum, wird eine Zeile gedruckt und Main endet; Gegenstände werden nicht weggeworfen.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var weight = UO.Weight();
var maximum = UO.MaxWeight();
if (Truth(maximum > 0) && Truth(weight >= maximum))
{
UO.ConsolePrint("Too heavy: " + Convert.ToString(weight) + "/" + Convert.ToString(maximum));
return null;
}
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:
- Main merkt sich das Gewicht, wartet 1000 Millisekunden und ruft das vollständig deklarierte ReportWeight auf. Der Assistent druckt nur, wenn sich das Gewicht geändert hat, und gibt das neue Gewicht für die nächste Überprüfung zurück. Es erzeugt selbst keine Endlosschleife.
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()
{
var previous = UO.Weight();
UO.Wait(1000);
previous = ReportWeight(previous, UO.Weight());
return null;
}
dynamic ReportWeight(dynamic previous, dynamic current)
{
if (Truth(previous != current))
{
UO.ConsolePrint("Weight changed: " + Convert.ToString(current));
}
return current;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.FillInfoWindow(object? arg0);Fügt einem Textfenster eine Zeile hinzu und zeigt sie an.
-
S– Zeilentext; der Wert wird in string umgewandelt.
void – kein Rückgabewert.
- Zuvor akkumulierte Zeilen bleiben bis zur Grenze MaxTextWindowLines erhalten.
- TextPrint fügt eine Zeile hinzu und zeigt YokoTextWindowGump selbst an; TextOpen sichert den offenen Zustand. Bei Pufferüberlauf werden die ältesten Zeilen gelöscht. Dies ist ein separates Textfenster, kein Server-Gump und kein UO.GetInfo.
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.FillInfoWindow");
UO.FillInfoWindow("Status ready");Parameter und Ablauf:
- Der Text wird an das Client-Textfenster gesendet.
UO.FillInfoWindow("Status ready");Parameter und Ablauf:
- Der String wird aus dem lokalen Strom HP gebildet.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var status = "HP: " + Convert.ToString(UO.GetHP());
UO.FillInfoWindow(status);
return null;
}Parameter und Ablauf:
- Der zweite Befehl fügt nach dem ersten den zweiten Befehl hinzu.
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.FillInfoWindow("first");
UO.FillInfoWindow("second");
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.FillNewWindow(object? arg0);Löscht das Textfenster, fügt eine Zeile hinzu und zeigt sie an.
-
S– Zeilentext; der Wert wird in string umgewandelt.
void – kein Rückgabewert.
- Vor TextPrint wird TextClear ausgeführt; zuvor angesammelte Zeilen werden gelöscht.
- TextPrint fügt eine Zeile hinzu und zeigt YokoTextWindowGump selbst an; TextOpen sichert den offenen Zustand. Bei Pufferüberlauf werden die ältesten Zeilen gelöscht. Dies ist ein separates Textfenster, kein Server-Gump und kein UO.GetInfo.
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.FillNewWindow");
UO.FillNewWindow("Status ready");Parameter und Ablauf:
- Der Text wird an das Client-Textfenster gesendet.
UO.FillNewWindow("Status ready");Parameter und Ablauf:
- Der String wird aus dem lokalen Strom HP gebildet.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var status = "HP: " + Convert.ToString(UO.GetHP());
UO.FillNewWindow(status);
return null;
}Parameter und Ablauf:
- Der zweite Befehl ersetzt den Inhalt: Was übrig bleibt, ist Zweiter.
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.FillNewWindow("first");
UO.FillNewWindow("second");
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.FontColor(object? arg0);Setzt hue auf das nachfolgende lokale UO.UOAMessage dieses Skripts. Ändert nicht die Sprachfarbe des Charakters, das normale UO.Print-, InfoFindList- oder IDE-Thema.
-
color– Obligatorischer numerischer Index hue 0..65535, zum Beispiel 0x0044. Das ist nicht RGB. int wird im Inneren gespeichert und wenn die Ausgabe auf ushort reduziert wird; -1 bedeutet NICHT Zurücksetzen und wird zu 65535. Der Anfangswert der neuen Laufzeit ist 0x03B2. Es gibt keine Form ohne Argument.
void: kein Ergebnis, alte Farbe oder Erfolgszeichen. Um Ihre Einstellung später zurückzusetzen, speichern Sie den ausgewählten hue in einer Skriptvariablen.
- Ändert nur den Status.FontColor, druckt keine Nachricht und sendet kein Netzwerkpaket.
- Gültig bis zum nächsten FontColor in derselben Laufzeit. Ein anderes unabhängiges Skript hat seinen eigenen Status. UO.Print(text,color) stellt die Farbe direkt ein und liest FontColor nicht.
Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.
Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.
Der Befehl steht in einer eigenen Anweisung. Die Meldung davor zeigt den Beginn des Aufrufs und bestätigt keine Serveraktion.
UO.Print("Calling UO.FontColor");
UO.FontColor(0x0021);Parameter und Ablauf:
- 0x0021 – Index hue; Der endgültige Farbton hängt von den Farbtondateien des Kunden ab. Die Nachricht ist lokal sichtbar; es wird nicht von der Figur gesprochen.
UO.FontColor(0x0021);
var first = UO.FindList("0x0EED", "backpack");
if (Truth(first == ""))
{
UO.UOAMessage("No gold in the loaded backpack");
}
else
{
UO.UOAMessage("Gold units: " + Convert.ToString(UO.FindFullQuantity()));
}
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:
- Vollständige Mitteilung akzeptiert Text und hue. Der zuletzt installierte hue bleibt für den nächsten UOAMessage dieser Laufzeit erhalten. Es gibt hier kein eingebautes FontColor() zum Lesen.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
Notice("Supplies checked", 0x0044);
Notice("Restock needed", 0x0021);
return null;
}
void Notice(dynamic text, dynamic hue)
{
UO.FontColor(hue);
UO.UOAMessage(text);
}Parameter und Ablauf:
- 0x03B2 – Anfangswert FontColor der neuen Laufzeit. Gibt bei normaler Abschluss-/Fehlerbehandlung schließlich genau die ausgewählte Basis zurück; Der unbekannte vorherige Wert wird nicht wiederhergestellt.
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()
{
var baseHue = 0x03B2;
try
{
UO.FontColor(0x0021);
UO.UOAMessage("Check the route before moving");
}
finally
{
UO.FontColor(baseHue);
}
UO.UOAMessage("Ready");
UO.Print("Regular Print keeps its own color");
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.HelpRequest();Fordert das Server-Hilfemenü an.
Es gibt keine Parameter.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- ExecuteClientApiCompatibility ruft HelpRequest auf, das GameActions.RequestHelp über Invoke sendet. Der Inhalt des Menüs wird vom Server bestimmt.
- 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.HelpRequest");
UO.HelpRequest();Parameter und Ablauf:
- Fordert das Server-Hilfemenü an.
UO.HelpRequest();Parameter und Ablauf:
- ExecuteClientApiCompatibility ruft HelpRequest auf, das GameActions.RequestHelp über Invoke sendet. Der Inhalt des Menüs wird vom Server bestimmt.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.IsOnline()))
{
UO.HelpRequest();
}
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 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()
{
if (Truth(UO.IsOnline()))
{
UO.HelpRequest();
UO.Print("Help requested");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Hide();
void UO.Hide(object? arg0);Entfernt einen geladenen Gegenstand oder einen anderen Charakter vom ClassicUO-Bildschirm. Hilft störende Objekte zu entfernen; Funktioniert mit Gegenständen in Containern und Handel, ausgerüsteten Gegenständen auf der Papierpuppe und in ihren kleinen Ausrüstungsslots.
-
serial– Numerisch serial oder seine Hex-/Dezimalzeichenfolge. Das ist nicht type. Für ein benanntes Objekt erhalten Sie zunächst die numerische Zeichenfolge über GetSerial(Name). Ohne Argument erscheint ein lokales Ziel.
void – kein Rückgabewert. Das Ergebnis kann nicht als serial, graphic/type, Menge oder true/false zugeordnet werden. Die Informationen werden an die Schnittstelle/das Protokoll ausgegeben und nicht an das Skript zurückgegeben.
- Hide() öffnet ein lokales Fadenkreuz und gibt die Kontrolle sofort an das Skript zurück. Klicken Sie auf einen Gegenstand auf der Paperdoll, einen Gegenstand in einem offenen Behälter oder einen Gegenstand in der Welt. Escape bricht die Auswahl ab.
- Hide(serial) wirkt sofort auf ein bekanntes geladenes Objekt. Übergeben Sie serial eines bestimmten Stapels/Gegenstands anstelle von graphic/type. Der ausgewählte Stapel wird unabhängig von der Menge vollständig ausgeblendet.
- Der Artikel bleibt im Container: Menge, Eigentümer, Inhalt und Serverstatus ändern sich nicht. FindType/GetContent kann es immer noch finden. Beim Verstecken handelt es sich nicht um einen Suchfilter, eine Übertragung, ein Löschen, eine Fähigkeit zum Verstecken oder eine serverseitige Unsichtbarkeit.
- Der normale Container, das Handelsfenster und das Beutegitter zeichnen den versteckten Gegenstand nicht und akzeptieren keine Klicks/Ziehungen darauf. Das Flag bleibt bestehen, wenn das Fenster neu erstellt und erneut geöffnet wird, während dasselbe geladene Objekt verwendet wird.
- Der ausgerüstete Gegenstand verschwindet von der Paperdoll, vom kleinen Slot und vom Charakterbild. Es bleibt ausgerüstet: Die Ebene, die Panzerung und der Status auf dem Server ändern sich nicht. Das versteckte Gewand überlappt nicht mehr die Unterwäsche. Das Charakterbild im Manager wird mit demselben Flag aktualisiert; Die Liste der tatsächlichen Geräte bleibt verfügbar.
- Hide verbirgt seinen eigenen Charakter, sein Land und seine Statik nicht. Das nicht vorhandene serial gibt eine Nachricht. Durch das Ausblenden der Tasche selbst wird weder das bereits geöffnete Inhaltsfenster geschlossen, noch werden automatisch alle darin enthaltenen Artikel ausgeblendet.
- Im aktuellen API gibt es keinen separaten Befehl zum Einblenden. Das Ausblenden gehört zur geladenen Objektinstanz: Wenn Sie sie aus der Client-Welt entfernen und erneut laden (z. B. beim erneuten Verbinden), wird das Flag zurückgesetzt. Das einfache Schließen/Öffnen einer Truhe ist keine garantierte Möglichkeit, einen Artikel zurückzugeben.
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.Hide");
UO.Hide();Parameter und Ablauf:
- Es gibt keine Parameter. Nach dem Klicken verschwindet nur das ausgewählte Element; Der Inhalt der Truhe auf dem Server ändert sich nicht.
UO.Hide();
UO.Print("Select an item to hide locally");Parameter und Ablauf:
- Hide erhält ID des Suchergebnisses, nicht 0x0EED. Liegt kein Ergebnis vor, wird der Aufruf nicht ausgeführt. Einheit aus Hide kann nicht mit true/false verglichen werden.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var item = UO.FindType(0x0EED, -1, "backpack");
if (Truth(item == ""))
{
UO.Print("No loaded matching item");
return null;
}
UO.Hide(item);
UO.Print("Stack amount: " + Convert.ToString(UO.GetQuantity(item)));
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Das benannte Objekt wird zunächst über GetSerial aufgelöst. Das Markieren von Exists bedeutet Anwesenheit im Speicher, nicht erfolgreiches Ausblenden oder Verfügbarkeit für die Übertragung.
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()
{
var item = UO.GetSerial("decoration");
if (Truth(UO.Exists(item)) && Truth(item != UO.GetSerial("self")))
{
UO.Hide(item);
}
else
{
UO.Print("Select a loaded object other than self");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Parameter und Ablauf:
- 22 ist die Layer-Nummer, nicht serial oder type. Zuerst empfängt ObjAtLayer serial, dann verbirgt Hide das Bild dieser bestimmten Sache. Eine Entnahme und Weitergabe der Sache erfolgt nicht; Beim erneuten Öffnen von Paperdoll wird es nicht wieder eingeblendet.
var robe = UO.ObjAtLayer(22);
if (Truth(robe == 0))
{
UO.Print("No robe equipped");
return null;
}
UO.Hide(robe);
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Morph(object? arg0);Ändert lokal den graphic des aktuellen Zeichens.
-
type- int body graphic oder die Zeichenfolge type aufgelöst durch ResolveType. 0 stellt graphic wieder her, das mit dem ersten Morph gespeichert wurde; eine Zahl ungleich Null wird auf ushort reduziert.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- Bridge.Morph ohne Player ändert nichts. Beim ersten Aufruf wird _originalGraphic gespeichert und dann Player.Graphic zugewiesen. Laufzeitaktualisierungen ticksAnim=Timer, auch wenn Player fehlt.
- Dies ist ein lokales Erscheinungsbild, keine Servertransformation oder eine Änderung der Rasse/verfügbaren Fähigkeiten. Werte außerhalb von ushort werden von dieser Brückenfunktion nicht überprüft und auf 16 Bits reduziert.
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.Morph");
UO.Morph("0x0190");Parameter und Ablauf:
- Ändert lokal den graphic des aktuellen Zeichens.
UO.Morph("0x0190");Parameter und Ablauf:
- Bridge.Morph ohne Player ändert nichts. Beim ersten Aufruf wird _originalGraphic gespeichert und dann Player.Graphic zugewiesen. Laufzeitaktualisierungen ticksAnim=Timer, auch wenn Player fehlt.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.Morph(0);
return null;
}Parameter und Ablauf:
- Dies ist ein lokales Erscheinungsbild, keine Servertransformation oder eine Änderung der Rasse/verfügbaren Fähigkeiten. Werte außerhalb von ushort werden von dieser Brückenfunktion nicht überprüft und auf 16 Bits reduziert.
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.Morph("0x0190");
UO.Wait(500);
UO.Morph(0);
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.OpenIDE();
void UO.OpenIDE(object? arg0);-
filePath– Optionaler Pfad. Leerzeichen/Leerzeichen – Öffnen Sie den Editor, ohne eine Datei auszuwählen. relative wird von _manager.AutoloadPath aufgelöst, absolute bleibt erhalten.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- Bridge.OpenIDE bereitet den angeforderten Pfad vor, dann ruft Invoke YokoScriptEditorGump.Open(_world,requested) auf. Das Skript aus der Datei wird nicht vom OpenIDE-Befehl ausgeführt.
- Der Editor ist ein grafisches Fenster, keine externe Anwendung Launch. Das Lesen/Anzeigen der Datei hängt von der Existenz des Pfads und der Editorlogik ab.
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.OpenIDE");
UO.OpenIDE();Parameter und Ablauf:
- Öffnet den Grafikeditor C# IDE.
UO.OpenIDE();Parameter und Ablauf:
- Bridge.OpenIDE bereitet den angeforderten Pfad vor, dann ruft Invoke YokoScriptEditorGump.Open(_world,requested) auf. Das Skript aus der Datei wird nicht vom OpenIDE-Befehl ausgeführt.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.OpenIDE("Example.csx");
return null;
}Parameter und Ablauf:
- Der Editor ist ein grafisches Fenster, keine externe Anwendung Launch. Das Lesen/Anzeigen der Datei hängt von der Existenz des Pfads und der Editorlogik ab.
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()
{
var path = "C:\\UO Scripts\\Example.csx";
UO.OpenIDE(path);
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Print(object? arg0);
void UO.Print(object? arg0, object? arg1);Zeigt eine lokale Meldung über den Skriptfortschritt oder die Stoppbedingung an. Du siehst es, nicht andere Spieler.
-
color- UO hue, nicht RGB. Zahl oder Hexadezimalzeichenfolge; Die Brücke verwendet die niedrigen 16-Bits. Nicht zu verwechseln mit graphic/type. 0x0044 ist im Beispiel das ausgewählte hue. Ohne Farbe wird hue 0x03B2 verwendet. UO.Print(text, color) akzeptiert zuerst Text; UO.ColorPrint(color, text) – Farbe zuerst.
Ein Aufruf einer Methode mit einem Rückgabetyp void wird als eigenständige Anweisung C# geschrieben; Das Ergebnis ist nicht zuordenbar oder überprüfbar. Das Ausfüllen der Abrechnung stellt keine Bestätigung des Spielservers dar.
- Die Nachricht wird im unteren linken Bereich des Spielfensters und im lokalen Protokoll angezeigt. Eine Kopie ist im Ausgang IDE verfügbar. Aktivieren Sie im allgemeinen Protokoll des Managers den Skriptnachrichtenfilter: Der Eintrag ist ohne das Spielfenster verfügbar. Der Nachrichtenfilter des Serversystems wählt solche Datensätze nicht aus. Das Netzwerk-Sprachpaket wird nicht gesendet. Für die Inschrift über dem Kopf steht UO.CharPrint.
-
UO.Printfügt einen neuen Eintrag zum Spielnachrichtenprotokoll hinzu: Lesen oder speichern Sie zuerst die gewünschte Suchzeichenfolge/das gewünschte Suchergebnis und zeichnen Sie dann die Diagnosemeldung auf. Zeichnen Sie in einer schnellen Schleife Nachrichten auf, wenn Änderungen auftreten, und nicht bei jeder Iteration. - Ohne Farbe wird hue 0x03B2 verwendet. UO.Print(text, color) akzeptiert zuerst Text; UO.ColorPrint(color, text) – Farbe zuerst.
- UO.Print · UO.CharPrint · UO.Say · UO.ConColor
UO.Print("C# script started");
UO.Print($"Position: {UO.GetX()}, {UO.GetY()}");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 und hat keinen Rückgabewert (void). Der Meldungstext steht direkt im Aufruf.
UO.Print("Hello from C#");Parameter und Ablauf:
- verarbeitet=12 — Demo-Anzahl der bereits verarbeiteten Elemente. Convert.ToString wandelt es in einen String um. In diesem Beispiel wird nur eine Zahl gemeldet. Die Objekte selbst werden nicht übertragen.
var processed = 12;
UO.Print("Processed item entries: " + Convert.ToString(processed), 0x0044);Parameter und Ablauf:
- Das Gewicht und das Maximum des Zeichens werden gelesen. Ein Null-/unbekanntes Maximum gilt nicht als Überlastung. Wenn Gewicht >= Maximum, wird eine Zeile gedruckt und Main endet; Gegenstände werden nicht weggeworfen.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var weight = UO.Weight();
var maximum = UO.MaxWeight();
if (Truth(maximum > 0) && Truth(weight >= maximum))
{
UO.Print("Too heavy: " + Convert.ToString(weight) + "/" + Convert.ToString(maximum), 0x0044);
return null;
}
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:
- Main merkt sich das Gewicht, wartet 1000 Millisekunden und ruft das vollständig deklarierte ReportWeight auf. Der Assistent druckt nur, wenn sich das Gewicht geändert hat, und gibt das neue Gewicht für die nächste Überprüfung zurück. Es erzeugt selbst keine Endlosschleife.
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()
{
var previous = UO.Weight();
UO.Wait(1000);
previous = ReportWeight(previous, UO.Weight());
return null;
}
dynamic ReportWeight(dynamic previous, dynamic current)
{
if (Truth(previous != current))
{
UO.Print("Weight changed: " + Convert.ToString(current), 0x0044);
}
return current;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.RemoveFigure(object? arg0);Löscht eine lokale Kartenfigur anhand ihres ID.
-
FigureID- int ID, zurückgegeben AddFigure. Dies ist kein serial-Artikel und kein ID-Gump.
int – das Ergebnis von Bridge.RemoveMapFigure: 1/0 durch das Vorhandensein einer entfernten Figur. Der Laufzeiteintrag wird unabhängig vom Ergebnis der Bridge gelöscht.
- Ruft zuerst „bridge.RemoveMapFigure“ auf, dann „state.MapFigures.Remove(id)“ und gibt dann das Bridge-Ergebnis zurück. Unbekannt ID erstellt keine Form und löst keine Serveraktion aus.
- Die lokale Figur der Karte ist kein Objekt der Welt. Andere Formen und Servergeometrie ändern sich nicht.
- WorldMapGump speichert Bilder im statischen Wörterbuch des Prozesses. Reguläre Skripte/Chats/Makros einer Welt/eines Profils verwenden ein gemeinsames GetPersistentState und einen Zähler ID; Einzelne Manager-Prozesse teilen keine Zeichnungen. World.Clear/YokoScripts.Clear und der Ladeprofilstatus löschen oder stellen dieses Wörterbuch nicht wieder her (der Loader stellt nur UserStatics wieder her). Daher können Zeichnungen unter Berücksichtigung von worldNum einen Welt-/Profilwechsel im selben Prozess überstehen; Der neue Zustand kann eine bereits vorhandene ID-Zeichnung erneut hervorheben. ClearFigures löscht explizit Zeichnungen und aktuelle Zustandsdatensätze. Erfolg – Daten werden geschrieben/gelöscht, kein Anzeigenachweis.
Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.
Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.
var id = UO.AddFigure(new object?[] { 0, 0, UO.X(), UO.Y(), UO.X() + 3, UO.Y(), 0, 0, 255 });
UO.Print("Removed flag: " + Convert.ToString(UO.RemoveFigure(id)));Parameter und Ablauf:
- Löscht eine lokale Kartenfigur anhand ihres ID.
UO.Print(UO.RemoveFigure(1));Parameter und Ablauf:
- Ruft zuerst „bridge.RemoveMapFigure“ auf, dann „state.MapFigures.Remove(id)“ und gibt dann das Bridge-Ergebnis zurück. Unbekannt ID erstellt keine Form und löst keine Serveraktion aus.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
dynamic[] figure = new dynamic[checked((int)(10) + 1)];
figure[0] = 0;
figure[1] = 0;
figure[2] = UO.GetX();
figure[3] = UO.GetY();
figure[4] = UO.GetX() + 1;
figure[5] = UO.GetY() + 1;
figure[6] = 0;
figure[7] = 0;
figure[8] = 0;
figure[9] = UO.WorldNum();
figure[10] = "Example";
var id = UO.AddFigure(figure);
if (Truth(id > 0))
{
UO.Print(UO.RemoveFigure(id));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Die lokale Figur der Karte ist kein Objekt der Welt. Andere Formen und Servergeometrie ändern sich nicht.
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()
{
var id = 1;
var first = UO.RemoveFigure(id);
var second = UO.RemoveFigure(id);
UO.Print(Convert.ToString(first) + " " + Convert.ToString(second));
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ServerPrint(object? arg0);Zeigt eine lokale Meldung über den Skriptfortschritt oder die Stoppbedingung an. Du siehst es, nicht andere Spieler.
Ein Aufruf einer Methode mit einem Rückgabetyp void wird als eigenständige Anweisung C# geschrieben; Das Ergebnis ist nicht zuordenbar oder überprüfbar. Das Ausfüllen der Abrechnung stellt keine Bestätigung des Spielservers dar.
- Die Nachricht wird im unteren linken Bereich des Spielfensters und im lokalen Protokoll angezeigt. Eine Kopie ist im Ausgang IDE verfügbar. Aktivieren Sie im allgemeinen Protokoll des Managers den Skriptnachrichtenfilter: Der Eintrag ist ohne das Spielfenster verfügbar. Der Nachrichtenfilter des Serversystems wählt solche Datensätze nicht aus. Das Netzwerk-Sprachpaket wird nicht gesendet. Für die Inschrift über dem Kopf steht UO.CharPrint.
-
UO.Printfügt einen neuen Eintrag zum Spielnachrichtenprotokoll hinzu: Lesen oder speichern Sie zuerst die gewünschte Suchzeichenfolge/das gewünschte Suchergebnis und zeichnen Sie dann die Diagnosemeldung auf. Zeichnen Sie in einer schnellen Schleife Nachrichten auf, wenn Änderungen auftreten, und nicht bei jeder Iteration. - Ohne Farbe wird hue 0x03B2 verwendet. UO.Print(text, color) akzeptiert zuerst Text; UO.ColorPrint(color, text) – Farbe zuerst.
- Trotz des Servernamens oder der Ähnlichkeit mit einer Netzwerknachricht gibt der Befehl nur lokalen Text aus. Um mit der Welt zu sprechen, verwenden Sie UO.Say.
- UO.Print · UO.CharPrint · UO.Say · UO.ConColor
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 und hat keinen Rückgabewert (void). Der Meldungstext steht direkt im Aufruf.
UO.ServerPrint("Hello from C#");Parameter und Ablauf:
- verarbeitet=12 — Demo-Anzahl der bereits verarbeiteten Elemente. Convert.ToString wandelt es in einen String um. In diesem Beispiel wird nur eine Zahl gemeldet. Die Objekte selbst werden nicht übertragen.
var processed = 12;
UO.ServerPrint("Processed item entries: " + Convert.ToString(processed));Parameter und Ablauf:
- Das Gewicht und das Maximum des Zeichens werden gelesen. Ein Null-/unbekanntes Maximum gilt nicht als Überlastung. Wenn Gewicht >= Maximum, wird eine Zeile gedruckt und Main endet; Gegenstände werden nicht weggeworfen.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var weight = UO.Weight();
var maximum = UO.MaxWeight();
if (Truth(maximum > 0) && Truth(weight >= maximum))
{
UO.ServerPrint("Too heavy: " + Convert.ToString(weight) + "/" + Convert.ToString(maximum));
return null;
}
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:
- Main merkt sich das Gewicht, wartet 1000 Millisekunden und ruft das vollständig deklarierte ReportWeight auf. Der Assistent druckt nur, wenn sich das Gewicht geändert hat, und gibt das neue Gewicht für die nächste Überprüfung zurück. Es erzeugt selbst keine Endlosschleife.
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()
{
var previous = UO.Weight();
UO.Wait(1000);
previous = ReportWeight(previous, UO.Weight());
return null;
}
dynamic ReportWeight(dynamic previous, dynamic current)
{
if (Truth(previous != current))
{
UO.ServerPrint("Weight changed: " + Convert.ToString(current));
}
return current;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetShowZ(object? arg0);Ändert das lokale Flag showZ zur Laufzeit.
-
stateValue- 0 schaltet sich aus; Jede Ganzzahl ungleich Null enthält.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- Weist showZ den Wert von 0 oder 1 nach NumberConversions.ToInt zu. Diese Funktion selbst ändert die Koordinaten nicht und sendet das Paket nicht.
- Dies ist der Kompatibilitätsspeicher der aktuellen Laufzeit. Es gibt keine Verbraucher im Projekt privat mulPath/showZ; Durch die Änderung werden keine Assets neu geladen oder die Höhenanzeige geändert.
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.SetShowZ");
UO.SetShowZ(1);Parameter und Ablauf:
- Ändert das lokale Flag showZ zur Laufzeit.
UO.SetShowZ(1);Parameter und Ablauf:
- Weist showZ den Wert von 0 oder 1 nach NumberConversions.ToInt zu. Diese Funktion selbst ändert die Koordinaten nicht und sendet das Paket nicht.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.SetShowZ(0);
return null;
}Parameter und Ablauf:
- Dies ist der Kompatibilitätsspeicher der aktuellen Laufzeit. Es gibt keine Verbraucher im Projekt privat mulPath/showZ; Durch die Änderung werden keine Assets neu geladen oder die Höhenanzeige geändert.
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()
{
ApplyValue(1);
return null;
}
void ApplyValue(dynamic value)
{
UO.SetShowZ(value);
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetSilentMode(object? arg0);Ändert das lokale Flag SilentMode zur Laufzeit.
-
Value- 0 schaltet sich aus; Jede Ganzzahl ungleich Null enthält.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- Speichert SilentMode als 0/1. GumpLinesResult liest das Flag: mit 0 werden die nicht leeren Ergebnisse GetGumpShortLines/GetGumpFullLines/GetGumpButtonsDescription zusätzlich in ein Textfenster gedruckt und geöffnet; mit 1 wird diese zusätzliche Anzeige unterdrückt. Das zurückgegebene Array ändert sich nicht. Andere Print-Sounds und Servermeldungen werden nicht unterdrückt.
- In einem regulären Client-Host werden diese Statusdaten vom GetPersistentState-Manager übernommen und gelten für Skripte/Chat/Makros derselben Welt/dieselben Profils und gehören nicht zu einem einzigen Skript. Ein anderer Prozess oder ein scheinbar separater InjectionRuntimeState hat einen anderen Zustand. Das Laden/Löschen eines Profils kann es ersetzen; Die gespeicherten serial werden weiterhin mit der geladenen Welt verglichen.
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.SetSilentMode");
UO.SetSilentMode(1);Parameter und Ablauf:
- Speichert SilentMode als 0/1. GumpLinesResult liest das Flag: mit 0 werden die nicht leeren Ergebnisse GetGumpShortLines/GetGumpFullLines/GetGumpButtonsDescription zusätzlich in ein Textfenster gedruckt und geöffnet; mit 1 wird diese zusätzliche Anzeige unterdrückt. Das zurückgegebene Array ändert sich nicht. Andere Print-Sounds und Servermeldungen werden nicht unterdrückt.
UO.SetSilentMode(1);Parameter und Ablauf:
- Speichert SilentMode als 0/1. GumpLinesResult liest das Flag: mit 0 werden die nicht leeren Ergebnisse GetGumpShortLines/GetGumpFullLines/GetGumpButtonsDescription zusätzlich in ein Textfenster gedruckt und geöffnet; mit 1 wird diese zusätzliche Anzeige unterdrückt. Das zurückgegebene Array ändert sich nicht. Andere Print-Sounds und Servermeldungen werden nicht unterdrückt.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.SetSilentMode(0);
return null;
}Parameter und Ablauf:
- Speichert SilentMode als 0/1. GumpLinesResult liest das Flag: mit 0 werden die nicht leeren Ergebnisse GetGumpShortLines/GetGumpFullLines/GetGumpButtonsDescription zusätzlich in ein Textfenster gedruckt und geöffnet; mit 1 wird diese zusätzliche Anzeige unterdrückt. Das zurückgegebene Array ändert sich nicht. Andere Print-Sounds und Servermeldungen werden nicht unterdrückt.
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()
{
ApplyValue(1);
return null;
}
void ApplyValue(dynamic value)
{
UO.SetSilentMode(value);
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ShowJournal();Öffnet ein lokales Client-Protokollfenster.
Es gibt keine Parameter.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- ShowJournal ruft GameActions.OpenJournal(_world) auf. Die Datensätze werden nicht gelöscht und der Text wird nicht an den Server gesendet.
- Ändert oder zeigt nur die angegebenen lokalen Daten an. Für diesen Befehl gibt es keine Serverbestätigung.
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.ShowJournal");
UO.ShowJournal();Parameter und Ablauf:
- Öffnet ein lokales Client-Protokollfenster.
UO.ShowJournal();Parameter und Ablauf:
- ShowJournal ruft GameActions.OpenJournal(_world) auf. Die Datensätze werden nicht gelöscht und der Text wird nicht an den Server gesendet.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.Print("Journal example");
UO.ShowJournal();
return null;
}Parameter und Ablauf:
- Ändert oder zeigt nur die angegebenen lokalen Daten an. Für diesen Befehl gibt es keine Serverbestätigung.
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.ShowJournal();
UO.Print(UO.LineCount());
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Snap();
int UO.Snap(object? arg0);
int UO.Snap(object? arg0, object? arg1);
int UO.Snap(object? arg0, object? arg1, object? arg2);Speichert einen Schnappschuss des Grafikfensters des Clients.
-
name– Optionaler Dateiname. .jpg/.jpeg wählt JPEG aus, andere/keine wählt PNG aus. Verzeichnisse aus dem Namen werden entfernt; Es wird nur der Basisname verwendet. -
file– Optionaler Dateiname. .jpg/.jpeg wählt JPEG aus, andere/keine wählt PNG aus. Verzeichnisse aus dem Namen werden entfernt; Es wird nur der Basisname verwendet. -
quality– Optionaler int, standardmäßig 100, begrenzt auf 1..100. Betrifft JPEG; PNG verwendet keine verlustbehaftete Qualität. -
includeUI– Optional bool, Standard true. false zeichnet die Welt/Beleuchtung ohne UI.
Numerisches Flag int: 1 – Bilddatei gespeichert, 0 – Aufnahme-/Schreibfehler. Ohne Grafikfenster löst RequireGameView vor TakeScreenshot einen Fehler aus.
- TakeScreenshot schreibt in ExecutablePath/Data/Client/Screenshots, löscht ungültige Namenszeichen, wählt den Namen automatisch nach Datum aus, wenn er leer ist, fügt _2/_3 hinzu, wenn eine Datei vorhanden ist. Ein beliebiger absoluter Pfad wird nicht verwendet.
- Mit UI liest Backbuffer; ohne UI erstellt RenderTarget2D und rendert die Welt. JPEG setzt FNA_GRAPHICS_JPEG_SAVE_QUALITY vorübergehend mit Wiederherstellung; PNG SaveAsPng. Fehler innerhalb von TakeScreenshot werden protokolliert und als 0 angegeben.
Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.
Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.
Das Ergebnis eines Aufrufs wird im Journal ausgegeben. Zahlen werden nicht in bool umgewandelt; bei Arrays wird die Anzahl der Elemente angezeigt.
var result = UO.Snap();
UO.Print("Snap: " + Convert.ToString(result));Parameter und Ablauf:
- Speichert einen Schnappschuss des Grafikfensters des Clients.
UO.Print(UO.Snap());Parameter und Ablauf:
- TakeScreenshot schreibt in ExecutablePath/Data/Client/Screenshots, löscht ungültige Namenszeichen, wählt den Namen automatisch nach Datum aus, wenn er leer ist, fügt _2/_3 hinzu, wenn eine Datei vorhanden ist. Ein beliebiger absoluter Pfad wird nicht verwendet.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.Print(UO.Snap("manual-example.jpg", 85));
return null;
}Parameter und Ablauf:
- Mit UI liest Backbuffer; ohne UI erstellt RenderTarget2D und rendert die Welt. JPEG setzt FNA_GRAPHICS_JPEG_SAVE_QUALITY vorübergehend mit Wiederherstellung; PNG SaveAsPng. Fehler innerhalb von TakeScreenshot werden protokolliert und als 0 angegeben.
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.Print(UO.Snap("manual-world.png", 100, false));
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.TextClear();Löscht den Puffer des lokalen Textfensters.
Es gibt keine Parameter.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- Löscht _textWindow; Wenn das Fenster geöffnet war, wird es erneut mit einer leeren Liste angezeigt. Ein geschlossenes Fenster bleibt geschlossen. Das Client-Protokoll wird nicht gelöscht.
- Die Aktion ist lokale Schnittstelle/Puffer; Es gibt keine Netzwerknachricht oder Serverbestätigung.
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.TextClear");
UO.TextClear();Parameter und Ablauf:
- Löscht den Puffer des lokalen Textfensters.
UO.TextClear();Parameter und Ablauf:
- Löscht _textWindow; Wenn das Fenster geöffnet war, wird es erneut mit einer leeren Liste angezeigt. Ein geschlossenes Fenster bleibt geschlossen. Das Client-Protokoll wird nicht gelöscht.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.TextPrint("Old line");
UO.TextClear();
return null;
}Parameter und Ablauf:
- Die Aktion ist lokale Schnittstelle/Puffer; Es gibt keine Netzwerknachricht oder Serverbestätigung.
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.TextClose();
UO.TextClear();
UO.TextOpen();
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.TextClose();Schließt das lokale Textfenster und speichert den Puffer.
Es gibt keine Parameter.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- Setzt _textWindowOpen=false und entsorgt das vorhandene YokoTextWindowGump. Die _textWindow-Liste wird nicht gelöscht; TextOpen zeigt seine Linien wieder an.
- Die Aktion ist lokale Schnittstelle/Puffer; Es gibt keine Netzwerknachricht oder Serverbestätigung.
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.TextClose");
UO.TextClose();Parameter und Ablauf:
- Schließt das lokale Textfenster und speichert den Puffer.
UO.TextClose();Parameter und Ablauf:
- Setzt _textWindowOpen=false und entsorgt das vorhandene YokoTextWindowGump. Die _textWindow-Liste wird nicht gelöscht; TextOpen zeigt seine Linien wieder an.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.TextPrint("Retained line");
UO.TextClose();
return null;
}Parameter und Ablauf:
- Die Aktion ist lokale Schnittstelle/Puffer; Es gibt keine Netzwerknachricht oder Serverbestätigung.
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.TextPrint("Retained line");
UO.TextClose();
UO.Wait(250);
UO.TextOpen();
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.TextOpen();Öffnet ein lokales Textfenster.
Es gibt keine Parameter.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- Speichert _textWindowOpen=true und ruft YokoTextWindowGump.Show mit dem aktuellen _textWindow auf. Der Puffer wird nicht gelöscht; Beim erneuten Öffnen werden die akkumulierten Zeilen angezeigt.
- Die Aktion ist lokale Schnittstelle/Puffer; Es gibt keine Netzwerknachricht oder Serverbestätigung.
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.TextOpen");
UO.TextOpen();Parameter und Ablauf:
- Öffnet ein lokales Textfenster.
UO.TextOpen();Parameter und Ablauf:
- Speichert _textWindowOpen=true und ruft YokoTextWindowGump.Show mit dem aktuellen _textWindow auf. Der Puffer wird nicht gelöscht; Beim erneuten Öffnen werden die akkumulierten Zeilen angezeigt.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.TextPrint("Example");
UO.TextOpen();
return null;
}Parameter und Ablauf:
- Die Aktion ist lokale Schnittstelle/Puffer; Es gibt keine Netzwerknachricht oder Serverbestätigung.
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.TextOpen();
UO.Wait(500);
UO.TextClose();
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.TextPrint(object? arg0);Fügt eine Zeile zu einem lokalen Textfenster hinzu und öffnet es.
-
text– Text bis ToString; als übermittelt gespeichert.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- Am Limit entfernt MaxTextWindowLines=2000 alte Zeilen, fügt dann Text oder eine leere Zeile hinzu, setzt _textWindowOpen=true und zeigt das Fenster an. Dies ist kein UO.Print im Protokoll und keine Anspielung auf den Server.
- Die Aktion ist lokale Schnittstelle/Puffer; Es gibt keine Netzwerknachricht oder Serverbestätigung.
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.TextPrint");
UO.TextPrint("Example");Parameter und Ablauf:
- Fügt eine Zeile zu einem lokalen Textfenster hinzu und öffnet es.
UO.TextPrint("Example");Parameter und Ablauf:
- Am Limit entfernt MaxTextWindowLines=2000 alte Zeilen, fügt dann Text oder eine leere Zeile hinzu, setzt _textWindowOpen=true und zeigt das Fenster an. Dies ist kein UO.Print im Protokoll und keine Anspielung auf den Server.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var message = "Line 1";
UO.TextPrint(message);
UO.TextPrint("Line 2");
return null;
}Parameter und Ablauf:
- Die Aktion ist lokale Schnittstelle/Puffer; Es gibt keine Netzwerknachricht oder Serverbestätigung.
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.TextClear();
UO.TextPrint("Fresh report");
UO.TextClose();
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.UpdateFigure(object? arg0, object? arg1);Ersetzt die Beschreibung einer vorhandenen lokalen Kartenfigur.
-
FigureID- int ID im Zustand. MapFigures wurde von AddFigure empfangen. Unbekannt ID ergibt 0. -
figure– Array oder String mit |: [kind,coord,x1,y1,x2,y2,brushColor,brushStyle,color,worldNum,text]. Mindestens erste 9 numerische Felder; worldNum ist standardmäßig die aktuelle Karte, der Text ist standardmäßig leer. -
figure[0] (kind)– Art sollte 0..4 sein, Koordinate – 0..1, FigureID – positiv. WorldMapGump.SetYokoMapFigure gibt 0 zurück, wenn diese Grenzen verletzt werden. -
figure[1] (coord)– Art sollte 0..4 sein, Koordinate – 0..1, FigureID – positiv. WorldMapGump.SetYokoMapFigure gibt 0 zurück, wenn diese Grenzen verletzt werden.
Numerisches Flag int: 1 – Parsing war erfolgreich und Bridge. SetMapFigure gab ein Ergebnis ungleich Null zurück, woraufhin der Datensatz aktualisiert wurde; 0 – nein ID, Struktur-/numerischer Textfeldfehler oder Brücke fehlgeschlagen.
- TryMapFigureArg akzeptiert Array oder |string. Die ersten 9-Felder werden konvertiert; Numerischer Text wird durch TryStr2Int geprüft. Nicht unterstützte Ansicht/Kurznotation – 0, andere Ansichtskonvertierungsfehler können das Skript beschädigen.
- Bei einem Ausfall der Bridge wird der vorhandene Laufzeiteintrag nicht ersetzt. Bei Erfolg werden SerializeMapFigure mit 10 numerischen Feldern und Text gespeichert. Die Figur ist nur lokal, kein Serverelement.
- Art: 0 Linie, 1 Ellipse (32 Kontursegment), 2 Rechteckkontur, 3 Pfeil, 4 Text. coord=0 – Weltkoordinaten mit Konvertierung in die Karte, coord=1 – Pixel relativ zum Kartenzeichnungsbereich. x1/y1 und x2/y2 – Enden/Grenzen; für den Weltpfeil legt x2=y2=0 den Anfang des Spielers und das Ziel von x1/y1 fest. Farbe – 0x00BBGGRR (Moll byte Rot), Umrissfarbe. brushColor/brushStyle werden gespeichert, aber beim Rendern werden sie nicht gelesen: Es gibt keine Füllung. worldNum<0 wird auf jeder Karte angezeigt, ansonsten nur auf der angegebenen. Der Text wird am ersten Punkt (+3 Pixel für Nicht-Text-Formen) in der Kartenschriftart gezeichnet, nicht in der Umrissfarbe.
- WorldMapGump speichert Bilder im statischen Wörterbuch des Prozesses. Reguläre Skripte/Chats/Makros einer Welt/eines Profils verwenden ein gemeinsames GetPersistentState und einen Zähler ID; Einzelne Manager-Prozesse teilen keine Zeichnungen. World.Clear/YokoScripts.Clear und der Ladeprofilstatus löschen oder stellen dieses Wörterbuch nicht wieder her (der Loader stellt nur UserStatics wieder her). Daher können Zeichnungen unter Berücksichtigung von worldNum einen Welt-/Profilwechsel im selben Prozess überstehen; Der neue Zustand kann eine bereits vorhandene ID-Zeichnung erneut hervorheben. ClearFigures löscht explizit Zeichnungen und aktuelle Zustandsdatensätze. Erfolg – Daten werden geschrieben/gelöscht, kein Anzeigenachweis.
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.
object?[] figure = { 0, 0, UO.X(), UO.Y(), UO.X() + 3, UO.Y(), 0, 0, 255 };
var id = UO.AddFigure(figure);
figure[8] = 65280;
UO.Print("Updated flag: " + Convert.ToString(UO.UpdateFigure(id, figure)));Parameter und Ablauf:
- Ersetzt die Beschreibung einer vorhandenen lokalen Kartenfigur.
dynamic[] figure = new dynamic[checked((int)(8) + 1)];
figure[0] = 0;
figure[1] = 0;
figure[2] = 100;
figure[3] = 100;
figure[4] = 101;
figure[5] = 101;
figure[6] = 0;
figure[7] = 0;
figure[8] = 0;
UO.Print(UO.UpdateFigure(1, figure));Parameter und Ablauf:
- TryMapFigureArg akzeptiert Array oder |string. Die ersten 9-Felder werden konvertiert; Numerischer Text wird durch TryStr2Int geprüft. Nicht unterstützte Ansicht/Kurznotation – 0, andere Ansichtskonvertierungsfehler können das Skript beschädigen.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
dynamic[] figure = new dynamic[checked((int)(10) + 1)];
figure[0] = 0;
figure[1] = 0;
figure[2] = UO.GetX();
figure[3] = UO.GetY();
figure[4] = UO.GetX() + 1;
figure[5] = UO.GetY() + 1;
figure[6] = 0;
figure[7] = 0;
figure[8] = 0;
figure[9] = UO.WorldNum();
figure[10] = "Example";
var id = UO.AddFigure(figure);
if (Truth(id > 0))
{
UO.Print(UO.UpdateFigure(id, figure));
UO.RemoveFigure(id);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Bei einem Ausfall der Bridge wird der vorhandene Laufzeiteintrag nicht ersetzt. Bei Erfolg werden SerializeMapFigure mit 10 numerischen Feldern und Text gespeichert. Die Figur ist nur lokal, kein Serverelement.
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()
{
var figure = "0|0|100|100|101|101|0|0|0";
UO.Print(UO.UpdateFigure(1, figure));
return null;
}
}ClassicUO — Bad Newbie & C# Scripts IDE