Repository navigation
UO Topic character Part 3
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Головна · C# · IDE · Команди UO · За абеткою · Приклади · Мови
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetSex();Читає код статі та раси з моделі клієнта.
Параметрів немає.
int — сумісний код: 0=human male, 1=human female, 2=elf male, 3=elf female, 4=gargoyle male, 5=gargoyle Без персонажа також 0, тому для наявності перевіряйте Exists(self). Це не простий bool female.
- Читаються вже отримані локальні дані. Запит не відкриває статус і не змушує сервер надіслати оновлення. Після смерті, переходу на карту або видалення об'єкта значення можуть змінитися між двома викликами.
- C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetSex();
UO.Print("GetSex: " + Convert.ToString(result));Параметри та порядок виконання:
- Виклик без аргументів відноситься до self. Код статі та раси зберігається у value.
- Convert.ToString перетворює число для виведення і не змінює значення результату.
var value = UO.GetSex();
UO.Print("GetSex: " + Convert.ToString(value));Параметри та порядок виконання:
- Значення читається одного разу без аргументів. Код статі та раси використовується у наведеному розрахунку або умові.
- Числові пороги — приклад умов скрипту, а чи не нові межі клієнта. Поле зберігає серверні одиниці та обмеження, описані вище.
return RunScenario();
object? RunScenario()
{
var value = UO.GetSex();
if (Truth(value == 4) || Truth(value == 5))
{
UO.Print("Gargoyle sex/race code");
}
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(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()
{
var before = UO.GetSex();
await Delay(1000);
var after = UO.GetSex();
if (Truth(before != after))
{
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
}
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.
Параметри: Немає параметрів.
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetSex]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Sex:bridge.Sex.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
() => bridge.SexСтворення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetStam();
dynamic UO.GetStam(object? objID);Читає поточну витривалість із локальної моделі.
-
objID— Необов'язковий об'єкт у показаних формах: serial числом/hex-рядком, self, lasttarget або зареєстроване ім'я AddObject. Це не type. Без аргументу читається self. Невідомий текст у деяких формах викликає помилку перетворення; перевіряйте ім'я перед викликом.
int — значення поля Stamina, не відсоток і не bool. 0 буває справжнім значенням або ознакою відсутніх даних. Нульовий максимум не можна використовувати як дільник. У чужого mobile значення можуть бути невідомі. HP/HitsMax можуть містити відносну шкалу сервера замість точних очок. HP=0 не доводить смерть; для цього є Dead/IsDead.
- Команда не відкриває status і не вимагає оновлення сервера. Клієнт лише читає вже завантажені дані. Не змінює характеристики та не відправляє пакети.
- Результат – окреме читання. Світ може змінитися між Exists та наступним викликом; Кілька запитів не утворюють атомарний знімок.
- Під час читання об'єкта World.Get відкидає відсутній або IsDestroyed і виходить 0. HP/HitsMax читаються в Entity, включаючи предмети з цими полями; Mana/Stamina – тільки у Mobile. Без аргументу читається self. Однойменний варіант без параметрів не обов'язково має варіант з ID: дивіться сигнатури.
- Читання без аргументів теж повертає 0 для відсутнього чи знищеного Player. Це стосується і прямих Mana/Stamina та їх максимумів, а не тільки форм через World.Get. Присутній мертвий персонаж може зберігати значення.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetStam();
UO.Print("GetStam: " + Convert.ToString(result));Параметри та порядок виконання:
- Виклик без аргументів читає self. value зберігає одне число, Convert.ToString перетворює його лише повідомлення.
var value = UO.GetStam();
UO.Print("GetStam: " + Convert.ToString(value));Параметри та порядок виконання:
- Показано прикладний поріг або розрахунок цього поля. Числа в умові – налаштування прикладу, не межі сервера. Перед розподілом на максимум перевіряється його позитивність.
return RunScenario();
object? RunScenario()
{
var value = UO.GetStam();
if (Truth(value < 15))
{
UO.Print("Known stamina is below the movement threshold of 15");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- lasttarget - раніше вибраний об'єкт; Exists перевіряє наявність. obj - єдиний параметр ReadValue. Функція повертає кількість команди без змін та наведена повністю.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.Exists("lasttarget")))
{
var value = ReadValue("lasttarget");
UO.Print("Selected value: " + Convert.ToString(value));
}
return null;
}
dynamic ReadValue(dynamic obj)
{
return UO.GetStam(obj);
}
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 [GetStam]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Stamina:bridge.Stamina.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
() => bridge.StaminaСтворення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Параметри: objID (Any)
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetStamina:bridge.GetStamina(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Stamina:bridge.Stamina.
Внутрішній код реалізації, не самостійний скрипт.
case "getstam": return new InjectionValue(arguments.Length > 0 ? bridge.GetStamina(Arg(0)) : bridge.Stamina);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetStamina();Читає поточну витривалість із локальної моделі.
Параметрів немає.
int — значення поля Stamina, не відсоток і не bool. 0 буває справжнім значенням або ознакою відсутніх даних. Нульовий максимум не можна використовувати як дільник. У чужого mobile значення можуть бути невідомі. HP/HitsMax можуть містити відносну шкалу сервера замість точних очок. HP=0 не доводить смерть; для цього є Dead/IsDead.
- Команда не відкриває status і не вимагає оновлення сервера. Клієнт лише читає вже завантажені дані. Не змінює характеристики та не відправляє пакети.
- Результат – окреме читання. Світ може змінитися між Exists та наступним викликом; Кілька запитів не утворюють атомарний знімок.
- Під час читання об'єкта World.Get відкидає відсутній або IsDestroyed і виходить 0. HP/HitsMax читаються в Entity, включаючи предмети з цими полями; Mana/Stamina – тільки у Mobile. Без аргументу читається self. Однойменний варіант без параметрів не обов'язково має варіант з ID: дивіться сигнатури.
- Читання без аргументів теж повертає 0 для відсутнього чи знищеного Player. Це стосується і прямих Mana/Stamina та їх максимумів, а не тільки форм через World.Get. Присутній мертвий персонаж може зберігати значення.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetStamina();
UO.Print("GetStamina: " + Convert.ToString(result));Параметри та порядок виконання:
- Виклик без аргументів читає self. value зберігає одне число, Convert.ToString перетворює його лише повідомлення.
var value = UO.GetStamina();
UO.Print("GetStamina: " + Convert.ToString(value));Параметри та порядок виконання:
- Показано прикладний поріг або розрахунок цього поля. Числа в умові – налаштування прикладу, не межі сервера. Перед розподілом на максимум перевіряється його позитивність.
return RunScenario();
object? RunScenario()
{
var value = UO.GetStamina();
if (Truth(value < 15))
{
UO.Print("Known stamina is below the movement threshold of 15");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- У цього імені немає форми з ID. ReadValue без параметрів читає self; два дзвінки розділені UO.Wait(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()
{
var before = ReadValue();
await Delay(1000);
var after = ReadValue();
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
return null;
}
dynamic ReadValue()
{
return UO.GetStamina();
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetStamina]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Stamina:bridge.Stamina.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
() => bridge.StaminaСтворення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetStatLockState(object? statNum);Читає локальний режим зміни характеристики.
-
statNum- Обов'язковий номер характеристики: 0 — STR, 1 — DEX, 2 — INT. Це не її поточне значення і назва рядком.
int: "0" - підвищення, "1" - зниження, "2" - блокування. Це код режиму, що не true/false. Для номера поза 0..2 повертається −1. Якщо персонаж відсутній, допустимий номер повертає 0 за замовчуванням; це не є підтвердженням стану сервера.
- Читання виконується через Invoke на ігровому потоці за отриманими даними; мережні пакети не надсилаються. Навичка не використовується і не тренується. Два запити – два окремі знімки.
- Обов'язковий номер характеристики: 0 — STR, 1 — DEX, 2 — INT. Це не її поточне значення і назва рядком.
- ExecuteClientApiCompatibility вибирає гілку команди. Text читає селектор навички, Arg - числові номери та режими. Неперетворюваний аргумент може завершити виклик помилкою перетворення.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetStatLockState(0);
UO.Print("GetStatLockState: " + Convert.ToString(result));Параметри та порядок виконання:
- У прикладі явно задані selector і при записі mode. Перший рядок вибирає навичку на ім'я або характеристику за номером. Print лише виводить результат.
var selector = 0;
var mode = UO.GetStatLockState(selector);
UO.Print(Convert.ToString(mode));Параметри та порядок виконання:
- Поріг 95.1 та режими 0/1/2 задані для прикладу. −1 перевіряється до зміни режиму. Після запису читається лише локальна копія; це не очікування відповіді сервера.
return RunScenario();
object? RunScenario()
{
var mode = UO.GetStatLockState(0);
if (Truth(mode == 2))
{
UO.Print("Locked");
}
else
{
if (Truth(mode == -1))
{
UO.Print("Unknown selector");
}
else
{
UO.Print("Mode: " + Convert.ToString(mode));
}
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Весь код помічника наведено нижче Main. selector вибирає навичку/характеристику, mode визначає режим запису. ReadValue/ReadMode повертають вихідне число; ApplyMode перевіряє аргументи, виконує дію та не повертає значення. UO.Wait(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()
{
var before = ReadMode(0);
await Delay(1000);
var after = ReadMode(0);
UO.Print(Convert.ToString(before) + " -> " + Convert.ToString(after));
return null;
}
dynamic ReadMode(dynamic selector)
{
return UO.GetStatLockState(selector);
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: statNum (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetStatLockState:bridge.GetStatLockState(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Внутрішній код реалізації, не самостійний скрипт.
case "getstatlockstate": return new InjectionValue(bridge.GetStatLockState(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.GetStatus(object? id);Надсилає серверний запит статусу вказаного mobile.
-
id— Serial об'єкта або підтримуване ім'я self/backpack/lasttarget/збереженого об'єкта; числові рядки та 0x-рядки дозволяються runtime.
void - значення, що повертається немає.
- string-форма дозволяє ім'я через GetObject; int-форма передає serial прямо. Bridge викликає GameActions.RequestMobileStatus(world,serial,true). Команда не повертає дані та не чекає відповіді. Читайте GetHP/GetMaxHP та інші getters окремо після оновлення світу.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.GetStatus");
UO.GetStatus("self");Параметри та порядок виконання:
- Надсилається запит статусу, без очікування відповіді.
UO.GetStatus("self");Параметри та порядок виконання:
- int-форма надсилає той самий запит.
return RunScenario();
object? RunScenario()
{
var id = UO.Self();
UO.GetStatus(id);
return null;
}Параметри та порядок виконання:
- Пауза не гарантує нової відповіді; getters повертають поточну локальну модель.
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.GetStatus("self");
await Delay(500);
UO.Print(Convert.ToString(UO.GetHP()) + "/" + Convert.ToString(UO.GetMaxHP()));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: id (Integer/String)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.GetStatus. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetStatus:bridge.GetStatus(id).
Внутрішній код реалізації, не самостійний скрипт.
public void GetStatus(int id) => bridge.GetStatus(id);Параметри: id (Integer/String)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.GetStatus. -
InjectionScript.Runtime.InjectionApiUO.GetStatus:GetStatus(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Внутрішній код реалізації, не самостійний скрипт.
public void GetStatus(string id) => GetStatus(GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetStr();
int UO.GetStr(object? objID);Читає поточну силу (Strength, Convert. ToString) персонажа.
-
objID— ObjID тільки у показаній формі з одним аргументом: serial персонажа числом, десятковим/0x hex-рядком, "self", "lasttarget" або ім'ям AddObject. Вибирає об'єкт, не graphic/type. Без аргументів читається поточний персонаж.
int — поточні окуляри характеристики, 0..65535 у моделі клієнта; не відсоток, ID, навичка, режим блокування або bool. 0 також означає відсутність/видалення персонажа або недоступний об'єкт. Порівнюйте з числовою вимогою, не == true. Це не межа характеристики та не гарантоване базове значення без модифікаторів.
- Підтримуються () для self та (ObjID) для явного об'єкта. Інших додаткових аргументів немає.
- Читає Player.Strength, якщо Player існує й не знищений; інакше 0. Присутній мертвий персонаж не є видаленим об’єктом. Характеристика не обчислюється з HP, мани чи витривалості.
- GetStr/GetInt/GetDex приймають ObjID. Дані PlayerMobile доступні лише для self; для іншого serial - 0, навіть для завантаженого mobile. Чужа характеристика не підставляється і вгадується.
- Invoke читає на ігровому потоці з можливістю скасувати очікування на скрипт. Чи не запитує status, не відкриває target, не посилає пакет, не змінює характеристику і не додає затримку.
- Кожен дзвінок читає локальні дані заново. Змінна зберігає знімок; окремі читання можуть отримати різні оновлення сервера. Ненульовий результат не перевіряє підключення. Нуль може бути значенням чи відсутністю даних.
- C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
UO.Str(),UO.Strength(),UO.GetStr(),UO.GetStrength(). - ExecuteClientApiCompatibility.Arg спочатку дозволяє ім'я об'єкта, потім перетворює число. Невідомий нечисловий рядок викликає помилку перетворення, не приціл. double наводиться до int, Array/void - до 0. Для вибору персонажа використовуйте коректний serial, не такі перетворення.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetStr();
UO.Print("GetStr: " + Convert.ToString(result));Параметри та порядок виконання:
- value зберігає числовий результат; Convert.ToString лише форматує його для журналу. Аргументів та дії персонажа немає.
var value = UO.GetStr();
UO.Print("Strength: " + Convert.ToString(value));Параметри та порядок виконання:
- before та after поділяє 1000 мс; UO.Wait доданий у приклад. change=after-before буває позитивним, нульовим чи негативним. Сам собою він не розрізняє всі проміжні оновлення і вихід зі світу.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.GetStr();
await Delay(1000);
var after = UO.GetStr();
var change = after - before;
UO.Print("Change: " + Convert.ToString(change));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Параметри та порядок виконання:
- minimum = 80 - приклад вимоги, не межа клієнта. AttributeAtLeast(minimum) відкидає відсутнього персонажа, один раз читає характеристику та повертає bool: true або false за умовою >= minimum. Логічне значення дає порівняння, не сама характеристика.
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(Truth(AttributeAtLeast(80)) == true))
{
UO.Print("Requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic AttributeAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.GetStr();
return value >= minimum;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Параметри та порядок виконання:
- id - результат UO.Self(), не type. AddObject зберігає ID під ім'ям statSubject без прицілу, оскільки другий аргумент вказано. Обидва виклики обирають одного персонажа, але читання не є атомарними.
var id = UO.Self();
if (Truth(id != 0))
{
UO.AddObject("statSubject", id);
var direct = UO.GetStr(id);
var byName = UO.GetStr("statSubject");
UO.Print("Direct: " + Convert.ToString(direct) + "; alias: " + Convert.ToString(byName));
}
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 [GetStr]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Strength:bridge.Strength.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
() => bridge.StrengthСтворення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Параметри: objID (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetStrength:bridge.GetStrength(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Strength:bridge.Strength.
Внутрішній код реалізації, не самостійний скрипт.
case "getstr": return new InjectionValue(arguments.Length > 0 ? bridge.GetStrength(Arg(0)) : bridge.Strength);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetStrength();Читає поточну силу (Strength, Convert. ToString) персонажа.
Параметрів немає.
int — поточні окуляри характеристики, 0..65535 у моделі клієнта; не відсоток, ID, навичка, режим блокування або bool. 0 також означає відсутність/видалення персонажа або недоступний об'єкт. Порівнюйте з числовою вимогою, не == true. Це не межа характеристики та не гарантоване базове значення без модифікаторів.
- Команда не сприймає аргументів. Використовуйте точні сигнатури вище.
- Читає Player.Strength, якщо Player існує й не знищений; інакше 0. Присутній мертвий персонаж не є видаленим об’єктом. Характеристика не обчислюється з HP, мани чи витривалості.
- GetStr/GetInt/GetDex приймають ObjID. Дані PlayerMobile доступні лише для self; для іншого serial - 0, навіть для завантаженого mobile. Чужа характеристика не підставляється і вгадується.
- Invoke читає на ігровому потоці з можливістю скасувати очікування на скрипт. Чи не запитує status, не відкриває target, не посилає пакет, не змінює характеристику і не додає затримку.
- Кожен дзвінок читає локальні дані заново. Змінна зберігає знімок; окремі читання можуть отримати різні оновлення сервера. Ненульовий результат не перевіряє підключення. Нуль може бути значенням чи відсутністю даних.
- C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
UO.Str(),UO.Strength(),UO.GetStr(),UO.GetStrength().
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetStrength();
UO.Print("GetStrength: " + Convert.ToString(result));Параметри та порядок виконання:
- value зберігає числовий результат; Convert.ToString лише форматує його для журналу. Аргументів та дії персонажа немає.
var value = UO.GetStrength();
UO.Print("Strength: " + Convert.ToString(value));Параметри та порядок виконання:
- before та after поділяє 1000 мс; UO.Wait доданий у приклад. change=after-before буває позитивним, нульовим чи негативним. Сам собою він не розрізняє всі проміжні оновлення і вихід зі світу.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.GetStrength();
await Delay(1000);
var after = UO.GetStrength();
var change = after - before;
UO.Print("Change: " + Convert.ToString(change));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Параметри та порядок виконання:
- minimum = 80 - приклад вимоги, не межа клієнта. AttributeAtLeast(minimum) відкидає відсутнього персонажа, один раз читає характеристику та повертає bool: true або false за умовою >= minimum. Логічне значення дає порівняння, не сама характеристика.
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(Truth(AttributeAtLeast(80)) == true))
{
UO.Print("Requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic AttributeAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.GetStrength();
return value >= minimum;
}
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 [GetStrength]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Strength:bridge.Strength.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
() => bridge.StrengthСтворення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetTitle(object? objID);Читає відомий клієнту титул персонажа: наприклад, професію чи підпис після імені.
-
objID— Обов'язковий serial/ID об'єкта, не type і не cliloc. Допускається int, десятковий/hex-рядок, self, backpack, lasttarget, finditem або ім'я AddObject. 0 означає відсутність об'єкта.
string – текст поля Title у Mobile. Порожній рядок, якщо титул невідомий, об'єкт не є персонажем або ID відсутній. Це не serial, не повне ім'я та не масив властивостей. GetAltName використовує те саме поле, що GetTitle.
- Сам виклик читає локальні дані, не чекає на сервер і не відправляє одиночний клік. Для запиту імені/титулу використовуйте ClickOnObject окремо; відповідь приходить асинхронно.
- Порожній рядок допустимий і у існуючого персонажа. Перевірка Exists відповідає на інше питання – чи завантажено об'єкт.
- У цій реалізації альтернативне ім'я зіставлено полю Title персонажа.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.GetTitle("self");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- ObjID = self - персонаж поточного клієнта.
- title містить лише титул; порожнє поле не означає помилку скрипта.
var title = UO.GetTitle("self");
UO.Print(title);Параметри та порядок виконання:
- ObjID = id - serial останньої мети. GetName та титул читаються окремо.
- Ціль-предмет не має поля Title і дасть порожній рядок.
return RunScenario();
object? RunScenario()
{
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
var title = UO.GetTitle(id);
if (Truth(title != ""))
{
UO.Print(UO.GetName(id) + " " + title);
}
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- 350 - приклад паузи в мілісекундах після одиночного кліка; це не параметр getter.
- Сервер може відповісти пізніше або не передати титул. Зберігайте обробку порожнього рядка.
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.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.ClickOnObject(id);
UO.Wait(350);
UO.Print(UO.GetTitle(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.
Параметри: objID (Any)
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetTitle:bridge.GetTitle(Arg(0, bridge.Self)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0, bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Внутрішній код реалізації, не самостійний скрипт.
case "gettitle": return new InjectionValue(bridge.GetTitle(Arg(0, bridge.Self)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetWeight();Читає лічильник статусу свого персонажа: поточна вага у stones.
Параметрів немає.
int — поточна вага в stones, 0..65535 у моделі клієнта. 0 може бути реальним значенням, відсутністю даних або відсутнім/знищеним Player. Ця кількість не bool, ID або type: 1 означає одну одиницю, а не успіх. Команда не перебирає об'єкти та не повертає масив.
- Команда не сприймає аргументів. Використовуйте точні сигнатури вище.
- Читання в ігровому потоці бере Player. Weight, якщо поточний Player існує і не знищений; інакше 0. Екіпірування не перебирається, бонуси не перераховуються, статус не запитується, очікування поновлення немає. Присутня примара не дорівнює знищеному Player.
- Weight читає загальну вагу, повідомлену сервером, у stones. Які ваги тіла, екіпірування та вкладених сумок входять до суми, визначають правила шарду. Команда не оминає контейнери, не підсумовує ваги предметів та не оновлює закриті сумки. Це не властивість Weight окремого предмету та не число items.
- CharacterStatus перевіряє обов'язкове тіло до оновлення. Weight є у своєму розширеному статусі, слоти - з type 3, Luck - з type 4, серверний WeightMax - з type 5. Компактний/старий пакет без необов'язкового лічильника залишає його попередній кеш. Новий Player починає з нулів; дзвінок не доводить отримання свіжого статусу.
- Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди. C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
- Кожен дзвінок читає локальні дані заново. Змінна зберігає знімок; окремі читання можуть отримати різні оновлення сервера. Ненульовий результат не перевіряє підключення. Нуль може бути значенням чи відсутністю даних.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetWeight();
UO.Print("GetWeight: " + Convert.ToString(result));Параметри та порядок виконання:
- value зберігає один виклик без аргументів для свого персонажа; Convert.ToString форматує число для журналу, не змінюючи його значення.
var value = UO.GetWeight();
UO.Print("Weight: " + Convert.ToString(value));Параметри та порядок виконання:
- UO.Wait(500) поділяє before та after на 500 мілісекунд. difference може бути позитивною, нульовою або негативною; проміжні оновлення та зміна персонажа можуть бути пропущені. Пауза належить наприклад.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.GetWeight();
await Delay(500);
var after = UO.GetWeight();
var difference = after - before;
UO.Print("Counter change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Параметри та порядок виконання:
- CanCarry(extra) отримує додаткову вагу в stones; 10 - приклад, не число стопок. Відкидає негативний extra, відсутність Player або maximum <= 0, читає поточну вагу та межу, потім повертає bool: true або false за extra <= maximum - current. Віднімання уникає переповнення current + extra. При перевантаженні результат false навіть для extra=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()
{
if (Truth(Truth(CanCarry(10)) == true))
{
UO.Print("Local check passed");
}
else
{
UO.Print("Local check failed or data unavailable");
}
return null;
}
dynamic CanCarry(dynamic extra)
{
if (Truth(extra < 0) || Truth(UO.Self() == 0))
{
return false;
}
var current = UO.GetWeight();
var maximum = UO.MaxWeight();
if (Truth(maximum <= 0))
{
return false;
}
return extra <= maximum - current;
}
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.Weight. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Weight:bridge.Weight.
Внутрішній код реалізації, не самостійний скрипт.
public int Weight() => bridge.Weight;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetYellowBar(object? id);Перевіряє прапор жовтої смуги mobile здоров'я.
-
id— Обов'язковий serial/ID конкретного об'єкта: int, hex-рядок або аліас self, backpack, lasttarget, lastobject, lastcontainer, laststatus, finditem, lastcorpse або ім'я AddObject. Це не graphic/type. Невстановлене ім'я дозволяється у 0; ніякий новий target команда не відкриває. Аргумент обов'язковий; для себе передайте self.
int 1 — завантажений mobile має ознаку IsYellowHits. int 0 — ознака відсутня, об'єкт не є mobile, невідомий чи видалений. Це серверний/сумісний прапор, а не колір теми IDE і не кількість HP. Відсутність прапора не доводить уразливість: сервер може позначати захист інакше.
Результат команди — числовий прапор: 1 означає виконану умову, 0 — невиконану. Після var result = команда (...) перевіряйте if (result != 0) або if (result == 0). Збережіть результат одного виклику: повторний виклик може виконати дію знову або прочитати стан, що вже змінився.
- Читається локальна модель клієнта; запитів серверу, очікування та переміщення немає.
- Результат відноситься до моменту читання. Після UO.Wait або іншої дії об'єкт та його прапори можуть змінитися.
- Це серверний/сумісний прапор, а не колір теми IDE і не кількість HP. Відсутність прапора не доводить уразливість: сервер може позначати захист інакше.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetYellowBar("self");
UO.Print("GetYellowBar: " + Convert.ToString(result));Параметри та порядок виконання:
- Аргумент self явно вибирає свого персонажа. state — лише 1/0.
- Це серверний/сумісний прапор, а не колір теми IDE і не кількість HP. Відсутність прапора не доводить уразливість: сервер може позначати захист інакше.
var state = UO.GetYellowBar("self");
var hp = UO.GetHP("self");
UO.Print("Yellow flag: " + Convert.ToString(state));
UO.Print("Known HP: " + Convert.ToString(hp));Параметри та порядок виконання:
- IsNpc виключає предмет та невідомий об'єкт. target зберігає один serial, а не живе посилання на змінний lasttarget.
- Результат відноситься до поля IsYellowHits. Дані оновлюються лише після отримання відповідного стану клієнтом.
return RunScenario();
object? RunScenario()
{
var target = UO.GetSerial("lasttarget");
if (Truth(UO.IsNPC(target)))
{
var state = UO.GetYellowBar(target);
UO.Print("Selected mobile state 1/0: " + Convert.ToString(state));
}
else
{
UO.Print("No loaded mobile selected");
}
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(500) - пауза в мілісекундах. Після неї окремо перевіряється, що mobile ще існує.
- Порівнюються два знімки. Проміжні зміни можуть бути пропущені, і це не безперервна передплата серверних подій.
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 target = UO.GetSerial("lasttarget");
if (Truth(UO.IsNPC(target)))
{
var before = UO.GetYellowBar(target);
await Delay(500);
if (Truth(UO.IsNPC(target)))
{
var after = UO.GetYellowBar(target);
if (Truth(before != after))
{
UO.Print("Flag changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
}
}
else
{
UO.Print("Mobile left the local world");
}
}
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.
Параметри: id (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.GetYellowBar. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetYellowBar:bridge.GetYellowBar(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Внутрішній код реалізації, не самостійний скрипт.
public int GetYellowBar(InjectionValue id) => bridge.GetYellowBar(GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.Gold();Читає кількість золота із статусу поточного персонажа.
Параметрів немає.
int/double - невід'ємна сума 0..4294967295. До 2147483647 включно повертається int, вище - double (Double), що точно представляє будь-яке 32-бітне беззнакове ціле. 0 також означає відсутність поточного невіддаленого Player або отриманої суми. Це не bool, ID, кількість стопок або обхід рюкзака/банку.
- Параметрів немає. Читає кеш Player.Gold з CharacterStatus (0x11). Сервер визначає, яке золото входить у його лічильник; команда не перебирає вкладені сумки і запитує банківський баланс. Ні/знищений Player - 0; Привид може зберігати суму статусу.
- ReadGoldValue один раз читає bridge.Gold. Старий C# bridge зберігає сигнатуру Int32 і передає біти UInt32. unchecked-перетворення відновлює беззнакову суму; Мінімальна сума обертається в int, велика — в double. Старший біт більше не перетворює баланс на негативний. Перетворення локальне, пакетів немає.
- Кожен дзвінок читає локальні дані заново. Змінна зберігає знімок; окремі читання можуть отримати різні оновлення сервера. Ненульовий результат не перевіряє підключення. Нуль може бути значенням чи відсутністю даних.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.Gold();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- amount зберігає один результат; Convert.ToString форматує його для журналу. Золото не шукається, не переноситься та не витрачається.
var amount = UO.Gold();
UO.Print("Status gold: " + Convert.ToString(amount));Параметри та порядок виконання:
- price = 3000000000.0 - приклад ціни, не межа. CanAfford(price) відкидає негативну ціну або відсутність Player, один раз читає суму та повертає bool: true або false за умовою amount >= price. Сама сума не bool. Функцію повністю визначено нижче.
return RunScenario();
object? RunScenario()
{
var price = 3000000000.0;
if (Truth(Truth(CanAfford(price)) == true))
{
UO.Print("Local balance is sufficient");
}
else
{
UO.Print("Local check failed");
}
return null;
}
dynamic CanAfford(dynamic price)
{
if (Truth(price < 0) || Truth(UO.Self() == 0))
{
return false;
}
var amount = UO.Gold();
return amount >= price;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- before/after поділяє UO.Wait(500) мілісекунд. difference=after-before може бути негативною у разі зменшення балансу; це не виправлене переповнення беззнакового лічильника. Проміжні оновлення та зміна персонажа можуть бути пропущені.
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 before = UO.Gold();
await Delay(500);
var after = UO.Gold();
var difference = after - before;
UO.Print("Balance change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ReadGoldValue:ReadGoldValue().
Внутрішній код реалізації, не самостійний скрипт.
case "gold": return ReadGoldValue();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.HP();Читає здоров'я з локальної моделі.
Параметрів немає.
int — значення поля Hits, не відсоток і не bool. 0 буває справжнім значенням або ознакою відсутніх даних. Нульовий максимум не можна використовувати як дільник. У чужого mobile значення можуть бути невідомі. HP/HitsMax можуть містити відносну шкалу сервера замість точних очок. HP=0 не доводить смерть; для цього є Dead/IsDead.
- Команда не відкриває status і не вимагає оновлення сервера. Клієнт лише читає вже завантажені дані. Не змінює характеристики та не відправляє пакети.
- Результат – окреме читання. Світ може змінитися між Exists та наступним викликом; Кілька запитів не утворюють атомарний знімок.
- Під час читання об'єкта World.Get відкидає відсутній або IsDestroyed і виходить 0. HP/HitsMax читаються в Entity, включаючи предмети з цими полями; Mana/Stamina – тільки у Mobile. Без аргументу читається self. Однойменний варіант без параметрів не обов'язково має варіант з ID: дивіться сигнатури.
- Читання без аргументів теж повертає 0 для відсутнього чи знищеного Player. Це стосується і прямих Mana/Stamina та їх максимумів, а не тільки форм через World.Get. Присутній мертвий персонаж може зберігати значення.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.HP();
UO.Print("HP: " + Convert.ToString(result));Параметри та порядок виконання:
- Виклик без аргументів читає self. value зберігає одне число, Convert.ToString перетворює його лише повідомлення.
var value = UO.HP();
UO.Print("HP: " + Convert.ToString(value));Параметри та порядок виконання:
- Показано прикладний поріг або розрахунок цього поля. Числа в умові – налаштування прикладу, не межі сервера. Перед розподілом на максимум перевіряється його позитивність.
return RunScenario();
object? RunScenario()
{
var value = UO.HP();
var maximum = UO.GetMaxHP();
if (Truth(maximum > 0) && Truth(value * 100 / maximum < 50))
{
UO.Print("Health below half of the known maximum");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- У цього імені немає форми з ID. ReadValue без параметрів читає self; два дзвінки розділені UO.Wait(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()
{
var before = ReadValue();
await Delay(1000);
var after = ReadValue();
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
return null;
}
dynamic ReadValue()
{
return UO.HP();
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [HP]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetHP:bridge.GetHP(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
() => bridge.GetHP(bridge.Self)Створення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Hidden();
int UO.Hidden(object? id);Перевіряє скритність персонажа.
-
id— Необов'язковий об'єкт у показаних формах: serial числом/hex-рядком, self, lasttarget або зареєстроване ім'я AddObject. Це не type. Без аргументу читається self. Невідомий текст у деяких формах викликає помилку перетворення; перевіряйте ім'я перед викликом.
Числовий прапор int: 1 (умова виконана), 0 (умова не виконано). Це числовий прапор: в C# перевіряйте result != 0 або result == 0. Пряме порівняння int з true/false та if (result) неприпустимо. "1" - "mobile" має "IsHidden", "0" - прапора немає або "mobile" немає. Це серверний прапор, а не видимість за стіною.
Результат команди — числовий прапор: 1 означає виконану умову, 0 — невиконану. Після var result = команда (...) перевіряйте if (result != 0) або if (result == 0). Збережіть результат одного виклику: повторний виклик може виконати дію знову або прочитати стан, що вже змінився.
- Читає локальну модель: не відкриває target, не вимагає status, не змінює прапор і не відправляє пакет. Знищений об'єкт вважається відсутнім ще до видалення запису зі словника.
- Результат – окреме читання. Світ може змінитися між Exists та наступним викликом; Кілька запитів не утворюють атомарний знімок.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.Hidden();
UO.Print("Hidden: " + Convert.ToString(result));Параметри та порядок виконання:
- Порожні дужки читають self. active зберігає результат один раз; true і false задають дві гілки. Print лише виводить приклад повідомлення.
var active = UO.Hidden();
if (Truth(Truth(active) == true))
{
UO.Print("State is active");
}
else
{
UO.Print("State is inactive or unavailable");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- lasttarget — вибраний раніше об'єкт. Exists перевіряє його наявність. obj - єдиний параметр ReadState; функція повертає результат команди без зміни. Її визначення входить у код, що копіюється.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Exists("lasttarget")))
{
var observed = ReadState("lasttarget");
UO.Print("State 1/0: " + Convert.ToString(observed));
}
return null;
}
dynamic ReadState(dynamic obj)
{
return UO.Hidden(obj);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Два виклики без аргументів читають self, UO.Wait(500) задає 500 мілісекунд. Порівнюються два знімки; проміжні переходи можуть бути пропущені. Нескінченного очікування немає.
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 before = UO.Hidden();
await Delay(500);
var after = UO.Hidden();
if (Truth(before != after))
{
UO.Print("State changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
}
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.
Параметри: Немає параметрів.
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.Hidden. -
InjectionScript.Runtime.InjectionApiUO.Hidden:Hidden("self").
Внутрішній код реалізації, не самостійний скрипт.
public int Hidden() => Hidden("self");Параметри: id (Integer/String)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.Hidden. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Hidden:bridge.Hidden(id).
Внутрішній код реалізації, не самостійний скрипт.
public int Hidden(int id) => bridge.Hidden(id);Параметри: id (Integer/String)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.Hidden. -
InjectionScript.Runtime.InjectionApiUO.Hidden:Hidden(GetObject(idText)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(idText).
Внутрішній код реалізації, не самостійний скрипт.
public int Hidden(string idText) => Hidden(GetObject(idText));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Int();Читає поточний інтелект (Intelligence, INT) персонажа.
Параметрів немає.
int — поточні окуляри характеристики, 0..65535 у моделі клієнта; не відсоток, ID, навичка, режим блокування або bool. 0 також означає відсутність/видалення персонажа або недоступний об'єкт. Порівнюйте з числовою вимогою, не == true. Це не межа характеристики та не гарантоване базове значення без модифікаторів.
- Команда не сприймає аргументів. Використовуйте точні сигнатури вище.
- Читає Player.Intelligence, якщо Player існує й не знищений; інакше 0. Присутній мертвий персонаж не є видаленим об’єктом. Характеристика не обчислюється з HP, мани чи витривалості.
- GetStr/GetInt/GetDex приймають ObjID. Дані PlayerMobile доступні лише для self; для іншого serial - 0, навіть для завантаженого mobile. Чужа характеристика не підставляється і вгадується.
- Invoke читає на ігровому потоці з можливістю скасувати очікування на скрипт. Чи не запитує status, не відкриває target, не посилає пакет, не змінює характеристику і не додає затримку.
- Кожен дзвінок читає локальні дані заново. Змінна зберігає знімок; окремі читання можуть отримати різні оновлення сервера. Ненульовий результат не перевіряє підключення. Нуль може бути значенням чи відсутністю даних.
- C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
UO.Int(),UO.Intelligence(),UO.GetInt(),UO.GetIntelligence().
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.Int();
UO.Print("Int: " + Convert.ToString(result));Параметри та порядок виконання:
- value зберігає числовий результат; Convert.ToString лише форматує його для журналу. Аргументів та дії персонажа немає.
var value = UO.Int();
UO.Print("Intelligence: " + Convert.ToString(value));Параметри та порядок виконання:
- before та after поділяє 1000 мс; UO.Wait доданий у приклад. change=after-before буває позитивним, нульовим чи негативним. Сам собою він не розрізняє всі проміжні оновлення і вихід зі світу.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.Int();
await Delay(1000);
var after = UO.Int();
var change = after - before;
UO.Print("Change: " + Convert.ToString(change));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Параметри та порядок виконання:
- minimum = 80 - приклад вимоги, не межа клієнта. AttributeAtLeast(minimum) відкидає відсутнього персонажа, один раз читає характеристику та повертає bool: true або false за умовою >= minimum. Логічне значення дає порівняння, не сама характеристика.
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(Truth(AttributeAtLeast(80)) == true))
{
UO.Print("Requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic AttributeAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.Int();
return value >= minimum;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Intelligence:bridge.Intelligence.
Внутрішній код реалізації, не самостійний скрипт.
case "int": return new InjectionValue(bridge.Intelligence);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Intelligence();Читає поточний інтелект (Intelligence, INT) персонажа.
Параметрів немає.
int — поточні окуляри характеристики, 0..65535 у моделі клієнта; не відсоток, ID, навичка, режим блокування або bool. 0 також означає відсутність/видалення персонажа або недоступний об'єкт. Порівнюйте з числовою вимогою, не == true. Це не межа характеристики та не гарантоване базове значення без модифікаторів.
- Команда не сприймає аргументів. Використовуйте точні сигнатури вище.
- Читає Player.Intelligence, якщо Player існує й не знищений; інакше 0. Присутній мертвий персонаж не є видаленим об’єктом. Характеристика не обчислюється з HP, мани чи витривалості.
- GetStr/GetInt/GetDex приймають ObjID. Дані PlayerMobile доступні лише для self; для іншого serial - 0, навіть для завантаженого mobile. Чужа характеристика не підставляється і вгадується.
- Invoke читає на ігровому потоці з можливістю скасувати очікування на скрипт. Чи не запитує status, не відкриває target, не посилає пакет, не змінює характеристику і не додає затримку.
- Кожен дзвінок читає локальні дані заново. Змінна зберігає знімок; окремі читання можуть отримати різні оновлення сервера. Ненульовий результат не перевіряє підключення. Нуль може бути значенням чи відсутністю даних.
- C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
UO.Int(),UO.Intelligence(),UO.GetInt(),UO.GetIntelligence().
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.Intelligence();
UO.Print("Intelligence: " + Convert.ToString(result));Параметри та порядок виконання:
- value зберігає числовий результат; Convert.ToString лише форматує його для журналу. Аргументів та дії персонажа немає.
var value = UO.Intelligence();
UO.Print("Intelligence: " + Convert.ToString(value));Параметри та порядок виконання:
- before та after поділяє 1000 мс; UO.Wait доданий у приклад. change=after-before буває позитивним, нульовим чи негативним. Сам собою він не розрізняє всі проміжні оновлення і вихід зі світу.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.Intelligence();
await Delay(1000);
var after = UO.Intelligence();
var change = after - before;
UO.Print("Change: " + Convert.ToString(change));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Параметри та порядок виконання:
- minimum = 80 - приклад вимоги, не межа клієнта. AttributeAtLeast(minimum) відкидає відсутнього персонажа, один раз читає характеристику та повертає bool: true або false за умовою >= minimum. Логічне значення дає порівняння, не сама характеристика.
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(Truth(AttributeAtLeast(80)) == true))
{
UO.Print("Requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic AttributeAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.Intelligence();
return value >= minimum;
}
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 [Intelligence]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Intelligence:bridge.Intelligence.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
() => bridge.IntelligenceСтворення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsAlive();
int UO.IsAlive(object? value);Перевіряє наявність об'єкта без ознак смерті.
-
value— Необов'язковий об'єкт у показаних формах: serial числом/hex-рядком, self, lasttarget або зареєстроване ім'я AddObject. Це не type. Без аргументу читається self. Невідомий текст у деяких формах викликає помилку перетворення; перевіряйте ім'я перед викликом.
Числовий прапор int: 1 (умова виконана), 0 (умова не виконано). Це числовий прапор: в C# перевіряйте result != 0 або result == 0. Пряме порівняння int з true/false та if (result) неприпустимо. 1 — позитивний serial існує і не помічений мертвим. Відомий предмет теж дає 1: це не фільтр mobile. Мертвий/відсутній об'єкт дає 0.
Результат команди — числовий прапор: 1 означає виконану умову, 0 — невиконану. Після var result = команда (...) перевіряйте if (result != 0) або if (result == 0). Збережіть результат одного виклику: повторний виклик може виконати дію знову або прочитати стан, що вже змінився.
- Читає локальну модель: не відкриває target, не вимагає status, не змінює прапор і не відправляє пакет. Знищений об'єкт вважається відсутнім ще до видалення запису зі словника.
- Результат – окреме читання. Світ може змінитися між Exists та наступним викликом; Кілька запитів не утворюють атомарний знімок.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.IsAlive();
UO.Print("IsAlive: " + Convert.ToString(result));Параметри та порядок виконання:
- Порожні дужки читають self. active зберігає результат один раз; true і false задають дві гілки. Print лише виводить приклад повідомлення.
var active = UO.IsAlive();
if (Truth(Truth(active) == true))
{
UO.Print("State is active");
}
else
{
UO.Print("State is inactive or unavailable");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- lasttarget — вибраний раніше об'єкт. Exists перевіряє його наявність. obj - єдиний параметр ReadState; функція повертає результат команди без зміни. Її визначення входить у код, що копіюється.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Exists("lasttarget")))
{
var observed = ReadState("lasttarget");
UO.Print("State 1/0: " + Convert.ToString(observed));
}
return null;
}
dynamic ReadState(dynamic obj)
{
return UO.IsAlive(obj);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Два виклики без аргументів читають self, UO.Wait(500) задає 500 мілісекунд. Порівнюються два знімки; проміжні переходи можуть бути пропущені. Нескінченного очікування немає.
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 before = UO.IsAlive();
await Delay(500);
var after = UO.IsAlive();
if (Truth(before != after))
{
UO.Print("State changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
}
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.
Параметри: Немає параметрів.
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [IsAlive]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Exists:bridge.Exists(serial). -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases::IsDeadState:IsDeadState(serial). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
serial => serial > 0 && bridge.Exists(serial) != 0 && IsDeadState(serial) == 0 ? 1 : 0Внутрішній код реалізації, не самостійний скрипт.
() => getter(bridge.Self)Створення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Параметри: value (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [IsAlive]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Exists:bridge.Exists(serial). -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases::IsDeadState:IsDeadState(serial). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(value).
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
serial => serial > 0 && bridge.Exists(serial) != 0 && IsDeadState(serial) == 0 ? 1 : 0Внутрішній код реалізації, не самостійний скрипт.
value => getter(GetObject(value))Створення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsDead();
dynamic UO.IsDead(object? objID);Перевіряє смерть персонажа.
-
objID— Необов'язковий об'єкт у показаних формах: serial числом/hex-рядком, self, lasttarget або зареєстроване ім'я AddObject. Це не type. Без аргументу читається self. Невідомий текст у деяких формах викликає помилку перетворення; перевіряйте ім'я перед викликом.
Числовий прапор int: 1 (умова виконана), 0 (умова не виконано). Це числовий прапор: в C# перевіряйте result != 0 або result == 0. Пряме порівняння int з true/false та if (result) неприпустимо. "1" - "mobile" має "IsDead", "0" - ознаки немає або "mobile" відсутня. HP=0 само собою не означає смерть.
Результат команди — числовий прапор: 1 означає виконану умову, 0 — невиконану. Після var result = команда (...) перевіряйте if (result != 0) або if (result == 0). Збережіть результат одного виклику: повторний виклик може виконати дію знову або прочитати стан, що вже змінився.
- Читає локальну модель: не відкриває target, не вимагає status, не змінює прапор і не відправляє пакет. Знищений об'єкт вважається відсутнім ще до видалення запису зі словника.
- Результат – окреме читання. Світ може змінитися між Exists та наступним викликом; Кілька запитів не утворюють атомарний знімок.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.IsDead();
UO.Print("IsDead: " + Convert.ToString(result));Параметри та порядок виконання:
- Порожні дужки читають self. active зберігає результат один раз; true і false задають дві гілки. Print лише виводить приклад повідомлення.
var active = UO.IsDead();
if (Truth(Truth(active) == true))
{
UO.Print("State is active");
}
else
{
UO.Print("State is inactive or unavailable");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- lasttarget — вибраний раніше об'єкт. Exists перевіряє його наявність. obj - єдиний параметр ReadState; функція повертає результат команди без зміни. Її визначення входить у код, що копіюється.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Exists("lasttarget")))
{
var observed = ReadState("lasttarget");
UO.Print("State 1/0: " + Convert.ToString(observed));
}
return null;
}
dynamic ReadState(dynamic obj)
{
return UO.IsDead(obj);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Два виклики без аргументів читають self, UO.Wait(500) задає 500 мілісекунд. Порівнюються два знімки; проміжні переходи можуть бути пропущені. Нескінченного очікування немає.
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 before = UO.IsDead();
await Delay(500);
var after = UO.IsDead();
if (Truth(before != after))
{
UO.Print("State changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
}
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.
Параметри: Немає параметрів.
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [IsDead]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
IsDeadStateВнутрішній код реалізації, не самостійний скрипт.
() => getter(bridge.Self)Створення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Параметри: objID (Any)
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsDead:bridge.IsDead(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Dead:bridge.Dead().
Внутрішній код реалізації, не самостійний скрипт.
case "isdead": return new InjectionValue(arguments.Length > 0 ? bridge.IsDead(Arg(0)) : bridge.Dead());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsFemale(object? objID);Перевіряє ознаку жіночої статі mobile.
-
objID— Обов'язковий serial/ID конкретного об'єкта: int, hex-рядок або аліас self, backpack, lasttarget, lastobject, lastcontainer, laststatus, finditem, lastcorpse або ім'я AddObject. Це не graphic/type. Невстановлене ім'я дозволяється у 0; ніякий новий target команда не відкриває. Аргумент обов'язковий; для себе передайте self.
int 1 — завантажений mobile має ознаку IsFemale. int 0 — ознака відсутня, об'єкт не є mobile, невідомий чи видалений. Не визначає раси, імені, віку або типу власника об'єкта.
Результат команди — числовий прапор: 1 означає виконану умову, 0 — невиконану. Після var result = команда (...) перевіряйте if (result != 0) або if (result == 0). Збережіть результат одного виклику: повторний виклик може виконати дію знову або прочитати стан, що вже змінився.
- Читається локальна модель клієнта; запитів серверу, очікування та переміщення немає.
- Результат відноситься до моменту читання. Після UO.Wait або іншої дії об'єкт та його прапори можуть змінитися.
- Не визначає раси, імені, віку або типу власника об'єкта.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.IsFemale("self");
UO.Print("IsFemale: " + Convert.ToString(result));Параметри та порядок виконання:
- Аргумент self явно вибирає свого персонажа. state — лише 1/0.
- Не визначає раси, імені, віку або типу власника об'єкта.
var state = UO.IsFemale("self");
if (Truth(state))
{
UO.Print("Female flag is set");
}
else
{
UO.Print("Female flag is not set");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- IsNpc виключає предмет та невідомий об'єкт. target зберігає один serial, а не живе посилання на змінний lasttarget.
- Результат відноситься до поля IsFemale. Дані оновлюються лише після отримання відповідного стану клієнтом.
return RunScenario();
object? RunScenario()
{
var target = UO.GetSerial("lasttarget");
if (Truth(UO.IsNPC(target)))
{
var state = UO.IsFemale(target);
UO.Print("Selected mobile state 1/0: " + Convert.ToString(state));
}
else
{
UO.Print("No loaded mobile selected");
}
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(500) - пауза в мілісекундах. Після неї окремо перевіряється, що mobile ще існує.
- Порівнюються два знімки. Проміжні зміни можуть бути пропущені, і це не безперервна передплата серверних подій.
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 target = UO.GetSerial("lasttarget");
if (Truth(UO.IsNPC(target)))
{
var before = UO.IsFemale(target);
await Delay(500);
if (Truth(UO.IsNPC(target)))
{
var after = UO.IsFemale(target);
if (Truth(before != after))
{
UO.Print("Flag changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
}
}
else
{
UO.Print("Mobile left the local world");
}
}
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.
Параметри: objID (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsFemale:bridge.IsFemale(Arg(0, bridge.Self)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0, bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Внутрішній код реалізації, не самостійний скрипт.
case "isfemale": return new InjectionValue(bridge.IsFemale(Arg(0, bridge.Self)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsFlying();
int UO.IsFlying(object? value);Перевіряє, чи персонаж зараз летить. Зазвичай це потрібно для Gargoyle: наприклад, перед запуском маршруту або запитом увімкнення польоту. Без аргументу відповідає на запитання «мій персонаж зараз летить?». Команда лише читає стан: вона не вмикає політ, не приземляє й не переміщує персонажа.
-
value- Необов'язковий serial персонажа: число, hex-рядок, self, lasttarget або ім'я, збережене через UO.AddObject. Без аргументу використається свій персонаж. Це ID конкретного mobile, не graphic/type та не координата Z. Невідоме ім'я, відсутній/віддалений mobile або річ дають 0.
Числовий прапор int: 1 (умова виконана), 0 (умова не виконана). Це числовий прапор: в C# перевіряйте result != 0 або result == 0. Пряме порівняння int з true/false та if (result) неприпустимо. "1" - "mobile" має "IsFlying", "0" - прапора немає або "mobile" немає. Висота Z сама по собі не означає політ.
Результат команди — числовий прапор: 1 означає виконану умову, 0 — невиконану. Після var result = команда (...) перевіряйте if (result != 0) або if (result == 0). Збережіть результат одного виклику: повторний виклик може виконати дію знову або прочитати стан, що вже змінився.
- Основне ігрове застосування – політ Gargoyle. Однак getter не перевіряє расу: у цьому клієнті читає біт "0x04" у mobile при версії протоколу "7.0.0.0" і новіше. На старому протоколі повертає 0. Стояння на даху, висока Z, анімація крил чи сама раса Gargoyle є доказом включеного польоту.
- Для зміни стану є окрема UO.ToggleFly(): вона надсилає запит перемикання, а не команду "увімкнути". Якщо вже летить, повторний виклик запитує посадку. Сервер може відмовити; після запиту читайте Flying повторно з обмеженим очікуванням. false також можливий без персонажа/доступних даних, тому перед ігровою дією перевірте Connected.
- Читає локальну модель: не відкриває target, не вимагає status, не змінює прапор і не відправляє пакет. Знищений об'єкт вважається відсутнім ще до видалення запису зі словника.
- Результат – окреме читання. Світ може змінитися між Exists та наступним викликом; Кілька запитів не утворюють атомарний знімок.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.IsFlying();
UO.Print("IsFlying: " + Convert.ToString(result));Параметри та порядок виконання:
- Порожні дужки означають self. true дорівнює 1, false дорівнює 0; if UO.Flying() { ... } допустимо. Цей приклад нічого не перемикає.
var active = UO.IsFlying();
if (Truth(Truth(active) == true))
{
UO.Print("Flying mode active");
}
else
{
UO.Print("Ground mode or character data unavailable");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- ReadState(obj) приймає serial/аліас та повертає стан. Повне визначення наведено нижче; відсутність об'єкта обробляється до читання. Чужий персонаж також перевіряється за даними, вже отриманими клієнтом.
return RunScenario();
object? RunScenario()
{
var target = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(target != 0) && Truth(UO.Exists(target)))
{
if (Truth(ReadState(target)))
{
UO.AddObject("flying_mobile", target);
}
}
return null;
}
dynamic ReadState(dynamic obj)
{
if (!(Truth(UO.Exists(obj))))
{
return false;
}
return UO.IsFlying(obj);
}
int Asc(object? value, int fallback = 0)
{
string text = Convert.ToString(value) ?? "";
if (text.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
return int.TryParse(text[2..], System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out int hex) ? hex : fallback;
return int.TryParse(text, out int number) ? number : fallback;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Приклад призначений для свого Gargoyle на сервері, що підтримує політ. EnsureFlight(timeoutMs) повертає 1/true, якщо спостерігається політ, інакше 0/false. 2000 - межа очікування в мілісекундах; перевірки кожні 50 мс. Якщо вже летить, ToggleFly не викликається. Відправляється не більше одного запиту, потім перевіряється стан у відповідь. Пауза скрипта/затримка планувальника може збільшити реальний час.
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(await EnsureFlight(2000)))
{
UO.Print("Flight confirmed; ready for the next stage");
}
else
{
UO.Print("Flight not confirmed; route was not started");
}
return null;
}
async Task<dynamic> EnsureFlight(dynamic timeoutMs)
{
if (!(Truth(UO.Connected())) || Truth(UO.Dead()))
{
return false;
}
if (Truth(UO.IsFlying()))
{
return true;
}
UO.ToggleFly();
var waited = 0;
while (Truth(waited < timeoutMs))
{
if (!(Truth(UO.Connected())))
{
return false;
}
if (Truth(UO.IsFlying()))
{
return true;
}
await Delay(50);
waited += 50;
}
return UO.IsFlying();
}
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 [IsFlying]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Flying:bridge.Flying(serial). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
serial => bridge.Flying(serial)Внутрішній код реалізації, не самостійний скрипт.
() => getter(bridge.Self)Створення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Параметри: value (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [IsFlying]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Flying:bridge.Flying(serial). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(value).
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
serial => bridge.Flying(serial)Внутрішній код реалізації, не самостійний скрипт.
value => getter(GetObject(value))Створення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsFrozen();
int UO.IsFrozen(object? value);Перевіряє відомий клієнт прапор паралічу персонажа.
-
value— Необов'язковий serial/ID mobile: число, hex-рядок, self, lasttarget або інше стандартне ім'я об'єкта або ім'я AddObject. Це не graphic/type. Без аргументу використається self. Невідоме ім'я дозволяється у 0; target не відкривається.
Числовий прапор "int": "1" (умова виконано) - завантажений "mobile" має прапор "IsParalyzed"; 0 (умова не виконано) - прапора немає, mobile невідомий, вилучений або об'єкт є предметом. Це не час паралічу і не гарантія можливості руху в результаті 0.
- Використовуйте Paralyzed для перевірки прапора паралічу. Варіанти Is/Get, GetParalisa, Frozen і GetLocked читають той же прапор.
- Команда лише читає локальні дані. Вона не накладає і не знімає параліч, не чекає його закінчення і не надсилає запит на оновлення серверу.
- Результат цієї команди має тип int: використовуйте if (value != 0) або if (value == 0). Пряме порівняння з true/false та if (value) у C# неприпустимі. Значення зберігає сенс прапора, а чи не кількості чи ID.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.IsFrozen();
UO.Print("IsFrozen: " + Convert.ToString(result));Параметри та порядок виконання:
- Порожні дужки вибирають self. state зберігає один знімок прапора; true - числова константа 1.
- Результат false не виключає стіни, відсутність витривалості або іншу причину зупинки.
var state = UO.IsFrozen();
if (Truth(Truth(state) == true))
{
UO.Print("Paralysis flag is set");
}
else
{
UO.Print("Paralysis flag is absent or unavailable");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- target зберігає hex-рядок serial останньої мети. IsNpc перевіряє, що це завантажений mobile, включаючи гравців.
- Команда з аргументом читає саме target. Вона не вибирає нового персонажа і не змінює lasttarget.
return RunScenario();
object? RunScenario()
{
var target = UO.GetSerial("lasttarget");
if (Truth(UO.IsNPC(target)))
{
var state = UO.IsFrozen(target);
UO.Print("Selected mobile paralysis 1/0: " + Convert.ToString(state));
}
else
{
UO.Print("No loaded mobile selected");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Не більше 10 пауз по 100 мс. Кожен виклик без аргументу наново читає self.
- Після циклу окремо перевіряється наявність self. Це спостереження приблизно на секунду плюс виконання команд, а не гарантоване зняття паралічу.
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 attempts = 0;
while (Truth(Truth(UO.IsFrozen()) == true) && Truth(attempts < 10))
{
await Delay(100);
attempts = attempts + 1;
}
if (Truth(UO.IsNPC("self")))
{
if (Truth(Truth(UO.IsFrozen()) == false))
{
UO.Print("Paralysis flag is clear");
}
else
{
UO.Print("Still paralyzed");
}
}
else
{
UO.Print("Self is unavailable");
}
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.
Параметри: Немає параметрів.
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [IsFrozen]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetLocked:bridge.GetLocked(serial). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
serial => bridge.GetLocked(serial)Внутрішній код реалізації, не самостійний скрипт.
() => getter(bridge.Self)Створення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Параметри: value (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [IsFrozen]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetLocked:bridge.GetLocked(serial). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(value).
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
serial => bridge.GetLocked(serial)Внутрішній код реалізації, не самостійний скрипт.
value => getter(GetObject(value))Створення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsHidden();
dynamic UO.IsHidden(object? objID);Перевіряє скритність персонажа.
-
objID— Необов'язковий об'єкт у показаних формах: serial числом/hex-рядком, self, lasttarget або зареєстроване ім'я AddObject. Це не type. Без аргументу читається self. Невідомий текст у деяких формах викликає помилку перетворення; перевіряйте ім'я перед викликом.
Числовий прапор int: 1 (умова виконана), 0 (умова не виконано). Це числовий прапор: в C# перевіряйте result != 0 або result == 0. Пряме порівняння int з true/false та if (result) неприпустимо. "1" - "mobile" має "IsHidden", "0" - прапора немає або "mobile" немає. Це серверний прапор, а не видимість за стіною.
Результат команди — числовий прапор: 1 означає виконану умову, 0 — невиконану. Після var result = команда (...) перевіряйте if (result != 0) або if (result == 0). Збережіть результат одного виклику: повторний виклик може виконати дію знову або прочитати стан, що вже змінився.
- Читає локальну модель: не відкриває target, не вимагає status, не змінює прапор і не відправляє пакет. Знищений об'єкт вважається відсутнім ще до видалення запису зі словника.
- Результат – окреме читання. Світ може змінитися між Exists та наступним викликом; Кілька запитів не утворюють атомарний знімок.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.IsHidden();
UO.Print("IsHidden: " + Convert.ToString(result));Параметри та порядок виконання:
- Порожні дужки читають self. active зберігає результат один раз; true і false задають дві гілки. Print лише виводить приклад повідомлення.
var active = UO.IsHidden();
if (Truth(Truth(active) == true))
{
UO.Print("State is active");
}
else
{
UO.Print("State is inactive or unavailable");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- lasttarget — вибраний раніше об'єкт. Exists перевіряє його наявність. obj - єдиний параметр ReadState; функція повертає результат команди без зміни. Її визначення входить у код, що копіюється.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Exists("lasttarget")))
{
var observed = ReadState("lasttarget");
UO.Print("State 1/0: " + Convert.ToString(observed));
}
return null;
}
dynamic ReadState(dynamic obj)
{
return UO.IsHidden(obj);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Два виклики без аргументів читають self, UO.Wait(500) задає 500 мілісекунд. Порівнюються два знімки; проміжні переходи можуть бути пропущені. Нескінченного очікування немає.
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 before = UO.IsHidden();
await Delay(500);
var after = UO.IsHidden();
if (Truth(before != after))
{
UO.Print("State changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
}
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.
Параметри: Немає параметрів.
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [IsHidden]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Hidden:bridge.Hidden(serial). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
serial => bridge.Hidden(serial)Внутрішній код реалізації, не самостійний скрипт.
() => getter(bridge.Self)Створення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Параметри: objID (Any)
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Hidden:bridge.Hidden(Arg(0, bridge.Self)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0, bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Внутрішній код реалізації, не самостійний скрипт.
case "ishidden": return new InjectionValue(bridge.Hidden(Arg(0, bridge.Self)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsParalysed();
int UO.IsParalysed(object? value);Перевіряє відомий клієнт прапор паралічу персонажа.
-
value— Необов'язковий serial/ID mobile: число, hex-рядок, self, lasttarget або інше стандартне ім'я об'єкта або ім'я AddObject. Це не graphic/type. Без аргументу використається self. Невідоме ім'я дозволяється у 0; target не відкривається.
Числовий прапор "int": "1" (умова виконано) - завантажений "mobile" має прапор "IsParalyzed"; 0 (умова не виконано) - прапора немає, mobile невідомий, вилучений або об'єкт є предметом. Це не час паралічу і не гарантія можливості руху в результаті 0.
- Використовуйте Paralyzed для перевірки прапора паралічу. Варіанти Is/Get, GetParalisa, Frozen і GetLocked читають той же прапор.
- Команда лише читає локальні дані. Вона не накладає і не знімає параліч, не чекає його закінчення і не надсилає запит на оновлення серверу.
- Результат цієї команди має тип int: використовуйте if (value != 0) або if (value == 0). Пряме порівняння з true/false та if (value) у C# неприпустимі. Значення зберігає сенс прапора, а чи не кількості чи ID.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.IsParalysed();
UO.Print("IsParalysed: " + Convert.ToString(result));Параметри та порядок виконання:
- Порожні дужки вибирають self. state зберігає один знімок прапора; true - числова константа 1.
- Результат false не виключає стіни, відсутність витривалості або іншу причину зупинки.
var state = UO.IsParalysed();
if (Truth(Truth(state) == true))
{
UO.Print("Paralysis flag is set");
}
else
{
UO.Print("Paralysis flag is absent or unavailable");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- target зберігає hex-рядок serial останньої мети. IsNpc перевіряє, що це завантажений mobile, включаючи гравців.
- Команда з аргументом читає саме target. Вона не вибирає нового персонажа і не змінює lasttarget.
return RunScenario();
object? RunScenario()
{
var target = UO.GetSerial("lasttarget");
if (Truth(UO.IsNPC(target)))
{
var state = UO.IsParalysed(target);
UO.Print("Selected mobile paralysis 1/0: " + Convert.ToString(state));
}
else
{
UO.Print("No loaded mobile selected");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Не більше 10 пауз по 100 мс. Кожен виклик без аргументу наново читає self.
- Після циклу окремо перевіряється наявність self. Це спостереження приблизно на секунду плюс виконання команд, а не гарантоване зняття паралічу.
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 attempts = 0;
while (Truth(Truth(UO.IsParalysed()) == true) && Truth(attempts < 10))
{
await Delay(100);
attempts = attempts + 1;
}
if (Truth(UO.IsNPC("self")))
{
if (Truth(Truth(UO.IsParalysed()) == false))
{
UO.Print("Paralysis flag is clear");
}
else
{
UO.Print("Still paralyzed");
}
}
else
{
UO.Print("Self is unavailable");
}
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.
Параметри: Немає параметрів.
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [IsParalysed]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetLocked:bridge.GetLocked(serial). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
serial => bridge.GetLocked(serial)Внутрішній код реалізації, не самостійний скрипт.
() => getter(bridge.Self)Створення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Параметри: value (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [IsParalysed]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetLocked:bridge.GetLocked(serial). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(value).
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
serial => bridge.GetLocked(serial)Внутрішній код реалізації, не самостійний скрипт.
value => getter(GetObject(value))Створення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsParalyzed();
int UO.IsParalyzed(object? objID);Перевіряє відомий клієнт прапор паралічу персонажа.
-
objID— Необов'язковий serial/ID mobile: число, hex-рядок, self, lasttarget або інше стандартне ім'я об'єкта або ім'я AddObject. Це не graphic/type. Без аргументу використається self. Невідоме ім'я дозволяється у 0; target не відкривається.
Числовий прапор "int": "1" (умова виконано) - завантажений "mobile" має прапор "IsParalyzed"; 0 (умова не виконано) - прапора немає, mobile невідомий, вилучений або об'єкт є предметом. Це не час паралічу і не гарантія можливості руху в результаті 0.
- Використовуйте Paralyzed для перевірки прапора паралічу. Варіанти Is/Get, GetParalisa, Frozen і GetLocked читають той же прапор.
- Команда лише читає локальні дані. Вона не накладає і не знімає параліч, не чекає його закінчення і не надсилає запит на оновлення серверу.
- Результат цієї команди має тип int: використовуйте if (value != 0) або if (value == 0). Пряме порівняння з true/false та if (value) у C# неприпустимі. Значення зберігає сенс прапора, а чи не кількості чи ID.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.IsParalyzed();
UO.Print("IsParalyzed: " + Convert.ToString(result));Параметри та порядок виконання:
- Порожні дужки вибирають self. state зберігає один знімок прапора; true - числова константа 1.
- Результат false не виключає стіни, відсутність витривалості або іншу причину зупинки.
var state = UO.IsParalyzed();
if (Truth(Truth(state) == true))
{
UO.Print("Paralysis flag is set");
}
else
{
UO.Print("Paralysis flag is absent or unavailable");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- target зберігає hex-рядок serial останньої мети. IsNpc перевіряє, що це завантажений mobile, включаючи гравців.
- Команда з аргументом читає саме target. Вона не вибирає нового персонажа і не змінює lasttarget.
return RunScenario();
object? RunScenario()
{
var target = UO.GetSerial("lasttarget");
if (Truth(UO.IsNPC(target)))
{
var state = UO.IsParalyzed(target);
UO.Print("Selected mobile paralysis 1/0: " + Convert.ToString(state));
}
else
{
UO.Print("No loaded mobile selected");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Не більше 10 пауз по 100 мс. Кожен виклик без аргументу наново читає self.
- Після циклу окремо перевіряється наявність self. Це спостереження приблизно на секунду плюс виконання команд, а не гарантоване зняття паралічу.
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 attempts = 0;
while (Truth(Truth(UO.IsParalyzed()) == true) && Truth(attempts < 10))
{
await Delay(100);
attempts = attempts + 1;
}
if (Truth(UO.IsNPC("self")))
{
if (Truth(Truth(UO.IsParalyzed()) == false))
{
UO.Print("Paralysis flag is clear");
}
else
{
UO.Print("Still paralyzed");
}
}
else
{
UO.Print("Self is unavailable");
}
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.
Параметри: Немає параметрів.
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [IsParalyzed]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetLocked:bridge.GetLocked(serial). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
serial => bridge.GetLocked(serial)Внутрішній код реалізації, не самостійний скрипт.
() => getter(bridge.Self)Створення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Параметри: objID (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetLocked:bridge.GetLocked(Arg(0, bridge.Self)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0, bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Внутрішній код реалізації, не самостійний скрипт.
case "isparalyzed": return new InjectionValue(bridge.GetLocked(Arg(0, bridge.Self)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsPoisoned();
dynamic UO.IsPoisoned(object? objID);Перевіряє отруєння персонажа.
-
objID— Необов'язковий об'єкт у показаних формах: serial числом/hex-рядком, self, lasttarget або зареєстроване ім'я AddObject. Це не type. Без аргументу читається self. Невідомий текст у деяких формах викликає помилку перетворення; перевіряйте ім'я перед викликом.
Числовий прапор int: 1 (умова виконана), 0 (умова не виконано). Це числовий прапор: в C# перевіряйте result != 0 або result == 0. Пряме порівняння int з true/false та if (result) неприпустимо. "1" - "mobile" має "IsPoisoned", "0" - прапора немає або "mobile" немає. Ступінь отрути і час, що залишився, не повертаються.
Результат команди — числовий прапор: 1 означає виконану умову, 0 — невиконану. Після var result = команда (...) перевіряйте if (result != 0) або if (result == 0). Збережіть результат одного виклику: повторний виклик може виконати дію знову або прочитати стан, що вже змінився.
- Читає локальну модель: не відкриває target, не вимагає status, не змінює прапор і не відправляє пакет. Знищений об'єкт вважається відсутнім ще до видалення запису зі словника.
- Результат – окреме читання. Світ може змінитися між Exists та наступним викликом; Кілька запитів не утворюють атомарний знімок.
- Для Poisoned/Flying враховується версія протоколу: до 7.0.0.0 біт 0x04 означає отруту; починаючи з 7.0.0.0 він означає політ, а отрута зберігається окремо. Політ не обчислюється із Z.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.IsPoisoned();
UO.Print("IsPoisoned: " + Convert.ToString(result));Параметри та порядок виконання:
- Порожні дужки читають self. active зберігає результат один раз; true і false задають дві гілки. Print лише виводить приклад повідомлення.
var active = UO.IsPoisoned();
if (Truth(Truth(active) == true))
{
UO.Print("State is active");
}
else
{
UO.Print("State is inactive or unavailable");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- lasttarget — вибраний раніше об'єкт. Exists перевіряє його наявність. obj - єдиний параметр ReadState; функція повертає результат команди без зміни. Її визначення входить у код, що копіюється.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Exists("lasttarget")))
{
var observed = ReadState("lasttarget");
UO.Print("State 1/0: " + Convert.ToString(observed));
}
return null;
}
dynamic ReadState(dynamic obj)
{
return UO.IsPoisoned(obj);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Два виклики без аргументів читають self, UO.Wait(500) задає 500 мілісекунд. Порівнюються два знімки; проміжні переходи можуть бути пропущені. Нескінченного очікування немає.
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 before = UO.IsPoisoned();
await Delay(500);
var after = UO.IsPoisoned();
if (Truth(before != after))
{
UO.Print("State changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
}
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.
Параметри: Немає параметрів.
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [IsPoisoned]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Poisoned:bridge.Poisoned(serial). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
serial => bridge.Poisoned(serial)Внутрішній код реалізації, не самостійний скрипт.
() => getter(bridge.Self)Створення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Параметри: objID (Any)
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Poisoned:bridge.Poisoned(Arg(0, bridge.Self)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0, bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Внутрішній код реалізації, не самостійний скрипт.
case "ispoisoned": return new InjectionValue(bridge.Poisoned(Arg(0, bridge.Self)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsYellowHits(object? objID);Перевіряє прапор жовтої смуги mobile здоров'я.
-
objID— Обов'язковий serial/ID конкретного об'єкта: int, hex-рядок або аліас self, backpack, lasttarget, lastobject, lastcontainer, laststatus, finditem, lastcorpse або ім'я AddObject. Це не graphic/type. Невстановлене ім'я дозволяється у 0; ніякий новий target команда не відкриває. Аргумент обов'язковий; для себе передайте self.
int 1 — завантажений mobile має ознаку IsYellowHits. int 0 — ознака відсутня, об'єкт не є mobile, невідомий чи видалений. Це серверний/сумісний прапор, а не колір теми IDE і не кількість HP. Відсутність прапора не доводить уразливість: сервер може позначати захист інакше.
Результат команди — числовий прапор: 1 означає виконану умову, 0 — невиконану. Після var result = команда (...) перевіряйте if (result != 0) або if (result == 0). Збережіть результат одного виклику: повторний виклик може виконати дію знову або прочитати стан, що вже змінився.
- Читається локальна модель клієнта; запитів серверу, очікування та переміщення немає.
- Результат відноситься до моменту читання. Після UO.Wait або іншої дії об'єкт та його прапори можуть змінитися.
- Це серверний/сумісний прапор, а не колір теми IDE і не кількість HP. Відсутність прапора не доводить уразливість: сервер може позначати захист інакше.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.IsYellowHits("self");
UO.Print("IsYellowHits: " + Convert.ToString(result));Параметри та порядок виконання:
- Аргумент self явно вибирає свого персонажа. state — лише 1/0.
- Це серверний/сумісний прапор, а не колір теми IDE і не кількість HP. Відсутність прапора не доводить уразливість: сервер може позначати захист інакше.
var state = UO.IsYellowHits("self");
var hp = UO.GetHP("self");
UO.Print("Yellow flag: " + Convert.ToString(state));
UO.Print("Known HP: " + Convert.ToString(hp));Параметри та порядок виконання:
- IsNpc виключає предмет та невідомий об'єкт. target зберігає один serial, а не живе посилання на змінний lasttarget.
- Результат відноситься до поля IsYellowHits. Дані оновлюються лише після отримання відповідного стану клієнтом.
return RunScenario();
object? RunScenario()
{
var target = UO.GetSerial("lasttarget");
if (Truth(UO.IsNPC(target)))
{
var state = UO.IsYellowHits(target);
UO.Print("Selected mobile state 1/0: " + Convert.ToString(state));
}
else
{
UO.Print("No loaded mobile selected");
}
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(500) - пауза в мілісекундах. Після неї окремо перевіряється, що mobile ще існує.
- Порівнюються два знімки. Проміжні зміни можуть бути пропущені, і це не безперервна передплата серверних подій.
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 target = UO.GetSerial("lasttarget");
if (Truth(UO.IsNPC(target)))
{
var before = UO.IsYellowHits(target);
await Delay(500);
if (Truth(UO.IsNPC(target)))
{
var after = UO.IsYellowHits(target);
if (Truth(before != after))
{
UO.Print("Flag changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
}
}
else
{
UO.Print("Mobile left the local world");
}
}
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.
Параметри: objID (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetYellowBar:bridge.GetYellowBar(Arg(0, bridge.Self)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0, bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Внутрішній код реалізації, не самостійний скрипт.
case "isyellowhits": return new InjectionValue(bridge.GetYellowBar(Arg(0, bridge.Self)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.LastStatus();Повертає serial останнього об'єкта, для якого клієнт набув статусу.
Параметрів немає.
"int" - "32" біта "serial", не "type" і не логічний результат. 0: ще немає прийнятого статусу чи світ очищений. Старший біт зберігається; негативне число також може представляти serial. Перевіряйте != 0, а не > 0 і не == true.
- Без параметрів. Читання не надсилає пакети, не відкриває вікно і не чекає відповіді. UO.GetStatus(id), RequestStats і UpdateObject лише запитують дані: відправка не змінює LastStatus.
- Прийнятий пакет 0x11 зберігає serial та відомі клієнту X/Y разом у World для всіх скриптів. Невідомий/знищений об'єкт та неповний базовий пакет не замінюють запис. Наступні пакети інших об'єктів можуть замінити.
- X/Y - знімок Entity на момент отримання, а не поточна позиція. Для mobile це світові клітини; для предмета всередині контейнера можуть бути координати вмісту. Пакет статусу сам не передає X/Y. Переміщення/видалення об'єкта після прийому не змінює знімок; World.Clear скидає його. Для поточних координат існуючого об'єкта використовуйте GetX/GetY.
- Окремі дзвінки не утворюють атомарний знімок; сервер може оновити запис між ними. Рівність serial не доводить нову відповідь саме на ваш запит. laststatus без дужок - живе вбудоване значення, якщо скрипт не перевизначив його змінною; UO.LastStatus() - зареєстрована функція.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.LastStatus();
UO.Print("LastStatus: " + Convert.ToString(result));Параметри та порядок виконання:
- Значення читається один раз. Для serial HEX зберігає зручний шістнадцятковий запис; для координати Convert. ToString виводить число. Виклик не вибирає об'єкт.
var value = UO.LastStatus();
UO.Print("Saved value: " + Hex(value));
string Hex(object? value) => Convert.ToInt64(value).ToString("X");Параметри та порядок виконання:
- subject - serial self. 500 — пауза в мілісекундах, вибрана лише для прикладу. Вона не гарантує відповіді: показано поточний запис, який міг залишитися старим або належати іншому об'єкту.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var subject = UO.Self();
if (Truth(subject != 0))
{
UO.GetStatus(subject);
await Delay(500);
var value = UO.LastStatus();
UO.Print("Known value: " + Hex(value));
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- expectedId — serial, збережений у Main. Помічник повністю визначений нижче; -1 означає, що вибраного запису вже немає, і не є результатом самої команди. Перевірка до/після знижує ризик змішування об'єктів, але не гарантує атомарність при оновленнях того ж serial.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var expectedId = UO.LastStatus();
if (Truth(expectedId != 0))
{
var value = ReadSavedStatus(expectedId);
UO.Print("Checked value: " + Convert.ToString(value));
}
return null;
}
dynamic ReadSavedStatus(dynamic expectedId)
{
if (Truth(expectedId == 0) || Truth(UO.LastStatus() != expectedId))
{
return -1;
}
var value = UO.LastStatus();
if (Truth(UO.LastStatus() != expectedId))
{
return -1;
}
return value;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastStatus:bridge.LastStatus.
Внутрішній код реалізації, не самостійний скрипт.
case "laststatus": return new InjectionValue(bridge.LastStatus);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.LastStatusX();Повертає збережену координату X об'єкта останнього прийнятого статусу.
Параметрів немає.
int - збережена координата X, не піксель вікна статусу і не bool. До першого статусу або після очищення світу – 0; сама координата 0 теж допустима. Перевірте UO.LastStatus() для відсутності запису.
- Без параметрів. Читання не надсилає пакети, не відкриває вікно і не чекає відповіді. UO.GetStatus(id), RequestStats і UpdateObject лише запитують дані: відправка не змінює LastStatus.
- Прийнятий пакет 0x11 зберігає serial та відомі клієнту X/Y разом у World для всіх скриптів. Невідомий/знищений об'єкт та неповний базовий пакет не замінюють запис. Наступні пакети інших об'єктів можуть замінити.
- X/Y - знімок Entity на момент отримання, а не поточна позиція. Для mobile це світові клітини; для предмета всередині контейнера можуть бути координати вмісту. Пакет статусу сам не передає X/Y. Переміщення/видалення об'єкта після прийому не змінює знімок; World.Clear скидає його. Для поточних координат існуючого об'єкта використовуйте GetX/GetY.
- Окремі дзвінки не утворюють атомарний знімок; сервер може оновити запис між ними. Рівність serial не доводить нову відповідь саме на ваш запит. laststatus без дужок - живе вбудоване значення, якщо скрипт не перевизначив його змінною; UO.LastStatus() - зареєстрована функція.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.LastStatusX();
UO.Print("LastStatusX: " + Convert.ToString(result));Параметри та порядок виконання:
- Значення читається один раз. Для serial HEX зберігає зручний шістнадцятковий запис; для координати Convert. ToString виводить число. Виклик не вибирає об'єкт.
var value = UO.LastStatusX();
UO.Print("Saved value: " + Convert.ToString(value));Параметри та порядок виконання:
- subject - serial self. 500 — пауза в мілісекундах, вибрана лише для прикладу. Вона не гарантує відповіді: показано поточний запис, який міг залишитися старим або належати іншому об'єкту.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var subject = UO.Self();
if (Truth(subject != 0))
{
UO.GetStatus(subject);
await Delay(500);
var value = UO.LastStatusX();
UO.Print("Known value: " + Convert.ToString(value));
}
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;Параметри та порядок виконання:
- expectedId — serial, збережений у Main. Помічник повністю визначений нижче; -1 означає, що вибраного запису вже немає, і не є результатом самої команди. Перевірка до/після знижує ризик змішування об'єктів, але не гарантує атомарність при оновленнях того ж serial.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var expectedId = UO.LastStatus();
if (Truth(expectedId != 0))
{
var value = ReadSavedStatus(expectedId);
UO.Print("Checked value: " + Convert.ToString(value));
}
return null;
}
dynamic ReadSavedStatus(dynamic expectedId)
{
if (Truth(expectedId == 0) || Truth(UO.LastStatus() != expectedId))
{
return -1;
}
var value = UO.LastStatusX();
if (Truth(UO.LastStatus() != expectedId))
{
return -1;
}
return value;
}
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.LastStatusX. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetX:bridge.GetX(bridge.LastStatus). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastStatus:bridge.LastStatus.
Внутрішній код реалізації, не самостійний скрипт.
public int LastStatusX() => bridge is IStatusSnapshotBridge snapshot ? snapshot.LastStatusX : bridge.GetX(bridge.LastStatus);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.LastStatusY();Повертає збережену координату Y об'єкта останнього прийнятого статусу.
Параметрів немає.
int - збережена координата Y, не піксель вікна статусу і не bool. До першого статусу або після очищення світу – 0; сама координата 0 теж допустима. Перевірте UO.LastStatus() для відсутності запису.
- Без параметрів. Читання не надсилає пакети, не відкриває вікно і не чекає відповіді. UO.GetStatus(id), RequestStats і UpdateObject лише запитують дані: відправка не змінює LastStatus.
- Прийнятий пакет 0x11 зберігає serial та відомі клієнту X/Y разом у World для всіх скриптів. Невідомий/знищений об'єкт та неповний базовий пакет не замінюють запис. Наступні пакети інших об'єктів можуть замінити.
- X/Y - знімок Entity на момент отримання, а не поточна позиція. Для mobile це світові клітини; для предмета всередині контейнера можуть бути координати вмісту. Пакет статусу сам не передає X/Y. Переміщення/видалення об'єкта після прийому не змінює знімок; World.Clear скидає його. Для поточних координат існуючого об'єкта використовуйте GetX/GetY.
- Окремі дзвінки не утворюють атомарний знімок; сервер може оновити запис між ними. Рівність serial не доводить нову відповідь саме на ваш запит. laststatus без дужок - живе вбудоване значення, якщо скрипт не перевизначив його змінною; UO.LastStatus() - зареєстрована функція.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.LastStatusY();
UO.Print("LastStatusY: " + Convert.ToString(result));Параметри та порядок виконання:
- Значення читається один раз. Для serial HEX зберігає зручний шістнадцятковий запис; для координати Convert. ToString виводить число. Виклик не вибирає об'єкт.
var value = UO.LastStatusY();
UO.Print("Saved value: " + Convert.ToString(value));Параметри та порядок виконання:
- subject - serial self. 500 — пауза в мілісекундах, вибрана лише для прикладу. Вона не гарантує відповіді: показано поточний запис, який міг залишитися старим або належати іншому об'єкту.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var subject = UO.Self();
if (Truth(subject != 0))
{
UO.GetStatus(subject);
await Delay(500);
var value = UO.LastStatusY();
UO.Print("Known value: " + Convert.ToString(value));
}
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;Параметри та порядок виконання:
- expectedId — serial, збережений у Main. Помічник повністю визначений нижче; -1 означає, що вибраного запису вже немає, і не є результатом самої команди. Перевірка до/після знижує ризик змішування об'єктів, але не гарантує атомарність при оновленнях того ж serial.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var expectedId = UO.LastStatus();
if (Truth(expectedId != 0))
{
var value = ReadSavedStatus(expectedId);
UO.Print("Checked value: " + Convert.ToString(value));
}
return null;
}
dynamic ReadSavedStatus(dynamic expectedId)
{
if (Truth(expectedId == 0) || Truth(UO.LastStatus() != expectedId))
{
return -1;
}
var value = UO.LastStatusY();
if (Truth(UO.LastStatus() != expectedId))
{
return -1;
}
return value;
}
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.LastStatusY. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetY:bridge.GetY(bridge.LastStatus). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastStatus:bridge.LastStatus.
Внутрішній код реалізації, не самостійний скрипт.
public int LastStatusY() => bridge is IStatusSnapshotBridge snapshot ? snapshot.LastStatusY : bridge.GetY(bridge.LastStatus);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.Life();Читає здоров'я з локальної моделі.
Параметрів немає.
int — значення поля Hits, не відсоток і не bool. 0 буває справжнім значенням або ознакою відсутніх даних. Нульовий максимум не можна використовувати як дільник. У чужого mobile значення можуть бути невідомі. HP/HitsMax можуть містити відносну шкалу сервера замість точних очок. HP=0 не доводить смерть; для цього є Dead/IsDead.
- Команда не відкриває status і не вимагає оновлення сервера. Клієнт лише читає вже завантажені дані. Не змінює характеристики та не відправляє пакети.
- Результат – окреме читання. Світ може змінитися між Exists та наступним викликом; Кілька запитів не утворюють атомарний знімок.
- Під час читання об'єкта World.Get відкидає відсутній або IsDestroyed і виходить 0. HP/HitsMax читаються в Entity, включаючи предмети з цими полями; Mana/Stamina – тільки у Mobile. Без аргументу читається self. Однойменний варіант без параметрів не обов'язково має варіант з ID: дивіться сигнатури.
- Читання без аргументів теж повертає 0 для відсутнього чи знищеного Player. Це стосується і прямих Mana/Stamina та їх максимумів, а не тільки форм через World.Get. Присутній мертвий персонаж може зберігати значення.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.Life();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- Виклик без аргументів читає self. value зберігає одне число, Convert.ToString перетворює його лише повідомлення.
var value = UO.Life();
UO.Print("Life: " + Convert.ToString(value));Параметри та порядок виконання:
- Показано прикладний поріг або розрахунок цього поля. Числа в умові – налаштування прикладу, не межі сервера. Перед розподілом на максимум перевіряється його позитивність.
return RunScenario();
object? RunScenario()
{
var value = UO.Life();
var maximum = UO.GetMaxHP();
if (Truth(maximum > 0) && Truth(value * 100 / maximum < 50))
{
UO.Print("Health below half of the known maximum");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- У цього імені немає форми з ID. ReadValue без параметрів читає self; два дзвінки розділені UO.Wait(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()
{
var before = ReadValue();
await Delay(1000);
var after = ReadValue();
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
return null;
}
dynamic ReadValue()
{
return UO.Life();
}
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.GetHP:bridge.GetHP(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Внутрішній код реалізації, не самостійний скрипт.
case "life": return new InjectionValue(bridge.GetHP(bridge.Self));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Luck();Читає лічильник статусу свого персонажа: окуляри удачі.
Параметрів немає.
int — окуляри удачі, 0..65535 у моделі клієнта. 0 може бути реальним значенням, відсутністю даних або відсутнім/знищеним Player. Ця кількість не bool, ID або type: 1 означає одну одиницю, а не успіх. Команда не перебирає об'єкти та не повертає масив.
- Команда не сприймає аргументів. Використовуйте точні сигнатури вище.
- Читання в ігровому потоці бере Player. Luck, якщо поточний Player існує і не знищений; інакше 0. Екіпірування не перебирається, бонуси не перераховуються, статус не запитується, очікування поновлення немає. Присутня примара не дорівнює знищеному Player.
- Luck читає серверні окуляри удачі, збережені як UInt16, зі статусу type >= 4. Це не відсоток, випадкова кількість або гарантія якості видобутку. При читанні клієнт не обчислює шанс випадання та не додає бонусів екіпірування.
- CharacterStatus перевіряє обов'язкове тіло до оновлення. Weight є у своєму розширеному статусі, слоти - з type 3, Luck - з type 4, серверний WeightMax - з type 5. Компактний/старий пакет без необов'язкового лічильника залишає його попередній кеш. Новий Player починає з нулів; дзвінок не доводить отримання свіжого статусу.
- Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди. C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
- Кожен дзвінок читає локальні дані заново. Змінна зберігає знімок; окремі читання можуть отримати різні оновлення сервера. Ненульовий результат не перевіряє підключення. Нуль може бути значенням чи відсутністю даних.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.Luck();
UO.Print("Luck: " + Convert.ToString(result));Параметри та порядок виконання:
- value зберігає один виклик без аргументів для свого персонажа; Convert.ToString форматує число для журналу, не змінюючи його значення.
var value = UO.Luck();
UO.Print("Luck: " + Convert.ToString(value));Параметри та порядок виконання:
- UO.Wait(500) поділяє before та after на 500 мілісекунд. difference може бути позитивною, нульовою або негативною; проміжні оновлення та зміна персонажа можуть бути пропущені. Пауза належить наприклад.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.Luck();
await Delay(500);
var after = UO.Luck();
var difference = after - before;
UO.Print("Counter change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Параметри та порядок виконання:
- LuckAtLeast(minimum) отримує числову вимогу; 1000 — приклад, не межа чи відсоток. Відкидає відсутність Player, один раз читає успіх і повертає bool: true або false за value >= minimum. Сама удача не bool. Порівнюються кешовані окуляри, випадання видобутку не передбачається.
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(Truth(LuckAtLeast(1000)) == true))
{
UO.Print("Local check passed");
}
else
{
UO.Print("Local check failed or data unavailable");
}
return null;
}
dynamic LuckAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.Luck();
return value >= minimum;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Luck:bridge.Luck.
Внутрішній код реалізації, не самостійний скрипт.
case "luck": return new InjectionValue(bridge.Luck);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.Mana();Читає ману з локальної моделі.
Параметрів немає.
int — значення поля Mana, не відсоток і не bool. 0 буває справжнім значенням або ознакою відсутніх даних. Нульовий максимум не можна використовувати як дільник. У чужого mobile значення можуть бути невідомі. HP/HitsMax можуть містити відносну шкалу сервера замість точних очок. HP=0 не доводить смерть; для цього є Dead/IsDead.
- Команда не відкриває status і не вимагає оновлення сервера. Клієнт лише читає вже завантажені дані. Не змінює характеристики та не відправляє пакети.
- Результат – окреме читання. Світ може змінитися між Exists та наступним викликом; Кілька запитів не утворюють атомарний знімок.
- Під час читання об'єкта World.Get відкидає відсутній або IsDestroyed і виходить 0. HP/HitsMax читаються в Entity, включаючи предмети з цими полями; Mana/Stamina – тільки у Mobile. Без аргументу читається self. Однойменний варіант без параметрів не обов'язково має варіант з ID: дивіться сигнатури.
- Читання без аргументів теж повертає 0 для відсутнього чи знищеного Player. Це стосується і прямих Mana/Stamina та їх максимумів, а не тільки форм через World.Get. Присутній мертвий персонаж може зберігати значення.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.Mana();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- Виклик без аргументів читає self. value зберігає одне число, Convert.ToString перетворює його лише повідомлення.
var value = UO.Mana();
UO.Print("Mana: " + Convert.ToString(value));Параметри та порядок виконання:
- Показано прикладний поріг або розрахунок цього поля. Числа в умові – налаштування прикладу, не межі сервера. Перед розподілом на максимум перевіряється його позитивність.
return RunScenario();
object? RunScenario()
{
var value = UO.Mana();
if (Truth(value >= 10))
{
UO.Print("At least ten mana points are known");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- У цього імені немає форми з ID. ReadValue без параметрів читає self; два дзвінки розділені UO.Wait(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()
{
var before = ReadValue();
await Delay(1000);
var after = ReadValue();
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
return null;
}
dynamic ReadValue()
{
return UO.Mana();
}
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.Mana:bridge.Mana.
Внутрішній код реалізації, не самостійний скрипт.
case "mana": return new InjectionValue(bridge.Mana);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.MaxHP();Читає максимальне здоров'я із локальної моделі.
Параметрів немає.
int — значення поля HitsMax, не відсоток і не bool. 0 буває справжнім значенням або ознакою відсутніх даних. Нульовий максимум не можна використовувати як дільник. У чужого mobile значення можуть бути невідомі. HP/HitsMax можуть містити відносну шкалу сервера замість точних очок. HP=0 не доводить смерть; для цього є Dead/IsDead.
- Команда не відкриває status і не вимагає оновлення сервера. Клієнт лише читає вже завантажені дані. Не змінює характеристики та не відправляє пакети.
- Результат – окреме читання. Світ може змінитися між Exists та наступним викликом; Кілька запитів не утворюють атомарний знімок.
- Під час читання об'єкта World.Get відкидає відсутній або IsDestroyed і виходить 0. HP/HitsMax читаються в Entity, включаючи предмети з цими полями; Mana/Stamina – тільки у Mobile. Без аргументу читається self. Однойменний варіант без параметрів не обов'язково має варіант з ID: дивіться сигнатури.
- Читання без аргументів теж повертає 0 для відсутнього чи знищеного Player. Це стосується і прямих Mana/Stamina та їх максимумів, а не тільки форм через World.Get. Присутній мертвий персонаж може зберігати значення.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.MaxHP();
UO.Print("MaxHP: " + Convert.ToString(result));Параметри та порядок виконання:
- Виклик без аргументів читає self. value зберігає одне число, Convert.ToString перетворює його лише повідомлення.
var value = UO.MaxHP();
UO.Print("MaxHP: " + Convert.ToString(value));Параметри та порядок виконання:
- Показано прикладний поріг або розрахунок цього поля. Числа в умові – налаштування прикладу, не межі сервера. Перед розподілом на максимум перевіряється його позитивність.
return RunScenario();
object? RunScenario()
{
var value = UO.MaxHP();
if (Truth(value > 0))
{
UO.Print("Known HP percent: " + Convert.ToString(UO.GetHP() * 100 / value));
}
else
{
UO.Print("HP maximum unavailable");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- У цього імені немає форми з ID. ReadValue без параметрів читає self; два дзвінки розділені UO.Wait(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()
{
var before = ReadValue();
await Delay(1000);
var after = ReadValue();
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
return null;
}
dynamic ReadValue()
{
return UO.MaxHP();
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [MaxHP]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetMaxHP:bridge.GetMaxHP(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
() => bridge.GetMaxHP(bridge.Self)Створення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.MaxLife();Читає максимальне здоров'я із локальної моделі.
Параметрів немає.
int — значення поля HitsMax, не відсоток і не bool. 0 буває справжнім значенням або ознакою відсутніх даних. Нульовий максимум не можна використовувати як дільник. У чужого mobile значення можуть бути невідомі. HP/HitsMax можуть містити відносну шкалу сервера замість точних очок. HP=0 не доводить смерть; для цього є Dead/IsDead.
- Команда не відкриває status і не вимагає оновлення сервера. Клієнт лише читає вже завантажені дані. Не змінює характеристики та не відправляє пакети.
- Результат – окреме читання. Світ може змінитися між Exists та наступним викликом; Кілька запитів не утворюють атомарний знімок.
- Під час читання об'єкта World.Get відкидає відсутній або IsDestroyed і виходить 0. HP/HitsMax читаються в Entity, включаючи предмети з цими полями; Mana/Stamina – тільки у Mobile. Без аргументу читається self. Однойменний варіант без параметрів не обов'язково має варіант з ID: дивіться сигнатури.
- Читання без аргументів теж повертає 0 для відсутнього чи знищеного Player. Це стосується і прямих Mana/Stamina та їх максимумів, а не тільки форм через World.Get. Присутній мертвий персонаж може зберігати значення.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.MaxLife();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- Виклик без аргументів читає self. value зберігає одне число, Convert.ToString перетворює його лише повідомлення.
var value = UO.MaxLife();
UO.Print("MaxLife: " + Convert.ToString(value));Параметри та порядок виконання:
- Показано прикладний поріг або розрахунок цього поля. Числа в умові – налаштування прикладу, не межі сервера. Перед розподілом на максимум перевіряється його позитивність.
return RunScenario();
object? RunScenario()
{
var value = UO.MaxLife();
if (Truth(value > 0))
{
UO.Print("Known HP percent: " + Convert.ToString(UO.GetHP() * 100 / value));
}
else
{
UO.Print("HP maximum unavailable");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- У цього імені немає форми з ID. ReadValue без параметрів читає self; два дзвінки розділені UO.Wait(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()
{
var before = ReadValue();
await Delay(1000);
var after = ReadValue();
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
return null;
}
dynamic ReadValue()
{
return UO.MaxLife();
}
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.GetMaxHP:bridge.GetMaxHP(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Внутрішній код реалізації, не самостійний скрипт.
case "maxlife": return new InjectionValue(bridge.GetMaxHP(bridge.Self));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.MaxMana();Читає максимальну ману із локальної моделі.
Параметрів немає.
int — значення поля ManaMax, не відсоток і не bool. 0 буває справжнім значенням або ознакою відсутніх даних. Нульовий максимум не можна використовувати як дільник. У чужого mobile значення можуть бути невідомі. HP/HitsMax можуть містити відносну шкалу сервера замість точних очок. HP=0 не доводить смерть; для цього є Dead/IsDead.
- Команда не відкриває status і не вимагає оновлення сервера. Клієнт лише читає вже завантажені дані. Не змінює характеристики та не відправляє пакети.
- Результат – окреме читання. Світ може змінитися між Exists та наступним викликом; Кілька запитів не утворюють атомарний знімок.
- Під час читання об'єкта World.Get відкидає відсутній або IsDestroyed і виходить 0. HP/HitsMax читаються в Entity, включаючи предмети з цими полями; Mana/Stamina – тільки у Mobile. Без аргументу читається self. Однойменний варіант без параметрів не обов'язково має варіант з ID: дивіться сигнатури.
- Читання без аргументів теж повертає 0 для відсутнього чи знищеного Player. Це стосується і прямих Mana/Stamina та їх максимумів, а не тільки форм через World.Get. Присутній мертвий персонаж може зберігати значення.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.MaxMana();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- Виклик без аргументів читає self. value зберігає одне число, Convert.ToString перетворює його лише повідомлення.
var value = UO.MaxMana();
UO.Print("MaxMana: " + Convert.ToString(value));Параметри та порядок виконання:
- Показано прикладний поріг або розрахунок цього поля. Числа в умові – налаштування прикладу, не межі сервера. Перед розподілом на максимум перевіряється його позитивність.
return RunScenario();
object? RunScenario()
{
var value = UO.MaxMana();
if (Truth(value > 0))
{
UO.Print("Mana percent: " + Convert.ToString(UO.Mana() * 100 / value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- У цього імені немає форми з ID. ReadValue без параметрів читає self; два дзвінки розділені UO.Wait(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()
{
var before = ReadValue();
await Delay(1000);
var after = ReadValue();
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
return null;
}
dynamic ReadValue()
{
return UO.MaxMana();
}
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.MaxMana:bridge.MaxMana.
Внутрішній код реалізації, не самостійний скрипт.
case "maxmana": return new InjectionValue(bridge.MaxMana);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.MaxStam();Читає максимальну витривалість із локальної моделі.
Параметрів немає.
int — значення поля StaminaMax, не відсоток і не bool. 0 буває справжнім значенням або ознакою відсутніх даних. Нульовий максимум не можна використовувати як дільник. У чужого mobile значення можуть бути невідомі. HP/HitsMax можуть містити відносну шкалу сервера замість точних очок. HP=0 не доводить смерть; для цього є Dead/IsDead.
- Команда не відкриває status і не вимагає оновлення сервера. Клієнт лише читає вже завантажені дані. Не змінює характеристики та не відправляє пакети.
- Результат – окреме читання. Світ може змінитися між Exists та наступним викликом; Кілька запитів не утворюють атомарний знімок.
- Під час читання об'єкта World.Get відкидає відсутній або IsDestroyed і виходить 0. HP/HitsMax читаються в Entity, включаючи предмети з цими полями; Mana/Stamina – тільки у Mobile. Без аргументу читається self. Однойменний варіант без параметрів не обов'язково має варіант з ID: дивіться сигнатури.
- Читання без аргументів теж повертає 0 для відсутнього чи знищеного Player. Це стосується і прямих Mana/Stamina та їх максимумів, а не тільки форм через World.Get. Присутній мертвий персонаж може зберігати значення.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.MaxStam();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- Виклик без аргументів читає self. value зберігає одне число, Convert.ToString перетворює його лише повідомлення.
var value = UO.MaxStam();
UO.Print("MaxStam: " + Convert.ToString(value));Параметри та порядок виконання:
- Показано прикладний поріг або розрахунок цього поля. Числа в умові – налаштування прикладу, не межі сервера. Перед розподілом на максимум перевіряється його позитивність.
return RunScenario();
object? RunScenario()
{
var value = UO.MaxStam();
if (Truth(value > 0))
{
UO.Print("Stamina percent: " + Convert.ToString(UO.Stamina() * 100 / value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- У цього імені немає форми з ID. ReadValue без параметрів читає self; два дзвінки розділені UO.Wait(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()
{
var before = ReadValue();
await Delay(1000);
var after = ReadValue();
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
return null;
}
dynamic ReadValue()
{
return UO.MaxStam();
}
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.MaxStamina:bridge.MaxStamina.
Внутрішній код реалізації, не самостійний скрипт.
case "maxstam": return new InjectionValue(bridge.MaxStamina);ClassicUO — Bad Newbie & C# Scripts IDE