Repository navigation
ES UO Topic books
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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.
| Tema | Comandos y explicaciones |
|---|---|
| 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
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.
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;Parámetros, resultado y todos los escenarios
UO.BookSetPageText(2, "Camp A");Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.BookClearText();Elimina el texto de todas las páginas de un libro editable abierto, conservando el título y el autor.
No hay parámetros.
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.
- 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.
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.
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();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();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;
}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();
}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.
Parámetros: Sin parámetros.
Resultado: void / Unit.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.BookClearText:bridge.BookClearText().
Código interno de implementación; no es un script independiente.
case "bookcleartext":
state.BookPages.Clear();
bridge.BookClearText();
return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.BookGetPageText(object? page);Lee el texto de una página del último libro abierto.
-
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.
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.
- 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.
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.
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));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;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;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;
}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.
Parámetros: page (Any)
Resultado: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.BookGetPageText:bridge.BookGetPageText(pageNumber).
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);
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.BookSetHeader(object? title, object? author);Especifica el título y el autor del libro editable abierto.
-
title- Título; El editor gráfico y el comando guardan los primeros caracteres 47. -
author— Autor; Se guardan los primeros caracteres 29.
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.
- 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.
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.
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");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");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;
}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;
}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.
Parámetros: title (Any), author (Any)
Resultado: void / Unit.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.BookSetHeader:bridge.BookSetHeader(state.BookTitle, state.BookAuthor).
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;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.BookSetPageText(object? page, object? text);Reemplaza el texto de una página de un libro editable abierto.
-
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.
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.
- 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.
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.
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");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");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();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;
}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.
Parámetros: page (Any), text (Any)
Resultado: void / Unit.
Durante la llamada:
-
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]).
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;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.BookSetText(object? text);Escribe texto desde la primera página de un libro editable abierto.
-
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.
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.
- 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.
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.
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");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();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();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();
}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.
Parámetros: text (Any)
Resultado: void / Unit.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.BookSetText:bridge.BookSetText(bookText).
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;
}ClassicUO — Bad Newbie & C# Scripts IDE