UO Topic menus context menus - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki

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

Меню та контекстні меню

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

Вибір пунктів звичайного й контекстного меню та відповідь на запит введення тексту. Це різні види запитів: номер пункту потрібно брати з потрібного меню.

Розділи

Тема Команди та пояснення
Автоматична відповідь у меню UO.AutoMenu
Очікувана відповідь у меню UO.WaitMenu
Обробники меню UO.MenuHookPresent · UO.CancelAllMenuHooks
Пункти меню UO.GetMenuItems · UO.GetMenuItemsEx · UO.GetLastMenuItems
Скасування меню UO.CancelMenu
Контекстне меню UO.GetContextMenu · UO.ClearContextMenu
Запит контекстного меню UO.RequestContextMenu
Обробники контекстного меню UO.SetContextMenuHook

Усі команди теми

Меню

UO.AutoMenu · UO.WaitMenu · UO.GetMenuItems · UO.GetMenuItemsEx · UO.GetLastMenuItems · UO.MenuHookPresent · UO.MenuPresent · UO.CancelAllMenuHooks · UO.CancelMenu · UO.CloseMenu · UO.WaitingForMenu · UO.WaitingMenu

Контекстне меню

UO.GetContextMenu · UO.RequestContextMenu · UO.SetContextMenuHook · UO.ClearContextMenu

Введення тексту

UO.WaitTextEntry · UO.ConsoleEntryReply · UO.ConsoleEntryUnicodeReply

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

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

UO.RequestContextMenu

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

var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
    UO.RequestContextMenu(id);
}

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

UO.WaitMenu

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

UO.WaitMenu("Craft", "Tools");

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


UO.AutoMenu

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

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

void UO.AutoMenu(object? prompt, object? choice);

Реєструє постійний menu hook: з появою серверного меню з підписом клієнт вибирає відповідний пункт. Виклик не відкриває меню і не чекає на нього синхронно.

Параметри

  • prompt — підстроювання заголовка серверного меню.
  • choice — підстроювання підпису пункту меню.

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

void. Виклик лише реєструє hook і не повідомляє, чи знайдено меню чи успішно вибрано пункт.

Поведінка

  • Під час кожного оновлення клієнта hook шукає ще не закрите серверне меню, заголовок якого містить prompt. Якщо знайдено пункт, підпис якого містить choice, клієнт вибирає його. Hook залишається зареєстрованим після вибору, тому спрацює й на наступних відповідних меню. Видалити hooks можна через UO.CancelMenu().

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

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

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

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

Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.

UO.Print("Calling UO.AutoMenu");
UO.AutoMenu("Choose material", "Copper");

1. Очікувати меню із заголовком "Choose material" та вибирати пункт із текстом "Copper". - Прямий скрипт

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

  • Очікувати меню із заголовком "Choose material" та вибирати пункт із текстом "Copper".
UO.AutoMenu("Choose material", "Copper");

2. Підрядки порівнюються без урахування регістру; hook діє і наступні збіглися меню. - Функція сценарію

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

  • Підрядки порівнюються без урахування регістру; hook діє і наступні збіглися меню.
return  RunScenario();
 object? RunScenario()
{
    var menuCaption = "choose color";
    var itemCaption = "blue";
    UO.AutoMenu(menuCaption, itemCaption);
    return null;
}

3. Зареєструвати hook на час цієї задачі, потім видалити всі hooks цього клієнта. - Клас сценарію

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

  • Зареєструвати hook на час цієї задачі, потім видалити всі hooks цього клієнта.
  • Інші дії скрипту можуть виконуватися до появи меню.
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.AutoMenu("Choose material", "Iron");
        UO.CancelMenu();
        return null;
    }
}

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

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

UO.AutoMenu(prompt, choice) — UO.AutoMenu(Any,Any)

Параметри: prompt (Any), choice (Any)

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

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

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

case "automenu":

                    if (arguments.Length >= 2) bridge.AddMenuHook(arguments[0].ToString(), arguments[1].ToString(), true);

                    break;

UO.CancelAllMenuHooks

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

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

void UO.CancelAllMenuHooks();

Видаляє всі зареєстровані автоматичні hooks старих серверних меню клієнта.

Параметри

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

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

void - значення, що повертається немає.

Поведінка

  • Викликає ClearMenuHooks менеджера. Видаляються одноразові та постійні правила вибору, включаючи AutoMenu та WaitMenu. Вже відкриті меню команда не закриває; для цього служить CloseMenu.

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

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

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

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

Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.

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

1. Зняти всі hooks - прямий скрипт

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

  • Видалення відноситься до всього набору menu hooks клієнта.
UO.CancelAllMenuHooks();

2. Обмежити дію AutoMenu - функція сценарію

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

  • Hook відразу видаляється; майбутні меню, що збіглися, більше не вибираються автоматично.
return  RunScenario();
 object? RunScenario()
{
    UO.AutoMenu("Choose material", "Iron");
    UO.CancelAllMenuHooks();
    return null;
}

3. Зупинити автоматичний вибір та закрити меню – клас сценарію

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

  • Перша команда видаляє hooks; друга окремо скасовує відкриті старі меню.
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.CancelAllMenuHooks();
        UO.CloseMenu();
        return null;
    }
}

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

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

UO.CancelAllMenuHooks() — UO.CancelAllMenuHooks()

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

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

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

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

case "cancelallmenuhooks": bridge.ClearMenuHooks(); return InjectionValue.Unit;

UO.CancelMenu

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

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

void UO.CancelMenu();

Видаляє всі зареєстровані автоматичні hooks старих серверних меню клієнта.

Параметри

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

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

void - значення, що повертається немає.

Поведінка

  • Викликає ClearMenuHooks менеджера. Видаляються одноразові та постійні правила вибору, включаючи AutoMenu та WaitMenu. Вже відкриті меню команда не закриває; для цього служить CloseMenu.

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

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

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

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

Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.

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

1. Зняти всі hooks - прямий скрипт

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

  • Видалення відноситься до всього набору menu hooks клієнта.
UO.CancelMenu();

2. Обмежити дію AutoMenu - функція сценарію

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

  • Hook відразу видаляється; майбутні меню, що збіглися, більше не вибираються автоматично.
return  RunScenario();
 object? RunScenario()
{
    UO.AutoMenu("Choose material", "Iron");
    UO.CancelMenu();
    return null;
}

3. Зупинити автоматичний вибір та закрити меню – клас сценарію

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

  • Перша команда видаляє hooks; друга окремо скасовує відкриті старі меню.
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.CancelMenu();
        UO.CloseMenu();
        return null;
    }
}

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

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

UO.CancelMenu() — UO.CancelMenu()

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

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

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

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

case "cancelmenu": bridge.ClearMenuHooks(); break;

UO.ClearContextMenu

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

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

void UO.ClearContextMenu();

Видаляє поточну локальну модель контекстного меню.

Параметри

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

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

void - значення, що повертається немає.

Поведінка

  • Викликає Dispose у ServerMenus.Context, якщо модель є; нове серверне меню може з'явитись після наступного запиту. Це не CloseMenu.

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

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

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

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

Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.

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

1. Очистити стан - прямий скрипт

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

  • Видаляє поточну локальну модель контекстного меню.
UO.ClearContextMenu();

2. Очистити після налаштування – функція сценарію

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

  • Зняти локальне контекстне меню після прочитання знімка.
return  RunScenario();
 object? RunScenario()
{
    var entries = UO.GetContextMenu();
    UO.ClearContextMenu();
    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.ClearContextMenu();
        UO.ClearContextMenu();
        return null;
    }
}

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

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

UO.ClearContextMenu() — UO.ClearContextMenu()

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

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

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

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

case "clearcontextmenu": bridge.ClearContextMenu(); return InjectionValue.Unit;

UO.CloseMenu

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

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

void UO.CloseMenu();

Скасує всі активні старі серверні меню через CancelForYoko.

Параметри

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

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

void - значення, що повертається немає.

Поведінка

  • Перебирає знімок ServerMenus та скасовує кожну модель. Не видаляє автоматичні menu hooks та не закриває довільні gump/interface вікна.

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

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

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

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

Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.

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

1. Скасувати відкриті меню – прямий скрипт

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

  • Скасування стосується старих MenuGump/серверних меню.
UO.CloseMenu();

2. Видалити hooks та скасувати меню – функція сценарію

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

  • Набір автоматичного вибору та відкриті меню обробляються окремими командами.
return  RunScenario();
 object? RunScenario()
{
    UO.CancelAllMenuHooks();
    UO.CloseMenu();
    return null;
}

3. Скасувати після перегляду – клас сценарію

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

  • Знімок списку зберігається в items навіть після скасування меню.
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 items = UO.GetLastMenuItems();
        UO.Print(Convert.ToString(ArrayLength(items)));
        UO.CloseMenu();
        return null;
    }

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

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

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

UO.CloseMenu() — UO.CloseMenu()

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

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

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

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

case "closemenu": bridge.CloseMenu(); return InjectionValue.Unit;

UO.ConsoleEntryReply

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

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

void UO.ConsoleEntryReply(object? text);

Відповідає текстом на активний серверний prompt через MessageManager.SendServerPromptResponse.

Параметри

  • text — Значення, яке перетворюється на рядок. Порожній рядок надсилається як порожня відповідь.

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

void - значення, що повертається немає.

Поведінка

  • Обидві команди прямують до ReplyServerPrompt. Тип пакету ASCII/Unicode вибирається за збереженим станом server prompt; Ім'я команди не змушує окреме кодування. За відсутності активного prompt менеджер не надсилає відповіді.

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

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

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

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

Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.

UO.Print("Calling UO.ConsoleEntryReply");
UO.ConsoleEntryReply("reply");

1. Відповідь на prompt – прямий скрипт

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

  • Надсилання відноситься до поточного серверного запиту введення.
UO.ConsoleEntryReply("reply");

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

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

  • Порожній текст передається менеджеру як порожня відповідь.
return  RunScenario();
 object? RunScenario()
{
    UO.ConsoleEntryReply("");
    return null;
}

3. Відповідь із змінної – клас сценарію

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

  • Ім'я змінної не впливає на вибраний формат prompt.
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 reply = "New item name";
        UO.ConsoleEntryReply(reply);
        return null;
    }
}

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

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

UO.ConsoleEntryReply(text) — UO.ConsoleEntryReply(Any)

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

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

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

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

case "consoleentryreply":

                case "consoleentryunicodereply": bridge.ReplyServerPrompt(Text(0)); return InjectionValue.Unit;

UO.ConsoleEntryUnicodeReply

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

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

void UO.ConsoleEntryUnicodeReply(object? text);

Відповідає текстом на активний серверний prompt через MessageManager.SendServerPromptResponse.

Параметри

  • text — Значення, яке перетворюється на рядок. Порожній рядок надсилається як порожня відповідь.

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

void - значення, що повертається немає.

Поведінка

  • Обидві команди прямують до ReplyServerPrompt. Тип пакету ASCII/Unicode вибирається за збереженим станом server prompt; Ім'я команди не змушує окреме кодування. За відсутності активного prompt менеджер не надсилає відповіді.

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

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

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

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

Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.

UO.Print("Calling UO.ConsoleEntryUnicodeReply");
UO.ConsoleEntryUnicodeReply("reply");

1. Відповідь на prompt – прямий скрипт

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

  • Надсилання відноситься до поточного серверного запиту введення.
UO.ConsoleEntryUnicodeReply("reply");

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

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

  • Порожній текст передається менеджеру як порожня відповідь.
return  RunScenario();
 object? RunScenario()
{
    UO.ConsoleEntryUnicodeReply("");
    return null;
}

3. Відповідь із змінної – клас сценарію

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

  • Ім'я змінної не впливає на вибраний формат prompt.
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 reply = "New item name";
        UO.ConsoleEntryUnicodeReply(reply);
        return null;
    }
}

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

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

UO.ConsoleEntryUnicodeReply(text) — UO.ConsoleEntryUnicodeReply(Any)

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

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

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

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

case "consoleentryreply":

                case "consoleentryunicodereply": bridge.ReplyServerPrompt(Text(0)); return InjectionValue.Unit;

UO.GetContextMenu

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

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

dynamic UO.GetContextMenu();

Читає рядки пунктів поточної моделі контекстного меню.

Параметри

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

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

Array рядків з ServerMenus.Context.GetYokoItems(); за відсутності моделі - порожній масив.

Поведінка

  • Не надсилає RequestContextMenu і не чекає на серверну відповідь. Щоб отримати нове меню, спочатку окремо запитайте його та дочекайтеся появи моделі. ClearContextMenu видаляє модель після читання.

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

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

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

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

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

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

1. Прочитати поточне меню – прямий скрипт

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

  • Читається вже існуюча модель.
var entries = UO.GetContextMenu();
for (int i = (int)(0); i <= ArrayLength(entries)-1; i += (int)(1))
{
    UO.Print(entries[i]);
}

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

2. Запитати та прочитати пізніше — функція сценарію

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

  • 500 мс - пауза прикладу, не гарантія відповіді сервера; порожній масив допустимо.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    UO.RequestContextMenu(UO.Self());
    await Delay(500);
    var entries = UO.GetContextMenu();
    UO.Print(Convert.ToString(ArrayLength(entries)));
    return null;
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

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 entries = UO.GetContextMenu();
        UO.ClearContextMenu();
        UO.Print(Convert.ToString(ArrayLength(entries)));
        return null;
    }

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

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

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

UO.GetContextMenu() — UO.GetContextMenu()

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

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

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

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

case "getcontextmenu": return StringArray(bridge.GetContextMenu());

UO.GetLastMenuItems

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

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

dynamic UO.GetLastMenuItems();

Читає пункти відкритого старого серверного меню.

Параметри

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

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

Array рядків. Рядки імен/описів пунктів GetYokoItems. Відсутнє потрібне меню дає порожній масив.

Поведінка

  • Вибирається останнє меню знімка ServerMenus. Команда не відкриває меню, не ставить hook та не вибирає пункт. Це не контекстне меню та не звичайний серверний gump.
  • Порядок відповідає пунктам моделі. Список є знімком; наступні зміни меню не оновлюють збережений масив.

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

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

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

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

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

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

1. Вивести всі пункти - прямий скрипт

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

  • Порожній масив безпечно обробляється циклом.
var items = UO.GetLastMenuItems();
for (int i = (int)(0); i <= ArrayLength(items)-1; i += (int)(1))
{
    UO.Print(items[i]);
}

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

2. Перший пункт – функція сценарію

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

  • Індекс 0 читається лише після перевірки розміру.
return  RunScenario();
 object? RunScenario()
{
    var items = UO.GetLastMenuItems();
    if (Truth(ArrayLength(items) > 0))
    {
        UO.Print(items[0]);
    }

    return null;
}

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

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

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

  • Масив залишається доступним після скасування серверного меню.
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 items = UO.GetLastMenuItems();
        UO.CloseMenu();
        UO.Print(Convert.ToString(ArrayLength(items)));
        return null;
    }

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

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

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

UO.GetLastMenuItems() — UO.GetLastMenuItems()

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

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

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

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

case "getlastmenuitems": return StringArray(bridge.GetLastMenuItems());

UO.GetMenuItems

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

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

dynamic UO.GetMenuItems(object? caption);

Читає пункти відкритого старого серверного меню.

Параметри

  • caption — Підстроювання заголовка старого серверного меню; пошук OrdinalIgnoreCase. Порожній рядок відповідає будь-якому заголовку.

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

Array рядків. Рядки імен/описів пунктів GetYokoItems. Відсутнє потрібне меню дає порожній масив.

Поведінка

  • Вибирається останнє не-Disposed меню з підрядком заголовка. Команда не відкриває меню, не ставить hook та не вибирає пункт. Це не контекстне меню та не звичайний серверний gump.
  • Порядок відповідає пунктам моделі. Список є знімком; наступні зміни меню не оновлюють збережений масив.

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

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

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

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

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

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

1. Вивести всі пункти - прямий скрипт

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

  • Порожній масив безпечно обробляється циклом.
var items = UO.GetMenuItems("");
for (int i = (int)(0); i <= ArrayLength(items)-1; i += (int)(1))
{
    UO.Print(items[i]);
}

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

2. Перший пункт – функція сценарію

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

  • Індекс 0 читається лише після перевірки розміру.
return  RunScenario();
 object? RunScenario()
{
    var items = UO.GetMenuItems("");
    if (Truth(ArrayLength(items) > 0))
    {
        UO.Print(items[0]);
    }

    return null;
}

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

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

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

  • Масив залишається доступним після скасування серверного меню.
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 items = UO.GetMenuItems("");
        UO.CloseMenu();
        UO.Print(Convert.ToString(ArrayLength(items)));
        return null;
    }

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

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

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

UO.GetMenuItems(caption) — UO.GetMenuItems(Any)

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

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

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

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

case "getmenuitems": return StringArray(bridge.GetMenuItems(Text(0), false));

UO.GetMenuItemsEx

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

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

dynamic UO.GetMenuItemsEx(object? caption);

Читає пункти відкритого старого серверного меню.

Параметри

  • caption — Підстроювання заголовка старого серверного меню; пошук OrdinalIgnoreCase. Порожній рядок відповідає будь-якому заголовку.

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

Array рядків. Рядки graphicHex|hueHex|index|name, наприклад 0x0001|0x0000|1|choice. Відсутнє потрібне меню дає порожній масив.

Поведінка

  • Вибирається останнє не-Disposed меню з підрядком заголовка. Команда не відкриває меню, не ставить hook та не вибирає пункт. Це не контекстне меню та не звичайний серверний gump.
  • Порядок відповідає пунктам моделі. Список є знімком; наступні зміни меню не оновлюють збережений масив.

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

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

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

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

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

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

1. Вивести всі пункти - прямий скрипт

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

  • Порожній масив безпечно обробляється циклом.
var items = UO.GetMenuItemsEx("");
for (int i = (int)(0); i <= ArrayLength(items)-1; i += (int)(1))
{
    UO.Print(items[i]);
}

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

2. Перший пункт – функція сценарію

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

  • Індекс 0 читається лише після перевірки розміру.
return  RunScenario();
 object? RunScenario()
{
    var items = UO.GetMenuItemsEx("");
    if (Truth(ArrayLength(items) > 0))
    {
        UO.Print(items[0]);
    }

    return null;
}

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

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

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

  • Масив залишається доступним після скасування серверного меню.
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 items = UO.GetMenuItemsEx("");
        UO.CloseMenu();
        UO.Print(Convert.ToString(ArrayLength(items)));
        return null;
    }

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

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

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

UO.GetMenuItemsEx(caption) — UO.GetMenuItemsEx(Any)

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

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

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

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

case "getmenuitemsex": return StringArray(bridge.GetMenuItems(Text(0), true));

UO.MenuHookPresent

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

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

dynamic UO.MenuHookPresent();

Читає наявність зареєстрованих menu hooks.

Параметри

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

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

Числовий прапор "int": "1" - _manager. "HasMenuHooks", "0" - hooks немає. Саме меню може ще бути відсутнім.

Поведінка

  • Читає наявність зареєстрованих menu hooks. Не чекає на меню, не перевіряє наявність серверного gump і не витрачає hook.
  • Читає поточний локальний стан. Пакету, target та автоматичного оновлення немає; окремі читання можуть бачити різні стани.

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

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

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

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

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

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

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

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

  • Читає наявність зареєстрованих menu hooks.
UO.Print(UO.MenuHookPresent());

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

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

  • Читає наявність зареєстрованих menu hooks. Не чекає на меню, не перевіряє наявність серверного gump і не витрачає hook.
return  RunScenario();
 object? RunScenario()
{
    UO.WaitMenu("Craft", "Tools");
    UO.Print(UO.MenuHookPresent());
    return null;
}

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

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

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

     public object? RunScenario()
    {
        var before = UO.MenuHookPresent();
        UO.Wait(500);
        var after = UO.MenuHookPresent();
        UO.Print(before);
        UO.Print(after);
        return null;
    }
}

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

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

UO.MenuHookPresent() — UO.MenuHookPresent()

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

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

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

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

case "menuhookpresent": return new InjectionValue(bridge.MenuHookPresent());

UO.MenuPresent

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

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

dynamic UO.MenuPresent();

MenuPresent прямо викликає WaitingMenu.

Параметри

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

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

Числовий прапор int: 1 - є server menu, '0' - ні.

Поведінка

  • MenuPresent прямо викликає WaitingMenu. Не перевіряє GetGumpsCount, контекстні меню чи зареєстровані hooks.
  • Читає поточний локальний стан. Пакету, target та автоматичного оновлення немає; окремі читання можуть бачити різні стани.

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

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

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

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

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

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

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

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

  • MenuPresent прямо викликає WaitingMenu.
UO.Print(UO.MenuPresent());

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

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

  • MenuPresent прямо викликає WaitingMenu. Не перевіряє GetGumpsCount, контекстні меню чи зареєстровані hooks.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.MenuPresent()))
    {
        UO.Print(UO.GetLastMenuItems());
    }

    return null;
}

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

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

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

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

     public object? RunScenario()
    {
        var before = UO.MenuPresent();
        UO.Wait(500);
        var after = UO.MenuPresent();
        UO.Print(before);
        UO.Print(after);
        return null;
    }
}

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

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

UO.MenuPresent() — UO.MenuPresent()

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

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

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

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

case "menupresent": return new InjectionValue(bridge.MenuPresent());

UO.RequestContextMenu

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

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

void UO.RequestContextMenu(object? objID);

Вимагає контекстне меню об'єкта.

Параметри

  • objID — Serial/ID об'єкта: int, числова/hex-рядок або встановлений аліас, наприклад "lasttarget". Це не graphic/type. До дії перевіряйте завантажений об'єкт.

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

void - значення немає. Викликайте окремим рядком; завершення не підтверджує дію сервера.

Поведінка

  • Bridge викликає GameActions.OpenPopupMenu. Відповідь зберігається окремо та читається GetContextMenu; команда не вибирає рядок меню.
  • Bridge надсилає запит на ігровому потоці. Діють правила сервера; вбудованого очікування підтвердження немає.

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

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

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

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

Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.

UO.Print("Calling UO.RequestContextMenu");
UO.RequestContextMenu(UO.GetSerial("lasttarget"));

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

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

  • Вимагає контекстне меню об'єкта.
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
    UO.RequestContextMenu(id);
}

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

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

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

  • Bridge викликає GameActions.OpenPopupMenu. Відповідь зберігається окремо та читається GetContextMenu; команда не вибирає рядок меню.
return  RunScenario();
 object? RunScenario()
{
    var id = UO.GetSerial("self");
    if (Truth(UO.Exists(id)))
    {
        UO.RequestContextMenu(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 надсилає запит на ігровому потоці. Діють правила сервера; вбудованого очікування підтвердження немає.
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()
    {
        ApplyToLoaded(UO.GetSerial("lasttarget"));
        return null;
    }

    void ApplyToLoaded(dynamic id)
    {
        if (Truth(UO.Exists(id)))
        {
            UO.RequestContextMenu(id);
        }
    }

    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.RequestContextMenu(objID) — UO.RequestContextMenu(Any)

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

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

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

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

case "requestcontextmenu": bridge.RequestContextMenu(Arg(0)); return InjectionValue.Unit;

UO.SetContextMenuHook

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

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

void UO.SetContextMenuHook(object? menuID, object? entryNumber);

Реєструє одноразовий вибір контекстного меню.

Параметри

  • menuID - Serial об'єкта меню, наводиться до uint; 0 підходить будь-якому serial. Це не server gump ID.
  • entryNumber - Нульовий індекс пункту; негативне значення вимикає очікуваний context hook. 0..GetArrayLength(UO.GetContextMenu())-1.

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

void - значення немає. Викликайте окремим рядком; завершення не підтверджує дію сервера.

Поведінка

  • Bridge передає дані _manager.SetContextMenuHook, де зберігаються _contextMenuSerial/_contextMenuEntry. Обробник ProcessMenuHooks чекає існуюче відповідне context menu.
  • Якщо SelectYokoItem успішний, поля очищаються до 0/-1. Меню не запитується цим setter: використовуйте RequestContextMenu окремо. Сам виклик не блокує та не підтверджує серверну дію.

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

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

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

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

Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.

UO.Print("Calling UO.SetContextMenuHook");
UO.SetContextMenuHook(0, 0);

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

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

  • Реєструє одноразовий вибір контекстного меню.
UO.SetContextMenuHook(0, 0);

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

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

  • Bridge передає дані _manager.SetContextMenuHook, де зберігаються _contextMenuSerial/_contextMenuEntry. Обробник ProcessMenuHooks чекає існуюче відповідне context menu.
return  RunScenario();
 object? RunScenario()
{
    var id = UO.GetSerial("lasttarget");
    UO.SetContextMenuHook(UO.Hex2Int(id), 0);
    UO.RequestContextMenu(id);
    return null;
}

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

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

  • Якщо SelectYokoItem успішний, поля очищаються до 0/-1. Меню не запитується цим setter: використовуйте RequestContextMenu окремо. Сам виклик не блокує та не підтверджує серверну дію.
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.SetContextMenuHook(0, -1);
        UO.Print(UO.GetContextMenu());
        return null;
    }
}

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

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

UO.SetContextMenuHook(menuID, entryNumber) — UO.SetContextMenuHook(Any,Any)

Параметри: menuID (Any), entryNumber (Any)

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

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

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

case "setcontextmenuhook": bridge.SetContextMenuHook(Arg(0), Arg(1)); return InjectionValue.Unit;

UO.WaitMenu

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

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

void UO.WaitMenu(object? menuCaption, object? elementCaption);
void UO.WaitMenu(object? prompt1, object? choice1, object? prompt2, object? choice2);
void UO.WaitMenu(object? prompt1, object? choice1, object? prompt2, object? choice2, object? prompt3, object? choice3);

Реєструє три одноразові menu hooks.

Параметри

  • menuCaption / prompt1 / prompt2 / prompt3 — Рядок шаблону заголовка server menu. Пари передаються як заголовок, елемент.
  • menuCaption — Рядок шаблону заголовка server menu. Пари передаються як заголовок, елемент.
  • prompt1 — Рядок шаблону заголовка server menu. Пари передаються як заголовок, елемент.
  • prompt2 — Рядок шаблону заголовка server menu. Пари передаються як заголовок, елемент.
  • prompt3 — Рядок шаблону заголовка server menu. Пари передаються як заголовок, елемент.
  • elementCaption / choice1 / choice2 / choice3 — Рядок вибору елемента для відповідного заголовка. Чи не ID кнопки звичайного gump.
  • elementCaption — Рядок вибору елемента для відповідного заголовка. Чи не ID кнопки звичайного gump.
  • choice1 — Рядок вибору елемента для відповідного заголовка. Чи не ID кнопки звичайного gump.
  • choice2 — Рядок вибору елемента для відповідного заголовка. Чи не ID кнопки звичайного gump.
  • choice3 — Рядок вибору елемента для відповідного заголовка. Чи не ID кнопки звичайного gump.

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

void - значення немає. Викликайте окремим рядком; завершення не підтверджує дію сервера.

Поведінка

  • Кожна пара передається _manager. AddMenuHook (prompt, choice, false). Зареєстровані форми - 2/4/6 аргументів. false означає одноразовий hook; AutoMenu/двохаргументний VendorMenu використовують постійний hook.
  • Не закриває скрипт до появи меню. Hook витрачається менеджером у відповідному меню; результат виконання сервером не повертається. Для наявності меню використовуйте WaitingMenu, для hooks - MenuHookPresent.
  • Для форм menu/choice менеджер вибирає перше меню, заголовок якого містить prompt без урахування регістру; SessionMenu вибирає перший пункт, ім'я якого містить choice так само без урахування регістру. Порожній текст підходить будь-кому; числовий текст - фрагмент імені, не індекс. Успішний вибір надсилає відповідь та закриває локальне меню. Одноразовий hook видаляється лише після успішного вибору, постійний залишається.

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

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

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

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

Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.

UO.Print("Calling UO.WaitMenu");
UO.WaitMenu("Craft", "Tools");

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

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

  • Реєструє три одноразові menu hooks.
UO.WaitMenu("Craft", "Tools");

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

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

  • Кожна пара передається _manager. AddMenuHook (prompt, choice, false). Зареєстровані форми - 2/4/6 аргументів. false означає одноразовий hook; AutoMenu/двохаргументний VendorMenu використовують постійний hook.
return  RunScenario();
 object? RunScenario()
{
    UO.WaitMenu("Craft", "Tools", "Tools", "Shovel");
    return null;
}

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

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

  • Не закриває скрипт до появи меню. Hook витрачається менеджером у відповідному меню; результат виконання сервером не повертається. Для наявності меню використовуйте WaitingMenu, для hooks - MenuHookPresent.
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.WaitMenu("Craft", "Tools", "Tools", "Shovel", "Amount", "One");
        UO.Print(UO.MenuHookPresent());
        return null;
    }
}

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

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

UO.WaitMenu(menuCaption, elementCaption) — UO.WaitMenu(Any,Any)

Параметри: menuCaption (Any/String), elementCaption (Any/String)

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

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

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

case "waitmenu": bridge.WaitMenu(arguments.Select(value => value.ToString()).ToArray()); return InjectionValue.Unit;

UO.WaitMenu(menuCaption, elementCaption) — UO.WaitMenu(String,String)

Параметри: menuCaption (Any/String), elementCaption (Any/String)

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

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

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

public void WaitMenu(string prompt, string choice)

            => bridge.WaitMenu(prompt, choice);

UO.WaitMenu(prompt1, choice1, prompt2, choice2) — UO.WaitMenu(String,String,String,String)

Параметри: prompt1 (String), choice1 (String), prompt2 (String), choice2 (String)

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

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

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

public void WaitMenu(string prompt1, string choice1, string prompt2, string choice2)

            => bridge.WaitMenu(prompt1, choice1, prompt2, choice2);

UO.WaitMenu(prompt1, choice1, prompt2, choice2, prompt3, choice3) — UO.WaitMenu(String,String,String,String,String,String)

Параметри: prompt1 (String), choice1 (String), prompt2 (String), choice2 (String), prompt3 (String), choice3 (String)

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

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

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

public void WaitMenu(string prompt1, string choice1, string prompt2, string choice2, string prompt3, string choice3)

            => bridge.WaitMenu(prompt1, choice1, prompt2, choice2, prompt3, choice3);

UO.WaitTextEntry

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

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

void UO.WaitTextEntry(object? value);

Намагається записати текст у textentry поточного gump.

Параметри

  • value — Текст через ToString; зберігається як переданий.

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

void - значення немає. Викликайте окремим рядком; завершення не підтверджує дію сервера.

Поведінка

  • ExecuteClientApiCompatibility викликає SetGumpValue(-1, "textentry", -1, Text(0)). key=-1 не є звичайним нульовим індексом: запис можливий тільки якщо існуюче поле зіставляється з таким ID у реалізації gump.
  • Не чекає майбутній gump, не відкриває prompt та не реєструє hook. Якщо відповідного поля немає, SetGumpValue виводить повідомлення. Для відомого поля використовуйте SetGump з явним ID/індексом.

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

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

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

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

Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.

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

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

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

  • Намагається записати текст у textentry поточного gump.
UO.WaitTextEntry("Example");

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

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

  • ExecuteClientApiCompatibility викликає SetGumpValue(-1, "textentry", -1, Text(0)). key=-1 не є звичайним нульовим індексом: запис можливий тільки якщо існуюче поле зіставляється з таким ID у реалізації gump.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.GetGumpsCount() > 0))
    {
        UO.WaitTextEntry("Example");
    }

    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. Повна допоміжна функція – клас сценарію

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

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

     public object? RunScenario()
    {
        UO.WaitTextEntry("Example");
        UO.Print("Check the target field in the current gump");
        return null;
    }
}

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

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

UO.WaitTextEntry(value) — UO.WaitTextEntry(Any)

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

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

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

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

case "waittextentry": bridge.SetGumpValue(-1, "textentry", -1, Text(0)); return InjectionValue.Unit;

UO.WaitingForMenu

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

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

int UO.WaitingForMenu(object? delay);
int UO.WaitingForMenu(object? delay, object? menuCount);
int UO.WaitingForMenu(object? delay, object? menuCount, object? blockMenu);
int UO.WaitingForMenu(object? delay, object? menuCount, object? blockMenu, object? menuName);
int UO.WaitingForMenu(object? delayValue, object? menuCountValue, object? blockMenuValue, object? menuNameValue, object? skillOrSerial);

Обмежено чекає необхідну кількість появи server menu.

Параметри

  • delay — int timeout у мілісекундах, негативний стає 0. Навіть при 0 виконується одна перевірка.
  • delayValue — int timeout у мілісекундах, негативний стає 0. Навіть при 0 виконується одна перевірка.
  • menuCount — необов'язкова кількість появи, мінімум 1; за замовчуванням 1. Це не кількість пунктів меню.
  • menuCountValue — необов'язкова кількість появи, мінімум 1; за замовчуванням 1. Це не кількість пунктів меню.
  • blockMenu — Необов'язкове ненульове число закриває menu, коли умова досягнута; 0 залишає його.
  • blockMenuValue — Необов'язкове ненульове число закриває menu, коли умова досягнута; 0 залишає його.
  • menuName — необов'язковий точний заголовок з урахуванням регістру; порожній допускає будь-хто.
  • menuNameValue — необов'язковий точний заголовок з урахуванням регістру; порожній допускає будь-хто.
  • skillOrSerial — Необов'язковий останній аргумент: TriggerWaitAction може спочатку використовувати навичку на ім'я або об'єкт по serial. За замовчуванням 0 – без дії.

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

Числовий прапор int: 1 - помічені мінімум menuCount різних появ і останнє має потрібний заголовок; 0 - timeout. Існуюче меню може зараховуватися відразу.

Поведінка

  • Після TriggerWaitAction читає GetLastMenuIdentity; нове identity збільшує лічильник. Порожня identity скидає пам'ять попереднього, тому те саме меню після закриття/перевідкриття може знову зарахуватися.
  • Кордон count перевіряється тільки за нової identity. При збігу та blockMenu закриває menu. Між перевірками UO.Wait до 25 ms; заголовок перевіряється Ordinal, не substring.

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

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

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

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

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

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

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

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

  • Обмежено чекає необхідну кількість появи server menu.
UO.Print(UO.WaitingForMenu(3000));

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

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

  • Після TriggerWaitAction читає GetLastMenuIdentity; нове identity збільшує лічильник. Порожня identity скидає пам'ять попереднього, тому те саме меню після закриття/перевідкриття може знову зарахуватися.
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.WaitingForMenu(3000, 1, 1, "Craft"));
    return null;
}

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

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

  • Кордон count перевіряється тільки за нової identity. При збігу та blockMenu закриває menu. Між перевірками UO.Wait до 25 ms; заголовок перевіряється Ordinal, не substring.
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 found = UO.WaitingForMenu(3000, 1, 0, "Craft", "lasttarget");
        if (Truth(found))
        {
            UO.Print(UO.GetLastMenuItems());
        }

        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.WaitingForMenu(delay) — UO.WaitingForMenu(Any)

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

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

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

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

public int WaitingForMenu(InjectionValue delay) => WaitingForMenu(delay, InjectionValue.Zero, InjectionValue.Zero, new InjectionValue(string.Empty), InjectionValue.Zero);

UO.WaitingForMenu(delay, menuCount) — UO.WaitingForMenu(Any,Any)

Параметри: delay (Any), menuCount (Any)

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

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

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

public int WaitingForMenu(InjectionValue delay, InjectionValue menuCount) => WaitingForMenu(delay, menuCount, InjectionValue.Zero, new InjectionValue(string.Empty), InjectionValue.Zero);

UO.WaitingForMenu(delay, menuCount, blockMenu) — UO.WaitingForMenu(Any,Any,Any)

Параметри: delay (Any), menuCount (Any), blockMenu (Any)

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

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

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

public int WaitingForMenu(InjectionValue delay, InjectionValue menuCount, InjectionValue blockMenu) => WaitingForMenu(delay, menuCount, blockMenu, new InjectionValue(string.Empty), InjectionValue.Zero);

UO.WaitingForMenu(delay, menuCount, blockMenu, menuName) — UO.WaitingForMenu(Any,Any,Any,Any)

Параметри: delay (Any), menuCount (Any), blockMenu (Any), menuName (Any)

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

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

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

public int WaitingForMenu(InjectionValue delay, InjectionValue menuCount, InjectionValue blockMenu, InjectionValue menuName) => WaitingForMenu(delay, menuCount, blockMenu, menuName, InjectionValue.Zero);

UO.WaitingForMenu(delayValue, menuCountValue, blockMenuValue, menuNameValue, skillOrSerial) — UO.WaitingForMenu(Any,Any,Any,Any,Any)

Параметри: delayValue (Any), menuCountValue (Any), blockMenuValue (Any), menuNameValue (Any), skillOrSerial (Any)

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

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

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

public int WaitingForMenu(InjectionValue delayValue, InjectionValue menuCountValue, InjectionValue blockMenuValue, InjectionValue menuNameValue, InjectionValue skillOrSerial)

        {

            int delay = Math.Max(0, NumberConversions.ToInt(delayValue));

            int requiredMenuCount = Math.Max(1, NumberConversions.ToInt(menuCountValue));

            bool blockMenu = NumberConversions.ToInt(blockMenuValue) != 0;

            string expectedName = menuNameValue.ToString() ?? string.Empty;

            DateTime deadline = timeSource.Now.AddMilliseconds(delay);

            string previousIdentity = string.Empty;

            int observedMenuCount = 0;



            TriggerWaitAction(skillOrSerial);



            do

            {

                string identity = bridge.GetLastMenuIdentity() ?? string.Empty;

                if (identity.Length == 0)

                {

                    // Reset between server menus so an identical menu opened again

                    // still counts as a new appearance.

                    previousIdentity = string.Empty;

                }

                else if (!identity.Equals(previousIdentity, StringComparison.Ordinal))

                {

                    previousIdentity = identity;

                    observedMenuCount++;

                    string caption = bridge.GetLastMenuCaption() ?? string.Empty;

                    bool nameMatches = expectedName.Length == 0

                        || caption.Equals(expectedName, StringComparison.Ordinal);

                    if (observedMenuCount >= requiredMenuCount && nameMatches)

                    {

                        if (blockMenu)

                            bridge.CloseMenu();

                        return 1;

                    }

                }



                if (timeSource.Now >= deadline)

                    break;

                bridge.Wait(Math.Min(25, Math.Max(1, delay)));

            }

            while (true);



            return 0;

        }

UO.WaitingMenu

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

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

int UO.WaitingMenu();

Читає _world.ServerMenus.Snapshot().Length != 0.

Параметри

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

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

Числовий прапор "int": "1" - в "ServerMenus" є хоча б одне меню, "0" - ні. Це наявність меню, не очікування на скрипт.

Поведінка

  • Читає _world.ServerMenus.Snapshot().Length != 0. Legacy server menus відокремлені від звичайних серверних gumps та контекстного меню.
  • Читає поточний локальний стан. Пакету, target та автоматичного оновлення немає; окремі читання можуть бачити різні стани.

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

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

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

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

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

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

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

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

  • Читає _world.ServerMenus.Snapshot().Length != 0.
UO.Print(UO.WaitingMenu());

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

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

  • Читає _world.ServerMenus.Snapshot().Length != 0. Legacy server menus відокремлені від звичайних серверних gumps та контекстного меню.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.WaitingMenu()))
    {
        UO.Print(UO.GetLastMenuItems());
    }

    return null;
}

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

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

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

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

     public object? RunScenario()
    {
        var before = UO.WaitingMenu();
        UO.Wait(500);
        var after = UO.WaitingMenu();
        UO.Print(before);
        UO.Print(after);
        return null;
    }
}

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

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

UO.WaitingMenu() — UO.WaitingMenu()

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

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

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

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

public int WaitingMenu() => bridge.WaitingMenu();
⚠️ **GitHub.com Fallback** ⚠️