Skip to content

RU UO Topic conversion compatibility

Codex edited this page Oct 12, 2026 · 4 revisions

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

Преобразование и совместимость

Главная · C# · IDE · UO API · A–Z · Примеры · Языки

Преобразования чисел, serial и старых форматов скриптов. Совместимое имя может иметь ограничения или явно запрещённую операцию — это указано в карточке.

Разделы

Тема Команды и пояснения
Hex / int UO.Hex2Int · UO.Int2Hex
EUO ↔ Injection UO.EUO2ID · UO.EUO2Type · UO.EUO2Inj · UO.Inj2EUO
EasyUO UO.GetEasyUO · UO.SetEasyUO
Type Conversion C# и стандартная библиотека · C# и стандартная библиотека · C# и стандартная библиотека · C# и стандартная библиотека · C# и стандартная библиотека · C# и стандартная библиотека

Все команды темы

Конверсия

UO.Hex2Int · UO.Int2Hex · UO.ScanInt · UO.EUO2ID · UO.EUO2Inj · UO.EUO2Type · UO.Inj2EUO

Ограничения совместимости

UO.BoxHack · UO.ShutdownWindows

Примеры по теме

В каждой карточке команды есть несколько самостоятельных сценариев: прямой код, функции и классы. Ниже приведены отдельные короткие сценарии; ограничения и полный разбор находятся в карточках.

UO.Int2Hex

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

UO.Print(UO.Int2Hex(1073746484));

UO.EUO2ID

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

var value = UO.EUO2ID("B");
UO.Print(Convert.ToString(value));

Полное описание команд


UO.BoxHack

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

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

void UO.BoxHack();

Печатает уведомление, что устаревший патч нативного клиента BoxHack не требуется ClassicUO.

Параметры

Параметров нет.

Возвращает

void — возвращаемого значения нет.

Поведение

  • Ветка ExecuteLegacyManualAlias только вызывает SystemMessage. Она не исправляет движение, речь, контейнеры или сетевой протокол.

Самостоятельные C#-скрипты

Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.

Простой пример

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

Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.

UO.Print("Calling UO.BoxHack");
UO.BoxHack();

1. Уведомление о совместимости — прямой скрипт

Параметры и ход выполнения:

  • Сообщение описывает отсутствие необходимости в старом патче.
UO.BoxHack();

2. Вызов в процедуре — функция сценария

Параметры и ход выполнения:

  • Процедура совместимости не изменяет игровой мир.
return  RunScenario();
 object? RunScenario()
{
    CompatibilityNotice();
    return null;
}

void CompatibilityNotice()
{
    UO.BoxHack();
}

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()
    {
        UO.BoxHack();
        UO.Print("continued");
        return null;
    }
}

Реализация команды

C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.

UO.BoxHack() — UO.BoxHack()

Параметры: Параметров нет.

Результат: void / Unit.

При вызове:

Внутренний код реализации, не самостоятельный скрипт.

case "boxhack":

                case "fixtalk":

                case "fixwalk":

                    SystemMessage($"{name}: obsolete native-client patch; ClassicUO does not require it.");

                    break;

UO.EUO2ID

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

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

dynamic UO.EUO2ID(object? euo);

Декодирует буквенную запись EasyUO по основанию 26 с A=0.

Параметры

  • euo — Строка/значение EasyUO. Буквы приводятся к верхнему регистру; небуквенные символы пропускаются.

Возвращает

int — полученное 32-битное числовое значение; это не hex-строка.

Поведение

  • Последовательно вычисляет value=value*26+(letter-A). Аккумулятор uint работает unchecked, поэтому переполнение оборачивается по 32 битам. Пустая строка и строка без букв дают 0. Никаких объектов мира не ищет.

Самостоятельные C#-скрипты

Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.

Простой пример

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

Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.

object? result = UO.EUO2ID("B");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Однобуквенное значение — прямой скрипт

Параметры и ход выполнения:

  • B кодирует число 1.
var value = UO.EUO2ID("B");
UO.Print(Convert.ToString(value));

2. Небуквенные символы — функция сценария

Параметры и ход выполнения:

  • Регистр не важен; дефис и восклицательный знак пропускаются.
return  RunScenario();
 object? RunScenario()
{
    var value = UO.EUO2ID("b-!");
    UO.Print(Convert.ToString(value));
    return null;
}

3. Нулевая запись — класс сценария

Параметры и ход выполнения:

  • A кодирует ноль; результат не обозначает найденный объект.
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 value = UO.EUO2ID("A");
        UO.Print(Convert.ToString(value));
        return null;
    }
}

Реализация команды

C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.

UO.EUO2ID(euo) — UO.EUO2ID(Any)

Параметры: euo (Any)

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

При вызове:

Внутренний код реализации, не самостоятельный скрипт.

case "euo2id":

                case "euo2type": return new InjectionValue(DecodeEasyUoId(Text(0)));

UO.EUO2Inj

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

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

string UO.EUO2Inj(object? easyValue);

Декодирует буквенную запись EasyUO по основанию 26 с A=0.

Параметры

  • easyValue — Строка/значение EasyUO. Буквы приводятся к верхнему регистру; небуквенные символы пропускаются.

Возвращает

string — hex-строка Injection полученного serial.

Поведение

  • Последовательно вычисляет value=value*26+(letter-A). Аккумулятор uint работает unchecked, поэтому переполнение оборачивается по 32 битам. Пустая строка и строка без букв дают 0. Никаких объектов мира не ищет.

Самостоятельные C#-скрипты

Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.

Простой пример

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

Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.

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

1. Однобуквенное значение — прямой скрипт

Параметры и ход выполнения:

  • B кодирует число 1.
var value = UO.EUO2Inj("B");
UO.Print(Convert.ToString(value));

2. Небуквенные символы — функция сценария

Параметры и ход выполнения:

  • Регистр не важен; дефис и восклицательный знак пропускаются.
return  RunScenario();
 object? RunScenario()
{
    var value = UO.EUO2Inj("b-!");
    UO.Print(Convert.ToString(value));
    return null;
}

3. Нулевая запись — класс сценария

Параметры и ход выполнения:

  • A кодирует ноль; результат не обозначает найденный объект.
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 value = UO.EUO2Inj("A");
        UO.Print(Convert.ToString(value));
        return null;
    }
}

Реализация команды

C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.

UO.EUO2Inj(easyValue) — UO.EUO2Inj(Any)

Параметры: easyValue (Any)

Результат: string / String.

При вызове:

Внутренний код реализации, не самостоятельный скрипт.

public string EUO2Inj(InjectionValue easyValue)

        {

            uint value = 0;

            foreach (char c in easyValue.ToString().ToUpperInvariant())

            {

                if (c < 'A' || c > 'Z')

                    continue;

                value = unchecked(value * 26 + (uint)(c - 'A'));

            }

            return NumberConversions.ToHex(unchecked((int)value));

        }

UO.EUO2Type

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

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

dynamic UO.EUO2Type(object? euo);

Декодирует буквенную запись EasyUO по основанию 26 с A=0.

Параметры

  • euo — Строка/значение EasyUO. Буквы приводятся к верхнему регистру; небуквенные символы пропускаются.

Возвращает

int — полученное 32-битное числовое значение; это не hex-строка.

Поведение

  • Последовательно вычисляет value=value*26+(letter-A). Аккумулятор uint работает unchecked, поэтому переполнение оборачивается по 32 битам. Пустая строка и строка без букв дают 0. Никаких объектов мира не ищет.

Самостоятельные C#-скрипты

Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.

Простой пример

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

Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.

object? result = UO.EUO2Type("B");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Однобуквенное значение — прямой скрипт

Параметры и ход выполнения:

  • B кодирует число 1.
var value = UO.EUO2Type("B");
UO.Print(Convert.ToString(value));

2. Небуквенные символы — функция сценария

Параметры и ход выполнения:

  • Регистр не важен; дефис и восклицательный знак пропускаются.
return  RunScenario();
 object? RunScenario()
{
    var value = UO.EUO2Type("b-!");
    UO.Print(Convert.ToString(value));
    return null;
}

3. Нулевая запись — класс сценария

Параметры и ход выполнения:

  • A кодирует ноль; результат не обозначает найденный объект.
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 value = UO.EUO2Type("A");
        UO.Print(Convert.ToString(value));
        return null;
    }
}

Реализация команды

C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.

UO.EUO2Type(euo) — UO.EUO2Type(Any)

Параметры: euo (Any)

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

При вызове:

Внутренний код реализации, не самостоятельный скрипт.

case "euo2id":

                case "euo2type": return new InjectionValue(DecodeEasyUoId(Text(0)));

UO.Hex2Int

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

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

int UO.Hex2Int(object? value);

Преобразует числовое значение или числовой текст в int.

Параметры

  • value — int, double, double-текст либо hex-текст с 0x. Пробелы по краям и знак допускаются. Строки алиасов "self"/"lasttarget" здесь не разрешаются.

Возвращает

int с 32 битами; hex 0xFFFFFFFF даёт -1. double усекается к нулю с проверкой диапазона. Array и null в NumberConversions.ToInt дают 0.

Поведение

  • Несмотря на имя, принимается десятичный текст. Неверный текст даёт FormatException, неподдерживаемый тип — InvalidCastException; переполнение double — ошибку преобразования.
  • Обратное форматирование — UO.Int2Hex. Преобразование не доказывает существование объекта.

Самостоятельные C#-скрипты

Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.

Простой пример

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

Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.

var result = UO.Hex2Int("0x40001234");
UO.Print("Hex2Int: " + Convert.ToString(result));

1. Прямой вызов — прямой скрипт

Параметры и ход выполнения:

  • Преобразует числовое значение или числовой текст в int.
UO.Print(UO.Hex2Int("0x40001234"));

2. Явный вариант — функция сценария

Параметры и ход выполнения:

  • Несмотря на имя, принимается десятичный текст. Неверный текст даёт FormatException, неподдерживаемый тип — InvalidCastException; переполнение double — ошибку преобразования.
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.Hex2Int("255"));
    UO.Print(UO.Hex2Int("0xFFFFFFFF"));
    return null;
}

3. Полная вспомогательная функция — класс сценария

Параметры и ход выполнения:

  • Обратное форматирование — UO.Int2Hex. Преобразование не доказывает существование объекта.
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 number = UO.Hex2Int("0x000000FF");
        UO.Print(UO.Int2Hex(number));
        return null;
    }
}

Реализация команды

C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.

UO.Hex2Int(value) — UO.Hex2Int(Any)

Параметры: value (Any)

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

При вызове:

Внутренний код реализации, не самостоятельный скрипт.

public int Hex2Int(InjectionValue value) => NumberConversions.ToInt(value);

UO.Inj2EUO

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

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

string UO.Inj2EUO(object? serialValue);

Кодирует 32-битное число serial буквами A..Z для EasyUO.

Параметры

  • serialValue — Число через NumberConversions.ToInt, затем unsigned uint с сохранением битов. Для алиаса сначала получите GetSerial/Hex2Int.

Возвращает

string — обычные цифры основания 26 с A=0..Z=25. Ноль даёт "A". Это не hex и не имя объекта.

Поведение

  • Алгоритм вставляет слева букву A + value % 26 и делит uint на 26 до нуля. Это собственная конвертация проекта, не Excel A1-номер колонки.
  • EUO2Inj выполняет обратную конвертацию в hex-строку. Кодирование не создаёт объект и не запрашивает его у клиента.

Самостоятельные C#-скрипты

Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.

Простой пример

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

Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.

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

1. Прямой вызов — прямой скрипт

Параметры и ход выполнения:

  • Кодирует 32-битное число serial буквами A..Z для EasyUO.
UO.Print(UO.Inj2EUO(0));

2. Явный вариант — функция сценария

Параметры и ход выполнения:

  • Алгоритм вставляет слева букву A + value % 26 и делит uint на 26 до нуля. Это собственная конвертация проекта, не Excel A1-номер колонки.
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.Inj2EUO(26));
    UO.Print(UO.Inj2EUO(25));
    return null;
}

3. Полная вспомогательная функция — класс сценария

Параметры и ход выполнения:

  • EUO2Inj выполняет обратную конвертацию в hex-строку. Кодирование не создаёт объект и не запрашивает его у клиента.
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 value = UO.Hex2Int("0x40001234");
        var encoded = UO.Inj2EUO(value);
        UO.Print(encoded);
        UO.Print(UO.EUO2Inj(encoded));
        return null;
    }
}

Реализация команды

C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.

UO.Inj2EUO(serialValue) — UO.Inj2EUO(Any)

Параметры: serialValue (Any)

Результат: string / String.

При вызове:

Внутренний код реализации, не самостоятельный скрипт.

public string Inj2EUO(InjectionValue serialValue)

        {

            uint value = unchecked((uint)NumberConversions.ToInt(serialValue));

            if (value == 0)

                return "A";

            var result = new StringBuilder();

            while (value > 0)

            {

                result.Insert(0, (char)('A' + value % 26));

                value /= 26;

            }

            return result.ToString();

        }

UO.Int2Hex

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

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

string UO.Int2Hex(object? value);

Форматирует int как hexadecimal serial-строку.

Параметры

  • value — int либо числовой/hex-текст; double усекается к нулю с проверкой переполнения. Не выполняется поиск алиаса объекта.

Возвращает

string "0xXXXXXXXX": восемь hex-цифр, все 32 бита int. Отрицательное значение представлено в дополнительном коде.

Поведение

  • NumberConversions.ToInt выполняет преобразование, затем ToHex использует формат X8. Например -1 даёт "0xFFFFFFFF". Неверный числовой текст вызывает ошибку; это не проверка существования serial.
  • Для представления числа достаточно конвертации; наличие объекта проверяется UO.Exists отдельно.

Самостоятельные C#-скрипты

Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.

Простой пример

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

Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.

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

1. Прямой вызов — прямой скрипт

Параметры и ход выполнения:

  • Форматирует int как hexadecimal serial-строку.
UO.Print(UO.Int2Hex(1073746484));

2. Явный вариант — функция сценария

Параметры и ход выполнения:

  • NumberConversions.ToInt выполняет преобразование, затем ToHex использует формат X8. Например -1 даёт "0xFFFFFFFF". Неверный числовой текст вызывает ошибку; это не проверка существования serial.
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.Int2Hex(-1));
    return null;
}

3. Полная вспомогательная функция — класс сценария

Параметры и ход выполнения:

  • Для представления числа достаточно конвертации; наличие объекта проверяется UO.Exists отдельно.
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 encoded = UO.Int2Hex(255);
        UO.Print(encoded);
        UO.Print(UO.Hex2Int(encoded));
        return null;
    }
}

Реализация команды

C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.

UO.Int2Hex(value) — UO.Int2Hex(Any)

Параметры: value (Any)

Результат: string / String.

При вызове:

Внутренний код реализации, не самостоятельный скрипт.

public string Int2Hex(InjectionValue value) => NumberConversions.ToHex(NumberConversions.ToInt(value));

UO.ScanInt

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

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

int UO.ScanInt(object? textValue, object? startValue);

Находит первое подписанное double/hex-число в строке, начиная с позиции.

Параметры

  • textValue — Текст через ToString. Ищется первое совпадение регулярного выражения [-+]?(?:0[xX][0-9A-Fa-f]+|\d+).
  • startValue — int, нулевая позиция UTF-16. Ограничивается до 0..text.Length; не индекс от 1.

Возвращает

int — первое распознанное 32-битное число. Нет совпадения или число не помещается — 0; настоящий ноль также даёт 0.

Поведение

  • Regex.Match применяется к Substring(start). Если первое совпадение не удаётся преобразовать TryStr2Int, следующие числа не ищутся. Дробная часть, например .5, не входит в числовой токен.
  • Отрицательный start становится 0, start за концом строки — text.Length и результат 0. Исходная строка не меняется.

Самостоятельные C#-скрипты

Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.

Простой пример

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

Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.

var result = UO.ScanInt("gold=123", 0);
UO.Print("ScanInt: " + Convert.ToString(result));

1. Прямой вызов — прямой скрипт

Параметры и ход выполнения:

  • Находит первое подписанное double/hex-число в строке, начиная с позиции.
UO.Print(UO.ScanInt("gold=123", 0));

2. Явный вариант — функция сценария

Параметры и ход выполнения:

  • Regex.Match применяется к Substring(start). Если первое совпадение не удаётся преобразовать TryStr2Int, следующие числа не ищутся. Дробная часть, например .5, не входит в числовой токен.
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.ScanInt("-7 0xFF", 3));
    return null;
}

3. Полная вспомогательная функция — класс сценария

Параметры и ход выполнения:

  • Отрицательный start становится 0, start за концом строки — text.Length и результат 0. Исходная строка не меняется.
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 text = "count=0x20";
        var amount = UO.ScanInt(text, 6);
        UO.Print(amount);
        return null;
    }
}

Реализация команды

C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.

UO.ScanInt(textValue, startValue) — UO.ScanInt(Any,Any)

Параметры: textValue (Any), startValue (Any)

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

При вызове:

Внутренний код реализации, не самостоятельный скрипт.

public int ScanInt(InjectionValue textValue, InjectionValue startValue)

        {

            string text = textValue.ToString() ?? string.Empty;

            int start = Math.Max(0, Math.Min(text.Length, NumberConversions.ToInt(startValue)));

            Match match = Regex.Match(text.Substring(start), @"[-+]?(?:0[xX][0-9A-Fa-f]+|\d+)", RegexOptions.CultureInvariant);

            return match.Success && NumberConversions.TryStr2Int(match.Value, out int value) ? value : 0;

        }

UO.ShutdownWindows

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

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

void UO.ShutdownWindows(object? state);

Всегда отклоняет попытку выключения Windows из скрипта.

Параметры

  • state — Legacy-аргумент сохранён в сигнатуре, но не используется: любой вызов блокируется.

Возвращает

Нормального результата нет: NativeSubrutineException с сообщением "shutdownwindows is intentionally blocked: scripts may not shut down Windows."

Поведение

  • ExecuteLegacyManualAlias сразу бросает исключение. Ни выключения, ни перезагрузки, ни запуска внешнего процесса не выполняется.
  • Все три примера намеренно показывают запрещённые вызовы и при запуске завершаются ошибкой. Их нельзя использовать как условие успешного выключения.

Самостоятельные C#-скрипты

Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.

Простой пример

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

try { UO.ShutdownWindows(0); }
catch (Exception error) { UO.Print(error.Message); }

1. Прямой вызов — прямой скрипт

Параметры и ход выполнения:

  • Всегда отклоняет попытку выключения Windows из скрипта.
UO.ShutdownWindows(0);

2. Явный вариант — функция сценария

Параметры и ход выполнения:

  • ExecuteLegacyManualAlias сразу бросает исключение. Ни выключения, ни перезагрузки, ни запуска внешнего процесса не выполняется.
return  RunScenario();
 object? RunScenario()
{
    UO.ShutdownWindows(1);
    return null;
}

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()
    {
        UO.Print("The next command is expected to fail");
        UO.ShutdownWindows(0);
        return null;
    }
}

Реализация команды

C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.

UO.ShutdownWindows(state) — UO.ShutdownWindows(Any)

Параметры: state (Any)

Результат: void / Unit.

При вызове:

Внутренний код реализации, не самостоятельный скрипт.

case "shutdownwindows":

                    throw new NativeSubrutineException("shutdownwindows is intentionally blocked: scripts may not shut down Windows.");

Clone this wiki locally