Repository navigation
UO Topic books
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Головна · C# · IDE · Команди UO · За абеткою · Приклади · Мови
Читання та зміна заголовка, сторінок і тексту ігрової книги. Допустимі номери сторінок і правила запису наведено в описі кожної команди.
| Тема | Команди та пояснення |
|---|---|
| Читання сторінки | UO.BookGetPageText |
| Запис сторінки | UO.BookSetPageText |
| Заголовок книги | UO.BookSetHeader |
| Запис тексту | UO.BookSetText |
| Очищення тексту | UO.BookClearText |
UO.BookGetPageText · UO.BookSetPageText · UO.BookSetHeader · UO.BookSetText · UO.BookClearText
Нижче наведено короткі приклади. У повному описі кожної команди є параметри, результат, обмеження та кілька самостійних скриптів: прямий код, варіант із функцією та варіант із класом.
Параметри, результат та всі сценарії
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(2, "Camp A");Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.BookClearText();Видаляє текст усіх сторінок відкритої книги, що редагується, зберігаючи заголовок і автора.
Параметрів немає.
void - значення немає. Це запит запису, а не true/false і не підтвердження сервера. Сервер може заборонити редагування.
- Спочатку відкрийте потрібну книгу ігровою дією. Команди використовують останню відкриту книгу: ID книги не приймаються. При кількох книгах переконайтеся, що вибрано потрібну. Get читає вже завантажені сторінки і сам не запитує сторінку, що бракує.
- У менеджері вміст книги зберігається у сеансі та доступний без графіки. Закриття ігрового вікна зберігає книгу та чернетку, повторне відкриття відновлює їх. Закриття самої книги видаляє її з відкритих книг; розрив з'єднання скидає серверні книги.
- Зміни доступні лише для редагованої книги. Неправильна сторінка або надто довгий текст відхиляються. BookSetText перевіряє всі сторінки до першої відправки: помилкова пізня сторінка не викликає часткового запису.
- BookClearText надсилає порожній текст для кожної сторінки. Це знищує колишній текст книги; використовуйте на своїй редагованій копії. Заголовок та автор залишаються колишніми.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.BookClearText");
UO.BookClearText();Параметри та порядок виконання:
- Всі приклади припускають, що потрібна книга вже відкрита, необхідні сторінки отримані, а для запису редагована книга. Числа 1, 2 та 3 — номери сторінок; переконайтеся, що вони є. Текст/імена демонстраційні.
UO.BookClearText();Параметри та порядок виконання:
- Всі приклади припускають, що потрібна книга вже відкрита, необхідні сторінки отримані, а для запису редагована книга. Числа 1, 2 та 3 — номери сторінок; переконайтеся, що вони є. Текст/імена демонстраційні.
return RunScenario();
object? RunScenario()
{
UO.BookClearText();
UO.BookSetHeader("New expedition", "Alice");
UO.BookSetPageText(1, "Bring bandages");
return null;
}Параметри та порядок виконання:
- Всі приклади припускають, що потрібна книга вже відкрита, необхідні сторінки отримані, а для запису редагована книга. Числа 1, 2 та 3 — номери сторінок; переконайтеся, що вони є. Текст/імена демонстраційні.
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# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.BookClearText:bridge.BookClearText().
Внутрішній код реалізації, не самостійний скрипт.
case "bookcleartext":
state.BookPages.Clear();
bridge.BookClearText();
return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.BookGetPageText(object? page);Читає текст однієї сторінки останньої відкритої книги.
-
page— Номер сторінки від 1, не serial книги. Верхня межа – кількість сторінок, повідомлена сервером.
string — рядки сторінки через символ перекладу рядка без порожніх рядків наприкінці. Порожній рядок також повертається, якщо книга не відкрита, сторінку ще не отримано або номер неправильний. Це не є ознакою, що сторінка існує або доступна для запису.
- Спочатку відкрийте потрібну книгу ігровою дією. Команди використовують останню відкриту книгу: ID книги не приймаються. При кількох книгах переконайтеся, що вибрано потрібну. Get читає вже завантажені сторінки і сам не запитує сторінку, що бракує.
- У менеджері вміст книги зберігається у сеансі та доступний без графіки. Закриття ігрового вікна зберігає книгу та чернетку, повторне відкриття відновлює їх. Закриття самої книги видаляє її з відкритих книг; розрив з'єднання скидає серверні книги.
- Зміни доступні лише для редагованої книги. Неправильна сторінка або надто довгий текст відхиляються. BookSetText перевіряє всі сторінки до першої відправки: помилкова пізня сторінка не викликає часткового запису.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.BookGetPageText(1);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- Всі приклади припускають, що потрібна книга вже відкрита, необхідні сторінки отримані, а для запису редагована книга. Числа 1, 2 та 3 — номери сторінок; переконайтеся, що вони є. Текст/імена демонстраційні.
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;Параметри та порядок виконання:
- Всі приклади припускають, що потрібна книга вже відкрита, необхідні сторінки отримані, а для запису редагована книга. Числа 1, 2 та 3 — номери сторінок; переконайтеся, що вони є. Текст/імена демонстраційні.
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;Параметри та порядок виконання:
- Всі приклади припускають, що потрібна книга вже відкрита, необхідні сторінки отримані, а для запису редагована книга. Числа 1, 2 та 3 — номери сторінок; переконайтеся, що вони є. Текст/імена демонстраційні.
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# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: page (Any)
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.BookGetPageText:bridge.BookGetPageText(pageNumber).
Внутрішній код реалізації, не самостійний скрипт.
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);Задає заголовок і автора відкритої книги, що редагується.
-
title- Заголовок; графічний редактор та команда зберігають перші 47 символів. -
author- Автор; зберігаються перші 29 символів.
void - значення немає. Це запит запису, а не true/false і не підтвердження сервера. Сервер може заборонити редагування.
- Спочатку відкрийте потрібну книгу ігровою дією. Команди використовують останню відкриту книгу: ID книги не приймаються. При кількох книгах переконайтеся, що вибрано потрібну. Get читає вже завантажені сторінки і сам не запитує сторінку, що бракує.
- У менеджері вміст книги зберігається у сеансі та доступний без графіки. Закриття ігрового вікна зберігає книгу та чернетку, повторне відкриття відновлює їх. Закриття самої книги видаляє її з відкритих книг; розрив з'єднання скидає серверні книги.
- Зміни доступні лише для редагованої книги. Неправильна сторінка або надто довгий текст відхиляються. BookSetText перевіряє всі сторінки до першої відправки: помилкова пізня сторінка не викликає часткового запису.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.BookSetHeader");
UO.BookSetHeader("Mining route", "Alice");Параметри та порядок виконання:
- Всі приклади припускають, що потрібна книга вже відкрита, необхідні сторінки отримані, а для запису редагована книга. Числа 1, 2 та 3 — номери сторінок; переконайтеся, що вони є. Текст/імена демонстраційні.
UO.BookSetHeader("Mining route", "Alice");Параметри та порядок виконання:
- Всі приклади припускають, що потрібна книга вже відкрита, необхідні сторінки отримані, а для запису редагована книга. Числа 1, 2 та 3 — номери сторінок; переконайтеся, що вони є. Текст/імена демонстраційні.
return RunScenario();
object? RunScenario()
{
var route = "Northern mine";
var author = "Alice";
UO.BookSetHeader("Route: " + route, author);
return null;
}Параметри та порядок виконання:
- Всі приклади припускають, що потрібна книга вже відкрита, необхідні сторінки отримані, а для запису редагована книга. Числа 1, 2 та 3 — номери сторінок; переконайтеся, що вони є. Текст/імена демонстраційні.
- Допоміжна функція наведена цілком. Її true означає лише виконання локальної перевірки та виклику; підтвердження запису сервером вона не повертає.
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# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: title (Any), author (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.BookSetHeader:bridge.BookSetHeader(state.BookTitle, state.BookAuthor).
Внутрішній код реалізації, не самостійний скрипт.
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);Замінює текст однієї сторінки відкритої книги, що редагується.
-
page— Номер сторінки від 1, не serial книги. Верхня межа – кількість сторінок, повідомлена сервером. -
text- Текст. Рядки поділяються Chr(10); Chr(13) видаляється. До 10 рядків на сторінку та 53 символів у рядку. Нульовий символ заборонено.
void - значення немає. Це запит запису, а не true/false і не підтвердження сервера. Сервер може заборонити редагування.
- Спочатку відкрийте потрібну книгу ігровою дією. Команди використовують останню відкриту книгу: ID книги не приймаються. При кількох книгах переконайтеся, що вибрано потрібну. Get читає вже завантажені сторінки і сам не запитує сторінку, що бракує.
- У менеджері вміст книги зберігається у сеансі та доступний без графіки. Закриття ігрового вікна зберігає книгу та чернетку, повторне відкриття відновлює їх. Закриття самої книги видаляє її з відкритих книг; розрив з'єднання скидає серверні книги.
- Зміни доступні лише для редагованої книги. Неправильна сторінка або надто довгий текст відхиляються. BookSetText перевіряє всі сторінки до першої відправки: помилкова пізня сторінка не викликає часткового запису.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.BookSetPageText");
UO.BookSetPageText(2, "Camp A");Параметри та порядок виконання:
- Всі приклади припускають, що потрібна книга вже відкрита, необхідні сторінки отримані, а для запису редагована книга. Числа 1, 2 та 3 — номери сторінок; переконайтеся, що вони є. Текст/імена демонстраційні.
UO.BookSetPageText(2, "Camp A");Параметри та порядок виконання:
- Всі приклади припускають, що потрібна книга вже відкрита, необхідні сторінки отримані, а для запису редагована книга. Числа 1, 2 та 3 — номери сторінок; переконайтеся, що вони є. Текст/імена демонстраційні.
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();Параметри та порядок виконання:
- Всі приклади припускають, що потрібна книга вже відкрита, необхідні сторінки отримані, а для запису редагована книга. Числа 1, 2 та 3 — номери сторінок; переконайтеся, що вони є. Текст/імена демонстраційні.
- Допоміжна функція наведена цілком. Її true означає лише виконання локальної перевірки та виклику; підтвердження запису сервером вона не повертає.
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# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: page (Any), text (Any)
Результат: void / Unit.
Під час виклику:
-
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]).
Внутрішній код реалізації, не самостійний скрипт.
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);Записує текст з першої сторінки відкритої книги, що редагується.
-
text- Текст. Рядки поділяються Chr(10); Chr(13) видаляється. До 10 рядків на сторінку та 53 символів у рядку. Нульовий символ заборонено.
void - значення немає. Це запит запису, а не true/false і не підтвердження сервера. Сервер може заборонити редагування.
- Спочатку відкрийте потрібну книгу ігровою дією. Команди використовують останню відкриту книгу: ID книги не приймаються. При кількох книгах переконайтеся, що вибрано потрібну. Get читає вже завантажені сторінки і сам не запитує сторінку, що бракує.
- У менеджері вміст книги зберігається у сеансі та доступний без графіки. Закриття ігрового вікна зберігає книгу та чернетку, повторне відкриття відновлює їх. Закриття самої книги видаляє її з відкритих книг; розрив з'єднання скидає серверні книги.
- Зміни доступні лише для редагованої книги. Неправильна сторінка або надто довгий текст відхиляються. BookSetText перевіряє всі сторінки до першої відправки: помилкова пізня сторінка не викликає часткового запису.
- BookSetText: Chr(12) явно поділяє сторінки. Якщо Chr(12) немає, кожні 10 рядків утворюють сторінку. Старі сторінки, що залишилися, не очищаються: для повної заміни спочатку окремо викличте BookClearText. Порожній текст замінює лише першу сторінку.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.BookSetText");
UO.BookSetText("Camp A\nReturn home");Параметри та порядок виконання:
- Всі приклади припускають, що потрібна книга вже відкрита, необхідні сторінки отримані, а для запису редагована книга. Числа 1, 2 та 3 — номери сторінок; переконайтеся, що вони є. Текст/імена демонстраційні.
UO.BookSetText("Mining route" + Chr(10) + "Start at camp");
string Chr(object? value) => ((char)Convert.ToInt32(value)).ToString();Параметри та порядок виконання:
- Всі приклади припускають, що потрібна книга вже відкрита, необхідні сторінки отримані, а для запису редагована книга. Числа 1, 2 та 3 — номери сторінок; переконайтеся, що вони є. Текст/імена демонстраційні.
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();Параметри та порядок виконання:
- Всі приклади припускають, що потрібна книга вже відкрита, необхідні сторінки отримані, а для запису редагована книга. Числа 1, 2 та 3 — номери сторінок; переконайтеся, що вони є. Текст/імена демонстраційні.
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# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: text (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.BookSetText:bridge.BookSetText(bookText).
Внутрішній код реалізації, не самостійний скрипт.
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