Repository navigation
UO Topic gumps
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Головна · C# · IDE · Команди UO · За абеткою · Приклади · Мови
Гамп — ігрове вікно з кнопками, текстом, прапорцями та полями введення. Команди читають його вміст і надсилають відповідь серверу. ID гампа, ідентифікатор його власника (serial) та порядковий номер відкритого вікна — різні значення.
| Тема | Команди та пояснення |
|---|---|
| Отримання ігрового вікна | UO.GetGump |
| Дані ігрового вікна | UO.GetGumpInfo |
| ID вікна та ідентифікатор власника | UO.GetGumpID · UO.GetGumpSerial |
| Текстові рядки | UO.GetGumpTextLines · UO.GetGumpFullLines · UO.GetGumpShortLines |
| Кнопки | UO.GetGumpButtonsDescription · UO.NumGumpButton |
| Прапорці | UO.NumGumpCheckBox · UO.GumpAutoCheckBox |
| Перемикачі | UO.NumGumpRadiobutton · UO.GumpAutoRadiobutton |
| Поля введення | UO.NumGumpTextEntry · UO.GumpAutoTextEntry |
| Очікування вікна | UO.WaitGump |
| Вибір відповіді | UO.SelectGump |
| Надсилання відповіді | UO.SendGumpSelect |
| Ігнорування вікон | UO.AddGumpIgnoreByID · UO.AddGumpIgnoreBySerial · UO.ClearGumpsIgnore |
| Закриття вікна | 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.
- Закриття не очищає збережені тексти; порожній масив текстів допустимо і у вікна.
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, 5, 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);Змінює до трьох полів текстовогоцентру у поточного 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");Параметри та порядок виконання:
- Змінює до трьох полів текстовогоцентру у поточного 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;ClassicUO — Bad Newbie & C# Scripts IDE