Repository navigation
UO Topic localization
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Головна · C# · IDE · Команди UO · За абеткою · Приклади · Мови
Отримання ігрового тексту за номером cliloc — запису в каталозі локалізованих повідомлень — і перевірка кодування. Назви методів UO та C# залишаються однаковими незалежно від мови довідника.
| Тема | Команди та пояснення |
|---|---|
| Локалізовані ігрові повідомлення | UO.GetCliloc |
| Текст за номером повідомлення | UO.GetClilocByID |
| Кодування | UO.GetUserCodepage |
UO.GetCliloc · UO.GetClilocByID · UO.GetUserCodepage
Нижче наведено короткі приклади. У повному описі кожної команди є параметри, результат, обмеження та кілька самостійних скриптів: прямий код, варіант із функцією та варіант із класом.
Параметри, результат та всі сценарії
var item = UO.FindType(0x0EED, -1, "backpack");
if (Truth(item != ""))
{
UO.Print(UO.GetCliloc(item));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри, результат та всі сценарії
var text = UO.GetClilocByID(1042971, "");
UO.Print(text);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetCliloc(object? objID);Читає готовий текст властивостей об'єкта з OPL. GetTooltip та GetCliloc є синонімами.
-
objID— Обов'язковий serial/ID об'єкта, не type і не cliloc. Допускається int, десятковий/hex-рядок, self, backpack, lasttarget, finditem або ім'я AddObject. 0 означає відсутність об'єкта.
string - ім'я та текст властивостей, розділені перекладом рядка, або лише непуста частина. Порожній рядок при ObjID=0 або якщо властивості не отримані. Це готовий текст; числові ID cliloc та параметри повертає GetTooltipRec.
- Якщо запис вже є в OPL, його текст повертається відразу. За відсутності запису надсилається запит властивостей і очікується відповідь до 200 мс з перевіркою кожні 10 мс. Пауза означає гарантоване отримання відповіді.
- Потрібний доступний об'єкт та підтримка властивостей сервером. Порожній результат не є доказом відсутності об'єкта: використовуйте окремо Exists.
- Текст може містити розмітку сервера. Чи не розбирайте числові властивості по позиції рядка; для цього використовуйте GetTooltipRec.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.GetCliloc("backpack");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- FindType: золото 0x0EED, будь-який hue=-1, прямий вміст backpack. ObjID=item - знайдений serial.
- Результат getter – текст, а не кількість золота. Для кількості використовуйте FindCount(item).
var item = UO.FindType(0x0EED, -1, "backpack");
if (Truth(item != ""))
{
UO.Print(UO.GetCliloc(item));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- ObjID=lasttarget має вказувати на потрібний об'єкт.
- Порожній рядок обробляється окремо; автоматично повторювати запит у нескінченному циклі не потрібно.
return RunScenario();
object? RunScenario()
{
var text = UO.GetCliloc("lasttarget");
if (Truth(text == ""))
{
UO.Print("No properties received");
}
else
{
UO.Print(text);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- id та saved — окремі змінні: унікальний ID об'єкта та знімок його тексту.
- saved не зміниться автоматично, якщо властивості на сервері пізніше зміняться.
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 id = UO.GetSerial("lasttarget");
var saved = UO.GetCliloc(id);
UO.Print("Object: 0x" + Hex(id));
UO.Print(saved);
return null;
}
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: objID (Any)
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetTooltip:bridge.GetTooltip(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Внутрішній код реалізації, не самостійний скрипт.
case "getcliloc":
case "gettooltip":
return new InjectionValue(bridge.GetTooltip(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetClilocByID(object? clilocID, object? @params);Перекладає шаблон cliloc з ігрових файлів та підставляє передані параметри.
-
clilocID- Обов'язковий int - ID локалізованого повідомлення, не serial об'єкта і не graphic. Наприклад, номер із row[0] результату GetTooltipRec. -
params— Обов'язковий Array підстановок у порядку1_...,2_.... Допускається одне скалярне значення: воно перетворюється на масив із одного рядка. Для шаблону без параметрів можна передати порожній рядок. Елемент #число посилається на інший cliloc. Елементи перетворюються на рядки; краще передавати рядки явно.
string — переведений шаблон із підстановками з Params. За відсутності завантажувача cliloc повертається порожній рядок. При невідомому ID завантажений ClilocLoader повертає діагностичний текст MegaCliloc: missing із цим номером та підставленими параметрами. Не повертає cliloc ID чи ознака успіху.
- Для властивостей об'єкта спочатку GetTooltipRec(ObjID): номер повідомлення та об'єкт — різні ID. Для готового тексту всіх властивостей використовуйте GetTooltip(ObjID).
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.GetClilocByID(1042971, "");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- ClilocID=1042971 - приклад номера; замініть потрібним. Params — порожній рядок, який передається як єдине порожнє значення.
- Для шаблону без маркерів встановлення порожній параметр не змінює текст. Якщо шаблон чекає на дані, передайте масив як у наступному прикладі.
var text = UO.GetClilocByID(1042971, "");
UO.Print(text);Параметри та порядок виконання:
- ClilocID=1042971 є прикладом шаблону. args[0] і args[1] займають позиції першого та другого параметрів.
- Індекс оголошення змінної [1] створює два елементи: від 0 до 1. Використовуйте ID шаблону, який очікує на відповідні параметри.
return RunScenario();
object? RunScenario()
{
dynamic[] args = new dynamic[checked((int)(1) + 1)];
args[0] = "iron";
args[1] = "ingot";
UO.Print(UO.GetClilocByID(1042971, args));
return null;
}Параметри та порядок виконання:
- Перший аргумент - clilocID властивості; другий - його готовий масив Params.
- Перевіряється наявність хоча б одного запису. Усі параметри отримані від сервера і передаються разом з ID.
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 rows = UO.GetTooltipRec("lasttarget");
if (Truth(ArrayLength(rows) > 0))
{
var row = rows[0];
UO.Print(UO.GetClilocByID(row[0], row[1]));
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.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.
Параметри: clilocID (Any), params (Any)
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetClilocById:bridge.GetClilocById(Arg(0), StringArrayArg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::StringArrayArg:StringArrayArg(1).
Внутрішній код реалізації, не самостійний скрипт.
case "getclilocbyid":
return new InjectionValue(bridge.GetClilocById(Arg(0), StringArrayArg(1)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetUserCodepage();Повертає Encoding.Default.CodePage без читання налаштувань профілю.
Параметрів немає.
int — Encoding.Default.CodePage поточного процесу. Це кодування .NET, а не вибране кодування мови UO.
- Повертає Encoding.Default.CodePage без читання налаштувань профілю. Значення залежить від середовища .NET; його не можна вважати гарантовано Windows ANSI.
- Читає поточний локальний стан. Пакету, target та автоматичного оновлення немає; окремі читання можуть бачити різні стани.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetUserCodepage();
UO.Print("GetUserCodepage: " + Convert.ToString(result));Параметри та порядок виконання:
- Повертає Encoding.Default.CodePage без читання налаштувань профілю.
UO.Print(UO.GetUserCodepage());Параметри та порядок виконання:
- Повертає Encoding.Default.CodePage без читання налаштувань профілю. Значення залежить від середовища .NET; його не можна вважати гарантовано Windows ANSI.
return RunScenario();
object? RunScenario()
{
var codepage = UO.GetUserCodepage();
if (Truth(codepage == 65001))
{
UO.Print("UTF-8");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Читає поточний локальний стан. Пакету, target та автоматичного оновлення немає; окремі читання можуть бачити різні стани.
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 before = UO.GetUserCodepage();
UO.Wait(500);
var after = UO.GetUserCodepage();
UO.Print(before);
UO.Print(after);
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: int / Integer.
Під час виклику:
Внутрішній код реалізації, не самостійний скрипт.
public int GetUserCodepage() => Encoding.Default.CodePage;ClassicUO — Bad Newbie & C# Scripts IDE