Repository navigation
UO Topic items Part 2
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Головна · C# · IDE · Команди UO · За абеткою · Приклади · Мови
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.MoveItem(object? id);
int UO.MoveItem(object? id, object? amount);
int UO.MoveItem(object? id, object? amount, object? targetContainer);
int UO.MoveItem(object? item, object? amount, object? container, object? x);
int UO.MoveItem(object? item, object? amount, object? container, object? x, object? y);
int UO.MoveItem(object? id, object? amount, object? targetContainer, object? x, object? y, object? z);
int UO.MoveItem(object? item, object? amount, object? container, object? x, object? y, object? z, object? timeout);
int UO.MoveItem(object? item, object? amount, object? container, object? x, object? y, object? z, object? timeout, object? waitConfirmation);Переносить один конкретний предмет/стек по serial: захоплення і скидання у контейнер чи землю.
-
id— Serial конкретного предмета/персонажу: число, hex/десятковий рядок, self/backpack/lasttarget/lastobject/lastcontainer/lastcorpse/finditem/laststatus або збережене ім'я AddObject. Це не type. Об'єкт має бути завантажений; перед дією перевіряйте Exists. -
item— Serial конкретного предмета/персонажу: число, hex/десятковий рядок, self/backpack/lasttarget/lastobject/lastcontainer/lastcorpse/finditem/laststatus або збережене ім'я AddObject. Це не type. Об'єкт має бути завантажений; перед дією перевіряйте Exists. -
amount— Кількість одиниць усередині одного стека. 0 або негативне значення означає весь стек; позитивне обмежується доступною кількістю. Це НЕ число стопок, яке обмежує MassMove. За замовчуванням 0. -
targetContainer— Serial контейнера або встановлене ім'я AddObject; backpack/self/my вибирають рюкзак, receiving/catchbag - SetCatchBag, а без нього рюкзак. lastcontainer/lastobject/lasttarget/lastcorpse/finditem/laststatus допустимі, коли дозволяються в потрібний контейнер. ground або 0 явно вибирає землю; -1 - колишній селектор рюкзака. Невідоме чи невстановлене ім'я викликає помилку до захоплення предмета. Без аргументу призначення використовується рюкзак. -
container— Serial контейнера або встановлене ім'я AddObject; backpack/self/my вибирають рюкзак, receiving/catchbag - SetCatchBag, а без нього рюкзак. lastcontainer/lastobject/lasttarget/lastcorpse/finditem/laststatus допустимі, коли дозволяються в потрібний контейнер. ground або 0 явно вибирає землю; -1 - колишній селектор рюкзака. Невідоме чи невстановлене ім'я викликає помилку до захоплення предмета. Без аргументу призначення використовується рюкзак. -
x— При контейнері — X у гампі, за замовчуванням 65535 (автоматично). При землі світова X, за умовчанням X персонажа. -
y- Y в гампі або світова Y; за промовчанням 65535 для контейнера або Y персонажа для землі. -
z— Висота, за умовчанням 0 у контейнері чи Z персонажа землі. -
timeout- Сьомий аргумент: максимум очікування в мс, за умовчанням 1000; негативне значення прирівнюється до 0. Використовується лише з восьмим waitConfirmation=true. -
waitConfirmation— Восьмий аргумент: true/1 включає очікування зміни світу, що спостерігається; false/0 (за промовчанням) повертає результат відправки запиту.
int 1 - клієнт прийняв запит захоплення та скидання; 0 — Виконати запит не вдалося. При waitConfirmation=true одиниця додатково вимагає зміни контейнера/координат або зменшення вихідного стека. Це не serial нового стека і не число перенесених елементів. Сервер може відмовити у дії.
Результат команди — числовий прапор: 1 означає виконану умову, 0 — невиконану. Після var result = команда (...) перевіряйте if (result != 0) або if (result == 0). Збережіть результат одного виклику: повторний виклик може виконати дію знову або прочитати стан, що вже змінився.
- Підтримуються всі довжини від 1 до 8 аргументів. При заданому x можна опустити y/z: для них застосовуються описані стандартні значення.
- Відоме ім'я призначення дозволяється до захоплення. Для землі використовуйте явно ground/0; друкарська помилка в імені не повинна скидати предмет на підлогу.
- Предмет може бути в скрині, сумці або рюкзаку: ground задає призначення на землі незалежно від вихідного контейнера. У першому аргументі вказується serial самого предмета, а не скрині і не type. Команда сама виконує захоплення; Попередньо брати предмет мишею не потрібно.
- При включеному DropCheckCoord скидання на землю далі двох клітин відхиляється. Сервер додатково перевіряє доступність місця. X/Y - клітини карти, а не пікселі гампа; Z — висота вибраної поверхні, зокрема негативна. Для контейнера X/Y, як і раніше, означають місце всередині його гампа.
- Очікування підтвердження використовує стан світу клієнта: для часткового стека — зменшення кількості, цілого — контейнер, землі ще X/Y/Z. Всередині контейнера точне місце гампа цим очікуванням не підтверджується; зникнення/злиття стека може ускладнити перевірку.
- Це не є підтвердженням окремого transaction ID. Якщо предмет вже був у тому самому контейнері, збіг контейнера не доводить нове переміщення всередині гампа.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.MoveItem("lasttarget");
UO.Print("MoveItem: " + Convert.ToString(result));Параметри та порядок виконання:
- loot - ім'я AddObject; amount відсутня і дорівнює 0, призначення рюкзак.
- Передається один предмет/стос, а не всі предмети певного типу.
var ok = UO.MoveItem("loot");
UO.Print("Move request: " + Convert.ToString(ok));Параметри та порядок виконання:
- amount=10 одиниць одного стоси, chest - ім'я контейнера, x/y=60/70 усередині гампа, z=0.
- Кількість не має значення «десять стопок», прийнятого у MassMove.
return RunScenario();
object? RunScenario()
{
var ok = UO.MoveItem("loot", 10, "chest", 60, 70, 0);
return null;
}Параметри та порядок виконання:
- ground явно вибирає землю; відсутні X/Y/Z беруться у персонажа.
- Для іншої точки передайте її світові координати з огляду на дальність і DropCheckCoord.
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 ok = UO.MoveItem("loot", 0, "ground");
return null;
}
}Параметри та порядок виконання:
- ground_item - збережений serial вибраного предмета у відкритій скрині. Вихідна скриня окремим параметром не передається. amount=0 бере весь стек; наприклад, 10 візьме до десяти одиниць цього стека.
- ground явно вибирає землю. x/y - абсолютні координати клітини на одну клітину по X від персонажа; z береться у персонажа і підходить, якщо сусідня поверхня на тій самій висоті. На сходах, столі або іншому поверсі задайте фактичну Z потрібної поверхні.
- sent=1 означає надсилання запиту клієнтом; без восьмого параметра підтвердження сервера не очікується. Значення 0 означає, що виконати запит не вдалося. Це числовий прапор int 1/0: перевіряйте sent != 0 або sent == 0; порівняння з bool неприпустимо.
- Для скидання безпосередньо під ноги достатньо UO.MoveItem('ground_item', 0, 'ground'): всі три координати будуть взяті у персонажа. Для приміщення всередину скрині замість ground вкажіть serial/ім'я скрині та координати її гампа.
UO.AddObject("ground_item");
var x = UO.GetX() + 1;
var y = UO.GetY();
var z = UO.GetZ();
var sent = UO.MoveItem("ground_item", 0, "ground", x, y, z);
if (Truth(sent == 1))
{
UO.Print("Ground move request sent");
}
else
{
UO.Print("Ground move request was not sent");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- timeout=1500 мс використовується, тому що waitConfirmation=true. x/y=-1 - автоматичне місце.
- 0 може означати тайм-аут вже надісланого запиту. Не повторюйте перенесення наосліп; Перевірте поточний стан предмета.
return RunScenario();
object? RunScenario()
{
var ok = UO.MoveItem("loot", 0, "backpack", -1, -1, 0, 1500, true);
if (Truth(ok == 0))
{
UO.Print("Move was rejected or not confirmed");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: id (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.MoveItem. -
InjectionScript.Runtime.InjectionApiUO.CompactMoveItem:CompactMoveItem(new[] { id }).
Внутрішній код реалізації, не самостійний скрипт.
public int MoveItem(InjectionValue id)
=> CompactMoveItem(new[] { id });Параметри: id (Any), amount (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.MoveItem. -
InjectionScript.Runtime.InjectionApiUO.CompactMoveItem:CompactMoveItem(new[] { id, amount }).
Внутрішній код реалізації, не самостійний скрипт.
public int MoveItem(InjectionValue id, InjectionValue amount)
=> CompactMoveItem(new[] { id, amount });Параметри: id (Any), amount (Any), targetContainer (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.MoveItem. -
InjectionScript.Runtime.InjectionApiUO.CompactMoveItem:CompactMoveItem(new[] { id, amount, targetContainer }).
Внутрішній код реалізації, не самостійний скрипт.
public int MoveItem(InjectionValue id, InjectionValue amount, InjectionValue targetContainer)
=> CompactMoveItem(new[] { id, amount, targetContainer });Параметри: item (Any), amount (Any), container (Any), x (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.Register [MoveItem]. -
InjectionScript.Runtime.InjectionApiUO.CompactMoveItem:CompactMoveItem(values).
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
values => new InjectionValue(CompactMoveItem(values))Параметри: item (Any), amount (Any), container (Any), x (Any), y (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.Register [MoveItem]. -
InjectionScript.Runtime.InjectionApiUO.CompactMoveItem:CompactMoveItem(values).
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
values => new InjectionValue(CompactMoveItem(values))Параметри: id (Any), amount (Any), targetContainer (Any), x (Any), y (Any), z (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.MoveItem. -
InjectionScript.Runtime.InjectionApiUO.CompactMoveItem:CompactMoveItem(new[] { id, amount, targetContainer, x, y, z }).
Внутрішній код реалізації, не самостійний скрипт.
public int MoveItem(InjectionValue id, InjectionValue amount, InjectionValue targetContainer, InjectionValue x, InjectionValue y, InjectionValue z)
=> CompactMoveItem(new[] { id, amount, targetContainer, x, y, z });Параметри: item (Any), amount (Any), container (Any), x (Any), y (Any), z (Any), timeout (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.Register [MoveItem]. -
InjectionScript.Runtime.InjectionApiUO.CompactMoveItem:CompactMoveItem(values).
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
values => new InjectionValue(CompactMoveItem(values))
UO.MoveItem(item, amount, container, x, y, z, timeout, waitConfirmation) — UO.MoveItem(Any,Any,Any,Any,Any,Any,Any,Any)
Параметри: item (Any), amount (Any), container (Any), x (Any), y (Any), z (Any), timeout (Any), waitConfirmation (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.Register [MoveItem]. -
InjectionScript.Runtime.InjectionApiUO.CompactMoveItem:CompactMoveItem(values).
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
values => new InjectionValue(CompactMoveItem(values))Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.MoveItems(object? container, object? itemsType, object? itemsColor, object? moveIntoID, object? x, object? y, object? z, object? delayMS);Перекладає всі відповідні предмети безпосередньо з одного контейнера в інший або землю. Предмети вибираються за graphic та hue; кожен стос переноситься цілком. Це перенесення речей, а чи не ходьба персонажа і інтерактивне включення MassMove.
-
container— Serial вихідного контейнера, наприклад backpack, "backpack", ім'я AddObject або hex-ID. Вміст має бути вже завантажений. 0 не є допустимим джерелом; ground не вибирає речі навколо персонажа. Для рюкзака вказуйте backpack, а не self. -
itemsType— Graphic предмета, наприклад 0x0EED — золото. Чи не ID речі та не тіло mobile. Негативне число або 0xFFFF - всі типи. Масив/маска типів не приймається. -
itemsColor- Hue речі. -1 (або інше від'ємне число) і 0xFFFF - будь-який; 0 — лише hue 0. Чи не serial і не notoriety. -
moveIntoID— Serial контейнер призначення або об'єктний аліас. Для свого рюкзака – backpack. Для землі – число 0 (також ground/"ground"/UO.Ground()). Джерело та призначення повинні відрізнятися. -1 не є скороченням backpack у цій команді. Self - serial mobile, а не автоматичне встановлення його рюкзака. -
x— При ненульовому контейнері — позиція ВСЕРЕДИНІ його гампа; -1,-1 залишають розміщення серверу. При землі - світові координати 0..65535, обидві обов'язкові та невід'ємні. Чи не екранні пікселі ігрового світу і не кінцева точка маршруту. -
y— При ненульовому контейнері — позиція ВСЕРЕДИНІ його гампа; -1,-1 залишають розміщення серверу. При землі - світові координати 0..65535, обидві обов'язкові та невід'ємні. Чи не екранні пікселі ігрового світу і не кінцева точка маршруту. -
z- Висота світу при викладанні на землю; використовуйте реальну висоту місця (протокольний діапазон -128..127). У контейнерному прикладі вказують 0. Це не індекс шару екіпірування. -
delayMS— Затримка між прийнятими запитами в мілісекундах. Реально застосовується max(?GrabDelay?, max(?0?, DelayMS)); очікування є також після останнього відправленого перенесення. 350 не означає 350 предметів і не гарантує підтвердження за 350 мс.
Зареєструватись object? фактично повертає int 1/true, якщо прийнято хоча б один запит перенесення, інакше 0/false. Це не кількість предметів і не гарантія перенесення всіх збігів. Перевірте вміст після відповіді сервера. Аварійне скасування перериває процедуру і має повертати false.
- Усі вісім аргументів обов'язкові. Одноразово створюється перелік прямих дочірніх предметів вихідного контейнера; рекурсивного обходу немає. Вкладений мішок, що потрапив до списку, переміщається як один предмет разом із вмістом, а не розпаковується.
- Бере весь поточний стос кожного збігу. Межа кількості предметів чи одиниць цією командою не задається; для таких сценаріїв дивіться UO.MassMove. Ignore не використовується як додатковий фільтр для цієї вибірки.
- Перед кожною дією повторно перевіряє, що предмет у вихідному контейнері. Заборона вкласти контейнер у себе/нащадок та недоступність предмета можуть призвести до пропуску. Черга не є транзакцією: вже надіслані дії не відкочуються.
- При source=0, однакових source/destination або землі з негативними X/Y повертає 0 і повідомляє помилку. Сервер визначає дозвіл, дальність, місткість та остаточний результат. Не виконуйте одночасно інші операції з піднятими речами.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.MoveItems("lasttarget", 0x0EED, -1, "backpack", -1, -1, 0, 350);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- 0x0EED - type золота; -1 в ItemsColor - будь-який hue. -1,-1 після backpack - автоматичне положення в гампі, а не земля. 350 мс - мінімальна бажана затримка, з урахуванням GrabDelay. Усі прямі стоси золота беруться цілком.
var source = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(source == 0) || Truth(source == UO.Backpack()) || !(Truth(UO.Exists(source))))
{
return null;
}
var sent = UO.MoveItems(source, 0x0EED, -1, "backpack", -1, -1, 0, 350);
if (Truth(Truth(sent) == false))
{
UO.Print("No gold transfer request was accepted");
}
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;Параметри та порядок виконання:
- 0x0E21 - бинти, не тіло людини. backpack - джерело, destination - serial скрині. Усі збіги прямують в одну точку 30,40; сервер може об'єднати стоси або скоригувати положення.
return RunScenario();
object? RunScenario()
{
var destination = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(destination == 0) || Truth(destination == UO.Backpack()) || !(Truth(UO.Exists(destination))))
{
return null;
}
var sent = UO.MoveItems("backpack", 0x0E21, -1, destination, 30, 40, 0, 350);
if (Truth(sent != 0))
{
UO.Print("Transfer requested; verify the destination contents");
}
return null;
}
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;Параметри та порядок виконання:
- itemType задає тип, не кількість; переносяться всі його прямі стоси в рюкзаку. X+1/Y/Z — приклад сусідньої точки на одній висоті: при схилі/стіні оберіть правильну координату. 0 призначення є обов'язковим для світового режиму. true говорить лише про прийнятий запит, не про звільнений рюкзак.
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(DropTypeBesideMe(0x0EED))))
{
UO.Print("No ground drop request was accepted");
}
return null;
}
dynamic DropTypeBesideMe(dynamic itemType)
{
if (!(Truth(UO.Connected())) || Truth(UO.Dead()))
{
return false;
}
var x = UO.GetX() + 1;
var y = UO.GetY();
var z = UO.GetZ();
return UO.MoveItems("backpack", itemType, -1, 0, x, y, z, 350);
}
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.
UO.MoveItems(container, itemsType, itemsColor, moveIntoID, x, y, z, delayMS) — UO.MoveItems(Any,Any,Any,Any,Any,Any,Any,Any)
Параметри: container (Any), itemsType (Any), itemsColor (Any), moveIntoID (Any), x (Any), y (Any), z (Any), delayMS (Any)
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MoveItems:bridge.MoveItems(Arg(0), ResolveType(arguments[1]), Arg(2), Arg(3), Arg(4), Arg(5), Arg(6), Arg(7)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[1]).
Внутрішній код реалізації, не самостійний скрипт.
case "moveitems": return new InjectionValue(bridge.MoveItems(Arg(0), ResolveType(arguments[1]), Arg(2), Arg(3), Arg(4), Arg(5), Arg(6), Arg(7)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.Name();Читає ім'я персонажа.
Параметрів немає.
string – відоме клієнту ім'я. Порожній рядок означає порожнє/невідоме значення або відсутність об'єкта. Це не serial та не шлях профілю. Ігрове ім'я/титул не перекладається мовою IDE.
- Читаються вже отримані локальні дані. Запит не відкриває статус і не змушує сервер надіслати оновлення. Після смерті, переходу на карту або видалення об'єкта значення можуть змінитися між двома викликами.
- C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.Name();
UO.Print("Name: " + Convert.ToString(result));Параметри та порядок виконання:
- Параметрів немає: читається self.
- Порожній рядок опрацьовується явно; це не текст "0".
var text = UO.Name();
if (Truth(text != ""))
{
UO.Print(text);
}
else
{
UO.Print("Text is unavailable");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Читається свій персонаж, значення зберігається рядком.
- Оператор + з'єднує рядки; Convert.ToString для цього результату не потрібний.
return RunScenario();
object? RunScenario()
{
var text = UO.Name();
UO.Print("Player имя: " + text);
return null;
}Параметри та порядок виконання:
- Обидва виклики відносяться до 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 previous = UO.Name();
await Delay(1000);
var current = UO.Name();
if (Truth(previous != current))
{
UO.Print("Updated text: " + current);
}
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.
Параметри: Немає параметрів.
Результат: string / String.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [Name]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetName:bridge.GetName(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
() => bridge.GetName(bridge.Self)Створення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Picking();Перевіряє, чи курсор клієнта зайнятий піднятим предметом.
Параметрів немає.
int 1 - ItemHold.Enabled встановлений; 0 — не встановлено. Це стан клієнта, що не ID і не підтвердження серверної доставки. Враховується предмет, піднятий мишею чи іншим скриптом.
Результат команди — числовий прапор: 1 означає виконану умову, 0 — невиконану. Після var result = команда (...) перевіряйте if (result != 0) або if (result == 0). Збережіть результат одного виклику: повторний виклик може виконати дію знову або прочитати стан, що вже змінився.
- Читання не піднімає та не скидає предмет.
- Для власного перенесення перевіряйте також результат Drag/DragItem; чужий зайнятий курсор не означає, що потрібний предмет успішно взято.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.Picking();
UO.Print("Picking: " + Convert.ToString(result));Параметри та порядок виконання:
- Аргументів немає.
- Виводиться 1 або 0.
UO.Print(Convert.ToString(UO.Picking()));Параметри та порядок виконання:
- Один аргумент Drag означає весь стек і timeout = 0.
- Picking перевіряє загальний курсор клієнта. Не запускайте два незалежні перенесення одночасно.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Picking() == 0))
{
if (Truth(UO.Drag("loot")))
{
var dropped = UO.DropItem("backpack", -1, -1, 0);
}
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Перевірка повторюється до двадцяти разів з паузами по 50 мс.
- Команда не звільняє курсор і не скасовує чуже перенесення.
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 tries = 0;
while (Truth(UO.Picking()) && Truth(tries < 20))
{
await Delay(50);
tries = tries + 1;
}
if (Truth(UO.Picking()))
{
UO.Print("Cursor is still occupied");
}
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.Picking. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Picking:bridge.Picking().
Внутрішній код реалізації, не самостійний скрипт.
public int Picking() => bridge.Picking();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ReceiveObjectName(object? id);
void UO.ReceiveObjectName(object? id, object? timeout);Запитує ім'я single-click запитом.
-
id— Serial/ID об'єкта: int, числова/hex-рядок або встановлений аліас, наприклад "lasttarget". Це не graphic/type. До дії перевіряйте завантажений об'єкт. -
timeout- Необов'язковий int, мілісекунди; за замовчуванням 0. Негативне значення не додає очікування.
void - значення немає. Викликайте окремим рядком; завершення не підтверджує дію сервера.
- Bridge.ReceiveObjectName викликає Click(id), потім чекає до max(0,timeout), поки GetName(id) порожньо; паузи не більше 25 ms. Вже відоме ім'я завершує очікування одразу.
- Без timeout виконується лише Click. Ім'я, що повертається, немає: прочитайте GetName окремо; Закінчення очікування може означати timeout.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.ReceiveObjectName");
UO.ReceiveObjectName("lasttarget");Параметри та порядок виконання:
- Запитує ім'я single-click запитом.
UO.ReceiveObjectName("lasttarget");Параметри та порядок виконання:
- Bridge.ReceiveObjectName викликає Click(id), потім чекає до max(0,timeout), поки GetName(id) порожньо; паузи не більше 25 ms. Вже відоме ім'я завершує очікування одразу.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Exists("lasttarget")))
{
UO.ReceiveObjectName("lasttarget", 1000);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Без timeout виконується лише Click. Ім'я, що повертається, немає: прочитайте GetName окремо; Закінчення очікування може означати timeout.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.ReceiveObjectName(id, 1000);
UO.Print(UO.GetName(id));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: id (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ReceiveObjectName. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ReceiveObjectName:bridge.ReceiveObjectName(GetObject(id), 0). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Внутрішній код реалізації, не самостійний скрипт.
public void ReceiveObjectName(InjectionValue id) => bridge.ReceiveObjectName(GetObject(id), 0);Параметри: id (Any), timeout (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ReceiveObjectName. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ReceiveObjectName:bridge.ReceiveObjectName(GetObject(id), NumberConversions.ToInt(timeout)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(timeout).
Внутрішній код реалізації, не самостійний скрипт.
public void ReceiveObjectName(InjectionValue id, InjectionValue timeout) => bridge.ReceiveObjectName(GetObject(id), NumberConversions.ToInt(timeout));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.TicksUse();Читає збережену позначку TicksUse.
Параметрів немає.
int - позначка UO.Timer в десятих частках секунди від старту runtime. 0 - позначка ще не встановлена або подія була в першу десяту секунди; це не мілісекунди та не календарний час.
- Повертає поле ticksUse. Його оновлює UseObject; це не автоматичне відстеження всіх ручних/серверних дій. Сама команда позначку не змінює.
- UO.Timer() - позначка обчислює вік десятих секунди. Між різними runtime позначки не порівнюються.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.TicksUse();
UO.Print("TicksUse: " + Convert.ToString(result));Параметри та порядок виконання:
- Читає збережену позначку TicksUse.
var stamp = UO.TicksUse();
UO.Print(stamp);Параметри та порядок виконання:
- Повертає поле ticksUse. Його оновлює UseObject; це не автоматичне відстеження всіх ручних/серверних дій. Сама команда позначку не змінює.
return RunScenario();
object? RunScenario()
{
var stamp = UO.TicksUse();
var ageTenths = UO.Timer() - stamp;
UO.Print(ageTenths);
return null;
}Параметри та порядок виконання:
- UO.Timer() - позначка обчислює вік десятих секунди. Між різними runtime позначки не порівнюються.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var before = UO.TicksUse();
UO.Wait(250);
var after = UO.TicksUse();
UO.Print(before = after);
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: int / Integer.
Під час виклику:
Внутрішній код реалізації, не самостійний скрипт.
public int TicksUse() => ticksUse;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.UpdateObject(object? id);Вимагає оновлення вже завантаженого об'єкта.
-
id— Serial/ID об'єкта: int, числова/hex-рядок або встановлений аліас, наприклад "lasttarget". Це не graphic/type. До дії перевіряйте завантажений об'єкт.
void - значення немає. Викликайте окремим рядком; завершення не підтверджує дію сервера.
- Для Mobile викликається RequestMobileStatus(..., true), для Item - SingleClick. Якщо serial немає в обох локальних таблицях, дії немає. Це не завантаження невідомого об'єкта та не підтвердження оновлення.
- Bridge надсилає запит на ігровому потоці. Діють правила сервера; вбудованого очікування підтвердження немає.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.UpdateObject");
UO.UpdateObject(UO.GetSerial("lasttarget"));Параметри та порядок виконання:
- Вимагає оновлення вже завантаженого об'єкта.
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.UpdateObject(id);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Для Mobile викликається RequestMobileStatus(..., true), для Item - SingleClick. Якщо serial немає в обох локальних таблицях, дії немає. Це не завантаження невідомого об'єкта та не підтвердження оновлення.
return RunScenario();
object? RunScenario()
{
var id = UO.GetSerial("self");
if (Truth(UO.Exists(id)))
{
UO.UpdateObject(id);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Bridge надсилає запит на ігровому потоці. Діють правила сервера; вбудованого очікування підтвердження немає.
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()
{
ApplyToLoaded(UO.GetSerial("lasttarget"));
return null;
}
void ApplyToLoaded(dynamic id)
{
if (Truth(UO.Exists(id)))
{
UO.UpdateObject(id);
}
}
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)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.UpdateObject. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UpdateObject:bridge.UpdateObject(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Внутрішній код реалізації, не самостійний скрипт.
public void UpdateObject(InjectionValue id) => bridge.UpdateObject(GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.UseFromGround(object? @type);
int UO.UseFromGround(object? @type, object? color);Шукає об'єкт заданого graphic на землі/у світі та відразу викликає його застосування. Зазвичай використовується для предметів, що лежать поруч, наприклад для відкриття рюкзака. Важлива особливість цього runtime: пошук заснований на FindType та може знайти також mobile з таким body; це не суворо item-only вибірка. Для предметів із явним радіусом та вибором найближчого використовуйте UseType(..., ground, ...).
-
type— Обов'язковий graphic. Наприклад 0x0E75 - рюкзак. Число або числове hex-рядок; від'ємне число/0xFFFF — будь-який graphic. Значення тіла, наприклад 0x0190 (чоловік) та 0x0191 (жінка), можуть вибрати mobile; не підставляйте їх замість type предмета. Одночасно два типи цією формою не передаються. -
color— Необов'язковий hue, за замовчуванням -1 (будь-який). Негативне число / 0xFFFF - будь-який, 0 - тільки hue 0. Інших параметрів немає: container, distance, nearest та maxZ у цю команду не додають.
int — serial першого знайденого об'єкта, переданого UseObject, або 0. Це не кількість об'єктів, не graphic і не true/false. Об'єкт можна знайти, але сервер може заборонити застосування. Перевіряйте id != 0 та окремо очікуваний ігровий ефект.
- Використовує поточні FindDistance та FindVertical, враховує Ignore. Контейнер пошуку фіксований як ground, вкладений вміст не обходиться. Mobiles виключають self; по життю/видимості/notoriety окремого обмеження немає.
- Оновлює FindItem/FindCount/GetFoundItems всіма збігами пошуку, але застосовує лише перший результат. Найближчий не гарантований; світові предмети перевіряються раніше mobiles.
- Не підбирає предмет у рюкзак, не переміщає персонажа, не чекає на відповідь сервера або закінчення target. За відсутності збігу друкує повідомлення. Для пошуку без дії використовуйте UO.FindType.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.UseFromGround(0x0E75);
UO.Print("UseFromGround: " + Convert.ToString(result));Параметри та порядок виконання:
- Тільки type; будь-який hue. Використовуються поточні FindDistance/FindVertical. bag - ID першого результату, а не обов'язково найближчого. Вміст відкриється, лише якщо сервер дозволить.
var bag = UO.UseFromGround(0x0E75);
if (Truth(bag != 0))
{
UO.AddObject("ground_bag", bag);
}
else
{
UO.Print("No loaded ground backpack matches the search settings");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Пошук обмежений двома клітинами та однаковою Z. Колір 0x0044 дано для прикладу: замініть на hue своєї речі. Параметри відновлюються навіть при помилці.
return RunScenario();
object? RunScenario()
{
var oldDistance = UO.FindDistance();
var oldZ = UO.FindVertical();
try
{
UO.FindDistance(2);
UO.FindVertical(0);
var bag = UO.UseFromGround(0x0E75, 0x0044);
if (Truth(bag != 0))
{
UO.AddObject("colored_ground_bag", bag);
}
}
finally
{
UO.FindDistance(oldDistance);
UO.FindVertical(oldZ);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- radius задає FindDistance, а не третій аргумент UseFromGround. 3000 мс - час перегляду прикладу, не підтвердження відкриття; тип вікна 3 - контейнер. У Find* залишаються результати цього пошуку.
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 selected = OpenGroundBagWithin(2);
if (Truth(selected != 0))
{
await Delay(3000);
UO.CloseClientUIWindow(3, selected);
}
return null;
}
dynamic OpenGroundBagWithin(dynamic radius)
{
var previous = UO.FindDistance();
try
{
UO.FindDistance(radius);
return UO.UseFromGround(0x0E75, -1);
}
finally
{
UO.FindDistance(previous);
}
}
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.
Параметри: type (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.UseFromGround. -
InjectionScript.Runtime.InjectionApiUO.UseFromGround:UseFromGround(type, new InjectionValue(-1)).
Внутрішній код реалізації, не самостійний скрипт.
public int UseFromGround(InjectionValue type) => UseFromGround(type, new InjectionValue(-1));Параметри: type (Any), color (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.UseFromGround. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.FindType:bridge.FindType(ResolveType(type), NumberConversions.ToInt(color), 1, -1, false). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(type). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(color). -
InjectionScript.Runtime.InjectionApiUO.UseObject:UseObject(id). -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage("No matching item found on ground.").
Внутрішній код реалізації, не самостійний скрипт.
public int UseFromGround(InjectionValue type, InjectionValue color)
{
int id = bridge.FindType(ResolveType(type), NumberConversions.ToInt(color), 1, -1, false);
if (id != 0)
UseObject(id);
else
SystemMessage("No matching item found on ground.");
return id;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.UseItemOnMobile(object? itemSerial, object? targetSerial);Готує мету персонажа та використовує предмет.
-
itemSerial— Serial/ID об'єкта: int, числова/hex-рядок або встановлений аліас, наприклад "lasttarget". Це не graphic/type. До дії перевіряйте завантажений об'єкт. -
targetSerial— Serial/ID об'єкта: int, числова/hex-рядок або встановлений аліас, наприклад "lasttarget". Це не graphic/type. До дії перевіряйте завантажений об'єкт.
void - значення немає. Викликайте окремим рядком; завершення не підтверджує дію сервера.
- ExecuteClientApiCompatibility спочатку викликає bridge.WaitTargetObject(TargetSerial), потім bridge.UseObject(ItemSerial). Аргументи не переставляються. Ці прямі bridge-дзвінки не оновлюють runtime TicksTarget/TicksUse.
- Не перевіряє тип мети/предмета і не чекає на cursor. Підготовка мети раніше використання запобігає пропуску target, що швидко прийшов, але сервер все одно визначає допустимість дії.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.UseItemOnMobile");
UO.UseItemOnMobile("0x40001234", "self");Параметри та порядок виконання:
- Готує мету персонажа та використовує предмет.
UO.UseItemOnMobile("0x40001234", "self");Параметри та порядок виконання:
- ExecuteClientApiCompatibility спочатку викликає bridge.WaitTargetObject(TargetSerial), потім bridge.UseObject(ItemSerial). Аргументи не переставляються. Ці прямі bridge-дзвінки не оновлюють runtime TicksTarget/TicksUse.
return RunScenario();
object? RunScenario()
{
var item = UO.GetSerial("lastobject");
var mobile = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(item)) && Truth(UO.Exists(mobile)))
{
UO.UseItemOnMobile(item, mobile);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Не перевіряє тип мети/предмета і не чекає на cursor. Підготовка мети раніше використання запобігає пропуску target, що швидко прийшов, але сервер все одно визначає допустимість дії.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var item = UO.GetSerial("lastobject");
if (Truth(UO.Exists(item)))
{
UO.UseItemOnMobile(item, "self");
UO.Print(UO.Waiting());
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: itemSerial (Any), targetSerial (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.WaitTargetObject:bridge.WaitTargetObject(Arg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(1). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseObject:bridge.UseObject(Arg(0)).
Внутрішній код реалізації, не самостійний скрипт.
case "useitemonmobile": bridge.WaitTargetObject(Arg(1)); bridge.UseObject(Arg(0)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.UseObject(object? objID);Запитує використання об'єкта по serial. Bridge викликає GameActions.DoubleClick; предмет не шукається за type.
-
objID— Serial/ID об'єкта: int, числова/hex-рядок або встановлений аліас, наприклад "lasttarget". Це не graphic/type. До дії перевіряйте завантажений об'єкт.
void - значення немає. Викликайте окремим рядком; завершення не підтверджує дію сервера.
- GetObject дозволяє аліас; невідоме ім'я дає -1. Після виклику runtime оновлює TicksUse значенням UO.Timer; це момент запиту, а чи не підтвердження сервера.
- Bridge надсилає запит на ігровому потоці. Діють правила сервера; вбудованого очікування підтвердження немає.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.UseObject");
UO.UseObject(UO.GetSerial("lasttarget"));Параметри та порядок виконання:
- Запитує використання об'єкта по serial. Bridge викликає GameActions.DoubleClick; предмет не шукається за type.
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.UseObject(id);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- GetObject дозволяє аліас; невідоме ім'я дає -1. Після виклику runtime оновлює TicksUse значенням UO.Timer; це момент запиту, а чи не підтвердження сервера.
return RunScenario();
object? RunScenario()
{
var id = UO.GetSerial("self");
if (Truth(UO.Exists(id)))
{
UO.UseObject(id);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Bridge надсилає запит на ігровому потоці. Діють правила сервера; вбудованого очікування підтвердження немає.
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()
{
ApplyToLoaded(UO.GetSerial("lasttarget"));
return null;
}
void ApplyToLoaded(dynamic id)
{
if (Truth(UO.Exists(id)))
{
UO.UseObject(id);
}
}
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/Integer/String)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseObject:bridge.UseObject(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Внутрішній код реалізації, не самостійний скрипт.
case "useobject": bridge.UseObject(Arg(0)); return InjectionValue.Unit;Параметри: objID (Any/Integer/String)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.UseObject. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseObject:bridge.UseObject(id). -
InjectionScript.Runtime.InjectionApiUO.Timer:Timer().
Внутрішній код реалізації, не самостійний скрипт.
public void UseObject(int id)
{
bridge.UseObject(id);
ticksUse = Timer();
}Параметри: objID (Any/Integer/String)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.UseObject. -
InjectionScript.Runtime.InjectionApiUO.UseObject:UseObject(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Внутрішній код реалізації, не самостійний скрипт.
public void UseObject(string id) => UseObject(GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.UseType(object? @type);
int UO.UseType(object? @type, object? color);
int UO.UseType(object? @type, object? color, object? container);
int UO.UseType(object? @type, object? color, object? container, object? distance);
int UO.UseType(object? @type, object? color, object? container, object? distance, object? nearest);
int UO.UseType(object? @type, object? color, object? container, object? distance, object? nearest, object? maxZ);Знаходить один предмет потрібного graphic/type та застосовує його. Наприклад, випити зілля з рюкзака, відкрити поряд рюкзак або використовувати річ з вибраного контейнера. Персонажу ця команда не шукає та не переміщає. Якщо предмет вимагає приціл, ціль потрібно підготувати окремо.
-
type- Graphic предмета: число або hex-рядок; наприклад 0x0F0C - тип лікувального зілля, 0x0E75 - рюкзака. Це не serial і не body персонажа. Негативне число або 0xFFFF дозволяють будь-який type; для осмисленої дії краще точний graphic. -
color— Hue предмета, за замовчуванням -1 (будь-який). Будь-яке негативне число або 0xFFFF знімає фільтр; 0 вибирає саме незабарвлену річ. Чи не notoriety і не колір тексту. -
container— За замовчуванням -1: свій рюкзак та завантажені вкладені контейнери. "my" означає те саме. "backpack" або явний serial контейнера задають корінь рекурсивного обходу. ground/"ground"/UO.Ground(), числові 0/1 позначають лише предмети світу. Self не є синонімом backpack; Використовуйте явний рюкзак. Невідомий/нульовий об'єктний аліас може дозволитися як рюкзак: контейнер, що передається, попередньо перевіряйте через Exists. -
distance- Максимальна геометрична дальність X/Y, не довжина шляху. За замовчуванням або за негативного аргументу - FindDistance. 0 означає ту ж клітину. У речей у контейнері клієнт враховує відстань до власника. -
nearest— За замовчуванням true: вибрати найближчу річ, при рівності менший serial. false: перший знайдений при обході без сортування. Чи не кількість предметів і не режим бігу. -
maxZ- Максимальна абсолютна різниця світової висоти Z з персонажем. За замовчуванням або за негативного аргументу - FindVertical. 0 вимагає однакову Z. Для речі у сумці використовується висота зовнішнього контейнера землі або персонажа-власника; внутрішні координати гампа не вважають світовими. Це фільтр висоти, не перевірка прохідності чи лінії огляду.
int — serial предмета, для якого викликаний UseObject; 0, якщо збігів немає. Навіть реєстрація з ReturnKind object? фактично повертає число. Це не true/false і не підтвердження застосування сервером: перевіряйте used != 0, а не used == true. Для успіху ефекту потрібна окрема перевірка стану, вмісту чи журналу.
- Від 1 до 6 аргументів. Щоб встановити дальність, вкажіть також color і container. Щоб встановити maxZ, заповніть усі шість позицій. Масив type, маска через | та додаткових цілей цією командою не приймаються.
- Звичайні форми з int/string та розширені форми використовують CompactUseType: тільки items, Ignore, відстань та висота; контейнери обходяться рекурсивно вже завантаженим вмістом. Контейнер для завантаження автоматично не відкривається. FindItem/FindCount/GetFoundItems цією гілкою не оновлюються.
- Висота спільних власників та контейнерів обчислюється один раз за виклик, щоб не повторювати обхід для кожної стопки. Циклічний або надмірно глибокий ланцюжок контейнерів (128 ланок без знайденого кореня) не використовується як збіг по висоті.
- Збережена загальна сумісна реєстрація двох object?: вона спрямовує виклик у bridge.UseType, який використовує FindType по рюкзаку, що оновлює Find* та вибирає перший результат. Для передбачуваної компактної форми використовуйте int/string, а не неявні перетворення невідповідних видів значень.
- UseObject відправляє дію застосування, але команда не чекає на target, зцілення, випивання, відкриття вікна або серверної відмови. Дальність пошуку не розширює допустиму сервером дальність використання.
- За відсутності збігу компактна форма друкує повідомлення та повертає 0. За відсутності персонажа/зв'язку результат слід вважати дозволом на дію. Для точного ID використовуйте UO.UseObject.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.UseType(0x0F0C);
UO.Print("UseType: " + Convert.ToString(result));Параметри та порядок виконання:
- 0x0F0C - приклад стандартного типу лікувального зілля. Сервер може відхилити дію через стан персонажа, затримки чи власних правил. Колір та дальність окремо не задані: діють defaults.
if (!(Truth(UO.Connected())) || Truth(UO.Dead()))
{
return null;
}
var used = UO.UseType(0x0F0C);
if (Truth(used == 0))
{
UO.Print("No matching healing potion in the loaded backpack");
}
else
{
UO.Print("Potion use requested; check health and the game message");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- 0x0E75 - type рюкзака, - 1 - будь-який hue, ground - предмети світу. 2 — клітини X/Y, true — найближчий, 4 — різниця Z. Повернення bag — ID. Доступ до вмісту визначає сервер; команда не вибирає рюкзак.
return RunScenario();
object? RunScenario()
{
var bag = UO.UseType(0x0E75, -1, "ground", 2, true, 4);
if (Truth(bag != 0))
{
UO.AddObject("nearby_bag", bag);
}
else
{
UO.Print("No suitable ground backpack within the selected bounds");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- itemType - graphic речі, source - окремий serial контейнера. Помічник повертає serial/0 так само, як UseType. Навіть знайдену річ сервер може забороняти використовувати із чужого чи віддаленого контейнера.
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 source = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(source == 0) || !(Truth(UO.Exists(source))))
{
return null;
}
UO.AddObject("supply", source);
var used = UseFromNamedSupply(0x0F0C);
if (Truth(used == 0))
{
UO.Print("Supply item was not found with these filters");
}
return null;
}
dynamic UseFromNamedSupply(dynamic itemType)
{
var source = Asc(UO.GetSerial("supply"), 0);
if (Truth(source == 0) || !(Truth(UO.Exists(source))))
{
return 0;
}
return UO.UseType(itemType, 0, source, 2, false, 16);
}
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;
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: type (Integer/String)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.UseType. -
InjectionScript.Runtime.InjectionApiUO.UseType:UseType(type, -1).
Внутрішній код реалізації, не самостійний скрипт.
public int UseType(int type) => UseType(type, -1);Параметри: type (Integer/String)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.UseType. -
InjectionScript.Runtime.InjectionApiUO.UseType:UseType(ResolveType(type)). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(type).
Внутрішній код реалізації, не самостійний скрипт.
public int UseType(string type) => UseType(ResolveType(type));Параметри: type (Any/Integer/String), color (Any/Integer/String)
Результат: int / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseType:bridge.UseType(ResolveType(arguments[0]), arguments.Length > 1 ? Arg(1) : -1). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(1).
Внутрішній код реалізації, не самостійний скрипт.
case "usetype": return new InjectionValue(bridge.UseType(ResolveType(arguments[0]), arguments.Length > 1 ? Arg(1) : -1));Параметри: type (Any/Integer/String), color (Any/Integer/String)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.UseType. -
InjectionScript.Runtime.InjectionApiUO.CompactUseType:CompactUseType(new[] { new InjectionValue(type), new InjectionValue(color) }).
Внутрішній код реалізації, не самостійний скрипт.
public int UseType(int type, int color) => CompactUseType(new[]
{
new InjectionValue(type),
new InjectionValue(color)
});Параметри: type (Any/Integer/String), color (Any/Integer/String)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.UseType. -
InjectionScript.Runtime.InjectionApiUO.UseType:UseType(type, NumberConversions.ToInt(color)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(color).
Внутрішній код реалізації, не самостійний скрипт.
public int UseType(int type, string color) => UseType(type, NumberConversions.ToInt(color));Параметри: type (Any/Integer/String), color (Any/Integer/String)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.UseType. -
InjectionScript.Runtime.InjectionApiUO.UseType:UseType(ResolveType(type), color). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(type).
Внутрішній код реалізації, не самостійний скрипт.
public int UseType(string type, int color) => UseType(ResolveType(type), color);Параметри: type (Any/Integer/String), color (Any/Integer/String)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.UseType. -
InjectionScript.Runtime.InjectionApiUO.UseType:UseType(ResolveType(type), NumberConversions.ToInt(color)). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(type). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(color).
Внутрішній код реалізації, не самостійний скрипт.
public int UseType(string type, string color) => UseType(ResolveType(type), NumberConversions.ToInt(color));Параметри: type (Any), color (Any), container (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.Register [UseType]. -
InjectionScript.Runtime.InjectionApiUO.CompactUseType:CompactUseType(values).
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
values => new InjectionValue(CompactUseType(values))Параметри: type (Any), color (Any), container (Any), distance (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.Register [UseType]. -
InjectionScript.Runtime.InjectionApiUO.CompactUseType:CompactUseType(values).
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
values => new InjectionValue(CompactUseType(values))Параметри: type (Any), color (Any), container (Any), distance (Any), nearest (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.Register [UseType]. -
InjectionScript.Runtime.InjectionApiUO.CompactUseType:CompactUseType(values).
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
values => new InjectionValue(CompactUseType(values))Параметри: type (Any), color (Any), container (Any), distance (Any), nearest (Any), maxZ (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.Register [UseType]. -
InjectionScript.Runtime.InjectionApiUO.CompactUseType:CompactUseType(values).
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
values => new InjectionValue(CompactUseType(values))Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.UseWorldObject(object? serialOrName);Дозволяє serialOrName через GetObject і викликає UseObject. Рядкове ім'я - аліас об'єкта, не ім'я graphic/type.
-
serialOrName— Serial/ID об'єкта: int, числова/hex-рядок або встановлений аліас, наприклад "lasttarget". Це не graphic/type. До дії перевіряйте завантажений об'єкт.
void - значення немає. Викликайте окремим рядком; завершення не підтверджує дію сервера.
- У metadata зареєстрована прямо на UserObject. Це звичайне використання serial, а не пошук у всьому серверному світі.
- Bridge надсилає запит на ігровому потоці. Діють правила сервера; вбудованого очікування підтвердження немає.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.UseWorldObject");
UO.UseWorldObject(UO.GetSerial("lasttarget"));Параметри та порядок виконання:
- Дозволяє serialOrName через GetObject і викликає UseObject. Рядкове ім'я - аліас об'єкта, не ім'я graphic/type.
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.UseWorldObject(id);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- У metadata зареєстрована прямо на UserObject. Це звичайне використання serial, а не пошук у всьому серверному світі.
return RunScenario();
object? RunScenario()
{
var id = UO.GetSerial("self");
if (Truth(UO.Exists(id)))
{
UO.UseWorldObject(id);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Bridge надсилає запит на ігровому потоці. Діють правила сервера; вбудованого очікування підтвердження немає.
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()
{
ApplyToLoaded(UO.GetSerial("lasttarget"));
return null;
}
void ApplyToLoaded(dynamic id)
{
if (Truth(UO.Exists(id)))
{
UO.UseWorldObject(id);
}
}
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.
Параметри: serialOrName (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.UserObject. -
InjectionScript.Runtime.InjectionApiUO.UseObject:UseObject(GetObject(serialOrName)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(serialOrName).
Внутрішній код реалізації, не самостійний скрипт.
public void UserObject(InjectionValue serialOrName)
=> UseObject(GetObject(serialOrName));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.UserObject(object? serialOrName);Дозволяє serialOrName через GetObject і викликає UseObject. Рядкове ім'я - аліас об'єкта, не ім'я graphic/type.
-
serialOrName— Serial/ID об'єкта: int, числова/hex-рядок або встановлений аліас, наприклад "lasttarget". Це не graphic/type. До дії перевіряйте завантажений об'єкт.
void - значення немає. Викликайте окремим рядком; завершення не підтверджує дію сервера.
- Той самий шлях використання, що UO.UseWorldObject. Команда не створює об'єкт користувача і не додає ім'я AddObject.
- Bridge надсилає запит на ігровому потоці. Діють правила сервера; вбудованого очікування підтвердження немає.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.UserObject");
UO.UserObject(UO.GetSerial("lasttarget"));Параметри та порядок виконання:
- Дозволяє serialOrName через GetObject і викликає UseObject. Рядкове ім'я - аліас об'єкта, не ім'я graphic/type.
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.UserObject(id);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Той самий шлях використання, що UO.UseWorldObject. Команда не створює об'єкт користувача і не додає ім'я AddObject.
return RunScenario();
object? RunScenario()
{
var id = UO.GetSerial("self");
if (Truth(UO.Exists(id)))
{
UO.UserObject(id);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Bridge надсилає запит на ігровому потоці. Діють правила сервера; вбудованого очікування підтвердження немає.
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()
{
ApplyToLoaded(UO.GetSerial("lasttarget"));
return null;
}
void ApplyToLoaded(dynamic id)
{
if (Truth(UO.Exists(id)))
{
UO.UserObject(id);
}
}
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.
Параметри: serialOrName (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.UserObject. -
InjectionScript.Runtime.InjectionApiUO.UseObject:UseObject(GetObject(serialOrName)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(serialOrName).
Внутрішній код реалізації, не самостійний скрипт.
public void UserObject(InjectionValue serialOrName)
=> UseObject(GetObject(serialOrName));ClassicUO — Bad Newbie & C# Scripts IDE