Repository navigation
UO Topic client connection
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Головна · C# · IDE · Команди UO · За абеткою · Приклади · Мови
Підключення до сервера, вихід із гри, перевірка стану з’єднання та затримки. Тут також є команди для адреси сервера й списку персонажів.
| Тема | Команди та пояснення |
|---|---|
| Підключення | UO.Connect |
| Відключення | UO.Disconnect |
| Стан з’єднання | UO.Connected |
| Перебування у світі | UO.Online |
| Затримка | UO.GetPing |
| Адреса сервера | UO.GameServerIPString |
| Назва сервера | UO.ShardName |
| Каталог сервера | UO.ShardPath |
| Список персонажів | UO.GetCharsListForShard |
| Повторний запит даних | UO.Resend |
| Перевірка затримки | UO.CheckLag |
UO.Connect · UO.Disconnect · UO.Connected · UO.Online · UO.IsOnline · UO.ConnectedTime · UO.DisconnectedTime · UO.GetPing · UO.CheckLag · UO.GameServerIPString · UO.ShardName · UO.ShardPath · UO.GetCharsListForShard · UO.Resend · UO.CloseUO
Нижче наведено короткі приклади. У повному описі кожної команди є параметри, результат, обмеження та кілька самостійних скриптів: прямий код, варіант із функцією та варіант із класом.
Параметри, результат та всі сценарії
if (Truth(Truth(UO.Connected()) == false))
{
return null;
}
UO.UseSkill("Hiding");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри, результат та всі сценарії
var address = UO.GameServerIPString();
UO.Print(address);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.CheckLag();
dynamic UO.CheckLag(object? timeoutMS);
int UO.CheckLag(object? timeout, object? retries);Перевіряє, чи отримана свіжа відповідь ігрового сервера за відведений час. Зручна перед продовженням скрипта після затримки мережі.
-
timeout- timeout / timeoutMS - час очікування однієї спроби в мілісекундах, перетворюється на int. Негативне значення обмежується нулем. При 0 запит може бути надісланий, але очікування відповіді немає; це не безкінечний тайм-аут. -
timeoutMS- timeout / timeoutMS - час очікування однієї спроби в мілісекундах, перетворюється на int. Негативне значення обмежується нулем. При 0 запит може бути надісланий, але очікування відповіді немає; це не безкінечний тайм-аут. -
retries— retries — загальна кількість спроб, а не кількість додаткових повторів. Перетворюється на int і обмежується знизу одиницею. Наприклад, (250, 3) - до трьох спроб по 250 мс; успішна відповідь завершує перевірку раніше.
Числовий прапор int: 1 (умова виконана) - свіжа відповідь отримана; 0 (умова не виконано) - запит неможливий або термін сплив. Однопараметрична реєстрація object? фактично повертає цей int. Не величина пінгу і кількість спроб.
- CheckLag() виконує одну спробу з очікуванням до 10000 мс. CheckLag(timeoutMS) — одну спробу із зазначеним очікуванням. CheckLag(timeout, retries) повторює перевірку до успіху чи вичерпання загальної кількості спроб.
- Очікування затримує скрипт, що викликає, а не підтверджує ігрову дію. Команда не перепідключається та не змінює налаштування мережі. Сервер може не відповідати на echo: невдача сама по собі не доводить розриву зв'язку. Термін залежить також від планування потоків; не викликайте активної перевірки на кожному кадрі. Зупинка скрипта перериває очікування.
- UO.GetPing · UO.CheckLag · UO.IsOnline
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.CheckLag();
UO.Print("CheckLag: " + Convert.ToString(result));Параметри та порядок виконання:
- Форма без параметрів може чекати до 10 секунд. true означає свіжу echo-відповідь. Hiding викликається окремою командою і може бути відхилено ігровій механікою.
if (Truth(Truth(UO.CheckLag()) == true))
{
UO.UseSkill("Hiding");
}
else
{
UO.Print("No fresh server response");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- 250 - очікування однієї спроби, 3 - всього спроб. За успіху подальші спроби не виконуються; при 0 скрипт не продовжує дію. Це не вимір пінгу 250 мс і не три додаткові повтори.
return RunScenario();
object? RunScenario()
{
var responsive = UO.CheckLag(250, 3);
if (Truth(responsive == 0))
{
UO.Print("No response after the allowed attempts");
return null;
}
UO.Print("Fresh response received; the script can continue");
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- CanContinue(timeoutMs, attempts) спочатку перевіряє UO.IsOnline, потім свіжу відповідь. false та 0 рівнозначні саме для цього предикату. 500 мс та 2 спроби задаються окремо; функція не запускає автоматичне перепідключення.
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(CanContinue(500, 2))))
{
return null;
}
UO.UseSkill("Hiding");
return null;
}
dynamic CanContinue(dynamic timeoutMs, dynamic attempts)
{
if (Truth(Truth(UO.IsOnline()) == false))
{
return false;
}
return Truth(Truth(UO.CheckLag(timeoutMs, attempts)) == true);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.CheckLag. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CheckLag:bridge.CheckLag(10_000).
Внутрішній код реалізації, не самостійний скрипт.
public int CheckLag() => bridge.CheckLag(10_000);Параметри: timeoutMS (Any)
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CheckLag:bridge.CheckLag(Arg(0, 10_000)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0, 10_000).
Внутрішній код реалізації, не самостійний скрипт.
case "checklag": return new InjectionValue(bridge.CheckLag(Arg(0, 10_000)));Параметри: timeout (Any), retries (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.CheckLag. -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(timeout). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CheckLag:bridge.CheckLag(timeoutMs).
Внутрішній код реалізації, не самостійний скрипт.
public int CheckLag(InjectionValue timeout, InjectionValue retries)
{
int timeoutMs = Math.Max(0, NumberConversions.ToInt(timeout));
int attempts = Math.Max(1, NumberConversions.ToInt(retries));
for (int attempt = 0; attempt < attempts; attempt++)
{
if (bridge.CheckLag(timeoutMs) != 0)
return 1;
}
return 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.CloseUO();Запитує вихід поточної програми клієнта через Client.Game.Exit.
Параметрів немає.
void - значення, що повертається немає.
- CloseUO прямує до того ж bridge.CloseHandle. Exit виконується на ігровому потоці; якщо Client.Game відсутня, дія відсутня. Команда не є закриттям окремого gump.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.CloseUO");
UO.CloseUO();Параметри та порядок виконання:
- Виклик запитує про завершення програми клієнта.
UO.CloseUO();Параметри та порядок виконання:
- Приклад показує керовану умову; значення 0 зберігає клієнт відкритим.
return RunScenario();
object? RunScenario()
{
var finishClient = 0;
if (Truth(finishClient))
{
UO.CloseUO();
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Повністю оголошений помічник дозволяє явний вихід.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
FinishClient(0);
return null;
}
void FinishClient(dynamic enabled)
{
if (Truth(enabled))
{
UO.CloseUO();
}
}
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.CloseHandle:bridge.CloseHandle().
Внутрішній код реалізації, не самостійний скрипт.
case "closeuo": bridge.CloseHandle(); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Connect();Запитує підключення або перепідключення клієнтської сесії.
Параметрів немає.
void - значення, що повертається немає.
- У менеджерській сесії викликає SessionControl.RequestConnect. У самостійному клієнті активне/підготовлюване з'єднання залишає без змін.
- Для GameScene планує збережене перепідключення, щоб не змінювати scene під час її Update. У LoginScene використовує поточний обліковий запис та збережений пароль, включає Reconnect і викликає Connect із запам'ятованим shard/character навіть при вимкненому автоматичному reconnect.
- Команда не чекає на вход у світ. Перевіряйте UO.Connected після окремого очікування, якщо подальші дії потребують з'єднання.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.Connect");
UO.Connect();Параметри та порядок виконання:
- Виклик лише ініціює підключення.
UO.Connect();Параметри та порядок виконання:
- Перевірка може уникнути повторного запиту.
return RunScenario();
object? RunScenario()
{
if (!(Truth(UO.Connected())))
{
UO.Connect();
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Очікування 1000 мс не гарантує вхід; висновок показує фактичний поточний прапор.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
UO.Connect();
await Delay(1000);
UO.Print(Convert.ToString(UO.Connected()));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ConnectClient:bridge.ConnectClient().
Внутрішній код реалізації, не самостійний скрипт.
case "connect": bridge.ConnectClient(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.Connected();Перевіряє, чи поточний сеанс знаходиться в ігровому світі і чи відкрито його ігрове з'єднання. Використовуйте перед дією персонажа або під час очікування входу.
Параметрів немає.
int. 1 - одночасно є гравець, завантажена карта та активний ігровий сокет; інакше 0. Відкрите вікно клієнта, список персонажів або TCP-з'єднання на етапі входу ще не означають 1. Числовий прапор int: 1 (умова виконана), 0 (умова не виконано). Це числовий прапор: в C# перевіряйте result != 0 або result == 0. Пряме порівняння int з true/false та if (result) неприпустимо.
Результат команди — числовий прапор: 1 означає виконану умову, 0 — невиконану. Після var result = команда (...) перевіряйте if (result != 0) або if (result == 0). Збережіть результат одного виклику: повторний виклик може виконати дію знову або прочитати стан, що вже змінився.
- Параметрів немає: serial, type, ім'я персонажа та IP передавати не можна. UO.Online(), UO.Connected() і UO.IsOnline() перевіряють те саме. Це стан даного власника сеансу, а чи не іншого профілю менеджера.
- Команда лише читає локальний стан. Вона не надсилає ping, не підключається, не знімає паузу і не перевіряє доступність інтернету. Після читання зв'язок може змінитися; 1 не гарантує успіху наступної дії.
- UO.Wait приймає мілісекунди. Автопауза при розриві зв'язку та ручна пауза затримують виконання прикладів: перевірка таймауту продовжиться лише після зняття паузи. Ці команди самі не знімають паузу і не включають автореконнект.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.Connected();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- false рівнозначно 0. return завершує Main до UseSkill. Hiding - єдиний параметр UseSkill, назва навички. При 1 скрипт лише просить застосування навички; результат залежить від стану персонажа та сервера.
- Команда лише читає локальний стан. Вона не надсилає ping, не підключається, не знімає паузу і не перевіряє доступність інтернету. Після читання зв'язок може змінитися; 1 не гарантує успіху наступної дії.
if (Truth(Truth(UO.Connected()) == false))
{
return null;
}
UO.UseSkill("Hiding");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Порівняння з 0 перевіряє поточне підключення, а не налаштування автореконнекта. Connect без аргументів використовує збережені налаштування та не чекає завершення входу. Повторна команда під час розпочатого входу не повинна створювати другий сеанс.
- Команда лише читає локальний стан. Вона не надсилає ping, не підключається, не знімає паузу і не перевіряє доступність інтернету. Після читання зв'язок може змінитися; 1 не гарантує успіху наступної дії.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Connected() == 0))
{
UO.Connect();
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- WaitForWorld(timeoutMs) — повністю показана функція користувача, не вбудована команда. 5000 - бюджет у мс, UO.Wait(50) - інтервал перевірок. Негативне значення дає false; 0 дозволяє лише готовий світ. Timer вимірює секунди, тому різниця множиться на 1000. Автопауза має бути заздалегідь вимкнена, інакше Main виходить. Функція не викликає Connect і не скасовує розпочатий вхід при закінченні часу.
- Команда лише читає локальний стан. Вона не надсилає ping, не підключається, не знімає паузу і не перевіряє доступність інтернету. Після читання зв'язок може змінитися; 1 не гарантує успіху наступної дії.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
if (Truth(UO.GetPauseScriptOnDisconnectStatus()))
{
return null;
}
if (Truth(await WaitForWorld(5000)))
{
UO.UseSkill("Hiding");
}
return null;
}
async Task<dynamic> WaitForWorld(dynamic timeoutMs)
{
if (Truth(timeoutMs < 0))
{
return false;
}
var started = Environment.TickCount;
while (!(Truth(UO.Connected())))
{
if (Truth((Environment.TickCount - started) * 1000.0 >= timeoutMs))
{
return false;
}
await Delay(50);
}
return true;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsOnline:bridge.IsOnline().
Внутрішній код реалізації, не самостійний скрипт.
case "connected": return new InjectionValue(bridge.IsOnline());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.ConnectedTime();Повертає календарну позначку останнього успішного входу персонажа у світ. Допомагає зрозуміти, чи змінилося підключення за час очікування або паузи, перш ніж продовжувати колишнє завдання.
Параметрів немає.
double: число днів від 1899-12-30, дробова частина - час доби (OLE Automation date). 0 означає, що цей власник сеансу ще не входив у світ. Після вимкнення остання позначка входу зберігається. Це не bool і не тривалість у секундах.
- Аргументів немає. Історія спільна для скриптів одного власника сеансу: пізній запуск, пауза та закриття IDE не змінюють позначки. Новий процес сеансу розпочинає нову історію; це не журнал усіх підключень.
- Невдала спроба входу без появи персонажа у світі не вважається успішним підключенням. Повторні перевірки офлайн не змінюють час вимкнення. Для поточного стану використовуйте UO.Connected(), а не ненульову дату.
- Позначки беруться по локальному годиннику комп'ютера. Різниця, помножена на 86400, дає календарні секунди; зміна годин/часового поясу може спотворити результат. Для тайм-аут використовуйте монотонний Timer(). Окремі дзвінки не утворюють атомарний знімок; однакова позначка не є унікальним ID підключення.
- UO.Wait приймає мілісекунди. Автопауза при розриві зв'язку та ручна пауза затримують виконання прикладів: перевірка таймауту продовжиться лише після зняття паузи. Ці команди самі не знімають паузу і не включають автореконнект.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.ConnectedTime();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- 0 перевіряє відсутність входів саме у цьому процесі. Connect використовує збережений профіль і лише вимагає вхід. Цей приклад навмисно не поновлює вже завершене підключення.
- UO.Wait приймає мілісекунди. Автопауза при розриві зв'язку та ручна пауза затримують виконання прикладів: перевірка таймауту продовжиться лише після зняття паузи. Ці команди самі не знімають паузу і не включають автореконнект.
if (Truth(UO.ConnectedTime() == 0))
{
UO.Connect();
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- 30.0 - бюджет спостереження в секундах Timer; 250 — інтервал UO.Wait у мс. Після зміни позначки входу CancelWaitTarget очищає колишню відкладену мету. За відсутності нового входу цикл закінчується без цієї дії.
- UO.Wait приймає мілісекунди. Автопауза при розриві зв'язку та ручна пауза затримують виконання прикладів: перевірка таймауту продовжиться лише після зняття паузи. Ці команди самі не знімають паузу і не включають автореконнект.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var login = UO.ConnectedTime();
var started = Environment.TickCount;
while (Truth(Environment.TickCount - started < 30.0))
{
if (Truth(UO.Connected()) && Truth(UO.ConnectedTime() != login))
{
UO.CancelWaitTarget();
return null;
}
await Delay(250);
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- SameConnection(login) повертає bool. Зберігаємо позначку, чекаємо 500 мс, потім забороняємо продовження за відсутності зв'язку або зміни входу. Це повторна перевірка, а не гарантія доступності сервера.
- UO.Wait приймає мілісекунди. Автопауза при розриві зв'язку та ручна пауза затримують виконання прикладів: перевірка таймауту продовжиться лише після зняття паузи. Ці команди самі не знімають паузу і не включають автореконнект.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var login = UO.ConnectedTime();
await Delay(500);
if (!(Truth(SameConnection(login))))
{
return null;
}
UO.AddToSystemJournal("Same connection; continue this batch");
return null;
}
dynamic SameConnection(dynamic login)
{
return Truth(login != 0) && Truth(UO.Connected()) && Truth(UO.ConnectedTime() == login);
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.UpdateConnectionState:UpdateConnectionState().
Внутрішній код реалізації, не самостійний скрипт.
case "connectedtime":
UpdateConnectionState();
return new InjectionValue(state.ConnectedTime == default(DateTime) ? 0d : state.ConnectedTime.ToOADate());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Disconnect();Вимикає поточний чи встановлюваний транспорт клієнта та готує скрипти до перепідключення.
Параметрів немає.
void - значення, що повертається немає.
- Якщо автоматичний reconnect вимкнений, BeginScriptControlledDisconnect зберігає виконуючий виклик worker для наступного UO.Connect. Менеджерська сесія отримує RequestDisconnect.
- Самостійний клієнт викликає Socket.Disconnect та PrepareForReconnect. При увімкненому глобальному reconnect явно планує збережений перехід сцени. У LoginScene очищає popup та повертає Main.
- Повернення void не повідомляє результату перепідключення. Стан з'єднання читається окремо; Налаштування автоматичного reconnect можуть ініціювати новий вхід.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.Disconnect");
UO.Disconnect();Параметри та порядок виконання:
- Команда скасовує і активний, і транспорт, що встановлюється.
UO.Disconnect();Параметри та порядок виконання:
- При вимкненому AR зухвалий worker може сам дійти до Connect.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.Disconnect();
await Delay(1000);
UO.Connect();
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Параметри та порядок виконання:
- Умова використовує локальний прапор поточної сесії.
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.Connected()))
{
UO.Disconnect();
}
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.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.DisconnectClient:bridge.DisconnectClient().
Внутрішній код реалізації, не самостійний скрипт.
case "disconnect": bridge.DisconnectClient(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.DisconnectedTime();Повертає календарну позначку останньої втрати ігрового підключення. Потрібна для діагностики обриву та оцінки тривалості завершеного підключення, а не для визначення кількості спроб входу.
Параметрів немає.
double: кількість днів від 1899-12-30 із дробовою частиною доби. Після розриву з’єднання — час, коли клієнт помітив відключення; до першого розриву — час створення власника сеансу. Це не прапорець офлайн і не мілісекунди.
- Аргументів немає. Історія спільна для скриптів одного власника сеансу: пізній запуск, пауза та закриття IDE не змінюють позначки. Новий процес сеансу розпочинає нову історію; це не журнал усіх підключень.
- Невдала спроба входу без появи персонажа у світі не вважається успішним підключенням. Повторні перевірки офлайн не змінюють час вимкнення. Для поточного стану використовуйте UO.Connected(), а не ненульову дату.
- Позначки беруться по локальному годиннику комп'ютера. Різниця, помножена на 86400, дає календарні секунди; зміна годин/часового поясу може спотворити результат. Для тайм-аут використовуйте монотонний Timer(). Окремі дзвінки не утворюють атомарний знімок; однакова позначка не є унікальним ID підключення.
- UO.Wait приймає мілісекунди. Автопауза при розриві зв'язку та ручна пауза затримують виконання прикладів: перевірка таймауту продовжиться лише після зняття паузи. Ці команди самі не знімають паузу і не включають автореконнект.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.DisconnectedTime();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- CompletedConnectionSeconds() повертає секунди або -1, якщо немає завершеного підключення або вхід змінився між читаннями. 86400 - секунд на добу. Перераховується лише остання пара вхід/обрив; історію всіх сеансів функція не підсумовує.
- UO.Wait приймає мілісекунди. Автопауза при розриві зв'язку та ручна пауза затримують виконання прикладів: перевірка таймауту продовжиться лише після зняття паузи. Ці команди самі не знімають паузу і не включають автореконнект.
var seconds = CompletedConnectionSeconds();
if (Truth(seconds >= 0))
{
UO.AddToSystemJournal("Completed connection seconds: " + Convert.ToString(seconds));
}
dynamic CompletedConnectionSeconds()
{
var login = UO.ConnectedTime();
var loss = UO.DisconnectedTime();
if (Truth(login == 0) || Truth(loss < login) || Truth(UO.Connected()))
{
return -1;
}
if (Truth(UO.ConnectedTime() != login))
{
return -1;
}
return (loss - login) * 86400.0;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- При включеній автопаузі цей контролер одразу виходить; для роботи офлайн вона має бути заздалегідь вимкнена. Після UO.Wait(1000) повторно перевіряються офлайн та колишня позначка обриву. Connect не гарантує успіх і не замінює налаштування автореконнекту.
- UO.Wait приймає мілісекунди. Автопауза при розриві зв'язку та ручна пауза затримують виконання прикладів: перевірка таймауту продовжиться лише після зняття паузи. Ці команди самі не знімають паузу і не включають автореконнект.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.GetPauseScriptOnDisconnectStatus()))
{
return null;
}
if (Truth(UO.Connected()))
{
return null;
}
var loss = UO.DisconnectedTime();
await Delay(1000);
if (!(Truth(UO.Connected())) && Truth(UO.DisconnectedTime() == loss))
{
UO.Connect();
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Порівняння з previousLoss помічає обрив навіть після повторного входу, що вже відбувся. 30 секунд обмежують спостереження при скрипті, що виконується, WaitAsync(250) звільняє потік між перевірками. Декілька обривів можуть об'єднатися в одне повідомлення.
- UO.Wait приймає мілісекунди. Автопауза при розриві зв'язку та ручна пауза затримують виконання прикладів: перевірка таймауту продовжиться лише після зняття паузи. Ці команди самі не знімають паузу і не включають автореконнект.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var previousLoss = UO.DisconnectedTime();
var started = Environment.TickCount;
while (Truth(Environment.TickCount - started < 30.0))
{
if (Truth(UO.DisconnectedTime() != previousLoss))
{
UO.AddToSystemJournal("A connection loss occurred; check the session");
return null;
}
await Delay(250);
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.UpdateConnectionState:UpdateConnectionState().
Внутрішній код реалізації, не самостійний скрипт.
case "disconnectedtime":
UpdateConnectionState();
return new InjectionValue(state.DisconnectedTime.ToOADate());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GameServerIPString();Читає настроєну адресу сервера із глобальних налаштувань клієнта.
Параметрів немає.
string — Settings.GlobalSettings.IP або порожній рядок, якщо значення відсутнє.
- GameServerAddress у поточному bridge читає глобальне налаштування IP. Це не DNS/мережевий запит та не перевірка адреси фактичного peer; менеджерська сесія може мати власні параметри з'єднання.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.GameServerIPString();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- Повертається поточне глобальне налаштування IP.
var address = UO.GameServerIPString();
UO.Print(address);Параметри та порядок виконання:
- Порожнє значення означає відсутність налаштування, а не виміряну мережну відмову.
return RunScenario();
object? RunScenario()
{
var address = UO.GameServerIPString();
if (Truth(Len(address) == 0))
{
UO.Print("no configured address");
}
return null;
}
int Len(object? value) => Convert.ToString(value)?.Length ?? 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Змінна зберігає рядок, отриманий першим дзвінком.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var address = UO.GameServerIPString();
await Delay(100);
UO.Print(address);
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GameServerAddress:bridge.GameServerAddress.
Внутрішній код реалізації, не самостійний скрипт.
case "gameserveripstring": return new InjectionValue(bridge.GameServerAddress);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetCharsListForShard();Повертає відомі клієнту імена персонажів поточного shard.
Параметрів немає.
Array рядків. Немає відомих імен та поточного персонажа – порожній масив.
- У менеджерській сесії читається SessionControl. Characters. У standalone спочатку використовуються LastCharacterManager для account/server; якщо список порожній, читається LoginScene. Characters без порожніх імен; потім використовується поточний Player.Name як єдиний елемент.
- Це відомі локальні імена; команда не запитує повний список сервера і не гарантує свіжість кеша.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.GetCharsListForShard();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- Цикл працює із фактичним масивом відомих імен.
var names = UO.GetCharsListForShard();
for (int i = (int)(0); i <= ArrayLength(names)-1; i += (int)(1))
{
UO.Print(names[i]);
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;Параметри та порядок виконання:
- Індекс 0 використовується лише для непустого масиву.
return RunScenario();
object? RunScenario()
{
var names = UO.GetCharsListForShard();
if (Truth(ArrayLength(names) > 0))
{
UO.Print(names[0]);
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Розмір списку не повідомляє кількість слотів облікового запису на сервері.
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 names = UO.GetCharsListForShard();
UO.Print(Convert.ToString(ArrayLength(names)));
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.StringArray:StringArray(bridge.GetCharactersForCurrentShard()). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetCharactersForCurrentShard:bridge.GetCharactersForCurrentShard().
Внутрішній код реалізації, не самостійний скрипт.
case "getcharslistforshard": return StringArray(bridge.GetCharactersForCurrentShard());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetPing();
int UO.GetPing(object? timeout);Читає затримку відповіді сервера. Без аргументу використовує останній вимір; з тайм-аутом запитує свіжу відповідь.
-
timeout- timeout / timeoutMS - час очікування однієї спроби в мілісекундах, перетворюється на int. Негативне значення обмежується нулем. При 0 запит може бути надісланий, але очікування відповіді немає; це не безкінечний тайм-аут.
int, мілісекунди. Значення >= 0 — вимір; 0 мс теж допустимі. -1 — виміру немає: для форми з аргументом запит не виконано або відповідь не отримано вчасно. Це НЕ bool; не можна вважати 0 невдачею, а -1 успіхом.
- GetPing() нічого не відправляє і негайно читає останнє ServerPing. Старе значення саме собою не доводить, що зв'язок зараз справний. Це останній серверний echo-вимір, а не згладжений/резервний TCP ping індикатора і не ICMP Ping(host). GetPing(timeout) чекає нову відповідь і потім читає останній серверний вимір.
- Очікування затримує скрипт, що викликає, а не підтверджує ігрову дію. Команда не перепідключається та не змінює налаштування мережі. Сервер може не відповідати на echo: невдача сама по собі не доводить розриву зв'язку. Термін залежить також від планування потоків; не викликайте активної перевірки на кожному кадрі. Зупинка скрипта перериває очікування.
- UO.GetPing · UO.CheckLag · UO.IsOnline
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetPing();
UO.Print("GetPing: " + Convert.ToString(result));Параметри та порядок виконання:
- Читання кешу без нового запиту. Приклад вибирає 50 або 200 мс очікування самого скрипта при порозі 250 мс. Невідомий вимір обробляється окремо. Ці числа – приклад налаштування, не універсальне обмеження сервера.
var pingMs = UO.GetPing();
if (Truth(pingMs < 0))
{
UO.Print("No server latency sample");
return null;
}
var delayMs = 50;
if (Truth(pingMs > 250))
{
delayMs = 200;
}
await Delay(delayMs);
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- 1000 - максимум очікування свіжої відповіді в мілісекундах. При -1 процедура закінчується. При успішному вимірі запитується Hiding; відповідь echo не доводить успішного застосування навички.
return RunScenario();
object? RunScenario()
{
var pingMs = UO.GetPing(1000);
if (Truth(pingMs == -1))
{
UO.Print("No fresh server response");
return null;
}
UO.UseSkill("Hiding");
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- MeanPing(samples, timeoutMs) показана повністю: 3 спроби по 500 мс; невдалі виміри виключаються із середнього. За відсутності успішних повертається - 1. samples обмежено 1–10; UO.Wait(100) між спробами зменшує частоту запитів.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var meanMs = await MeanPing(3, 500);
if (Truth(meanMs < 0))
{
UO.Print("No successful samples");
}
else
{
UO.Print("Measured mean, ms: " + Convert.ToString(meanMs));
}
return null;
}
async Task<dynamic> MeanPing(dynamic samples, dynamic timeoutMs)
{
if (Truth(samples < 1) || Truth(samples > 10))
{
return -1;
}
var total = 0;
var count = 0;
for (int i = (int)(1); i <= samples; i += (int)(1))
{
var current = UO.GetPing(timeoutMs);
if (Truth(current >= 0))
{
total = total + current;
count = count + 1;
}
await Delay(100);
}
if (Truth(count == 0))
{
return -1;
}
return total / count;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.GetPing. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetPing:bridge.GetPing().
Внутрішній код реалізації, не самостійний скрипт.
public int GetPing() => bridge.GetPing();Параметри: timeout (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.GetPing. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetPing:bridge.GetPing(Math.Max(0, NumberConversions.ToInt(timeout))). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(timeout).
Внутрішній код реалізації, не самостійний скрипт.
public int GetPing(InjectionValue timeout) => bridge.GetPing(Math.Max(0, NumberConversions.ToInt(timeout)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsOnline();Перевіряє, чи поточний сеанс знаходиться в ігровому світі і чи відкрито його ігрове з'єднання. Використовуйте перед дією персонажа або під час очікування входу.
Параметрів немає.
int. 1 - одночасно є гравець, завантажена карта та активний ігровий сокет; інакше 0. Відкрите вікно клієнта, список персонажів або TCP-з'єднання на етапі входу ще не означають 1. Числовий прапор int: 1 (умова виконана), 0 (умова не виконано). Це числовий прапор: в C# перевіряйте result != 0 або result == 0. Пряме порівняння int з true/false та if (result) неприпустимо.
Результат команди — числовий прапор: 1 означає виконану умову, 0 — невиконану. Після var result = команда (...) перевіряйте if (result != 0) або if (result == 0). Збережіть результат одного виклику: повторний виклик може виконати дію знову або прочитати стан, що вже змінився.
- Параметрів немає: serial, type, ім'я персонажа та IP передавати не можна. UO.Online(), UO.Connected() і UO.IsOnline() перевіряють те саме. Це стан даного власника сеансу, а чи не іншого профілю менеджера.
- Команда лише читає локальний стан. Вона не надсилає ping, не підключається, не знімає паузу і не перевіряє доступність інтернету. Після читання зв'язок може змінитися; 1 не гарантує успіху наступної дії.
- UO.Wait приймає мілісекунди. Автопауза при розриві зв'язку та ручна пауза затримують виконання прикладів: перевірка таймауту продовжиться лише після зняття паузи. Ці команди самі не знімають паузу і не включають автореконнект.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.IsOnline();
UO.Print("IsOnline: " + Convert.ToString(result));Параметри та порядок виконання:
- false рівнозначно 0. return завершує Main до UseSkill. Hiding - єдиний параметр UseSkill, назва навички. При 1 скрипт лише просить застосування навички; результат залежить від стану персонажа та сервера.
- Команда лише читає локальний стан. Вона не надсилає ping, не підключається, не знімає паузу і не перевіряє доступність інтернету. Після читання зв'язок може змінитися; 1 не гарантує успіху наступної дії.
if (Truth(Truth(UO.IsOnline()) == false))
{
return null;
}
UO.UseSkill("Hiding");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Порівняння з 0 перевіряє поточне підключення, а не налаштування автореконнекта. Connect без аргументів використовує збережені налаштування та не чекає завершення входу. Повторна команда під час розпочатого входу не повинна створювати другий сеанс.
- Команда лише читає локальний стан. Вона не надсилає ping, не підключається, не знімає паузу і не перевіряє доступність інтернету. Після читання зв'язок може змінитися; 1 не гарантує успіху наступної дії.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.IsOnline() == 0))
{
UO.Connect();
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- WaitForWorld(timeoutMs) — повністю показана функція користувача, не вбудована команда. 5000 - бюджет у мс, UO.Wait(50) - інтервал перевірок. Негативне значення дає false; 0 дозволяє лише готовий світ. Timer вимірює секунди, тому різниця множиться на 1000. Автопауза має бути заздалегідь вимкнена, інакше Main виходить. Функція не викликає Connect і не скасовує розпочатий вхід при закінченні часу.
- Команда лише читає локальний стан. Вона не надсилає ping, не підключається, не знімає паузу і не перевіряє доступність інтернету. Після читання зв'язок може змінитися; 1 не гарантує успіху наступної дії.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
if (Truth(UO.GetPauseScriptOnDisconnectStatus()))
{
return null;
}
if (Truth(await WaitForWorld(5000)))
{
UO.UseSkill("Hiding");
}
return null;
}
async Task<dynamic> WaitForWorld(dynamic timeoutMs)
{
if (Truth(timeoutMs < 0))
{
return false;
}
var started = Environment.TickCount;
while (!(Truth(UO.IsOnline())))
{
if (Truth((Environment.TickCount - started) * 1000.0 >= timeoutMs))
{
return false;
}
await Delay(50);
}
return true;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.IsOnline. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsOnline:bridge.IsOnline().
Внутрішній код реалізації, не самостійний скрипт.
public int IsOnline() => bridge.IsOnline();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Online();Перевіряє, чи поточний сеанс знаходиться в ігровому світі і чи відкрито його ігрове з'єднання. Використовуйте перед дією персонажа або під час очікування входу.
Параметрів немає.
int. 1 - одночасно є гравець, завантажена карта та активний ігровий сокет; інакше 0. Відкрите вікно клієнта, список персонажів або TCP-з'єднання на етапі входу ще не означають 1. Числовий прапор int: 1 (умова виконана), 0 (умова не виконано). Це числовий прапор: в C# перевіряйте result != 0 або result == 0. Пряме порівняння int з true/false та if (result) неприпустимо.
Результат команди — числовий прапор: 1 означає виконану умову, 0 — невиконану. Після var result = команда (...) перевіряйте if (result != 0) або if (result == 0). Збережіть результат одного виклику: повторний виклик може виконати дію знову або прочитати стан, що вже змінився.
- Параметрів немає: serial, type, ім'я персонажа та IP передавати не можна. UO.Online(), UO.Connected() і UO.IsOnline() перевіряють те саме. Це стан даного власника сеансу, а чи не іншого профілю менеджера.
- Команда лише читає локальний стан. Вона не надсилає ping, не підключається, не знімає паузу і не перевіряє доступність інтернету. Після читання зв'язок може змінитися; 1 не гарантує успіху наступної дії.
- UO.Wait приймає мілісекунди. Автопауза при розриві зв'язку та ручна пауза затримують виконання прикладів: перевірка таймауту продовжиться лише після зняття паузи. Ці команди самі не знімають паузу і не включають автореконнект.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.Online();
UO.Print("Online: " + Convert.ToString(result));Параметри та порядок виконання:
- false рівнозначно 0. return завершує Main до UseSkill. Hiding - єдиний параметр UseSkill, назва навички. При 1 скрипт лише просить застосування навички; результат залежить від стану персонажа та сервера.
- Команда лише читає локальний стан. Вона не надсилає ping, не підключається, не знімає паузу і не перевіряє доступність інтернету. Після читання зв'язок може змінитися; 1 не гарантує успіху наступної дії.
if (Truth(Truth(UO.Online()) == false))
{
return null;
}
UO.UseSkill("Hiding");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Порівняння з 0 перевіряє поточне підключення, а не налаштування автореконнекта. Connect без аргументів використовує збережені налаштування та не чекає завершення входу. Повторна команда під час розпочатого входу не повинна створювати другий сеанс.
- Команда лише читає локальний стан. Вона не надсилає ping, не підключається, не знімає паузу і не перевіряє доступність інтернету. Після читання зв'язок може змінитися; 1 не гарантує успіху наступної дії.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Online() == 0))
{
UO.Connect();
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- WaitForWorld(timeoutMs) — повністю показана функція користувача, не вбудована команда. 5000 - бюджет у мс, UO.Wait(50) - інтервал перевірок. Негативне значення дає false; 0 дозволяє лише готовий світ. Timer вимірює секунди, тому різниця множиться на 1000. Автопауза має бути заздалегідь вимкнена, інакше Main виходить. Функція не викликає Connect і не скасовує розпочатий вхід при закінченні часу.
- Команда лише читає локальний стан. Вона не надсилає ping, не підключається, не знімає паузу і не перевіряє доступність інтернету. Після читання зв'язок може змінитися; 1 не гарантує успіху наступної дії.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
if (Truth(UO.GetPauseScriptOnDisconnectStatus()))
{
return null;
}
if (Truth(await WaitForWorld(5000)))
{
UO.UseSkill("Hiding");
}
return null;
}
async Task<dynamic> WaitForWorld(dynamic timeoutMs)
{
if (Truth(timeoutMs < 0))
{
return false;
}
var started = Environment.TickCount;
while (!(Truth(UO.Online())))
{
if (Truth((Environment.TickCount - started) * 1000.0 >= timeoutMs))
{
return false;
}
await Delay(50);
}
return true;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [Online]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsOnline:bridge.IsOnline().
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
() => bridge.IsOnline()Створення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Resend();Надсилає запит повторної синхронізації світу.
Параметрів немає.
void - значення немає. Викликайте окремим рядком; завершення не підтверджує дію сервера.
- Resync відправляє NetClient.Socket.Send_Resync на ігровому потоці. Це запит на оновлення, не перепідключення і не підтвердження отримання даних.
- У прикладах UO.Wait задає лише паузу скрипта; закінчення паузи не доводить виконання запиту сервером.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.Resend");
UO.Resend();Параметри та порядок виконання:
- Надсилає запит повторної синхронізації світу.
UO.Resend();Параметри та порядок виконання:
- Resync відправляє NetClient.Socket.Send_Resync на ігровому потоці. Це запит на оновлення, не перепідключення і не підтвердження отримання даних.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.IsOnline()))
{
UO.Resend();
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- У прикладах UO.Wait задає лише паузу скрипта; закінчення паузи не доводить виконання запиту сервером.
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.Resend();
UO.Wait(500);
UO.Print(UO.GetX());
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Resync:bridge.Resync().
Внутрішній код реалізації, не самостійний скрипт.
case "resend": bridge.Resync(); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.ShardName();Читає ім'я шарда.
Параметрів немає.
string - текст поля bridge. ShardName; без доступних даних можливий порожній рядок. Це не ознака підключення і не числової ID.
- ExecuteClientApiCompatibility повертає bridge.ShardName без зміни вибору профілю або сервера.
- Читає поточний локальний стан. Пакету, target та автоматичного оновлення немає; окремі читання можуть бачити різні стани.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.ShardName();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- Читає ім'я шарда.
var value = UO.ShardName();
UO.Print(value);Параметри та порядок виконання:
- ExecuteClientApiCompatibility повертає bridge.ShardName без зміни вибору профілю або сервера.
return RunScenario();
object? RunScenario()
{
var value = UO.ShardName();
if (Truth(Len(value) > 0))
{
UO.TextPrint(value);
}
return null;
}
int Len(object? value) => Convert.ToString(value)?.Length ?? 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Читає поточний локальний стан. Пакету, target та автоматичного оновлення немає; окремі читання можуть бачити різні стани.
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 before = UO.ShardName();
UO.Wait(500);
var after = UO.ShardName();
UO.Print(before = after);
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ShardName:bridge.ShardName.
Внутрішній код реалізації, не самостійний скрипт.
case "shardname":
case "profileshardname": return new InjectionValue(bridge.ShardName);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.ShardPath();Читає шлях поточного профілю.
Параметрів немає.
string - текст поля bridge. CurrentProfilePath; без доступних даних можливий порожній рядок. Це не ознака підключення і не числової ID.
- ExecuteClientApiCompatibility повертає bridge.CurrentProfilePath без зміни вибору профілю або сервера.
- Читає поточний локальний стан. Пакету, target та автоматичного оновлення немає; окремі читання можуть бачити різні стани.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.ShardPath();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- Читає шлях поточного профілю.
var value = UO.ShardPath();
UO.Print(value);Параметри та порядок виконання:
- ExecuteClientApiCompatibility повертає bridge.CurrentProfilePath без зміни вибору профілю або сервера.
return RunScenario();
object? RunScenario()
{
var value = UO.ShardPath();
if (Truth(Len(value) > 0))
{
UO.TextPrint(value);
}
return null;
}
int Len(object? value) => Convert.ToString(value)?.Length ?? 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Читає поточний локальний стан. Пакету, target та автоматичного оновлення немає; окремі читання можуть бачити різні стани.
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 before = UO.ShardPath();
UO.Wait(500);
var after = UO.ShardPath();
UO.Print(before = after);
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CurrentProfilePath:bridge.CurrentProfilePath.
Внутрішній код реалізації, не самостійний скрипт.
case "shardpath":
case "clientprofilepath": return new InjectionValue(bridge.CurrentProfilePath);ClassicUO — Bad Newbie & C# Scripts IDE