Skip to content

RU UO Topic client ui

Codex edited this page Oct 11, 2026 · 3 revisions

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

Клиент UI

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

Вывод сообщений, служебные окна, отображение объектов и открытие IDE. Эти действия не заменяют отправку речи серверу.

Разделы

Тема Команды и пояснения
Print UO.Print
ClientPrint UO.ClientPrint
Info Window UO.FillInfoWindow · UO.ClearInfoWindow · UO.FillNewWindow
Text Window UO.TextOpen · UO.TextPrint · UO.TextClear · UO.TextClose
Простые Гампы UO.CloseSimpleGump
Close UI Window UO.CloseClientUIWindow
Circle Transparency UO.CircleTrans
Show Z UO.SetShowZ
Open IDE UO.OpenIDE

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

Сообщения

UO.Print · UO.ClientPrint · UO.ClientPrintEx · UO.CharPrint · UO.ColorPrint · UO.ConsolePrint · UO.ServerPrint · UO.SetSilentMode · UO.ConColor · UO.FontColor

Окна

UO.ClearInfoWindow · UO.FillInfoWindow · UO.FillNewWindow · UO.TextOpen · UO.TextClear · UO.TextClose · UO.TextPrint · UO.CloseSimpleGump · UO.CloseClientUIWindow · UO.ShowJournal · UO.OpenIDE · UO.HelpRequest · UO.ActivateHandle · UO.CloseHandle · UO.Snap

Отображение объекта

UO.Hide · UO.ClientHide · UO.ClientMarkChar · UO.CircleTrans · UO.SetShowZ · UO.Morph

Цифры

UO.AddFigure · UO.UpdateFigure · UO.RemoveFigure · UO.ClearFigures

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

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

UO.Print

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

var processed = 12;
UO.Print("Processed item entries: " + Convert.ToString(processed), 0x0044);

UO.FillInfoWindow

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

UO.FillInfoWindow("Status ready");

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


UO.ActivateHandle

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

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

void UO.ActivateHandle();

Передаёт Windows/SDL запрос поднять окно текущего клиента на передний план. Аргументов и результата нет. Это команда управления окном, а не применение предмета, навыка или цели; фактический фокус зависит от оконной системы.

Параметры

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

Возвращает

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

Поведение

  • Клиент поднимает окно игрового представления через SDL. Команда не отправляет игровой пакет и не выполняет действие в мире. Свернутое окно или ограничения оконной системы могут помешать фактическому фокусу.
  • RequireGameView требует Client.Game. Если графическое окно ClassicUO не открыто, bridge выбрасывает InvalidOperationException. SDL_RaiseWindow запрашивает поднятие существующего окна; решение о фокусе остаётся у оконной системы.

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

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

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

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

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

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

1. Запросить вывод окна клиента на передний план. — прямой скрипт

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

  • Запросить вывод окна клиента на передний план.
UO.ActivateHandle();

2. Не запрашивать фокус окна до подключения к игре. — функция сценария

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

  • Не запрашивать фокус окна до подключения к игре.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    if (Truth(UO.Connected()))
    {
        UO.ActivateHandle();
    }

    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. Обернуть действие окном в повторно используемую процедуру. — класс сценария

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

  • Обернуть действие окном в повторно используемую процедуру.
  • Выполнить запрос через вспомогательную процедуру.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        RunAction();
        return null;
    }

    void RunAction()
    {
        UO.ActivateHandle();
    }
}

UO.AddFigure

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

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

dynamic UO.AddFigure(object? arg0);

Добавляет локальную фигуру на карту мира ClassicUO и возвращает её идентификатор. Фигура хранится на стороне клиента, игровой сервер не уведомляется.

Параметры

Возвращает

int — положительный ID добавленной фигуры. 0 возвращается при неверных данных фигуры или отказе карты добавить её. Передавайте полученный ID в UO.UpdateFigure или UO.RemoveFigure.

Поведение

  • Создаёт локальную фигуру для WorldMapGump. Поддерживаются линия, эллипс, прямоугольник, стрелка направления и текст. Координаты fcWorld следуют преобразованию и масштабу карты; fcScreen отсчитываются относительно окна карты. Отображаются фигуры для выбранного facet.

Формат массива: [kind, coord, x1, y1, x2, y2, brushColor, brushStyle, color, worldNum, text]. kind: 0 линия, 1 эллипс, 2 прямоугольник, 3 стрелка направления, 4 текст. coord: 0 world, 1 screen. color использует порядок байтов Delphi TColor (0x00BBGGRR). Для стрелки с мировыми координатами и x2=0,y2=0 начальной точкой служит текущий персонаж. Исторические brushColor и brushStyle принимаются для совместимости; визуальная заливка не гарантирует полного совпадения с Delphi.

Фигура остаётся в клиентской коллекции до удаления/очистки или завершения процесса. Смена facet только скрывает фигуры, относящиеся к другому facet.

  • Принимается минимум 9 полей. Если worldNum отсутствует, используется текущая карта; без text берётся пустая строка. kind ограничен 0..4, coord — 0..1; другие значения дают 0. Отрицательный worldNum разрешает отображение на любом facet. Счётчик ID увеличивается до проверки SetYokoMapFigure, поэтому отвергнутая фигура может оставить пропуск в ID. Коллекция WorldMapGump статическая в процессе; обычные скрипты одного manager используют общее persistent runtime state.
  • brushColor и brushStyle сохраняются в записи, но текущий renderer их не использует. Линия и прямоугольник рисуются контуром; эллипс состоит из 32 отрезков. Подпись text рисуется только для kind=4; другие kind не выводят её. color задаёт контур в формате COLORREF 0x00BBGGRR.

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

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

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

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

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

object? result = UO.AddFigure(new object?[] { 0, 0, UO.X(), UO.Y(), UO.X() + 3, UO.Y(), 0, 0, 255 });
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Красный контур прямоугольника на игровой карте — прямой скрипт

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

  • kind=2 рисует красный контур. Поле text со значением Area сохраняется, но для этого kind подпись не рисуется; текст выводит kind=4.
dynamic[] fig = new dynamic[checked((int)(11) + 1)];
fig[0] = 2;
fig[1] = 0;
fig[2] = UO.GetX("self")-3;
fig[3] = UO.GetY("self")-3;
fig[4] = UO.GetX("self")+3;
fig[5] = UO.GetY("self")+3;
fig[6] = 0;
fig[7] = 1;
fig[8] = 255;
fig[9] = UO.WorldNum();
fig[10] = "Area";
var figureId = UO.AddFigure(fig);

2. Стрелка от персонажа к точке игровой карты — функция сценария

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

  • При world-координатах и x2=0,y2=0 начало стрелки берётся из положения персонажа при отрисовке. text со значением East для kind=3 не выводится.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    dynamic[] dirFig = new dynamic[checked((int)(11) + 1)];
    dirFig[0] = 3;
    dirFig[1] = 0;
    dirFig[2] = UO.GetX("self") + 10;
    dirFig[3] = UO.GetY("self");
    dirFig[4] = 0;
    dirFig[5] = 0;
    dirFig[6] = 0;
    dirFig[7] = 1;
    dirFig[8] = 65280;
    dirFig[9] = UO.WorldNum();
    dirFig[10] = "East";
    var arrowId = UO.AddFigure(dirFig);
    return null;
}

3. Создать синюю линию между двумя точками текущего facet. — класс сценария

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

  • Создать синюю линию между двумя точками текущего facet.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        dynamic[] lineFig = new dynamic[checked((int)(11) + 1)];
        lineFig[0] = 0;
        lineFig[1] = 0;
        lineFig[2] = UO.GetX("self");
        lineFig[3] = UO.GetY("self");
        lineFig[4] = UO.GetX("self") + 8;
        lineFig[5] = UO.GetY("self");
        lineFig[6] = 0;
        lineFig[7] = 1;
        lineFig[8] = 16711680;
        lineFig[9] = UO.WorldNum();
        lineFig[10] = "";
        var lineId = UO.AddFigure(lineFig);
        return null;
    }
}

UO.CharPrint

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

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

void UO.CharPrint(object? arg0, object? arg1);
void UO.CharPrint(object? arg0, object? arg1, object? arg2);

Создаёт видимую только вам надпись над загруженным объектом: например, пометку выбранной цели или предупреждение над своим персонажем. Это не речь персонажа и не сообщение внизу игрового окна.

Параметры

  • id — Serial объекта, а не graphic/type или координата. UO.CharPrint в форме с тремя аргументами понимает также self, lasttarget и сохранённые имена объектов. Для SenderID в UO.ClientPrintEx используйте число, например UO.Hex2Int(UO.GetSerial("self")); строковые псевдонимы там не разрешаются как объекты.
  • color — UO hue, а не RGB. Берутся младшие 16 бит числа; 0x0044 — пример. -1 превращается в 0xFFFF, а не означает «любой цвет». Цвет ConColor здесь не используется.

Возвращает

Вызов метода с возвращаемым типом void пишется как самостоятельный оператор C#; присваивать или проверять результат нельзя. Завершение оператора не является подтверждением игрового сервера.

Поведение

  • Объект должен существовать в загруженном мире и не быть удалённым; пустой текст или отсутствующая цель не рисуются. Команда не загружает объект с сервера. Сервер и другие игроки эту надпись не получают. Без игрового окна надпись невозможно увидеть в мире; это не замена системному журналу менеджера.
  • UO.CharPrint(color, msg) выбирает своего персонажа. UO.CharPrint(id, color, msg) выбирает указанный объект. Обе формы используют шрифт 3. UO.ClientPrintEx требует все четыре аргумента в порядке SenderID, Color, Font, Text.
  • Номер шрифта UO, не размер в пунктах и не имя Windows-шрифта. Число ограничивается диапазоном 0..255; наличие конкретного шрифта зависит от файлов игры. В примере 3 — обычный номер шрифта.
  • GetSerial возвращает hex-строку. Hex2Int превращает её в int перед сравнением с числом 0; строку "0x00000000" нельзя проверять как число 0.
  • UO.Print · UO.CharPrint · UO.ClientPrintEx · UO.AddToSystemJournalEx

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

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

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

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

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

UO.Print("Calling UO.CharPrint");
UO.CharPrint(0x0044, "Ready");

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

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

  • Первая форма CharPrint помещает Ready над своим персонажем. ClientPrintEx получает его serial через UO.Hex2Int(UO.GetSerial("self")) и явно передаёт шрифт 3. Надпись не включает никакой игровой режим.
  • GetSerial возвращает hex-строку. Hex2Int превращает её в int перед сравнением с числом 0; строку "0x00000000" нельзя проверять как число 0.
UO.CharPrint(0x0044, "Ready");

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

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

  • target — serial последней цели. Ноль означает, что в этом примере отмечать некого. Selected target — только локальная подпись: цель не атакуется и активный серверный таргет не заполняется.
  • GetSerial возвращает hex-строку. Hex2Int превращает её в int перед сравнением с числом 0; строку "0x00000000" нельзя проверять как число 0.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var target = UO.Hex2Int(UO.GetSerial("lasttarget"));
    if (Truth(target != 0))
    {
        UO.CharPrint(target, 0x0044, "Selected target");
    }

    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. UO.CharPrint — 3 — класс сценария

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

  • ShowWeightWarning полностью объявлена ниже. Она сравнивает вес с положительным известным пределом и пишет над своим персонажем только при перегрузе; ничего не выбрасывает. Convert.ToString превращает вес в текст.
  • GetSerial возвращает hex-строку. Hex2Int превращает её в int перед сравнением с числом 0; строку "0x00000000" нельзя проверять как число 0.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        ShowWeightWarning(UO.Weight(), UO.MaxWeight());
        return null;
    }

    void ShowWeightWarning(dynamic weight, dynamic maximum)
    {
        if (Truth(maximum > 0) && Truth(weight >= maximum))
        {
            UO.CharPrint(UO.Hex2Int(UO.GetSerial("self")), 0x0044, "Too heavy: " + Convert.ToString(weight));
        }
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

UO.CircleTrans

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

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

int UO.CircleTrans();
void UO.CircleTrans(object? arg0);

Читает или меняет настройку круга прозрачности активного профиля.

Параметры

  • enabled — int: 0 выключает, любое ненулевое значение включает. Без аргумента настройка только читается.

Возвращает

Без аргумента int 1/0; форма с аргументом возвращает null.

Поведение

  • Чтение при отсутствии профиля даёт 0. Запись при отсутствии профиля печатает ошибку; при наличии профиля меняет UseCircleOfTransparency и сохраняет профиль. Это визуальная настройка клиента.

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

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

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

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

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

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

1. Прочитать настройку — прямой скрипт

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

  • Чтение не меняет профиль.
var enabled = UO.CircleTrans();
UO.Print(Convert.ToString(enabled));

2. Включить прозрачность — функция сценария

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

  • Запись сохраняет включённый круг прозрачности.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    UO.CircleTrans(1);
    return null;
}

3. Восстановить прежнее значение — класс сценария

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

  • Сохранённый флаг восстанавливается после временной смены настройки.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var previous = UO.CircleTrans();
        UO.CircleTrans(0);
        UO.CircleTrans(previous);
        return null;
    }
}

UO.ClearFigures

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

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

void UO.ClearFigures();

Удаляет все пользовательские фигуры карты и их записи runtime.

Параметры

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

Возвращает

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

Поведение

  • Очищает WorldMapGump.ClearYokoMapFigures и state.MapFigures. Базовая карта и UserStatics не изменяются.
  • ClearYokoMapFigures очищает статическую коллекцию WorldMapGump в процессе, затем команда очищает MapFigures своего runtime state. Эта область очистки определяется общей клиентской коллекцией, а не только именем вызывающего скрипта.
  • Обычные пользовательские метки карты (userMarkers.usr) сохраняются.

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

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

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

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

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

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

1. Очистить состояние — прямой скрипт

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

  • Удаляет все пользовательские фигуры карты и их записи runtime.
UO.ClearFigures();

2. Очистить после настройки — функция сценария

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

  • Создать локальную фигуру текущей карты, затем удалить все пользовательские фигуры.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    dynamic[] figure = new dynamic[checked((int)(9) + 1)];
    figure[0] = 0;
    figure[1] = 0;
    figure[2] = UO.GetX();
    figure[3] = UO.GetY();
    figure[4] = figure[2] + 1;
    figure[5] = figure[3] + 1;
    figure[6] = 0;
    figure[7] = 0;
    figure[8] = 0;
    figure[9] = UO.WorldNum();
    var figureId = UO.AddFigure(figure);
    UO.ClearFigures();
    return null;
}

3. Повторная очистка — класс сценария

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

  • Очистка пустого набора допустима и не создаёт новую настройку.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        UO.ClearFigures();
        UO.ClearFigures();
        return null;
    }
}

UO.ClearInfoWindow

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

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

void UO.ClearInfoWindow();

Очищает строки клиентского текстового окна.

Параметры

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

Возвращает

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

Поведение

  • TextClear очищает буфер; если окно было открыто, обновляет его пустым содержимым. Окно не обязательно закрывается.

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

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

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

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

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

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

1. Очистить состояние — прямой скрипт

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

  • Очищает строки клиентского текстового окна.
UO.ClearInfoWindow();

2. Очистить после настройки — функция сценария

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

  • Очистить ранее добавленную строку текстового окна.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    UO.FillInfoWindow("status");
    UO.ClearInfoWindow();
    return null;
}

3. Повторная очистка — класс сценария

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

  • Очистка пустого набора допустима и не создаёт новую настройку.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        UO.ClearInfoWindow();
        UO.ClearInfoWindow();
        return null;
    }
}

UO.ClientHide

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

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

dynamic UO.ClientHide(object? arg0);

Скрывает по serial загруженный предмет или другого персонажа только в отображении ClassicUO, включая контейнеры, paperdoll и надетые вещи.

Параметры

  • ObjID — Serial конкретного загруженного объекта: int либо hex/десятичная строка. Это не graphic/type. Для сохранённого имени используйте GetSerial(name). Параметр обязателен; прицел не появляется.

Возвращает

int 1 после передачи команды bridge. Исторический результат не подтверждает наличие объекта: даже для неизвестного serial или self bridge выводит отказ, а runtime возвращает 1. Не используйте это значение как проверку успешного скрытия. В метаданных совместимости указан object?.

Поведение

  • Требуется ровно один аргумент. Для выбора мышью используйте UO.Hide().
  • Hide(serial) действует сразу на известный загруженный объект. Передавайте serial конкретной стопки/предмета, а не graphic/type. Выбранная стопка скрывается целиком независимо от Amount.
  • Предмет остаётся в контейнере: количество, владелец, содержимое и серверное состояние не меняются. FindType/GetContent по-прежнему могут его найти. Скрытие не является фильтром поиска, переносом, удалением, навыком Hiding или серверной невидимостью.
  • Обычный контейнер, торговое окно и сетка добычи не рисуют скрытый предмет и не принимают по нему клики/перетаскивание. Флаг сохраняется при перестройке и повторном открытии окна, пока используется тот же загруженный объект.
  • Надетая вещь исчезает с paperdoll, из маленького слота и с изображения персонажа. Она остаётся надетой: слой, броня и состояние на сервере не меняются. Скрытая роба больше не перекрывает нижнюю одежду. Изображение персонажа в менеджере обновляется по тому же флагу; список настоящей экипировки остаётся доступным.
  • Собственного персонажа, землю и статику Hide не скрывает. Несуществующий serial даёт сообщение. Если скрыть саму сумку, это не закрывает уже открытое окно её содержимого и не скрывает каждый вложенный предмет автоматически.
  • Отдельной команды Unhide в текущем API нет. Скрытие принадлежит загруженному экземпляру объекта: его удаление из мира клиента и новая загрузка (например, при переподключении) сбрасывают флаг. Простое закрытие/открытие сундука не является гарантированным способом вернуть предмет.

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

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

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

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

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

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

1. Скрыть предмет по известному ID — прямой скрипт

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

  • ObjID — конкретный предмет, не его type. Он исчезает из отображения, оставаясь в своём контейнере.
var item = 0x40001234;
if (Truth(UO.Exists(item)))
{
    UO.ClientHide(item);
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2. Скрыть найденную стопку — функция сценария

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

  • FindType ищет graphic 0x0EED любого цвета в backpack. В ClientHide передаётся возвращённый serial; вся стопка скрывается целиком.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var item = UO.FindType(0x0EED, -1, "backpack");
    if (Truth(item != ""))
    {
        UO.ClientHide(item);
        UO.Print("Amount is still: " + Convert.ToString(UO.GetQuantity(item)));
    }

    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. Использовать именованный объект — класс сценария

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

  • GetSerial разрешает ранее сохранённое имя decoration. Предмет нужно предварительно загрузить, например открыть его контейнер.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var item = UO.GetSerial("decoration");
        if (Truth(UO.Exists(item)) && Truth(item != UO.GetSerial("self")))
        {
            UO.ClientHide(item);
        }

        return null;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

UO.ClientMarkChar

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

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

void UO.ClientMarkChar(object? arg0, object? arg1);

Обновляет клиентские метки LastTarget и/или LastAttack.

Параметры

  • actionIndex — int: 1 — LastTarget; 2 — LastAttack; 3 — обе. Другие значения печатают ошибку.
  • id — Serial объекта или поддерживаемое имя self/backpack/lasttarget/сохранённого объекта; числовые строки и 0x-строки разрешаются runtime.

Возвращает

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

Поведение

  • ClientMarkChar изменяет сохранённые цели, не отправляя атаку и не отвечая на серверный target. Последующие команды могут использовать новую метку.

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

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

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

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

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

UO.Print("Calling UO.ClientMarkChar");
UO.ClientMarkChar(1, "self");

1. Обновить LastTarget — прямой скрипт

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

  • Сохранённой целью становится собственный персонаж.
UO.ClientMarkChar(1,"self");

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

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

  • Последняя цель используется для обеих клиентских меток.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var target = UO.LastTarget();
    if (Truth(UO.Exists(target)))
    {
        UO.ClientMarkChar(3, target);
    }

    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. Неверное действие — класс сценария

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

  • Ноль не входит в набор действий и приводит к сообщению об ошибке.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        UO.ClientMarkChar(0, "self");
        return null;
    }
}

UO.ClientPrint

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

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

void UO.ClientPrint(object? arg0);

Показывает локальное сообщение о ходе скрипта или условии остановки. Его видите вы, а не другие игроки.

Параметры

Возвращает

Вызов метода с возвращаемым типом void пишется как самостоятельный оператор C#; присваивать или проверять результат нельзя. Завершение оператора не является подтверждением игрового сервера.

Поведение

  • Сообщение идёт в нижнюю левую область игрового окна и локальный журнал. Копия доступна в выводе IDE. В общем журнале менеджера включите фильтр сообщений скриптов (script): запись доступна и без игрового окна. Фильтр серверных системных сообщений (system) такие записи не выбирает. Сетевой пакет речи не отправляется. Для надписи над головой есть UO.CharPrint.
  • UO.Print добавляет новую запись в журнал игровых сообщений: сначала прочитайте или сохраните нужную строку/результат поиска, затем запишите диагностическое сообщение. В быстром цикле записывайте сообщения при изменениях, а не на каждой итерации.
  • Используется цвет системных сообщений данного скриптового runtime: первоначально 0x0440, изменяется UO.ConColor. Это локальная запись; имя команды не означает отправку серверу.
  • UO.Print · UO.CharPrint · UO.Say · UO.ConColor

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

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

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

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

Команда вызывается отдельной строкой и не возвращает значение (void). Текст сообщения указан прямо в вызове.

UO.ClientPrint("Hello from C#");

1. Краткий отчёт — прямой скрипт

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

  • processed=12 — демонстрационное число уже обработанных предметов. Convert.ToString превращает его в строку. Этот пример только сообщает число, сам предметы не переносит.
var processed = 12;
UO.ClientPrint("Processed item entries: " + Convert.ToString(processed));

2. Предупреждение о перегрузе — функция сценария

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

  • Читаются вес и максимум персонажа. Нулевой/неизвестный максимум не считается перегрузом. При weight >= maximum печатается одна строка и Main завершается; предметы не выбрасываются.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var weight = UO.Weight();
    var maximum = UO.MaxWeight();
    if (Truth(maximum > 0) && Truth(weight >= maximum))
    {
        UO.ClientPrint("Too heavy: " + Convert.ToString(weight) + "/" + Convert.ToString(maximum));
        return null;
    }

    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. Сообщать только об изменении веса — класс сценария

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

  • Main запоминает вес, ждёт 1000 миллисекунд и вызывает полностью объявленный ReportWeight. Помощник печатает только если вес изменился и возвращает новый вес для следующей проверки. Сам он не создаёт бесконечный цикл.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var previous = UO.Weight();
        UO.Wait(1000);
        previous = ReportWeight(previous, UO.Weight());
        return null;
    }

    dynamic ReportWeight(dynamic previous, dynamic current)
    {
        if (Truth(previous != current))
        {
            UO.ClientPrint("Weight changed: " + Convert.ToString(current));
        }

        return current;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

UO.ClientPrintEx

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

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

void UO.ClientPrintEx(object? arg0, object? arg1, object? arg2, object? arg3);

Создаёт видимую только вам надпись над загруженным объектом: например, пометку выбранной цели или предупреждение над своим персонажем. Это не речь персонажа и не сообщение внизу игрового окна.

Параметры

  • SenderID — Serial объекта, а не graphic/type или координата. UO.CharPrint в форме с тремя аргументами понимает также self, lasttarget и сохранённые имена объектов. Для SenderID в UO.ClientPrintEx используйте число, например UO.Hex2Int(UO.GetSerial("self")); строковые псевдонимы там не разрешаются как объекты.
  • Color — UO hue, а не RGB. Берутся младшие 16 бит числа; 0x0044 — пример. -1 превращается в 0xFFFF, а не означает «любой цвет». Цвет ConColor здесь не используется.
  • Font — Номер шрифта UO, не размер в пунктах и не имя Windows-шрифта. Число ограничивается диапазоном 0..255; наличие конкретного шрифта зависит от файлов игры. В примере 3 — обычный номер шрифта.

Возвращает

Вызов метода с возвращаемым типом void пишется как самостоятельный оператор C#; присваивать или проверять результат нельзя. Завершение оператора не является подтверждением игрового сервера.

Поведение

  • Объект должен существовать в загруженном мире и не быть удалённым; пустой текст или отсутствующая цель не рисуются. Команда не загружает объект с сервера. Сервер и другие игроки эту надпись не получают. Без игрового окна надпись невозможно увидеть в мире; это не замена системному журналу менеджера.
  • UO.CharPrint(color, msg) выбирает своего персонажа. UO.CharPrint(id, color, msg) выбирает указанный объект. Обе формы используют шрифт 3. UO.ClientPrintEx требует все четыре аргумента в порядке SenderID, Color, Font, Text.
  • Номер шрифта UO, не размер в пунктах и не имя Windows-шрифта. Число ограничивается диапазоном 0..255; наличие конкретного шрифта зависит от файлов игры. В примере 3 — обычный номер шрифта.
  • GetSerial возвращает hex-строку. Hex2Int превращает её в int перед сравнением с числом 0; строку "0x00000000" нельзя проверять как число 0.
  • UO.Print · UO.CharPrint · UO.ClientPrintEx · UO.AddToSystemJournalEx

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

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

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

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

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

UO.Print("Calling UO.ClientPrintEx");
UO.ClientPrintEx(UO.Hex2Int(UO.GetSerial("self")), 0x0044, 3, "Ready");

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

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

  • Первая форма CharPrint помещает Ready над своим персонажем. ClientPrintEx получает его serial через UO.Hex2Int(UO.GetSerial("self")) и явно передаёт шрифт 3. Надпись не включает никакой игровой режим.
  • GetSerial возвращает hex-строку. Hex2Int превращает её в int перед сравнением с числом 0; строку "0x00000000" нельзя проверять как число 0.
UO.ClientPrintEx(UO.Hex2Int(UO.GetSerial("self")), 0x0044, 3, "Ready");

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

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

  • target — serial последней цели. Ноль означает, что в этом примере отмечать некого. Selected target — только локальная подпись: цель не атакуется и активный серверный таргет не заполняется.
  • GetSerial возвращает hex-строку. Hex2Int превращает её в int перед сравнением с числом 0; строку "0x00000000" нельзя проверять как число 0.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var target = UO.Hex2Int(UO.GetSerial("lasttarget"));
    if (Truth(target != 0))
    {
        UO.ClientPrintEx(target, 0x0044, 3, "Selected target");
    }

    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. UO.ClientPrintEx — 3 — класс сценария

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

  • ShowWeightWarning полностью объявлена ниже. Она сравнивает вес с положительным известным пределом и пишет над своим персонажем только при перегрузе; ничего не выбрасывает. Convert.ToString превращает вес в текст.
  • GetSerial возвращает hex-строку. Hex2Int превращает её в int перед сравнением с числом 0; строку "0x00000000" нельзя проверять как число 0.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        ShowWeightWarning(UO.Weight(), UO.MaxWeight());
        return null;
    }

    void ShowWeightWarning(dynamic weight, dynamic maximum)
    {
        if (Truth(maximum > 0) && Truth(weight >= maximum))
        {
            UO.ClientPrintEx(UO.Hex2Int(UO.GetSerial("self")), 0x0044, 3, "Too heavy: " + Convert.ToString(weight));
        }
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

UO.CloseClientUIWindow

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

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

void UO.CloseClientUIWindow(object? arg0, object? arg1);

Закрывает локальное окно клиента заданного вида для конкретного объекта. Например, можно убрать бумажную куклу персонажа, его статус или окно рюкзака. Команда не закрывает игровой клиент и не отвечает на кнопки серверного gump.

Параметры

  • UIWindowType — Обязательный числовой код окна: 0 — paperdoll (экипировка), 1 — статус персонажа, 2 — профиль, 3 — контейнер. Это отдельный список из четырёх кодов, не graphic/type тела и не ID серверного gump. Другие числа не находят окно.
  • ID — Serial объекта, которому принадлежит окно: self/serial персонажа для типов 0..2, backpack/serial контейнера для типа 3. Принимаются число, hex-строка или разрешаемый объектный алиас. Это не номер окна в списке InfoGumps. Неизвестный объектный алиас преобразуется в 0.

Возвращает

void — значения нет. Вызов пишется отдельной строкой, без var result = и без if UO.CloseClientUIWindow(...). Если подходящего открытого окна нет, ничего не происходит; команда не возвращает true/false.

Поведение

  • Оба параметра обязательны. Сравниваются и класс окна, и LocalSerial. Вызов с (3, self) не означает рюкзак: для рюкзака нужен backpack.
  • Обход затрагивает открытые, ещё не уничтоженные окна данного типа/serial; все совпавшие окна закрываются на игровом потоке. Остальные окна остаются открытыми.
  • Закрывается интерфейс, предметы из контейнера не удаляются, персонаж не исчезает из мира. Повторять безопасно: если окно уже закрыто, совпадения нет.
  • Для серверных диалогов изучите UO.CloseSimpleGump и UO.NumGumpButton; коды 0..3 этой команды там не применяются.

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

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

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

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

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

UO.Print("Calling UO.CloseClientUIWindow");
UO.CloseClientUIWindow(0, "self");

1. Убрать свою бумажную куклу — прямой скрипт

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

  • Закрывается только окно экипировки своего персонажа; его статус, профиль и рюкзак остаются отдельными окнами.
UO.CloseClientUIWindow(0, "self");

2. Закрыть окно рюкзака после работы с вещами — функция сценария

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

  • Если рюкзак не был открыт, действие ничего не изменит. Эта команда не перемещает предметы и не возвращает результат.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    if (Truth(UO.Connected()) && Truth(UO.Exists("backpack")))
    {
        UO.CloseClientUIWindow(3, "backpack");
    }

    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. Убрать статус и профиль выбранного персонажа — класс сценария

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

  • 1 — статус, 2 — профиль. id — serial выбранного mobile. ASC(text,0) здесь разбирает строковый serial в число с запасным 0. Пользовательская процедура ничего не обещает про наличие окна; оба вызова имеют Unit.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var selected = Asc(UO.GetSerial("lasttarget"), 0);
        CloseMobilePanels(selected);
        return null;
    }

    void CloseMobilePanels(dynamic id)
    {
        if (Truth(id == 0) || !(Truth(UO.Exists(id))))
        {
            return;
        }

        UO.CloseClientUIWindow(1, id);
        UO.CloseClientUIWindow(2, id);
    }

    int Asc(object? value, int fallback = 0)
    {
        string text = Convert.ToString(value) ?? "";
        if (text.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
            return int.TryParse(text[2..], System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out int hex) ? hex : fallback;
        return int.TryParse(text, out int number) ? number : fallback;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

UO.CloseHandle

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

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

void UO.CloseHandle();

Запрашивает выход текущего приложения клиента через Client.Game.Exit.

Параметры

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

Возвращает

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

Поведение

  • CloseUO направляется в тот же bridge.CloseHandle. Exit выполняется на игровом потоке; если Client.Game отсутствует, действие отсутствует. Команда не является закрытием отдельного gump.

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

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

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

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

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

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

1. Завершить клиент — прямой скрипт

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

  • Вызов запрашивает завершение приложения клиента.
UO.CloseHandle();

2. Явное условие завершения — функция сценария

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

  • Пример показывает управляемое условие; значение 0 сохраняет клиент открытым.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var finishClient = 0;
    if (Truth(finishClient))
    {
        UO.CloseHandle();
    }

    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. Процедура завершения — класс сценария

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

  • Полностью объявленный helper допускает явное включение выхода.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        FinishClient(0);
        return null;
    }

    void FinishClient(dynamic enabled)
    {
        if (Truth(enabled))
        {
            UO.CloseHandle();
        }
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

UO.CloseSimpleGump

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

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

void UO.CloseSimpleGump(object? arg0);

Локально закрывает разрешённый к закрытию серверный гамп по строгому индексу.

Параметры

  • GumpIndex — Обязательный int — индекс активного серверного гампа, от 0 до GetGumpsCount()-1. Это не GumpID/serial. Отрицательное число и индекс вне списка недействительны. Открытие, закрытие и изменение порядка окон могут изменить индекс; перед действием проверяйте GetGumpID/GetGumpSerial.

Возвращает

void — ничего не возвращает. Нельзя интерпретировать результат как подтверждение сервера или bool.

Поведение

  • Работает с активными серверными гампами. Рюкзак, карта, настройки и другие локальные окна не входят в этот список. Один вызов читает данные в игровом потоке; разные вызовы могут увидеть разные состояния списка.
  • Недействительный индекс и NoClose ничего не меняют. Команда не отправляет ответ кнопки серверу. Для такого ответа используйте SendGumpSelect.
  • Закрытие изменяет список и индексы. Для массового закрытия обходите список от последнего индекса к первому.

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

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

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

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

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

UO.Print("Calling UO.CloseSimpleGump");
UO.CloseSimpleGump(0);

1. Закрыть первое окно — прямой скрипт

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

  • 0 — индекс, а не ID. Если окно запрещает закрытие, оно остаётся открытым.
UO.CloseSimpleGump(0);

2. Закрыть все разрешённые окна — функция сценария

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

  • Обратный обход уменьшает влияние сдвига индексов после закрытия. При параллельном открытии новых окон повторно проверьте список.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var i = UO.GetGumpsCount() - 1;
    while (Truth(i >= 0))
    {
        UO.CloseSimpleGump(i);
        i = i - 1;
    }

    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. Сохранить информацию перед закрытием — класс сценария

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

  • info[1] — сохранённый GumpID. Действие ничего не возвращает, поэтому результат не присваивается переменной.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var info = UO.GetGumpInfo(0);
        if (Truth(ArrayLength(info) == 5))
        {
            UO.CloseSimpleGump(0);
            UO.Print(Hex(info[1]));
        }

        return null;
    }

    int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
    string Hex(object? value) => Convert.ToInt64(value).ToString("X");
    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

UO.ColorPrint

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

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

void UO.ColorPrint(object? arg0, object? arg1);

Показывает локальное сообщение о ходе скрипта или условии остановки. Его видите вы, а не другие игроки.

Параметры

  • color — UO hue, не RGB. Число или hex-строка; мост использует младшие 16 бит. Не путайте с graphic/type. 0x0044 в примере — выбранный hue. Без цвета используется hue 0x03B2. UO.Print(text, color) принимает текст первым; UO.ColorPrint(color, text) — цвет первым.

Возвращает

Вызов метода с возвращаемым типом void пишется как самостоятельный оператор C#; присваивать или проверять результат нельзя. Завершение оператора не является подтверждением игрового сервера.

Поведение

  • Сообщение идёт в нижнюю левую область игрового окна и локальный журнал. Копия доступна в выводе IDE. В общем журнале менеджера включите фильтр сообщений скриптов (script): запись доступна и без игрового окна. Фильтр серверных системных сообщений (system) такие записи не выбирает. Сетевой пакет речи не отправляется. Для надписи над головой есть UO.CharPrint.
  • UO.Print добавляет новую запись в журнал игровых сообщений: сначала прочитайте или сохраните нужную строку/результат поиска, затем запишите диагностическое сообщение. В быстром цикле записывайте сообщения при изменениях, а не на каждой итерации.
  • Без цвета используется hue 0x03B2. UO.Print(text, color) принимает текст первым; UO.ColorPrint(color, text) — цвет первым.
  • UO.Print · UO.CharPrint · UO.Say · UO.ConColor

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

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

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

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

Команда вызывается отдельной строкой и не возвращает значение (void). Текст сообщения указан прямо в вызове.

UO.ColorPrint(0x0044, "Hello from C#");

1. Краткий отчёт — прямой скрипт

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

  • processed=12 — демонстрационное число уже обработанных предметов. Convert.ToString превращает его в строку. Этот пример только сообщает число, сам предметы не переносит.
var processed = 12;
UO.ColorPrint(0x0044, "Processed item entries: " + Convert.ToString(processed));

2. Предупреждение о перегрузе — функция сценария

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

  • Читаются вес и максимум персонажа. Нулевой/неизвестный максимум не считается перегрузом. При weight >= maximum печатается одна строка и Main завершается; предметы не выбрасываются.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var weight = UO.Weight();
    var maximum = UO.MaxWeight();
    if (Truth(maximum > 0) && Truth(weight >= maximum))
    {
        UO.ColorPrint(0x0044, "Too heavy: " + Convert.ToString(weight) + "/" + Convert.ToString(maximum));
        return null;
    }

    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. Сообщать только об изменении веса — класс сценария

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

  • Main запоминает вес, ждёт 1000 миллисекунд и вызывает полностью объявленный ReportWeight. Помощник печатает только если вес изменился и возвращает новый вес для следующей проверки. Сам он не создаёт бесконечный цикл.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var previous = UO.Weight();
        UO.Wait(1000);
        previous = ReportWeight(previous, UO.Weight());
        return null;
    }

    dynamic ReportWeight(dynamic previous, dynamic current)
    {
        if (Truth(previous != current))
        {
            UO.ColorPrint(0x0044, "Weight changed: " + Convert.ToString(current));
        }

        return current;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

UO.ConColor

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

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

void UO.ConColor(object? arg0);

Задаёт UO hue для последующих системных сообщений данного скриптового runtime.

Параметры

  • color — UO hue, не RGB. Число или hex-строка; мост использует младшие 16 бит. Не путайте с graphic/type. 0x0044 в примере — выбранный hue.

Возвращает

Вызов метода с возвращаемым типом void пишется как самостоятельный оператор C#; присваивать или проверять результат нельзя. Завершение оператора не является подтверждением игрового сервера.

Поведение

  • Влияет на последующие UO.ClientPrint, UO.AddToJournal и UO.AddToSystemJournal. Не перекрашивает прежние строки, не меняет SpeechHue профиля и не меняет цвет UO.Print без аргумента цвета. Getter прежнего цвета здесь отсутствует: храните выбранный обычный hue в своей переменной.
  • UO.Print · UO.CharPrint · UO.Say · UO.ConColor

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

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

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

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

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

UO.Print("Calling UO.ConColor");
UO.ConColor(0x0044);

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

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

  • 0x0044 становится цветом следующей системной строки. Сам ConColor ничего не печатает.
UO.ConColor(0x0044);
UO.AddToSystemJournal("Notice");

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

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

  • Обычный Print сохраняет свой цвет 0x03B2, а AddToJournal использует заданный 0x0044. Оба сообщения локальные.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    UO.ConColor(0x0044);
    UO.Print("Normal Print color");
    UO.AddToJournal("System color");
    return null;
}

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

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

  • usualHue=0x0440 — явно выбранный обычный цвет, а не прочитанное старое значение. В try используется временный 0x0035; finally возвращает usualHue, затем следующая строка снова печатается обычным цветом.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var usualHue = 0x0440;
        UO.ConColor(usualHue);
        try
        {
            UO.ConColor(0x0035);
            UO.AddToSystemJournal("Temporary warning");
        }
        finally
        {
            UO.ConColor(usualHue);
        }

        UO.AddToSystemJournal("Normal messages again");
        return null;
    }
}

UO.ConsolePrint

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

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

void UO.ConsolePrint(object? arg0);

Показывает локальное сообщение о ходе скрипта или условии остановки. Его видите вы, а не другие игроки.

Параметры

Возвращает

Вызов метода с возвращаемым типом void пишется как самостоятельный оператор C#; присваивать или проверять результат нельзя. Завершение оператора не является подтверждением игрового сервера.

Поведение

  • Сообщение идёт в нижнюю левую область игрового окна и локальный журнал. Копия доступна в выводе IDE. В общем журнале менеджера включите фильтр сообщений скриптов (script): запись доступна и без игрового окна. Фильтр серверных системных сообщений (system) такие записи не выбирает. Сетевой пакет речи не отправляется. Для надписи над головой есть UO.CharPrint.
  • UO.Print добавляет новую запись в журнал игровых сообщений: сначала прочитайте или сохраните нужную строку/результат поиска, затем запишите диагностическое сообщение. В быстром цикле записывайте сообщения при изменениях, а не на каждой итерации.
  • Без цвета используется hue 0x03B2. UO.Print(text, color) принимает текст первым; UO.ColorPrint(color, text) — цвет первым.
  • Несмотря на Console в имени, это тот же локальный игровой вывод, а не отдельный терминал Windows.
  • UO.Print · UO.CharPrint · UO.Say · UO.ConColor

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

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

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

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

Команда вызывается отдельной строкой и не возвращает значение (void). Текст сообщения указан прямо в вызове.

UO.ConsolePrint("Hello from C#");

1. Краткий отчёт — прямой скрипт

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

  • processed=12 — демонстрационное число уже обработанных предметов. Convert.ToString превращает его в строку. Этот пример только сообщает число, сам предметы не переносит.
var processed = 12;
UO.ConsolePrint("Processed item entries: " + Convert.ToString(processed));

2. Предупреждение о перегрузе — функция сценария

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

  • Читаются вес и максимум персонажа. Нулевой/неизвестный максимум не считается перегрузом. При weight >= maximum печатается одна строка и Main завершается; предметы не выбрасываются.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var weight = UO.Weight();
    var maximum = UO.MaxWeight();
    if (Truth(maximum > 0) && Truth(weight >= maximum))
    {
        UO.ConsolePrint("Too heavy: " + Convert.ToString(weight) + "/" + Convert.ToString(maximum));
        return null;
    }

    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. Сообщать только об изменении веса — класс сценария

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

  • Main запоминает вес, ждёт 1000 миллисекунд и вызывает полностью объявленный ReportWeight. Помощник печатает только если вес изменился и возвращает новый вес для следующей проверки. Сам он не создаёт бесконечный цикл.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var previous = UO.Weight();
        UO.Wait(1000);
        previous = ReportWeight(previous, UO.Weight());
        return null;
    }

    dynamic ReportWeight(dynamic previous, dynamic current)
    {
        if (Truth(previous != current))
        {
            UO.ConsolePrint("Weight changed: " + Convert.ToString(current));
        }

        return current;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

UO.FillInfoWindow

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

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

void UO.FillInfoWindow(object? arg0);

Добавляет одну строку в текстовое окно и показывает его.

Параметры

  • S — Текст строки; значение преобразуется в string.

Возвращает

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

Поведение

  • Ранее накопленные строки сохраняются до ограничения MaxTextWindowLines.
  • TextPrint добавляет строку и сам показывает YokoTextWindowGump; TextOpen закрепляет открытое состояние. При переполнении буфера удаляются старейшие строки. Это отдельное текстовое окно, не серверный gump и не UO.GetInfo.

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

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

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

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

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

UO.Print("Calling UO.FillInfoWindow");
UO.FillInfoWindow("Status ready");

1. Показать строку — прямой скрипт

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

  • Текст передаётся в клиентское текстовое окно.
UO.FillInfoWindow("Status ready");

2. Текст из переменной — функция сценария

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

  • Строка формируется из локального текущего HP.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var status = "HP: " + Convert.ToString(UO.GetHP());
    UO.FillInfoWindow(status);
    return null;
}

3. Две последовательные строки — класс сценария

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

  • Вторая команда добавляет second после first.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        UO.FillInfoWindow("first");
        UO.FillInfoWindow("second");
        return null;
    }
}

UO.FillNewWindow

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

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

void UO.FillNewWindow(object? arg0);

Очищает текстовое окно, добавляет одну строку и показывает его.

Параметры

  • S — Текст строки; значение преобразуется в string.

Возвращает

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

Поведение

  • Перед TextPrint выполняется TextClear; ранее накопленные строки удаляются.
  • TextPrint добавляет строку и сам показывает YokoTextWindowGump; TextOpen закрепляет открытое состояние. При переполнении буфера удаляются старейшие строки. Это отдельное текстовое окно, не серверный gump и не UO.GetInfo.

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

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

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

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

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

UO.Print("Calling UO.FillNewWindow");
UO.FillNewWindow("Status ready");

1. Показать строку — прямой скрипт

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

  • Текст передаётся в клиентское текстовое окно.
UO.FillNewWindow("Status ready");

2. Текст из переменной — функция сценария

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

  • Строка формируется из локального текущего HP.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var status = "HP: " + Convert.ToString(UO.GetHP());
    UO.FillNewWindow(status);
    return null;
}

3. Две последовательные строки — класс сценария

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

  • Вторая команда заменяет содержимое: остаётся second.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        UO.FillNewWindow("first");
        UO.FillNewWindow("second");
        return null;
    }
}

UO.FontColor

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

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

void UO.FontColor(object? arg0);

Устанавливает hue последующих локальных UO.UOAMessage данного скрипта. Не меняет цвет речи персонажа, обычного UO.Print, InfoFindList или тему IDE.

Параметры

  • color — Обязательный числовой индекс hue 0..65535, например 0x0044. Это не RGB. Внутри хранится int, при выводе приводится к ushort; -1 НЕ означает сброс и превращается в 65535. Начальное значение нового runtime — 0x03B2. Формы без аргумента нет.

Возвращает

void: нет результата, старого цвета или признака успеха. Чтобы позже вернуть свою настройку, храните выбранный hue в переменной скрипта.

Поведение

  • Изменяет только state.FontColor, не печатает сообщение и не отправляет сетевой пакет.
  • Действует до следующего FontColor в том же runtime. Другой самостоятельный скрипт имеет своё состояние. UO.Print(text,color) задаёт цвет непосредственно и не читает FontColor.

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

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

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

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

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

UO.Print("Calling UO.FontColor");
UO.FontColor(0x0021);

1. Выделить предупреждение о запасах — прямой скрипт

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

  • 0x0021 — индекс hue; итоговый оттенок зависит от файлов hues клиента. Сообщение видно локально; его не произносит персонаж.
UO.FontColor(0x0021);
var first = UO.FindList("0x0EED", "backpack");
if (Truth(first == ""))
{
    UO.UOAMessage("No gold in the loaded backpack");
}
else
{
    UO.UOAMessage("Gold units: " + Convert.ToString(UO.FindFullQuantity()));
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2. Общая процедура цветного уведомления — функция сценария

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

  • Полная Notice принимает текст и hue. Последний установленный hue остаётся для следующего UOAMessage этого runtime. Встроенного FontColor() для чтения здесь нет.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    Notice("Supplies checked", 0x0044);
    Notice("Restock needed", 0x0021);
    return null;
}

void Notice(dynamic text, dynamic hue)
{
    UO.FontColor(hue);
    UO.UOAMessage(text);
}

3. Вернуться к известному базовому цвету — класс сценария

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

  • 0x03B2 — начальное значение FontColor нового runtime. Finally возвращает именно выбранную базу при обычном завершении/обрабатываемой ошибке; оно не восстанавливает неизвестное прежнее значение.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var baseHue = 0x03B2;
        try
        {
            UO.FontColor(0x0021);
            UO.UOAMessage("Check the route before moving");
        }
        finally
        {
            UO.FontColor(baseHue);
        }

        UO.UOAMessage("Ready");
        UO.Print("Regular Print keeps its own color");
        return null;
    }
}

UO.HelpRequest

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

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

void UO.HelpRequest();

Запрашивает серверное меню помощи.

Параметры

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

Возвращает

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

Поведение

  • ExecuteClientApiCompatibility вызывает HelpRequest, который через Invoke передаёт GameActions.RequestHelp. Содержание меню определяется сервером.
  • В примерах UO.Wait задаёт только паузу скрипта; окончание паузы не доказывает выполнение запроса сервером.

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

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

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

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

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

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

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

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

  • Запрашивает серверное меню помощи.
UO.HelpRequest();

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

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

  • ExecuteClientApiCompatibility вызывает HelpRequest, который через Invoke передаёт GameActions.RequestHelp. Содержание меню определяется сервером.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    if (Truth(UO.IsOnline()))
    {
        UO.HelpRequest();
    }

    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. Полная вспомогательная функция — класс сценария

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

  • В примерах UO.Wait задаёт только паузу скрипта; окончание паузы не доказывает выполнение запроса сервером.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        if (Truth(UO.IsOnline()))
        {
            UO.HelpRequest();
            UO.Print("Help requested");
        }

        return null;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

UO.Hide

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

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

void UO.Hide();
void UO.Hide(object? arg0);

Убирает загруженный предмет или другого персонажа с экрана ClassicUO. Помогает убрать мешающий объект; работает с предметами внутри контейнеров и торговли, надетыми вещами на paperdoll и в его маленьких слотах экипировки.

Параметры

  • serial — Числовой serial или его hex/десятичная строка. Это не type. Для именованного объекта сначала получите числовую строку через GetSerial(name). Без аргумента появляется локальный прицел.

Возвращает

void — возвращаемого значения нет. Результат нельзя присвоить как serial, graphic/type, количество или true/false. Информация выводится в интерфейс/журнал, а не возвращается скрипту.

Поведение

  • Hide() открывает локальный прицел и сразу возвращает управление скрипту. Щёлкните по вещи на paperdoll, предмету в открытом контейнере или объекту в мире. Escape отменяет выбор.
  • Hide(serial) действует сразу на известный загруженный объект. Передавайте serial конкретной стопки/предмета, а не graphic/type. Выбранная стопка скрывается целиком независимо от Amount.
  • Предмет остаётся в контейнере: количество, владелец, содержимое и серверное состояние не меняются. FindType/GetContent по-прежнему могут его найти. Скрытие не является фильтром поиска, переносом, удалением, навыком Hiding или серверной невидимостью.
  • Обычный контейнер, торговое окно и сетка добычи не рисуют скрытый предмет и не принимают по нему клики/перетаскивание. Флаг сохраняется при перестройке и повторном открытии окна, пока используется тот же загруженный объект.
  • Надетая вещь исчезает с paperdoll, из маленького слота и с изображения персонажа. Она остаётся надетой: слой, броня и состояние на сервере не меняются. Скрытая роба больше не перекрывает нижнюю одежду. Изображение персонажа в менеджере обновляется по тому же флагу; список настоящей экипировки остаётся доступным.
  • Собственного персонажа, землю и статику Hide не скрывает. Несуществующий serial даёт сообщение. Если скрыть саму сумку, это не закрывает уже открытое окно её содержимого и не скрывает каждый вложенный предмет автоматически.
  • Отдельной команды Unhide в текущем API нет. Скрытие принадлежит загруженному экземпляру объекта: его удаление из мира клиента и новая загрузка (например, при переподключении) сбрасывают флаг. Простое закрытие/открытие сундука не является гарантированным способом вернуть предмет.

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

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

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

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

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

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

1. Скрыть предмет в открытом сундуке — прямой скрипт

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

  • Параметров нет. После щелчка исчезает только выбранный предмет; содержимое сундука на сервере не меняется.
UO.Hide();
UO.Print("Select an item to hide locally");

2. Скрыть найденную стопку в рюкзаке — функция сценария

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

  • Hide получает ID результата поиска, не 0x0EED. При отсутствии результата вызов не выполняется. Unit от Hide нельзя сравнивать с true/false.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var item = UO.FindType(0x0EED, -1, "backpack");
    if (Truth(item == ""))
    {
        UO.Print("No loaded matching item");
        return null;
    }

    UO.Hide(item);
    UO.Print("Stack amount: " + Convert.ToString(UO.GetQuantity(item)));
    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. Скрыть конкретный предмет из сохранённого объекта — класс сценария

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

  • Именованный объект сначала разрешается через GetSerial. Проверка Exists означает наличие в памяти, а не успешное скрытие или доступность для переноса.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var item = UO.GetSerial("decoration");
        if (Truth(UO.Exists(item)) && Truth(item != UO.GetSerial("self")))
        {
            UO.Hide(item);
        }
        else
        {
            UO.Print("Select a loaded object other than self");
        }

        return null;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

4. Убрать робу с изображения, оставив её надетой — прямой скрипт

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

  • 22 — номер слоя, а не serial или type. Сначала ObjAtLayer получает serial, затем Hide скрывает изображение именно этой вещи. Снятие и передача предмета не выполняются; повторное открытие paperdoll не отменяет скрытие.
var robe = UO.ObjAtLayer(22);
if (Truth(robe == 0))
{
    UO.Print("No robe equipped");
    return null;
}
UO.Hide(robe);

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

UO.Morph

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

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

void UO.Morph(object? arg0);

Локально меняет graphic текущего персонажа.

Параметры

  • type — int body graphic либо строка type, разрешаемая ResolveType. 0 восстанавливает graphic, сохранённый при первом Morph; ненулевое число приводится к ushort.

Возвращает

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

Поведение

  • Bridge.Morph без Player ничего не меняет. При первом вызове сохраняет _originalGraphic, затем присваивает Player.Graphic. Runtime обновляет ticksAnim=Timer даже если Player отсутствует.
  • Это локальный внешний вид, не серверная трансформация и не изменение расы/доступных навыков. Значения за пределами ushort не проверяются этой bridge-функцией и приводятся к 16 битам.

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

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

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

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

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

UO.Print("Calling UO.Morph");
UO.Morph("0x0190");

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

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

  • Локально меняет graphic текущего персонажа.
UO.Morph("0x0190");

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

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

  • Bridge.Morph без Player ничего не меняет. При первом вызове сохраняет _originalGraphic, затем присваивает Player.Graphic. Runtime обновляет ticksAnim=Timer даже если Player отсутствует.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    UO.Morph(0);
    return null;
}

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

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

  • Это локальный внешний вид, не серверная трансформация и не изменение расы/доступных навыков. Значения за пределами ushort не проверяются этой bridge-функцией и приводятся к 16 битам.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        UO.Morph("0x0190");
        UO.Wait(500);
        UO.Morph(0);
        return null;
    }
}

UO.OpenIDE

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

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

void UO.OpenIDE();
void UO.OpenIDE(object? arg0);

Параметры

  • filePath — Необязательный путь. Пустой/пробельный — открыть редактор без выбора файла; относительный разрешается от _manager.AutoloadPath, абсолютный сохраняется.

Возвращает

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

Поведение

  • Bridge.OpenIDE подготавливает requested path, затем Invoke вызывает YokoScriptEditorGump.Open(_world,requested). Скрипт из файла не запускается командой OpenIDE.
  • Редактор — графическое окно, не внешнее приложение Launch. Чтение/показ файла зависит от существования пути и логики редактора.

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

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

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

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

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

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

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

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

  • Открывает графический редактор C# IDE.
UO.OpenIDE();

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

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

  • Bridge.OpenIDE подготавливает requested path, затем Invoke вызывает YokoScriptEditorGump.Open(_world,requested). Скрипт из файла не запускается командой OpenIDE.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    UO.OpenIDE("Example.csx");
    return null;
}

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

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

  • Редактор — графическое окно, не внешнее приложение Launch. Чтение/показ файла зависит от существования пути и логики редактора.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var path = "C:\\UO Scripts\\Example.csx";
        UO.OpenIDE(path);
        return null;
    }
}

UO.Print

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

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

void UO.Print(object? arg0);
void UO.Print(object? arg0, object? arg1);

Показывает локальное сообщение о ходе скрипта или условии остановки. Его видите вы, а не другие игроки.

Параметры

  • color — UO hue, не RGB. Число или hex-строка; мост использует младшие 16 бит. Не путайте с graphic/type. 0x0044 в примере — выбранный hue. Без цвета используется hue 0x03B2. UO.Print(text, color) принимает текст первым; UO.ColorPrint(color, text) — цвет первым.

Возвращает

Вызов метода с возвращаемым типом void пишется как самостоятельный оператор C#; присваивать или проверять результат нельзя. Завершение оператора не является подтверждением игрового сервера.

Поведение

  • Сообщение идёт в нижнюю левую область игрового окна и локальный журнал. Копия доступна в выводе IDE. В общем журнале менеджера включите фильтр сообщений скриптов (script): запись доступна и без игрового окна. Фильтр серверных системных сообщений (system) такие записи не выбирает. Сетевой пакет речи не отправляется. Для надписи над головой есть UO.CharPrint.
  • UO.Print добавляет новую запись в журнал игровых сообщений: сначала прочитайте или сохраните нужную строку/результат поиска, затем запишите диагностическое сообщение. В быстром цикле записывайте сообщения при изменениях, а не на каждой итерации.
  • Без цвета используется hue 0x03B2. UO.Print(text, color) принимает текст первым; UO.ColorPrint(color, text) — цвет первым.
  • UO.Print · UO.CharPrint · UO.Say · UO.ConColor

Пример .csx

UO.Print("C# script started");
UO.Print($"Position: {UO.GetX()}, {UO.GetY()}");

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

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

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

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

Команда вызывается отдельной строкой и не возвращает значение (void). Текст сообщения указан прямо в вызове.

UO.Print("Hello from C#");

1. Краткий отчёт — прямой скрипт

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

  • processed=12 — демонстрационное число уже обработанных предметов. Convert.ToString превращает его в строку. Этот пример только сообщает число, сам предметы не переносит.
var processed = 12;
UO.Print("Processed item entries: " + Convert.ToString(processed), 0x0044);

2. Предупреждение о перегрузе — функция сценария

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

  • Читаются вес и максимум персонажа. Нулевой/неизвестный максимум не считается перегрузом. При weight >= maximum печатается одна строка и Main завершается; предметы не выбрасываются.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var weight = UO.Weight();
    var maximum = UO.MaxWeight();
    if (Truth(maximum > 0) && Truth(weight >= maximum))
    {
        UO.Print("Too heavy: " + Convert.ToString(weight) + "/" + Convert.ToString(maximum), 0x0044);
        return null;
    }

    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. Сообщать только об изменении веса — класс сценария

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

  • Main запоминает вес, ждёт 1000 миллисекунд и вызывает полностью объявленный ReportWeight. Помощник печатает только если вес изменился и возвращает новый вес для следующей проверки. Сам он не создаёт бесконечный цикл.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var previous = UO.Weight();
        UO.Wait(1000);
        previous = ReportWeight(previous, UO.Weight());
        return null;
    }

    dynamic ReportWeight(dynamic previous, dynamic current)
    {
        if (Truth(previous != current))
        {
            UO.Print("Weight changed: " + Convert.ToString(current), 0x0044);
        }

        return current;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

UO.RemoveFigure

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

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

dynamic UO.RemoveFigure(object? arg0);

Удаляет локальную фигуру карты по её ID.

Параметры

  • FigureID — int ID, возвращённый AddFigure. Это не serial предмета и не ID gump.

Возвращает

int — результат bridge.RemoveMapFigure: 1/0 по наличию удалённой фигуры. Runtime-запись удаляется независимо от результата bridge.

Поведение

  • Сначала вызывает bridge.RemoveMapFigure, затем state.MapFigures.Remove(id), затем возвращает bridge-результат. Неизвестный ID не создаёт фигуру и не вызывает серверного действия.
  • Локальная фигура карты не является предметом мира. Другие фигуры и серверная геометрия не меняются.
  • WorldMapGump хранит рисунки в статическом словаре процесса. Обычные скрипты/чат/макросы одного мира/профиля используют общий GetPersistentState и счётчик ID; отдельные процессы Manager не делят рисунки. World.Clear/YokoScripts.Clear и загрузка состояния профиля не очищают и не восстанавливают этот словарь (loader восстанавливает только UserStatics). Поэтому рисунки могут пережить смену мира/профиля в том же процессе с учётом worldNum; новое состояние может повторно выделить уже существующий ID рисунка. ClearFigures явно очищает рисунки и записи текущего состояния. Успех — запись/удаление данных, не доказательство показа.

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

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

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

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

var id = UO.AddFigure(new object?[] { 0, 0, UO.X(), UO.Y(), UO.X() + 3, UO.Y(), 0, 0, 255 });
UO.Print("Removed flag: " + Convert.ToString(UO.RemoveFigure(id)));

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

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

  • Удаляет локальную фигуру карты по её ID.
UO.Print(UO.RemoveFigure(1));

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

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

  • Сначала вызывает bridge.RemoveMapFigure, затем state.MapFigures.Remove(id), затем возвращает bridge-результат. Неизвестный ID не создаёт фигуру и не вызывает серверного действия.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    dynamic[] figure = new dynamic[checked((int)(10) + 1)];
    figure[0] = 0;
    figure[1] = 0;
    figure[2] = UO.GetX();
    figure[3] = UO.GetY();
    figure[4] = UO.GetX() + 1;
    figure[5] = UO.GetY() + 1;
    figure[6] = 0;
    figure[7] = 0;
    figure[8] = 0;
    figure[9] = UO.WorldNum();
    figure[10] = "Example";
    var id = UO.AddFigure(figure);
    if (Truth(id > 0))
    {
        UO.Print(UO.RemoveFigure(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;

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

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

  • Локальная фигура карты не является предметом мира. Другие фигуры и серверная геометрия не меняются.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var id = 1;
        var first = UO.RemoveFigure(id);
        var second = UO.RemoveFigure(id);
        UO.Print(Convert.ToString(first) + " " + Convert.ToString(second));
        return null;
    }
}

UO.ServerPrint

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

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

void UO.ServerPrint(object? arg0);

Показывает локальное сообщение о ходе скрипта или условии остановки. Его видите вы, а не другие игроки.

Параметры

Возвращает

Вызов метода с возвращаемым типом void пишется как самостоятельный оператор C#; присваивать или проверять результат нельзя. Завершение оператора не является подтверждением игрового сервера.

Поведение

  • Сообщение идёт в нижнюю левую область игрового окна и локальный журнал. Копия доступна в выводе IDE. В общем журнале менеджера включите фильтр сообщений скриптов (script): запись доступна и без игрового окна. Фильтр серверных системных сообщений (system) такие записи не выбирает. Сетевой пакет речи не отправляется. Для надписи над головой есть UO.CharPrint.
  • UO.Print добавляет новую запись в журнал игровых сообщений: сначала прочитайте или сохраните нужную строку/результат поиска, затем запишите диагностическое сообщение. В быстром цикле записывайте сообщения при изменениях, а не на каждой итерации.
  • Без цвета используется hue 0x03B2. UO.Print(text, color) принимает текст первым; UO.ColorPrint(color, text) — цвет первым.
  • Несмотря на Server в имени либо сходство с сетевым сообщением, команда только печатает локальный текст. Чтобы говорить в мир, используйте UO.Say.
  • UO.Print · UO.CharPrint · UO.Say · UO.ConColor

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

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

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

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

Команда вызывается отдельной строкой и не возвращает значение (void). Текст сообщения указан прямо в вызове.

UO.ServerPrint("Hello from C#");

1. Краткий отчёт — прямой скрипт

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

  • processed=12 — демонстрационное число уже обработанных предметов. Convert.ToString превращает его в строку. Этот пример только сообщает число, сам предметы не переносит.
var processed = 12;
UO.ServerPrint("Processed item entries: " + Convert.ToString(processed));

2. Предупреждение о перегрузе — функция сценария

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

  • Читаются вес и максимум персонажа. Нулевой/неизвестный максимум не считается перегрузом. При weight >= maximum печатается одна строка и Main завершается; предметы не выбрасываются.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var weight = UO.Weight();
    var maximum = UO.MaxWeight();
    if (Truth(maximum > 0) && Truth(weight >= maximum))
    {
        UO.ServerPrint("Too heavy: " + Convert.ToString(weight) + "/" + Convert.ToString(maximum));
        return null;
    }

    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. Сообщать только об изменении веса — класс сценария

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

  • Main запоминает вес, ждёт 1000 миллисекунд и вызывает полностью объявленный ReportWeight. Помощник печатает только если вес изменился и возвращает новый вес для следующей проверки. Сам он не создаёт бесконечный цикл.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var previous = UO.Weight();
        UO.Wait(1000);
        previous = ReportWeight(previous, UO.Weight());
        return null;
    }

    dynamic ReportWeight(dynamic previous, dynamic current)
    {
        if (Truth(previous != current))
        {
            UO.ServerPrint("Weight changed: " + Convert.ToString(current));
        }

        return current;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

UO.SetShowZ

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

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

void UO.SetShowZ(object? arg0);

Меняет локальный флаг showZ runtime.

Параметры

  • stateValue — 0 выключает; любое ненулевое целое включает.

Возвращает

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

Поведение

  • Присваивает showZ значение 0 либо 1 после NumberConversions.ToInt. Эта функция сама не изменяет координаты и не отправляет пакет.
  • Это compatibility-хранилище текущего runtime. В проекте нет потребителей private mulPath/showZ; изменение не перезагружает assets и не меняет отображение высоты.

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

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

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

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

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

UO.Print("Calling UO.SetShowZ");
UO.SetShowZ(1);

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

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

  • Меняет локальный флаг showZ runtime.
UO.SetShowZ(1);

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

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

  • Присваивает showZ значение 0 либо 1 после NumberConversions.ToInt. Эта функция сама не изменяет координаты и не отправляет пакет.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    UO.SetShowZ(0);
    return null;
}

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

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

  • Это compatibility-хранилище текущего runtime. В проекте нет потребителей private mulPath/showZ; изменение не перезагружает assets и не меняет отображение высоты.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        ApplyValue(1);
        return null;
    }

    void ApplyValue(dynamic value)
    {
        UO.SetShowZ(value);
    }
}

UO.SetSilentMode

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

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

void UO.SetSilentMode(object? arg0);

Меняет локальный флаг SilentMode runtime.

Параметры

  • Value — 0 выключает; любое ненулевое целое включает.

Возвращает

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

Поведение

  • Сохраняет SilentMode как 0/1. GumpLinesResult читает флаг: при 0 непустые результаты GetGumpShortLines/GetGumpFullLines/GetGumpButtonsDescription дополнительно печатаются в текстовое окно и открывают его; при 1 этот дополнительный показ подавляется. Возвращаемый массив не меняется. Другие Print, звуки и сообщения сервера не подавляются.
  • В обычном клиентском host эти данные состояния берутся из GetPersistentState менеджера и общие для скриптов/чата/макросов одного мира/профиля, а не принадлежат одному скрипту. Другой процесс или явно отдельный InjectionRuntimeState имеет другое состояние. Загрузка/очистка профиля может его заменить; сохранённые serial всё равно проверяются по загруженному миру.

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

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

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

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

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

UO.Print("Calling UO.SetSilentMode");
UO.SetSilentMode(1);

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

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

  • Сохраняет SilentMode как 0/1. GumpLinesResult читает флаг: при 0 непустые результаты GetGumpShortLines/GetGumpFullLines/GetGumpButtonsDescription дополнительно печатаются в текстовое окно и открывают его; при 1 этот дополнительный показ подавляется. Возвращаемый массив не меняется. Другие Print, звуки и сообщения сервера не подавляются.
UO.SetSilentMode(1);

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

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

  • Сохраняет SilentMode как 0/1. GumpLinesResult читает флаг: при 0 непустые результаты GetGumpShortLines/GetGumpFullLines/GetGumpButtonsDescription дополнительно печатаются в текстовое окно и открывают его; при 1 этот дополнительный показ подавляется. Возвращаемый массив не меняется. Другие Print, звуки и сообщения сервера не подавляются.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    UO.SetSilentMode(0);
    return null;
}

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

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

  • Сохраняет SilentMode как 0/1. GumpLinesResult читает флаг: при 0 непустые результаты GetGumpShortLines/GetGumpFullLines/GetGumpButtonsDescription дополнительно печатаются в текстовое окно и открывают его; при 1 этот дополнительный показ подавляется. Возвращаемый массив не меняется. Другие Print, звуки и сообщения сервера не подавляются.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        ApplyValue(1);
        return null;
    }

    void ApplyValue(dynamic value)
    {
        UO.SetSilentMode(value);
    }
}

UO.ShowJournal

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

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

void UO.ShowJournal();

Открывает локальное окно журнала клиента.

Параметры

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

Возвращает

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

Поведение

  • ShowJournal вызывает GameActions.OpenJournal(_world). Записи не очищаются и текст серверу не отправляется.
  • Изменяет или показывает только указанные локальные данные. Серверного подтверждения у этой команды нет.

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

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

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

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

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

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

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

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

  • Открывает локальное окно журнала клиента.
UO.ShowJournal();

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

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

  • ShowJournal вызывает GameActions.OpenJournal(_world). Записи не очищаются и текст серверу не отправляется.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    UO.Print("Journal example");
    UO.ShowJournal();
    return null;
}

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

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

  • Изменяет или показывает только указанные локальные данные. Серверного подтверждения у этой команды нет.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        UO.ShowJournal();
        UO.Print(UO.LineCount());
        return null;
    }
}

UO.Snap

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

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

int UO.Snap();
int UO.Snap(object? arg0);
int UO.Snap(object? arg0, object? arg1);
int UO.Snap(object? arg0, object? arg1, object? arg2);

Сохраняет снимок графического окна клиента.

Параметры

  • name — Необязательное имя файла. .jpg/.jpeg выбирает JPEG, прочее/отсутствие — PNG. Каталоги из имени удаляются; используется только базовое имя.
  • file — Необязательное имя файла. .jpg/.jpeg выбирает JPEG, прочее/отсутствие — PNG. Каталоги из имени удаляются; используется только базовое имя.
  • quality — Необязательный int, по умолчанию 100, ограничивается 1..100. Влияет на JPEG; PNG не использует lossy quality.
  • includeUI — Необязательный bool, по умолчанию true. false рисует мир/освещение без UI.

Возвращает

Числовой флаг int: 1 — файл снимка сохранён, 0 — ошибка захвата/записи. Без графического окна RequireGameView бросает ошибку до TakeScreenshot.

Поведение

  • TakeScreenshot пишет в ExecutablePath/Data/Client/Screenshots, очищает недопустимые символы имени, выбирает автоматически имя по дате при пустом, добавляет _2/_3 при существующем файле. Произвольный абсолютный путь не используется.
  • С UI читает backbuffer; без UI создаёт RenderTarget2D и рендерит мир. JPEG временно задаёт FNA_GRAPHICS_JPEG_SAVE_QUALITY с восстановлением; PNG SaveAsPng. Ошибки внутри TakeScreenshot логируются и дают 0.

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

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

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

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

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

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

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

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

  • Сохраняет снимок графического окна клиента.
UO.Print(UO.Snap());

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

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

  • TakeScreenshot пишет в ExecutablePath/Data/Client/Screenshots, очищает недопустимые символы имени, выбирает автоматически имя по дате при пустом, добавляет _2/_3 при существующем файле. Произвольный абсолютный путь не используется.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    UO.Print(UO.Snap("manual-example.jpg", 85));
    return null;
}

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

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

  • С UI читает backbuffer; без UI создаёт RenderTarget2D и рендерит мир. JPEG временно задаёт FNA_GRAPHICS_JPEG_SAVE_QUALITY с восстановлением; PNG SaveAsPng. Ошибки внутри TakeScreenshot логируются и дают 0.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        UO.Print(UO.Snap("manual-world.png", 100, false));
        return null;
    }
}

UO.TextClear

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

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

void UO.TextClear();

Очищает буфер локального текстового окна.

Параметры

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

Возвращает

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

Поведение

  • Очищает _textWindow; если окно было открыто, заново показывает его с пустым списком. Закрытое окно остаётся закрытым. Журнал клиента не очищается.
  • Действие относится к локальному интерфейсу/буферу; сетевого сообщения и серверного подтверждения нет.

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

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

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

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

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

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

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

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

  • Очищает буфер локального текстового окна.
UO.TextClear();

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

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

  • Очищает _textWindow; если окно было открыто, заново показывает его с пустым списком. Закрытое окно остаётся закрытым. Журнал клиента не очищается.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    UO.TextPrint("Old line");
    UO.TextClear();
    return null;
}

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

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

  • Действие относится к локальному интерфейсу/буферу; сетевого сообщения и серверного подтверждения нет.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        UO.TextClose();
        UO.TextClear();
        UO.TextOpen();
        return null;
    }
}

UO.TextClose

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

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

void UO.TextClose();

Закрывает локальное текстовое окно, сохраняя буфер.

Параметры

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

Возвращает

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

Поведение

  • Задаёт _textWindowOpen=false и Dispose существующего YokoTextWindowGump. Список _textWindow не очищается; TextOpen снова покажет его строки.
  • Действие относится к локальному интерфейсу/буферу; сетевого сообщения и серверного подтверждения нет.

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

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

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

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

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

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

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

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

  • Закрывает локальное текстовое окно, сохраняя буфер.
UO.TextClose();

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

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

  • Задаёт _textWindowOpen=false и Dispose существующего YokoTextWindowGump. Список _textWindow не очищается; TextOpen снова покажет его строки.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    UO.TextPrint("Retained line");
    UO.TextClose();
    return null;
}

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

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

  • Действие относится к локальному интерфейсу/буферу; сетевого сообщения и серверного подтверждения нет.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        UO.TextPrint("Retained line");
        UO.TextClose();
        UO.Wait(250);
        UO.TextOpen();
        return null;
    }
}

UO.TextOpen

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

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

void UO.TextOpen();

Открывает локальное текстовое окно.

Параметры

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

Возвращает

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

Поведение

  • Сохраняет _textWindowOpen=true и вызывает YokoTextWindowGump.Show с текущим _textWindow. Буфер не очищается; повторное открытие показывает накопленные строки.
  • Действие относится к локальному интерфейсу/буферу; сетевого сообщения и серверного подтверждения нет.

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

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

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

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

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

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

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

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

  • Открывает локальное текстовое окно.
UO.TextOpen();

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

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

  • Сохраняет _textWindowOpen=true и вызывает YokoTextWindowGump.Show с текущим _textWindow. Буфер не очищается; повторное открытие показывает накопленные строки.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    UO.TextPrint("Example");
    UO.TextOpen();
    return null;
}

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

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

  • Действие относится к локальному интерфейсу/буферу; сетевого сообщения и серверного подтверждения нет.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        UO.TextOpen();
        UO.Wait(500);
        UO.TextClose();
        return null;
    }
}

UO.TextPrint

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

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

void UO.TextPrint(object? arg0);

Добавляет строку в локальное текстовое окно и открывает его.

Параметры

  • text — Текст через ToString; сохраняется как передан.

Возвращает

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

Поведение

  • При лимите MaxTextWindowLines=2000 удаляет старые строки, затем добавляет text или пустую строку, задаёт _textWindowOpen=true и показывает окно. Это не UO.Print в журнал и не речь серверу.
  • Действие относится к локальному интерфейсу/буферу; сетевого сообщения и серверного подтверждения нет.

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

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

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

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

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

UO.Print("Calling UO.TextPrint");
UO.TextPrint("Example");

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

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

  • Добавляет строку в локальное текстовое окно и открывает его.
UO.TextPrint("Example");

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

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

  • При лимите MaxTextWindowLines=2000 удаляет старые строки, затем добавляет text или пустую строку, задаёт _textWindowOpen=true и показывает окно. Это не UO.Print в журнал и не речь серверу.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var message = "Line 1";
    UO.TextPrint(message);
    UO.TextPrint("Line 2");
    return null;
}

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

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

  • Действие относится к локальному интерфейсу/буферу; сетевого сообщения и серверного подтверждения нет.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        UO.TextClear();
        UO.TextPrint("Fresh report");
        UO.TextClose();
        return null;
    }
}

UO.UpdateFigure

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

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

dynamic UO.UpdateFigure(object? arg0, object? arg1);

Заменяет описание существующей локальной фигуры карты.

Параметры

  • FigureID — int ID в state.MapFigures, полученный AddFigure. Неизвестный ID даёт 0.
  • figure — Array либо строка с |: [kind,coord,x1,y1,x2,y2,brushColor,brushStyle,color,worldNum,text]. Минимум первые 9 числовых полей; worldNum по умолчанию текущая карта, text по умолчанию пустой.
  • figure[0] (kind) — kind должен быть 0..4, coord — 0..1, FigureID — положительным. WorldMapGump.SetYokoMapFigure возвращает 0 при нарушении этих границ.
  • figure[1] (coord) — kind должен быть 0..4, coord — 0..1, FigureID — положительным. WorldMapGump.SetYokoMapFigure возвращает 0 при нарушении этих границ.

Возвращает

Числовой флаг int: 1 — разбор успешен и bridge.SetMapFigure вернул ненулевой результат, после чего запись обновлена; 0 — нет ID, ошибка структуры/числового текстового поля или bridge отказал.

Поведение

  • TryMapFigureArg принимает Array либо |string. Первые 9 полей преобразуются; числовой текст проверяется TryStr2Int. Неподдерживаемый вид/короткая запись — 0, ошибки преобразования другого вида могут прерывать скрипт.
  • При отказе bridge существующая runtime-запись не заменяется. При успехе сохраняется SerializeMapFigure с 10 числовыми полями и текстом. Фигура только локальная, не серверный предмет.
  • kind: 0 линия, 1 эллипс (32 отрезка контура), 2 контур прямоугольника, 3 стрелка, 4 текст. coord=0 — мировые координаты с преобразованием на карту, coord=1 — пиксели относительно области рисования карты. x1/y1 и x2/y2 — концы/границы; у мировой стрелки x2=y2=0 задаёт начало Player и цель x1/y1. color — 0x00BBGGRR (младший byte красный), цвет контура. brushColor/brushStyle сохраняются, но рендер их не читает: заливки нет. worldNum<0 показывает на любой карте, иначе только указанной. Текст рисуется у первой точки (+3 пикселя у нетекстовых фигур) шрифтом карты, не цветом контура.
  • WorldMapGump хранит рисунки в статическом словаре процесса. Обычные скрипты/чат/макросы одного мира/профиля используют общий GetPersistentState и счётчик ID; отдельные процессы Manager не делят рисунки. World.Clear/YokoScripts.Clear и загрузка состояния профиля не очищают и не восстанавливают этот словарь (loader восстанавливает только UserStatics). Поэтому рисунки могут пережить смену мира/профиля в том же процессе с учётом worldNum; новое состояние может повторно выделить уже существующий ID рисунка. ClearFigures явно очищает рисунки и записи текущего состояния. Успех — запись/удаление данных, не доказательство показа.

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

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

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

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

object?[] figure = { 0, 0, UO.X(), UO.Y(), UO.X() + 3, UO.Y(), 0, 0, 255 };
var id = UO.AddFigure(figure);
figure[8] = 65280;
UO.Print("Updated flag: " + Convert.ToString(UO.UpdateFigure(id, figure)));

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

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

  • Заменяет описание существующей локальной фигуры карты.
dynamic[] figure = new dynamic[checked((int)(8) + 1)];
figure[0] = 0;
figure[1] = 0;
figure[2] = 100;
figure[3] = 100;
figure[4] = 101;
figure[5] = 101;
figure[6] = 0;
figure[7] = 0;
figure[8] = 0;
UO.Print(UO.UpdateFigure(1, figure));

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

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

  • TryMapFigureArg принимает Array либо |string. Первые 9 полей преобразуются; числовой текст проверяется TryStr2Int. Неподдерживаемый вид/короткая запись — 0, ошибки преобразования другого вида могут прерывать скрипт.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    dynamic[] figure = new dynamic[checked((int)(10) + 1)];
    figure[0] = 0;
    figure[1] = 0;
    figure[2] = UO.GetX();
    figure[3] = UO.GetY();
    figure[4] = UO.GetX() + 1;
    figure[5] = UO.GetY() + 1;
    figure[6] = 0;
    figure[7] = 0;
    figure[8] = 0;
    figure[9] = UO.WorldNum();
    figure[10] = "Example";
    var id = UO.AddFigure(figure);
    if (Truth(id > 0))
    {
        UO.Print(UO.UpdateFigure(id, figure));
        UO.RemoveFigure(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;

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

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

  • При отказе bridge существующая runtime-запись не заменяется. При успехе сохраняется SerializeMapFigure с 10 числовыми полями и текстом. Фигура только локальная, не серверный предмет.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var figure = "0|0|100|100|101|101|0|0|0";
        UO.Print(UO.UpdateFigure(1, figure));
        return null;
    }
}

Clone this wiki locally