Repository navigation
RU UO Topic localization
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Главная · C# · IDE · UO API · A–Z · Примеры · Языки
Получение локализованного текста cliloc и сведений о кодировке. Имена команд API при смене языка не переводятся.
| Тема | Команды и пояснения |
|---|---|
| Cliloc | UO.GetCliloc |
| Cliloc by ID | UO.GetClilocByID |
| Codepage | 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