IT 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 · Esempi · Lingue
Lettura e modifica di libri di gioco: titolo, pagine e testo. Consultare la scheda per i numeri di pagina validi e l'effetto di registrazione.
| Argomento | Comandi e spiegazioni |
|---|---|
| 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
Ogni carta comando ha diversi scenari indipendenti: codice diretto, funzioni e classi. Di seguito sono selezionati brevi scenari; restrizioni e un'analisi completa sono nelle carte.
Parametri, risultato e tutti gli scenari
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;Parametri, risultato e tutti gli scenari
UO.BookSetPageText(2, "Camp A");Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.BookClearText();Rimuove il testo da tutte le pagine di un libro modificabile aperto, preservando il titolo e l'autore.
Non ci sono parametri.
void - nessun valore. Questa è una richiesta di scrittura, non true/false o una conferma del server. Il server potrebbe vietare la modifica.
- Innanzitutto, apri il libro desiderato utilizzando un'azione di gioco. I comandi utilizzano l'ultimo libro aperto: ID il libro non è accettato. Se hai più libri, assicurati di selezionare quello giusto. Get legge le pagine già caricate e non richiede la pagina mancante.
- Nel manager i contenuti del libro vengono memorizzati nella sessione e sono disponibili senza grafica. Chiudendo la finestra di gioco si salvano il libro e la bozza, riaprendola si ripristinano. La chiusura stessa di una cartella di lavoro la rimuove dalle cartelle di lavoro aperte; l'interruzione della connessione reimposta i libri del server.
- Le modifiche sono disponibili solo per il libro che stai modificando. La pagina non valida o il testo troppo lungo vengono rifiutati. BookSetText controlla tutte le pagine prima del primo invio: una pagina errata in ritardo non provoca una scrittura parziale.
- BookClearText invia testo vuoto per ogni pagina. Ciò distrugge il testo precedente del libro; utilizzare sulla copia modificata. Il titolo e l'autore rimangono gli stessi.
Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.
Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.
Il comando è un’istruzione separata. Il messaggio precedente indica l’inizio della chiamata e non conferma un’azione del server.
UO.Print("Calling UO.BookClearText");
UO.BookClearText();Parametri e flusso di esecuzione:
- Tutti gli esempi presuppongono che il libro richiesto sia già aperto, che le pagine richieste siano state ricevute e che il libro sia in fase di modifica per la registrazione. I numeri 1, 2 e 3 sono i numeri di pagina; assicurati che esistano. I testi/nomi sono a scopo dimostrativo.
UO.BookClearText();Parametri e flusso di esecuzione:
- Tutti gli esempi presuppongono che il libro richiesto sia già aperto, che le pagine richieste siano state ricevute e che il libro sia in fase di modifica per la registrazione. I numeri 1, 2 e 3 sono i numeri di pagina; assicurati che esistano. I testi/nomi sono a scopo dimostrativo.
return RunScenario();
object? RunScenario()
{
UO.BookClearText();
UO.BookSetHeader("New expedition", "Alice");
UO.BookSetPageText(1, "Bring bandages");
return null;
}Parametri e flusso di esecuzione:
- Tutti gli esempi presuppongono che il libro richiesto sia già aperto, che le pagine richieste siano state ricevute e che il libro sia in fase di modifica per la registrazione. I numeri 1, 2 e 3 sono i numeri di pagina; assicurati che esistano. I testi/nomi sono a scopo dimostrativo.
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 maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.
Parametri: Nessun parametro.
Risultato: void / Unit.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.BookClearText:bridge.BookClearText().
Codice interno di implementazione; non è uno script autonomo.
case "bookcleartext":
state.BookPages.Clear();
bridge.BookClearText();
return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.BookGetPageText(object? page);Legge il testo di una pagina dell'ultimo libro aperto.
-
page— Numero di pagina da 1, non serial libro. Il limite superiore è il numero di pagine segnalate dal server.
string — righe di pagina separate da un carattere di nuova riga, senza righe vuote alla fine. Viene restituita una stringa vuota anche se la cartella di lavoro non è aperta, la pagina non è stata ancora ricevuta o il numero non è corretto. Ciò non indica che la pagina esiste o è scrivibile.
- Innanzitutto, apri il libro desiderato utilizzando un'azione di gioco. I comandi utilizzano l'ultimo libro aperto: ID il libro non è accettato. Se hai più libri, assicurati di selezionare quello giusto. Get legge le pagine già caricate e non richiede la pagina mancante.
- Nel manager i contenuti del libro vengono memorizzati nella sessione e sono disponibili senza grafica. Chiudendo la finestra di gioco si salvano il libro e la bozza, riaprendola si ripristinano. La chiusura stessa di una cartella di lavoro la rimuove dalle cartelle di lavoro aperte; l'interruzione della connessione reimposta i libri del server.
- Le modifiche sono disponibili solo per il libro che stai modificando. La pagina non valida o il testo troppo lungo vengono rifiutati. BookSetText controlla tutte le pagine prima del primo invio: una pagina errata in ritardo non provoca una scrittura parziale.
Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.
Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.
Il risultato di una sola chiamata viene mostrato nel diario. Un numero non viene convertito in bool; per un array viene mostrato il numero di elementi.
object? result = UO.BookGetPageText(1);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parametri e flusso di esecuzione:
- Tutti gli esempi presuppongono che il libro richiesto sia già aperto, che le pagine richieste siano state ricevute e che il libro sia in fase di modifica per la registrazione. I numeri 1, 2 e 3 sono i numeri di pagina; assicurati che esistano. I testi/nomi sono a scopo dimostrativo.
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;Parametri e flusso di esecuzione:
- Tutti gli esempi presuppongono che il libro richiesto sia già aperto, che le pagine richieste siano state ricevute e che il libro sia in fase di modifica per la registrazione. I numeri 1, 2 e 3 sono i numeri di pagina; assicurati che esistano. I testi/nomi sono a scopo dimostrativo.
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;Parametri e flusso di esecuzione:
- Tutti gli esempi presuppongono che il libro richiesto sia già aperto, che le pagine richieste siano state ricevute e che il libro sia in fase di modifica per la registrazione. I numeri 1, 2 e 3 sono i numeri di pagina; assicurati che esistano. I testi/nomi sono a scopo dimostrativo.
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 maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.
Parametri: page (Any)
Risultato: dynamic / Any.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.BookGetPageText:bridge.BookGetPageText(pageNumber).
Codice interno di implementazione; non è uno script autonomo.
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);Specifica il titolo e l'autore del libro modificabile aperto.
-
title- Titolo; L'editor grafico e il comando salvano i primi caratteri 47. -
author— Autore; I primi caratteri 29 vengono salvati.
void - nessun valore. Questa è una richiesta di scrittura, non true/false o una conferma del server. Il server potrebbe vietare la modifica.
- Innanzitutto, apri il libro desiderato utilizzando un'azione di gioco. I comandi utilizzano l'ultimo libro aperto: ID il libro non è accettato. Se hai più libri, assicurati di selezionare quello giusto. Get legge le pagine già caricate e non richiede la pagina mancante.
- Nel manager i contenuti del libro vengono memorizzati nella sessione e sono disponibili senza grafica. Chiudendo la finestra di gioco si salvano il libro e la bozza, riaprendola si ripristinano. La chiusura stessa di una cartella di lavoro la rimuove dalle cartelle di lavoro aperte; l'interruzione della connessione reimposta i libri del server.
- Le modifiche sono disponibili solo per il libro che stai modificando. La pagina non valida o il testo troppo lungo vengono rifiutati. BookSetText controlla tutte le pagine prima del primo invio: una pagina errata in ritardo non provoca una scrittura parziale.
Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.
Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.
Il comando è un’istruzione separata. Il messaggio precedente indica l’inizio della chiamata e non conferma un’azione del server.
UO.Print("Calling UO.BookSetHeader");
UO.BookSetHeader("Mining route", "Alice");Parametri e flusso di esecuzione:
- Tutti gli esempi presuppongono che il libro richiesto sia già aperto, che le pagine richieste siano state ricevute e che il libro sia in fase di modifica per la registrazione. I numeri 1, 2 e 3 sono i numeri di pagina; assicurati che esistano. I testi/nomi sono a scopo dimostrativo.
UO.BookSetHeader("Mining route", "Alice");Parametri e flusso di esecuzione:
- Tutti gli esempi presuppongono che il libro richiesto sia già aperto, che le pagine richieste siano state ricevute e che il libro sia in fase di modifica per la registrazione. I numeri 1, 2 e 3 sono i numeri di pagina; assicurati che esistano. I testi/nomi sono a scopo dimostrativo.
return RunScenario();
object? RunScenario()
{
var route = "Northern mine";
var author = "Alice";
UO.BookSetHeader("Route: " + route, author);
return null;
}Parametri e flusso di esecuzione:
- Tutti gli esempi presuppongono che il libro richiesto sia già aperto, che le pagine richieste siano state ricevute e che il libro sia in fase di modifica per la registrazione. I numeri 1, 2 e 3 sono i numeri di pagina; assicurati che esistano. I testi/nomi sono a scopo dimostrativo.
- La funzione ausiliaria è data integralmente. Il suo true significa eseguire solo il controllo e la chiamata locale; non restituisce conferma dell'avvenuta registrazione da parte del 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# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.
Parametri: title (Any), author (Any)
Risultato: void / Unit.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.BookSetHeader:bridge.BookSetHeader(state.BookTitle, state.BookAuthor).
Codice interno di implementazione; non è uno script autonomo.
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);Sostituisce il testo di una pagina di un libro modificabile aperto.
-
page— Numero di pagina da 1, non serial libro. Il limite superiore è il numero di pagine segnalate dal server. -
text— Testo. Le linee sono separate da Chr(10); Chr(13) viene rimosso. Fino a 10 righe per pagina e 53 caratteri per riga. Il carattere null è vietato.
void - nessun valore. Questa è una richiesta di scrittura, non true/false o una conferma del server. Il server potrebbe vietare la modifica.
- Innanzitutto, apri il libro desiderato utilizzando un'azione di gioco. I comandi utilizzano l'ultimo libro aperto: ID il libro non è accettato. Se hai più libri, assicurati di selezionare quello giusto. Get legge le pagine già caricate e non richiede la pagina mancante.
- Nel manager i contenuti del libro vengono memorizzati nella sessione e sono disponibili senza grafica. Chiudendo la finestra di gioco si salvano il libro e la bozza, riaprendola si ripristinano. La chiusura stessa di una cartella di lavoro la rimuove dalle cartelle di lavoro aperte; l'interruzione della connessione reimposta i libri del server.
- Le modifiche sono disponibili solo per il libro che stai modificando. La pagina non valida o il testo troppo lungo vengono rifiutati. BookSetText controlla tutte le pagine prima del primo invio: una pagina errata in ritardo non provoca una scrittura parziale.
Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.
Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.
Il comando è un’istruzione separata. Il messaggio precedente indica l’inizio della chiamata e non conferma un’azione del server.
UO.Print("Calling UO.BookSetPageText");
UO.BookSetPageText(2, "Camp A");Parametri e flusso di esecuzione:
- Tutti gli esempi presuppongono che il libro richiesto sia già aperto, che le pagine richieste siano state ricevute e che il libro sia in fase di modifica per la registrazione. I numeri 1, 2 e 3 sono i numeri di pagina; assicurati che esistano. I testi/nomi sono a scopo dimostrativo.
UO.BookSetPageText(2, "Camp A");Parametri e flusso di esecuzione:
- Tutti gli esempi presuppongono che il libro richiesto sia già aperto, che le pagine richieste siano state ricevute e che il libro sia in fase di modifica per la registrazione. I numeri 1, 2 e 3 sono i numeri di pagina; assicurati che esistano. I testi/nomi sono a scopo dimostrativo.
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();Parametri e flusso di esecuzione:
- Tutti gli esempi presuppongono che il libro richiesto sia già aperto, che le pagine richieste siano state ricevute e che il libro sia in fase di modifica per la registrazione. I numeri 1, 2 e 3 sono i numeri di pagina; assicurati che esistano. I testi/nomi sono a scopo dimostrativo.
- La funzione ausiliaria è data integralmente. Il suo true significa eseguire solo il controllo e la chiamata locale; non restituisce conferma dell'avvenuta registrazione da parte del 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# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.
Parametri: page (Any), text (Any)
Risultato: void / Unit.
Durante la chiamata:
-
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]).
Codice interno di implementazione; non è uno script autonomo.
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);Scrive il testo dalla prima pagina di un libro modificabile aperto.
-
text— Testo. Le linee sono separate da Chr(10); Chr(13) viene rimosso. Fino a 10 righe per pagina e 53 caratteri per riga. Il carattere null è vietato.
void - nessun valore. Questa è una richiesta di scrittura, non true/false o una conferma del server. Il server potrebbe vietare la modifica.
- Innanzitutto, apri il libro desiderato utilizzando un'azione di gioco. I comandi utilizzano l'ultimo libro aperto: ID il libro non è accettato. Se hai più libri, assicurati di selezionare quello giusto. Get legge le pagine già caricate e non richiede la pagina mancante.
- Nel manager i contenuti del libro vengono memorizzati nella sessione e sono disponibili senza grafica. Chiudendo la finestra di gioco si salvano il libro e la bozza, riaprendola si ripristinano. La chiusura stessa di una cartella di lavoro la rimuove dalle cartelle di lavoro aperte; l'interruzione della connessione reimposta i libri del server.
- Le modifiche sono disponibili solo per il libro che stai modificando. La pagina non valida o il testo troppo lungo vengono rifiutati. BookSetText controlla tutte le pagine prima del primo invio: una pagina errata in ritardo non provoca una scrittura parziale.
- BookSetText: Chr(12) separa esplicitamente le pagine. Se Chr(12) non è presente, ogni riga 10 forma una pagina. Le vecchie pagine rimanenti non vengono cancellate: per sostituirle completamente chiamare prima BookClearText separatamente. Il testo vuoto sostituisce solo la prima pagina.
Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.
Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.
Il comando è un’istruzione separata. Il messaggio precedente indica l’inizio della chiamata e non conferma un’azione del server.
UO.Print("Calling UO.BookSetText");
UO.BookSetText("Camp A\nReturn home");Parametri e flusso di esecuzione:
- Tutti gli esempi presuppongono che il libro richiesto sia già aperto, che le pagine richieste siano state ricevute e che il libro sia in fase di modifica per la registrazione. I numeri 1, 2 e 3 sono i numeri di pagina; assicurati che esistano. I testi/nomi sono a scopo dimostrativo.
UO.BookSetText("Mining route" + Chr(10) + "Start at camp");
string Chr(object? value) => ((char)Convert.ToInt32(value)).ToString();Parametri e flusso di esecuzione:
- Tutti gli esempi presuppongono che il libro richiesto sia già aperto, che le pagine richieste siano state ricevute e che il libro sia in fase di modifica per la registrazione. I numeri 1, 2 e 3 sono i numeri di pagina; assicurati che esistano. I testi/nomi sono a scopo dimostrativo.
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();Parametri e flusso di esecuzione:
- Tutti gli esempi presuppongono che il libro richiesto sia già aperto, che le pagine richieste siano state ricevute e che il libro sia in fase di modifica per la registrazione. I numeri 1, 2 e 3 sono i numeri di pagina; assicurati che esistano. I testi/nomi sono a scopo dimostrativo.
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 maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.
Parametri: text (Any)
Risultato: void / Unit.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.BookSetText:bridge.BookSetText(bookText).
Codice interno di implementazione; non è uno script autonomo.
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;
}