RU UO Topic diagnostics introspection - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Главная · C# · IDE · UO API · A–Z · Примеры · Языки
Осмотр объектов, тайлов и гампов, проверка имён, параметров и сигнатур API. Наличие сигнатуры не подтверждает возможность игрового действия в текущем состоянии.
| Тема | Команды и пояснения |
|---|---|
| Help | UO.Help |
| Dump | UO.Dump |
| Info | UO.Info |
| InfoTile | UO.InfoTile |
| InfoGump | UO.InfoGump |
| API Name Exists | UO.ApiNameExists |
| API Signature Exists | UO.ApiSignatureExists |
| API Parameter Exists | UO.ApiParameterExists |
| Version | 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;