RU UO Topic diagnostics introspection - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki

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

Диагностика и самоанализ

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

Осмотр объектов, тайлов и гампов, проверка имён, параметров и сигнатур API. Наличие сигнатуры не подтверждает возможность игрового действия в текущем состоянии.

Разделы

Тема Команды и пояснения
Help UO.Help
Dump UO.Dump
Info UO.Info
InfoTile UO.InfoTile
InfoGump UO.InfoGump
API Name Exists UO.ApiNameExists
API Signature Exists UO.ApiSignatureExists
API Parameter Exists UO.ApiParameterExists
Version UO.Version

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

Инспекция

UO.Help · UO.Dump · UO.Info · UO.InfoColor · UO.GetInfo · UO.ExtendedInfo · UO.InfoTile · UO.InfoGump · UO.InfoGumps · UO.ApiNameExists · UO.ApiParameterExists · UO.ApiSignatureExists · UO.Version · UO.ClientInfo

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

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

UO.InfoGump

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

UO.InfoGump();

UO.ApiNameExists

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

return UO.ApiNameExists("UO.GetType");

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


UO.ApiNameExists

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

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

int UO.ApiNameExists(object? name);

Проверяет регистрацию имени вызываемой нативной функции.

Параметры

  • name — Обязательная string: точное зарегистрированное имя, не выражение вызова. Регистр и пробелы по краям не важны; UO. автоматически не добавляется. Пустое или неизвестное имя даёт 0. Пользовательские процедуры не учитываются.

Возвращает

int: 1 — имя зарегистрировано, 0 — нет. В C# используйте result != 0 или result == 0; сравнение int с true или false недопустимо. Регистрация не подтверждает действие сервера.

Поведение

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

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

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

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

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

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

1. UO.ApiNameExists — 1 — прямой скрипт

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

  • Первый пример проверяет игровое имя с явным UO. и возвращает 1. Точное проверяемое имя и количество аргументов, когда оно требуется, видны в вызове.
return UO.ApiNameExists("UO.GetType");

2. UO.ApiNameExists — 2 — функция сценария

Пример проверяет только регистрацию нативных имён. Convert.ToInt32 — метод .NET, а не запись UO API, поэтому ApiNameExists возвращает 0. Сам метод доступен в обычном C#.

return  RunScenario();
 object? RunScenario()
{
    var name = "Convert.ToInt32";
    return UO.ApiNameExists(name);
    return null;
}

3. UO.ApiNameExists — 3 — класс сценария

Числовые результаты отдельно сравниваются с 0; оператор && применяется уже к двум значениям bool. Для этих имён результат — false.

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()
    {
        return HasBoth("GetType", "UO.GetType");
        return null;
    }

    dynamic HasBoth(dynamic first, dynamic second)
    {
        return UO.ApiNameExists(first) != 0 && UO.ApiNameExists(second) != 0;
    }
}

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

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

UO.ApiNameExists(name) — UO.ApiNameExists(String)

Параметры: name (String)

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

При вызове:

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

public int ApiNameExists(string name)

        {

            string normalized = NormalizeApiName(name);

            return metadata.NativeSubrutines.Any(definition =>

                definition.Name.Equals(normalized, StringComparison.OrdinalIgnoreCase)) ? 1 : 0;

        }

UO.ApiParameterExists

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

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

int UO.ApiParameterExists(object? name);

Проверяет регистрацию значения runtime или именованного объекта.

Параметры

  • name — Обязательная string: точное зарегистрированное имя, не выражение вызова. Регистр и пробелы по краям не важны; UO. автоматически не добавляется. Пустое или неизвестное имя даёт 0. Пользовательские процедуры не учитываются.

Возвращает

int: 1 — имя зарегистрировано, 0 — нет. В C# используйте result != 0 или result == 0; сравнение int с true или false недопустимо. Регистрация не подтверждает действие сервера.

Поведение

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

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

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

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

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

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

1. UO.ApiParameterExists — 1 — прямой скрипт

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

  • Первый пример проверяет игровое имя с явным UO. и возвращает 1. Точное проверяемое имя и количество аргументов, когда оно требуется, видны в вызове.
return UO.ApiParameterExists("UO.GetHP");

2. UO.ApiParameterExists — 2 — функция сценария

Проверяется зарегистрированный селектор backpack, результат — 1. Это не проверка параметров методов C# и не подтверждение существования рюкзака в мире.

return  RunScenario();
 object? RunScenario()
{
    var name = "backpack";
    return UO.ApiParameterExists(name);
    return null;
}

3. UO.ApiParameterExists — 3 — класс сценария

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

  • Третий пример содержит полную вспомогательную функцию. Он сравнивает удалённую короткую форму или неподдерживаемую арность с доступной формой. Параметры name, first, second и count передают имена/количество без изменений. Результат — 0 для проверок вызова и "0:1" для проверки значений.
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()
    {
        return CompareNames("GetHP", "UO.GetHP");
        return null;
    }

    dynamic CompareNames(dynamic first, dynamic second)
    {
        return Convert.ToString(UO.ApiParameterExists(first)) + ":" + Convert.ToString(UO.ApiParameterExists(second));
    }
}

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

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

UO.ApiParameterExists(name) — UO.ApiParameterExists(String)

Параметры: name (String)

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

При вызове:

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

public int ApiParameterExists(string name)

        {

            string value = (name ?? string.Empty).Trim();

            if (value.Length == 0)

                return 0;



            if (Metadata.ShortcutVariables.Any(item => item.Equals(value, StringComparison.OrdinalIgnoreCase)))

                return 1;



            return metadata.IntrinsicVariableExists(value) ? 1 : 0;

        }

UO.ApiSignatureExists

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

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

int UO.ApiSignatureExists(object? name, object? argumentCount);

Проверяет регистрацию имени с заданным числом аргументов.

Параметры

  • name — Обязательная string: точное зарегистрированное имя, не выражение вызова. Регистр и пробелы по краям не важны; UO. автоматически не добавляется. Пустое или неизвестное имя даёт 0. Пользовательские процедуры не учитываются.
  • argumentCount — Обязательный int: полное количество позиционных аргументов, включая явно переданные необязательные. Отрицательное или неподдерживаемое количество даёт 0. Типы самих аргументов не проверяются.

Возвращает

int: 1 — имя зарегистрировано, 0 — нет. В C# используйте result != 0 или result == 0; сравнение int с true или false недопустимо. Регистрация не подтверждает действие сервера.

Поведение

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

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

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

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

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

var result = UO.ApiSignatureExists("UO.GetType", 1);
UO.Print("ApiSignatureExists: " + Convert.ToString(result));

1. UO.ApiSignatureExists — 1 — прямой скрипт

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

  • Первый пример проверяет игровое имя с явным UO. и возвращает 1. Точное проверяемое имя и количество аргументов, когда оно требуется, видны в вызове.
return UO.ApiSignatureExists("UO.GetType",1);

2. UO.ApiSignatureExists — 2 — функция сценария

Проверяются формы UO.FindType с одним и нулём аргументов. Результат — строка "1:0"; нулевая форма не зарегистрирована.

return  RunScenario();
 object? RunScenario()
{
    return Convert.ToString(UO.ApiSignatureExists("UO.FindType", 1)) + ":" + Convert.ToString(UO.ApiSignatureExists("UO.FindType", 0));
    return null;
}

3. UO.ApiSignatureExists — 3 — класс сценария

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

  • Третий пример содержит полную вспомогательную функцию. Он сравнивает удалённую короткую форму или неподдерживаемую арность с доступной формой. Параметры name, first, second и count передают имена/количество без изменений. Результат — 0 для проверок вызова и "0:1" для проверки значений.
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()
    {
        return CheckForm("UO.GetType", 0);
        return null;
    }

    dynamic CheckForm(dynamic name, dynamic count)
    {
        return UO.ApiSignatureExists(name, count);
    }
}

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

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

UO.ApiSignatureExists(name, argumentCount) — UO.ApiSignatureExists(String,Integer)

Параметры: name (String), argumentCount (Integer)

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

При вызове:

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

public int ApiSignatureExists(string name, int argumentCount)

            => metadata.NativeSubrutineExists(NormalizeApiName(name), argumentCount) ? 1 : 0;

UO.ClientInfo

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

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

dynamic UO.ClientInfo();

Читает краткие сведения о запущенном клиенте.

Параметры

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

Возвращает

Array из трёх string: [0] — название продукта, [1] — версия запущенного клиента, [2] — каталог клиента. Индексы начинаются с 0. Это не строка JSON и не словарь.

Поведение

  • Данные читаются из RuntimeProductName, RuntimeProductVersion и ClientPath. Команда ничего не меняет и не отправляет серверу.
  • Используйте ArrayLength перед индексированием в общей вспомогательной функции. Не путайте сведения о клиенте с характеристиками персонажа или версией сервера.
  • Читает сведения о текущем клиенте ClassicUO.

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

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

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

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

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

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

1. Прочитать все три поля — прямой скрипт

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

  • 0 — продукт, 1 — версия, 2 — каталог. Значение версии берётся при запуске, в примере оно не зафиксировано.
var info = UO.ClientInfo();
UO.Print("Product: " + info[0]);
UO.Print("Client version: " + info[1]);
UO.Print("Client folder: " + info[2]);

2. Перебрать массив — функция сценария

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

  • ArrayLength возвращает число полей. Последний допустимый индекс равен длине минус 1.
return  RunScenario();
 object? RunScenario()
{
    var info = UO.ClientInfo();
    var i = 0;
    while (Truth(i < ArrayLength(info)))
    {
        UO.Print(Convert.ToString(i) + ": " + info[i]);
        i = i + 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;

3. Полная функция получения подписи клиента — класс сценария

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

  • ClientCaption возвращает строку из названия и версии. Исходный массив не изменяется.
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(ClientCaption());
        return null;
    }

    dynamic ClientCaption()
    {
        var info = UO.ClientInfo();
        if (Truth(ArrayLength(info) < 2))
        {
            return "Client information unavailable";
        }

        return info[0] + " / " + info[1];
    }

    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.ClientInfo() — UO.ClientInfo()

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

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

При вызове:

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

case "clientinfo":

                    return new InjectionValue(new[]

                    {

                        new InjectionValue(bridge.RuntimeProductName),

                        new InjectionValue(bridge.RuntimeProductVersion),

                        new InjectionValue(bridge.ClientPath)

                    });

UO.Dump

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

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

void UO.Dump();
void UO.Dump(object? @object);

Печатает диагностический снимок известного клиенту объекта.

Параметры

  • object — Необязательный serial/ссылка. Без аргумента используется bridge.LastTarget.

Возвращает

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

Поведение

  • Сообщение содержит serial как 0xXXXXXXXX, имя, graphic/type, hue и X/Y/Z. Поля читаются из локальной модели; отсутствующий объект даёт пустое имя и нулевые поля. Команда не запрашивает свежие server properties.

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

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

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

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

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

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

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

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

  • Отсутствующий аргумент означает LastTarget.
UO.Dump();

2. Снимок себя — функция сценария

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

  • Все поля относятся к собственному персонажу.
return  RunScenario();
 object? RunScenario()
{
    UO.Dump("self");
    return null;
}

3. Снимок проверенного объекта — класс сценария

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

  • Проверка 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 id = UO.LastTarget();
        if (Truth(UO.Exists(id)))
        {
            UO.Dump(id);
        }

        return null;
    }

    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.Dump() — UO.Dump()

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

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

При вызове:

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

case "dump":

                {

                    int id = Arg(0, bridge.LastTarget);

                    SystemMessage($"0x{id:X8} {bridge.GetName(id)} type=0x{bridge.GetGraphics(id):X4} hue=0x{bridge.GetColor(id):X4} xyz={bridge.GetX(id)},{bridge.GetY(id)},{bridge.GetZ(id)}");

                    break;

                }

UO.Dump(object) — UO.Dump(Any)

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

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

При вызове:

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

case "dump":

                {

                    int id = Arg(0, bridge.LastTarget);

                    SystemMessage($"0x{id:X8} {bridge.GetName(id)} type=0x{bridge.GetGraphics(id):X4} hue=0x{bridge.GetColor(id):X4} xyz={bridge.GetX(id)},{bridge.GetY(id)},{bridge.GetZ(id)}");

                    break;

                }

UO.ExtendedInfo

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

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

dynamic UO.ExtendedInfo();

Возвращает четыре поля текущей клиентской конфигурации соединения.

Параметры

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

Возвращает

Array [ClientPath:string, CurrentProfilePath:string, GameServerAddress:string, GameServerPort:int].

Поведение

  • Порядок полей фиксирован. ClientPath и CurrentProfilePath — клиентские пути. GameServerAddress и GameServerPort читают глобальные Settings.GlobalSettings.IP/Port: это настроенный адрес, не проверка фактического peer менеджерской сессии. Список не содержит пароля и не запрашивает сведения у сервера. Пустые значения возможны до выбора профиля/соединения.

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

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

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

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

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

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

1. Вывести поля — прямой скрипт

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

  • Массив содержит смешанные типы, поэтому используется Convert.ToString.
var info = UO.ExtendedInfo();
for (int i = (int)(0); i <= ArrayLength(info)-1; i += (int)(1))
{
    UO.Print(Convert.ToString(info[i]));
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;

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

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

  • Индексы 2 и 3 — адрес и порт.
return  RunScenario();
 object? RunScenario()
{
    var info = UO.ExtendedInfo();
    UO.Print(Convert.ToString(info[2]) + ":" + Convert.ToString(info[3]));
    return null;
}

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

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

  • Индекс 1 — CurrentProfilePath, а не ClientPath.
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 info = UO.ExtendedInfo();
        var path = info[1];
        UO.Print(path);
        return null;
    }
}

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

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

UO.ExtendedInfo() — UO.ExtendedInfo()

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

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

При вызове:

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

case "extendedinfo":

                    return new InjectionValue(new[] { new InjectionValue(bridge.ClientPath), new InjectionValue(bridge.CurrentProfilePath), new InjectionValue(bridge.GameServerAddress), new InjectionValue(bridge.GameServerPort) });

UO.GetInfo

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

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

string UO.GetInfo(object? arg);

Возвращает имя персонажа только для точного селектора character.

Параметры

  • arg — string. Точное регистрозависимое значение character вызывает GetName("self"); любое другое значение не распознаётся.

Возвращает

string — имя своего персонажа для character; строковый литерал UNKNOWN для всех остальных аргументов. При отсутствии персонажа имя может быть пустым.

Поведение

  • Сравнение StringComparison.Ordinal регистрозависимо. Поддерживается только селектор character. Команда не отправляет сетевых запросов: она читает имя из локальной модели персонажа. Окно FillInfoWindow управляется отдельно.

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

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

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

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

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

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

1. Имя персонажа — прямой скрипт

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

  • Точный литерал character читает self.
var name = UO.GetInfo("character");
UO.Print(name);

2. Другой регистр — функция сценария

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

  • Character не совпадает и возвращает UNKNOWN.
return  RunScenario();
 object? RunScenario()
{
    var value = UO.GetInfo("Character");
    UO.Print(value);
    return null;
}

3. Неизвестный селектор — класс сценария

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

  • profile не поддерживается этой реализацией.
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.GetInfo("profile");
        UO.Print(value);
        return null;
    }
}

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

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

UO.GetInfo(arg) — UO.GetInfo(String)

Параметры: arg (String)

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

При вызове:

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

private string GetInfo(string arg)

        {

            if (arg.Equals("character", StringComparison.Ordinal))

                return GetName("self");



            return "UNKNOWN";

        }

UO.Help

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

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

void UO.Help();

Параметры

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

Возвращает

void — значения нет. Вызывайте отдельной строкой; завершение не подтверждает действие сервера.

Поведение

  • Изменяет или показывает только указанные локальные данные. Серверного подтверждения у этой команды нет.

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

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

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

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

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

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

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

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

  • Показывает локальную подсказку о C# IDE.
UO.Help();

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

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

  • ExecuteLegacyManualAlias выводит строку про UO.*, настроенный префикс чата и Options > C# IDE > Manual через SystemMessage. Запрос помощи серверу не отправляется.
return  RunScenario();
 object? RunScenario()
{
    UO.Help();
    UO.OpenIDE();
    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.Help();
        UO.Print("Options > C# IDE > Manual");
        return null;
    }
}

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

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

UO.Help() — UO.Help()

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

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

При вызове:

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

case "help": SystemMessage("C# Scripts IDE: use UO.* in scripts or the configured chat prefix. Open Options > C# Scripts IDE > Manual."); break;

UO.Info

Сигнатуры C#

string UO.Info();
string UO.Info(object? serial);
string UO.Info(object? type, object? x, object? y);
string UO.Info(object? type, object? x, object? y, object? z);

Поведение и результат

Режим вызова определяет результат: команда из графического чата или привязанная команда открывает таблицу с полями, значениями, Ctrl+C и прокруткой. Обычный C#-скрипт получает строку данных без окон и прицела, даже при открытом игровом окне. Доступны только известные клиенту данные.

В графическом чате Info и InfoTile без аргументов включают прицел. В скрипте Info() читает последнюю объектную цель или своего персонажа, а InfoTile() — землю под персонажем. Явные serial, type и координаты читают выбранный объект или тайл. Третий аргумент InfoTile(x,y,map) — номер карты.

Параметры

  • serial — Серийный номер объекта или сохранённый псевдоним.
  • type — Графический ID предмета; -1 — любой тип в указанной точке.
  • x — Координата X мира.
  • y — Координата Y мира.
  • z — Высота Z; сокращённая форма использует 0.

Префикс настраивается в C# Scripts IDE. В примерах # обозначает выбранный префикс. Параметры разделяются пробелами; кавычки сохраняют текст одним параметром. id означает serial, type — graphic. xy x y [z] выбирает первый загруженный объект в точке; type без координат — первый найденный объект этого типа. У InfoTile третий аргумент формы (x,y,map) — карта, а не Z.

Команды чата

#info
#UO.Info id 0x40001234
#info type 0x0EED
#info xy 1450 1690
#info type 0x0EED xy 1450 1690 0

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

Каждый блок — полный отдельный .csx. Замените демонстрационные serial, type и координаты своими. Параметры идут в порядке сигнатуры; именованные параметры C# позволяют явно указать их назначение.

1

string report = UO.Info(0x40001234);
UO.Print(report);

2

string InspectSelf() => UO.Info("self");
UO.Print(InspectSelf());

3

foreach (int serial in new[] { 0x40001234, 0x40005678 })
{
    string report = UO.Info(serial);
    UO.Print(report);
}

4

new CommandSample().Execute(UO);

sealed class CommandSample
{
    public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
    {
        string report = api.Info(0x40001234);
        api.Print(report);
    }
}

Внутренние вызовы

CSharpGameApi.Info
  -> CSharpScriptGlobals
  -> InjectionScript.Runtime.InjectionApiUO.Info
ClassicUOInjectionApiBridge -> YokoInfoReport -> YokoInfoGump


UO.InfoColor

Сигнатуры C#

string UO.InfoColor();
string UO.InfoColor(object? serial);

Поведение и результат

Режим вызова определяет результат: команда из графического чата или привязанная команда открывает таблицу с полями, значениями, Ctrl+C и прокруткой. Обычный C#-скрипт получает строку данных без окон и прицела, даже при открытом игровом окне. Доступны только известные клиенту данные.

В графическом чате Info и InfoTile без аргументов включают прицел. В скрипте Info() читает последнюю объектную цель или своего персонажа, а InfoTile() — землю под персонажем. Явные serial, type и координаты читают выбранный объект или тайл. Третий аргумент InfoTile(x,y,map) — номер карты.

Параметры

  • serial — Серийный номер объекта или сохранённый псевдоним.

Префикс настраивается в C# Scripts IDE. В примерах # обозначает выбранный префикс. Параметры разделяются пробелами; кавычки сохраняют текст одним параметром. id означает serial, type — graphic. xy x y [z] выбирает первый загруженный объект в точке; type без координат — первый найденный объект этого типа. У InfoTile третий аргумент формы (x,y,map) — карта, а не Z.

Команды чата

#infocolor 0x40001234

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

Каждый блок — полный отдельный .csx. Замените демонстрационные serial, type и координаты своими. Параметры идут в порядке сигнатуры; именованные параметры C# позволяют явно указать их назначение.

1

UO.Print(UO.InfoColor(0x40001234));

2

string report = UO.InfoColor();
UO.Print(report);

3

foreach (int serial in new[] { 0x40001234, 0x40005678 })
    UO.Print(UO.InfoColor(serial));

4

new CommandSample().Execute(UO);

sealed class CommandSample
{
    public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
    {
        api.Print(api.InfoColor(0x40001234));
    }
}

Внутренние вызовы

CSharpGameApi.InfoColor
  -> CSharpScriptGlobals
  -> InjectionScript.Runtime.InjectionApiUO.InfoColor
ClassicUOInjectionApiBridge -> YokoInfoReport -> YokoInfoGump


UO.InfoGump

Сигнатуры C#

string UO.InfoGump();
string UO.InfoGump(object? gump);

Поведение и результат

Режим вызова определяет результат: команда из графического чата или привязанная команда открывает таблицу с полями, значениями, Ctrl+C и прокруткой. Обычный C#-скрипт получает строку данных без окон и прицела, даже при открытом игровом окне. Доступны только известные клиенту данные.

InfoGump() читает последнее активное окно: серверный диалог либо локальное окно клиента. Можно передать ID или индекс; last, LastGump и Last Gump означают последнее окно. InfoGumps возвращает список. Окна самого инспектора исключены. Таблица открывается только для графической команды.

Параметры

  • gump — ID серверного окна или его индекс; -1 — последнее активное.

Префикс настраивается в C# Scripts IDE. В примерах # обозначает выбранный префикс. Параметры разделяются пробелами; кавычки сохраняют текст одним параметром. id означает serial, type — graphic. xy x y [z] выбирает первый загруженный объект в точке; type без координат — первый найденный объект этого типа. У InfoTile третий аргумент формы (x,y,map) — карта, а не Z.

Команды чата

#infogump
#infogump last
#info gump last gump
#infogump 0x12345678

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

Каждый блок — полный отдельный .csx. Замените демонстрационные serial, type и координаты своими. Параметры идут в порядке сигнатуры; именованные параметры C# позволяют явно указать их назначение.

1

string report = UO.InfoGump();
UO.Print(report);

2

UO.Print(UO.InfoGump(0x12345678));

3

string ReadLatestWindow() => UO.InfoGump();
UO.Print(ReadLatestWindow());

4

new CommandSample().Execute(UO);

sealed class CommandSample
{
    public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
    {
        string report = api.InfoGump();
        api.Print(report);
    }
}

Внутренние вызовы

CSharpGameApi.InfoGump
  -> CSharpScriptGlobals
  -> InjectionScript.Runtime.InjectionApiUO.InfoGump
ClassicUOInjectionApiBridge -> YokoInfoReport -> YokoInfoGump


UO.InfoGumps

Сигнатуры C#

string UO.InfoGumps();
string UO.InfoGumps(object? gump);

Поведение и результат

Режим вызова определяет результат: команда из графического чата или привязанная команда открывает таблицу с полями, значениями, Ctrl+C и прокруткой. Обычный C#-скрипт получает строку данных без окон и прицела, даже при открытом игровом окне. Доступны только известные клиенту данные.

InfoGump() читает последнее активное окно: серверный диалог либо локальное окно клиента. Можно передать ID или индекс; last, LastGump и Last Gump означают последнее окно. InfoGumps возвращает список. Окна самого инспектора исключены. Таблица открывается только для графической команды.

Параметры

  • gump — ID серверного окна или его индекс; -1 — последнее активное.

Префикс настраивается в C# Scripts IDE. В примерах # обозначает выбранный префикс. Параметры разделяются пробелами; кавычки сохраняют текст одним параметром. id означает serial, type — graphic. xy x y [z] выбирает первый загруженный объект в точке; type без координат — первый найденный объект этого типа. У InfoTile третий аргумент формы (x,y,map) — карта, а не Z.

Команды чата

#infogumps

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

Каждый блок — полный отдельный .csx. Замените демонстрационные serial, type и координаты своими. Параметры идут в порядке сигнатуры; именованные параметры C# позволяют явно указать их назначение.

1

UO.Print(UO.InfoGumps());

2

string report = UO.InfoGumps(0x12345678);
UO.Print(report);

3

string ReadAllWindows() => UO.InfoGumps();
UO.Print(ReadAllWindows());

4

new CommandSample().Execute(UO);

sealed class CommandSample
{
    public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
    {
        api.Print(api.InfoGumps());
    }
}

Внутренние вызовы

CSharpGameApi.InfoGumps
  -> CSharpScriptGlobals
  -> InjectionScript.Runtime.InjectionApiUO.InfoGumps
ClassicUOInjectionApiBridge -> YokoInfoReport -> YokoInfoGump


UO.InfoTile

Сигнатуры C#

string UO.InfoTile();
string UO.InfoTile(object? x);
string UO.InfoTile(object? x, object? y);
string UO.InfoTile(object? x, object? y, object? map);
string UO.InfoTile(object? type, object? x, object? y, object? z);
string UO.InfoTile(object? type, object? x, object? y, object? z, object? map);

Поведение и результат

Режим вызова определяет результат: команда из графического чата или привязанная команда открывает таблицу с полями, значениями, Ctrl+C и прокруткой. Обычный C#-скрипт получает строку данных без окон и прицела, даже при открытом игровом окне. Доступны только известные клиенту данные.

В графическом чате Info и InfoTile без аргументов включают прицел. В скрипте Info() читает последнюю объектную цель или своего персонажа, а InfoTile() — землю под персонажем. Явные serial, type и координаты читают выбранный объект или тайл. Третий аргумент InfoTile(x,y,map) — номер карты.

Параметры

  • map — Номер карты; без этого параметра — текущая карта.
  • type — Графический ID предмета; -1 — любой тип в указанной точке.
  • x — Координата X мира.
  • y — Координата Y мира.
  • z — Высота Z; сокращённая форма использует 0.

Префикс настраивается в C# Scripts IDE. В примерах # обозначает выбранный префикс. Параметры разделяются пробелами; кавычки сохраняют текст одним параметром. id означает serial, type — graphic. xy x y [z] выбирает первый загруженный объект в точке; type без координат — первый найденный объект этого типа. У InfoTile третий аргумент формы (x,y,map) — карта, а не Z.

Команды чата

#infotile
#info tile xy 1450 1690
#infotile 1450 1690 0
#infotile type 0x0EED 1450 1690 0 0

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

Каждый блок — полный отдельный .csx. Замените демонстрационные serial, type и координаты своими. Параметры идут в порядке сигнатуры; именованные параметры C# позволяют явно указать их назначение.

1

UO.Print(UO.InfoTile(1450, 1690));

2

string report = UO.InfoTile(1450, 1690, 0);
UO.Print(report);

3

UO.Print(UO.InfoTile(0x0EED, 1450, 1690, 0, 0));

4

new CommandSample().Execute(UO);

sealed class CommandSample
{
    public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
    {
        api.Print(api.InfoTile(1450, 1690));
    }
}

Внутренние вызовы

CSharpGameApi.InfoTile
  -> CSharpScriptGlobals
  -> InjectionScript.Runtime.InjectionApiUO.InfoTile
ClassicUOInjectionApiBridge -> YokoInfoReport -> YokoInfoGump


UO.Version

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

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

void UO.Version();

Печатает название и версию runtime продукта.

Параметры

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

Возвращает

void — значения нет. Вызывайте отдельной строкой; завершение не подтверждает действие сервера.

Поведение

  • ExecuteLegacyManualAlias выводит bridge.RuntimeProductName и bridge.RuntimeProductVersion через SystemMessage. Это строка в журнале, не возвращаемый номер версии.
  • Изменяет или показывает только указанные локальные данные. Серверного подтверждения у этой команды нет.

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

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

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

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

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

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

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

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

  • Печатает название и версию runtime продукта.
UO.Version();

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

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

  • ExecuteLegacyManualAlias выводит bridge.RuntimeProductName и bridge.RuntimeProductVersion через SystemMessage. Это строка в журнале, не возвращаемый номер версии.
return  RunScenario();
 object? RunScenario()
{
    UO.Version();
    UO.Help();
    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.Version();
        UO.Print(UO.GetUserCodepage());
        return null;
    }
}

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

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

UO.Version() — UO.Version()

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

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

При вызове:

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

case "version": SystemMessage($"{bridge.RuntimeProductName} v{bridge.RuntimeProductVersion}"); break;
⚠️ **GitHub.com Fallback** ⚠️