RU UO Topic gumps - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Главная · C# · IDE · UO API · A–Z · Примеры · Языки
Чтение серверных окон и отправка ответов: кнопки, флажки, переключатели и поля. ID окна, serial владельца и индекс открытого окна не взаимозаменяемы.
| Тема | Команды и пояснения |
|---|---|
| GetGump | UO.GetGump |
| GetGumpInfo | UO.GetGumpInfo |
| Gump ID / Serial | UO.GetGumpID · UO.GetGumpSerial |
| Text Lines | UO.GetGumpTextLines · UO.GetGumpFullLines · UO.GetGumpShortLines |
| Buttons | UO.GetGumpButtonsDescription · UO.NumGumpButton |
| CheckBox | UO.NumGumpCheckBox · UO.GumpAutoCheckBox |
| RadioButton | UO.NumGumpRadiobutton · UO.GumpAutoRadiobutton |
| TextEntry | UO.NumGumpTextEntry · UO.GumpAutoTextEntry |
| WaitGump | UO.WaitGump |
| SelectGump | UO.SelectGump |
| SendGumpSelect | UO.SendGumpSelect |
| Ignore Гампс | UO.AddGumpIgnoreByID · UO.AddGumpIgnoreBySerial · UO.ClearGumpsIgnore |
| Close Gump | UO.IsGumpCanBeClosed · UO.CloseClientGump · UO.CancelGump |
UO.GetGump · UO.GetGumpID · UO.GetGumpSerial · UO.GetGumpCount · UO.GetGumpsCount · UO.GetGumpInfo · UO.GetGumpButtonsDescription · UO.GetGumpFullLines · UO.GetGumpShortLines · UO.GetGumpTextLines · UO.GumpObject · UO.LastGump · UO.IsGump · UO.GumpExists · UO.IsGumpCanBeClosed
UO.NumGumpButton · UO.NumGumpCheckBox · UO.NumGumpRadiobutton · UO.NumGumpTextEntry · UO.GumpAutoCheckBox · UO.GumpAutoRadiobutton · UO.GumpAutoTextEntry · UO.WaitGump · UO.WaitGumpCheck · UO.WaitGumpEntry · UO.SelectGump · UO.SendGumpSelect · UO.SetGump
UO.AddGumpIgnoreByID · UO.AddGumpIgnoreBySerial · UO.ClearGumpsIgnore · UO.CancelGump · UO.CloseClientGump
В каждой карточке команды есть несколько самостоятельных сценариев: прямой код, функции и классы. Ниже приведены отдельные короткие сценарии; ограничения и полный разбор находятся в карточках.
Параметры, результат и все сценарии
var info = UO.GetGumpInfo(0);
if (Truth(ArrayLength(info) == 5))
{
UO.Print("Serial=" + Hex(info[0]));
UO.Print("GumpID=" + Hex(info[1]));
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры, результат и все сценарии
UO.WaitGump(100);
UO.UseObject("0x40001234");Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AddGumpIgnoreByID(object? id);Добавляет числовой ID gump в локальный список исключений, используемый UO.GetGumpInfo.
-
id— числовой ID gump, который возвращаетUO.GetGumpInfo.
void. Добавление ID не закрывает окно и не подтверждает его обработку сервером.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.AddGumpIgnoreByID");
UO.AddGumpIgnoreByID(123);Параметры и ход выполнения:
- Исключить gump с ID 123 из результата UO.GetGumpInfo.
UO.AddGumpIgnoreByID(123);Параметры и ход выполнения:
- Хранить ID в переменной, прежде чем добавить исключение.
return RunScenario();
object? RunScenario()
{
var ignoredId = 123;
UO.AddGumpIgnoreByID(ignoredId);
return null;
}Параметры и ход выполнения:
- Добавить несколько ID; каждое исключение действует на GetGumpInfo.
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.AddGumpIgnoreByID(123);
UO.AddGumpIgnoreByID(456);
return null;
}
}C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.
Параметры: id (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Внутренний код реализации, не самостоятельный скрипт.
case "addgumpignorebyid": state.IgnoredGumpIds.Add(Arg(0)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AddGumpIgnoreBySerial(object? serial);Добавляет serial gump в локальный список исключений, используемый UO.GetGumpInfo.
-
serial— числовой serial gump, который возвращаетUO.GetGumpInfo.
void. Добавление serial не закрывает окно и не подтверждает его обработку сервером.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.AddGumpIgnoreBySerial");
UO.AddGumpIgnoreBySerial(1073741824);Параметры и ход выполнения:
- Исключить gump с serial 1073741824 из результата UO.GetGumpInfo.
UO.AddGumpIgnoreBySerial(1073741824);Параметры и ход выполнения:
- Передать serial из переменной.
return RunScenario();
object? RunScenario()
{
var ignoredSerial = 1073741824;
UO.AddGumpIgnoreBySerial(ignoredSerial);
return null;
}Параметры и ход выполнения:
- Исключить два serial gump из выдачи GetGumpInfo.
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.AddGumpIgnoreBySerial(1073741824);
UO.AddGumpIgnoreBySerial(1073741825);
return null;
}
}C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.
Параметры: serial (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Внутренний код реализации, не самостоятельный скрипт.
case "addgumpignorebyserial": state.IgnoredGumpSerials.Add(Arg(0)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.CancelGump();
void UO.CancelGump(object? gumpId);Закрывает выбранный серверный gump через совместимый резолвер CloseSimpleGump.
-
gumpId— Необязательный int/числовое значение. Резолвер сначала ищет совпавший server/local serial, затем индекс серверного gump. Без аргумента передаётся -1 и выбирается последний gump.
void — возвращаемого значения нет.
- Аргумент с именем gumpId не гарантирует поиск только по ID. CloseGumpUnsafe для серверного gump отправляет кнопку 0, затем удаляет локальное окно. Если gump не найден, действие отсутствует. Это не CancelMenu и не очистка ожидающего WaitGump.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.CancelGump");
UO.CancelGump();Параметры и ход выполнения:
- Форма без аргумента выбирает последний доступный серверный gump.
UO.CancelGump();Параметры и ход выполнения:
- Используется фактический ID первого gump; список может измениться между вызовами.
return RunScenario();
object? RunScenario()
{
var id = UO.GetGumpID(0);
if (Truth(id != 0))
{
UO.CancelGump(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;Параметры и ход выполнения:
- Значение -1 явно выбирает последний gump в резолвере.
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.CancelGump(-1);
return null;
}
}C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.
Параметры: Параметров нет.
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CloseSimpleGump:bridge.CloseSimpleGump(arguments.Length > 0 ? Arg(0) : -1). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0).
Внутренний код реализации, не самостоятельный скрипт.
case "cancelgump": bridge.CloseSimpleGump(arguments.Length > 0 ? Arg(0) : -1); break;Параметры: gumpId (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CloseSimpleGump:bridge.CloseSimpleGump(arguments.Length > 0 ? Arg(0) : -1). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0).
Внутренний код реализации, не самостоятельный скрипт.
case "cancelgump": bridge.CloseSimpleGump(arguments.Length > 0 ? Arg(0) : -1); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ClearGumpsIgnore();Очищает оба набора игнорируемых gump ID и gump serial runtime.
Параметров нет.
void — возвращаемого значения нет.
- Не закрывает окна. После очистки GetGumpInfo снова может вернуть снимок ранее игнорируемого gump.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.ClearGumpsIgnore");
UO.ClearGumpsIgnore();Параметры и ход выполнения:
- Очищает оба набора игнорируемых gump ID и gump serial runtime.
UO.ClearGumpsIgnore();Параметры и ход выполнения:
- Снять добавленное правило игнорирования.
return RunScenario();
object? RunScenario()
{
UO.AddGumpIgnoreByID(0x1234);
UO.ClearGumpsIgnore();
return null;
}Параметры и ход выполнения:
- Очистка пустого набора допустима и не создаёт новую настройку.
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.ClearGumpsIgnore();
UO.ClearGumpsIgnore();
return null;
}
}C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.
Параметры: Параметров нет.
Результат: void / Unit.
При вызове:
Внутренний код реализации, не самостоятельный скрипт.
case "cleargumpsignore":
state.IgnoredGumpIds.Clear(); state.IgnoredGumpSerials.Clear(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.CloseClientGump(object? id);Удаляет локальные серверные gump, чей ServerSerial совпадает с переданным ID.
-
id— int/числовой ID gump, сравниваемый с ServerSerial. Это не индекс списка и не local serial.
void — возвращаемого значения нет.
- Перебирает ServerGumpsUnsafe, создаёт снимок всех совпадений и вызывает Dispose. Не отправляет кнопку 0 или результат формы серверу. Если совпадений нет, ничего не меняет.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.CloseClientGump");
UO.CloseClientGump(UO.GetGumpID(0));Параметры и ход выполнения:
- GetGumpID предоставляет server ID; CloseClientGump удаляет совпавшие локальные окна.
if (Truth(UO.GetGumpsCount() > 0))
{
var id = UO.GetGumpID(0);
UO.CloseClientGump(id);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Укажите ID нужного серверного gump; отсутствие совпадений допустимо.
return RunScenario();
object? RunScenario()
{
var id = 0x12345678;
UO.CloseClientGump(id);
return null;
}Параметры и ход выполнения:
- После первого Dispose второе закрытие обычно уже не находит окно.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var id = UO.GetGumpID(0);
if (Truth(id != 0))
{
UO.CloseClientGump(id);
UO.CloseClientGump(id);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.
Параметры: id (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CloseClientGump:bridge.CloseClientGump(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Внутренний код реализации, не самостоятельный скрипт.
case "closeclientgump": bridge.CloseClientGump(Arg(0)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetGump(object? identifier);
dynamic UO.GetGump(object? gumpId, object? identifier);
dynamic UO.GetGump(object? gumpId, object? identifier, object? key);Читает одно поле выбранного серверного гампа. Позволяет явно задать селектор окна.
-
gumpId— Необязательный первый int в формах (gumpId,identifier) и (gumpId,identifier,key). int или числовая строка: сначала ищется точное совпадение GumpID/serial, затем индекс с 0. -1 — выбранный этим скриптом гамп, а если его нет — последний в текущем списке. Другие отрицательные int сохраняют 32-битный ID. Это селектор, в отличие от строгого GumpIndex в NumGump*. -
identifier— string без учёта регистра. Все поддерживаемые значения и типы результатов перечислены в разделе «Возвращает». Неизвестное имя возвращает пустую строку. -
key— Необязательный int, по умолчанию -1. Индекс с 0 для button/text/object/command; это не ID контроля. Отрицательный индекс и выход за границу дают 0 для button или пустую строку для текстовых полей. Остальные identifier не используют key.
Тип результата зависит от identifier. int: buttonlen — число обычных кнопок; button — ButtonID по индексу key; textlen — число доступных текстовых элементов; injid — текущий индекс окна; replyed — 0 (история ответов не хранится); inclient — 1 для найденного живого окна, 0 при отсутствии; objectcount — число живых контролов, включая вложенные. string: serial и gumpid — hex-строки 0xXXXXXXXX; text — текст элемента по индексу key; object — имя типа контрола; command — описание контрола (тип, page, ID, координаты, размеры и поддерживаемые поля). При отсутствии окна числовые identifier дают 0, строковые — пустую строку. injid=0 также является допустимым первым индексом: сам по себе 0 не доказывает отсутствие окна. Это не Array и не Pascal TGumpInfo.
- Работает с активными серверными гампами. Рюкзак, карта, настройки и другие локальные окна не входят в этот список. Один вызов читает данные в игровом потоке; разные вызовы могут увидеть разные состояния списка.
- SelectGump/InfoGump задают выбранное окно только в текущем runtime. Если выбранное окно закрыто, используется последний элемент текущего списка, который не обязательно является самым новым по времени.
- textlen/text относятся к доступным текстовым контролам, а не исходному пулу строк серверного пакета. object/command относятся ко всему дереву живых контролов. Индексы разных списков нельзя смешивать.
- Каждый вызов читает текущее состояние отдельно. Для согласованных serial, GumpID и списков используйте GetGumpInfo.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
object? result = UO.GetGump("gumpid");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметры и ход выполнения:
- gumpid и serial возвращают строки, уже оформленные в hex; дополнительный Hex не нужен. Пустые строки означают отсутствие окна при чтении.
var id = UO.GetGump("gumpid");
var serial = UO.GetGump("serial");
UO.Print(id + " / " + serial);Параметры и ход выполнения:
- buttonlen — количество кнопок; i — индекс строки от 0 до count-1. button — ID для ответа, не графика и не индекс. При изменении окон перечитайте список.
return RunScenario();
object? RunScenario()
{
var count = UO.GetGump("buttonlen");
var i = 0;
while (Truth(i < count))
{
var button = UO.GetGump("button", i);
UO.Print(Convert.ToString(button));
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;Параметры и ход выполнения:
- 0x12345678 — пример GumpID/serial, замените ID нужной формы. text с key=0 читает первый доступный текстовый контроль; это другой список, чем button.
- SelectGump сообщает об отсутствии указанного окна, но не блокирует последующее чтение: при необходимости отдельно проверяйте возвращённый 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()
{
UO.SelectGump(0x12345678);
if (Truth(UO.GetGump("inclient")))
{
var count = UO.GetGump("textlen");
if (Truth(count > 0))
{
UO.Print(UO.GetGump("text", 0));
}
}
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.
Параметры: identifier (String)
Результат: dynamic / Any.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.GetGump. -
InjectionScript.Runtime.InjectionApiUO.LastGump:LastGump(identifier, -1).
Внутренний код реализации, не самостоятельный скрипт.
public InjectionValue GetGump(string identifier) => LastGump(identifier, -1);Параметры: gumpId (Integer/String), identifier (String/Integer)
Результат: dynamic / Any.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.GetGump. -
InjectionScript.Runtime.InjectionApiUO.GetGump:GetGump(gumpId, identifier, -1).
Внутренний код реализации, не самостоятельный скрипт.
public InjectionValue GetGump(int gumpId, string identifier) => GetGump(gumpId, identifier, -1);Параметры: gumpId (Integer/String), identifier (String/Integer)
Результат: dynamic / Any.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.GetGump. -
InjectionScript.Runtime.InjectionApiUO.LastGump:LastGump(identifier, key).
Внутренний код реализации, не самостоятельный скрипт.
public InjectionValue GetGump(string identifier, int key) => LastGump(identifier, key);Параметры: gumpId (Integer), identifier (String), key (Integer)
Результат: dynamic / Any.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.GetGump. -
InjectionScript.Runtime.InjectionApiUO.ConvertGumpValue:ConvertGumpValue(identifier, bridge.GetGumpValue(gumpId, identifier, key)). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetGumpValue:bridge.GetGumpValue(gumpId, identifier, key).
Внутренний код реализации, не самостоятельный скрипт.
public InjectionValue GetGump(int gumpId, string identifier, int key)
=> ConvertGumpValue(identifier, bridge.GetGumpValue(gumpId, identifier, key));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetGumpButtonsDescription(object? gumpIndex);Возвращает описания обычных кнопок серверного гампа.
-
gumpIndex— Обязательный int — индекс активного серверного гампа, от 0 до GetGumpsCount()-1. Это не GumpID/serial. Отрицательное число и индекс вне списка недействительны. Открытие, закрытие и изменение порядка окон могут изменить индекс; перед действием проверяйте GetGumpID/GetGumpSerial.
Array — описания обычных кнопок. [] — недействительный индекс или отсутствие подходящих элементов. Индекс строки начинается с 0; он не является ID контроля.
- Работает с активными серверными гампами. Рюкзак, карта, настройки и другие локальные окна не входят в этот список. Один вызов читает данные в игровом потоке; разные вызовы могут увидеть разные состояния списка.
- Каждая строка содержит ButtonID, action, toPage и графику. Радиокнопки не являются обычными кнопками ответа.
- При SilentMode=0 непустой результат также добавляется в текстовое окно и открывает его. SetSilentMode(1) оставляет только возврат массива.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
object? result = UO.GetGumpButtonsDescription(0);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметры и ход выполнения:
- 0 — индекс окна. ArrayLength проверяет наличие строки до обращения к lines[0].
var lines = UO.GetGumpButtonsDescription(0);
if (Truth(ArrayLength(lines) > 0))
{
UO.Print(lines[0]);
}
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;Параметры и ход выполнения:
- SetSilentMode(1) отключает дополнительное текстовое окно. Явный Print в примере всё равно выводит строки.
- i — индекс массива; ID нужной кнопки/переключателя берите из соответствующего описания.
return RunScenario();
object? RunScenario()
{
UO.SetSilentMode(1);
var lines = UO.GetGumpButtonsDescription(0);
var i = 0;
while (Truth(i < ArrayLength(lines)))
{
UO.Print(lines[i]);
i = i + 1;
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Количество преобразуется в индекс последнего окна. Данные читаются из загруженного серверного гампа; локальные окна сюда не входят.
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()
{
int count = UO.GetGumpsCount();
if (count == 0)
return null;
int index = count - 1;
var lines = UO.GetGumpButtonsDescription(index);
foreach (object? line in (object? [])lines)
UO.Print(Convert.ToString(line) ?? "");
return null;
}
}C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.
Параметры: gumpIndex (Any)
Результат: dynamic / Array.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.GumpLinesResult:GumpLinesResult(bridge.GetGumpButtonsDescription(Arg(0))). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetGumpButtonsDescription:bridge.GetGumpButtonsDescription(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Внутренний код реализации, не самостоятельный скрипт.
case "getgumpbuttonsdescription": return GumpLinesResult(bridge.GetGumpButtonsDescription(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetGumpCount();Короткий вариант GetGumpsCount: число активных серверных гампов.
Параметров нет.
int >= 0 — количество окон, не индекс последнего окна. 0 — список пуст.
- Работает с активными серверными гампами. Рюкзак, карта, настройки и другие локальные окна не входят в этот список. Один вызов читает данные в игровом потоке; разные вызовы могут увидеть разные состояния списка.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
var result = UO.GetGumpCount();
UO.Print("GetGumpCount: " + Convert.ToString(result));Параметры и ход выполнения:
- Это количество серверных гампов, а не индекс окна; локальные рюкзак и карта сюда не входят.
int count = UO.GetGumpCount();
UO.Print($"Active server gumps: {count}");Параметры и ход выполнения:
- Индексы начинаются с нуля. Между вызовами список может измениться, поэтому перед чтением проверяется актуальное количество.
return RunScenario();
object? RunScenario()
{
int count = UO.GetGumpCount();
for (int index = 0; index < count; index++)
{
if (index >= UO.GetGumpCount())
break;
UO.Print($"Gump {index}: ID={UO.GetGumpID(index)}, serial={UO.GetGumpSerial(index)}");
}
return null;
}Параметры и ход выполнения:
- Ожидание ограничено тайм-аутом. Само наличие окна не доказывает, что это нужный гамп; для выбора проверяйте его ID.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
bool appeared = await WaitForGump(3000);
UO.Print(appeared ? "A server gump appeared" : "No server gump within the timeout");
return null;
}
async Task<bool> WaitForGump(int timeoutMs)
{
var timer = System.Diagnostics.Stopwatch.StartNew();
while (timer.ElapsedMilliseconds < timeoutMs)
{
if (UO.GetGumpCount() > 0)
return true;
await WaitAsync(50);
}
return false;
}
}C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.
Параметры: Параметров нет.
Результат: int / Integer.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.GetGumpCount. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetGumpCount:bridge.GetGumpCount().
Внутренний код реализации, не самостоятельный скрипт.
public int GetGumpCount() => bridge.GetGumpCount();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetGumpFullLines(object? gumpIndex);Возвращает описания всех живых элементов, в том числе вложенных серверного гампа.
-
gumpIndex— Обязательный int — индекс активного серверного гампа, от 0 до GetGumpsCount()-1. Это не GumpID/serial. Отрицательное число и индекс вне списка недействительны. Открытие, закрытие и изменение порядка окон могут изменить индекс; перед действием проверяйте GetGumpID/GetGumpSerial.
Array — описания всех живых элементов, в том числе вложенных. [] — недействительный индекс или отсутствие подходящих элементов. Индекс строки начинается с 0; он не является ID контроля.
- Работает с активными серверными гампами. Рюкзак, карта, настройки и другие локальные окна не входят в этот список. Один вызов читает данные в игровом потоке; разные вызовы могут увидеть разные состояния списка.
- Описания текущего дерева контролов: тип, page, ID, X/Y, размеры и поддерживаемые поля. Это не сырой пакет серверной разметки.
- При SilentMode=0 непустой результат также добавляется в текстовое окно и открывает его. SetSilentMode(1) оставляет только возврат массива.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
object? result = UO.GetGumpFullLines(0);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметры и ход выполнения:
- 0 — индекс окна. ArrayLength проверяет наличие строки до обращения к lines[0].
var lines = UO.GetGumpFullLines(0);
if (Truth(ArrayLength(lines) > 0))
{
UO.Print(lines[0]);
}
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;Параметры и ход выполнения:
- SetSilentMode(1) отключает дополнительное текстовое окно. Явный Print в примере всё равно выводит строки.
- i — индекс массива; ID нужной кнопки/переключателя берите из соответствующего описания.
return RunScenario();
object? RunScenario()
{
UO.SetSilentMode(1);
var lines = UO.GetGumpFullLines(0);
var i = 0;
while (Truth(i < ArrayLength(lines)))
{
UO.Print(lines[i]);
i = i + 1;
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Количество преобразуется в индекс последнего окна. Данные читаются из загруженного серверного гампа; локальные окна сюда не входят.
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()
{
int count = UO.GetGumpsCount();
if (count == 0)
return null;
int index = count - 1;
var lines = UO.GetGumpFullLines(index);
foreach (object? line in (object? [])lines)
UO.Print(Convert.ToString(line) ?? "");
return null;
}
}C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.
Параметры: gumpIndex (Any)
Результат: dynamic / Array.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.GumpLinesResult:GumpLinesResult(bridge.GetGumpFullLines(Arg(0))). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetGumpFullLines:bridge.GetGumpFullLines(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Внутренний код реализации, не самостоятельный скрипт.
case "getgumpfulllines": return GumpLinesResult(bridge.GetGumpFullLines(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetGumpID(object? gumpIndex);Читает идентификатор типа окна GumpID по индексу серверного гампа.
-
gumpIndex— Обязательный int — индекс активного серверного гампа, от 0 до GetGumpsCount()-1. Это не GumpID/serial. Отрицательное число и индекс вне списка недействительны. Открытие, закрытие и изменение порядка окон могут изменить индекс; перед действием проверяйте GetGumpID/GetGumpSerial.
int — 32-битный идентификатор типа окна GumpID. 0 — недействительный индекс (serial=0 также может присутствовать в самом окне). При установленном старшем бите int отрицателен: используйте Hex(value) для отображения. Это не type предмета и не индекс.
- Работает с активными серверными гампами. Рюкзак, карта, настройки и другие локальные окна не входят в этот список. Один вызов читает данные в игровом потоке; разные вызовы могут увидеть разные состояния списка.
- Для согласованной пары serial/GumpID используйте один GetGumpInfo: поля info[0] и info[1].
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
var result = UO.GetGumpID(0);
UO.Print("GetGumpID: " + Convert.ToString(result));Параметры и ход выполнения:
- 0 — первый индекс серверного списка. Hex сохраняет битовое представление отрицательного int.
var value = UO.GetGumpID(0);
UO.Print(Hex(value));
string Hex(object? value) => Convert.ToInt64(value).ToString("X");Параметры и ход выполнения:
- При неизменном списке count находится за последним индексом, поэтому missing=0. Последний допустимый индекс — count-1.
return RunScenario();
object? RunScenario()
{
var count = UO.GetGumpsCount();
var missing = UO.GetGumpID(count);
UO.Print(Hex(missing));
return null;
}
string Hex(object? value) => Convert.ToInt64(value).ToString("X");Параметры и ход выполнения:
- 0x999 — пример ID; замените его реальным ID нужного окна. Индекс, ID и serial владельца — разные значения.
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()
{
int wantedId = 0x00000999;
int count = UO.GetGumpsCount();
for (int index = 0; index < count; index++)
{
if (index >= UO.GetGumpsCount())
break;
if (UO.GetGumpID(index) == wantedId)
{
UO.Print($"Gump index {index}, serial {UO.GetGumpSerial(index)}");
return index;
}
}
return -1;
return null;
}
}C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.
Параметры: gumpIndex (Any)
Результат: int / Integer.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetGumpId:bridge.GetGumpId(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Внутренний код реализации, не самостоятельный скрипт.
case "getgumpid": return new InjectionValue(bridge.GetGumpId(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetGumpInfo(object? gumpIndex);Возвращает согласованный снимок идентификаторов и элементов одного серверного гампа.
-
gumpIndex— Обязательный int — индекс активного серверного гампа, от 0 до GetGumpsCount()-1. Это не GumpID/serial. Отрицательное число и индекс вне списка недействительны. Открытие, закрытие и изменение порядка окон могут изменить индекс; перед действием проверяйте GetGumpID/GetGumpSerial.
Array — ровно пять элементов: [0] int serial; [1] int GumpID; [2] Array непустых текстов; [3] Array описаний обычных кнопок; [4] Array описаний всех живых элементов, включая вложенные. Недействительный/закрытый или игнорируемый этим скриптом гамп даёт пустой массив []. ID со старшим битом представлены отрицательным int. Пустой текстовый массив сам по себе не означает отсутствие окна.
- Работает с активными серверными гампами. Рюкзак, карта, настройки и другие локальные окна не входят в этот список. Один вызов читает данные в игровом потоке; разные вызовы могут увидеть разные состояния списка.
- Весь снимок копируется в одном запросе игрового потока. Изменения/закрытие окна после возврата не изменяют сохранённый массив.
- В описании контроля указаны тип, страница, ID, X/Y, размеры. Кнопки дополнительно содержат ButtonID, action, toPage и graphic; переключатели — ID, checked, inactive/active. Тексты могут содержать пробелы и знаки =; строку нельзя безусловно разбирать по пробелам.
- AddGumpIgnoreByID/AddGumpIgnoreBySerial скрывают результат только этого чтения в текущем скрипте; ClearGumpsIgnore снимает эти фильтры. GetGumpsCount не уменьшается.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
object? result = UO.GetGumpInfo(0);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметры и ход выполнения:
- GumpIndex=0 — первый серверный гамп. Проверка длины защищает доступ к полям отсутствующего окна.
- info[0] — serial, info[1] — GumpID; оба принадлежат одному снимку.
var info = UO.GetGumpInfo(0);
if (Truth(ArrayLength(info) == 5))
{
UO.Print("Serial=" + Hex(info[0]));
UO.Print("GumpID=" + Hex(info[1]));
}
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;Параметры и ход выполнения:
- info[3] — массив описаний кнопок; поле ButtonID в строке задаёт ID для ответа. i — только индекс строки, не ButtonID.
- Радиокнопки относятся к переключателям и присутствуют в info[4], а не в списке обычных кнопок.
return RunScenario();
object? RunScenario()
{
var info = UO.GetGumpInfo(0);
if (Truth(ArrayLength(info) == 5))
{
var buttons = info[3];
var i = 0;
while (Truth(i < ArrayLength(buttons)))
{
UO.Print(buttons[i]);
i = i + 1;
}
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- info[2] — копия текстов. Закрытие допускается только для окна без запрета NoClose.
- Закрытие не очищает сохранённые texts; пустой массив текстов допустим и у существующего окна.
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))
{
var texts = info[2];
UO.CloseSimpleGump(0);
if (Truth(ArrayLength(texts) > 0))
{
UO.Print(texts[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;
}C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.
Параметры: gumpIndex (Any)
Результат: dynamic / Array.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetGumpId:bridge.GetGumpId(index). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetGumpSerial:bridge.GetGumpSerial(index). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetGumpTextLines:bridge.GetGumpTextLines(index). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetGumpButtonsDescription:bridge.GetGumpButtonsDescription(index). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetGumpFullLines:bridge.GetGumpFullLines(index). -
InjectionScript.Runtime.InjectionApiUO.StringArray:StringArray(snapshot.Text).
Внутренний код реализации, не самостоятельный скрипт.
case "getgumpinfo":
{
int index = Arg(0);
GumpSnapshot snapshot;
if (bridge is IApiGumpAccess reader)
snapshot = reader.ReadGump(index);
else
{
int id = bridge.GetGumpId(index);
snapshot = id == 0 ? null : new GumpSnapshot(bridge.GetGumpSerial(index), id,
bridge.GetGumpTextLines(index), bridge.GetGumpButtonsDescription(index), bridge.GetGumpFullLines(index));
}
if (snapshot == null || state.IgnoredGumpIds.Contains(snapshot.Id)
|| state.IgnoredGumpSerials.Contains(snapshot.Serial))
return new InjectionValue(Array.Empty<InjectionValue>());
return new InjectionValue(new[]
{
new InjectionValue(snapshot.Serial), new InjectionValue(snapshot.Id), StringArray(snapshot.Text),
StringArray(snapshot.Buttons), StringArray(snapshot.Controls)
});
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetGumpSerial(object? gumpIndex);Читает serial экземпляра/владельца окна по индексу серверного гампа.
-
gumpIndex— Обязательный int — индекс активного серверного гампа, от 0 до GetGumpsCount()-1. Это не GumpID/serial. Отрицательное число и индекс вне списка недействительны. Открытие, закрытие и изменение порядка окон могут изменить индекс; перед действием проверяйте GetGumpID/GetGumpSerial.
int — 32-битный serial экземпляра/владельца окна. 0 — недействительный индекс (serial=0 также может присутствовать в самом окне). При установленном старшем бите int отрицателен: используйте Hex(value) для отображения. Это не type предмета и не индекс.
- Работает с активными серверными гампами. Рюкзак, карта, настройки и другие локальные окна не входят в этот список. Один вызов читает данные в игровом потоке; разные вызовы могут увидеть разные состояния списка.
- Для согласованной пары serial/GumpID используйте один GetGumpInfo: поля info[0] и info[1].
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
var result = UO.GetGumpSerial(0);
UO.Print("GetGumpSerial: " + Convert.ToString(result));Параметры и ход выполнения:
- 0 — первый индекс серверного списка. Hex сохраняет битовое представление отрицательного int.
var value = UO.GetGumpSerial(0);
UO.Print(Hex(value));
string Hex(object? value) => Convert.ToInt64(value).ToString("X");Параметры и ход выполнения:
- При неизменном списке count находится за последним индексом, поэтому missing=0. Последний допустимый индекс — count-1.
return RunScenario();
object? RunScenario()
{
var count = UO.GetGumpsCount();
var missing = UO.GetGumpSerial(count);
UO.Print(Hex(missing));
return null;
}
string Hex(object? value) => Convert.ToInt64(value).ToString("X");Параметры и ход выполнения:
- Serial принадлежит серверному окну или его владельцу по контракту команды. Его нельзя использовать вместо индекса гампа.
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()
{
int count = UO.GetGumpsCount();
for (int index = 0; index < count; index++)
{
if (index >= UO.GetGumpsCount())
break;
int serial = UO.GetGumpSerial(index);
UO.Print($"Window {index}: serial={UO.Int2Hex(serial)}, ID={UO.GetGumpID(index)}");
}
return null;
}
}C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.
Параметры: gumpIndex (Any)
Результат: int / Integer.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetGumpSerial:bridge.GetGumpSerial(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Внутренний код реализации, не самостоятельный скрипт.
case "getgumpserial": return new InjectionValue(bridge.GetGumpSerial(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetGumpShortLines(object? gumpIndex);Возвращает описания текстовых элементов и кнопок серверного гампа.
-
gumpIndex— Обязательный int — индекс активного серверного гампа, от 0 до GetGumpsCount()-1. Это не GumpID/serial. Отрицательное число и индекс вне списка недействительны. Открытие, закрытие и изменение порядка окон могут изменить индекс; перед действием проверяйте GetGumpID/GetGumpSerial.
Array — описания текстовых элементов и кнопок. [] — недействительный индекс или отсутствие подходящих элементов. Индекс строки начинается с 0; он не является ID контроля.
- Работает с активными серверными гампами. Рюкзак, карта, настройки и другие локальные окна не входят в этот список. Один вызов читает данные в игровом потоке; разные вызовы могут увидеть разные состояния списка.
- Краткий список исключает декорации без текста и без типа Button; включает радиокнопки.
- При SilentMode=0 непустой результат также добавляется в текстовое окно и открывает его. SetSilentMode(1) оставляет только возврат массива.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
object? result = UO.GetGumpShortLines(0);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметры и ход выполнения:
- 0 — индекс окна. ArrayLength проверяет наличие строки до обращения к lines[0].
var lines = UO.GetGumpShortLines(0);
if (Truth(ArrayLength(lines) > 0))
{
UO.Print(lines[0]);
}
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;Параметры и ход выполнения:
- SetSilentMode(1) отключает дополнительное текстовое окно. Явный Print в примере всё равно выводит строки.
- i — индекс массива; ID нужной кнопки/переключателя берите из соответствующего описания.
return RunScenario();
object? RunScenario()
{
UO.SetSilentMode(1);
var lines = UO.GetGumpShortLines(0);
var i = 0;
while (Truth(i < ArrayLength(lines)))
{
UO.Print(lines[i]);
i = i + 1;
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Количество преобразуется в индекс последнего окна. Данные читаются из загруженного серверного гампа; локальные окна сюда не входят.
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()
{
int count = UO.GetGumpsCount();
if (count == 0)
return null;
int index = count - 1;
var lines = UO.GetGumpShortLines(index);
foreach (object? line in (object? [])lines)
UO.Print(Convert.ToString(line) ?? "");
return null;
}
}C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.
Параметры: gumpIndex (Any)
Результат: dynamic / Array.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.GumpLinesResult:GumpLinesResult(bridge.GetGumpShortLines(Arg(0))). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetGumpShortLines:bridge.GetGumpShortLines(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Внутренний код реализации, не самостоятельный скрипт.
case "getgumpshortlines": return GumpLinesResult(bridge.GetGumpShortLines(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetGumpTextLines(object? gumpIndex);Возвращает непустые тексты меток, HTML, полей ввода и подписей переключателей серверного гампа.
-
gumpIndex— Обязательный int — индекс активного серверного гампа, от 0 до GetGumpsCount()-1. Это не GumpID/serial. Отрицательное число и индекс вне списка недействительны. Открытие, закрытие и изменение порядка окон могут изменить индекс; перед действием проверяйте GetGumpID/GetGumpSerial.
Array — непустые тексты меток, HTML, полей ввода и подписей переключателей. [] — недействительный индекс или отсутствие подходящих элементов. Индекс строки начинается с 0; он не является ID контроля.
- Работает с активными серверными гампами. Рюкзак, карта, настройки и другие локальные окна не входят в этот список. Один вызов читает данные в игровом потоке; разные вызовы могут увидеть разные состояния списка.
- Только текст; ButtonID, размеры и структура не включаются. Ничего дополнительно не печатает.
- GetGumpTextLines не открывает текстовое окно.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
object? result = UO.GetGumpTextLines(0);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметры и ход выполнения:
- 0 — индекс окна. ArrayLength проверяет наличие строки до обращения к lines[0].
var lines = UO.GetGumpTextLines(0);
if (Truth(ArrayLength(lines) > 0))
{
UO.Print(lines[0]);
}
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;Параметры и ход выполнения:
- SetSilentMode(1) отключает дополнительное текстовое окно. Явный Print в примере всё равно выводит строки.
- i — индекс массива; ID нужной кнопки/переключателя берите из соответствующего описания.
return RunScenario();
object? RunScenario()
{
UO.SetSilentMode(1);
var lines = UO.GetGumpTextLines(0);
var i = 0;
while (Truth(i < ArrayLength(lines)))
{
UO.Print(lines[i]);
i = i + 1;
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Количество преобразуется в индекс последнего окна. Данные читаются из загруженного серверного гампа; локальные окна сюда не входят.
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()
{
int count = UO.GetGumpsCount();
if (count == 0)
return null;
int index = count - 1;
var lines = UO.GetGumpTextLines(index);
foreach (object? line in (object? [])lines)
UO.Print(Convert.ToString(line) ?? "");
return null;
}
}C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.
Параметры: gumpIndex (Any)
Результат: dynamic / Array.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.StringArray:StringArray(bridge.GetGumpTextLines(Arg(0))). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetGumpTextLines:bridge.GetGumpTextLines(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Внутренний код реализации, не самостоятельный скрипт.
case "getgumptextlines": return StringArray(bridge.GetGumpTextLines(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetGumpsCount();Возвращает число активных серверных гампов.
Параметров нет.
int >= 0 — количество окон, не индекс последнего окна. 0 — список пуст.
- Работает с активными серверными гампами. Рюкзак, карта, настройки и другие локальные окна не входят в этот список. Один вызов читает данные в игровом потоке; разные вызовы могут увидеть разные состояния списка.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
var result = UO.GetGumpsCount();
UO.Print("GetGumpsCount: " + Convert.ToString(result));Параметры и ход выполнения:
- Аргументов нет. count=0 означает отсутствие серверных окон в текущем списке.
var count = UO.GetGumpsCount();
if (Truth(count == 0))
{
UO.Print("No server gumps");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- i — индекс с 0. Полученные ID идентифицируют типы окон, а не позиции в списке.
- Если окна меняются во время обхода, список нужно перечитать; count не блокирует интерфейс.
return RunScenario();
object? RunScenario()
{
var count = UO.GetGumpsCount();
var i = 0;
while (Truth(i < count))
{
UO.Print(Hex(UO.GetGumpID(i)));
i = i + 1;
}
return null;
}
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;Параметры и ход выполнения:
- count-1 — последний индекс текущего списка, не гарантия самого нового окна. info пуст, если окно исчезло до чтения.
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 count = UO.GetGumpsCount();
if (Truth(count > 0))
{
var info = UO.GetGumpInfo(count - 1);
UO.Print(ArrayLength(info));
}
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;
}C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.
Параметры: Параметров нет.
Результат: int / Integer.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetGumpCount:bridge.GetGumpCount().
Внутренний код реализации, не самостоятельный скрипт.
case "getgumpscount": return new InjectionValue(bridge.GetGumpCount());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.GumpAutoCheckBox(object? checkBoxID, object? value);Однократно задаёт значение элемента в первом подходящем серверном гампе; если элемента ещё нет, сохраняет ожидание.
-
checkBoxID— int — точный ID элемента соответствующего типа. Это не индекс, не GumpID и не serial окна; 0 является обычным ID, без подстановки первого элемента. -
value— int — 1 включить, 0 выключить. Ненулевые числовые значения также включают; рекомендуются 0/1. Выбор радиокнопки снимает выбор соседних радиокнопок её группы.
void — ничего не возвращает: ни успех, ни новое значение, ни подтверждение сервера.
- Сначала проверяет существующие окна в текущем порядке интерфейса, затем новые или обновлённые серверные разметки. Срабатывает один раз на первом совпадении типа и ID. Для конкретного окна используйте NumGump* с индексом.
- Все ожидающие поля применяются до автоматических ответов кнопками. Повтор того же типа и ID в одном скрипте заменяет ещё не выполненное значение. Лимит — 1024 ожидающих поля клиента; превышение вызывает ошибку скрипта.
- Обычное завершение процедуры сохраняет ожидание. Отмена владельца или Terminate с его именем удаляет его ожидания; TerminateAll удаляет все, включая оставшиеся после завершения процедур. Смена мира очищает очередь. Ожидания не сохраняются в профиль.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.GumpAutoCheckBox");
UO.GumpAutoCheckBox(33, 1);Параметры и ход выполнения:
- Первый параметр 33 — пример ID нужного элемента; замените его реальным ID из InfoGump. Второй — устанавливаемое значение. Если элемента нет, действие остаётся ожидающим.
UO.GumpAutoCheckBox(33, 1);Параметры и ход выполнения:
- 33 — ID элемента, 100 — пример ButtonID подтверждения, 0x40001234 — serial объекта, открывающего форму. Замените все три значения своими. Поле заполнится до ответа, даже если окно пришло позже.
return RunScenario();
object? RunScenario()
{
UO.GumpAutoCheckBox(33, 1);
UO.WaitGump(100);
UO.UseObject("0x40001234");
return null;
}Параметры и ход выполнения:
- Оба вызова используют ID 33. Если элемент ещё не появился, действует последнее значение. Если окно уже открыто, оба изменения выполняются сразу по порядку.
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.GumpAutoCheckBox(33, 1);
UO.GumpAutoCheckBox(33, 0);
return null;
}
}C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.
Параметры: checkBoxID (Any), value (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.QueueGumpControl:QueueGumpControl("checkbox", Arg(0), Text(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(1).
Внутренний код реализации, не самостоятельный скрипт.
case "gumpautocheckbox": QueueGumpControl("checkbox", Arg(0), Text(1)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.GumpAutoRadiobutton(object? radiobuttonID, object? value);Однократно задаёт значение элемента в первом подходящем серверном гампе; если элемента ещё нет, сохраняет ожидание.
-
radiobuttonID— int — точный ID элемента соответствующего типа. Это не индекс, не GumpID и не serial окна; 0 является обычным ID, без подстановки первого элемента. -
value— int — 1 включить, 0 выключить. Ненулевые числовые значения также включают; рекомендуются 0/1. Выбор радиокнопки снимает выбор соседних радиокнопок её группы.
void — ничего не возвращает: ни успех, ни новое значение, ни подтверждение сервера.
- Сначала проверяет существующие окна в текущем порядке интерфейса, затем новые или обновлённые серверные разметки. Срабатывает один раз на первом совпадении типа и ID. Для конкретного окна используйте NumGump* с индексом.
- Все ожидающие поля применяются до автоматических ответов кнопками. Повтор того же типа и ID в одном скрипте заменяет ещё не выполненное значение. Лимит — 1024 ожидающих поля клиента; превышение вызывает ошибку скрипта.
- Обычное завершение процедуры сохраняет ожидание. Отмена владельца или Terminate с его именем удаляет его ожидания; TerminateAll удаляет все, включая оставшиеся после завершения процедур. Смена мира очищает очередь. Ожидания не сохраняются в профиль.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.GumpAutoRadiobutton");
UO.GumpAutoRadiobutton(33, 1);Параметры и ход выполнения:
- Первый параметр 33 — пример ID нужного элемента; замените его реальным ID из InfoGump. Второй — устанавливаемое значение. Если элемента нет, действие остаётся ожидающим.
UO.GumpAutoRadiobutton(33, 1);Параметры и ход выполнения:
- 33 — ID элемента, 100 — пример ButtonID подтверждения, 0x40001234 — serial объекта, открывающего форму. Замените все три значения своими. Поле заполнится до ответа, даже если окно пришло позже.
return RunScenario();
object? RunScenario()
{
UO.GumpAutoRadiobutton(33, 1);
UO.WaitGump(100);
UO.UseObject("0x40001234");
return null;
}Параметры и ход выполнения:
- Оба вызова используют ID 33. Если элемент ещё не появился, действует последнее значение. Если окно уже открыто, оба изменения выполняются сразу по порядку.
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.GumpAutoRadiobutton(33, 1);
UO.GumpAutoRadiobutton(33, 0);
return null;
}
}C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.
Параметры: radiobuttonID (Any), value (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.QueueGumpControl:QueueGumpControl("radio", Arg(0), Text(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(1).
Внутренний код реализации, не самостоятельный скрипт.
case "gumpautoradiobutton": QueueGumpControl("radio", Arg(0), Text(1)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.GumpAutoTextEntry(object? textEntryID, object? value);Однократно задаёт значение элемента в первом подходящем серверном гампе; если элемента ещё нет, сохраняет ожидание.
-
textEntryID— int — точный ID элемента соответствующего типа. Это не индекс, не GumpID и не serial окна; 0 является обычным ID, без подстановки первого элемента. -
value— string — текст поля, включая пустую строку для очистки. Ограничения длины и допустимых символов самого поля сохраняются.
void — ничего не возвращает: ни успех, ни новое значение, ни подтверждение сервера.
- Сначала проверяет существующие окна в текущем порядке интерфейса, затем новые или обновлённые серверные разметки. Срабатывает один раз на первом совпадении типа и ID. Для конкретного окна используйте NumGump* с индексом.
- Все ожидающие поля применяются до автоматических ответов кнопками. Повтор того же типа и ID в одном скрипте заменяет ещё не выполненное значение. Лимит — 1024 ожидающих поля клиента; превышение вызывает ошибку скрипта.
- Обычное завершение процедуры сохраняет ожидание. Отмена владельца или Terminate с его именем удаляет его ожидания; TerminateAll удаляет все, включая оставшиеся после завершения процедур. Смена мира очищает очередь. Ожидания не сохраняются в профиль.
- Ограниченный полем текст может быть сокращён или отклонён; найденный элемент всё равно расходует одноразовое действие. Команда не отправляет ответ кнопки и не ждёт сервер. Для проверки используйте GetGumpInfo/NumGumpTextEntry.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.GumpAutoTextEntry");
UO.GumpAutoTextEntry(33, "500");Параметры и ход выполнения:
- Первый параметр 33 — пример ID нужного элемента; замените его реальным ID из InfoGump. Второй — устанавливаемое значение. Если элемента нет, действие остаётся ожидающим.
UO.GumpAutoTextEntry(33, "500");Параметры и ход выполнения:
- 33 — ID элемента, 100 — пример ButtonID подтверждения, 0x40001234 — serial объекта, открывающего форму. Замените все три значения своими. Поле заполнится до ответа, даже если окно пришло позже.
return RunScenario();
object? RunScenario()
{
UO.GumpAutoTextEntry(33, "500");
UO.WaitGump(100);
UO.UseObject("0x40001234");
return null;
}Параметры и ход выполнения:
- Оба вызова используют ID 33. Если элемент ещё не появился, действует последнее значение. Если окно уже открыто, оба изменения выполняются сразу по порядку.
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.GumpAutoTextEntry(33, "500");
UO.GumpAutoTextEntry(33, "");
return null;
}
}C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.
Параметры: textEntryID (Any), value (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.QueueGumpControl:QueueGumpControl("textentry", Arg(0), Text(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(1).
Внутренний код реализации, не самостоятельный скрипт.
case "gumpautotextentry": QueueGumpControl("textentry", Arg(0), Text(1)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GumpExists(object? id);
int UO.GumpExists(object? firstId, object? secondId);Проверяет наличие серверного гампа по одному селектору или точной паре serial/GumpID.
-
id— Одноаргументная форма: числовой serial, GumpID либо индекс с 0. -1 здесь не выбирает последний гамп. -
firstId— Двухаргументная форма: числовой 32-битный serial, включая отрицательный int со старшим битом. -
secondId— Двухаргументная форма: точный 32-битный GumpID. 0 — точное число, не wildcard. Только -1 переключает обратно на одноаргументную проверку firstId как serial/GumpID/индекса.
int — 1, если соответствующее окно существует сейчас; 0 иначе. Не возвращает индекс, serial или число совпадений.
- Работает с активными серверными гампами. Рюкзак, карта, настройки и другие локальные окна не входят в этот список. Один вызов читает данные в игровом потоке; разные вызовы могут увидеть разные состояния списка.
- Проверка не выбирает окно и не резервирует его. Пара ID проверяется целиком; ID со старшим битом не отключает фильтр.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
var result = UO.GumpExists(0x87654321);
UO.Print("GumpExists: " + Convert.ToString(result));Параметры и ход выполнения:
- 0x87654321 — искомый GumpID либо serial. Один аргумент не различает эти пространства ID.
var exists = UO.GumpExists(0x87654321);
UO.Print(Convert.ToString(exists));Параметры и ход выполнения:
- Первое число — serial, второе — GumpID. Оба отрицательны в знаковом int, но сравнение сохраняет все 32 бита.
return RunScenario();
object? RunScenario()
{
var exists = UO.GumpExists(0x87654321, 0x98765432);
if (Truth(exists))
{
UO.Print("Matching pair exists");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- info[0]/info[1] принадлежат одному снимку. exists=1 означает наличие пары сейчас; повторно открытое окно с той же парой не отличается от прежнего.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var info = UO.GetGumpInfo(0);
if (Truth(ArrayLength(info) == 5))
{
var exists = UO.GumpExists(info[0], info[1]);
UO.Print(Convert.ToString(exists));
}
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;
}C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.
Параметры: id (Any)
Результат: int / Integer.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.GumpExists. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GumpExists:bridge.GumpExists(NumberConversions.ToInt(id), -1). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(id).
Внутренний код реализации, не самостоятельный скрипт.
public int GumpExists(InjectionValue id) => bridge.GumpExists(NumberConversions.ToInt(id), -1);Параметры: firstId (Any), secondId (Any)
Результат: int / Integer.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.GumpExists. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GumpExists:bridge.GumpExists(NumberConversions.ToInt(firstId), NumberConversions.ToInt(secondId)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(firstId).
Внутренний код реализации, не самостоятельный скрипт.
public int GumpExists(InjectionValue firstId, InjectionValue secondId)
=> bridge.GumpExists(NumberConversions.ToInt(firstId), NumberConversions.ToInt(secondId));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.GumpObject(object? gumpId);Выбирает существующий серверный gump для последующих обращений.
-
gumpId— int: сначала сопоставляется LocalSerial или ServerSerial, затем нулевой индекс в текущем списке gumps. Это не ID кнопки.
void — значения нет. Вызывайте отдельной строкой; завершение не подтверждает действие сервера.
- Bridge.SelectGump сохраняет _selectedServerGump. Если serial не совпал, принимает индекс 0..count-1. Не найден — выбранный gump становится null и выводится сообщение.
- Gump не открывается и ответ серверу не посылается. Индексы меняются при открытии/закрытии окон; для stable выбора используйте актуальный serial/id.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.GumpObject");
UO.GumpObject(0);Параметры и ход выполнения:
- Выбирает существующий серверный gump для последующих обращений.
if (Truth(UO.GumpExists(0)))
{
UO.GumpObject(0);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Bridge.SelectGump сохраняет _selectedServerGump. Если serial не совпал, принимает индекс 0..count-1. Не найден — выбранный gump становится null и выводится сообщение.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.GetGumpsCount() > 0))
{
var serial = UO.GetGumpSerial(0);
UO.GumpObject(serial);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Gump не открывается и ответ серверу не посылается. Индексы меняются при открытии/закрытии окон; для stable выбора используйте актуальный serial/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()
{
if (Truth(UO.GetGumpsCount() > 0))
{
UO.GumpObject(0);
UO.Print(UO.LastGump("gumpid"));
}
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.
Параметры: gumpId (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SelectGump:bridge.SelectGump(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0).
Внутренний код реализации, не самостоятельный скрипт.
case "gumpobject": bridge.SelectGump(Arg(0)); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsGump();Проверяет, есть ли хотя бы один активный серверный гамп.
Параметров нет.
int — 1, если список непуст; 0, если пуст. Это признак наличия, не число окон.
- Работает с активными серверными гампами. Рюкзак, карта, настройки и другие локальные окна не входят в этот список. Один вызов читает данные в игровом потоке; разные вызовы могут увидеть разные состояния списка.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
var result = UO.IsGump();
UO.Print("IsGump: " + Convert.ToString(result));Параметры и ход выполнения:
- Аргументов нет. GetGumpInfo(0) читает первый элемент и может вернуть пустой массив, если окно уже закрыли.
if (Truth(UO.IsGump()))
{
var info = UO.GetGumpInfo(0);
UO.Print(ArrayLength(info));
}
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;Параметры и ход выполнения:
- При трёх стабильных окнах present=1, count=3.
return RunScenario();
object? RunScenario()
{
var present = UO.IsGump();
var count = UO.GetGumpsCount();
UO.Print(Convert.ToString(present) + "/" + Convert.ToString(count));
return null;
}Параметры и ход выполнения:
- Ожидание не дольше примерно 3000 мс, проверка каждые 50 мс. Финальный present показывает состояние после ожидания.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var started = Now();
while (Truth(UO.IsGump() == 0) && Truth(Now() - started < 3000))
{
await Delay(50);
}
var present = UO.IsGump();
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
private int Now() => global::ClassicUO.CSharp.CSharpScriptContext.Current.Now();
}C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.
Параметры: Параметров нет.
Результат: int / Integer.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetGumpCount:bridge.GetGumpCount().
Внутренний код реализации, не самостоятельный скрипт.
case "isgump": return new InjectionValue(bridge.GetGumpCount() > 0 ? 1 : 0);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsGumpCanBeClosed(object? gumpIndex);Проверяет, разрешено ли локальное закрытие серверного гампа правой кнопкой.
-
gumpIndex— Обязательный int — индекс активного серверного гампа, от 0 до GetGumpsCount()-1. Это не GumpID/serial. Отрицательное число и индекс вне списка недействительны. Открытие, закрытие и изменение порядка окон могут изменить индекс; перед действием проверяйте GetGumpID/GetGumpSerial.
int — 1, если окно существует и CanCloseWithRightClick включён; иначе 0. Это не результат закрытия и не наличие кнопки Cancel.
- Работает с активными серверными гампами. Рюкзак, карта, настройки и другие локальные окна не входят в этот список. Один вызов читает данные в игровом потоке; разные вызовы могут увидеть разные состояния списка.
- NoClose запрещает CloseSimpleGump; возможность отправить серверу ButtonID — отдельное действие.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
var result = UO.IsGumpCanBeClosed(0);
UO.Print("IsGumpCanBeClosed: " + Convert.ToString(result));Параметры и ход выполнения:
- 0 — индекс окна. Проверка и закрытие — разные вызовы; индекс может измениться между ними.
if (Truth(UO.IsGumpCanBeClosed(0)))
{
UO.CloseSimpleGump(0);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- closable=0 у существующего окна означает запрет закрытия, а не отсутствие окна.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.GetGumpsCount() > 0))
{
var closable = UO.IsGumpCanBeClosed(0);
UO.Print(Convert.ToString(closable));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- -1 недействителен для этой индексной команды и даёт 0; это не выбор последнего окна.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var result = UO.IsGumpCanBeClosed(-1);
UO.Print(Convert.ToString(result));
return null;
}
}C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.
Параметры: gumpIndex (Any)
Результат: int / Integer.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsGumpCanBeClosed:bridge.IsGumpCanBeClosed(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Внутренний код реализации, не самостоятельный скрипт.
case "isgumpcanbeclosed": return new InjectionValue(bridge.IsGumpCanBeClosed(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LastGump(object? identifier);
dynamic UO.LastGump(object? identifier, object? key);Читает одно поле выбранного серверного гампа. Использует выбранное этим скриптом окно или последний элемент текущего списка.
-
identifier— string без учёта регистра. Все поддерживаемые значения и типы результатов перечислены в разделе «Возвращает». Неизвестное имя возвращает пустую строку. -
key— Необязательный int, по умолчанию -1. Индекс с 0 для button/text/object/command; это не ID контроля. Отрицательный индекс и выход за границу дают 0 для button или пустую строку для текстовых полей. Остальные identifier не используют key.
Тип результата зависит от identifier. int: buttonlen — число обычных кнопок; button — ButtonID по индексу key; textlen — число доступных текстовых элементов; injid — текущий индекс окна; replyed — 0 (история ответов не хранится); inclient — 1 для найденного живого окна, 0 при отсутствии; objectcount — число живых контролов, включая вложенные. string: serial и gumpid — hex-строки 0xXXXXXXXX; text — текст элемента по индексу key; object — имя типа контрола; command — описание контрола (тип, page, ID, координаты, размеры и поддерживаемые поля). При отсутствии окна числовые identifier дают 0, строковые — пустую строку. injid=0 также является допустимым первым индексом: сам по себе 0 не доказывает отсутствие окна. Это не Array и не Pascal TGumpInfo.
- Работает с активными серверными гампами. Рюкзак, карта, настройки и другие локальные окна не входят в этот список. Один вызов читает данные в игровом потоке; разные вызовы могут увидеть разные состояния списка.
- SelectGump/InfoGump задают выбранное окно только в текущем runtime. Если выбранное окно закрыто, используется последний элемент текущего списка, который не обязательно является самым новым по времени.
- textlen/text относятся к доступным текстовым контролам, а не исходному пулу строк серверного пакета. object/command относятся ко всему дереву живых контролов. Индексы разных списков нельзя смешивать.
- Каждый вызов читает текущее состояние отдельно. Для согласованных serial, GumpID и списков используйте GetGumpInfo.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
object? result = UO.LastGump("gumpid");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметры и ход выполнения:
- gumpid и serial возвращают строки, уже оформленные в hex; дополнительный Hex не нужен. Пустые строки означают отсутствие окна при чтении.
var id = UO.LastGump("gumpid");
var serial = UO.LastGump("serial");
UO.Print(id + " / " + serial);Параметры и ход выполнения:
- buttonlen — количество кнопок; i — индекс строки от 0 до count-1. button — ID для ответа, не графика и не индекс. При изменении окон перечитайте список.
return RunScenario();
object? RunScenario()
{
var count = UO.LastGump("buttonlen");
var i = 0;
while (Truth(i < count))
{
var button = UO.LastGump("button", i);
UO.Print(Convert.ToString(button));
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;Параметры и ход выполнения:
- 0x12345678 — пример GumpID/serial, замените ID нужной формы. text с key=0 читает первый доступный текстовый контроль; это другой список, чем button.
- SelectGump сообщает об отсутствии указанного окна, но не блокирует последующее чтение: при необходимости отдельно проверяйте возвращённый 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()
{
UO.SelectGump(0x12345678);
if (Truth(UO.LastGump("inclient")))
{
var count = UO.LastGump("textlen");
if (Truth(count > 0))
{
UO.Print(UO.LastGump("text", 0));
}
}
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.
Параметры: identifier (String)
Результат: dynamic / Any.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.LastGump. -
InjectionScript.Runtime.InjectionApiUO.LastGump:LastGump(identifier, -1).
Внутренний код реализации, не самостоятельный скрипт.
public InjectionValue LastGump(string identifier) => LastGump(identifier, -1);Параметры: identifier (String), key (Integer)
Результат: dynamic / Any.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.LastGump. -
InjectionScript.Runtime.InjectionApiUO.ConvertGumpValue:ConvertGumpValue(identifier, bridge.GetGumpValue(-1, identifier, key)). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetGumpValue:bridge.GetGumpValue(-1, identifier, key).
Внутренний код реализации, не самостоятельный скрипт.
public InjectionValue LastGump(string identifier, int key) => ConvertGumpValue(identifier, bridge.GetGumpValue(-1, identifier, key));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.NumGumpButton(object? gumpIndex, object? value);Активирует существующую кнопку серверного гампа по строгому индексу окна и точному ButtonID.
-
gumpIndex— Обязательный int — индекс активного серверного гампа, от 0 до GetGumpsCount()-1. Это не GumpID/serial. Отрицательное число и индекс вне списка недействительны. Открытие, закрытие и изменение порядка окон могут изменить индекс; перед действием проверяйте GetGumpID/GetGumpSerial. -
value— int — ButtonID из описания обычной кнопки. Не номер строки, не graphic кнопки, не GumpID.
int (bool) — 1, если окно и кнопка найдены и локальное действие выполнено; 0, если нет окна/кнопки. Смена страницы тоже возвращает 1. Это не подтверждение обработки сервером.
Результат команды — числовой флаг: 1 означает выполненное условие, 0 — невыполненное. После var result = команда(...) проверяйте if (result != 0) или if (result == 0). Сохраните результат одного вызова: повторный вызов может выполнить действие снова либо прочитать уже изменившееся состояние.
- Работает с активными серверными гампами. Рюкзак, карта, настройки и другие локальные окна не входят в этот список. Один вызов читает данные в игровом потоке; разные вызовы могут увидеть разные состояния списка.
- Кнопка SwitchPage переключает страницу локально. Кнопка Activate вызывает ответ гампа; окно обычно закрывается. В отличие от SendGumpSelect, эта команда требует существующий ButtonID в дереве контролов.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
var result = UO.NumGumpButton(0, 77);
UO.Print("NumGumpButton: " + Convert.ToString(result));Параметры и ход выполнения:
- 0 — индекс окна, 77 — пример ButtonID из инспектора. Для вашей формы нужен её реальный ID.
var ok = UO.NumGumpButton(0, 77);
if (Truth(ok == 0))
{
UO.Print("Button not found");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- 0x12345678 — ожидаемый GumpID, 100 — ButtonID. Эти два числа относятся к разным пространствам ID.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.GetGumpID(0) == 0x12345678))
{
var ok = UO.NumGumpButton(0, 100);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- 33 — ID флажка, 1 — включить, 100 — ID кнопки. Состояние флажка попадёт в ответ только для кнопки Activate.
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.NumGumpCheckBox(0, 33, 1)))
{
var ok = UO.NumGumpButton(0, 100);
}
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.
Параметры: gumpIndex (Any), value (Any)
Результат: int / Integer.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ActivateGumpButton:bridge.ActivateGumpButton(Arg(0), Arg(1)).
Внутренний код реализации, не самостоятельный скрипт.
case "numgumpbutton": return (bridge is IApiGumpAccess buttons
? buttons.ActivateGumpButtonAtIndex(Arg(0), Arg(1)) : bridge.ActivateGumpButton(Arg(0), Arg(1))) != 0 ? InjectionValue.True : InjectionValue.False;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.NumGumpCheckBox(object? gumpIndex, object? cbid, object? value);Устанавливает состояние флажка в серверном гампе по индексу.
-
gumpIndex— Обязательный int — индекс активного серверного гампа, от 0 до GetGumpsCount()-1. Это не GumpID/serial. Отрицательное число и индекс вне списка недействительны. Открытие, закрытие и изменение порядка окон могут изменить индекс; перед действием проверяйте GetGumpID/GetGumpSerial. -
cbid— int — точный ID элемента из описания гампа. Это не порядковый номер элемента; отсутствующий ID не заменяется индексом. -
value— int — 1 включить/выбрать, 0 выключить. Также распознаются числовые ненулевые значения, true и checked. Рекомендуются 0 и 1.
int (bool) — 1, если нужный элемент найден и его итоговое значение соответствует заданному; 0 при недействительном индексе, отсутствии ID/типа элемента или если поле не приняло точное значение. Повторная установка уже заданного значения также успешна.
Результат команды — числовой флаг: 1 означает выполненное условие, 0 — невыполненное. После var result = команда(...) проверяйте if (result != 0) или if (result == 0). Сохраните результат одного вызова: повторный вызов может выполнить действие снова либо прочитать уже изменившееся состояние.
- Работает с активными серверными гампами. Рюкзак, карта, настройки и другие локальные окна не входят в этот список. Один вызов читает данные в игровом потоке; разные вызовы могут увидеть разные состояния списка.
- Меняет локальное состояние. Поля и отмеченные переключатели отправляются с последующим ответом кнопки.
- Выбор радиокнопки снимает выбор соседней радиокнопки той же группы; обычные флажки независимы.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
var result = UO.NumGumpCheckBox(0, 33, 1);
UO.Print("NumGumpCheckBox: " + Convert.ToString(result));Параметры и ход выполнения:
- 0 — индекс окна; 33 — точный CBID; 1 — новое значение. Замените 33 ID из своего гампа.
var ok = UO.NumGumpCheckBox(0, 33, 1);
if (Truth(ok == 0))
{
UO.Print("Control missing or value rejected");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- 0 очищает поле или снимает отметку. Возвращается успех изменения, а не новое значение поля.
return RunScenario();
object? RunScenario()
{
var ok = UO.NumGumpCheckBox(0, 33, 0);
UO.Print(Convert.ToString(ok));
return null;
}Параметры и ход выполнения:
- 100 — пример серверного ButtonID подтверждения; его нужно заменить ID вашего окна. 0 в SendGumpSelect(0,100) — индекс окна.
- Ответ может закрыть гамп и изменить индексы. sent означает локальную отправку, не подтверждённый сервером результат операции.
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.NumGumpCheckBox(0, 33, 1)))
{
var sent = UO.SendGumpSelect(0, 100);
UO.Print(Convert.ToString(sent));
}
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.
Параметры: gumpIndex (Any), cbid (Any), value (Any)
Результат: int / Integer.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.SetIndexedGumpValue:SetIndexedGumpValue(Arg(0), "checkbox", Arg(1), Text(2)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(2).
Внутренний код реализации, не самостоятельный скрипт.
case "numgumpcheckbox": return SetIndexedGumpValue(Arg(0), "checkbox", Arg(1), Text(2));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.NumGumpRadiobutton(object? gumpIndex, object? radiobuttonID, object? value);Устанавливает состояние радиокнопки в серверном гампе по индексу.
-
gumpIndex— Обязательный int — индекс активного серверного гампа, от 0 до GetGumpsCount()-1. Это не GumpID/serial. Отрицательное число и индекс вне списка недействительны. Открытие, закрытие и изменение порядка окон могут изменить индекс; перед действием проверяйте GetGumpID/GetGumpSerial. -
radiobuttonID— int — точный ID элемента из описания гампа. Это не порядковый номер элемента; отсутствующий ID не заменяется индексом. -
value— int — 1 включить/выбрать, 0 выключить. Также распознаются числовые ненулевые значения, true и checked. Рекомендуются 0 и 1.
int (bool) — 1, если нужный элемент найден и его итоговое значение соответствует заданному; 0 при недействительном индексе, отсутствии ID/типа элемента или если поле не приняло точное значение. Повторная установка уже заданного значения также успешна.
Результат команды — числовой флаг: 1 означает выполненное условие, 0 — невыполненное. После var result = команда(...) проверяйте if (result != 0) или if (result == 0). Сохраните результат одного вызова: повторный вызов может выполнить действие снова либо прочитать уже изменившееся состояние.
- Работает с активными серверными гампами. Рюкзак, карта, настройки и другие локальные окна не входят в этот список. Один вызов читает данные в игровом потоке; разные вызовы могут увидеть разные состояния списка.
- Меняет локальное состояние. Поля и отмеченные переключатели отправляются с последующим ответом кнопки.
- Выбор радиокнопки снимает выбор соседней радиокнопки той же группы; обычные флажки независимы.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
var result = UO.NumGumpRadiobutton(0, 33, 1);
UO.Print("NumGumpRadiobutton: " + Convert.ToString(result));Параметры и ход выполнения:
- 0 — индекс окна; 33 — точный RadiobuttonID; 1 — новое значение. Замените 33 ID из своего гампа.
var ok = UO.NumGumpRadiobutton(0, 33, 1);
if (Truth(ok == 0))
{
UO.Print("Control missing or value rejected");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- 0 очищает поле или снимает отметку. Возвращается успех изменения, а не новое значение поля.
return RunScenario();
object? RunScenario()
{
var ok = UO.NumGumpRadiobutton(0, 33, 0);
UO.Print(Convert.ToString(ok));
return null;
}Параметры и ход выполнения:
- 100 — пример серверного ButtonID подтверждения; его нужно заменить ID вашего окна. 0 в SendGumpSelect(0,100) — индекс окна.
- Ответ может закрыть гамп и изменить индексы. sent означает локальную отправку, не подтверждённый сервером результат операции.
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.NumGumpRadiobutton(0, 33, 1)))
{
var sent = UO.SendGumpSelect(0, 100);
UO.Print(Convert.ToString(sent));
}
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.
Параметры: gumpIndex (Any), radiobuttonID (Any), value (Any)
Результат: int / Integer.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.SetIndexedGumpValue:SetIndexedGumpValue(Arg(0), "radio", Arg(1), Text(2)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(2).
Внутренний код реализации, не самостоятельный скрипт.
case "numgumpradiobutton": return SetIndexedGumpValue(Arg(0), "radio", Arg(1), Text(2));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.NumGumpTextEntry(object? gumpIndex, object? textEntryID, object? value);Устанавливает текст поля ввода в серверном гампе по индексу.
-
gumpIndex— Обязательный int — индекс активного серверного гампа, от 0 до GetGumpsCount()-1. Это не GumpID/serial. Отрицательное число и индекс вне списка недействительны. Открытие, закрытие и изменение порядка окон могут изменить индекс; перед действием проверяйте GetGumpID/GetGumpSerial. -
textEntryID— int — точный ID элемента из описания гампа. Это не порядковый номер элемента; отсутствующий ID не заменяется индексом. -
value— string — новый текст. Пустая строка очищает поле; ограничения длины/символов самого поля сохраняются.
int (bool) — 1, если нужный элемент найден и его итоговое значение соответствует заданному; 0 при недействительном индексе, отсутствии ID/типа элемента или если поле не приняло точное значение. Повторная установка уже заданного значения также успешна.
Результат команды — числовой флаг: 1 означает выполненное условие, 0 — невыполненное. После var result = команда(...) проверяйте if (result != 0) или if (result == 0). Сохраните результат одного вызова: повторный вызов может выполнить действие снова либо прочитать уже изменившееся состояние.
- Работает с активными серверными гампами. Рюкзак, карта, настройки и другие локальные окна не входят в этот список. Один вызов читает данные в игровом потоке; разные вызовы могут увидеть разные состояния списка.
- Меняет локальное состояние. Поля и отмеченные переключатели отправляются с последующим ответом кнопки.
- Выбор радиокнопки снимает выбор соседней радиокнопки той же группы; обычные флажки независимы.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
var result = UO.NumGumpTextEntry(0, 33, "500");
UO.Print("NumGumpTextEntry: " + Convert.ToString(result));Параметры и ход выполнения:
- 0 — индекс окна; 33 — точный TextEntryID; '500' — новое значение. Замените 33 ID из своего гампа.
var ok = UO.NumGumpTextEntry(0, 33, "500");
if (Truth(ok == 0))
{
UO.Print("Control missing or value rejected");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- '' очищает поле или снимает отметку. Возвращается успех изменения, а не новое значение поля.
return RunScenario();
object? RunScenario()
{
var ok = UO.NumGumpTextEntry(0, 33, "");
UO.Print(Convert.ToString(ok));
return null;
}Параметры и ход выполнения:
- 100 — пример серверного ButtonID подтверждения; его нужно заменить ID вашего окна. 0 в SendGumpSelect(0,100) — индекс окна.
- Ответ может закрыть гамп и изменить индексы. sent означает локальную отправку, не подтверждённый сервером результат операции.
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.NumGumpTextEntry(0, 33, "500")))
{
var sent = UO.SendGumpSelect(0, 100);
UO.Print(Convert.ToString(sent));
}
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.
Параметры: gumpIndex (Any), textEntryID (Any), value (Any)
Результат: int / Integer.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.SetIndexedGumpValue:SetIndexedGumpValue(Arg(0), "textentry", Arg(1), Text(2)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(2).
Внутренний код реализации, не самостоятельный скрипт.
case "numgumptextentry": return SetIndexedGumpValue(Arg(0), "textentry", Arg(1), Text(2));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SelectGump(object? id);Выбирает существующий серверный gump для последующих обращений.
-
id— int: сначала сопоставляется LocalSerial или ServerSerial, затем нулевой индекс в текущем списке gumps. Это не ID кнопки.
void — значения нет. Вызывайте отдельной строкой; завершение не подтверждает действие сервера.
- Bridge.SelectGump сохраняет _selectedServerGump. Если serial не совпал, принимает индекс 0..count-1. Не найден — выбранный gump становится null и выводится сообщение.
- Gump не открывается и ответ серверу не посылается. Индексы меняются при открытии/закрытии окон; для stable выбора используйте актуальный serial/id.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.SelectGump");
UO.SelectGump(0);Параметры и ход выполнения:
- Выбирает существующий серверный gump для последующих обращений.
if (Truth(UO.GumpExists(0)))
{
UO.SelectGump(0);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Bridge.SelectGump сохраняет _selectedServerGump. Если serial не совпал, принимает индекс 0..count-1. Не найден — выбранный gump становится null и выводится сообщение.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.GetGumpsCount() > 0))
{
var serial = UO.GetGumpSerial(0);
UO.SelectGump(serial);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Gump не открывается и ответ серверу не посылается. Индексы меняются при открытии/закрытии окон; для stable выбора используйте актуальный serial/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()
{
if (Truth(UO.GetGumpsCount() > 0))
{
UO.SelectGump(0);
UO.Print(UO.LastGump("gumpid"));
}
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.
Параметры: id (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.SelectGump. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SelectGump:bridge.SelectGump(NumberConversions.ToInt(id)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(id).
Внутренний код реализации, не самостоятельный скрипт.
public void SelectGump(InjectionValue id) => bridge.SelectGump(NumberConversions.ToInt(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.SendGumpSelect(object? triggerId);
int UO.SendGumpSelect(object? gumpIndex, object? triggerId);
int UO.SendGumpSelect(object? serial, object? gumpId, object? triggerId);
int UO.SendGumpSelect(object? serial, object? gumpId, object? triggerId, object? timeout);Отправляет ButtonID для выбранного серверного гампа.
-
triggerId— int или числовая строка — серверный ButtonID. 0 обычно означает закрытие/отказ, но точное действие определяет сервер. Наличие видимого ButtonID в дереве не требуется. -
gumpIndex— Обязательный int — индекс активного серверного гампа, от 0 до GetGumpsCount()-1. Это не GumpID/serial. Отрицательное число и индекс вне списка недействительны. Открытие, закрытие и изменение порядка окон могут изменить индекс; перед действием проверяйте GetGumpID/GetGumpSerial. Используется только в двухаргументной форме (gumpIndex, triggerId). -
serial— В формах из 3/4 аргументов — числовой 32-битный serial. 0 или -1 отключают фильтр serial; остальные числа, включая отрицательные со старшим битом, сравниваются точно. -
gumpId— В формах из 3/4 аргументов — числовой 32-битный GumpID. 0 или -1 отключают фильтр GumpID. Hex-строки разрешены; имена AddObject здесь не разрешаются. -
timeout— Необязательный четвёртый аргумент, int миллисекунд ожидания подходящей пары ID. По умолчанию 0 — одна немедленная попытка; отрицательное ограничивается 0. Интервал повторной проверки 20 мс.
int — 1, если найден живой серверный гамп и выполнен вызов ответа; 0, если окно не найдено до истечения ожидания. Не возвращает выбранный ID и не ждёт подтверждения результата сервером.
- Работает с активными серверными гампами. Рюкзак, карта, настройки и другие локальные окна не входят в этот список. Один вызов читает данные в игровом потоке; разные вызовы могут увидеть разные состояния списка.
- Один аргумент выбирает ранее выбранный этим скриптом гамп; если он закрыт/не выбран — последний элемент текущего списка. Два аргумента задают строгий индекс. Три/четыре — пару ID с фильтрами.
- Выбор и вызов ответа происходят в одном запросе игрового потока. Ожидание отменяется остановкой процедуры. Не путайте прямой серверный ответ со сменой страницы: для кнопки SwitchPage нужен NumGumpButton.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
var result = UO.SendGumpSelect(100);
UO.Print("SendGumpSelect: " + Convert.ToString(result));Параметры и ход выполнения:
- SelectGump выбирает тип/serial 0x12345678 либо сообщает об отсутствии; 100 — ButtonID.
- Если выбранного окна уже нет, одноаргументная форма использует последнее доступное окно. Для строгой идентичности применяйте форму с двумя ID.
UO.SelectGump(0x12345678);
var sent = UO.SendGumpSelect(100);
UO.Print(Convert.ToString(sent));Параметры и ход выполнения:
- 0 — индекс, 100 — ButtonID. Это не serial=0 и не GumpID=100.
return RunScenario();
object? RunScenario()
{
var sent = UO.SendGumpSelect(0, 100);
if (Truth(sent == 0))
{
UO.Print("No gump at index zero");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- info[0] — serial, info[1] — GumpID, 100 — ButtonID. Изменение индекса не перенаправит ответ другому типу/владельцу.
- Serial/GumpID со значениями 0/-1 являются фильтрами без ограничения; одинаковые пары не различают повторно открытые экземпляры.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var info = UO.GetGumpInfo(0);
if (Truth(ArrayLength(info) == 5))
{
var sent = UO.SendGumpSelect(info[0], info[1], 100);
}
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;
}Параметры и ход выполнения:
- 0 отключает фильтр serial; 0x87654321 — точный ID со старшим битом; 100 — кнопка; 2000 — максимум ожидания в мс. Не используется как безусловный wildcard.
var sent = UO.SendGumpSelect(0, 0x87654321, 100, 2000);
UO.Print(Convert.ToString(sent));C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.
Параметры: triggerId (Integer/String)
Результат: int / Integer.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.SendGumpSelect. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SendGumpSelect:bridge.SendGumpSelect(triggerId).
Внутренний код реализации, не самостоятельный скрипт.
public int SendGumpSelect(int triggerId) => bridge.SendGumpSelect(triggerId);Параметры: triggerId (Integer/String)
Результат: int / Integer.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.SendGumpSelect. -
InjectionScript.Runtime.InjectionApiUO.SendGumpSelect:SendGumpSelect(NumberConversions.ToInt(triggerId)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(triggerId).
Внутренний код реализации, не самостоятельный скрипт.
public int SendGumpSelect(string triggerId) => SendGumpSelect(NumberConversions.ToInt(triggerId));Параметры: gumpIndex (Any), triggerId (Any)
Результат: int / Integer.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.SendGumpSelect. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SendGumpSelect:bridge.SendGumpSelect(NumberConversions.ToInt(gumpIndex), NumberConversions.ToInt(triggerId)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(gumpIndex).
Внутренний код реализации, не самостоятельный скрипт.
public int SendGumpSelect(InjectionValue gumpIndex, InjectionValue triggerId)
=> bridge.SendGumpSelect(NumberConversions.ToInt(gumpIndex), NumberConversions.ToInt(triggerId));Параметры: serial (Any), gumpId (Any), triggerId (Any)
Результат: int / Integer.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.SendGumpSelect. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SendGumpSelect:bridge.SendGumpSelect(NumberConversions.ToInt(serial), NumberConversions.ToInt(gumpId), NumberConversions.ToInt(triggerId)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(serial).
Внутренний код реализации, не самостоятельный скрипт.
public int SendGumpSelect(InjectionValue serial, InjectionValue gumpId, InjectionValue triggerId)
=> bridge.SendGumpSelect(NumberConversions.ToInt(serial), NumberConversions.ToInt(gumpId), NumberConversions.ToInt(triggerId));Параметры: serial (Any), gumpId (Any), triggerId (Any), timeout (Any)
Результат: int / Integer.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.SendGumpSelect. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SendGumpSelect:bridge.SendGumpSelect(NumberConversions.ToInt(serial), NumberConversions.ToInt(gumpId), NumberConversions.ToInt(triggerId), Math.Max(0, NumberConversions.ToInt(timeout))). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(serial).
Внутренний код реализации, не самостоятельный скрипт.
public int SendGumpSelect(InjectionValue serial, InjectionValue gumpId, InjectionValue triggerId, InjectionValue timeout)
=> bridge.SendGumpSelect(NumberConversions.ToInt(serial), NumberConversions.ToInt(gumpId),
NumberConversions.ToInt(triggerId), Math.Max(0, NumberConversions.ToInt(timeout)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetGump(object? identifier, object? key, object? stateValue);
void UO.SetGump(object? gumpId, object? identifier, object? key, object? stateValue);Меняет поле существующего серверного gump.
-
gumpId— Только форма с четырьмя аргументами: serial/id либо нулевой индекс gump. Форма с тремя использует -1 — выбранный/последний gump. -
identifier— Строка "checkbox", "radio" либо "textentry", регистр не важен. Неподдерживаемое имя не меняет поле. -
key— int: сначала LocalSerial/ID элемента, затем нулевой индекс среди элементов указанного вида. Нет элемента — сообщение об ошибке. -
stateValue— Для checkbox/radio: "checked", "true" без учёта регистра либо ненулевой распознанный int включает; другое выключает. Для textentry — весь текст через ToString.
void — значения нет. Вызывайте отдельной строкой; завершение не подтверждает действие сервера.
- SetGumpValue вызывает TrySetGumpValue; при 0 выводит сообщение. Меняет локальное поле уже существующего gump и не регистрирует hook ожидания нового окна.
- Изменение checkbox/textentry не отправляет ответ серверу само по себе. Для ответа выбирайте кнопку через SendGumpSelect/WaitGump; радиокнопки обрабатываются отдельным видом.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.SetGump");
UO.SetGump("checkbox", 0, 1);Параметры и ход выполнения:
- Меняет поле существующего серверного gump.
if (Truth(UO.GetGumpsCount() > 0))
{
UO.SetGump("checkbox", 0, 1);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- SetGumpValue вызывает TrySetGumpValue; при 0 выводит сообщение. Меняет локальное поле уже существующего gump и не регистрирует hook ожидания нового окна.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.GetGumpsCount() > 0))
{
UO.SetGump(0, "textentry", 0, "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;Параметры и ход выполнения:
- Изменение checkbox/textentry не отправляет ответ серверу само по себе. Для ответа выбирайте кнопку через SendGumpSelect/WaitGump; радиокнопки обрабатываются отдельным видом.
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.GetGumpsCount() > 0))
{
UO.SetGump("radio", 0, "true");
UO.SetGump("checkbox", 0, 0);
}
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.
Параметры: identifier (Any), key (Any), stateValue (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.SetGump. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetGumpValue:bridge.SetGumpValue(-1, identifier.ToString(), NumberConversions.ToInt(key), stateValue.ToString()). -
InjectionScript.Runtime.InjectionValue.ToString:identifier.ToString(). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(key).
Внутренний код реализации, не самостоятельный скрипт.
public void SetGump(InjectionValue identifier, InjectionValue key, InjectionValue stateValue)
=> bridge.SetGumpValue(-1, identifier.ToString(), NumberConversions.ToInt(key), stateValue.ToString());Параметры: gumpId (Any), identifier (Any), key (Any), stateValue (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.SetGump. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetGumpValue:bridge.SetGumpValue(NumberConversions.ToInt(gumpId), identifier.ToString(), NumberConversions.ToInt(key), stateValue.ToString()). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(gumpId). -
InjectionScript.Runtime.InjectionValue.ToString:identifier.ToString().
Внутренний код реализации, не самостоятельный скрипт.
public void SetGump(InjectionValue gumpId, InjectionValue identifier, InjectionValue key, InjectionValue stateValue)
=> bridge.SetGumpValue(NumberConversions.ToInt(gumpId), identifier.ToString(), NumberConversions.ToInt(key), stateValue.ToString());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.WaitGump(object? value);
void UO.WaitGump(object? trigger1, object? trigger2);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7, object? trigger8);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7, object? trigger8, object? trigger9);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7, object? trigger8, object? trigger9, object? trigger10);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7, object? trigger8, object? trigger9, object? trigger10, object? trigger11);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7, object? trigger8, object? trigger9, object? trigger10, object? trigger11, object? trigger12);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7, object? trigger8, object? trigger9, object? trigger10, object? trigger11, object? trigger12, object? trigger13);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7, object? trigger8, object? trigger9, object? trigger10, object? trigger11, object? trigger12, object? trigger13, object? trigger14);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7, object? trigger8, object? trigger9, object? trigger10, object? trigger11, object? trigger12, object? trigger13, object? trigger14, object? trigger15);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7, object? trigger8, object? trigger9, object? trigger10, object? trigger11, object? trigger12, object? trigger13, object? trigger14, object? trigger15, object? trigger16);Регистрирует последовательность одноразовых ответов на кнопки. Скрипт продолжает работу сразу; отсутствие окна не вызывает 30-секундную задержку.
-
value— Элемент последовательности: int ButtonID, числовая string, строка с |/запятой или Array таких элементов. Порядок — слева направо. Применяются общие границы и правила triggerId. Value — имя единственного параметра формы object?, также принимающей массив. -
trigger1— Элемент последовательности: int ButtonID, числовая string, строка с |/запятой или Array таких элементов. Порядок — слева направо. Применяются общие границы и правила triggerId. Value — имя единственного параметра формы object?, также принимающей массив. -
trigger2— Элемент последовательности: int ButtonID, числовая string, строка с |/запятой или Array таких элементов. Порядок — слева направо. Применяются общие границы и правила triggerId. Value — имя единственного параметра формы object?, также принимающей массив. -
trigger3— Элемент последовательности: int ButtonID, числовая string, строка с |/запятой или Array таких элементов. Порядок — слева направо. Применяются общие границы и правила triggerId. Value — имя единственного параметра формы object?, также принимающей массив. -
trigger4— Элемент последовательности: int ButtonID, числовая string, строка с |/запятой или Array таких элементов. Порядок — слева направо. Применяются общие границы и правила triggerId. Value — имя единственного параметра формы object?, также принимающей массив. -
trigger5— Элемент последовательности: int ButtonID, числовая string, строка с |/запятой или Array таких элементов. Порядок — слева направо. Применяются общие границы и правила triggerId. Value — имя единственного параметра формы object?, также принимающей массив. -
trigger6— Элемент последовательности: int ButtonID, числовая string, строка с |/запятой или Array таких элементов. Порядок — слева направо. Применяются общие границы и правила triggerId. Value — имя единственного параметра формы object?, также принимающей массив. -
trigger7— Элемент последовательности: int ButtonID, числовая string, строка с |/запятой или Array таких элементов. Порядок — слева направо. Применяются общие границы и правила triggerId. Value — имя единственного параметра формы object?, также принимающей массив. -
trigger8— Элемент последовательности: int ButtonID, числовая string, строка с |/запятой или Array таких элементов. Порядок — слева направо. Применяются общие границы и правила triggerId. Value — имя единственного параметра формы object?, также принимающей массив. -
trigger9— Элемент последовательности: int ButtonID, числовая string, строка с |/запятой или Array таких элементов. Порядок — слева направо. Применяются общие границы и правила triggerId. Value — имя единственного параметра формы object?, также принимающей массив. -
trigger10— Элемент последовательности: int ButtonID, числовая string, строка с |/запятой или Array таких элементов. Порядок — слева направо. Применяются общие границы и правила triggerId. Value — имя единственного параметра формы object?, также принимающей массив. -
trigger11— Элемент последовательности: int ButtonID, числовая string, строка с |/запятой или Array таких элементов. Порядок — слева направо. Применяются общие границы и правила triggerId. Value — имя единственного параметра формы object?, также принимающей массив. -
trigger12— Элемент последовательности: int ButtonID, числовая string, строка с |/запятой или Array таких элементов. Порядок — слева направо. Применяются общие границы и правила triggerId. Value — имя единственного параметра формы object?, также принимающей массив. -
trigger13— Элемент последовательности: int ButtonID, числовая string, строка с |/запятой или Array таких элементов. Порядок — слева направо. Применяются общие границы и правила triggerId. Value — имя единственного параметра формы object?, также принимающей массив. -
trigger14— Элемент последовательности: int ButtonID, числовая string, строка с |/запятой или Array таких элементов. Порядок — слева направо. Применяются общие границы и правила triggerId. Value — имя единственного параметра формы object?, также принимающей массив. -
trigger15— Элемент последовательности: int ButtonID, числовая string, строка с |/запятой или Array таких элементов. Порядок — слева направо. Применяются общие границы и правила triggerId. Value — имя единственного параметра формы object?, также принимающей массив. -
trigger16— Элемент последовательности: int ButtonID, числовая string, строка с |/запятой или Array таких элементов. Порядок — слева направо. Применяются общие границы и правила triggerId. Value — имя единственного параметра формы object?, также принимающей массив.
void — ничего не возвращает: ни успех, ни новое значение, ни подтверждение сервера.
- Ищет реальную кнопку Activate с нужным ButtonID; кнопки переключения страницы и окна без нужной кнопки пропускаются. Последующие ID не обходят первый ожидающий. На одну доставку разметки — не больше одного ответа в одно окно. Обновлённая разметка может использовать тот же объект окна.
- Следующий WaitGump того же скрипта дополняет его ожидающую последовательность. Поиск не ограничен GumpID: для точного выбора используйте NumGumpButton или SendGumpSelect. ButtonID=0 сработает только при существующей кнопке Activate с ID 0; это не универсальное закрытие.
- Обычное завершение процедуры сохраняет ожидание. Отмена владельца или Terminate с его именем удаляет его ожидания; TerminateAll удаляет все, включая оставшиеся после завершения процедур. Смена мира очищает очередь. Ожидания не сохраняются в профиль.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.WaitGump");
UO.WaitGump(100);Параметры и ход выполнения:
- 100 — ButtonID ответа. WaitGump регистрирует его перед UseObject; дальнейшее выполнение не означает, что сервер уже принял ответ.
UO.WaitGump(100);
UO.UseObject("0x40001234");Параметры и ход выполнения:
- 7, 22 и 1 — ButtonID последовательных форм. Эти ID проверяются по порядку. Число аргументов не задаёт задержку; вызов регистрирует всю последовательность.
return RunScenario();
object? RunScenario()
{
UO.WaitGump(7, 22, 1);
UO.UseObject("0x40001234");
return null;
}Параметры и ход выполнения:
- Строка 7|22|1 задаёт ту же последовательность. TerminateAll затем очищает все ожидающие действия гампов и останавливает все процедуры; это глобальное действие.
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.WaitGump("7|22|1");
UO.TerminateAll();
return null;
}
}C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.
Параметры: value (Any/Integer/String)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitGump:CompactWaitGump(arguments).
Внутренний код реализации, не самостоятельный скрипт.
case "waitgump": CompactWaitGump(arguments); return InjectionValue.Unit;Параметры: value (Any/Integer/String)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.WaitGump. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.WaitGumpSelect:bridge.WaitGumpSelect(triggerId, 30_000).
Внутренний код реализации, не самостоятельный скрипт.
public void WaitGump(int triggerId)
{
if (bridge is IApiGumpAutomation automation) automation.QueueGumpButtons(new[] { triggerId });
else bridge.WaitGumpSelect(triggerId, 30_000);
}Параметры: value (Any/Integer/String)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.WaitGump. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitGump:CompactWaitGump(chain). -
InjectionScript.Runtime.InjectionApiUO.WaitGump:WaitGump(NumberConversions.ToInt(triggerId)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(triggerId).
Внутренний код реализации, не самостоятельный скрипт.
public void WaitGump(string triggerId)
{
string text = (triggerId ?? string.Empty).Trim();
if (text.Contains('|') || text.Contains(','))
{
InjectionValue[] chain = text.Split(new[] { '|', ',' }, StringSplitOptions.RemoveEmptyEntries)
.Select(value => new InjectionValue(value.Trim())).ToArray();
CompactWaitGump(chain);
return;
}
WaitGump(NumberConversions.ToInt(triggerId));
}Параметры: trigger1 (Any), trigger2 (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitGump]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitGump:CompactWaitGump(values).
Вызов выполняет сохранённый delegate обработчика. Метод регистрации создаёт этот delegate при построении API.
Внутренний код реализации, не самостоятельный скрипт.
values =>
{
CompactWaitGump(values);
return InjectionValue.Unit;
}Параметры: trigger1 (Any), trigger2 (Any), trigger3 (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitGump]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitGump:CompactWaitGump(values).
Вызов выполняет сохранённый delegate обработчика. Метод регистрации создаёт этот delegate при построении API.
Внутренний код реализации, не самостоятельный скрипт.
values =>
{
CompactWaitGump(values);
return InjectionValue.Unit;
}Параметры: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitGump]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitGump:CompactWaitGump(values).
Вызов выполняет сохранённый delegate обработчика. Метод регистрации создаёт этот delegate при построении API.
Внутренний код реализации, не самостоятельный скрипт.
values =>
{
CompactWaitGump(values);
return InjectionValue.Unit;
}Параметры: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitGump]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitGump:CompactWaitGump(values).
Вызов выполняет сохранённый delegate обработчика. Метод регистрации создаёт этот delegate при построении API.
Внутренний код реализации, не самостоятельный скрипт.
values =>
{
CompactWaitGump(values);
return InjectionValue.Unit;
}
UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6) — UO.WaitGump(Any,Any,Any,Any,Any,Any)
Параметры: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitGump]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitGump:CompactWaitGump(values).
Вызов выполняет сохранённый delegate обработчика. Метод регистрации создаёт этот delegate при построении API.
Внутренний код реализации, не самостоятельный скрипт.
values =>
{
CompactWaitGump(values);
return InjectionValue.Unit;
}
UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7) — UO.WaitGump(Any,Any,Any,Any,Any,Any,Any)
Параметры: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitGump]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitGump:CompactWaitGump(values).
Вызов выполняет сохранённый delegate обработчика. Метод регистрации создаёт этот delegate при построении API.
Внутренний код реализации, не самостоятельный скрипт.
values =>
{
CompactWaitGump(values);
return InjectionValue.Unit;
}
UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7, trigger8) — UO.WaitGump(Any,Any,Any,Any,Any,Any,Any,Any)
Параметры: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any), trigger8 (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitGump]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitGump:CompactWaitGump(values).
Вызов выполняет сохранённый delegate обработчика. Метод регистрации создаёт этот delegate при построении API.
Внутренний код реализации, не самостоятельный скрипт.
values =>
{
CompactWaitGump(values);
return InjectionValue.Unit;
}
UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7, trigger8, trigger9) — UO.WaitGump(Any,Any,Any,Any,Any,Any,Any,Any,Any)
Параметры: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any), trigger8 (Any), trigger9 (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitGump]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitGump:CompactWaitGump(values).
Вызов выполняет сохранённый delegate обработчика. Метод регистрации создаёт этот delegate при построении API.
Внутренний код реализации, не самостоятельный скрипт.
values =>
{
CompactWaitGump(values);
return InjectionValue.Unit;
}
UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7, trigger8, trigger9, trigger10) — UO.WaitGump(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)
Параметры: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any), trigger8 (Any), trigger9 (Any), trigger10 (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitGump]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitGump:CompactWaitGump(values).
Вызов выполняет сохранённый delegate обработчика. Метод регистрации создаёт этот delegate при построении API.
Внутренний код реализации, не самостоятельный скрипт.
values =>
{
CompactWaitGump(values);
return InjectionValue.Unit;
}
UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7, trigger8, trigger9, trigger10, trigger11) — UO.WaitGump(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)
Параметры: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any), trigger8 (Any), trigger9 (Any), trigger10 (Any), trigger11 (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitGump]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitGump:CompactWaitGump(values).
Вызов выполняет сохранённый delegate обработчика. Метод регистрации создаёт этот delegate при построении API.
Внутренний код реализации, не самостоятельный скрипт.
values =>
{
CompactWaitGump(values);
return InjectionValue.Unit;
}
UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7, trigger8, trigger9, trigger10, trigger11, trigger12) — UO.WaitGump(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)
Параметры: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any), trigger8 (Any), trigger9 (Any), trigger10 (Any), trigger11 (Any), trigger12 (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitGump]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitGump:CompactWaitGump(values).
Вызов выполняет сохранённый delegate обработчика. Метод регистрации создаёт этот delegate при построении API.
Внутренний код реализации, не самостоятельный скрипт.
values =>
{
CompactWaitGump(values);
return InjectionValue.Unit;
}
UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7, trigger8, trigger9, trigger10, trigger11, trigger12, trigger13) — UO.WaitGump(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)
Параметры: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any), trigger8 (Any), trigger9 (Any), trigger10 (Any), trigger11 (Any), trigger12 (Any), trigger13 (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitGump]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitGump:CompactWaitGump(values).
Вызов выполняет сохранённый delegate обработчика. Метод регистрации создаёт этот delegate при построении API.
Внутренний код реализации, не самостоятельный скрипт.
values =>
{
CompactWaitGump(values);
return InjectionValue.Unit;
}
UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7, trigger8, trigger9, trigger10, trigger11, trigger12, trigger13, trigger14) — UO.WaitGump(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)
Параметры: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any), trigger8 (Any), trigger9 (Any), trigger10 (Any), trigger11 (Any), trigger12 (Any), trigger13 (Any), trigger14 (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitGump]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitGump:CompactWaitGump(values).
Вызов выполняет сохранённый delegate обработчика. Метод регистрации создаёт этот delegate при построении API.
Внутренний код реализации, не самостоятельный скрипт.
values =>
{
CompactWaitGump(values);
return InjectionValue.Unit;
}
UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7, trigger8, trigger9, trigger10, trigger11, trigger12, trigger13, trigger14, trigger15) — UO.WaitGump(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)
Параметры: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any), trigger8 (Any), trigger9 (Any), trigger10 (Any), trigger11 (Any), trigger12 (Any), trigger13 (Any), trigger14 (Any), trigger15 (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitGump]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitGump:CompactWaitGump(values).
Вызов выполняет сохранённый delegate обработчика. Метод регистрации создаёт этот delegate при построении API.
Внутренний код реализации, не самостоятельный скрипт.
values =>
{
CompactWaitGump(values);
return InjectionValue.Unit;
}
UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7, trigger8, trigger9, trigger10, trigger11, trigger12, trigger13, trigger14, trigger15, trigger16) — UO.WaitGump(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)
Параметры: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any), trigger8 (Any), trigger9 (Any), trigger10 (Any), trigger11 (Any), trigger12 (Any), trigger13 (Any), trigger14 (Any), trigger15 (Any), trigger16 (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitGump]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitGump:CompactWaitGump(values).
Вызов выполняет сохранённый delegate обработчика. Метод регистрации создаёт этот delegate при построении API.
Внутренний код реализации, не самостоятельный скрипт.
values =>
{
CompactWaitGump(values);
return InjectionValue.Unit;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.WaitGumpCheck(object? index, object? state);
void UO.WaitGumpCheck(object? index, object? state, object? index2, object? state2);
void UO.WaitGumpCheck(object? index, object? state, object? index2, object? state2, object? index3, object? state3);Меняет до трёх полей checkbox у текущего gump.
-
index— int ID элемента либо нулевой индекс, как у SetGump. Аргументы идут парами: selector, value. -
index2— int ID элемента либо нулевой индекс, как у SetGump. Аргументы идут парами: selector, value. -
index3— int ID элемента либо нулевой индекс, как у SetGump. Аргументы идут парами: selector, value. -
state— Значение поля через ToString. Checkbox включает "checked"/"true"/ненулевое число; textentry принимает текст. -
state2— Значение поля через ToString. Checkbox включает "checked"/"true"/ненулевое число; textentry принимает текст. -
state3— Значение поля через ToString. Checkbox включает "checked"/"true"/ненулевое число; textentry принимает текст.
void — значения нет. Вызывайте отдельной строкой; завершение не подтверждает действие сервера.
- ExecuteLegacyManualAlias проходит аргументы по парам и для каждой вызывает SetGumpValue(-1, "checkbox", selector, value). Все зарегистрированные формы — 2, 4 или 6 аргументов.
- Название UO.Wait не означает ожидание: здесь нет блокировки и нет очереди для будущего gump. При отсутствии поля выводится ошибка. Ответ кнопкой не отправляется.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.WaitGumpCheck");
UO.WaitGumpCheck(0, 1);Параметры и ход выполнения:
- Меняет до трёх полей checkbox у текущего gump.
if (Truth(UO.GetGumpsCount() > 0))
{
UO.WaitGumpCheck(0, 1);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- ExecuteLegacyManualAlias проходит аргументы по парам и для каждой вызывает SetGumpValue(-1, "checkbox", selector, value). Все зарегистрированные формы — 2, 4 или 6 аргументов.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.GetGumpsCount() > 0))
{
UO.WaitGumpCheck(0, 1, 1, 0);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Название UO.Wait не означает ожидание: здесь нет блокировки и нет очереди для будущего gump. При отсутствии поля выводится ошибка. Ответ кнопкой не отправляется.
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.GetGumpsCount() > 0))
{
UO.WaitGumpCheck(0, 1, 1, 0, 2, 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;
}C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.
Параметры: index (Any), state (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetGumpValue:bridge.SetGumpValue(-1, "checkbox", Arg(index), Text(index + 1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(index). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(index + 1).
Внутренний код реализации, не самостоятельный скрипт.
case "waitgumpcheck":
for (int index = 0; index + 1 < arguments.Length; index += 2)
bridge.SetGumpValue(-1, "checkbox", Arg(index), Text(index + 1));
break;Параметры: index (Any), state (Any), index2 (Any), state2 (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetGumpValue:bridge.SetGumpValue(-1, "checkbox", Arg(index), Text(index + 1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(index). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(index + 1).
Внутренний код реализации, не самостоятельный скрипт.
case "waitgumpcheck":
for (int index = 0; index + 1 < arguments.Length; index += 2)
bridge.SetGumpValue(-1, "checkbox", Arg(index), Text(index + 1));
break;
UO.WaitGumpCheck(index, state, index2, state2, index3, state3) — UO.WaitGumpCheck(Any,Any,Any,Any,Any,Any)
Параметры: index (Any), state (Any), index2 (Any), state2 (Any), index3 (Any), state3 (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetGumpValue:bridge.SetGumpValue(-1, "checkbox", Arg(index), Text(index + 1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(index). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(index + 1).
Внутренний код реализации, не самостоятельный скрипт.
case "waitgumpcheck":
for (int index = 0; index + 1 < arguments.Length; index += 2)
bridge.SetGumpValue(-1, "checkbox", Arg(index), Text(index + 1));
break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.WaitGumpEntry(object? index, object? text);
void UO.WaitGumpEntry(object? index, object? text, object? index2, object? text2);
void UO.WaitGumpEntry(object? index, object? text, object? index2, object? text2, object? index3, object? text3);Меняет до трёх полей textentry у текущего gump.
-
index— int ID элемента либо нулевой индекс, как у SetGump. Аргументы идут парами: selector, value. -
index2— int ID элемента либо нулевой индекс, как у SetGump. Аргументы идут парами: selector, value. -
index3— int ID элемента либо нулевой индекс, как у SetGump. Аргументы идут парами: selector, value. -
text— Значение поля через ToString. Checkbox включает "checked"/"true"/ненулевое число; textentry принимает текст. -
text2— Значение поля через ToString. Checkbox включает "checked"/"true"/ненулевое число; textentry принимает текст. -
text3— Значение поля через ToString. Checkbox включает "checked"/"true"/ненулевое число; textentry принимает текст.
void — значения нет. Вызывайте отдельной строкой; завершение не подтверждает действие сервера.
- ExecuteLegacyManualAlias проходит аргументы по парам и для каждой вызывает SetGumpValue(-1, "textentry", selector, value). Все зарегистрированные формы — 2, 4 или 6 аргументов.
- Название UO.Wait не означает ожидание: здесь нет блокировки и нет очереди для будущего gump. При отсутствии поля выводится ошибка. Ответ кнопкой не отправляется.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.WaitGumpEntry");
UO.WaitGumpEntry(0, "Example");Параметры и ход выполнения:
- Меняет до трёх полей textentry у текущего gump.
if (Truth(UO.GetGumpsCount() > 0))
{
UO.WaitGumpEntry(0, "Example");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- ExecuteLegacyManualAlias проходит аргументы по парам и для каждой вызывает SetGumpValue(-1, "textentry", selector, value). Все зарегистрированные формы — 2, 4 или 6 аргументов.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.GetGumpsCount() > 0))
{
UO.WaitGumpEntry(0, "First", 1, "Second");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Название UO.Wait не означает ожидание: здесь нет блокировки и нет очереди для будущего gump. При отсутствии поля выводится ошибка. Ответ кнопкой не отправляется.
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.GetGumpsCount() > 0))
{
UO.WaitGumpEntry(0, "First", 1, "Second", 2, "Third");
}
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.
Параметры: index (Any), text (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetGumpValue:bridge.SetGumpValue(-1, "textentry", Arg(index), Text(index + 1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(index). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(index + 1).
Внутренний код реализации, не самостоятельный скрипт.
case "waitgumpentry":
for (int index = 0; index + 1 < arguments.Length; index += 2)
bridge.SetGumpValue(-1, "textentry", Arg(index), Text(index + 1));
break;Параметры: index (Any), text (Any), index2 (Any), text2 (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetGumpValue:bridge.SetGumpValue(-1, "textentry", Arg(index), Text(index + 1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(index). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(index + 1).
Внутренний код реализации, не самостоятельный скрипт.
case "waitgumpentry":
for (int index = 0; index + 1 < arguments.Length; index += 2)
bridge.SetGumpValue(-1, "textentry", Arg(index), Text(index + 1));
break;
UO.WaitGumpEntry(index, text, index2, text2, index3, text3) — UO.WaitGumpEntry(Any,Any,Any,Any,Any,Any)
Параметры: index (Any), text (Any), index2 (Any), text2 (Any), index3 (Any), text3 (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetGumpValue:bridge.SetGumpValue(-1, "textentry", Arg(index), Text(index + 1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(index). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(index + 1).
Внутренний код реализации, не самостоятельный скрипт.
case "waitgumpentry":
for (int index = 0; index + 1 < arguments.Length; index += 2)
bridge.SetGumpValue(-1, "textentry", Arg(index), Text(index + 1));
break;