FR UO Topic books - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Accueil · C# · IDE · UO API · A–Z · Exemples · Langues
Lecture et édition de livres de jeux : titre, pages et texte. Consultez la carte pour connaître les numéros de page valides et l'effet d'enregistrement.
| Sujet | Commandes et explications |
|---|---|
| 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
Chaque carte de commande possède plusieurs scénarios indépendants : code direct, fonctions et classes. Vous trouverez ci-dessous une sélection de courts scénarios ; des restrictions et une analyse complète sont à prévoir.
Paramètres, résultat et tous les scénarios
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;Paramètres, résultat et tous les scénarios
UO.BookSetPageText(2, "Camp A");Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.BookClearText();Supprime le texte de toutes les pages d'un livre modifiable ouvert, en préservant le titre et l'auteur.
Il n'y a pas de paramètres.
void - aucune valeur. Il s'agit d'une demande d'écriture, pas de true/false ou d'une confirmation du serveur. Le serveur peut interdire l'édition.
- Tout d’abord, ouvrez le livre souhaité à l’aide d’une action de jeu. Les commandes utilisent le dernier livre ouvert : le livre ID n'est pas accepté. Si vous possédez plusieurs livres, assurez-vous de sélectionner le bon. Get lit les pages déjà chargées et ne demande pas lui-même la page manquante.
- Dans le gestionnaire, le contenu du livre est stocké dans la session et est disponible sans graphique. La fermeture de la fenêtre de jeu enregistre le livre et le brouillon, la réouverture les restaure. La fermeture d'un classeur lui-même le supprime des classeurs ouverts ; la rupture de la connexion réinitialise les livres du serveur.
- Les modifications ne sont disponibles que pour le livre que vous modifiez. Une page invalide ou un texte trop long est rejeté. BookSetText vérifie toutes les pages avant la première soumission : une page tardive erronée ne provoque pas d'écriture partielle.
- BookClearText envoie du texte vide pour chaque page. Cela détruit le texte précédent du livre ; utiliser sur votre copie éditée. Le titre et l'auteur restent les mêmes.
Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.
Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.
La commande forme une instruction séparée. Le message précédent indique le début de l’appel et ne confirme aucune action du serveur.
UO.Print("Calling UO.BookClearText");
UO.BookClearText();Paramètres et déroulement de l’exécution :
- Tous les exemples supposent que le livre requis est déjà ouvert, que les pages requises ont été reçues et que le livre est en cours d'édition pour l'enregistrement. Les numéros 1, 2 et 3 sont des numéros de page ; assurez-vous qu'ils existent. Les textes/noms sont à des fins de démonstration.
UO.BookClearText();Paramètres et déroulement de l’exécution :
- Tous les exemples supposent que le livre requis est déjà ouvert, que les pages requises ont été reçues et que le livre est en cours d'édition pour l'enregistrement. Les numéros 1, 2 et 3 sont des numéros de page ; assurez-vous qu'ils existent. Les textes/noms sont à des fins de démonstration.
return RunScenario();
object? RunScenario()
{
UO.BookClearText();
UO.BookSetHeader("New expedition", "Alice");
UO.BookSetPageText(1, "Bring bandages");
return null;
}Paramètres et déroulement de l’exécution :
- Tous les exemples supposent que le livre requis est déjà ouvert, que les pages requises ont été reçues et que le livre est en cours d'édition pour l'enregistrement. Les numéros 1, 2 et 3 sont des numéros de page ; assurez-vous qu'ils existent. Les textes/noms sont à des fins de démonstration.
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 les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: Aucun paramètre.
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.BookClearText:bridge.BookClearText().
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "bookcleartext":
state.BookPages.Clear();
bridge.BookClearText();
return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.BookGetPageText(object? page);Lit le texte d'une page du dernier livre ouvert.
-
page— Numéro de page du livre 1, pas serial. La limite supérieure est le nombre de pages signalées par le serveur.
string — lignes de page séparées par un caractère de nouvelle ligne, sans lignes vides à la fin. Une chaîne vide est également renvoyée si le classeur n'est pas ouvert, si la page n'a pas encore été reçue ou si le numéro est incorrect. Cela ne signifie pas que la page existe ou est accessible en écriture.
- Tout d’abord, ouvrez le livre souhaité à l’aide d’une action de jeu. Les commandes utilisent le dernier livre ouvert : le livre ID n'est pas accepté. Si vous possédez plusieurs livres, assurez-vous de sélectionner le bon. Get lit les pages déjà chargées et ne demande pas lui-même la page manquante.
- Dans le gestionnaire, le contenu du livre est stocké dans la session et est disponible sans graphique. La fermeture de la fenêtre de jeu enregistre le livre et le brouillon, la réouverture les restaure. La fermeture d'un classeur lui-même le supprime des classeurs ouverts ; la rupture de la connexion réinitialise les livres du serveur.
- Les modifications ne sont disponibles que pour le livre que vous modifiez. Une page invalide ou un texte trop long est rejeté. BookSetText vérifie toutes les pages avant la première soumission : une page tardive erronée ne provoque pas d'écriture partielle.
Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.
Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.
Le résultat d’un seul appel est affiché dans le journal. Un nombre n’est pas converti en bool ; un tableau est affiché par son nombre d’éléments.
object? result = UO.BookGetPageText(1);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Tous les exemples supposent que le livre requis est déjà ouvert, que les pages requises ont été reçues et que le livre est en cours d'édition pour l'enregistrement. Les numéros 1, 2 et 3 sont des numéros de page ; assurez-vous qu'ils existent. Les textes/noms sont à des fins de démonstration.
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;Paramètres et déroulement de l’exécution :
- Tous les exemples supposent que le livre requis est déjà ouvert, que les pages requises ont été reçues et que le livre est en cours d'édition pour l'enregistrement. Les numéros 1, 2 et 3 sont des numéros de page ; assurez-vous qu'ils existent. Les textes/noms sont à des fins de démonstration.
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;Paramètres et déroulement de l’exécution :
- Tous les exemples supposent que le livre requis est déjà ouvert, que les pages requises ont été reçues et que le livre est en cours d'édition pour l'enregistrement. Les numéros 1, 2 et 3 sont des numéros de page ; assurez-vous qu'ils existent. Les textes/noms sont à des fins de démonstration.
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 les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: page (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.BookGetPageText:bridge.BookGetPageText(pageNumber).
Code interne de l’implémentation ; ce n’est pas un script autonome.
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);Spécifie le titre et l'auteur du livre modifiable ouvert.
-
title— Titre ; L'éditeur graphique et la commande enregistrent les premiers caractères 47. -
author— Auteur ; Les premiers caractères 29 sont enregistrés.
void - aucune valeur. Il s'agit d'une demande d'écriture, pas de true/false ou d'une confirmation du serveur. Le serveur peut interdire l'édition.
- Tout d’abord, ouvrez le livre souhaité à l’aide d’une action de jeu. Les commandes utilisent le dernier livre ouvert : le livre ID n'est pas accepté. Si vous possédez plusieurs livres, assurez-vous de sélectionner le bon. Get lit les pages déjà chargées et ne demande pas lui-même la page manquante.
- Dans le gestionnaire, le contenu du livre est stocké dans la session et est disponible sans graphique. La fermeture de la fenêtre de jeu enregistre le livre et le brouillon, la réouverture les restaure. La fermeture d'un classeur lui-même le supprime des classeurs ouverts ; la rupture de la connexion réinitialise les livres du serveur.
- Les modifications ne sont disponibles que pour le livre que vous modifiez. Une page invalide ou un texte trop long est rejeté. BookSetText vérifie toutes les pages avant la première soumission : une page tardive erronée ne provoque pas d'écriture partielle.
Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.
Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.
La commande forme une instruction séparée. Le message précédent indique le début de l’appel et ne confirme aucune action du serveur.
UO.Print("Calling UO.BookSetHeader");
UO.BookSetHeader("Mining route", "Alice");Paramètres et déroulement de l’exécution :
- Tous les exemples supposent que le livre requis est déjà ouvert, que les pages requises ont été reçues et que le livre est en cours d'édition pour l'enregistrement. Les numéros 1, 2 et 3 sont des numéros de page ; assurez-vous qu'ils existent. Les textes/noms sont à des fins de démonstration.
UO.BookSetHeader("Mining route", "Alice");Paramètres et déroulement de l’exécution :
- Tous les exemples supposent que le livre requis est déjà ouvert, que les pages requises ont été reçues et que le livre est en cours d'édition pour l'enregistrement. Les numéros 1, 2 et 3 sont des numéros de page ; assurez-vous qu'ils existent. Les textes/noms sont à des fins de démonstration.
return RunScenario();
object? RunScenario()
{
var route = "Northern mine";
var author = "Alice";
UO.BookSetHeader("Route: " + route, author);
return null;
}Paramètres et déroulement de l’exécution :
- Tous les exemples supposent que le livre requis est déjà ouvert, que les pages requises ont été reçues et que le livre est en cours d'édition pour l'enregistrement. Les numéros 1, 2 et 3 sont des numéros de page ; assurez-vous qu'ils existent. Les textes/noms sont à des fins de démonstration.
- La fonction auxiliaire est donnée dans son intégralité. Son true signifie effectuer uniquement une vérification et un appel locaux ; il ne renvoie pas de confirmation de l'enregistrement par le serveur.
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 les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: title (Any), author (Any)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.BookSetHeader:bridge.BookSetHeader(state.BookTitle, state.BookAuthor).
Code interne de l’implémentation ; ce n’est pas un script autonome.
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);Remplace le texte d'une page d'un livre modifiable ouvert.
-
page— Numéro de page du livre 1, pas serial. La limite supérieure est le nombre de pages signalées par le serveur. -
text— Texte. Les lignes sont séparées par Chr(10); Chr(13) est supprimé. Jusqu'à 10 lignes par page et 53 caractères par ligne. Le caractère nul est interdit.
void - aucune valeur. Il s'agit d'une demande d'écriture, pas de true/false ou d'une confirmation du serveur. Le serveur peut interdire l'édition.
- Tout d’abord, ouvrez le livre souhaité à l’aide d’une action de jeu. Les commandes utilisent le dernier livre ouvert : le livre ID n'est pas accepté. Si vous possédez plusieurs livres, assurez-vous de sélectionner le bon. Get lit les pages déjà chargées et ne demande pas lui-même la page manquante.
- Dans le gestionnaire, le contenu du livre est stocké dans la session et est disponible sans graphique. La fermeture de la fenêtre de jeu enregistre le livre et le brouillon, la réouverture les restaure. La fermeture d'un classeur lui-même le supprime des classeurs ouverts ; la rupture de la connexion réinitialise les livres du serveur.
- Les modifications ne sont disponibles que pour le livre que vous modifiez. Une page invalide ou un texte trop long est rejeté. BookSetText vérifie toutes les pages avant la première soumission : une page tardive erronée ne provoque pas d'écriture partielle.
Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.
Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.
La commande forme une instruction séparée. Le message précédent indique le début de l’appel et ne confirme aucune action du serveur.
UO.Print("Calling UO.BookSetPageText");
UO.BookSetPageText(2, "Camp A");Paramètres et déroulement de l’exécution :
- Tous les exemples supposent que le livre requis est déjà ouvert, que les pages requises ont été reçues et que le livre est en cours d'édition pour l'enregistrement. Les numéros 1, 2 et 3 sont des numéros de page ; assurez-vous qu'ils existent. Les textes/noms sont à des fins de démonstration.
UO.BookSetPageText(2, "Camp A");Paramètres et déroulement de l’exécution :
- Tous les exemples supposent que le livre requis est déjà ouvert, que les pages requises ont été reçues et que le livre est en cours d'édition pour l'enregistrement. Les numéros 1, 2 et 3 sont des numéros de page ; assurez-vous qu'ils existent. Les textes/noms sont à des fins de démonstration.
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();Paramètres et déroulement de l’exécution :
- Tous les exemples supposent que le livre requis est déjà ouvert, que les pages requises ont été reçues et que le livre est en cours d'édition pour l'enregistrement. Les numéros 1, 2 et 3 sont des numéros de page ; assurez-vous qu'ils existent. Les textes/noms sont à des fins de démonstration.
- La fonction auxiliaire est donnée dans son intégralité. Son true signifie effectuer uniquement une vérification et un appel locaux ; il ne renvoie pas de confirmation de l'enregistrement par le serveur.
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 les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: page (Any), text (Any)
Résultat: void / Unit.
Pendant un appel:
-
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]).
Code interne de l’implémentation ; ce n’est pas un script autonome.
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);Écrit le texte de la première page d'un livre modifiable ouvert.
-
text— Texte. Les lignes sont séparées par Chr(10); Chr(13) est supprimé. Jusqu'à 10 lignes par page et 53 caractères par ligne. Le caractère nul est interdit.
void - aucune valeur. Il s'agit d'une demande d'écriture, pas de true/false ou d'une confirmation du serveur. Le serveur peut interdire l'édition.
- Tout d’abord, ouvrez le livre souhaité à l’aide d’une action de jeu. Les commandes utilisent le dernier livre ouvert : le livre ID n'est pas accepté. Si vous possédez plusieurs livres, assurez-vous de sélectionner le bon. Get lit les pages déjà chargées et ne demande pas lui-même la page manquante.
- Dans le gestionnaire, le contenu du livre est stocké dans la session et est disponible sans graphique. La fermeture de la fenêtre de jeu enregistre le livre et le brouillon, la réouverture les restaure. La fermeture d'un classeur lui-même le supprime des classeurs ouverts ; la rupture de la connexion réinitialise les livres du serveur.
- Les modifications ne sont disponibles que pour le livre que vous modifiez. Une page invalide ou un texte trop long est rejeté. BookSetText vérifie toutes les pages avant la première soumission : une page tardive erronée ne provoque pas d'écriture partielle.
- BookSetText : Chr(12) sépare explicitement les pages. Si Chr(12) n'est pas présent, toutes les lignes 10 forment une page. Les anciennes pages restantes ne sont pas effacées : pour les remplacer complètement, appelez d'abord BookClearText séparément. Le texte vide remplace uniquement la première page.
Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.
Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.
La commande forme une instruction séparée. Le message précédent indique le début de l’appel et ne confirme aucune action du serveur.
UO.Print("Calling UO.BookSetText");
UO.BookSetText("Camp A\nReturn home");Paramètres et déroulement de l’exécution :
- Tous les exemples supposent que le livre requis est déjà ouvert, que les pages requises ont été reçues et que le livre est en cours d'édition pour l'enregistrement. Les numéros 1, 2 et 3 sont des numéros de page ; assurez-vous qu'ils existent. Les textes/noms sont à des fins de démonstration.
UO.BookSetText("Mining route" + Chr(10) + "Start at camp");
string Chr(object? value) => ((char)Convert.ToInt32(value)).ToString();Paramètres et déroulement de l’exécution :
- Tous les exemples supposent que le livre requis est déjà ouvert, que les pages requises ont été reçues et que le livre est en cours d'édition pour l'enregistrement. Les numéros 1, 2 et 3 sont des numéros de page ; assurez-vous qu'ils existent. Les textes/noms sont à des fins de démonstration.
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();Paramètres et déroulement de l’exécution :
- Tous les exemples supposent que le livre requis est déjà ouvert, que les pages requises ont été reçues et que le livre est en cours d'édition pour l'enregistrement. Les numéros 1, 2 et 3 sont des numéros de page ; assurez-vous qu'ils existent. Les textes/noms sont à des fins de démonstration.
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 les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: text (Any)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.BookSetText:bridge.BookSetText(bookText).
Code interne de l’implémentation ; ce n’est pas un script autonome.
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;
}