Repository navigation
UO Topic character Part 2
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Головна · C# · IDE · Команди UO · За абеткою · Приклади · Мови
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetEquipment(object? id);Читає список екіпірування на ненульових шарах об'єкта.
-
id— Serial/ID конкретного об'єкта: int, десятковий/hex-рядок або встановлений аліас self, backpack, lasttarget, lastobject або ім'я AddObject. Це не graphic/type. Рядки my/backpack вибирають рюкзак. Тільки явні 0, "0" або "ground" вибирають землю. Невідомий аліас, відсутній рюкзак, негативний ID або невідповідний вид значення дають порожній масив.
Array - serial кожного предмета, у якого Container дорівнює ID і Layer не дорівнює Invalid. Для ground/0 повертається порожній Array. Без записів повертається порожній Array. Список містить ID, не type та не шари.
- Читаються дані, які вже завантажені клієнтом. Команда не відкриває контейнер, не переміщає предмети та не завантажує об'єкти з усього сервера.
- Array - масив з індексами від 0. Зберігайте його у var, перевіряйте ArrayLength перед доступом. Елементи можуть зникнути зі світу після зйомки: перед дією перевіряйте Exists(serial).
- Немає рекурсивного обходу вкладених сумок, сортування на відстані, фільтра Ignore або FindDistance/FindVertical. Знімок звичайного FindType не змінюється.
- GetEquipment(self) включає рюкзак та інші відомі ненульові шари; сам факт шару не означає зброю або броню. GetContent(self) може включати екіпірування, оскільки його батько - персонаж.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.GetEquipment("self");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- ID="self" - поточний персонаж, відбираються його прямі предмети з ненульовим Layer.
- Довжина – число записів/ID. Це не сума Amount у стопках. Порожній список дає 0.
var items = UO.GetEquipment("self");
UO.Print(Convert.ToString(ArrayLength(items)));
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;Параметри та порядок виконання:
- ID="self" - поточний персонаж, відбираються його прямі предмети з ненульовим Layer.
- items[i] - числовий serial. Hex використовується лише для виведення. Цикл не звертається за останнім індексом.
return RunScenario();
object? RunScenario()
{
var items = UO.GetEquipment("self");
var i = 0;
while (Truth(i < ArrayLength(items)))
{
UO.Print("0x" + Hex(items[i]));
i = i + 1;
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
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;Параметри та порядок виконання:
- ID="self" - поточний персонаж, відбираються його прямі предмети з ненульовим Layer.
- Перевіряються дві різні речі: запис у знімку та існування об'єкту зараз. Порядок без явного сортування означає близькість.
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 items = UO.GetEquipment("self");
if (Truth(ArrayLength(items) > 0))
{
var first = items[0];
if (Truth(UO.Exists(first)))
{
UO.Print(UO.GetName(first));
}
}
else
{
UO.Print("Empty list");
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: id (Any)
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
InjectionScript.Runtime.NumberConversions.TryStr2Int:NumberConversions.TryStr2Int(text, out int literal). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(text). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetEquipment:bridge.GetEquipment(container). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetContent:bridge.GetContent(container). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Backpack:bridge.Backpack.
Внутрішній код реалізації, не самостійний скрипт.
case "getcontent":
case "getequipment":
{
InjectionValue selection = arguments[0];
bool ground = false, explicitZero;
int container;
if (selection.Kind == InjectionValueKind.String)
{
string text = Text(0).Trim();
ground = text.Equals("ground", StringComparison.OrdinalIgnoreCase);
explicitZero = NumberConversions.TryStr2Int(text, out int literal) && literal == 0;
container = ground ? 0 : text.Equals("my", StringComparison.OrdinalIgnoreCase)
? bridge.Backpack : GetObject(text);
}
else
{
if (selection.Kind != InjectionValueKind.Integer && selection.Kind != InjectionValueKind.Decimal)
return new InjectionValue(Array.Empty<InjectionValue>());
container = Arg(0);
explicitZero = selection.Kind == InjectionValueKind.Integer ? selection.Integer == 0 : selection.Decimal == 0d;
}
// Only an explicit ground/zero selector may query world items.
if (container < 0 || container == 0 && !ground && !explicitZero)
return new InjectionValue(Array.Empty<InjectionValue>());
bool equipment = name.Equals("GetEquipment", StringComparison.OrdinalIgnoreCase);
int[] items = equipment
? container == 0 ? Array.Empty<int>() : bridge.GetEquipment(container)
: bridge.GetContent(container);
return new InjectionValue(items.Select(serial => new InjectionValue(serial)).ToArray());
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetFireResist();Читає поле опору нинішнього персонажа: вогонь.
Параметрів немає.
int - знакове значення статусу, -32768..32767 у моделі клієнта. Негативне значення зберігається. 0 буває реальним опором, відсутністю даних чи відсутнім/знищеним Player; GetResist також дає 0 для невідомого селектора Це не bool, ID, навички або межі опору. 1 означає один пункт, а чи не успішне виконання.
- Команда не сприймає аргументів. Використовуйте точні сигнатури вище.
- Читання в ігровому потоці бере Player. FireResistance, якщо поточний Player існує і не знищений; інакше 0. Екіпірування не перебирається, бонуси не перераховуються, статус не запитується, очікування поновлення немає. Присутня примара не дорівнює знищеному Player.
- Стихійні поля приходять у розширеному CharacterStatus (0x11), type >= 4. Сама команда не перевіряє епоху сервера. Компактний/старий статус без цих полів залишає попередній кеш; у нового Player вихідно 0. Опір отрути не є прапор Poisoned; це також не навик Resisting Spells.
- CharacterStatus перевіряє обов'язкове тіло до зміни імені, здоров'я та власних характеристик, потім переводить кожне слово опору у знаковий Int16. Обрізане обов'язкове тіло не змінює попередні дані. Необов'язковий хвіст type 6 зберігає колишні правила; команди опорів не читають із нього максимальні межі.
- Кожен дзвінок читає локальні дані заново. Змінна зберігає знімок; окремі читання можуть отримати різні оновлення сервера. Ненульовий результат не перевіряє підключення. Нуль може бути значенням чи відсутністю даних.
- Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди. C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetFireResist();
UO.Print("GetFireResist: " + Convert.ToString(result));Параметри та порядок виконання:
- value зберігає результат одного дзвінка. Convert.ToString форматує число для журналу. Аргументів нема: читається свій персонаж.
var value = UO.GetFireResist();
UO.Print("FireResistance: " + Convert.ToString(value));Параметри та порядок виконання:
- Між before та after стоїть UO.Wait(500) мілісекунд; Відмінність може бути негативною. Проміжні оновлення можуть бути пропущені. Пауза відноситься, наприклад, не до затримки API.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.GetFireResist();
await Delay(500);
var after = UO.GetFireResist();
var difference = after - before;
UO.Print("Resistance change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Параметри та порядок виконання:
- minimum = 50 - приклад вимоги, не межа клієнта. ResistanceAtLeast відкидає відсутній 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(ResistanceAtLeast(50)) == true))
{
UO.Print("Local resistance requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic ResistanceAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.GetFireResist();
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 [GetFireResist]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.FireResistance:bridge.FireResistance.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
() => bridge.FireResistanceСтворення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetFlying();
int UO.GetFlying(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.GetFlying();
UO.Print("GetFlying: " + Convert.ToString(result));Параметри та порядок виконання:
- Порожні дужки означають self. true дорівнює 1, false дорівнює 0; if UO.Flying() { ... } допустимо. Цей приклад нічого не перемикає.
var active = UO.GetFlying();
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.GetFlying(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.GetFlying()))
{
return true;
}
UO.ToggleFly();
var waited = 0;
while (Truth(waited < timeoutMs))
{
if (!(Truth(UO.Connected())))
{
return false;
}
if (Truth(UO.GetFlying()))
{
return true;
}
await Delay(50);
waited += 50;
}
return UO.GetFlying();
}
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 [GetFlying]. -
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 [GetFlying]. -
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.GetFrozen();
int UO.GetFrozen(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.GetFrozen();
UO.Print("GetFrozen: " + Convert.ToString(result));Параметри та порядок виконання:
- Порожні дужки вибирають self. state зберігає один знімок прапора; true - числова константа 1.
- Результат false не виключає стіни, відсутність витривалості або іншу причину зупинки.
var state = UO.GetFrozen();
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.GetFrozen(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.GetFrozen()) == true) && Truth(attempts < 10))
{
await Delay(100);
attempts = attempts + 1;
}
if (Truth(UO.IsNPC("self")))
{
if (Truth(Truth(UO.GetFrozen()) == 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 [GetFrozen]. -
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 [GetFrozen]. -
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 · 繁體中文 · 日本語 · 한국어
dynamic UO.GetGold();Читає кількість золота із статусу поточного персонажа.
Параметрів немає.
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.GetGold();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- amount зберігає один результат; Convert.ToString форматує його для журналу. Золото не шукається, не переноситься та не витрачається.
var amount = UO.GetGold();
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.GetGold();
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.GetGold();
await Delay(500);
var after = UO.GetGold();
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.ReadGoldValue. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Gold:bridge.Gold.
Внутрішній код реалізації, не самостійний скрипт.
private InjectionValue ReadGoldValue()
{
// The existing bridge carries all 32 unsigned status-counter bits in
// an Int32. Keep small results Integer; Double exactly represents
// every UInt32 and avoids returning a negative large gold amount.
uint amount = unchecked((uint)bridge.Gold);
return amount <= int.MaxValue ? new InjectionValue((int)amount)
: new InjectionValue((double)amount);
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetHP();
int UO.GetHP(object? id);Читає здоров'я з локальної моделі.
-
id— Необов'язковий об'єкт у показаних формах: serial числом/hex-рядком, self, lasttarget або зареєстроване ім'я AddObject. Це не type. Без аргументу читається self. Невідомий текст у деяких формах викликає помилку перетворення; перевіряйте ім'я перед викликом.
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. Присутній мертвий персонаж може зберігати значення.
int hp = UO.GetHP();
UO.Print($"HP = {hp}");Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetHP();
UO.Print("GetHP: " + Convert.ToString(result));Параметри та порядок виконання:
- Виклик без аргументів читає self. value зберігає одне число, Convert.ToString перетворює його лише повідомлення.
var value = UO.GetHP();
UO.Print("GetHP: " + Convert.ToString(value));Параметри та порядок виконання:
- Показано прикладний поріг або розрахунок цього поля. Числа в умові – налаштування прикладу, не межі сервера. Перед розподілом на максимум перевіряється його позитивність.
return RunScenario();
object? RunScenario()
{
var value = UO.GetHP();
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;Параметри та порядок виконання:
- 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.GetHP(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.GetHP. -
InjectionScript.Runtime.InjectionApiUO.GetHP:GetHP("self").
Внутрішній код реалізації, не самостійний скрипт.
public int GetHP() => GetHP("self");Параметри: id (Any/Integer/String)
Результат: int / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetHP:bridge.GetHP(Arg(0, bridge.Self)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0, bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Внутрішній код реалізації, не самостійний скрипт.
case "gethp": return new InjectionValue(bridge.GetHP(Arg(0, bridge.Self)));Параметри: id (Any/Integer/String)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.GetHP. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetHP:bridge.GetHP(id).
Внутрішній код реалізації, не самостійний скрипт.
public int GetHP(int id) => bridge.GetHP(id);Параметри: id (Any/Integer/String)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.GetHP. -
InjectionScript.Runtime.InjectionApiUO.GetHP:GetHP(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Внутрішній код реалізації, не самостійний скрипт.
public int GetHP(string id) => GetHP(GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetHidden();
int UO.GetHidden(object? value);Перевіряє скритність персонажа.
-
value— Необов'язковий об'єкт у показаних формах: 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.GetHidden();
UO.Print("GetHidden: " + Convert.ToString(result));Параметри та порядок виконання:
- Порожні дужки читають self. active зберігає результат один раз; true і false задають дві гілки. Print лише виводить приклад повідомлення.
var active = UO.GetHidden();
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.GetHidden(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.GetHidden();
await Delay(500);
var after = UO.GetHidden();
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 [GetHidden]. -
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; вони не виконуються заново під час кожного виклику команди.
Параметри: value (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetHidden]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Hidden:bridge.Hidden(serial). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(value).
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
serial => bridge.Hidden(serial)Внутрішній код реалізації, не самостійний скрипт.
value => getter(GetObject(value))Створення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetInt();
int UO.GetInt(object? objID);Читає поточний інтелект (Intelligence, INT) персонажа.
-
objID— ObjID тільки у показаній формі з одним аргументом: serial персонажа числом, десятковим/0x hex-рядком, "self", "lasttarget" або ім'ям AddObject. Вибирає об'єкт, не graphic/type. Без аргументів читається поточний персонаж.
int — поточні окуляри характеристики, 0..65535 у моделі клієнта; не відсоток, ID, навичка, режим блокування або bool. 0 також означає відсутність/видалення персонажа або недоступний об'єкт. Порівнюйте з числовою вимогою, не == true. Це не межа характеристики та не гарантоване базове значення без модифікаторів.
- Підтримуються () для self та (ObjID) для явного об'єкта. Інших додаткових аргументів немає.
- Читає 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(). - ExecuteClientApiCompatibility.Arg спочатку дозволяє ім'я об'єкта, потім перетворює число. Невідомий нечисловий рядок викликає помилку перетворення, не приціл. double наводиться до int, Array/void - до 0. Для вибору персонажа використовуйте коректний serial, не такі перетворення.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetInt();
UO.Print("GetInt: " + Convert.ToString(result));Параметри та порядок виконання:
- value зберігає числовий результат; Convert.ToString лише форматує його для журналу. Аргументів та дії персонажа немає.
var value = UO.GetInt();
UO.Print("Intelligence: " + Convert.ToString(value));Параметри та порядок виконання:
- before та after поділяє 1000 мс; UO.Wait доданий у приклад. change=after-before буває позитивним, нульовим чи негативним. Сам собою він не розрізняє всі проміжні оновлення і вихід зі світу.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.GetInt();
await Delay(1000);
var after = UO.GetInt();
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.GetInt();
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.GetInt(id);
var byName = UO.GetInt("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 [GetInt]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Intelligence:bridge.Intelligence.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
() => bridge.IntelligenceСтворення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Параметри: objID (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetIntelligence:bridge.GetIntelligence(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Intelligence:bridge.Intelligence.
Внутрішній код реалізації, не самостійний скрипт.
case "getint": return new InjectionValue(arguments.Length > 0 ? bridge.GetIntelligence(Arg(0)) : bridge.Intelligence);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetIntelligence();Читає поточний інтелект (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.GetIntelligence();
UO.Print("GetIntelligence: " + Convert.ToString(result));Параметри та порядок виконання:
- value зберігає числовий результат; Convert.ToString лише форматує його для журналу. Аргументів та дії персонажа немає.
var value = UO.GetIntelligence();
UO.Print("Intelligence: " + Convert.ToString(value));Параметри та порядок виконання:
- before та after поділяє 1000 мс; UO.Wait доданий у приклад. change=after-before буває позитивним, нульовим чи негативним. Сам собою він не розрізняє всі проміжні оновлення і вихід зі світу.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.GetIntelligence();
await Delay(1000);
var after = UO.GetIntelligence();
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.GetIntelligence();
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 [GetIntelligence]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Intelligence:bridge.Intelligence.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
() => bridge.IntelligenceСтворення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetLife();Читає здоров'я з локальної моделі.
Параметрів немає.
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.GetLife();
UO.Print("GetLife: " + Convert.ToString(result));Параметри та порядок виконання:
- Виклик без аргументів читає self. value зберігає одне число, Convert.ToString перетворює його лише повідомлення.
var value = UO.GetLife();
UO.Print("GetLife: " + Convert.ToString(value));Параметри та порядок виконання:
- Показано прикладний поріг або розрахунок цього поля. Числа в умові – налаштування прикладу, не межі сервера. Перед розподілом на максимум перевіряється його позитивність.
return RunScenario();
object? RunScenario()
{
var value = UO.GetLife();
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.GetLife();
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetLife]. -
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.GetLuck();Читає лічильник статусу свого персонажа: окуляри удачі.
Параметрів немає.
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.GetLuck();
UO.Print("GetLuck: " + Convert.ToString(result));Параметри та порядок виконання:
- value зберігає один виклик без аргументів для свого персонажа; Convert.ToString форматує число для журналу, не змінюючи його значення.
var value = UO.GetLuck();
UO.Print("Luck: " + Convert.ToString(value));Параметри та порядок виконання:
- UO.Wait(500) поділяє before та after на 500 мілісекунд. difference може бути позитивною, нульовою або негативною; проміжні оновлення та зміна персонажа можуть бути пропущені. Пауза належить наприклад.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.GetLuck();
await Delay(500);
var after = UO.GetLuck();
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.GetLuck();
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 [GetLuck]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Luck:bridge.Luck.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
() => bridge.LuckСтворення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetMana();
dynamic UO.GetMana(object? objID);Читає ману з локальної моделі.
-
objID— Необов'язковий об'єкт у показаних формах: serial числом/hex-рядком, self, lasttarget або зареєстроване ім'я AddObject. Це не type. Без аргументу читається self. Невідомий текст у деяких формах викликає помилку перетворення; перевіряйте ім'я перед викликом.
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; для масиву показано кількість елементів.
var result = UO.GetMana();
UO.Print("GetMana: " + Convert.ToString(result));Параметри та порядок виконання:
- Виклик без аргументів читає self. value зберігає одне число, Convert.ToString перетворює його лише повідомлення.
var value = UO.GetMana();
UO.Print("GetMana: " + Convert.ToString(value));Параметри та порядок виконання:
- Показано прикладний поріг або розрахунок цього поля. Числа в умові – налаштування прикладу, не межі сервера. Перед розподілом на максимум перевіряється його позитивність.
return RunScenario();
object? RunScenario()
{
var value = UO.GetMana();
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;Параметри та порядок виконання:
- 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.GetMana(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 [GetMana]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Mana:bridge.Mana.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
() => bridge.ManaСтворення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Параметри: objID (Any)
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetMana:bridge.GetMana(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Mana:bridge.Mana.
Внутрішній код реалізації, не самостійний скрипт.
case "getmana": return new InjectionValue(arguments.Length > 0 ? bridge.GetMana(Arg(0)) : bridge.Mana);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetMaxHP();
int UO.GetMaxHP(object? id);Читає максимальне здоров'я із локальної моделі.
-
id— Необов'язковий об'єкт у показаних формах: serial числом/hex-рядком, self, lasttarget або зареєстроване ім'я AddObject. Це не type. Без аргументу читається self. Невідомий текст у деяких формах викликає помилку перетворення; перевіряйте ім'я перед викликом.
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.GetMaxHP();
UO.Print("GetMaxHP: " + Convert.ToString(result));Параметри та порядок виконання:
- Виклик без аргументів читає self. value зберігає одне число, Convert.ToString перетворює його лише повідомлення.
var value = UO.GetMaxHP();
UO.Print("GetMaxHP: " + Convert.ToString(value));Параметри та порядок виконання:
- Показано прикладний поріг або розрахунок цього поля. Числа в умові – налаштування прикладу, не межі сервера. Перед розподілом на максимум перевіряється його позитивність.
return RunScenario();
object? RunScenario()
{
var value = UO.GetMaxHP();
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;Параметри та порядок виконання:
- 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.GetMaxHP(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.GetMaxHP. -
InjectionScript.Runtime.InjectionApiUO.GetMaxHP:GetMaxHP("self").
Внутрішній код реалізації, не самостійний скрипт.
public int GetMaxHP() => GetMaxHP("self");Параметри: id (Any/Integer/String)
Результат: int / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetMaxHP:bridge.GetMaxHP(Arg(0, bridge.Self)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0, bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Внутрішній код реалізації, не самостійний скрипт.
case "getmaxhp": return new InjectionValue(bridge.GetMaxHP(Arg(0, bridge.Self)));Параметри: id (Any/Integer/String)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.GetMaxHP. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetMaxHP:bridge.GetMaxHP(id).
Внутрішній код реалізації, не самостійний скрипт.
public int GetMaxHP(int id) => bridge.GetMaxHP(id);Параметри: id (Any/Integer/String)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.GetMaxHP. -
InjectionScript.Runtime.InjectionApiUO.GetMaxHP:GetMaxHP(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Внутрішній код реалізації, не самостійний скрипт.
public int GetMaxHP(string id) => GetMaxHP(GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetMaxLife();Читає максимальне здоров'я із локальної моделі.
Параметрів немає.
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.GetMaxLife();
UO.Print("GetMaxLife: " + Convert.ToString(result));Параметри та порядок виконання:
- Виклик без аргументів читає self. value зберігає одне число, Convert.ToString перетворює його лише повідомлення.
var value = UO.GetMaxLife();
UO.Print("GetMaxLife: " + Convert.ToString(value));Параметри та порядок виконання:
- Показано прикладний поріг або розрахунок цього поля. Числа в умові – налаштування прикладу, не межі сервера. Перед розподілом на максимум перевіряється його позитивність.
return RunScenario();
object? RunScenario()
{
var value = UO.GetMaxLife();
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.GetMaxLife();
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetMaxLife]. -
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 · 繁體中文 · 日本語 · 한국어
int UO.GetMaxMana();
dynamic UO.GetMaxMana(object? objID);Читає максимальну ману із локальної моделі.
-
objID— Необов'язковий об'єкт у показаних формах: serial числом/hex-рядком, self, lasttarget або зареєстроване ім'я AddObject. Це не type. Без аргументу читається self. Невідомий текст у деяких формах викликає помилку перетворення; перевіряйте ім'я перед викликом.
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; для масиву показано кількість елементів.
var result = UO.GetMaxMana();
UO.Print("GetMaxMana: " + Convert.ToString(result));Параметри та порядок виконання:
- Виклик без аргументів читає self. value зберігає одне число, Convert.ToString перетворює його лише повідомлення.
var value = UO.GetMaxMana();
UO.Print("GetMaxMana: " + Convert.ToString(value));Параметри та порядок виконання:
- Показано прикладний поріг або розрахунок цього поля. Числа в умові – налаштування прикладу, не межі сервера. Перед розподілом на максимум перевіряється його позитивність.
return RunScenario();
object? RunScenario()
{
var value = UO.GetMaxMana();
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;Параметри та порядок виконання:
- 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.GetMaxMana(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 [GetMaxMana]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MaxMana:bridge.MaxMana.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
() => bridge.MaxManaСтворення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Параметри: objID (Any)
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetMaxMana:bridge.GetMaxMana(Arg(0, bridge.Self)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0, bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Внутрішній код реалізації, не самостійний скрипт.
case "getmaxmana": return new InjectionValue(bridge.GetMaxMana(Arg(0, bridge.Self)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetMaxStam();
dynamic UO.GetMaxStam(object? objID);Читає максимальну витривалість із локальної моделі.
-
objID— Необов'язковий об'єкт у показаних формах: serial числом/hex-рядком, self, lasttarget або зареєстроване ім'я AddObject. Це не type. Без аргументу читається self. Невідомий текст у деяких формах викликає помилку перетворення; перевіряйте ім'я перед викликом.
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; для масиву показано кількість елементів.
var result = UO.GetMaxStam();
UO.Print("GetMaxStam: " + Convert.ToString(result));Параметри та порядок виконання:
- Виклик без аргументів читає self. value зберігає одне число, Convert.ToString перетворює його лише повідомлення.
var value = UO.GetMaxStam();
UO.Print("GetMaxStam: " + Convert.ToString(value));Параметри та порядок виконання:
- Показано прикладний поріг або розрахунок цього поля. Числа в умові – налаштування прикладу, не межі сервера. Перед розподілом на максимум перевіряється його позитивність.
return RunScenario();
object? RunScenario()
{
var value = UO.GetMaxStam();
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;Параметри та порядок виконання:
- 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.GetMaxStam(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 [GetMaxStam]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MaxStamina:bridge.MaxStamina.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
() => bridge.MaxStaminaСтворення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Параметри: objID (Any)
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetMaxStamina:bridge.GetMaxStamina(Arg(0, bridge.Self)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0, bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Внутрішній код реалізації, не самостійний скрипт.
case "getmaxstam": return new InjectionValue(bridge.GetMaxStamina(Arg(0, bridge.Self)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetMaxStamina();Читає максимальну витривалість із локальної моделі.
Параметрів немає.
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; для масиву показано кількість елементів.
var result = UO.GetMaxStamina();
UO.Print("GetMaxStamina: " + Convert.ToString(result));Параметри та порядок виконання:
- Виклик без аргументів читає self. value зберігає одне число, Convert.ToString перетворює його лише повідомлення.
var value = UO.GetMaxStamina();
UO.Print("GetMaxStamina: " + Convert.ToString(value));Параметри та порядок виконання:
- Показано прикладний поріг або розрахунок цього поля. Числа в умові – налаштування прикладу, не межі сервера. Перед розподілом на максимум перевіряється його позитивність.
return RunScenario();
object? RunScenario()
{
var value = UO.GetMaxStamina();
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.GetMaxStamina();
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetMaxStamina]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MaxStamina:bridge.MaxStamina.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
() => bridge.MaxStaminaСтворення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetMaxWeight();Читає лічильник статусу свого персонажа: максимальна вага у stones.
Параметрів немає.
int — максимальна вага в stones, 0..65535 у моделі клієнта. 0 може бути реальним значенням, відсутністю даних або відсутнім/знищеним Player. Ця кількість не bool, ID або type: 1 означає одну одиницю, а не успіх. Команда не перебирає об'єкти та не повертає масив.
- Команда не сприймає аргументів. Використовуйте точні сигнатури вище.
- Читання в ігровому потоці бере Player. WeightMax, якщо поточний Player існує і не знищений; інакше 0. Екіпірування не перебирається, бонуси не перераховуються, статус не запитується, очікування поновлення немає. Присутня примара не дорівнює знищеному Player.
- MaxWeight читає кеш WeightMax. Власний статус type >= 5 задає серверну межу UInt16, навіть якщо вона дорівнює 0. Старий розширений статус обчислює його один раз під час прийому: протокол UO >= 5.0.0a — 7 * floor(Strength / 2) + 40; старіший - Strength * 4 + 25. Результат зберігається як UInt16; крайні значення обертаються за модулем 65536. Strength=101 дає відповідно 390 або 429. При окремій зміні Strength сам getter межа не перераховує.
- 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.GetMaxWeight();
UO.Print("GetMaxWeight: " + Convert.ToString(result));Параметри та порядок виконання:
- value зберігає один виклик без аргументів для свого персонажа; Convert.ToString форматує число для журналу, не змінюючи його значення.
var value = UO.GetMaxWeight();
UO.Print("WeightMax: " + Convert.ToString(value));Параметри та порядок виконання:
- UO.Wait(500) поділяє before та after на 500 мілісекунд. difference може бути позитивною, нульовою або негативною; проміжні оновлення та зміна персонажа можуть бути пропущені. Пауза належить наприклад.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.GetMaxWeight();
await Delay(500);
var after = UO.GetMaxWeight();
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.Weight();
var maximum = UO.GetMaxWeight();
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.RegisterCharacterGetterAliases [GetMaxWeight]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MaxWeight:bridge.MaxWeight.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
() => bridge.MaxWeightСтворення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetParalisa();
int UO.GetParalisa(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.GetParalisa();
UO.Print("GetParalisa: " + Convert.ToString(result));Параметри та порядок виконання:
- Порожні дужки вибирають self. state зберігає один знімок прапора; true - числова константа 1.
- Результат false не виключає стіни, відсутність витривалості або іншу причину зупинки.
var state = UO.GetParalisa();
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.GetParalisa(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.GetParalisa()) == true) && Truth(attempts < 10))
{
await Delay(100);
attempts = attempts + 1;
}
if (Truth(UO.IsNPC("self")))
{
if (Truth(Truth(UO.GetParalisa()) == 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 [GetParalisa]. -
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 [GetParalisa]. -
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.GetParalysed();
int UO.GetParalysed(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.GetParalysed();
UO.Print("GetParalysed: " + Convert.ToString(result));Параметри та порядок виконання:
- Порожні дужки вибирають self. state зберігає один знімок прапора; true - числова константа 1.
- Результат false не виключає стіни, відсутність витривалості або іншу причину зупинки.
var state = UO.GetParalysed();
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.GetParalysed(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.GetParalysed()) == true) && Truth(attempts < 10))
{
await Delay(100);
attempts = attempts + 1;
}
if (Truth(UO.IsNPC("self")))
{
if (Truth(Truth(UO.GetParalysed()) == 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 [GetParalysed]. -
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 [GetParalysed]. -
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.GetParalyzed();
int UO.GetParalyzed(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.GetParalyzed();
UO.Print("GetParalyzed: " + Convert.ToString(result));Параметри та порядок виконання:
- Порожні дужки вибирають self. state зберігає один знімок прапора; true - числова константа 1.
- Результат false не виключає стіни, відсутність витривалості або іншу причину зупинки.
var state = UO.GetParalyzed();
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.GetParalyzed(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.GetParalyzed()) == true) && Truth(attempts < 10))
{
await Delay(100);
attempts = attempts + 1;
}
if (Truth(UO.IsNPC("self")))
{
if (Truth(Truth(UO.GetParalyzed()) == 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 [GetParalyzed]. -
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 [GetParalyzed]. -
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.GetPhysicalResist();Читає поле опору поточного персонажа: фізична броня/опір.
Параметрів немає.
int - знакове значення статусу, -32768..32767 у моделі клієнта. Негативне значення зберігається. 0 буває реальним опором, відсутністю даних чи відсутнім/знищеним Player; GetResist також дає 0 для невідомого селектора Це не bool, ID, навички або межі опору. 1 означає один пункт, а чи не успішне виконання.
- Команда не сприймає аргументів. Використовуйте точні сигнатури вище.
- Читання в ігровому потоці бере Player. PhysicalResistance, якщо поточний Player існує і не знищений; інакше 0. Екіпірування не перебирається, бонуси не перераховуються, статус не запитується, очікування поновлення немає. Присутня примара не дорівнює знищеному Player.
- PhysicalResistance - серверне поле броні/статусу: класичний сервер може передавати рейтинг броні, а правила з опорами - фізичний опір. API не переводить одне в інше і не обчислює відсоток зниження шкоди. Armor та фізичні псевдоніми читають одне поле.
- CharacterStatus перевіряє обов'язкове тіло до зміни імені, здоров'я та власних характеристик, потім переводить кожне слово опору у знаковий Int16. Обрізане обов'язкове тіло не змінює попередні дані. Необов'язковий хвіст type 6 зберігає колишні правила; команди опорів не читають із нього максимальні межі.
- Кожен дзвінок читає локальні дані заново. Змінна зберігає знімок; окремі читання можуть отримати різні оновлення сервера. Ненульовий результат не перевіряє підключення. Нуль може бути значенням чи відсутністю даних.
- Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди. C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetPhysicalResist();
UO.Print("GetPhysicalResist: " + Convert.ToString(result));Параметри та порядок виконання:
- value зберігає результат одного дзвінка. Convert.ToString форматує число для журналу. Аргументів нема: читається свій персонаж.
var value = UO.GetPhysicalResist();
UO.Print("PhysicalResistance: " + Convert.ToString(value));Параметри та порядок виконання:
- Між before та after стоїть UO.Wait(500) мілісекунд; Відмінність може бути негативною. Проміжні оновлення можуть бути пропущені. Пауза відноситься, наприклад, не до затримки API.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.GetPhysicalResist();
await Delay(500);
var after = UO.GetPhysicalResist();
var difference = after - before;
UO.Print("Resistance change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Параметри та порядок виконання:
- minimum = 50 - приклад вимоги, не межа клієнта. ResistanceAtLeast відкидає відсутній 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(ResistanceAtLeast(50)) == true))
{
UO.Print("Local resistance requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic ResistanceAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.GetPhysicalResist();
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 [GetPhysicalResist]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Armor:bridge.Armor.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
() => bridge.ArmorСтворення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetPlayerStatusText(object? objID);Формує короткий текст імені та здоров'я об'єкта.
-
objID— Serial/ID конкретного об'єкта: int, десятковий/hex-рядок або встановлений аліас self, backpack, lasttarget, lastobject або ім'я AddObject. Це не graphic/type.
string у форматі "імя HP/MaxHP". Наприклад "Raven 75/100". Для невідомого об'єкта зазвичай " 0/0" з початковим пробілом. Це текст, а не структура, bool чи відкритий статус-гамп.
- Читаються GetName/GetHP/GetMaxHP без запиту на оновлення. Не розбирайте текст за пробілом для отримання ID або HP: ім'я може містити пробіли, використовуйте для чисел окремі getter-команди.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.GetPlayerStatusText("self");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- ObjID = self - поточний персонаж.
- Print показує готовий текст у журналі.
UO.Print(UO.GetPlayerStatusText("self"));Параметри та порядок виконання:
- ObjID=serial останньої мети.
- Exists запобігає виведенню невідомого об’єкта, наприклад 0/0.
return RunScenario();
object? RunScenario()
{
var target = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(target)))
{
UO.Print(UO.GetPlayerStatusText(target));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- 500 — мілісекунди між читаннями.
- Порівнюється текст імені/HP, а не всі характеристики персонажа.
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.GetPlayerStatusText("self");
await Delay(500);
var after = UO.GetPlayerStatusText("self");
if (Truth(before != after))
{
UO.Print(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.
Параметри: objID (Any)
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetName:bridge.GetName(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetHP:bridge.GetHP(Arg(0)). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetMaxHP:bridge.GetMaxHP(Arg(0)).
Внутрішній код реалізації, не самостійний скрипт.
case "getplayerstatustext": return new InjectionValue(bridge.GetName(Arg(0)) + " " + bridge.GetHP(Arg(0)) + "/" + bridge.GetMaxHP(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetPoisonResist();Читає поле опору поточного персонажа: отрута.
Параметрів немає.
int - знакове значення статусу, -32768..32767 у моделі клієнта. Негативне значення зберігається. 0 буває реальним опором, відсутністю даних чи відсутнім/знищеним Player; GetResist також дає 0 для невідомого селектора Це не bool, ID, навички або межі опору. 1 означає один пункт, а чи не успішне виконання.
- Команда не сприймає аргументів. Використовуйте точні сигнатури вище.
- Читання в ігровому потоці бере Player. PoisonResistance, якщо поточний Player існує і не знищений; інакше 0. Екіпірування не перебирається, бонуси не перераховуються, статус не запитується, очікування поновлення немає. Присутня примара не дорівнює знищеному Player.
- Стихійні поля приходять у розширеному CharacterStatus (0x11), type >= 4. Сама команда не перевіряє епоху сервера. Компактний/старий статус без цих полів залишає попередній кеш; у нового Player вихідно 0. Опір отрути не є прапор Poisoned; це також не навик Resisting Spells.
- CharacterStatus перевіряє обов'язкове тіло до зміни імені, здоров'я та власних характеристик, потім переводить кожне слово опору у знаковий Int16. Обрізане обов'язкове тіло не змінює попередні дані. Необов'язковий хвіст type 6 зберігає колишні правила; команди опорів не читають із нього максимальні межі.
- Кожен дзвінок читає локальні дані заново. Змінна зберігає знімок; окремі читання можуть отримати різні оновлення сервера. Ненульовий результат не перевіряє підключення. Нуль може бути значенням чи відсутністю даних.
- Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди. C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetPoisonResist();
UO.Print("GetPoisonResist: " + Convert.ToString(result));Параметри та порядок виконання:
- value зберігає результат одного дзвінка. Convert.ToString форматує число для журналу. Аргументів нема: читається свій персонаж.
var value = UO.GetPoisonResist();
UO.Print("PoisonResistance: " + Convert.ToString(value));Параметри та порядок виконання:
- Між before та after стоїть UO.Wait(500) мілісекунд; Відмінність може бути негативною. Проміжні оновлення можуть бути пропущені. Пауза відноситься, наприклад, не до затримки API.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.GetPoisonResist();
await Delay(500);
var after = UO.GetPoisonResist();
var difference = after - before;
UO.Print("Resistance change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Параметри та порядок виконання:
- minimum = 50 - приклад вимоги, не межа клієнта. ResistanceAtLeast відкидає відсутній 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(ResistanceAtLeast(50)) == true))
{
UO.Print("Local resistance requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic ResistanceAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.GetPoisonResist();
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 [GetPoisonResist]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.PoisonResistance:bridge.PoisonResistance.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
() => bridge.PoisonResistanceСтворення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetPoisoned();
int UO.GetPoisoned(object? value);Перевіряє отруєння персонажа.
-
value— Необов'язковий об'єкт у показаних формах: 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.GetPoisoned();
UO.Print("GetPoisoned: " + Convert.ToString(result));Параметри та порядок виконання:
- Порожні дужки читають self. active зберігає результат один раз; true і false задають дві гілки. Print лише виводить приклад повідомлення.
var active = UO.GetPoisoned();
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.GetPoisoned(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.GetPoisoned();
await Delay(500);
var after = UO.GetPoisoned();
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 [GetPoisoned]. -
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; вони не виконуються заново під час кожного виклику команди.
Параметри: value (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetPoisoned]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Poisoned:bridge.Poisoned(serial). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(value).
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
serial => bridge.Poisoned(serial)Внутрішній код реалізації, не самостійний скрипт.
value => getter(GetObject(value))Створення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetRace();Читає расу персонажа із моделі клієнта.
Параметрів немає.
int — 1=human, 2=elf, 3=gargoyle за моделлю клієнта. 0 означає відсутність завантаженого персонажа. Це не body/graphic та не serial.
- Читаються вже отримані локальні дані. Запит не відкриває статус і не змушує сервер надіслати оновлення. Після смерті, переходу на карту або видалення об'єкта значення можуть змінитися між двома викликами.
- C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetRace();
UO.Print("GetRace: " + Convert.ToString(result));Параметри та порядок виконання:
- Виклик без аргументів відноситься до self. Раса персонажа зберігається у значенні.
- Convert.ToString перетворює число для виведення і не змінює значення результату.
var value = UO.GetRace();
UO.Print("GetRace: " + Convert.ToString(value));Параметри та порядок виконання:
- Значення читається одного разу без аргументів. Расу персонажа використовують у показаному розрахунку чи умови.
- Числові пороги — приклад умов скрипту, а чи не нові межі клієнта. Поле зберігає серверні одиниці та обмеження, описані вище.
return RunScenario();
object? RunScenario()
{
var value = UO.GetRace();
if (Truth(value == 3))
{
UO.Print("Player race is gargoyle");
}
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.GetRace();
await Delay(1000);
var after = UO.GetRace();
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 [GetRace]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Race:bridge.Race.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
() => bridge.RaceСтворення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetResist(object? resistance);Читає один опір свого персонажа за числовим або рядковим селектором.
-
resistance- Resistance обов'язковий. Числа: 0=physical, 1=fire, 2=cold, 3=poison, 4=energy. Рядки: physical/phys/armor, fire, cold, poison, energy. Регістр та крайні прогалини ігноруються. Немає serial, type, hue, прицілу чи другого аргументу.
int - знакове значення статусу, -32768..32767 у моделі клієнта. Негативне значення зберігається. 0 буває реальним опором, відсутністю даних чи відсутнім/знищеним Player; GetResist також дає 0 для невідомого селектора Це не bool, ID, навички або межі опору. 1 означає один пункт, а чи не успішне виконання.
- GetResistance спочатку розрізняє тип значення: рядки "1" та "0" - невідомі імена, дають 0 і не є числовими селекторами. Нестроковий double відкидає дріб до нуля: 1.9 -> fire, -0.9 -> physical. true=1 вибирає fire, false=0 — physical; Array/null також перетворюються на 0. Використовуйте явне ціле чи допустиме ім'я. Імена AddObject не дозволяються.
- GetResistance вибирає одно поле bridge. Невідомі числа/імена дають int 0 без читання поля. Команда не знімає п'ять значень атомарно та не змінює опору.
- PhysicalResistance - серверне поле броні/статусу: класичний сервер може передавати рейтинг броні, а правила з опорами - фізичний опір. API не переводить одне в інше і не обчислює відсоток зниження шкоди. Armor та фізичні псевдоніми читають одне поле.
- Стихійні поля приходять у розширеному CharacterStatus (0x11), type >= 4. Сама команда не перевіряє епоху сервера. Компактний/старий статус без цих полів залишає попередній кеш; у нового Player вихідно 0. Опір отрути не є прапор Poisoned; це також не навик Resisting Spells.
- CharacterStatus перевіряє обов'язкове тіло до зміни імені, здоров'я та власних характеристик, потім переводить кожне слово опору у знаковий Int16. Обрізане обов'язкове тіло не змінює попередні дані. Необов'язковий хвіст type 6 зберігає колишні правила; команди опорів не читають із нього максимальні межі.
- Invoke читає на ігровому потоці з можливістю скасувати очікування на скрипт. Чи не запитує status, не відкриває target, не посилає пакет, не змінює характеристику і не додає затримку.
- Кожен дзвінок читає локальні дані заново. Змінна зберігає знімок; окремі читання можуть отримати різні оновлення сервера. Ненульовий результат не перевіряє підключення. Нуль може бути значенням чи відсутністю даних.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetResist("fire");
UO.Print("GetResist: " + Convert.ToString(result));Параметри та порядок виконання:
- resistance=" FiRe " вибирає вогонь після видалення крайніх прогалин і без урахування регістру. value залишається знаковим числом; приціл не з'являється.
var value = UO.GetResist(" FiRe ");
UO.Print("Fire resistance: " + Convert.ToString(value));Параметри та порядок виконання:
- 2 вибирає холод; "poison" - отрута. Це селектори, не serial. Порівняння двох знімків повертає bool; опір отрути не каже, чи отруєний персонаж.
return RunScenario();
object? RunScenario()
{
var cold = UO.GetResist(2);
var poison = UO.GetResist("poison");
if (Truth(cold < poison))
{
UO.Print("Cold resistance is lower");
}
else
{
UO.Print("Cold resistance is equal or higher");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- minimum = 50 - приклад вимоги, не межа клієнта. ResistanceAtLeast відкидає відсутній Player, читає одне значення і повертає bool: true або false за умовою value >= minimum. Сам опір не bool. Функцію повністю оголошено нижче.
- selector передається з функції в GetResist без змін; приклад використовує "fire". Функція перевіряє наявність Player, але не валідує довільний селектор та не підтверджує свіжість статусу. Використовуйте селектор зі списку.
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(ResistanceAtLeast("fire", 50)) == true))
{
UO.Print("Local fire resistance requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic ResistanceAtLeast(dynamic selector, dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.GetResist(selector);
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.
Параметри: resistance (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.GetResistance. -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(resistance). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Armor:bridge.Armor. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.FireResistance:bridge.FireResistance. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ColdResistance:bridge.ColdResistance. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.PoisonResistance:bridge.PoisonResistance. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.EnergyResistance:bridge.EnergyResistance.
Внутрішній код реалізації, не самостійний скрипт.
private int GetResistance(InjectionValue resistance)
{
if (resistance.Kind != InjectionValueKind.String)
{
switch (NumberConversions.ToInt(resistance))
{
case 0: return bridge.Armor;
case 1: return bridge.FireResistance;
case 2: return bridge.ColdResistance;
case 3: return bridge.PoisonResistance;
case 4: return bridge.EnergyResistance;
default: return 0;
}
}
switch ((resistance.String ?? string.Empty).Trim().ToLowerInvariant())
{
case "physical":
case "phys":
case "armor": return bridge.Armor;
case "fire": return bridge.FireResistance;
case "cold": return bridge.ColdResistance;
case "poison": return bridge.PoisonResistance;
case "energy": return bridge.EnergyResistance;
default: return 0;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetResistCold();Читає поле опору поточного персонажа: мороз.
Параметрів немає.
int - знакове значення статусу, -32768..32767 у моделі клієнта. Негативне значення зберігається. 0 буває реальним опором, відсутністю даних чи відсутнім/знищеним Player; GetResist також дає 0 для невідомого селектора Це не bool, ID, навички або межі опору. 1 означає один пункт, а чи не успішне виконання.
- Команда не сприймає аргументів. Використовуйте точні сигнатури вище.
- Читання в ігровому потоці бере Player. ColdResistance, якщо поточний Player існує і не знищений; інакше 0. Екіпірування не перебирається, бонуси не перераховуються, статус не запитується, очікування поновлення немає. Присутня примара не дорівнює знищеному Player.
- Стихійні поля приходять у розширеному CharacterStatus (0x11), type >= 4. Сама команда не перевіряє епоху сервера. Компактний/старий статус без цих полів залишає попередній кеш; у нового Player вихідно 0. Опір отрути не є прапор Poisoned; це також не навик Resisting Spells.
- CharacterStatus перевіряє обов'язкове тіло до зміни імені, здоров'я та власних характеристик, потім переводить кожне слово опору у знаковий Int16. Обрізане обов'язкове тіло не змінює попередні дані. Необов'язковий хвіст type 6 зберігає колишні правила; команди опорів не читають із нього максимальні межі.
- Кожен дзвінок читає локальні дані заново. Змінна зберігає знімок; окремі читання можуть отримати різні оновлення сервера. Ненульовий результат не перевіряє підключення. Нуль може бути значенням чи відсутністю даних.
- Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди. C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetResistCold();
UO.Print("GetResistCold: " + Convert.ToString(result));Параметри та порядок виконання:
- value зберігає результат одного дзвінка. Convert.ToString форматує число для журналу. Аргументів нема: читається свій персонаж.
var value = UO.GetResistCold();
UO.Print("ColdResistance: " + Convert.ToString(value));Параметри та порядок виконання:
- Між before та after стоїть UO.Wait(500) мілісекунд; Відмінність може бути негативною. Проміжні оновлення можуть бути пропущені. Пауза відноситься, наприклад, не до затримки API.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.GetResistCold();
await Delay(500);
var after = UO.GetResistCold();
var difference = after - before;
UO.Print("Resistance change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Параметри та порядок виконання:
- minimum = 50 - приклад вимоги, не межа клієнта. ResistanceAtLeast відкидає відсутній 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(ResistanceAtLeast(50)) == true))
{
UO.Print("Local resistance requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic ResistanceAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.GetResistCold();
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 [GetResistCold]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ColdResistance:bridge.ColdResistance.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
() => bridge.ColdResistanceСтворення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetResistEnergy();Читає поле опору нинішнього персонажа: енергія.
Параметрів немає.
int - знакове значення статусу, -32768..32767 у моделі клієнта. Негативне значення зберігається. 0 буває реальним опором, відсутністю даних чи відсутнім/знищеним Player; GetResist також дає 0 для невідомого селектора Це не bool, ID, навички або межі опору. 1 означає один пункт, а чи не успішне виконання.
- Команда не сприймає аргументів. Використовуйте точні сигнатури вище.
- Читання в ігровому потоці бере Player. EnergyResistance, якщо поточний Player існує і не знищений; інакше 0. Екіпірування не перебирається, бонуси не перераховуються, статус не запитується, очікування поновлення немає. Присутня примара не дорівнює знищеному Player.
- Стихійні поля приходять у розширеному CharacterStatus (0x11), type >= 4. Сама команда не перевіряє епоху сервера. Компактний/старий статус без цих полів залишає попередній кеш; у нового Player вихідно 0. Опір отрути не є прапор Poisoned; це також не навик Resisting Spells.
- CharacterStatus перевіряє обов'язкове тіло до зміни імені, здоров'я та власних характеристик, потім переводить кожне слово опору у знаковий Int16. Обрізане обов'язкове тіло не змінює попередні дані. Необов'язковий хвіст type 6 зберігає колишні правила; команди опорів не читають із нього максимальні межі.
- Кожен дзвінок читає локальні дані заново. Змінна зберігає знімок; окремі читання можуть отримати різні оновлення сервера. Ненульовий результат не перевіряє підключення. Нуль може бути значенням чи відсутністю даних.
- Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди. C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetResistEnergy();
UO.Print("GetResistEnergy: " + Convert.ToString(result));Параметри та порядок виконання:
- value зберігає результат одного дзвінка. Convert.ToString форматує число для журналу. Аргументів нема: читається свій персонаж.
var value = UO.GetResistEnergy();
UO.Print("EnergyResistance: " + Convert.ToString(value));Параметри та порядок виконання:
- Між before та after стоїть UO.Wait(500) мілісекунд; Відмінність може бути негативною. Проміжні оновлення можуть бути пропущені. Пауза відноситься, наприклад, не до затримки API.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.GetResistEnergy();
await Delay(500);
var after = UO.GetResistEnergy();
var difference = after - before;
UO.Print("Resistance change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Параметри та порядок виконання:
- minimum = 50 - приклад вимоги, не межа клієнта. ResistanceAtLeast відкидає відсутній 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(ResistanceAtLeast(50)) == true))
{
UO.Print("Local resistance requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic ResistanceAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.GetResistEnergy();
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 [GetResistEnergy]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.EnergyResistance:bridge.EnergyResistance.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
() => bridge.EnergyResistanceСтворення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetResistFire();Читає поле опору нинішнього персонажа: вогонь.
Параметрів немає.
int - знакове значення статусу, -32768..32767 у моделі клієнта. Негативне значення зберігається. 0 буває реальним опором, відсутністю даних чи відсутнім/знищеним Player; GetResist також дає 0 для невідомого селектора Це не bool, ID, навички або межі опору. 1 означає один пункт, а чи не успішне виконання.
- Команда не сприймає аргументів. Використовуйте точні сигнатури вище.
- Читання в ігровому потоці бере Player. FireResistance, якщо поточний Player існує і не знищений; інакше 0. Екіпірування не перебирається, бонуси не перераховуються, статус не запитується, очікування поновлення немає. Присутня примара не дорівнює знищеному Player.
- Стихійні поля приходять у розширеному CharacterStatus (0x11), type >= 4. Сама команда не перевіряє епоху сервера. Компактний/старий статус без цих полів залишає попередній кеш; у нового Player вихідно 0. Опір отрути не є прапор Poisoned; це також не навик Resisting Spells.
- CharacterStatus перевіряє обов'язкове тіло до зміни імені, здоров'я та власних характеристик, потім переводить кожне слово опору у знаковий Int16. Обрізане обов'язкове тіло не змінює попередні дані. Необов'язковий хвіст type 6 зберігає колишні правила; команди опорів не читають із нього максимальні межі.
- Кожен дзвінок читає локальні дані заново. Змінна зберігає знімок; окремі читання можуть отримати різні оновлення сервера. Ненульовий результат не перевіряє підключення. Нуль може бути значенням чи відсутністю даних.
- Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди. C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetResistFire();
UO.Print("GetResistFire: " + Convert.ToString(result));Параметри та порядок виконання:
- value зберігає результат одного дзвінка. Convert.ToString форматує число для журналу. Аргументів нема: читається свій персонаж.
var value = UO.GetResistFire();
UO.Print("FireResistance: " + Convert.ToString(value));Параметри та порядок виконання:
- Між before та after стоїть UO.Wait(500) мілісекунд; Відмінність може бути негативною. Проміжні оновлення можуть бути пропущені. Пауза відноситься, наприклад, не до затримки API.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.GetResistFire();
await Delay(500);
var after = UO.GetResistFire();
var difference = after - before;
UO.Print("Resistance change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Параметри та порядок виконання:
- minimum = 50 - приклад вимоги, не межа клієнта. ResistanceAtLeast відкидає відсутній 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(ResistanceAtLeast(50)) == true))
{
UO.Print("Local resistance requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic ResistanceAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.GetResistFire();
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 [GetResistFire]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.FireResistance:bridge.FireResistance.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
() => bridge.FireResistanceСтворення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetResistPhysical();Читає поле опору поточного персонажа: фізична броня/опір.
Параметрів немає.
int - знакове значення статусу, -32768..32767 у моделі клієнта. Негативне значення зберігається. 0 буває реальним опором, відсутністю даних чи відсутнім/знищеним Player; GetResist також дає 0 для невідомого селектора Це не bool, ID, навички або межі опору. 1 означає один пункт, а чи не успішне виконання.
- Команда не сприймає аргументів. Використовуйте точні сигнатури вище.
- Читання в ігровому потоці бере Player. PhysicalResistance, якщо поточний Player існує і не знищений; інакше 0. Екіпірування не перебирається, бонуси не перераховуються, статус не запитується, очікування поновлення немає. Присутня примара не дорівнює знищеному Player.
- PhysicalResistance - серверне поле броні/статусу: класичний сервер може передавати рейтинг броні, а правила з опорами - фізичний опір. API не переводить одне в інше і не обчислює відсоток зниження шкоди. Armor та фізичні псевдоніми читають одне поле.
- CharacterStatus перевіряє обов'язкове тіло до зміни імені, здоров'я та власних характеристик, потім переводить кожне слово опору у знаковий Int16. Обрізане обов'язкове тіло не змінює попередні дані. Необов'язковий хвіст type 6 зберігає колишні правила; команди опорів не читають із нього максимальні межі.
- Кожен дзвінок читає локальні дані заново. Змінна зберігає знімок; окремі читання можуть отримати різні оновлення сервера. Ненульовий результат не перевіряє підключення. Нуль може бути значенням чи відсутністю даних.
- Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди. C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetResistPhysical();
UO.Print("GetResistPhysical: " + Convert.ToString(result));Параметри та порядок виконання:
- value зберігає результат одного дзвінка. Convert.ToString форматує число для журналу. Аргументів нема: читається свій персонаж.
var value = UO.GetResistPhysical();
UO.Print("PhysicalResistance: " + Convert.ToString(value));Параметри та порядок виконання:
- Між before та after стоїть UO.Wait(500) мілісекунд; Відмінність може бути негативною. Проміжні оновлення можуть бути пропущені. Пауза відноситься, наприклад, не до затримки API.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.GetResistPhysical();
await Delay(500);
var after = UO.GetResistPhysical();
var difference = after - before;
UO.Print("Resistance change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Параметри та порядок виконання:
- minimum = 50 - приклад вимоги, не межа клієнта. ResistanceAtLeast відкидає відсутній 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(ResistanceAtLeast(50)) == true))
{
UO.Print("Local resistance requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic ResistanceAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.GetResistPhysical();
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 [GetResistPhysical]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Armor:bridge.Armor.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
() => bridge.ArmorСтворення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetResistPoison();Читає поле опору поточного персонажа: отрута.
Параметрів немає.
int - знакове значення статусу, -32768..32767 у моделі клієнта. Негативне значення зберігається. 0 буває реальним опором, відсутністю даних чи відсутнім/знищеним Player; GetResist також дає 0 для невідомого селектора Це не bool, ID, навички або межі опору. 1 означає один пункт, а чи не успішне виконання.
- Команда не сприймає аргументів. Використовуйте точні сигнатури вище.
- Читання в ігровому потоці бере Player. PoisonResistance, якщо поточний Player існує і не знищений; інакше 0. Екіпірування не перебирається, бонуси не перераховуються, статус не запитується, очікування поновлення немає. Присутня примара не дорівнює знищеному Player.
- Стихійні поля приходять у розширеному CharacterStatus (0x11), type >= 4. Сама команда не перевіряє епоху сервера. Компактний/старий статус без цих полів залишає попередній кеш; у нового Player вихідно 0. Опір отрути не є прапор Poisoned; це також не навик Resisting Spells.
- CharacterStatus перевіряє обов'язкове тіло до зміни імені, здоров'я та власних характеристик, потім переводить кожне слово опору у знаковий Int16. Обрізане обов'язкове тіло не змінює попередні дані. Необов'язковий хвіст type 6 зберігає колишні правила; команди опорів не читають із нього максимальні межі.
- Кожен дзвінок читає локальні дані заново. Змінна зберігає знімок; окремі читання можуть отримати різні оновлення сервера. Ненульовий результат не перевіряє підключення. Нуль може бути значенням чи відсутністю даних.
- Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди. C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetResistPoison();
UO.Print("GetResistPoison: " + Convert.ToString(result));Параметри та порядок виконання:
- value зберігає результат одного дзвінка. Convert.ToString форматує число для журналу. Аргументів нема: читається свій персонаж.
var value = UO.GetResistPoison();
UO.Print("PoisonResistance: " + Convert.ToString(value));Параметри та порядок виконання:
- Між before та after стоїть UO.Wait(500) мілісекунд; Відмінність може бути негативною. Проміжні оновлення можуть бути пропущені. Пауза відноситься, наприклад, не до затримки API.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.GetResistPoison();
await Delay(500);
var after = UO.GetResistPoison();
var difference = after - before;
UO.Print("Resistance change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Параметри та порядок виконання:
- minimum = 50 - приклад вимоги, не межа клієнта. ResistanceAtLeast відкидає відсутній 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(ResistanceAtLeast(50)) == true))
{
UO.Print("Local resistance requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic ResistanceAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.GetResistPoison();
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 [GetResistPoison]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.PoisonResistance:bridge.PoisonResistance.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
() => bridge.PoisonResistanceСтворення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
ClassicUO — Bad Newbie & C# Scripts IDE