DE UO Topic books - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Home · C# · IDE · UO API · A–Z · Beispiele · Sprachen
Spielbücher lesen und bearbeiten: Titel, Seiten und Text. Die gültigen Seitenzahlen und den Aufnahmeeffekt finden Sie auf der Karte.
| Thema | Befehle und Erklärungen |
|---|---|
| Read Page | UO.BookGetPageText |
| Set Page | UO.BookSetPageText |
| Set Header | UO.BookSetHeader |
| Set Text | UO.BookSetText |
| Clear Text | UO.BookClearText |
UO.BookGetPageText · UO.BookSetPageText · UO.BookSetHeader · UO.BookSetText · UO.BookClearText
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 text = UO.BookGetPageText(1);
if (Truth(text != ""))
{
UO.Print(text);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter, Ergebnis und alle Szenarien
UO.BookSetPageText(2, "Camp A");Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.BookClearText();Entfernt Text von allen Seiten eines geöffneten, bearbeitbaren Buchs und behält dabei Titel und Autor bei.
Es gibt keine Parameter.
void – kein Wert. Dies ist eine Schreibanforderung, nicht true/false oder eine Serverbestätigung. Der Server verbietet möglicherweise die Bearbeitung.
- Öffnen Sie zunächst das gewünschte Buch mit einer Spielaktion. Die Befehle verwenden das zuletzt geöffnete Buch: ID Buch wird nicht akzeptiert. Wenn Sie mehrere Bücher haben, stellen Sie sicher, dass Sie das richtige auswählen. Get liest bereits geladene Seiten und fordert nicht selbst die fehlende Seite an.
- Im Manager werden die Inhalte des Buches in der Sitzung gespeichert und stehen ohne Grafiken zur Verfügung. Durch das Schließen des Spielfensters werden das Buch und den Entwurf gespeichert, beim erneuten Öffnen werden sie wiederhergestellt. Durch das Schließen einer Arbeitsmappe wird diese aus den geöffneten Arbeitsmappen entfernt. Durch das Unterbrechen der Verbindung werden die Serverbücher zurückgesetzt.
- Änderungen sind nur für das Buch verfügbar, das Sie bearbeiten. Ungültige Seiten oder zu lange Texte werden abgelehnt. BookSetText prüft alle Seiten vor der ersten Übermittlung: Eine fehlerhafte verspätete Seite führt nicht zu einem teilweisen Schreiben.
- BookClearText sendet leeren Text für jede Seite. Dadurch wird der bisherige Text des Buches zerstört; Verwendung auf Ihrer bearbeiteten Kopie. Titel und Autor bleiben gleich.
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.BookClearText");
UO.BookClearText();Parameter und Ablauf:
- Bei allen Beispielen wird davon ausgegangen, dass das erforderliche Buch bereits geöffnet ist, die erforderlichen Seiten empfangen wurden und das Buch zur Aufnahme bearbeitet wird. Die Zahlen 1, 2 und 3 sind Seitenzahlen; Stellen Sie sicher, dass sie existieren. Texte/Namen dienen zu Demonstrationszwecken.
UO.BookClearText();Parameter und Ablauf:
- Bei allen Beispielen wird davon ausgegangen, dass das erforderliche Buch bereits geöffnet ist, die erforderlichen Seiten empfangen wurden und das Buch zur Aufnahme bearbeitet wird. Die Zahlen 1, 2 und 3 sind Seitenzahlen; Stellen Sie sicher, dass sie existieren. Texte/Namen dienen zu Demonstrationszwecken.
return RunScenario();
object? RunScenario()
{
UO.BookClearText();
UO.BookSetHeader("New expedition", "Alice");
UO.BookSetPageText(1, "Bring bandages");
return null;
}Parameter und Ablauf:
- Bei allen Beispielen wird davon ausgegangen, dass das erforderliche Buch bereits geöffnet ist, die erforderlichen Seiten empfangen wurden und das Buch zur Aufnahme bearbeitet wird. Die Zahlen 1, 2 und 3 sind Seitenzahlen; Stellen Sie sicher, dass sie existieren. Texte/Namen dienen zu Demonstrationszwecken.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
ResetNotebook("Supply list", "Alice", "Bandages" + Chr(10) + "Food");
return null;
}
void ResetNotebook(dynamic title, dynamic author, dynamic firstPage)
{
UO.BookClearText();
UO.BookSetHeader(title, author);
UO.BookSetPageText(1, firstPage);
}
string Chr(object? value) => ((char)Convert.ToInt32(value)).ToString();
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.BookClearText:bridge.BookClearText().
Interner Implementierungscode; kein eigenständiges Skript.
case "bookcleartext":
state.BookPages.Clear();
bridge.BookClearText();
return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.BookGetPageText(object? page);Liest den Text einer Seite des zuletzt geöffneten Buches.
-
page– Seitenzahl von 1, nicht serial Buch. Die Obergrenze ist die Anzahl der vom Server gemeldeten Seiten.
string – Seitenzeilen, getrennt durch ein Zeilenumbruchzeichen, ohne Leerzeilen am Ende. Eine leere Zeichenfolge wird auch zurückgegeben, wenn die Arbeitsmappe nicht geöffnet ist, die Seite noch nicht empfangen wurde oder die Nummer falsch ist. Dies ist kein Hinweis darauf, dass die Seite existiert oder beschreibbar ist.
- Öffnen Sie zunächst das gewünschte Buch mit einer Spielaktion. Die Befehle verwenden das zuletzt geöffnete Buch: ID Buch wird nicht akzeptiert. Wenn Sie mehrere Bücher haben, stellen Sie sicher, dass Sie das richtige auswählen. Get liest bereits geladene Seiten und fordert nicht selbst die fehlende Seite an.
- Im Manager werden die Inhalte des Buches in der Sitzung gespeichert und stehen ohne Grafiken zur Verfügung. Durch das Schließen des Spielfensters werden das Buch und den Entwurf gespeichert, beim erneuten Öffnen werden sie wiederhergestellt. Durch das Schließen einer Arbeitsmappe wird diese aus den geöffneten Arbeitsmappen entfernt. Durch das Unterbrechen der Verbindung werden die Serverbücher zurückgesetzt.
- Änderungen sind nur für das Buch verfügbar, das Sie bearbeiten. Ungültige Seiten oder zu lange Texte werden abgelehnt. BookSetText prüft alle Seiten vor der ersten Übermittlung: Eine fehlerhafte verspätete Seite führt nicht zu einem teilweisen Schreiben.
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.BookGetPageText(1);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- Bei allen Beispielen wird davon ausgegangen, dass das erforderliche Buch bereits geöffnet ist, die erforderlichen Seiten empfangen wurden und das Buch zur Aufnahme bearbeitet wird. Die Zahlen 1, 2 und 3 sind Seitenzahlen; Stellen Sie sicher, dass sie existieren. Texte/Namen dienen zu Demonstrationszwecken.
var text = UO.BookGetPageText(1);
if (Truth(text != ""))
{
UO.Print(text);
}
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 allen Beispielen wird davon ausgegangen, dass das erforderliche Buch bereits geöffnet ist, die erforderlichen Seiten empfangen wurden und das Buch zur Aufnahme bearbeitet wird. Die Zahlen 1, 2 und 3 sind Seitenzahlen; Stellen Sie sicher, dass sie existieren. Texte/Namen dienen zu Demonstrationszwecken.
return RunScenario();
object? RunScenario()
{
var firstPage = UO.BookGetPageText(1);
if (Truth(firstPage != ""))
{
UO.BookSetPageText(3, firstPage);
}
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 allen Beispielen wird davon ausgegangen, dass das erforderliche Buch bereits geöffnet ist, die erforderlichen Seiten empfangen wurden und das Buch zur Aufnahme bearbeitet wird. Die Zahlen 1, 2 und 3 sind Seitenzahlen; Stellen Sie sicher, dass sie existieren. Texte/Namen dienen zu Demonstrationszwecken.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
ReplaceCampNote(2);
return null;
}
void ReplaceCampNote(dynamic page)
{
var text = UO.BookGetPageText(page);
if (Truth(text == "Camp A"))
{
UO.BookSetPageText(page, "Camp B");
}
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: page (Any)
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.BookGetPageText:bridge.BookGetPageText(pageNumber).
Interner Implementierungscode; kein eigenständiges Skript.
case "bookgetpagetext":
{
int pageNumber = Math.Max(1, Arg(0));
string liveText = bridge.BookGetPageText(pageNumber);
if (!string.IsNullOrEmpty(liveText))
return new InjectionValue(liveText);
int page = pageNumber - 1;
return new InjectionValue(page < state.BookPages.Count ? state.BookPages[page] : string.Empty);
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.BookSetHeader(object? title, object? author);Gibt den Titel und den Autor des geöffneten bearbeitbaren Buchs an.
-
title– Titel; Der Grafikeditor und der Befehl speichern die ersten 47-Zeichen. -
author– Autor; Die ersten 29-Zeichen werden gespeichert.
void – kein Wert. Dies ist eine Schreibanforderung, nicht true/false oder eine Serverbestätigung. Der Server verbietet möglicherweise die Bearbeitung.
- Öffnen Sie zunächst das gewünschte Buch mit einer Spielaktion. Die Befehle verwenden das zuletzt geöffnete Buch: ID Buch wird nicht akzeptiert. Wenn Sie mehrere Bücher haben, stellen Sie sicher, dass Sie das richtige auswählen. Get liest bereits geladene Seiten und fordert nicht selbst die fehlende Seite an.
- Im Manager werden die Inhalte des Buches in der Sitzung gespeichert und stehen ohne Grafiken zur Verfügung. Durch das Schließen des Spielfensters werden das Buch und den Entwurf gespeichert, beim erneuten Öffnen werden sie wiederhergestellt. Durch das Schließen einer Arbeitsmappe wird diese aus den geöffneten Arbeitsmappen entfernt. Durch das Unterbrechen der Verbindung werden die Serverbücher zurückgesetzt.
- Änderungen sind nur für das Buch verfügbar, das Sie bearbeiten. Ungültige Seiten oder zu lange Texte werden abgelehnt. BookSetText prüft alle Seiten vor der ersten Übermittlung: Eine fehlerhafte verspätete Seite führt nicht zu einem teilweisen Schreiben.
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.BookSetHeader");
UO.BookSetHeader("Mining route", "Alice");Parameter und Ablauf:
- Bei allen Beispielen wird davon ausgegangen, dass das erforderliche Buch bereits geöffnet ist, die erforderlichen Seiten empfangen wurden und das Buch zur Aufnahme bearbeitet wird. Die Zahlen 1, 2 und 3 sind Seitenzahlen; Stellen Sie sicher, dass sie existieren. Texte/Namen dienen zu Demonstrationszwecken.
UO.BookSetHeader("Mining route", "Alice");Parameter und Ablauf:
- Bei allen Beispielen wird davon ausgegangen, dass das erforderliche Buch bereits geöffnet ist, die erforderlichen Seiten empfangen wurden und das Buch zur Aufnahme bearbeitet wird. Die Zahlen 1, 2 und 3 sind Seitenzahlen; Stellen Sie sicher, dass sie existieren. Texte/Namen dienen zu Demonstrationszwecken.
return RunScenario();
object? RunScenario()
{
var route = "Northern mine";
var author = "Alice";
UO.BookSetHeader("Route: " + route, author);
return null;
}Parameter und Ablauf:
- Bei allen Beispielen wird davon ausgegangen, dass das erforderliche Buch bereits geöffnet ist, die erforderlichen Seiten empfangen wurden und das Buch zur Aufnahme bearbeitet wird. Die Zahlen 1, 2 und 3 sind Seitenzahlen; Stellen Sie sicher, dass sie existieren. Texte/Namen dienen zu Demonstrationszwecken.
- Die Hilfsfunktion ist vollständig angegeben. Sein true bedeutet, dass nur eine lokale Prüfung und ein Anruf durchgeführt werden; Es erfolgt keine Bestätigung der Aufzeichnung durch den Server.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var requested = SetNotebookHeader("Supply list", "Alice");
return null;
}
dynamic SetNotebookHeader(dynamic title, dynamic author)
{
if (Truth(Len(title) > 47) || Truth(Len(author) > 29))
{
return false;
}
UO.BookSetHeader(title, author);
return true;
}
int Len(object? value) => Convert.ToString(value)?.Length ?? 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: title (Any), author (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.BookSetHeader:bridge.BookSetHeader(state.BookTitle, state.BookAuthor).
Interner Implementierungscode; kein eigenständiges Skript.
case "booksetheader":
state.BookTitle = Text(0);
state.BookAuthor = Text(1);
bridge.BookSetHeader(state.BookTitle, state.BookAuthor);
return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.BookSetPageText(object? page, object? text);Ersetzt den Text einer Seite eines geöffneten, bearbeitbaren Buchs.
-
page– Seitenzahl von 1, nicht serial Buch. Die Obergrenze ist die Anzahl der vom Server gemeldeten Seiten. -
text– Text. Die Zeilen werden durch Chr(10) getrennt; Chr(13) wird entfernt. Bis zu 10 Zeilen pro Seite und 53 Zeichen pro Zeile. Das Nullzeichen ist verboten.
void – kein Wert. Dies ist eine Schreibanforderung, nicht true/false oder eine Serverbestätigung. Der Server verbietet möglicherweise die Bearbeitung.
- Öffnen Sie zunächst das gewünschte Buch mit einer Spielaktion. Die Befehle verwenden das zuletzt geöffnete Buch: ID Buch wird nicht akzeptiert. Wenn Sie mehrere Bücher haben, stellen Sie sicher, dass Sie das richtige auswählen. Get liest bereits geladene Seiten und fordert nicht selbst die fehlende Seite an.
- Im Manager werden die Inhalte des Buches in der Sitzung gespeichert und stehen ohne Grafiken zur Verfügung. Durch das Schließen des Spielfensters werden das Buch und den Entwurf gespeichert, beim erneuten Öffnen werden sie wiederhergestellt. Durch das Schließen einer Arbeitsmappe wird diese aus den geöffneten Arbeitsmappen entfernt. Durch das Unterbrechen der Verbindung werden die Serverbücher zurückgesetzt.
- Änderungen sind nur für das Buch verfügbar, das Sie bearbeiten. Ungültige Seiten oder zu lange Texte werden abgelehnt. BookSetText prüft alle Seiten vor der ersten Übermittlung: Eine fehlerhafte verspätete Seite führt nicht zu einem teilweisen Schreiben.
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.BookSetPageText");
UO.BookSetPageText(2, "Camp A");Parameter und Ablauf:
- Bei allen Beispielen wird davon ausgegangen, dass das erforderliche Buch bereits geöffnet ist, die erforderlichen Seiten empfangen wurden und das Buch zur Aufnahme bearbeitet wird. Die Zahlen 1, 2 und 3 sind Seitenzahlen; Stellen Sie sicher, dass sie existieren. Texte/Namen dienen zu Demonstrationszwecken.
UO.BookSetPageText(2, "Camp A");Parameter und Ablauf:
- Bei allen Beispielen wird davon ausgegangen, dass das erforderliche Buch bereits geöffnet ist, die erforderlichen Seiten empfangen wurden und das Buch zur Aufnahme bearbeitet wird. Die Zahlen 1, 2 und 3 sind Seitenzahlen; Stellen Sie sicher, dass sie existieren. Texte/Namen dienen zu Demonstrationszwecken.
return RunScenario();
object? RunScenario()
{
UO.BookSetPageText(1, "Supplies" + Chr(10) + "Bandages" + Chr(10) + "Food");
return null;
}
string Chr(object? value) => ((char)Convert.ToInt32(value)).ToString();Parameter und Ablauf:
- Bei allen Beispielen wird davon ausgegangen, dass das erforderliche Buch bereits geöffnet ist, die erforderlichen Seiten empfangen wurden und das Buch zur Aufnahme bearbeitet wird. Die Zahlen 1, 2 und 3 sind Seitenzahlen; Stellen Sie sicher, dass sie existieren. Texte/Namen dienen zu Demonstrationszwecken.
- Die Hilfsfunktion ist vollständig angegeben. Sein true bedeutet, dass nur eine lokale Prüfung und ein Anruf durchgeführt werden; Es erfolgt keine Bestätigung der Aufzeichnung durch den Server.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var requested = AppendNote(1, "Return before night");
return null;
}
dynamic AppendNote(dynamic page, dynamic line)
{
if (Truth(Len(line) > 53))
{
return false;
}
var previous = UO.BookGetPageText(page);
if (Truth(previous == ""))
{
UO.BookSetPageText(page, line);
return true;
}
var lineCount = 1;
for (int index = (int)(1); index <= Len(previous); index += (int)(1))
{
if (Truth(Mid(previous, index, 1) == Chr(10)))
{
lineCount = lineCount + 1;
}
}
if (Truth(lineCount >= 10))
{
return false;
}
UO.BookSetPageText(page, previous + Chr(10) + line);
return true;
}
string Chr(object? value) => ((char)Convert.ToInt32(value)).ToString();
int Len(object? value) => Convert.ToString(value)?.Length ?? 0;
string Mid(object? value, int start, int length = int.MaxValue)
{
string text = Convert.ToString(value) ?? "";
int offset = Math.Clamp(start - 1, 0, text.Length);
return text.Substring(offset, Math.Min(Math.Max(0, length), text.Length - offset));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: page (Any), text (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(1). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.BookSetPageText:bridge.BookSetPageText(page + 1, state.BookPages[page]).
Interner Implementierungscode; kein eigenständiges Skript.
case "booksetpagetext":
{
int page = Math.Max(0, Arg(0) - 1);
while (state.BookPages.Count <= page) state.BookPages.Add(string.Empty);
state.BookPages[page] = Text(1);
bridge.BookSetPageText(page + 1, state.BookPages[page]);
return InjectionValue.Unit;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.BookSetText(object? text);Schreibt Text von der ersten Seite eines geöffneten, bearbeitbaren Buches.
-
text– Text. Die Zeilen werden durch Chr(10) getrennt; Chr(13) wird entfernt. Bis zu 10 Zeilen pro Seite und 53 Zeichen pro Zeile. Das Nullzeichen ist verboten.
void – kein Wert. Dies ist eine Schreibanforderung, nicht true/false oder eine Serverbestätigung. Der Server verbietet möglicherweise die Bearbeitung.
- Öffnen Sie zunächst das gewünschte Buch mit einer Spielaktion. Die Befehle verwenden das zuletzt geöffnete Buch: ID Buch wird nicht akzeptiert. Wenn Sie mehrere Bücher haben, stellen Sie sicher, dass Sie das richtige auswählen. Get liest bereits geladene Seiten und fordert nicht selbst die fehlende Seite an.
- Im Manager werden die Inhalte des Buches in der Sitzung gespeichert und stehen ohne Grafiken zur Verfügung. Durch das Schließen des Spielfensters werden das Buch und den Entwurf gespeichert, beim erneuten Öffnen werden sie wiederhergestellt. Durch das Schließen einer Arbeitsmappe wird diese aus den geöffneten Arbeitsmappen entfernt. Durch das Unterbrechen der Verbindung werden die Serverbücher zurückgesetzt.
- Änderungen sind nur für das Buch verfügbar, das Sie bearbeiten. Ungültige Seiten oder zu lange Texte werden abgelehnt. BookSetText prüft alle Seiten vor der ersten Übermittlung: Eine fehlerhafte verspätete Seite führt nicht zu einem teilweisen Schreiben.
- BookSetText: Chr(12) trennt Seiten explizit. Wenn Chr(12) nicht vorhanden ist, bilden alle 10-Zeilen eine Seite. Die verbleibenden alten Seiten werden nicht gelöscht: Um sie vollständig zu ersetzen, rufen Sie zunächst BookClearText separat auf. Leerer Text ersetzt nur die erste Seite.
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.BookSetText");
UO.BookSetText("Camp A\nReturn home");Parameter und Ablauf:
- Bei allen Beispielen wird davon ausgegangen, dass das erforderliche Buch bereits geöffnet ist, die erforderlichen Seiten empfangen wurden und das Buch zur Aufnahme bearbeitet wird. Die Zahlen 1, 2 und 3 sind Seitenzahlen; Stellen Sie sicher, dass sie existieren. Texte/Namen dienen zu Demonstrationszwecken.
UO.BookSetText("Mining route" + Chr(10) + "Start at camp");
string Chr(object? value) => ((char)Convert.ToInt32(value)).ToString();Parameter und Ablauf:
- Bei allen Beispielen wird davon ausgegangen, dass das erforderliche Buch bereits geöffnet ist, die erforderlichen Seiten empfangen wurden und das Buch zur Aufnahme bearbeitet wird. Die Zahlen 1, 2 und 3 sind Seitenzahlen; Stellen Sie sicher, dass sie existieren. Texte/Namen dienen zu Demonstrationszwecken.
return RunScenario();
object? RunScenario()
{
UO.BookSetText("Camp A" + Chr(12) + "Camp B" + Chr(12) + "Return home");
return null;
}
string Chr(object? value) => ((char)Convert.ToInt32(value)).ToString();Parameter und Ablauf:
- Bei allen Beispielen wird davon ausgegangen, dass das erforderliche Buch bereits geöffnet ist, die erforderlichen Seiten empfangen wurden und das Buch zur Aufnahme bearbeitet wird. Die Zahlen 1, 2 und 3 sind Seitenzahlen; Stellen Sie sicher, dass sie existieren. Texte/Namen dienen zu Demonstrationszwecken.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
WriteRoute("Northern mine", "Bring bandages");
return null;
}
void WriteRoute(dynamic destination, dynamic supplies)
{
var firstPage = "Destination" + Chr(10) + destination;
var secondPage = "Supplies" + Chr(10) + supplies;
UO.BookSetText(firstPage + Chr(12) + secondPage);
}
string Chr(object? value) => ((char)Convert.ToInt32(value)).ToString();
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: text (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.BookSetText:bridge.BookSetText(bookText).
Interner Implementierungscode; kein eigenständiges Skript.
case "booksettext":
{
string bookText = Text(0) ?? string.Empty;
state.BookPages.Clear();
state.BookPages.AddRange(bookText.Split(new[] { '\f' }, StringSplitOptions.None));
bridge.BookSetText(bookText);
return InjectionValue.Unit;
}