Skip to content

UO Topic localization

Codex edited this page Oct 12, 2026 · 6 revisions

Українська · Русский · 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

Приклади на тему

Нижче наведено короткі приклади. У повному описі кожної команди є параметри, результат, обмеження та кілька самостійних скриптів: прямий код, варіант із функцією та варіант із класом.

UO.GetCliloc

Параметри, результат та всі сценарії

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;

UO.GetClilocByID

Параметри, результат та всі сценарії

var text = UO.GetClilocByID(1042971, "");
UO.Print(text);

Повний опис команд


UO.GetCliloc

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#-сигнатури

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.

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .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));

1. Властивості предмета в рюкзаку – прямий скрипт

Параметри та порядок виконання:

  • 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;

2. Обробити відсутність відповіді – функція сценарію

Параметри та порядок виконання:

  • 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;

3. Зберегти текст до наступної дії – клас сценарію

Параметри та порядок виконання:

  • 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.

UO.GetCliloc(objID) — UO.GetCliloc(Any)

Параметри: objID (Any)

Результат: dynamic / Any.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

case "getcliloc":

                case "gettooltip":

                    return new InjectionValue(bridge.GetTooltip(Arg(0)));

UO.GetClilocByID

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#-сигнатури

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).

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .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));

1. Шаблон без символів підстановки - прямий скрипт

Параметри та порядок виконання:

  • ClilocID=1042971 - приклад номера; замініть потрібним. Params — порожній рядок, який передається як єдине порожнє значення.
  • Для шаблону без маркерів встановлення порожній параметр не змінює текст. Якщо шаблон чекає на дані, передайте масив як у наступному прикладі.
var text = UO.GetClilocByID(1042971, "");
UO.Print(text);

2. Передати два значення – функція сценарію

Параметри та порядок виконання:

  • 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;
}

3. Перекласти першу реальну властивість — клас сценарію

Параметри та порядок виконання:

  • Перший аргумент - 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.

UO.GetClilocByID(clilocID, params) — UO.GetClilocByID(Any,Any)

Параметри: clilocID (Any), params (Any)

Результат: dynamic / Any.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

case "getclilocbyid":

                    return new InjectionValue(bridge.GetClilocById(Arg(0), StringArrayArg(1)));

UO.GetUserCodepage

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#-сигнатури

int UO.GetUserCodepage();

Повертає Encoding.Default.CodePage без читання налаштувань профілю.

Параметри

Параметрів немає.

Повернене значення

int — Encoding.Default.CodePage поточного процесу. Це кодування .NET, а не вибране кодування мови UO.

Поведінка

  • Повертає Encoding.Default.CodePage без читання налаштувань профілю. Значення залежить від середовища .NET; його не можна вважати гарантовано Windows ANSI.
  • Читає поточний локальний стан. Пакету, target та автоматичного оновлення немає; окремі читання можуть бачити різні стани.

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

var result = UO.GetUserCodepage();
UO.Print("GetUserCodepage: " + Convert.ToString(result));

1. Прямий виклик – прямий скрипт

Параметри та порядок виконання:

  • Повертає Encoding.Default.CodePage без читання налаштувань профілю.
UO.Print(UO.GetUserCodepage());

2. Явний варіант – функція сценарію

Параметри та порядок виконання:

  • Повертає 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;

3. Повна допоміжна функція – клас сценарію

Параметри та порядок виконання:

  • Читає поточний локальний стан. Пакету, 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.

UO.GetUserCodepage() — UO.GetUserCodepage()

Параметри: Немає параметрів.

Результат: int / Integer.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

public int GetUserCodepage() => Encoding.Default.CodePage;

Clone this wiki locally