Repository navigation
UO Topic diagnostics introspection
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Головна · C# · IDE · Команди UO · За абеткою · Приклади · Мови
Перегляд даних предметів, клітин карти та ігрових вікон, а також перевірка імен і параметрів команд API. Наявність команди в довіднику не гарантує, що конкретна ігрова дія доступна зараз.
| Тема | Команди та пояснення |
|---|---|
| Довідка | UO.Help |
| Виведення даних об’єкта | UO.Dump |
| Відомості про об’єкт | UO.Info |
| Відомості про клітину карти | UO.InfoTile |
| Відомості про ігрове вікно | UO.InfoGump |
| Перевірка назви команди | UO.ApiNameExists |
| Перевірка сигнатури | UO.ApiSignatureExists |
| Перевірка параметра | UO.ApiParameterExists |
| Версія API | UO.Version |
UO.Help · UO.Dump · UO.Info · UO.InfoColor · UO.GetInfo · UO.ExtendedInfo · UO.InfoTile · UO.InfoGump · UO.InfoGumps · UO.ApiNameExists · UO.ApiParameterExists · UO.ApiSignatureExists · UO.Version · UO.ClientInfo
Нижче наведено короткі приклади. У повному описі кожної команди є параметри, результат, обмеження та кілька самостійних скриптів: прямий код, варіант із функцією та варіант із класом.
Параметри, результат та всі сценарії
UO.InfoGump();Параметри, результат та всі сценарії
return UO.ApiNameExists("UO.GetType");Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.ApiNameExists(object? name);Перевіряє реєстрацію імені викликаної нативної функції.
-
name— Обов'язкова string: точне зареєстроване ім'я, не відображення виклику. Регістр і прогалини з обох боків не важливі; UO. автоматично не додається. Порожнє чи невідоме ім'я дає 0. Процедури користувача не враховуються.
int: 1 — ім’я зареєстроване, 0 — ні. У C# використовуйте result != 0 або result == 0; порівняння int з true чи false недопустиме. Реєстрація не підтверджує дію сервера.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.ApiNameExists("UO.GetType");
UO.Print("ApiNameExists: " + Convert.ToString(result));Параметри та порядок виконання:
- Перший приклад перевіряє ігрове ім'я з явним UO. та повертає 1. Точне ім'я, що перевіряється, і кількість аргументів, коли воно потрібно, видно у виклику.
return UO.ApiNameExists("UO.GetType");Приклад перевіряє лише реєстрацію нативних імен. Convert.ToInt32 — метод .NET, а не запис UO API, тому ApiNameExists повертає 0. Сам метод доступний у звичайному C#.
return RunScenario();
object? RunScenario()
{
var name = "Convert.ToInt32";
return UO.ApiNameExists(name);
return null;
}Числові результати окремо порівнюються з 0; оператор && застосовується вже до двох значень bool. Для цих імен результат — false.
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()
{
return HasBoth("GetType", "UO.GetType");
return null;
}
dynamic HasBoth(dynamic first, dynamic second)
{
return UO.ApiNameExists(first) != 0 && UO.ApiNameExists(second) != 0;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: name (String)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ApiNameExists. -
InjectionScript.Runtime.InjectionApiUO.NormalizeApiName:NormalizeApiName(name).
Внутрішній код реалізації, не самостійний скрипт.
public int ApiNameExists(string name)
{
string normalized = NormalizeApiName(name);
return metadata.NativeSubrutines.Any(definition =>
definition.Name.Equals(normalized, StringComparison.OrdinalIgnoreCase)) ? 1 : 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.ApiParameterExists(object? name);Перевіряє реєстрацію значення runtime чи іменованого об'єкта.
-
name— Обов'язкова string: точне зареєстроване ім'я, не відображення виклику. Регістр і прогалини з обох боків не важливі; UO. автоматично не додається. Порожнє чи невідоме ім'я дає 0. Процедури користувача не враховуються.
int: 1 — ім’я зареєстроване, 0 — ні. У C# використовуйте result != 0 або result == 0; порівняння int з true чи false недопустиме. Реєстрація не підтверджує дію сервера.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.ApiParameterExists("backpack");
UO.Print("ApiParameterExists: " + Convert.ToString(result));Параметри та порядок виконання:
- Перший приклад перевіряє ігрове ім'я з явним UO. та повертає 1. Точне ім'я, що перевіряється, і кількість аргументів, коли воно потрібно, видно у виклику.
return UO.ApiParameterExists("UO.GetHP");Перевіряється зареєстрований селектор backpack, результат — 1. Це не перевірка параметрів методів C# та не підтвердження існування рюкзака у світі.
return RunScenario();
object? RunScenario()
{
var name = "backpack";
return UO.ApiParameterExists(name);
return null;
}Параметри та порядок виконання:
- Третій приклад містить повну допоміжну функцію. Він порівнює віддалену коротку форму або арність, що не підтримується, з доступною формою. Параметри name, first, second та count передають імена/кількість без змін. Результат – 0 для перевірок дзвінка та "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()
{
return CompareNames("GetHP", "UO.GetHP");
return null;
}
dynamic CompareNames(dynamic first, dynamic second)
{
return Convert.ToString(UO.ApiParameterExists(first)) + ":" + Convert.ToString(UO.ApiParameterExists(second));
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: name (String)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ApiParameterExists. -
InjectionScript.Runtime.Metadata.IntrinsicVariableExists:metadata.IntrinsicVariableExists(value).
Внутрішній код реалізації, не самостійний скрипт.
public int ApiParameterExists(string name)
{
string value = (name ?? string.Empty).Trim();
if (value.Length == 0)
return 0;
if (Metadata.ShortcutVariables.Any(item => item.Equals(value, StringComparison.OrdinalIgnoreCase)))
return 1;
return metadata.IntrinsicVariableExists(value) ? 1 : 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.ApiSignatureExists(object? name, object? argumentCount);Перевіряє реєстрацію імені із заданим числом аргументів.
-
name— Обов'язкова string: точне зареєстроване ім'я, не відображення виклику. Регістр і прогалини з обох боків не важливі; UO. автоматично не додається. Порожнє чи невідоме ім'я дає 0. Процедури користувача не враховуються. -
argumentCount- Обов'язковий int: повна кількість позиційних аргументів, включаючи явно передані необов'язкові. Негативну чи непідтримувану кількість дає 0. Типи самих аргументів не перевіряються.
int: 1 — ім’я зареєстроване, 0 — ні. У C# використовуйте result != 0 або result == 0; порівняння int з true чи false недопустиме. Реєстрація не підтверджує дію сервера.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.ApiSignatureExists("UO.GetType", 1);
UO.Print("ApiSignatureExists: " + Convert.ToString(result));Параметри та порядок виконання:
- Перший приклад перевіряє ігрове ім'я з явним UO. та повертає 1. Точне ім'я, що перевіряється, і кількість аргументів, коли воно потрібно, видно у виклику.
return UO.ApiSignatureExists("UO.GetType",1);Перевіряються форми UO.FindType з одним і нулем аргументів. Результат — рядок "1:0"; нульова форма не зареєстрована.
return RunScenario();
object? RunScenario()
{
return Convert.ToString(UO.ApiSignatureExists("UO.FindType", 1)) + ":" + Convert.ToString(UO.ApiSignatureExists("UO.FindType", 0));
return null;
}Параметри та порядок виконання:
- Третій приклад містить повну допоміжну функцію. Він порівнює віддалену коротку форму або арність, що не підтримується, з доступною формою. Параметри name, first, second та count передають імена/кількість без змін. Результат – 0 для перевірок дзвінка та "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()
{
return CheckForm("UO.GetType", 0);
return null;
}
dynamic CheckForm(dynamic name, dynamic count)
{
return UO.ApiSignatureExists(name, count);
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: name (String), argumentCount (Integer)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ApiSignatureExists. -
InjectionScript.Runtime.Metadata.NativeSubrutineExists:metadata.NativeSubrutineExists(NormalizeApiName(name), argumentCount). -
InjectionScript.Runtime.InjectionApiUO.NormalizeApiName:NormalizeApiName(name).
Внутрішній код реалізації, не самостійний скрипт.
public int ApiSignatureExists(string name, int argumentCount)
=> metadata.NativeSubrutineExists(NormalizeApiName(name), argumentCount) ? 1 : 0;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.ClientInfo();Читає коротку інформацію про запущеного клієнта.
Параметрів немає.
Array із трьох string: [0] – назва продукту, [1] – версія запущеного клієнта, [2] – каталог клієнта. Індекси починаються з 0. Це не рядок JSON і не словник.
- Дані читаються з RuntimeProductName, RuntimeProductVersion та ClientPath. Команда нічого не змінює і не надсилає серверу.
- Використовуйте ArrayLength перед індексуванням у спільній допоміжній функції. Не плутайте інформацію про клієнта з параметрами персонажа або версією сервера.
- Читає інформацію про поточного клієнта ClassicUO.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.ClientInfo();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- 0 - продукт, 1 - версія, 2 - каталог. Значення версії береться під час запуску, у прикладі воно не зафіксовано.
var info = UO.ClientInfo();
UO.Print("Product: " + info[0]);
UO.Print("Client version: " + info[1]);
UO.Print("Client folder: " + info[2]);Параметри та порядок виконання:
- ArrayLength повертає кількість полів. Останній допустимий індекс дорівнює довжині мінус 1.
return RunScenario();
object? RunScenario()
{
var info = UO.ClientInfo();
var i = 0;
while (Truth(i < ArrayLength(info)))
{
UO.Print(Convert.ToString(i) + ": " + info[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;Параметри та порядок виконання:
- ClientCaption повертає рядок із назви та версії. Початковий масив не змінюється.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.Print(ClientCaption());
return null;
}
dynamic ClientCaption()
{
var info = UO.ClientInfo();
if (Truth(ArrayLength(info) < 2))
{
return "Client information unavailable";
}
return info[0] + " / " + info[1];
}
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.
Параметри: Немає параметрів.
Результат: dynamic / Array.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.RuntimeProductName:bridge.RuntimeProductName. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.RuntimeProductVersion:bridge.RuntimeProductVersion. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ClientPath:bridge.ClientPath.
Внутрішній код реалізації, не самостійний скрипт.
case "clientinfo":
return new InjectionValue(new[]
{
new InjectionValue(bridge.RuntimeProductName),
new InjectionValue(bridge.RuntimeProductVersion),
new InjectionValue(bridge.ClientPath)
});Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Dump();
void UO.Dump(object? @object);Друкує діагностичний знімок відомого клієнта об'єкта.
-
object— Необов'язковий serial/посилання. Без аргументу використовується bridge. LastTarget.
void - значення, що повертається немає.
- Повідомлення містить serial як 0xXXXXXXXX, ім'я, graphic/type, hue та X/Y/Z. Поля читаються із локальної моделі; відсутній об'єкт дає порожнє ім'я та нульові поля. Команда не просить свіжі server properties.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.Dump");
UO.Dump();Параметри та порядок виконання:
- Відсутній аргумент означає LastTarget.
UO.Dump();Параметри та порядок виконання:
- Усі поля ставляться до свого персонажа.
return RunScenario();
object? RunScenario()
{
UO.Dump("self");
return null;
}Параметри та порядок виконання:
- Перевірка Exists відокремлює відсутню модель від об'єкта з нульовими полями.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var id = UO.LastTarget();
if (Truth(UO.Exists(id)))
{
UO.Dump(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.
Параметри: Немає параметрів.
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0, bridge.LastTarget). -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage($"0x{id:X8} {bridge.GetName(id)} type=0x{bridge.GetGraphics(id):X4} hue=0x{bridge.GetColor(id):X4} xyz={bridge.GetX(id)},{bridge.GetY(id)},{bridge.GetZ(id)}"). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetName:bridge.GetName(id). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetGraphics:bridge.GetGraphics(id). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetColor:bridge.GetColor(id). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetX:bridge.GetX(id). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetY:bridge.GetY(id). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetZ:bridge.GetZ(id). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastTarget:bridge.LastTarget.
Внутрішній код реалізації, не самостійний скрипт.
case "dump":
{
int id = Arg(0, bridge.LastTarget);
SystemMessage($"0x{id:X8} {bridge.GetName(id)} type=0x{bridge.GetGraphics(id):X4} hue=0x{bridge.GetColor(id):X4} xyz={bridge.GetX(id)},{bridge.GetY(id)},{bridge.GetZ(id)}");
break;
}Параметри: object (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0, bridge.LastTarget). -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage($"0x{id:X8} {bridge.GetName(id)} type=0x{bridge.GetGraphics(id):X4} hue=0x{bridge.GetColor(id):X4} xyz={bridge.GetX(id)},{bridge.GetY(id)},{bridge.GetZ(id)}"). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetName:bridge.GetName(id). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetGraphics:bridge.GetGraphics(id). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetColor:bridge.GetColor(id). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetX:bridge.GetX(id). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetY:bridge.GetY(id). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetZ:bridge.GetZ(id). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastTarget:bridge.LastTarget.
Внутрішній код реалізації, не самостійний скрипт.
case "dump":
{
int id = Arg(0, bridge.LastTarget);
SystemMessage($"0x{id:X8} {bridge.GetName(id)} type=0x{bridge.GetGraphics(id):X4} hue=0x{bridge.GetColor(id):X4} xyz={bridge.GetX(id)},{bridge.GetY(id)},{bridge.GetZ(id)}");
break;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.ExtendedInfo();Повертає чотири поля поточної конфігурації клієнта з'єднання.
Параметрів немає.
Array [ClientPath:string, CurrentProfilePath:string, GameServerAddress:string, GameServerPort:int].
- Порядок полів фіксовано. ClientPath та CurrentProfilePath — клієнтські шляхи. GameServerAddress та GameServerPort читають глобальні Settings.GlobalSettings.IP/Port: це налаштована адреса, не перевірка фактичного peer менеджерської сесії. Список не містить пароля і не запитує відомості сервера. Порожні значення можливі до вибору профілю/з'єднання.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.ExtendedInfo();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- Масив містить змішані типи, тому використовується Convert. ToString.
var info = UO.ExtendedInfo();
for (int i = (int)(0); i <= ArrayLength(info)-1; i += (int)(1))
{
UO.Print(Convert.ToString(info[i]));
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;Параметри та порядок виконання:
- Індекси 2 та 3 — адреса та порт.
return RunScenario();
object? RunScenario()
{
var info = UO.ExtendedInfo();
UO.Print(Convert.ToString(info[2]) + ":" + Convert.ToString(info[3]));
return null;
}Параметри та порядок виконання:
- Індекс 1 — CurrentProfilePath, а не ClientPath.
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.ExtendedInfo();
var path = info[1];
UO.Print(path);
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ClientPath:bridge.ClientPath. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CurrentProfilePath:bridge.CurrentProfilePath. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GameServerAddress:bridge.GameServerAddress. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GameServerPort:bridge.GameServerPort.
Внутрішній код реалізації, не самостійний скрипт.
case "extendedinfo":
return new InjectionValue(new[] { new InjectionValue(bridge.ClientPath), new InjectionValue(bridge.CurrentProfilePath), new InjectionValue(bridge.GameServerAddress), new InjectionValue(bridge.GameServerPort) });Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetInfo(object? arg);Повертає ім'я персонажа лише для точного селектора character.
-
arg- string. Точне реєстрозалежне значення character викликає GetName("self"); будь-яке інше значення не розпізнається.
string – ім'я свого персонажа для character; рядковий літерал UNKNOWN для решти аргументів. За відсутності персонажа ім'я може бути порожнім.
- Порівняння StringComparison. Ordinal реєстрозалежно. Підтримується лише селектор character. Команда не надсилає мережевих запитів: вона читає ім'я з локальної моделі персонажа. Вікно FillInfoWindow керується окремо.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetInfo("character");
UO.Print("GetInfo: " + Convert.ToString(result));Параметри та порядок виконання:
- Точний літерал character читає self.
var name = UO.GetInfo("character");
UO.Print(name);Параметри та порядок виконання:
- Character не збігається та повертає UNKNOWN.
return RunScenario();
object? RunScenario()
{
var value = UO.GetInfo("Character");
UO.Print(value);
return null;
}Параметри та порядок виконання:
- profile не підтримується цією реалізацією.
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 value = UO.GetInfo("profile");
UO.Print(value);
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: arg (String)
Результат: string / String.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.GetInfo. -
InjectionScript.Runtime.InjectionApiUO.GetName:GetName("self").
Внутрішній код реалізації, не самостійний скрипт.
private string GetInfo(string arg)
{
if (arg.Equals("character", StringComparison.Ordinal))
return GetName("self");
return "UNKNOWN";
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Help();Параметрів немає.
void - значення немає. Викликайте окремим рядком; завершення не підтверджує дію сервера.
- Змінює або показує лише вказані локальні дані. Серверного підтвердження цієї команди немає.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.Help");
UO.Help();Параметри та порядок виконання:
- Показує локальну підказку про C# IDE.
UO.Help();Параметри та порядок виконання:
- ExecuteLegacyManualAlias виводить рядок про UO.*, налаштований префікс чату та Options > C# IDE > Manual через SystemMessage. Запит сервера не надсилається.
return RunScenario();
object? RunScenario()
{
UO.Help();
UO.OpenIDE();
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.Help();
UO.Print("Options > C# IDE > Manual");
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage("C# Scripts IDE: use UO.* in scripts or the configured chat prefix. Open Options > C# Scripts IDE > Manual.").
Внутрішній код реалізації, не самостійний скрипт.
case "help": SystemMessage("C# Scripts IDE: use UO.* in scripts or the configured chat prefix. Open Options > C# Scripts IDE > Manual."); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Info();
void UO.Info(object? @object);Показує відомості про завантажений предмет або персонаж: serial, graphic/type, колір, координати та властивості об'єкта.
-
object— Serial конкретного предмета/персонажу: число, hex/десятковий рядок, self/backpack/lasttarget/lastobject/lastcontainer/lastcorpse/finditem/laststatus або збережене ім'я AddObject. Це не type. Об'єкт має бути завантажений; перед дією перевіряйте Exists. У формі без аргументу звичайна процедура використовує lasttarget; Інтерактивна команда пропонує вибрати об'єкт мишею.
void - значення, що повертається немає. Результат не можна присвоїти як serial, graphic/type, кількість або true/false. Інформація виводиться в інтерфейс/журнал, а не повертається до скрипту.
- Тип об'єкта визначає додаткові поля: предмет має Container, Layer, Amount; у персонажа - HP/Mana/Stamina, notoriety та інші стани. Недоступний об'єкт дає повідомлення, а не інформацію про інший об'єкт.
- Info відноситься до об'єктів; InfoGump/InfoGumps — до серверних вікон, InfoTile — до землі/статики.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.Info");
UO.Info();Параметри та порядок виконання:
- object = self - власний персонаж.
- Текст виводиться до журналу. У Info немає рядка, що повертається.
UO.Info("self");Параметри та порядок виконання:
- chest має бути заданий через AddObject; це serial скрині.
- Exists запобігає запиту відомостей про відсутній об'єкт.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Exists("chest")))
{
UO.Info("chest");
}
else
{
UO.Print("Chest is not loaded");
}
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() у цій процедурі вибирає lasttarget.
- GetGraphic окремо повертає числовий graphic/type. Сам 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()
{
if (Truth(UO.Exists("lasttarget")))
{
UO.Info();
var graphic = UO.GetGraphic("lasttarget");
UO.Print(UO.Int2Hex(graphic));
}
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.
Параметри: Немає параметрів.
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.RequestInteractiveObjectInfoTarget:bridge.RequestInteractiveObjectInfoTarget(). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0, bridge.LastTarget). -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage(bridge.GetObjectInfoText(id)). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetObjectInfoText:bridge.GetObjectInfoText(id). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastTarget:bridge.LastTarget.
Внутрішній код реалізації, не самостійний скрипт.
case "info":
{
if (arguments.Length == 0 && bridge.RequestInteractiveObjectInfoTarget() != 0)
break;
int id = Arg(0, bridge.LastTarget);
SystemMessage(bridge.GetObjectInfoText(id));
break;
}Параметри: object (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.RequestInteractiveObjectInfoTarget:bridge.RequestInteractiveObjectInfoTarget(). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0, bridge.LastTarget). -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage(bridge.GetObjectInfoText(id)). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetObjectInfoText:bridge.GetObjectInfoText(id). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastTarget:bridge.LastTarget.
Внутрішній код реалізації, не самостійний скрипт.
case "info":
{
if (arguments.Length == 0 && bridge.RequestInteractiveObjectInfoTarget() != 0)
break;
int id = Arg(0, bridge.LastTarget);
SystemMessage(bridge.GetObjectInfoText(id));
break;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.InfoColor();
void UO.InfoColor(object? @object);Друкує відомий hue об'єкт.
-
object- Необов'язковий serial/аліас. Без аргументу - bridge. LastTarget, не self.
void - значення немає. Викликайте окремим рядком; завершення не підтверджує дію сервера.
- ExecuteLegacyManualAlias читає bridge.GetColor, форматує 0x з X4 і виводить через SystemMessage. Для значення int використовуйте GetColor; результат цієї команди не повертає hue.
- Читається локальний колір; невідомий об'єкт дає значення GetColor за правилами bridge (зазвичай 0). Нульовий hue сам собою не доводить відсутність об'єкта.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.InfoColor");
UO.InfoColor();Параметри та порядок виконання:
- Друкує відомий hue об'єкт.
UO.InfoColor();Параметри та порядок виконання:
- ExecuteLegacyManualAlias читає bridge.GetColor, форматує 0x з X4 і виводить через SystemMessage. Для значення int використовуйте GetColor; результат цієї команди не повертає hue.
return RunScenario();
object? RunScenario()
{
UO.InfoColor("self");
return null;
}Параметри та порядок виконання:
- Читається локальний колір; невідомий об'єкт дає значення GetColor за правилами bridge (зазвичай 0). Нульовий hue сам собою не доводить відсутність об'єкта.
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.Exists("lasttarget")))
{
UO.InfoColor("lasttarget");
}
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.
Параметри: Немає параметрів.
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage($"0x{bridge.GetColor(Arg(0, bridge.LastTarget)):X4}"). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetColor:bridge.GetColor(Arg(0, bridge.LastTarget)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0, bridge.LastTarget). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastTarget:bridge.LastTarget.
Внутрішній код реалізації, не самостійний скрипт.
case "infocolor": SystemMessage($"0x{bridge.GetColor(Arg(0, bridge.LastTarget)):X4}"); break;Параметри: object (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage($"0x{bridge.GetColor(Arg(0, bridge.LastTarget)):X4}"). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetColor:bridge.GetColor(Arg(0, bridge.LastTarget)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0, bridge.LastTarget). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastTarget:bridge.LastTarget.
Внутрішній код реалізації, не самостійний скрипт.
case "infocolor": SystemMessage($"0x{bridge.GetColor(Arg(0, bridge.LastTarget)):X4}"); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.InfoGump();
void UO.InfoGump(object? gump);Відкриває докладний інспектор серверного гампа.
-
gump— Необов'язковий селектор вікна. int або числовий рядок: спочатку шукається точний збіг GumpID/serial, потім індекс з 0. -1 - вибраний цим скриптом гамп, а якщо його немає - останній у поточному списку. Інші негативні int зберігають 32-бітний ID. Це селектор, на відміну від суворого GumpIndex в NumGump*.
void – нічого не повертає. Не можна інтерпретувати результат як підтвердження сервера чи bool.
- Працює з активними серверними гампами. Рюкзак, карта, налаштування та інші локальні вікна не входять до цього списку. Один виклик читає дані у ігровому потоці; різні дзвінки можуть побачити різні стани списку.
- Інспектор показує serial/GumpID, положення, розміри, сторінки, кнопки та їх ButtonID, перемикачі, поля введення та дерево контролів. Текст можна виділяти та копіювати.
- InfoGump без аргументів використовує вибране/останнє вікно. InfoGumps без аргументів показує таблицю індексів та ID всіх вікон. Аргумент обох команд відкриває докладний інспектор одного вікна.
- Відкриття докладного інспектора робить досліджуваний гамп обраним для SendGumpSelect (buttonId). За відсутності вікна виводиться повідомлення; це не повертає bool.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.InfoGump");
UO.InfoGump();Параметри та порядок виконання:
- Аргументів немає: InfoGump показує вибране/останнє вікно, InfoGumps — список вікон.
UO.InfoGump();Параметри та порядок виконання:
- 0x87654321 — приклад ID зі старшим бітом. Він порівнюється точно, а чи не замінюється останнім вікном.
return RunScenario();
object? RunScenario()
{
UO.InfoGump(0x87654321);
return null;
}Параметри та порядок виконання:
- Перший дзвінок показує список. Потім читається GumpID першого вікна та відкривається докладний інспектор; при однакових ID буде обрано перший збіг.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.InfoGumps();
if (Truth(UO.GetGumpsCount() > 0))
{
var id = UO.GetGumpID(0);
UO.InfoGump(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.
Параметри: Немає параметрів.
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.InfoGump. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ShowGumpInspector:bridge.ShowGumpInspector(-1).
Внутрішній код реалізації, не самостійний скрипт.
public void InfoGump()
{
// Action command: no active server gump is a normal no-op/error-report case,
// not a runtime exception. The ClassicUO bridge reports the condition.
bridge.ShowGumpInspector(-1);
}Параметри: gump (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.InfoGump. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ShowGumpInspector:bridge.ShowGumpInspector(NumberConversions.ToInt(gump)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(gump).
Внутрішній код реалізації, не самостійний скрипт.
public void InfoGump(InjectionValue gump)
{
bridge.ShowGumpInspector(NumberConversions.ToInt(gump));
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.InfoGumps();
void UO.InfoGumps(object? gump);Без аргументу відкриває список активних серверних гампів; з аргументом – докладний інспектор вибраного гампа.
-
gump— Необов'язковий селектор вікна. int або числовий рядок: спочатку шукається точний збіг GumpID/serial, потім індекс з 0. -1 - вибраний цим скриптом гамп, а якщо його немає - останній у поточному списку. Інші негативні int зберігають 32-бітний ID. Це селектор, на відміну від суворого GumpIndex в NumGump*.
void – нічого не повертає. Не можна інтерпретувати результат як підтвердження сервера чи bool.
- Працює з активними серверними гампами. Рюкзак, карта, налаштування та інші локальні вікна не входять до цього списку. Один виклик читає дані у ігровому потоці; різні дзвінки можуть побачити різні стани списку.
- Інспектор показує serial/GumpID, положення, розміри, сторінки, кнопки та їх ButtonID, перемикачі, поля введення та дерево контролів. Текст можна виділяти та копіювати.
- InfoGump без аргументів використовує вибране/останнє вікно. InfoGumps без аргументів показує таблицю індексів та ID всіх вікон. Аргумент обох команд відкриває докладний інспектор одного вікна.
- Відкриття докладного інспектора робить досліджуваний гамп обраним для SendGumpSelect (buttonId). За відсутності вікна виводиться повідомлення; це не повертає bool.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.InfoGumps");
UO.InfoGumps();Параметри та порядок виконання:
- Аргументів немає: InfoGump показує вибране/останнє вікно, InfoGumps — список вікон.
UO.InfoGumps();Параметри та порядок виконання:
- 0x87654321 — приклад ID зі старшим бітом. Він порівнюється точно, а чи не замінюється останнім вікном.
return RunScenario();
object? RunScenario()
{
UO.InfoGumps(0x87654321);
return null;
}Параметри та порядок виконання:
- Перший дзвінок показує список. Потім читається GumpID першого вікна та відкривається докладний інспектор; при однакових ID буде обрано перший збіг.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.InfoGumps();
if (Truth(UO.GetGumpsCount() > 0))
{
var id = UO.GetGumpID(0);
UO.InfoGump(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.
Параметри: Немає параметрів.
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.InfoGumps. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ShowGumpListInspector:bridge.ShowGumpListInspector().
Внутрішній код реалізації, не самостійний скрипт.
public void InfoGumps()
{
bridge.ShowGumpListInspector();
}Параметри: gump (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.InfoGumps. -
InjectionScript.Runtime.InjectionApiUO.InfoGump:InfoGump(gump).
Внутрішній код реалізації, не самостійний скрипт.
public void InfoGumps(InjectionValue gump)
{
InfoGump(gump);
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.InfoTile();
void UO.InfoTile(object? x);
void UO.InfoTile(object? x, object? y);Показує інформацію про землю/статичний об'єкт поточної картки.
-
x- Світова координата X. У формі з одним аргументом Y береться у персонажа. -
y— Світова координата Y. Два аргументи задають X/Y; параметрів Z або map цієї команди немає.
void - значення, що повертається немає. Результат не можна присвоїти як serial, graphic/type, кількість або true/false. Інформація виводиться в інтерфейс/журнал, а не повертається до скрипту.
- Інтерактивна команда без аргументів відкриває приціл для землі/статики; вибір предмета чи персонажа відхиляється. Вибраний тайл відображається у вікні та журналі.
- Звичайний скрипт без аргументів читає X/Y персонажа без прицілу. Координатні форми шукають саме землю (Land) зазначеної клітини: вони не вибирають статичний шар Z.
- У командному режимі знайдена земля з'являється також у вікні. У звичайному скрипті відомості виводяться до журналу. Для читання статичних записів масивом використовуйте GetStaticTileData/GetWorldCell.
- Карта має бути завантажена. За відсутності землі об'єкта, що повертається, немає — виводиться повідомлення.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.InfoTile");
UO.InfoTile();Параметри та порядок виконання:
- Аргументів немає; у процедурі X/Y беруться у персонажа.
- Це виведення інформації, а не Array чи номер шару.
UO.InfoTile();Параметри та порядок виконання:
- x=1445, y=1690 — клітка поточної карти.
- Команда описує землю цієї клітини; для статичного об'єкта необхідний інтерактивний вибір чи API читання статик.
return RunScenario();
object? RunScenario()
{
UO.InfoTile(1445, 1690);
return null;
}Параметри та порядок виконання:
- Передано лише x; Y залишається координатою персонажа.
- Висота та map аргументами не задаються.
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 x = UO.GetX() + 1;
UO.InfoTile(x);
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.RequestInteractiveTileInfoTarget:bridge.RequestInteractiveTileInfoTarget(). -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage(bridge.GetTileInfoText( arguments.Length > 0 ? Arg(0) : bridge.GetX(bridge.Self), arguments.Length > 1 ? Arg(1) : bridge.GetY(bridge.Self), bridge.WorldNumber)). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetTileInfoText:bridge.GetTileInfoText( arguments.Length > 0 ? Arg(0) : bridge.GetX(bridge.Self), arguments.Length > 1 ? Arg(1) : bridge.GetY(bridge.Self), bridge.WorldNumber). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetX:bridge.GetX(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetY:bridge.GetY(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.WorldNumber:bridge.WorldNumber.
Внутрішній код реалізації, не самостійний скрипт.
case "infotile":
if (arguments.Length == 0 && bridge.RequestInteractiveTileInfoTarget() != 0)
break;
SystemMessage(bridge.GetTileInfoText(
arguments.Length > 0 ? Arg(0) : bridge.GetX(bridge.Self),
arguments.Length > 1 ? Arg(1) : bridge.GetY(bridge.Self),
bridge.WorldNumber));
break;Параметри: x (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.RequestInteractiveTileInfoTarget:bridge.RequestInteractiveTileInfoTarget(). -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage(bridge.GetTileInfoText( arguments.Length > 0 ? Arg(0) : bridge.GetX(bridge.Self), arguments.Length > 1 ? Arg(1) : bridge.GetY(bridge.Self), bridge.WorldNumber)). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetTileInfoText:bridge.GetTileInfoText( arguments.Length > 0 ? Arg(0) : bridge.GetX(bridge.Self), arguments.Length > 1 ? Arg(1) : bridge.GetY(bridge.Self), bridge.WorldNumber). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetX:bridge.GetX(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetY:bridge.GetY(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.WorldNumber:bridge.WorldNumber.
Внутрішній код реалізації, не самостійний скрипт.
case "infotile":
if (arguments.Length == 0 && bridge.RequestInteractiveTileInfoTarget() != 0)
break;
SystemMessage(bridge.GetTileInfoText(
arguments.Length > 0 ? Arg(0) : bridge.GetX(bridge.Self),
arguments.Length > 1 ? Arg(1) : bridge.GetY(bridge.Self),
bridge.WorldNumber));
break;Параметри: x (Any), y (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.RequestInteractiveTileInfoTarget:bridge.RequestInteractiveTileInfoTarget(). -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage(bridge.GetTileInfoText( arguments.Length > 0 ? Arg(0) : bridge.GetX(bridge.Self), arguments.Length > 1 ? Arg(1) : bridge.GetY(bridge.Self), bridge.WorldNumber)). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetTileInfoText:bridge.GetTileInfoText( arguments.Length > 0 ? Arg(0) : bridge.GetX(bridge.Self), arguments.Length > 1 ? Arg(1) : bridge.GetY(bridge.Self), bridge.WorldNumber). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetX:bridge.GetX(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetY:bridge.GetY(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.WorldNumber:bridge.WorldNumber.
Внутрішній код реалізації, не самостійний скрипт.
case "infotile":
if (arguments.Length == 0 && bridge.RequestInteractiveTileInfoTarget() != 0)
break;
SystemMessage(bridge.GetTileInfoText(
arguments.Length > 0 ? Arg(0) : bridge.GetX(bridge.Self),
arguments.Length > 1 ? Arg(1) : bridge.GetY(bridge.Self),
bridge.WorldNumber));
break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Version();Друкує назву та версію runtime продукту.
Параметрів немає.
void - значення немає. Викликайте окремим рядком; завершення не підтверджує дію сервера.
- ExecuteLegacyManualAlias виводить bridge.RuntimeProductName та bridge.RuntimeProductVersion через SystemMessage. Це рядок у журналі, який не повертається номер версії.
- Змінює або показує лише вказані локальні дані. Серверного підтвердження цієї команди немає.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.Version");
UO.Version();Параметри та порядок виконання:
- Друкує назву та версію runtime продукту.
UO.Version();Параметри та порядок виконання:
- ExecuteLegacyManualAlias виводить bridge.RuntimeProductName та bridge.RuntimeProductVersion через SystemMessage. Це рядок у журналі, який не повертається номер версії.
return RunScenario();
object? RunScenario()
{
UO.Version();
UO.Help();
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.Version();
UO.Print(UO.GetUserCodepage());
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage($"{bridge.RuntimeProductName} v{bridge.RuntimeProductVersion}"). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.RuntimeProductName:bridge.RuntimeProductName. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.RuntimeProductVersion:bridge.RuntimeProductVersion.
Внутрішній код реалізації, не самостійний скрипт.
case "version": SystemMessage($"{bridge.RuntimeProductName} v{bridge.RuntimeProductVersion}"); break;ClassicUO — Bad Newbie & C# Scripts IDE