UO Topic diagnostics introspection - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
Українська · Русский · 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;string UO.Info();
string UO.Info(object? serial);
string UO.Info(object? type, object? x, object? y);
string UO.Info(object? type, object? x, object? y, object? z);Режим виклику визначає результат: команда з графічного чату або прив’язаної команди відкриває таблицю з полями, значеннями, Ctrl+C та прокруткою. Звичайний C#-скрипт отримує рядок даних без вікон і без прицілу, навіть коли ігрове вікно відкрите. Доступні лише дані, відомі клієнту.
У графічному чаті Info та InfoTile без аргументів вмикають приціл. У скрипті Info() читає останню об’єктну ціль або свого персонажа, а InfoTile() — землю під персонажем. Явні serial, type та координати читають заданий об’єкт або тайл. Третій аргумент InfoTile(x,y,map) — номер карти.
-
serial— Серійний номер об’єкта або збережений псевдонім. -
type— Графічний ID предмета; -1 — будь-який тип у вказаній точці. -
x— Координата X світу. -
y— Координата Y світу. -
z— Висота Z; скорочена форма використовує 0.
Префікс налаштовується в C# Scripts IDE. Нижче # — лише приклад префікса. Параметри відокремлюються пробілами; лапки зберігають текст як один параметр. id означає serial, type означає graphic. xy x y [z] вибирає перший завантажений об’єкт у точці; type без координат — перший знайдений відповідний об’єкт. Для InfoTile третій аргумент форми (x,y,map) — номер карти, а не Z.
#info
#UO.Info id 0x40001234
#info type 0x0EED
#info xy 1450 1690
#info type 0x0EED xy 1450 1690 0
Кожен блок — повний окремий .csx. Демонстраційні serial, type та координати замініть своїми. Параметри передаються у порядку сигнатури; іменовані параметри C# дозволяють явно вказати їх призначення.
string report = UO.Info(0x40001234);
UO.Print(report);string InspectSelf() => UO.Info("self");
UO.Print(InspectSelf());foreach (int serial in new[] { 0x40001234, 0x40005678 })
{
string report = UO.Info(serial);
UO.Print(report);
}new CommandSample().Execute(UO);
sealed class CommandSample
{
public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
{
string report = api.Info(0x40001234);
api.Print(report);
}
}CSharpGameApi.Info
-> CSharpScriptGlobals
-> InjectionScript.Runtime.InjectionApiUO.Info
ClassicUOInjectionApiBridge -> YokoInfoReport -> YokoInfoGump
string UO.InfoColor();
string UO.InfoColor(object? serial);Режим виклику визначає результат: команда з графічного чату або прив’язаної команди відкриває таблицю з полями, значеннями, Ctrl+C та прокруткою. Звичайний C#-скрипт отримує рядок даних без вікон і без прицілу, навіть коли ігрове вікно відкрите. Доступні лише дані, відомі клієнту.
У графічному чаті Info та InfoTile без аргументів вмикають приціл. У скрипті Info() читає останню об’єктну ціль або свого персонажа, а InfoTile() — землю під персонажем. Явні serial, type та координати читають заданий об’єкт або тайл. Третій аргумент InfoTile(x,y,map) — номер карти.
-
serial— Серійний номер об’єкта або збережений псевдонім.
Префікс налаштовується в C# Scripts IDE. Нижче # — лише приклад префікса. Параметри відокремлюються пробілами; лапки зберігають текст як один параметр. id означає serial, type означає graphic. xy x y [z] вибирає перший завантажений об’єкт у точці; type без координат — перший знайдений відповідний об’єкт. Для InfoTile третій аргумент форми (x,y,map) — номер карти, а не Z.
#infocolor 0x40001234
Кожен блок — повний окремий .csx. Демонстраційні serial, type та координати замініть своїми. Параметри передаються у порядку сигнатури; іменовані параметри C# дозволяють явно вказати їх призначення.
UO.Print(UO.InfoColor(0x40001234));string report = UO.InfoColor();
UO.Print(report);foreach (int serial in new[] { 0x40001234, 0x40005678 })
UO.Print(UO.InfoColor(serial));new CommandSample().Execute(UO);
sealed class CommandSample
{
public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
{
api.Print(api.InfoColor(0x40001234));
}
}CSharpGameApi.InfoColor
-> CSharpScriptGlobals
-> InjectionScript.Runtime.InjectionApiUO.InfoColor
ClassicUOInjectionApiBridge -> YokoInfoReport -> YokoInfoGump
string UO.InfoGump();
string UO.InfoGump(object? gump);Режим виклику визначає результат: команда з графічного чату або прив’язаної команди відкриває таблицю з полями, значеннями, Ctrl+C та прокруткою. Звичайний C#-скрипт отримує рядок даних без вікон і без прицілу, навіть коли ігрове вікно відкрите. Доступні лише дані, відомі клієнту.
InfoGump() читає останнє активне вікно: серверний діалог або локальне вікно клієнта. Можна передати ID чи індекс; last, LastGump та Last Gump означають останнє вікно. InfoGumps повертає список. Самі вікна інспектора не потрапляють до списку. Таблиця відкривається лише для графічної команди.
-
gump— ID серверного вікна або його індекс; -1 — останнє активне.
Префікс налаштовується в C# Scripts IDE. Нижче # — лише приклад префікса. Параметри відокремлюються пробілами; лапки зберігають текст як один параметр. id означає serial, type означає graphic. xy x y [z] вибирає перший завантажений об’єкт у точці; type без координат — перший знайдений відповідний об’єкт. Для InfoTile третій аргумент форми (x,y,map) — номер карти, а не Z.
#infogump
#infogump last
#info gump last gump
#infogump 0x12345678
Кожен блок — повний окремий .csx. Демонстраційні serial, type та координати замініть своїми. Параметри передаються у порядку сигнатури; іменовані параметри C# дозволяють явно вказати їх призначення.
string report = UO.InfoGump();
UO.Print(report);UO.Print(UO.InfoGump(0x12345678));string ReadLatestWindow() => UO.InfoGump();
UO.Print(ReadLatestWindow());new CommandSample().Execute(UO);
sealed class CommandSample
{
public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
{
string report = api.InfoGump();
api.Print(report);
}
}CSharpGameApi.InfoGump
-> CSharpScriptGlobals
-> InjectionScript.Runtime.InjectionApiUO.InfoGump
ClassicUOInjectionApiBridge -> YokoInfoReport -> YokoInfoGump
string UO.InfoGumps();
string UO.InfoGumps(object? gump);Режим виклику визначає результат: команда з графічного чату або прив’язаної команди відкриває таблицю з полями, значеннями, Ctrl+C та прокруткою. Звичайний C#-скрипт отримує рядок даних без вікон і без прицілу, навіть коли ігрове вікно відкрите. Доступні лише дані, відомі клієнту.
InfoGump() читає останнє активне вікно: серверний діалог або локальне вікно клієнта. Можна передати ID чи індекс; last, LastGump та Last Gump означають останнє вікно. InfoGumps повертає список. Самі вікна інспектора не потрапляють до списку. Таблиця відкривається лише для графічної команди.
-
gump— ID серверного вікна або його індекс; -1 — останнє активне.
Префікс налаштовується в C# Scripts IDE. Нижче # — лише приклад префікса. Параметри відокремлюються пробілами; лапки зберігають текст як один параметр. id означає serial, type означає graphic. xy x y [z] вибирає перший завантажений об’єкт у точці; type без координат — перший знайдений відповідний об’єкт. Для InfoTile третій аргумент форми (x,y,map) — номер карти, а не Z.
#infogumps
Кожен блок — повний окремий .csx. Демонстраційні serial, type та координати замініть своїми. Параметри передаються у порядку сигнатури; іменовані параметри C# дозволяють явно вказати їх призначення.
UO.Print(UO.InfoGumps());string report = UO.InfoGumps(0x12345678);
UO.Print(report);string ReadAllWindows() => UO.InfoGumps();
UO.Print(ReadAllWindows());new CommandSample().Execute(UO);
sealed class CommandSample
{
public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
{
api.Print(api.InfoGumps());
}
}CSharpGameApi.InfoGumps
-> CSharpScriptGlobals
-> InjectionScript.Runtime.InjectionApiUO.InfoGumps
ClassicUOInjectionApiBridge -> YokoInfoReport -> YokoInfoGump
string UO.InfoTile();
string UO.InfoTile(object? x);
string UO.InfoTile(object? x, object? y);
string UO.InfoTile(object? x, object? y, object? map);
string UO.InfoTile(object? type, object? x, object? y, object? z);
string UO.InfoTile(object? type, object? x, object? y, object? z, object? map);Режим виклику визначає результат: команда з графічного чату або прив’язаної команди відкриває таблицю з полями, значеннями, Ctrl+C та прокруткою. Звичайний C#-скрипт отримує рядок даних без вікон і без прицілу, навіть коли ігрове вікно відкрите. Доступні лише дані, відомі клієнту.
У графічному чаті Info та InfoTile без аргументів вмикають приціл. У скрипті Info() читає останню об’єктну ціль або свого персонажа, а InfoTile() — землю під персонажем. Явні serial, type та координати читають заданий об’єкт або тайл. Третій аргумент InfoTile(x,y,map) — номер карти.
-
map— Номер карти; без цього параметра — поточна карта. -
type— Графічний ID предмета; -1 — будь-який тип у вказаній точці. -
x— Координата X світу. -
y— Координата Y світу. -
z— Висота Z; скорочена форма використовує 0.
Префікс налаштовується в C# Scripts IDE. Нижче # — лише приклад префікса. Параметри відокремлюються пробілами; лапки зберігають текст як один параметр. id означає serial, type означає graphic. xy x y [z] вибирає перший завантажений об’єкт у точці; type без координат — перший знайдений відповідний об’єкт. Для InfoTile третій аргумент форми (x,y,map) — номер карти, а не Z.
#infotile
#info tile xy 1450 1690
#infotile 1450 1690 0
#infotile type 0x0EED 1450 1690 0 0
Кожен блок — повний окремий .csx. Демонстраційні serial, type та координати замініть своїми. Параметри передаються у порядку сигнатури; іменовані параметри C# дозволяють явно вказати їх призначення.
UO.Print(UO.InfoTile(1450, 1690));string report = UO.InfoTile(1450, 1690, 0);
UO.Print(report);UO.Print(UO.InfoTile(0x0EED, 1450, 1690, 0, 0));new CommandSample().Execute(UO);
sealed class CommandSample
{
public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
{
api.Print(api.InfoTile(1450, 1690));
}
}CSharpGameApi.InfoTile
-> CSharpScriptGlobals
-> InjectionScript.Runtime.InjectionApiUO.InfoTile
ClassicUOInjectionApiBridge -> YokoInfoReport -> YokoInfoGump
Українська · Русский · 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;