Skip to content

UO Topic client ui

Codex edited this page Oct 12, 2026 · 6 revisions

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

Інтерфейс клієнта

Головна · C# · IDE · Команди UO · За абеткою · Приклади · Мови

Повідомлення в клієнті, службові вікна, відображення об’єктів і відкриття редактора скриптів. Локальне повідомлення бачить користувач цього клієнта; для розмови в грі використовуйте команди розділу «Розмова та чат».

Розділи

Тема Команди та пояснення
Повідомлення в журналі UO.Print
Повідомлення клієнта UO.ClientPrint
Інформаційне вікно UO.FillInfoWindow · UO.ClearInfoWindow · UO.FillNewWindow
Текстове вікно UO.TextOpen · UO.TextPrint · UO.TextClear · UO.TextClose
Прості ігрові вікна UO.CloseSimpleGump
Закриття вікна клієнта UO.CloseClientUIWindow
Прозорість навколо персонажа UO.CircleTrans
Відображення висоти UO.SetShowZ
Відкриття редактора 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  RunScenario();
 object? RunScenario()
{
    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  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        RunAction();
        return null;
    }

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

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.ActivateHandle() — UO.ActivateHandle()

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

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

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

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

public void ActivateHandle() => bridge.ActivateHandle();

UO.AddFigure

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

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

dynamic UO.AddFigure(object? figure);

Додає локальну фігуру на карту світу 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 немає, використовується поточна карта; без тексту береться порожній рядок. 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  RunScenario();
 object? RunScenario()
{
    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  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        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;
    }
}

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.AddFigure(figure) — UO.AddFigure(Any)

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

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

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

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

case "addfigure":

                {

                    if (!TryMapFigureArg(0, out int[] figure, out string figureText))

                        return InjectionValue.Zero;

                    int id = state.NextMapFigureId++;

                    if (bridge.SetMapFigure(id, figure[0], figure[1], figure[2], figure[3], figure[4], figure[5], figure[6], figure[7], figure[8], figure[9], figureText) == 0)

                        return InjectionValue.Zero;

                    state.MapFigures[id] = SerializeMapFigure(figure, figureText);

                    return new InjectionValue(id);

                }

UO.CharPrint

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

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

void UO.CharPrint(object? color, object? msg);
void UO.CharPrint(object? id, object? color, object? msg);

Створює видимий лише вам напис над завантаженим об’єктом: наприклад, позначку вибраної цілі або попередження над власним персонажем. Це не мовлення персонажа й не повідомлення внизу ігрового вікна.

Параметри

  • 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  RunScenario();
 object? RunScenario()
{
    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  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        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;
}

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.CharPrint(color, msg) — UO.CharPrint(Integer,String)

Параметри: color (Integer/String), msg (String)

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

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

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

public void CharPrint(int color, string msg) => CharPrint(bridge.Self, color, msg);

UO.CharPrint(color, msg) — UO.CharPrint(String,String)

Параметри: color (Integer/String), msg (String)

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

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

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

public void CharPrint(string color, string msg) => CharPrint(bridge.Self, NumberConversions.ToInt(color), msg);

UO.CharPrint(id, color, msg) — UO.CharPrint(Any,Any,Any)

Параметри: id (Any/Integer), color (Any/Integer), msg (Any/String)

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

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

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

public void CharPrint(InjectionValue id, InjectionValue color, InjectionValue msg) 

            => CharPrint(GetObject(id), NumberConversions.ToInt(color), (string)msg);

UO.CharPrint(id, color, msg) — UO.CharPrint(Integer,Integer,String)

Параметри: id (Any/Integer), color (Any/Integer), msg (Any/String)

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

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

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

public void CharPrint(int id, int color, string msg) => bridge.CharPrint(id, color, msg);

UO.CircleTrans

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

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

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

Читає або змінює налаштування прозорості активного профілю.

Параметри

  • 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  RunScenario();
 object? RunScenario()
{
    UO.CircleTrans(1);
    return null;
}

3. Відновити колишнє значення – клас сценарію

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

  • Збережений прапор відновлюється після тимчасової зміни налаштування.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var previous = UO.CircleTrans();
        UO.CircleTrans(0);
        UO.CircleTrans(previous);
        return null;
    }
}

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.CircleTrans() — UO.CircleTrans()

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

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

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

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

public int CircleTrans() => bridge.CircleTrans();

UO.CircleTrans(enabled) — UO.CircleTrans(Integer)

Параметри: enabled (Integer)

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

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

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

public void CircleTrans(int enabled) => bridge.CircleTrans(enabled);

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  RunScenario();
 object? RunScenario()
{
    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  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.ClearFigures();
        UO.ClearFigures();
        return null;
    }
}

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.ClearFigures() — UO.ClearFigures()

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

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

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

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

case "clearfigures":

                    bridge.ClearMapFigures();

                    state.MapFigures.Clear();

                    return InjectionValue.Unit;

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  RunScenario();
 object? RunScenario()
{
    UO.FillInfoWindow("status");
    UO.ClearInfoWindow();
    return null;
}

3. Повторне очищення – клас сценарію

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

  • Очищення порожнього набору є прийнятним і не створює нового параметра.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.ClearInfoWindow();
        UO.ClearInfoWindow();
        return null;
    }
}

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.ClearInfoWindow() — UO.ClearInfoWindow()

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

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

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

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

case "clearinfowindow": bridge.TextClear(); return InjectionValue.Unit;

UO.ClientHide

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

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

dynamic UO.ClientHide(object? objID);

Приховує по 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  RunScenario();
 object? RunScenario()
{
    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  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var 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;
}

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.ClientHide(objID) — UO.ClientHide(Any)

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

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

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

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

case "clienthide": bridge.ClientHide(Arg(0)); return InjectionValue.True;

UO.ClientMarkChar

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

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

void UO.ClientMarkChar(object? actionIndex, object? id);

Оновлює клієнтські позначки 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  RunScenario();
 object? RunScenario()
{
    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  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.ClientMarkChar(0, "self");
        return null;
    }
}

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.ClientMarkChar(actionIndex, id) — UO.ClientMarkChar(Any,Any)

Параметри: actionIndex (Any), id (Any)

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

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

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

public void ClientMarkChar(InjectionValue actionIndex, InjectionValue id)

            => bridge.ClientMarkChar(NumberConversions.ToInt(actionIndex), GetObject(id));

UO.ClientPrint

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

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

void UO.ClientPrint(object? text);

Показує локальне повідомлення про хід скрипта або умову зупинки. Його бачите ви, а чи не інші гравці.

Параметри

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

Виклик методу з типом, що повертається 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  RunScenario();
 object? RunScenario()
{
    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  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var 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;
}

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.ClientPrint(text) — UO.ClientPrint(Any)

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

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

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

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

case "addtojournal":

                case "addtosystemjournal":

                case "clientprint":

                    SystemMessage(Text(0)); return InjectionValue.Unit;

UO.ClientPrintEx

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

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

void UO.ClientPrintEx(object? senderID, object? color, object? font, object? text);

Створює видимий лише вам напис над завантаженим об’єктом: наприклад, позначку вибраної цілі або попередження над власним персонажем. Це не мовлення персонажа й не повідомлення внизу ігрового вікна.

Параметри

  • 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  RunScenario();
 object? RunScenario()
{
    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  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        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;
}

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.ClientPrintEx(senderID, color, font, text) — UO.ClientPrintEx(Any,Any,Any,Any)

Параметри: senderID (Any), color (Any), font (Any), text (Any)

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

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

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

case "clientprintex":

                    bridge.CharPrintEx(Arg(0), Arg(1), Arg(2), Text(3)); return InjectionValue.Unit;

UO.CloseClientUIWindow

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

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

void UO.CloseClientUIWindow(object? uiWindowType, object? id);

Закриває локальне вікно клієнта цього виду для конкретного об'єкта. Наприклад, можна прибрати паперову ляльку персонажа, його статус чи вікно рюкзака. Команда не закриває ігровий клієнт та не відповідає на кнопки серверного 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  RunScenario();
 object? RunScenario()
{
    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  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var 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;
}

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.CloseClientUIWindow(uiWindowType, id) — UO.CloseClientUIWindow(Any,Any)

Параметри: uiWindowType (Any), id (Any)

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

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

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

case "closeclientuiwindow": bridge.CloseClientWindow(Arg(0), Arg(1)); return InjectionValue.Unit;

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  RunScenario();
 object? RunScenario()
{
    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. Процедура завершення – клас сценарію

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

  • Повністю оголошений помічник дозволяє явний вихід.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        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;
}

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.CloseHandle() — UO.CloseHandle()

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

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

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

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

public void CloseHandle() => bridge.CloseHandle();

UO.CloseSimpleGump

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

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

void UO.CloseSimpleGump(object? gumpIndex);

Локально закриває дозволений до закриття серверний гамп за суворим індексом.

Параметри

  • 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  RunScenario();
 object? RunScenario()
{
    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  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var info = UO.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;
}

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.CloseSimpleGump(gumpIndex) — UO.CloseSimpleGump(Any)

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

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

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

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

case "closesimplegump":

                    if (bridge is IApiGumpAccess gumpAccess) gumpAccess.CloseGumpAtIndex(Arg(0));

                    else bridge.CloseSimpleGump(Arg(0));

                    return InjectionValue.Unit;

UO.ColorPrint

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

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

void UO.ColorPrint(object? color, object? msg);

Показує локальне повідомлення про хід скрипта або умову зупинки. Його бачите ви, а чи не інші гравці.

Параметри

  • 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  RunScenario();
 object? RunScenario()
{
    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  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var 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;
}

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.ColorPrint(color, msg) — UO.ColorPrint(Any,Any)

Параметри: color (Any), msg (Any)

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

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

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

public void ColorPrint(InjectionValue color, InjectionValue msg) => bridge.Print(NumberConversions.ToInt(color), msg.ToString());

UO.ConColor

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

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

void UO.ConColor(object? color);

Задає 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  RunScenario();
 object? RunScenario()
{
    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  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var usualHue = 0x0440;
        UO.ConColor(usualHue);
        try
        {
            UO.ConColor(0x0035);
            UO.AddToSystemJournal("Temporary warning");
        }
        finally
        {
            UO.ConColor(usualHue);
        }

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

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.ConColor(color) — UO.ConColor(Any)

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

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

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

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

public void ConColor(InjectionValue color)

        {

            systemMessageColor = NumberConversions.ToInt(color);

        }

UO.ConsolePrint

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

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

void UO.ConsolePrint(object? msg);

Показує локальне повідомлення про хід скрипта або умову зупинки. Його бачите ви, а чи не інші гравці.

Параметри

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

Виклик методу з типом, що повертається 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  RunScenario();
 object? RunScenario()
{
    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  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var 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;
}

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.ConsolePrint(msg) — UO.ConsolePrint(Any)

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

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

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

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

public void ConsolePrint(InjectionValue msg) => bridge.Print(msg.ToString());

UO.FillInfoWindow

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

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

void UO.FillInfoWindow(object? s);

Додає один рядок у текстове вікно та показує його.

Параметри

  • 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  RunScenario();
 object? RunScenario()
{
    var status = "HP: " + Convert.ToString(UO.GetHP());
    UO.FillInfoWindow(status);
    return null;
}

3. Два послідовні рядки – клас сценарію

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

  • Друга команда додає second після першого.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.FillInfoWindow("first");
        UO.FillInfoWindow("second");
        return null;
    }
}

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.FillInfoWindow(s) — UO.FillInfoWindow(Any)

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

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

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

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

case "fillinfowindow":

                    bridge.TextPrint(Text(0));

                    bridge.TextOpen();

                    return InjectionValue.Unit;

UO.FillNewWindow

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

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

void UO.FillNewWindow(object? s);

Очищає текстове вікно, додає один рядок та показує його.

Параметри

  • 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  RunScenario();
 object? RunScenario()
{
    var status = "HP: " + Convert.ToString(UO.GetHP());
    UO.FillNewWindow(status);
    return null;
}

3. Два послідовні рядки – клас сценарію

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

  • Друга команда замінює вміст: залишається second.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.FillNewWindow("first");
        UO.FillNewWindow("second");
        return null;
    }
}

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.FillNewWindow(s) — UO.FillNewWindow(Any)

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

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

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

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

case "fillnewwindow": bridge.TextClear(); bridge.TextPrint(Text(0)); bridge.TextOpen(); return InjectionValue.Unit;

UO.FontColor

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

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

void UO.FontColor(object? color);

Встановлює 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  RunScenario();
 object? RunScenario()
{
    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  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var 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;
    }
}

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.FontColor(color) — UO.FontColor(Any)

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

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

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

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

case "fontcolor": state.FontColor = Arg(0, state.FontColor); break;

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  RunScenario();
 object? RunScenario()
{
    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  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        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;
}

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.HelpRequest() — UO.HelpRequest()

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

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

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

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

case "helprequest": bridge.HelpRequest(); return InjectionValue.Unit;

UO.Hide

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

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

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

Забирає завантажений предмет або іншого персонажа з екрана 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  RunScenario();
 object? RunScenario()
{
    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  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var 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;

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.Hide() — UO.Hide()

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

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

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

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

public void Hide()

        {

            // Action command: the bridge owns UI/error reporting. A missing/non-interactive

            // target surface must not turn a void compatibility command into a script failure.

            bridge.RequestInteractiveHideTarget();

        }

UO.Hide(serial) — UO.Hide(Any)

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

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

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

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

public void Hide(InjectionValue serial)

        {

            bridge.ClientHide(NumberConversions.ToInt(serial));

        }

UO.Morph

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

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

void UO.Morph(object? @type);

Локально змінює 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  RunScenario();
 object? RunScenario()
{
    UO.Morph(0);
    return null;
}

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

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

  • Це локальний зовнішній вигляд, не серверна трансформація й не зміна раси/доступних навичок. Значення за межами ushort не перевіряються цією функцією bridge і приводяться до 16 бітів.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.Morph("0x0190");
        UO.Wait(500);
        UO.Morph(0);
        return null;
    }
}

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.Morph(type) — UO.Morph(Integer)

Параметри: type (Integer/String)

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

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

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

public void Morph(int type)

        {

            bridge.Morph(type);

            ticksAnim = Timer();

        }

UO.Morph(type) — UO.Morph(String)

Параметри: type (Integer/String)

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

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

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

public void Morph(string type) => Morph(ResolveType(type));

UO.OpenIDE

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

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

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

Параметри

  • 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  RunScenario();
 object? RunScenario()
{
    UO.OpenIDE("Example.csx");
    return null;
}

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

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

  • Редактор – графічне вікно, не зовнішня програма Launch. Читання/показ файлу залежить від шляху та логіки редактора.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var path = "C:\\UO Scripts\\Example.csx";
        UO.OpenIDE(path);
        return null;
    }
}

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.OpenIDE() — UO.OpenIDE()

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

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

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

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

public void OpenIDE() => bridge.OpenIDE(string.Empty);

UO.OpenIDE(filePath) — UO.OpenIDE(Any)

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

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

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

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

public void OpenIDE(InjectionValue filePath) => bridge.OpenIDE(filePath.ToString());

UO.Print

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

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

void UO.Print(object? msg);
void UO.Print(object? msg, object? color);

Показує локальне повідомлення про хід скрипта або умову зупинки. Його бачите ви, а чи не інші гравці.

Параметри

  • 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  RunScenario();
 object? RunScenario()
{
    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  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var 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;
}

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.Print(msg) — UO.Print(Any)

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

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

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

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

public void Print(InjectionValue msg)

        {

            bridge.Print(msg.ToString());

        }

UO.Print(msg, color) — UO.Print(Any,Any)

Параметри: msg (Any), color (Any)

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

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

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

public void Print(InjectionValue msg, InjectionValue color)

        {

            bridge.Print(NumberConversions.ToInt(color), msg.ToString());

        }

UO.RemoveFigure

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

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

dynamic UO.RemoveFigure(object? figureID);

Видаляє локальну фігуру карти за її 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  RunScenario();
 object? RunScenario()
{
    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  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

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

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.RemoveFigure(figureID) — UO.RemoveFigure(Any)

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

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

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

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

case "removefigure":

                {

                    int id = Arg(0);

                    int removed = bridge.RemoveMapFigure(id);

                    state.MapFigures.Remove(id);

                    return new InjectionValue(removed);

                }

UO.ServerPrint

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

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

void UO.ServerPrint(object? message);

Показує локальне повідомлення про хід скрипта або умову зупинки. Його бачите ви, а чи не інші гравці.

Параметри

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

Виклик методу з типом, що повертається 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  RunScenario();
 object? RunScenario()
{
    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  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var 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;
}

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.ServerPrint(message) — UO.ServerPrint(String)

Параметри: message (String)

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

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

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

public void ServerPrint(string message) => bridge.ServerPrint(message);

UO.SetShowZ

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

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

void UO.SetShowZ(object? stateValue);

Змінює локальний прапор 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  RunScenario();
 object? RunScenario()
{
    UO.SetShowZ(0);
    return null;
}

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

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

  • Це compatibility-сховище поточного runtime. У проекті немає споживачів private mulPath/showZ; зміна не перезавантажує assets і не змінює відображення висоти.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        ApplyValue(1);
        return null;
    }

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

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.SetShowZ(stateValue) — UO.SetShowZ(Any)

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

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

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

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

public void SetShowZ(InjectionValue stateValue) => showZ = NumberConversions.ToInt(stateValue) != 0 ? 1 : 0;

UO.SetSilentMode

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

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

void UO.SetSilentMode(object? value);

Змінює локальний прапор 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  RunScenario();
 object? RunScenario()
{
    UO.SetSilentMode(0);
    return null;
}

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

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

  • Зберігає SilentMode як 0/1. GumpLinesResult читає прапор: при 0 непусті результати GetGumpShortLines/GetGumpFullLines/GetGumpButtonsDescription додатково друкуються у текстове вікно та відкривають його; при 1 цей додатковий показ пригнічується. Повертається масив не змінюється. Інші Print, звуки та повідомлення сервера не придушуються.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        ApplyValue(1);
        return null;
    }

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

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.SetSilentMode(value) — UO.SetSilentMode(Any)

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

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

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

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

case "setsilentmode": state.SilentMode = Arg(0) != 0 ? 1 : 0; return InjectionValue.Unit;

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  RunScenario();
 object? RunScenario()
{
    UO.Print("Journal example");
    UO.ShowJournal();
    return null;
}

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

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

  • Змінює або показує лише вказані локальні дані. Серверного підтвердження цієї команди немає.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.ShowJournal();
        UO.Print(UO.LineCount());
        return null;
    }
}

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.ShowJournal() — UO.ShowJournal()

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

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

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

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

case "showjournal": bridge.ShowJournal(); break;

UO.Snap

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

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

int UO.Snap();
int UO.Snap(object? name);
int UO.Snap(object? name, object? quality);
int UO.Snap(object? file, object? quality, object? includeUI);

Зберігає фотографію графічного вікна клієнта.

Параметри

  • 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  RunScenario();
 object? RunScenario()
{
    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  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.Print(UO.Snap("manual-world.png", 100, false));
        return null;
    }
}

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.Snap() — UO.Snap()

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

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

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

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

public int Snap() => bridge.Snap(null, 100, true);

UO.Snap(name) — UO.Snap(String)

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

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

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

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

public int Snap(string name) => bridge.Snap(name, 100, true);

UO.Snap(name, quality) — UO.Snap(String,Integer)

Параметри: name (String), quality (Integer)

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

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

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

public int Snap(string name, int quality) => bridge.Snap(name, Math.Max(1, Math.Min(100, quality)), true);

UO.Snap(file, quality, includeUI) — UO.Snap(Any,Any,Any)

Параметри: file (Any), quality (Any), includeUI (Any)

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

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

Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.

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

values => new InjectionValue(Snap(values[0].ToString(), NumberConversions.ToInt(values[1]), ToBoolean(values[2])))

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  RunScenario();
 object? RunScenario()
{
    UO.TextPrint("Old line");
    UO.TextClear();
    return null;
}

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

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

  • Дія відноситься до локального інтерфейсу/буфера; мережного повідомлення та серверного підтвердження немає.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.TextClose();
        UO.TextClear();
        UO.TextOpen();
        return null;
    }
}

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.TextClear() — UO.TextClear()

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

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

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

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

public void TextClear() => bridge.TextClear();

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  RunScenario();
 object? RunScenario()
{
    UO.TextPrint("Retained line");
    UO.TextClose();
    return null;
}

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

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

  • Дія відноситься до локального інтерфейсу/буфера; мережного повідомлення та серверного підтвердження немає.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.TextPrint("Retained line");
        UO.TextClose();
        UO.Wait(250);
        UO.TextOpen();
        return null;
    }
}

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.TextClose() — UO.TextClose()

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

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

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

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

public void TextClose() => bridge.TextClose();

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  RunScenario();
 object? RunScenario()
{
    UO.TextPrint("Example");
    UO.TextOpen();
    return null;
}

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

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

  • Дія відноситься до локального інтерфейсу/буфера; мережного повідомлення та серверного підтвердження немає.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.TextOpen();
        UO.Wait(500);
        UO.TextClose();
        return null;
    }
}

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.TextOpen() — UO.TextOpen()

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

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

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

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

public void TextOpen() => bridge.TextOpen();

UO.TextPrint

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

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

void UO.TextPrint(object? text);

Додає рядок до локального текстового вікна та відкриває його.

Параметри

  • 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  RunScenario();
 object? RunScenario()
{
    var message = "Line 1";
    UO.TextPrint(message);
    UO.TextPrint("Line 2");
    return null;
}

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

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

  • Дія відноситься до локального інтерфейсу/буфера; мережного повідомлення та серверного підтвердження немає.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.TextClear();
        UO.TextPrint("Fresh report");
        UO.TextClose();
        return null;
    }
}

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.TextPrint(text) — UO.TextPrint(String)

Параметри: text (String)

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

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

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

public void TextPrint(string text) => bridge.TextPrint(text);

UO.UpdateFigure

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

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

dynamic UO.UpdateFigure(object? figureID, object? figure);

Замінює опис наявної локальної фігури картки.

Параметри

  • 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  RunScenario();
 object? RunScenario()
{
    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  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var figure = "0|0|100|100|101|101|0|0|0";
        UO.Print(UO.UpdateFigure(1, figure));
        return null;
    }
}

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

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.UpdateFigure(figureID, figure) — UO.UpdateFigure(Any,Any)

Параметри: figureID (Any), figure (Any)

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

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

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

case "updatefigure":

                {

                    int id = Arg(0);

                    if (!state.MapFigures.ContainsKey(id) || !TryMapFigureArg(1, out int[] figure, out string figureText))

                        return InjectionValue.False;

                    if (bridge.SetMapFigure(id, figure[0], figure[1], figure[2], figure[3], figure[4], figure[5], figure[6], figure[7], figure[8], figure[9], figureText) == 0)

                        return InjectionValue.False;

                    state.MapFigures[id] = SerializeMapFigure(figure, figureText);

                    return InjectionValue.True;

                }

Clone this wiki locally