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

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

Bücher

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.

Abschnitte

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

Alle Theme-Befehle

Buchseiten

UO.BookGetPageText · UO.BookSetPageText · UO.BookSetHeader · UO.BookSetText · UO.BookClearText

Beispiele zum Thema

Jede Befehlskarte verfügt über mehrere unabhängige Szenarien: Direktcode, Funktionen und Klassen. Nachfolgend finden Sie ausgewählte kurze Szenarien; Einschränkungen und eine vollständige Analyse sind geplant.

UO.BookGetPageText

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;

UO.BookSetPageText

Parameter, Ergebnis und alle Szenarien

UO.BookSetPageText(2, "Camp A");

Vollständige Befehlsreferenz


UO.BookClearText

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

C#-Signaturen

void UO.BookClearText();

Entfernt Text von allen Seiten eines geöffneten, bearbeitbaren Buchs und behält dabei Titel und Autor bei.

Parameter

Es gibt keine Parameter.

Rückgabewert

void – kein Wert. Dies ist eine Schreibanforderung, nicht true/false oder eine Serverbestätigung. Der Server verbietet möglicherweise die Bearbeitung.

Verhalten

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

Eigenständige C#-Skripte

Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.

Einfaches Beispiel

Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.

Der Befehl steht in einer eigenen Anweisung. Die Meldung davor zeigt den Beginn des Aufrufs und bestätigt keine Serveraktion.

UO.Print("Calling UO.BookClearText");
UO.BookClearText();

1. Direkte Bewerbung – direktes Skript

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

2. Übungsszenario – Szenariofunktion

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

3. Vollständige Hilfsfunktion – Skriptklasse

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

Implementierung des Befehls

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

UO.BookClearText() — UO.BookClearText()

Parameter: Keine Parameter.

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "bookcleartext":

                    state.BookPages.Clear();

                    bridge.BookClearText();

                    return InjectionValue.Unit;

UO.BookGetPageText

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

C#-Signaturen

dynamic UO.BookGetPageText(object? page);

Liest den Text einer Seite des zuletzt geöffneten Buches.

Parameter

  • page – Seitenzahl von 1, nicht serial Buch. Die Obergrenze ist die Anzahl der vom Server gemeldeten Seiten.

Rückgabewert

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.

Verhalten

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

Eigenständige C#-Skripte

Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.

Einfaches Beispiel

Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.

Das Ergebnis eines Aufrufs wird im Journal ausgegeben. Zahlen werden nicht in bool umgewandelt; bei Arrays wird die Anzahl der Elemente angezeigt.

object? result = UO.BookGetPageText(1);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Direkte Bewerbung – direktes Skript

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;

2. Übungsszenario – Szenariofunktion

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;

3. Vollständige Hilfsfunktion – Skriptklasse

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

Implementierung des Befehls

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

UO.BookGetPageText(page) — UO.BookGetPageText(Any)

Parameter: page (Any)

Ergebnis: dynamic / Any.

Beim Aufruf:

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

                }

UO.BookSetHeader

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

C#-Signaturen

void UO.BookSetHeader(object? title, object? author);

Gibt den Titel und den Autor des geöffneten bearbeitbaren Buchs an.

Parameter

  • title – Titel; Der Grafikeditor und der Befehl speichern die ersten 47-Zeichen.
  • author – Autor; Die ersten 29-Zeichen werden gespeichert.

Rückgabewert

void – kein Wert. Dies ist eine Schreibanforderung, nicht true/false oder eine Serverbestätigung. Der Server verbietet möglicherweise die Bearbeitung.

Verhalten

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

Eigenständige C#-Skripte

Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.

Einfaches Beispiel

Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.

Der Befehl steht in einer eigenen Anweisung. Die Meldung davor zeigt den Beginn des Aufrufs und bestätigt keine Serveraktion.

UO.Print("Calling UO.BookSetHeader");
UO.BookSetHeader("Mining route", "Alice");

1. Direkte Bewerbung – direktes Skript

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

2. Übungsszenario – Szenariofunktion

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

3. Vollständige Hilfsfunktion – Skriptklasse

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

Implementierung des Befehls

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

UO.BookSetHeader(title, author) — UO.BookSetHeader(Any,Any)

Parameter: title (Any), author (Any)

Ergebnis: void / Unit.

Beim Aufruf:

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;

UO.BookSetPageText

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

C#-Signaturen

void UO.BookSetPageText(object? page, object? text);

Ersetzt den Text einer Seite eines geöffneten, bearbeitbaren Buchs.

Parameter

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

Rückgabewert

void – kein Wert. Dies ist eine Schreibanforderung, nicht true/false oder eine Serverbestätigung. Der Server verbietet möglicherweise die Bearbeitung.

Verhalten

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

Eigenständige C#-Skripte

Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.

Einfaches Beispiel

Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.

Der Befehl steht in einer eigenen Anweisung. Die Meldung davor zeigt den Beginn des Aufrufs und bestätigt keine Serveraktion.

UO.Print("Calling UO.BookSetPageText");
UO.BookSetPageText(2, "Camp A");

1. Direkte Bewerbung – direktes Skript

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

2. Übungsszenario – Szenariofunktion

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

3. Vollständige Hilfsfunktion – Skriptklasse

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

Implementierung des Befehls

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

UO.BookSetPageText(page, text) — UO.BookSetPageText(Any,Any)

Parameter: page (Any), text (Any)

Ergebnis: void / Unit.

Beim Aufruf:

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;

                }

UO.BookSetText

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

C#-Signaturen

void UO.BookSetText(object? text);

Schreibt Text von der ersten Seite eines geöffneten, bearbeitbaren Buches.

Parameter

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

Rückgabewert

void – kein Wert. Dies ist eine Schreibanforderung, nicht true/false oder eine Serverbestätigung. Der Server verbietet möglicherweise die Bearbeitung.

Verhalten

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

Eigenständige C#-Skripte

Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.

Einfaches Beispiel

Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.

Der Befehl steht in einer eigenen Anweisung. Die Meldung davor zeigt den Beginn des Aufrufs und bestätigt keine Serveraktion.

UO.Print("Calling UO.BookSetText");
UO.BookSetText("Camp A\nReturn home");

1. Direkte Bewerbung – direktes Skript

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

2. Übungsszenario – Szenariofunktion

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

3. Vollständige Hilfsfunktion – Skriptklasse

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

Implementierung des Befehls

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

UO.BookSetText(text) — UO.BookSetText(Any)

Parameter: text (Any)

Ergebnis: void / Unit.

Beim Aufruf:

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;

                }
⚠️ **GitHub.com Fallback** ⚠️