Skip to content

ES UO Topic books

Codex edited this page Oct 12, 2026 · 4 revisions

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

Libros

Inicio · C# · IDE · UO API · A–Z · Ejemplos · Idiomas

Lectura y edición de libros de juegos: título, páginas y texto. Consulte la tarjeta para conocer los números de página válidos y el efecto de grabación.

Secciones

Tema Comandos y explicaciones
Read Page UO.BookGetPageText
Set Page UO.BookSetPageText
Set Header UO.BookSetHeader
Set Text UO.BookSetText
Clear Text UO.BookClearText

Todos los comandos del tema

Páginas de libros

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

Ejemplos sobre el tema.

Cada tarjeta de comando tiene varios escenarios independientes: código directo, funciones y clases. A continuación se muestran escenarios breves seleccionados; restricciones y análisis completos están en las cartas.

UO.BookGetPageText

Parámetros, resultado y todos los escenarios

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

Parámetros, resultado y todos los escenarios

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

Referencia completa de comandos


UO.BookClearText

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

Firmas de C#

void UO.BookClearText();

Elimina el texto de todas las páginas de un libro editable abierto, conservando el título y el autor.

Parámetros

No hay parámetros.

Valor devuelto

void - sin valor. Esta es una solicitud de escritura, no true/false ni una confirmación del servidor. El servidor puede prohibir la edición.

Comportamiento

  • Primero, abre el libro deseado usando una acción del juego. Los comandos utilizan el último libro abierto: ID el libro no se acepta. Si tiene varios libros, asegúrese de seleccionar el correcto. Get lee páginas ya cargadas y no solicita la página que falta.
  • En el administrador, el contenido del libro se almacena en la sesión y está disponible sin gráficos. Al cerrar la ventana del juego se guarda el libro y el borrador, al abrirla nuevamente se restauran. Al cerrar un libro, se elimina de los libros abiertos; Al romper la conexión se restablecen los libros del servidor.
  • Los cambios solo están disponibles para el libro que estás editando. Se rechaza la página no válida o el texto demasiado largo. BookSetText comprueba todas las páginas antes del primer envío: una página tardía errónea no provoca una escritura parcial.
  • BookClearText envía texto vacío para cada página. Esto destruye el texto anterior del libro; utilizar en su copia editada. El título y el autor siguen siendo los mismos.

Scripts independientes de C#

Cada ejemplo se puede guardar como un archivo independiente .csx y ejecutar en IDE. Las funciones de objeto UO y de espera proporcionan el anfitrión de la sesión de juego actual. Reemplace los nombres, coordenadas y direcciones de la demostración serial por los suyos propios.

Ejemplo sencillo

Ejecuta este código en un archivo .csx independiente. Los argumentos aparecen en la llamada; sustituye los nombres, seriales y direcciones de ejemplo por los tuyos.

El comando es una instrucción independiente. El mensaje anterior indica el inicio de la llamada y no confirma una acción del servidor.

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

1. Aplicación directa - guión directo

Parámetros y flujo de ejecución:

  • Todos los ejemplos suponen que el libro requerido ya está abierto, se han recibido las páginas requeridas y el libro se está editando para su grabación. Los números 1, 2 y 3 son números de página; asegúrese de que existan. Los textos/nombres son para fines de demostración.
UO.BookClearText();

2. Escenario de práctica: función de escenario

Parámetros y flujo de ejecución:

  • Todos los ejemplos suponen que el libro requerido ya está abierto, se han recibido las páginas requeridas y el libro se está editando para su grabación. Los números 1, 2 y 3 son números de página; asegúrese de que existan. Los textos/nombres son para fines de demostración.
return  RunScenario();
 object? RunScenario()
{
    UO.BookClearText();
    UO.BookSetHeader("New expedition", "Alice");
    UO.BookSetPageText(1, "Bring bandages");
    return null;
}

3. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • Todos los ejemplos suponen que el libro requerido ya está abierto, se han recibido las páginas requeridas y el libro se está editando para su grabación. Los números 1, 2 y 3 son números de página; asegúrese de que existan. Los textos/nombres son para fines de demostración.
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();
}

Implementación del comando

C# distingue mayúsculas y minúsculas. Use el nombre UO exacto. Compare indicadores numéricos con 0; use bool solo si la firma devuelve bool.

UO.BookClearText() — UO.BookClearText()

Parámetros: Sin parámetros.

Resultado: void / Unit.

Durante la llamada:

Código interno de implementación; no es un script independiente.

case "bookcleartext":

                    state.BookPages.Clear();

                    bridge.BookClearText();

                    return InjectionValue.Unit;

UO.BookGetPageText

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

Firmas de C#

dynamic UO.BookGetPageText(object? page);

Lee el texto de una página del último libro abierto.

Parámetros

  • page: número de página del libro 1, no del libro serial. El límite superior es el número de páginas reportadas por el servidor.

Valor devuelto

string: líneas de página separadas por un carácter de nueva línea, sin líneas vacías al final. También se devuelve una cadena vacía si el libro no está abierto, la página aún no se ha recibido o el número es incorrecto. Esto no es una indicación de que la página exista o se pueda escribir.

Comportamiento

  • Primero, abre el libro deseado usando una acción del juego. Los comandos utilizan el último libro abierto: ID el libro no se acepta. Si tiene varios libros, asegúrese de seleccionar el correcto. Get lee páginas ya cargadas y no solicita la página que falta.
  • En el administrador, el contenido del libro se almacena en la sesión y está disponible sin gráficos. Al cerrar la ventana del juego se guarda el libro y el borrador, al abrirla nuevamente se restauran. Al cerrar un libro, se elimina de los libros abiertos; Al romper la conexión se restablecen los libros del servidor.
  • Los cambios solo están disponibles para el libro que estás editando. Se rechaza la página no válida o el texto demasiado largo. BookSetText comprueba todas las páginas antes del primer envío: una página tardía errónea no provoca una escritura parcial.

Scripts independientes de C#

Cada ejemplo se puede guardar como un archivo independiente .csx y ejecutar en IDE. Las funciones de objeto UO y de espera proporcionan el anfitrión de la sesión de juego actual. Reemplace los nombres, coordenadas y direcciones de la demostración serial por los suyos propios.

Ejemplo sencillo

Ejecuta este código en un archivo .csx independiente. Los argumentos aparecen en la llamada; sustituye los nombres, seriales y direcciones de ejemplo por los tuyos.

El resultado de una sola llamada se muestra en el diario. Un número no se convierte en bool; para un array se muestra su cantidad de elementos.

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

1. Aplicación directa - guión directo

Parámetros y flujo de ejecución:

  • Todos los ejemplos suponen que el libro requerido ya está abierto, se han recibido las páginas requeridas y el libro se está editando para su grabación. Los números 1, 2 y 3 son números de página; asegúrese de que existan. Los textos/nombres son para fines de demostración.
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. Escenario de práctica: función de escenario

Parámetros y flujo de ejecución:

  • Todos los ejemplos suponen que el libro requerido ya está abierto, se han recibido las páginas requeridas y el libro se está editando para su grabación. Los números 1, 2 y 3 son números de página; asegúrese de que existan. Los textos/nombres son para fines de demostración.
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. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • Todos los ejemplos suponen que el libro requerido ya está abierto, se han recibido las páginas requeridas y el libro se está editando para su grabación. Los números 1, 2 y 3 son números de página; asegúrese de que existan. Los textos/nombres son para fines de demostración.
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;
}

Implementación del comando

C# distingue mayúsculas y minúsculas. Use el nombre UO exacto. Compare indicadores numéricos con 0; use bool solo si la firma devuelve bool.

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

Parámetros: page (Any)

Resultado: dynamic / Any.

Durante la llamada:

Código interno de implementación; no es un script independiente.

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 · 繁體中文 · 日本語 · 한국어

Firmas de C#

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

Especifica el título y el autor del libro editable abierto.

Parámetros

  • title - Título; El editor gráfico y el comando guardan los primeros caracteres 47.
  • author — Autor; Se guardan los primeros caracteres 29.

Valor devuelto

void - sin valor. Esta es una solicitud de escritura, no true/false ni una confirmación del servidor. El servidor puede prohibir la edición.

Comportamiento

  • Primero, abre el libro deseado usando una acción del juego. Los comandos utilizan el último libro abierto: ID el libro no se acepta. Si tiene varios libros, asegúrese de seleccionar el correcto. Get lee páginas ya cargadas y no solicita la página que falta.
  • En el administrador, el contenido del libro se almacena en la sesión y está disponible sin gráficos. Al cerrar la ventana del juego se guarda el libro y el borrador, al abrirla nuevamente se restauran. Al cerrar un libro, se elimina de los libros abiertos; Al romper la conexión se restablecen los libros del servidor.
  • Los cambios solo están disponibles para el libro que estás editando. Se rechaza la página no válida o el texto demasiado largo. BookSetText comprueba todas las páginas antes del primer envío: una página tardía errónea no provoca una escritura parcial.

Scripts independientes de C#

Cada ejemplo se puede guardar como un archivo independiente .csx y ejecutar en IDE. Las funciones de objeto UO y de espera proporcionan el anfitrión de la sesión de juego actual. Reemplace los nombres, coordenadas y direcciones de la demostración serial por los suyos propios.

Ejemplo sencillo

Ejecuta este código en un archivo .csx independiente. Los argumentos aparecen en la llamada; sustituye los nombres, seriales y direcciones de ejemplo por los tuyos.

El comando es una instrucción independiente. El mensaje anterior indica el inicio de la llamada y no confirma una acción del servidor.

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

1. Aplicación directa - guión directo

Parámetros y flujo de ejecución:

  • Todos los ejemplos suponen que el libro requerido ya está abierto, se han recibido las páginas requeridas y el libro se está editando para su grabación. Los números 1, 2 y 3 son números de página; asegúrese de que existan. Los textos/nombres son para fines de demostración.
UO.BookSetHeader("Mining route", "Alice");

2. Escenario de práctica: función de escenario

Parámetros y flujo de ejecución:

  • Todos los ejemplos suponen que el libro requerido ya está abierto, se han recibido las páginas requeridas y el libro se está editando para su grabación. Los números 1, 2 y 3 son números de página; asegúrese de que existan. Los textos/nombres son para fines de demostración.
return  RunScenario();
 object? RunScenario()
{
    var route = "Northern mine";
    var author = "Alice";
    UO.BookSetHeader("Route: " + route, author);
    return null;
}

3. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • Todos los ejemplos suponen que el libro requerido ya está abierto, se han recibido las páginas requeridas y el libro se está editando para su grabación. Los números 1, 2 y 3 son números de página; asegúrese de que existan. Los textos/nombres son para fines de demostración.
  • La función auxiliar se da en su totalidad. Su true significa realizar solo verificación y llamada local; no devuelve confirmación de la grabación por parte del servidor.
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;
}

Implementación del comando

C# distingue mayúsculas y minúsculas. Use el nombre UO exacto. Compare indicadores numéricos con 0; use bool solo si la firma devuelve bool.

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

Parámetros: title (Any), author (Any)

Resultado: void / Unit.

Durante la llamada:

Código interno de implementación; no es un script independiente.

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 · 繁體中文 · 日本語 · 한국어

Firmas de C#

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

Reemplaza el texto de una página de un libro editable abierto.

Parámetros

  • page: número de página del libro 1, no del libro serial. El límite superior es el número de páginas reportadas por el servidor.
  • text — Texto. Las líneas están separadas por Chr(10); Se elimina Chr(13). Hasta 10 líneas por página y 53 caracteres por línea. El carácter nulo está prohibido.

Valor devuelto

void - sin valor. Esta es una solicitud de escritura, no true/false ni una confirmación del servidor. El servidor puede prohibir la edición.

Comportamiento

  • Primero, abre el libro deseado usando una acción del juego. Los comandos utilizan el último libro abierto: ID el libro no se acepta. Si tiene varios libros, asegúrese de seleccionar el correcto. Get lee páginas ya cargadas y no solicita la página que falta.
  • En el administrador, el contenido del libro se almacena en la sesión y está disponible sin gráficos. Al cerrar la ventana del juego se guarda el libro y el borrador, al abrirla nuevamente se restauran. Al cerrar un libro, se elimina de los libros abiertos; Al romper la conexión se restablecen los libros del servidor.
  • Los cambios solo están disponibles para el libro que estás editando. Se rechaza la página no válida o el texto demasiado largo. BookSetText comprueba todas las páginas antes del primer envío: una página tardía errónea no provoca una escritura parcial.

Scripts independientes de C#

Cada ejemplo se puede guardar como un archivo independiente .csx y ejecutar en IDE. Las funciones de objeto UO y de espera proporcionan el anfitrión de la sesión de juego actual. Reemplace los nombres, coordenadas y direcciones de la demostración serial por los suyos propios.

Ejemplo sencillo

Ejecuta este código en un archivo .csx independiente. Los argumentos aparecen en la llamada; sustituye los nombres, seriales y direcciones de ejemplo por los tuyos.

El comando es una instrucción independiente. El mensaje anterior indica el inicio de la llamada y no confirma una acción del servidor.

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

1. Aplicación directa - guión directo

Parámetros y flujo de ejecución:

  • Todos los ejemplos suponen que el libro requerido ya está abierto, se han recibido las páginas requeridas y el libro se está editando para su grabación. Los números 1, 2 y 3 son números de página; asegúrese de que existan. Los textos/nombres son para fines de demostración.
UO.BookSetPageText(2, "Camp A");

2. Escenario de práctica: función de escenario

Parámetros y flujo de ejecución:

  • Todos los ejemplos suponen que el libro requerido ya está abierto, se han recibido las páginas requeridas y el libro se está editando para su grabación. Los números 1, 2 y 3 son números de página; asegúrese de que existan. Los textos/nombres son para fines de demostración.
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. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • Todos los ejemplos suponen que el libro requerido ya está abierto, se han recibido las páginas requeridas y el libro se está editando para su grabación. Los números 1, 2 y 3 son números de página; asegúrese de que existan. Los textos/nombres son para fines de demostración.
  • La función auxiliar se da en su totalidad. Su true significa realizar solo verificación y llamada local; no devuelve confirmación de la grabación por parte del servidor.
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;
}

Implementación del comando

C# distingue mayúsculas y minúsculas. Use el nombre UO exacto. Compare indicadores numéricos con 0; use bool solo si la firma devuelve bool.

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

Parámetros: page (Any), text (Any)

Resultado: void / Unit.

Durante la llamada:

Código interno de implementación; no es un script independiente.

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 · 繁體中文 · 日本語 · 한국어

Firmas de C#

void UO.BookSetText(object? text);

Escribe texto desde la primera página de un libro editable abierto.

Parámetros

  • text — Texto. Las líneas están separadas por Chr(10); Se elimina Chr(13). Hasta 10 líneas por página y 53 caracteres por línea. El carácter nulo está prohibido.

Valor devuelto

void - sin valor. Esta es una solicitud de escritura, no true/false ni una confirmación del servidor. El servidor puede prohibir la edición.

Comportamiento

  • Primero, abre el libro deseado usando una acción del juego. Los comandos utilizan el último libro abierto: ID el libro no se acepta. Si tiene varios libros, asegúrese de seleccionar el correcto. Get lee páginas ya cargadas y no solicita la página que falta.
  • En el administrador, el contenido del libro se almacena en la sesión y está disponible sin gráficos. Al cerrar la ventana del juego se guarda el libro y el borrador, al abrirla nuevamente se restauran. Al cerrar un libro, se elimina de los libros abiertos; Al romper la conexión se restablecen los libros del servidor.
  • Los cambios solo están disponibles para el libro que estás editando. Se rechaza la página no válida o el texto demasiado largo. BookSetText comprueba todas las páginas antes del primer envío: una página tardía errónea no provoca una escritura parcial.
  • BookSetText: Chr(12) separa páginas explícitamente. Si Chr(12) no está presente, cada línea 10 forma una página. Las páginas antiguas restantes no se borran: para reemplazarlas por completo, primero llame a BookClearText por separado. El texto en blanco reemplaza sólo la primera página.

Scripts independientes de C#

Cada ejemplo se puede guardar como un archivo independiente .csx y ejecutar en IDE. Las funciones de objeto UO y de espera proporcionan el anfitrión de la sesión de juego actual. Reemplace los nombres, coordenadas y direcciones de la demostración serial por los suyos propios.

Ejemplo sencillo

Ejecuta este código en un archivo .csx independiente. Los argumentos aparecen en la llamada; sustituye los nombres, seriales y direcciones de ejemplo por los tuyos.

El comando es una instrucción independiente. El mensaje anterior indica el inicio de la llamada y no confirma una acción del servidor.

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

1. Aplicación directa - guión directo

Parámetros y flujo de ejecución:

  • Todos los ejemplos suponen que el libro requerido ya está abierto, se han recibido las páginas requeridas y el libro se está editando para su grabación. Los números 1, 2 y 3 son números de página; asegúrese de que existan. Los textos/nombres son para fines de demostración.
UO.BookSetText("Mining route" + Chr(10) + "Start at camp");

string Chr(object? value) => ((char)Convert.ToInt32(value)).ToString();

2. Escenario de práctica: función de escenario

Parámetros y flujo de ejecución:

  • Todos los ejemplos suponen que el libro requerido ya está abierto, se han recibido las páginas requeridas y el libro se está editando para su grabación. Los números 1, 2 y 3 son números de página; asegúrese de que existan. Los textos/nombres son para fines de demostración.
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. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • Todos los ejemplos suponen que el libro requerido ya está abierto, se han recibido las páginas requeridas y el libro se está editando para su grabación. Los números 1, 2 y 3 son números de página; asegúrese de que existan. Los textos/nombres son para fines de demostración.
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();
}

Implementación del comando

C# distingue mayúsculas y minúsculas. Use el nombre UO exacto. Compare indicadores numéricos con 0; use bool solo si la firma devuelve bool.

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

Parámetros: text (Any)

Resultado: void / Unit.

Durante la llamada:

Código interno de implementación; no es un script independiente.

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;

                }

Clone this wiki locally