Repository navigation
UO Topic items
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Головна · C# · IDE · Команди UO · За абеткою · Приклади · Мови
Читання властивостей, використання, фарбування та перенесення предметів. Параметр serial визначає конкретний предмет, а type або graphic — його графічний тип. Кількість одиниць у стосі та кількість окремих предметів розрізняються.
| Тема | Команди та пояснення |
|---|---|
| Властивості предметів | UO.GetSerial · UO.GetType · UO.GetGraphic · UO.GetColor · UO.GetQuantity · UO.GetName · UO.GetTooltip · UO.ContainerOf · UO.GetParent · UO.GetLayer · UO.IsMovable · UO.GetX · UO.GetY · UO.GetZ |
| Пошук предметів | UO.FindType · UO.FindTypeEx · UO.FindTypesArrayEx · UO.FindItem · UO.FindAnyType · UO.FindAtCoord · UO.FindList · UO.FindDistance · UO.FindVertical |
| Використання предметів | UO.UseObject · UO.UseType · UO.UseFromGround · UO.UseWorldObject · UO.UseItemOnMobile |
| Перенесення предметів | UO.Grab · UO.Drag · UO.Drop · UO.MoveItem · UO.MoveItems · UO.MassMove · UO.EmptyContainer |
| Предмети на землі | UO.GetWorldItems · UO.FindType · UO.CountGround · UO.MoveItem |
| Предмети в контейнері | UO.GetContent · UO.FindTypeEx · UO.OpenContainer |
| Предмети, створені лише в клієнті | UO.MakeFakeItem · UO.DeleteObject |
| Фарбування | UO.Dye |
UO.Exists · UO.IsObjectExists · UO.GetSerial · UO.GetType · UO.GetGraphic · UO.GetColor · UO.GetQuantity · UO.Name · UO.GetName · UO.GetAltName · UO.GetTooltip · UO.GetTooltipRec · UO.GetLayer · UO.GetLocked · UO.IsMovable · UO.GetFlags · UO.ReceiveObjectName · UO.UpdateObject
UO.UseObject · UO.UseType · UO.UseFromGround · UO.UseWorldObject · UO.UseItemOnMobile · UO.ClickOnObject · UO.TicksUse
UO.Grab · UO.Drag · UO.DragItem · UO.Drop · UO.DropHere · UO.DropItem · UO.MoveItem · UO.MoveItems · UO.MassMove · UO.EmptyContainer · UO.DropDelay · UO.DropCheckCoord · UO.Picking
UO.MakeFakeItem · UO.DeleteObject
UO.AddObject · UO.AddType · UO.EasyObject · UO.UserObject · UO.LastObject · UO.Forget
Нижче наведено короткі приклади. У повному описі кожної команди є параметри, результат, обмеження та кілька самостійних скриптів: прямий код, варіант із функцією та варіант із класом.
Параметри, результат та всі сценарії
var ok = UO.MoveItem("loot");
UO.Print("Move request: " + Convert.ToString(ok));Параметри, результат та всі сценарії
UO.MassMove(350, 0);
UO.Print("Drag one sample item to the destination container");Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AddObject(object? name);
void UO.AddObject(object? name, object? objectRawId);Зберігає названий serial об'єкта для подальшого використання скриптами. Двоххаргументна форма ставить об'єкт відразу; одноаргументна запускає вибір об'єкта курсором.
-
name— непусте ім'я, яким об'єкт буде доступний в runtime. -
objectRawId- serial або вже збережене ім'я об'єкта. Одноаргументне навантаження цей параметр не приймає, а запитує вибір об'єкта.
void. Перевіряйте збережену прив'язку читанням об'єкта на ім'я; виклик не повертає serial.
- За двох аргументів runtime визначає об’єкт за
objectRawIdі зберігає serial підname. За одного аргументу клієнт запитує вибір об’єкта: можна вибрати предмет або mobile, але не клітинку карти. Перед вибором попередня прив’язка з таким іменем видаляється; скасування/втрата курсору не відновлює її.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.AddObject");
UO.AddObject("target");Параметри та порядок виконання:
- Зберегти serial відомого предмета під зручним ім'ям.
UO.AddObject("supplyBox", "0x40012345");Параметри та порядок виконання:
- Запросити вибір предмета або mobile курсором та назвати його target.
return RunScenario();
object? RunScenario()
{
UO.AddObject("target");
return null;
}Параметри та порядок виконання:
- Повторне збереження імені замінює прив'язку на новий serial.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var selectedSerial = "0x40012345";
UO.AddObject("supplyBox", selectedSerial);
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: name (String)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.AddObject. -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage($"What is {name}"). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.AddObject:bridge.AddObject(name).
Внутрішній код реалізації, не самостійний скрипт.
public void AddObject(string name)
{
SystemMessage($"What is {name}");
bridge.AddObject(name);
}Параметри: name (Any), objectRawId (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.AddObject. -
InjectionScript.Runtime.InjectionApiUO.ObjectChecked:ObjectChecked(objectRawId, id => AddObject((string)name, id)). -
InjectionScript.Runtime.InjectionApiUO.AddObject:AddObject((string)name, id).
Внутрішній код реалізації, не самостійний скрипт.
public void AddObject(InjectionValue name, InjectionValue objectRawId)
=> ObjectChecked(objectRawId, id => AddObject((string)name, id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AddType(object? name);
void UO.AddType(object? name, object? @type);Зберігає зрозуміле ім'я для графічного типу предмета або mobile тіла. Наприклад, після UO.AddType("bandage", 0x0E21) можна шукати або використовувати бинти через ім'я "bandage", не повторюючи числовий type у кожному рядку. Це налаштування відповідності ім'я → Graphic, а не створення предмета та не запам'ятовування одного конкретного ID.
-
name— Обов'язковий рядок у лапках — ваше ім'я типу. Прогалини по краях видаляються, регістр не важливий: "Bandage" та "bandage" - один запис. Порожній рядок, числове ім'я, слово any, символ | та керуючі символи заборонені. Це значення параметра, а не нова змінна або UO-команда: у наступних дзвінках також потрібні лапки. -
type— Необов'язковий int 0..65535: Graphic/type, наприклад 0x0E21 або 3617. Допустима рядок з десятковим/шістнадцятковим числом або ім'я вже збереженого типу; останнє копіює його поточне число, не створює зв'язок між іменами. ID виду 0x40001001, від'ємне число, дріб та невідоме ім'я не приймаються. Якщо аргумент відсутній, з'являється курсор вибору: клацніть на завантаженому предметі, у тому числі всередині контейнера, або mobile. Зберігається Graphic вибраного об'єкта; поверхня землі та статичний тайл не підходять.
void — значення, що повертається, немає. Пишіть окремим рядком, без var result = і без порівняння з true/1. Команда не повертає вибраний type, serial або ознака успішного вибору. При скасуванні мишею старий запис зберігається; якщо імені раніше не було, воно залишається невизначеним. Наступний рядок скрипта виконується і після звичайного скасування, тому не запускайте дію автоматично, припускаючи, що користувач обов'язково вибрав новий предмет.
- Форма AddType(name, type) зберігає число відразу, без курсору та без мережевої дії. Повтор із тим самим ім'ям замінює його тип. Помилкове значення не знищує попередній запис. Форма AddType(name) чекає вибору; Esc, заміна курсора іншою дією або невідповідна мета залишають запис без зміни. Примусова зупинка скрипта перериває очікування і звільняє курсор, який йому належить.
- Імена типів зберігаються окремо від AddObject: однакове слово може позначати type в FindType і serial в UseObject. AddType("supply", 0x0E21) саме по собі не робить UseObject("supply") допустимим. Для конкретного предмета застосовуйте AddObject/GetSerial; для сімейства предметів - AddType і параметр type.
- Імена дозволяються у параметрах type у FindType (Всі форми), FindTypeEx, FindTypesArrayEx, FindList, FindNotoriety, GetWorldItems, UseType, UseFromGround, Count, CountGround, CountEx, EquipT, WaitTargetType, WaitTargetGround і WaitTargetObjectType. У масках типів GetMobiles/FindAnyType/WaitTarget можна комбінувати імена через | або масив; правила notoriety залишаються окремими. Слова human/near та інші фільтри FindMobile не перевизначаються.
- Зберігається лише Graphic, без кольору, кількості, контейнера, імені предмета, шару або властивостей. Два предмети одного типу різних кольорів вимагають окремого кольору у пошуку. Запис не підтверджує, що предмет існує, доступний або що сервер дозволить дію.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.AddType");
UO.AddType("my_tool");Параметри та порядок виконання:
- gold_stack - ім'я; 0x0EED - Graphic золота. FindType: -1 - будь-який колір, ground - земля, 2 - радіус пошуку. Повертається рядок serial або порожній рядок.
- MoveItem отримує знайдений serial, 0 для всієї стопки та backpack як призначення. Це один стос, а не всі стоси в радіусі. Доступність перенесення та реальний результат залежить від сервера; визначення типу саме нічого не переносить.
UO.AddType("gold_stack", 0x0EED);
var item = UO.FindType("gold_stack", -1, "ground", 2);
if (Truth(item == ""))
{
UO.Print("No loaded gold stack within 2 tiles");
return null;
}
var moved = UO.MoveItem(item, 0, "backpack");
if (Truth(moved == 0))
{
UO.Print("Move request failed");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Рядкове число 0x0E21 зберігається як int Graphic. Life/MaxHP порівнюють HP персонажа. FindType шукає будь-який колір рекурсивно у рюкзаку; -1 у distance використовує стандартну поведінку пошуку.
- self - мета застосування, bandage після FindType - змінна з serial. Черга націлення готується до використання предмета. Скрипт відправляє використання та не стверджує, що лікування вже завершилося; Таймер/правила лікування залежить від сервера.
return RunScenario();
object? RunScenario()
{
UO.AddType("bandage", "0x0E21");
if (Truth(UO.Life() >= UO.MaxHP()))
{
return null;
}
var bandage = UO.FindType("bandage", -1, "backpack", -1, true);
if (Truth(bandage == ""))
{
UO.Print("No loaded bandages in backpack");
return null;
}
UO.WaitTargetObject("self");
UO.UseObject(bandage);
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- В Main вказаний тільки name, тому відкривається курсор. Зберігається тип інструменту, що не його ID і не колір. UseSavedTool — звичайна окрема процедура C#, а не вбудована команда.
- UseType шукає екземпляр збереженого типу будь-якого кольору в рюкзаку та використовує його; повертає int serial або 0 за відсутності. Якщо ім'я ніколи не було визначено, це помилка аргументу, а не результат 0. Після скасування призначення Main не викликає UseSavedTool.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.AddType("my_tool");
return null;
}
void UseSavedTool()
{
var used = UO.UseType("my_tool", -1, "backpack");
if (Truth(used == 0))
{
UO.Print("No matching loaded tool in backpack");
}
}
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.
Параметри: name (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.AddType:AddType(arguments).
Внутрішній код реалізації, не самостійний скрипт.
case "addtype":
AddType(arguments);
break;Параметри: name (Any), type (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.AddType:AddType(arguments).
Внутрішній код реалізації, не самостійний скрипт.
case "addtype":
AddType(arguments);
break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ClickOnObject(object? objID);Відправляє одиночне клацання по об'єкту через GameActions.SingleClick.
-
objID— Serial об'єкта або підтримуване ім'я self/backpack/lasttarget/збереженого об'єкта; числові рядки та 0x-рядки дозволяються runtime.
void - значення, що повертається немає.
- Click дозволяє посилання через ObjectChecked. ClickOnObject спочатку використовує Arg для serial і викликає Click(int). Це запит підпису/інформації об'єкта, а не DoubleClick та не використання предмета. Серверна відповідь надходить асинхронно.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.ClickOnObject");
UO.ClickOnObject("self");Параметри та порядок виконання:
- Одиночне клацання вирушає self.
UO.ClickOnObject("self");Параметри та порядок виконання:
- Перед відправкою перевіряється локальне існування цілі.
return RunScenario();
object? RunScenario()
{
var target = UO.LastTarget();
if (Truth(UO.Exists(target)))
{
UO.ClickOnObject(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;Параметри та порядок виконання:
- Одиночне клацання по рюкзаку не відкриває його як подвійне клацання.
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 bag = UO.Backpack();
if (Truth(bag != 0))
{
UO.ClickOnObject(bag);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: objID (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.Click:Click(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Внутрішній код реалізації, не самостійний скрипт.
case "clickonobject": Click(Arg(0)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.DeleteObject(object? name);Видаляє збережене ім'я об'єкта з таблиці runtime.
-
name- string імені в таблиці Objects; видаляється лише цей запис.
void - значення, що повертається немає.
- При знайденому імені видаляє запис та друкує підтвердження; у разі відсутнього імені друкує повідомлення not found. Серверний об'єкт та його вміст не видаляються.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.DeleteObject");
UO.DeleteObject("temporary");Параметри та порядок виконання:
- Видаляється тільки зв'язок temporary з serial персонажа.
UO.AddObject("temporary",UO.Self());
UO.DeleteObject("temporary");Параметри та порядок виконання:
- Відсутнє ім'я викликає діагностичне повідомлення.
return RunScenario();
object? RunScenario()
{
UO.DeleteObject("missing-example-name");
return null;
}Параметри та порядок виконання:
- string-змінна визначає точну запис, що видаляється.
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 name = "temporary";
UO.AddObject(name, UO.Self());
UO.DeleteObject(name);
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: name (String)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.DeleteObject. -
InjectionScript.Runtime.State.RuntimeDictionary.TryGet:objects.TryGet(name, out int value). -
InjectionScript.Runtime.State.RuntimeDictionary.Remove:objects.Remove(name). -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage($"Object {name} has been deleted").
Внутрішній код реалізації, не самостійний скрипт.
public void DeleteObject(string name)
{
if (objects.TryGet(name, out int value))
{
objects.Remove(name);
SystemMessage($"Object {name} has been deleted");
}
else
SystemMessage($"Object {name} not found");
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Drag(object? id);
int UO.Drag(object? id, object? amount);
int UO.Drag(object? id, object? amount, object? timeout);
void UO.Drag(object? fromX, object? fromY, object? toX, object? toY);Піднімає конкретний предмет курсор; окрема чотирихаргументна форма перетягує мишу у вікні Windows.
-
id— Serial конкретного предмета/персонажу: число, hex/десятковий рядок, self/backpack/lasttarget/lastobject/lastcontainer/lastcorpse/finditem/laststatus або збережене ім'я AddObject. Це не type. Об'єкт має бути завантажений; перед дією перевіряйте Exists. -
amount— Кількість одиниць усередині одного стека. 0 або негативне значення означає весь стек; позитивне обмежується доступною кількістю. Це НЕ число стопок, яке обмежує MassMove. За відсутності дорівнює 0. -
timeout— Необов'язковий третій аргумент: очікування Picking до зазначеного числа мілісекунд; за замовчуванням 0. Негативне значення дорівнює 0. -
fromX- Тільки форма з чотирьох int: початковий X миші в пікселях клієнтського вікна. -
fromY- Початковий Y миші в пікселях клієнтського вікна. -
toX- Кінцевий X миші в пікселях. -
toY- Кінцевий Y миші в пікселях.
При 1..3 аргументів int: 1 — запит підйому прийнятий клієнтом (при timeout>0 також спостерігався зайнятий курсор); 0 — підйом відхилений або сплив тайм-аут. При чотирьох аргументах null: значення, що повертається, немає. Це не ID предмета.
- Для ігрового перенесення переважна форма id [, amount [, timeout]] і наступний DropItem або єдиний MoveItem.
- Форма fromX/fromY/toX/toY використовує події миші Windows: переміщення, натискання, переміщення, відпускання. Вона не має підтвердження сервера і залежить від реального вмісту/фокусу вікна.
- Зайнятий курсор не рівнозначний успішному перенесенню призначення. Захоплення та скидання - окремі дії.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.Drag("lasttarget");
UO.Print("Drag: " + Convert.ToString(result));Параметри та порядок виконання:
- loot - serial через AddObject. amount=0 означає весь стек; -1/-1 задає автоматичне місце в гампі.
- DropItem завершує захоплення тієї самої runtime. Одиниця означає надсилання запиту, а не підтвердження сервера.
if (Truth(UO.Drag("loot", 0)))
{
var dropped = UO.DropItem("backpack", -1, -1, 0);
UO.Print("Drop request: " + Convert.ToString(dropped));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- amount = 10 - до десяти одиниць одного стопки; timeout=500 мс.
- 44/55 - координати всередині рюкзака, не карти. Якщо предмет взяти не можна, DropItem не викликається.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Drag("loot", 10, 500)))
{
var dropped = UO.DropItem("backpack", 44, 55, 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;Параметри та порядок виконання:
- Один аргумент Drag означає весь стек і timeout = 0.
- Picking перевіряє загальний курсор клієнта. Не запускайте два незалежні перенесення одночасно.
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.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;
}Параметри та порядок виконання:
- Це пікселі вікна: початок (100,120), кінець (260,180). Тут немає serial, amount або timeout.
- Використовуйте лише коли потрібні елементи знаходяться у цих місцях; для предметів надійніше адресація по serial.
UO.Drag(100, 120, 260, 180);C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: id (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.Drag. -
InjectionScript.Runtime.InjectionApiUO.Drag:Drag(id, InjectionValue.Zero, InjectionValue.Zero).
Внутрішній код реалізації, не самостійний скрипт.
public int Drag(InjectionValue id) => Drag(id, InjectionValue.Zero, InjectionValue.Zero);Параметри: id (Any), amount (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.Drag. -
InjectionScript.Runtime.InjectionApiUO.Drag:Drag(id, amount, InjectionValue.Zero).
Внутрішній код реалізації, не самостійний скрипт.
public int Drag(InjectionValue id, InjectionValue amount) => Drag(id, amount, InjectionValue.Zero);Параметри: id (Any), amount (Any), timeout (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.Drag. -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(amount). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.DragItem:bridge.DragItem(serial, requestedAmount). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Picking:bridge.Picking(). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Wait:bridge.Wait(10). -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage($"UO.Drag: item pickup was not observable within {timeoutMs} ms.").
Внутрішній код реалізації, не самостійний скрипт.
public int Drag(InjectionValue id, InjectionValue amount, InjectionValue timeout)
{
int serial = GetObject(id);
if (serial == 0)
return 0;
int requestedAmount = NumberConversions.ToInt(amount);
int timeoutMs = Math.Max(0, NumberConversions.ToInt(timeout));
int result = bridge.DragItem(serial, requestedAmount);
if (result == 0 || timeoutMs <= 0)
return result;
DateTime deadline = DateTime.UtcNow.AddMilliseconds(timeoutMs);
do
{
if (bridge.Picking() != 0)
return 1;
if (DateTime.UtcNow >= deadline)
break;
bridge.Wait(10);
}
while (true);
SystemMessage($"UO.Drag: item pickup was not observable within {timeoutMs} ms.");
return 0;
}Параметри: fromX (Integer), fromY (Integer), toX (Integer), toY (Integer)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.Drag. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Drag:bridge.Drag(fromX, fromY, toX, toY).
Внутрішній код реалізації, не самостійний скрипт.
public void Drag(int fromX, int fromY, int toX, int toY) => bridge.Drag(fromX, fromY, toX, toY);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.DragItem(object? objID, object? count);Піднімає конкретну річ та запам'ятовує її для DropItem цього runtime.
-
objID— Serial конкретного предмета/персонажу: число, hex/десятковий рядок, self/backpack/lasttarget/lastobject/lastcontainer/lastcorpse/finditem/laststatus або збережене ім'я AddObject. Це не type. Об'єкт має бути завантажений; перед дією перевіряйте Exists. -
count— Кількість одиниць усередині одного стека. 0 або негативне значення означає весь стек; позитивне обмежується доступною кількістю. Це НЕ число стопок, яке обмежує MassMove.
int 1 — клієнт прийняв підняття; 0 — предмет не знайдено або PickUp відмовив. Метадані сумісності object? не означають довільного типу результату. Це не serial.
Результат команди — числовий прапор: 1 означає виконану умову, 0 — невиконану. Після var result = команда (...) перевіряйте if (result != 0) або if (result == 0). Збережіть результат одного виклику: повторний виклик може виконати дію знову або прочитати стан, що вже змінився.
- Обидва аргументи є обов'язковими. Вбудованого очікування доказу немає; форма Drag(id,amount,timeout) додає очікування локального Picking.
- Після успішного захоплення завершіть дію DropItem. Предмет, вручну взятий мишею, не встановлює пам'ять DragItem даного runtime.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.DragItem("lasttarget", 0);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- ObjID=loot через AddObject, Count=0 це весь стек.
- Друга команда скидає той самий піднятий предмет.
if (Truth(UO.DragItem("loot", 0)))
{
var ok = UO.DropItem("backpack", -1, -1, 0);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Замініть ObjID своїм serial. Count=5 відноситься до одиниць одного стоси.
- Місце 44/55 знаходиться всередині гампа рюкзака.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.DragItem(0x40001234, 5)))
{
var ok = UO.DropItem("backpack", 44, 55, 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;Параметри та порядок виконання:
- picked — int 1/0.
- Не спричиняйте DropItem після невдалого захоплення: курсор може належати іншій дії.
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 picked = UO.DragItem("loot", 0);
if (Truth(picked == 0))
{
UO.Print("Item was not picked up");
}
else
{
var ok = 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;
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: objID (Any), count (Any)
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.DragItem:bridge.DragItem(Arg(0), Arg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Внутрішній код реалізації, не самостійний скрипт.
case "dragitem": return new InjectionValue(bridge.DragItem(Arg(0), Arg(1)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Drop(object? @object);
int UO.Drop(object? @object, object? count);
int UO.Drop(object? @object, object? count, object? destination);
dynamic UO.Drop(object? objID, object? count, object? x, object? y, object? z);Виконує повне перенесення зазначеного предмета за умовчанням на землю під персонажем.
-
object— Serial конкретного предмета/персонажу: число, hex/десятковий рядок, self/backpack/lasttarget/lastobject/lastcontainer/lastcorpse/finditem/laststatus або збережене ім'я AddObject. Це не type. Об'єкт має бути завантажений; перед дією перевіряйте Exists. -
objID— Serial конкретного предмета/персонажу: число, hex/десятковий рядок, self/backpack/lasttarget/lastobject/lastcontainer/lastcorpse/finditem/laststatus або збережене ім'я AddObject. Це не type. Об'єкт має бути завантажений; перед дією перевіряйте Exists. -
count— Кількість одиниць усередині одного стека. 0 або негативне значення означає весь стек; позитивне обмежується доступною кількістю. Це НЕ число стопок, яке обмежує MassMove. У короткій формі без count дорівнює 0. -
destination— Тільки у формі з трьома аргументами: Serial контейнера або встановлене ім'я AddObject; backpack/self/my вибирають рюкзак, receiving/catchbag - SetCatchBag, а без нього рюкзак. lastcontainer/lastobject/lasttarget/lastcorpse/finditem/laststatus допустимі, коли дозволяються в потрібний контейнер. ground або 0 явно вибирає землю; -1 - колишній селектор рюкзака. Невідоме чи невстановлене ім'я викликає помилку до захоплення предмета. Без аргументу призначення використовується рюкзак. -
x— Тільки у формі із п'ятьма аргументами: світова X призначення на землі. -
y- Світова Y для п'ятиаргументної форми. -
z- Світова висота для п'ятиаргументної форми.
int 1 - запит повного перенесення прийнятий клієнтом; 0 - не вдалося. П'ятиаргументна сумісна форма має метадату object?, але фактично повертає int 1/0. Це не скидання раніше взятого DragItem: для нього використовуйте DropItem.
Результат команди — числовий прапор: 1 означає виконану умову, 0 — невиконану. Після var result = команда (...) перевіряйте if (result != 0) або if (result == 0). Збережіть результат одного виклику: повторний виклик може виконати дію знову або прочитати стан, що вже змінився.
- Зареєстровані форми з 1, 2, 3 та 5 аргументами. Форми із чотирма аргументами немає.
- Drop(item) переносить весь стек на землю під собою; Drop(item,count) задає одиниці; Drop(item,count,destination) дозволяє контейнер.
- Drop(item,count,X,Y,Z) завжди означає землю. Для контейнера з координатами гампа використовуйте MoveItem.
- Діють обмеження підйому, DropCheckCoord та перевірки сервера. Команда не чекає на окреме підтвердження доставки.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.Drop("lasttarget");
UO.Print("Drop: " + Convert.ToString(result));Параметри та порядок виконання:
- object=loot через AddObject, count=0 за замовчуванням.
- Призначення – поточна точка персонажа землі.
var ok = UO.Drop("loot");Параметри та порядок виконання:
- count=5 одиниць однієї стопки; destination=backpack.
- Третій аргумент тут є контейнер, не X.
return RunScenario();
object? RunScenario()
{
var ok = UO.Drop("loot", 5, "backpack");
return null;
}Параметри та порядок виконання:
- ObjID замініть своїм serial; Count=0 весь стек; X/Y/Z=1445/1690/0.
- Для цієї форми третє значення – X. Попередній Drag не потрібен.
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.Drop(0x40001234, 0, 1445, 1690, 0);
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: object (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.MoveItem:MoveItem(arguments[0], arguments.Length > 1 ? arguments[1] : InjectionValue.Zero, arguments.Length > 2 ? arguments[2] : new InjectionValue("ground")).
Внутрішній код реалізації, не самостійний скрипт.
case "drop":
if (arguments.Length > 0)
return new InjectionValue(MoveItem(arguments[0], arguments.Length > 1 ? arguments[1] : InjectionValue.Zero, arguments.Length > 2 ? arguments[2] : new InjectionValue("ground")));
return InjectionValue.False;Параметри: object (Any), count (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.MoveItem:MoveItem(arguments[0], arguments.Length > 1 ? arguments[1] : InjectionValue.Zero, arguments.Length > 2 ? arguments[2] : new InjectionValue("ground")).
Внутрішній код реалізації, не самостійний скрипт.
case "drop":
if (arguments.Length > 0)
return new InjectionValue(MoveItem(arguments[0], arguments.Length > 1 ? arguments[1] : InjectionValue.Zero, arguments.Length > 2 ? arguments[2] : new InjectionValue("ground")));
return InjectionValue.False;Параметри: object (Any), count (Any), destination (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.MoveItem:MoveItem(arguments[0], arguments.Length > 1 ? arguments[1] : InjectionValue.Zero, arguments.Length > 2 ? arguments[2] : new InjectionValue("ground")).
Внутрішній код реалізації, не самостійний скрипт.
case "drop":
if (arguments.Length > 0)
return new InjectionValue(MoveItem(arguments[0], arguments.Length > 1 ? arguments[1] : InjectionValue.Zero, arguments.Length > 2 ? arguments[2] : new InjectionValue("ground")));
return InjectionValue.False;Параметри: objID (Any), count (Any), x (Any), y (Any), z (Any)
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.MoveItemChecked:MoveItemChecked(Arg(0), Arg(1), 0, Arg(2), Arg(3), Arg(4)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Внутрішній код реалізації, не самостійний скрипт.
case "drop": return new InjectionValue(MoveItemChecked(Arg(0), Arg(1), 0, Arg(2), Arg(3), Arg(4)) ? 1 : 0);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.DropCheckCoord();
dynamic UO.DropCheckCoord(object? value);Читає або змінює перевірку дальності координат під час скидання предметів на землю.
-
value— Необов'язкове значення: 0 вимикає, ненульовий int включає. Без аргументу стан лише читається.
int 0/1 — поточний стан після можливого запису; обидві форми повертають число.
- MoveItemChecked при наземному призначенні та включеному прапорі відхиляє Chebyshev-відстань X/Y більше 2 клітин від персонажа. Перевірка не змінює координати та не перевіряє серверний дозвіл на перенесення. Контейнерні призначення не обмежуються цим прапором.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.DropCheckCoord();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- Читання повертає поточне нормалізоване налаштування.
var enabled = UO.DropCheckCoord();
UO.Print(Convert.ToString(enabled));Параметри та порядок виконання:
- Наземні передачі через MoveItemChecked тепер обмежені двома квадратами.
return RunScenario();
object? RunScenario()
{
var enabled = UO.DropCheckCoord(1);
UO.Print(Convert.ToString(enabled));
return null;
}Параметри та порядок виконання:
- Зберігається вихідне значення та відновлюється явно.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var old = UO.DropCheckCoord();
var temporary = UO.DropCheckCoord(0);
var restored = UO.DropCheckCoord(old);
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Внутрішній код реалізації, не самостійний скрипт.
case "dropcheckcoord":
if (arguments.Length > 0) state.DropCheckCoord = Arg(0) != 0 ? 1 : 0;
return new InjectionValue(state.DropCheckCoord);Параметри: value (Any)
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Внутрішній код реалізації, не самостійний скрипт.
case "dropcheckcoord":
if (arguments.Length > 0) state.DropCheckCoord = Arg(0) != 0 ? 1 : 0;
return new InjectionValue(state.DropCheckCoord);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.DropDelay();
dynamic UO.DropDelay(object? value);Читає або змінює затримку GrabDelay runtime, яку використовують переноси предметів.
-
value- Необов'язкова затримка в мілісекундах; bridge обмежує до 50..10000.
Без аргументу int з поточною GrabDelay. Форма запису повертає null, хоча метадані обох форм містять object?.
- SetDropDelay та GetDropDelay використовують State.GrabDelay. Налаштування задає клієнтську затримку переносів, а не підтвердження їх завершення сервером.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.DropDelay();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- Читання повертає мілісекунди.
var ms = UO.DropDelay();
UO.Print(Convert.ToString(ms));Параметри та порядок виконання:
- Запис встановлює 250 мс.
return RunScenario();
object? RunScenario()
{
UO.DropDelay(250);
return null;
}Параметри та порядок виконання:
- Нуль обмежується до 50 мс, після чого відновлюється колишнє значення.
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 previous = UO.DropDelay();
UO.DropDelay(0);
UO.Print(Convert.ToString(UO.DropDelay()));
UO.DropDelay(previous);
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetDropDelay:bridge.SetDropDelay(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetDropDelay:bridge.GetDropDelay().
Внутрішній код реалізації, не самостійний скрипт.
case "dropdelay":
if (arguments.Length > 0) { bridge.SetDropDelay(Arg(0)); return InjectionValue.Unit; }
return new InjectionValue(bridge.GetDropDelay());Параметри: value (Any)
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetDropDelay:bridge.SetDropDelay(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetDropDelay:bridge.GetDropDelay().
Внутрішній код реалізації, не самостійний скрипт.
case "dropdelay":
if (arguments.Length > 0) { bridge.SetDropDelay(Arg(0)); return InjectionValue.Unit; }
return new InjectionValue(bridge.GetDropDelay());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.DropHere(object? @object);Переносить весь вказаний предмет/стек на землю у поточну точку персонажа.
-
object— Serial конкретного предмета/персонажу: число, hex/десятковий рядок, self/backpack/lasttarget/lastobject/lastcontainer/lastcorpse/finditem/laststatus або збережене ім'я AddObject. Це не type. Об'єкт має бути завантажений; перед дією перевіряйте Exists.
int 1 - запит перенесення прийнятий клієнтом; 0 - не виконаний. Це не serial і не підтвердження сервера.
Результат команди — числовий прапор: 1 означає виконану умову, 0 — невиконану. Після var result = команда (...) перевіряйте if (result != 0) або if (result == 0). Збережіть результат одного виклику: повторний виклик може виконати дію знову або прочитати стан, що вже змінився.
- Зареєстровано форму рівно з одним аргументом. Для частини стека використовуйте Drop(item,count) або MoveItem.
- X/Y/Z беруться у персонажа під час дзвінка. Попередній DragItem не потрібний.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.DropHere(UO.LastTarget());
UO.Print("DropHere: " + Convert.ToString(result));Параметри та порядок виконання:
- object - serial, замініть реальним.
- Весь стек переноситься під персонажа.
var ok = UO.DropHere(0x40001234);Параметри та порядок виконання:
- loot заданий через AddObject.
- Exists перевіряє доступність, а не дозвіл сервера на перенесення.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Exists("loot")))
{
var ok = UO.DropHere("loot");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- ok — int 1/0.
- Для підтвердження серверного результату окремо перевіряйте положення та контейнер предмета.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var ok = UO.DropHere("loot");
if (Truth(ok == 0))
{
UO.Print("Drop request was not accepted");
}
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.
Параметри: object (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.MoveItem:MoveItem(arguments[0], arguments.Length > 1 ? arguments[1] : InjectionValue.Zero, new InjectionValue("ground"), new InjectionValue(GetX()), new InjectionValue(GetY()), new InjectionValue(GetZ())). -
InjectionScript.Runtime.InjectionApiUO.GetX:GetX(). -
InjectionScript.Runtime.InjectionApiUO.GetY:GetY(). -
InjectionScript.Runtime.InjectionApiUO.GetZ:GetZ().
Внутрішній код реалізації, не самостійний скрипт.
case "drophere":
if (arguments.Length > 0)
return new InjectionValue(MoveItem(arguments[0], arguments.Length > 1 ? arguments[1] : InjectionValue.Zero, new InjectionValue("ground"), new InjectionValue(GetX()), new InjectionValue(GetY()), new InjectionValue(GetZ())));
return InjectionValue.False;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.DropItem(object? moveIntoID, object? x, object? y, object? z);Скидає предмет, раніше успішно взятий Drag/DragItem у тому же runtime.
-
moveIntoID- Serial призначення, backpack або встановлене ім'я AddObject. Число 0 означає землю. Використовуйте backpack, а не self: цей низькорівневий аргумент дозволяє self у serial персонажа. -
x- Для контейнера - місце всередині гампа (-1/65535 автоматично); для землі – світова X. -
y- Для контейнера - місце всередині гампа (-1/65535 автоматично); для землі – світова Y. -
z- Висота скидання; у контейнері зазвичай 0, на землі фактична Z точки.
int 1 - скидання відправлено і курсор відзначений Dropped; 0 — не було успішного DragItem, курсор змінився/недоступний або призначення неприпустиме. Метадату object? сумісності не змінює цей результат. Це не кількість і не serial.
Результат команди — числовий прапор: 1 означає виконану умову, 0 — невиконану. Після var result = команда (...) перевіряйте if (result != 0) або if (result == 0). Збережіть результат одного виклику: повторний виклик може виконати дію знову або прочитати стан, що вже змінився.
- Потрібні всі чотири аргументи. Цей варіант не бере предмет наново; Drop і MoveItem виконують повне перенесення по serial.
- Перевіряється, що утримується саме предмет, запам'ятаний цим runtime. Чужий чи вручну взятий предмет нічого не винні скидатися випадково.
- Після надсилання пам'ять захоплення очищається. Встановлений GrabDelay додає паузу у потоці скрипту. Серверна відмова можлива після повернення.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.DropItem("backpack", -1, -1, 0);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- MoveIntoID=backpack, X/Y=-1, Z=0.
- Перевіряється успішне захоплення до скидання.
if (Truth(UO.DragItem("loot", 0)))
{
var ok = UO.DropItem("backpack", -1, -1, 0);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- chest заданий через AddObject. X = 60 / Y = 70 - координати в його гампі.
- amount=10 відноситься до Drag, у DropItem власної кількості немає.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Drag("loot", 10)))
{
var ok = UO.DropItem("chest", 60, 70, 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;Параметри та порядок виконання:
- MoveIntoID=0 явно вибирає землю.
- X/Y/Z – точка світу, а не координати контейнера.
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 x = UO.GetX();
var y = UO.GetY();
var z = UO.GetZ();
if (Truth(UO.DragItem("loot", 0)))
{
var ok = UO.DropItem(0, x, y, z);
}
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.
Параметри: moveIntoID (Any), x (Any), y (Any), z (Any)
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.DropDraggedItem:bridge.DropDraggedItem(Arg(0), Arg(1), Arg(2), Arg(3)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Внутрішній код реалізації, не самостійний скрипт.
case "dropitem": return new InjectionValue(bridge.DropDraggedItem(Arg(0), Arg(1), Arg(2), Arg(3)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Dye(object? dyeObject);
void UO.Dye(object? dyeObject, object? target);Використовує переданий предмет фарбування; при другому аргументі заздалегідь ставить об'єктну UO.Wait-target.
-
dyeObject— Serial об'єкта або підтримуване ім'я self/backpack/lasttarget/збереженого об'єкта; числові рядки та 0x-рядки дозволяються runtime. -
target— Необов'язковий об'єкт/serial наступної мети. Без другого аргументу нову мету не ставлять.
void - значення, що повертається немає.
- Двохаргументна форма спочатку викликає WaitTargetObject(target), потім UseObject(dyeObject). Форма з одним аргументом лише використовує предмет. Це відправлення дій; колір, право забарвлення та результат визначаються сервером.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.Dye");
UO.Dye(UO.LastObject());Параметри та порядок виконання:
- Одноаргументний виклик не ставить за мету.
var dye = UO.LastObject();
if (Truth(UO.Exists(dye)))
{
UO.Dye(dye);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Target ставиться перед подвійним клацанням по dye.
return RunScenario();
object? RunScenario()
{
var dye = UO.LastObject();
var target = UO.LastTarget();
if (Truth(UO.Exists(dye)) && Truth(UO.Exists(target)))
{
UO.Dye(dye, 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;Параметри та порядок виконання:
- Приклад використовує попередньо збережені імена dye та cloth.
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("dye")) && Truth(UO.Exists("cloth")))
{
UO.Dye("dye", "cloth");
}
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.
Параметри: dyeObject (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.WaitTargetObject:bridge.WaitTargetObject(Arg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(1). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseObject:bridge.UseObject(Arg(0, bridge.GetLastObject())). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetLastObject:bridge.GetLastObject().
Внутрішній код реалізації, не самостійний скрипт.
case "dye":
if (arguments.Length > 1) bridge.WaitTargetObject(Arg(1));
bridge.UseObject(Arg(0, bridge.GetLastObject()));
break;Параметри: dyeObject (Any), target (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.WaitTargetObject:bridge.WaitTargetObject(Arg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(1). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseObject:bridge.UseObject(Arg(0, bridge.GetLastObject())). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetLastObject:bridge.GetLastObject().
Внутрішній код реалізації, не самостійний скрипт.
case "dye":
if (arguments.Length > 1) bridge.WaitTargetObject(Arg(1));
bridge.UseObject(Arg(0, bridge.GetLastObject()));
break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.EasyObject(object? name);
void UO.EasyObject(object? name, object? @object);Зберігає ім'я об'єкта без інтерактивного запиту target.
-
name— Ім'я запису runtime Objects, що перетворюється на string. -
object— Необов'язковий serial/посилання. Без нього зберігається GetLastObject.
void - значення, що повертається немає.
- State.Objects.Set замінює запис імені. Одноаргументна форма використовує останній використаний об'єкт, а не LastTarget. Наявність об'єкта у світі окремо не перевіряється цією гілкою.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.EasyObject");
UO.EasyObject("last-used");Параметри та порядок виконання:
- Ім'я отримує поточний LastObject.
UO.EasyObject("last-used");Параметри та порядок виконання:
- Двоххаргументна форма зберігає переданий serial.
return RunScenario();
object? RunScenario()
{
UO.EasyObject("me", UO.Self());
return null;
}Параметри та порядок виконання:
- Forget видаляє лише збережений зв'язок імені.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.EasyObject("temporary", UO.Self());
UO.Forget("temporary");
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: name (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.State.RuntimeDictionary.Set:state.Objects.Set(Text(0), Arg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(1). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetLastObject:bridge.GetLastObject().
Внутрішній код реалізації, не самостійний скрипт.
case "easyobject":
if (arguments.Length > 1) state.Objects.Set(Text(0), Arg(1));
else if (arguments.Length > 0) state.Objects.Set(Text(0), bridge.GetLastObject());
break;Параметри: name (Any), object (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.State.RuntimeDictionary.Set:state.Objects.Set(Text(0), Arg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(1). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetLastObject:bridge.GetLastObject().
Внутрішній код реалізації, не самостійний скрипт.
case "easyobject":
if (arguments.Length > 1) state.Objects.Set(Text(0), Arg(1));
else if (arguments.Length > 0) state.Objects.Set(Text(0), bridge.GetLastObject());
break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.EmptyContainer(object? delay);
int UO.EmptyContainer(object? delay, object? source);
int UO.EmptyContainer(object? delay, object? source, object? destination);Переносить весь прямий вміст скрині, сумки або трупа у заданий контейнер. Перший параметр завжди затримка у мілісекундах. Якщо джерело не вказано, з'являється локальний приціл: виберіть вихідний контейнер. За замовчуванням — рюкзак поточного персонажа.
-
delay— Перший обов'язковий параметр: затримка між переносами в мілісекундах. Наприклад 350 - 0,35 секунди. Використовуються цілі значення; негативні наводяться до 0. GrabDelay окремо до цієї затримки не додається. Остання пауза зберігається, щоб наступний рядок не обганяв останній запит. -
source— Другий необов'язковий параметр: serial вихідного контейнера, числове/hex-рядок або збережене ім'я об'єкта. Підтримуються lastobject, lastcontainer, lasttarget, lastcorpse, backpack/my. Якщо параметр відсутній або дорівнює 0, з'являється приціл. Виберіть предмет-контейнер чи труп; Esc скасовує дію. -
destination— третій необов’язковий параметр: serial або збережене ім’я контейнера призначення. backpack/self/my вибирають рюкзак персонажа. receiving/catchbag вибирають установлений SetCatchBag контейнер (або рюкзак, якщо його не встановлено). lastcontainer/lastobject/lasttarget/lastcorpse/finditem/laststatus допустимі, якщо визначають доступний контейнер. Невідомий або не встановлений псевдонім спричиняє помилку. Якщо параметр не вказано, використовується рюкзак; налаштування receiving container не підміняє цей вибір. Контейнер призначення має існувати й відрізнятися від source. Земля/0 тут не є допустимим контейнером призначення.
int: 1, якщо джерело було непустим і для кожного вибраного прямого предмета вдалося надіслати запит перенесення; 0 при порожньому джерелі, скасуванні прицілу, неправильному призначенні, тайм-ауті завантаження або частковій/повній невдачі відправки. Це результат запитів клієнта, не гарантія підтвердженого спустошення сервером.
- Точні форми: "EmptyContainer"(delay), "EmptyContainer"(delay, source), "EmptyContainer"(delay, source, destination). В ігровому чаті зі стандартним префіксом: emptycontainer 350; із скрипту: UO.EmptyContainer(350).
- При виборі прицілом команда чекає на вибір, скасування або аварійну зупинку. Клієнт продовжує оновлювати зображення та мережу. Esc не надсилає переносів, не використовує старий об'єкт і повертає 0. Якщо інший приціл замінив цей вибір, дія також скасовується.
- Якщо вміст ще не завантажений, клієнт відкриває джерело і чекає на відповідь сервера до 3000 мс. Прихований від клієнта вміст неможливо перенести без отримання сервера. Недоступна/занадто скриня або заборона сервера призводять до невдачі, а не до вибору іншого контейнера.
- Після отримання даних створюється перелік прямих предметів. Кожен стек переноситься повністю, за одним запитом захоплення та скидання. Вкладена сумка переноситься повністю; її вміст окремо не перебирається. Нові предмети, додані пізніше, не входять до поточного списку.
- Перед кожним запитом повторно перевіряється, що предмет у вихідному контейнері. Не можна вкласти контейнер у себе чи власного нащадка. Якщо курсор зайнятий іншим предметом, команда не скидає його з вашого імені.
- Відсутній контейнер призначення не замінюється на рюкзак. Результат 1 не означає, що сервер вжив усіх дій: за потреби перевірте вміст після оновлення сервера. Аварійна зупинка перериває очікування; вже надіслані дії не відкочуються.
- Невідоме збережене ім'я або неприпустимий формат аргументу викликає помилку API, а не повернення 0. Відрізняйте це від коректного serial відсутнього об'єкта: йому операція повертає 0.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.EmptyContainer(350);
UO.Print("EmptyContainer: " + Convert.ToString(result));Параметри та порядок виконання:
- Єдиний параметр delay = 350 задає інтервал 350 мс. source відсутня, тому з'являється приціл.
- destination також відсутня: вміст у рюкзак персонажа. Вибирайте сам контейнер/труп, а не один предмет усередині нього.
- sent отримує 1 або 0. Значення 0 поєднує скасування, порожнечу та невдачу; Подробиці також дивіться у журналі.
UO.Print("Select a chest or corpse");
var sent = UO.EmptyContainer(350);
if (Truth(sent == 0))
{
UO.Print("Cancelled, empty, unavailable, or a transfer failed");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- delay=350; source - реальний serial скрині, замініть зразковий ID своїм. Приціл не з'являється.
- Третій параметр не вказано, тому destination=backpack. Всі типи прямих предметів та повні стеки включаються до перенесення.
- Print виводить клієнтський результат надсилання, не кількість предметів і не підтвердження сервера.
return RunScenario();
object? RunScenario()
{
var source = "0x40001234";
var sent = UO.EmptyContainer(350, source);
UO.Print("Client request result: " + Convert.ToString(sent));
return null;
}Параметри та порядок виконання:
- AddObject з одним параметром пропонує вибрати об'єкт та зберігає його ім'я. Два вибори виконуються послідовно.
- У EmptyContainer delay = 350; source=source_bag; destination=destination_bag. Третій параметр ставить конкретну сумку замість рюкзака.
- Імена повинні вказувати на різні контейнери. Скасований AddObject видаляє колишнє значення свого імені, тому стара сумка не використовується випадково.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.Print("Select source");
UO.AddObject("source_bag");
UO.Print("Select destination");
UO.AddObject("destination_bag");
var sent = UO.EmptyContainer(350, "source_bag", "destination_bag");
UO.Print("Client request result: " + Convert.ToString(sent));
return null;
}
}Параметри та порядок виконання:
- delay = 500 - інтервал півсекунди. source=lastcontainer — останній контейнер, відкритий сервером цього клієнта.
- destination — явний ID вашої скрині; замініть приклад. lastcontainer та lastobject мають різний зміст: останній відкритий контейнер та останній використаний об'єкт.
- Перед запуском переконайтеся, що останнім відкрили саме джерело. Перенесення не відкриває його вкладені сумки рекурсивно.
var destination = "0x40005678";
UO.EmptyContainer(500, "lastcontainer", destination);Параметри та порядок виконання:
- delay = 350; source=0 спеціально викликає приціл, зберігаючи можливість передати третій параметр.
- destination=storage вказує на заздалегідь збережену скриню. Після вибору джерела вміст переноситься туди.
- Esc повертає sent=0 без перенесення. Якщо storage невідомий або немає, інший контейнер автоматично не вибирається.
return RunScenario();
object? RunScenario()
{
UO.AddObject("storage", "0x40005678");
var sent = UO.EmptyContainer(350, 0, "storage");
return null;
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: delay (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.ExecuteEmptyContainer:ExecuteEmptyContainer(arguments).
Внутрішній код реалізації, не самостійний скрипт.
case "emptycontainer": return ExecuteEmptyContainer(arguments);Параметри: delay (Any), source (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.ExecuteEmptyContainer:ExecuteEmptyContainer(arguments).
Внутрішній код реалізації, не самостійний скрипт.
case "emptycontainer": return ExecuteEmptyContainer(arguments);Параметри: delay (Any), source (Any), destination (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.ExecuteEmptyContainer:ExecuteEmptyContainer(arguments).
Внутрішній код реалізації, не самостійний скрипт.
case "emptycontainer": return ExecuteEmptyContainer(arguments);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Exists(object? id);Перевіряє наявність невидаленого об’єкта в локальному світі клієнта.
-
id— Обов'язковий serial/ID конкретного об'єкта: int, hex-рядок або аліас self, backpack, lasttarget, lastobject, lastcontainer, laststatus, finditem, lastcorpse або ім'я AddObject. Це не graphic/type. Невстановлене ім'я дозволяється у 0; ніякий новий target команда не відкриває.
int 1 - serial зараз дозволяється в завантажений предмет або mobile. int 0 - об'єкт невідомий клієнту, видалений або аліас не встановлений. Це не відповідь сервера про існування об'єкта: предмет поза видимою областю може існувати на сервері і давати 0 тут.
Результат команди — числовий прапор: 1 означає виконану умову, 0 — невиконану. Після var result = команда (...) перевіряйте if (result != 0) або if (result == 0). Збережіть результат одного виклику: повторний виклик може виконати дію знову або прочитати стан, що вже змінився.
- Читається локальна модель клієнта; запитів серверу, очікування та переміщення немає.
- Результат відноситься до моменту читання. Після UO.Wait або іншої дії об'єкт та його прапори можуть змінитися.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.Exists("backpack");
UO.Print("Exists: " + Convert.ToString(result));Параметри та порядок виконання:
- Аргумент backpack - аліас serial рюкзак власного персонажа.
- 1 не означає, що вміст рюкзака вже повністю отриманий або він відкритий.
var present = UO.Exists("backpack");
if (Truth(present))
{
UO.Print("Backpack is loaded");
}
else
{
UO.Print("Backpack is unavailable");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- target зберігає конкретний serial. Нове значення lasttarget не підмінить його.
- Після паузи 500 мс об'єкт міг залишити видимість, тому перевірка виконується заново.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var target = UO.GetSerial("lasttarget");
await Delay(500);
if (Truth(UO.Exists(target)))
{
UO.Print(UO.GetName(target));
}
else
{
UO.Print("Saved target is no longer loaded");
}
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;Параметри та порядок виконання:
- GetSerial форматує число 1073746484 як 0x40001234, навіть якщо об'єкта немає.
- Тільки наступна перевірка повідомляє про наявність цього serial у поточному локальному світі.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var serial = UO.GetSerial("1073746484");
UO.Print("Serial: " + serial);
var present = UO.Exists(serial);
UO.Print("Present 1/0: " + Convert.ToString(present));
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: id (Integer/String)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.Exists. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Exists:bridge.Exists(id).
Внутрішній код реалізації, не самостійний скрипт.
public int Exists(int id) => bridge.Exists(id);Параметри: id (Integer/String)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.Exists. -
InjectionScript.Runtime.InjectionApiUO.Exists:Exists(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Внутрішній код реалізації, не самостійний скрипт.
public int Exists(string id) => Exists(GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Forget(object? name);Без повідомлення видаляє збережене ім'я Runtime Objects.
-
name— Ім'я запису, що перетворюється на string.
void - значення, що повертається немає.
- Гілка викликає state.Objects.Remove. На відміну від DeleteObject, ця форма не друкує підтвердження та не повідомляє про відсутнє ім'я. Об'єкт ігрового світу не видаляється.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.Forget");
UO.Forget("temporary");Параметри та порядок виконання:
- Видаляється лише зв'язок імені з serial.
UO.EasyObject("temporary",UO.Self());
UO.Forget("temporary");Параметри та порядок виконання:
- Відсутнє ім'я не допускається.
return RunScenario();
object? RunScenario()
{
UO.Forget("missing-example-name");
return null;
}Параметри та порядок виконання:
- Видалення відноситься до точного рядка name.
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 name = "temporary";
UO.EasyObject(name, UO.Self());
UO.Forget(name);
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: name (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.State.RuntimeDictionary.Remove:state.Objects.Remove(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(0).
Внутрішній код реалізації, не самостійний скрипт.
case "forget": if (arguments.Length > 0) state.Objects.Remove(Text(0)); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetAltName(object? objID);Читає відомий клієнту титул персонажа: наприклад, професію чи підпис після імені.
-
objID— Обов'язковий serial/ID об'єкта, не type і не cliloc. Допускається int, десятковий/hex-рядок, self, backpack, lasttarget, finditem або ім'я AddObject. 0 означає відсутність об'єкта.
string – текст поля Title у Mobile. Порожній рядок, якщо титул невідомий, об'єкт не є персонажем або ID відсутній. Це не serial, не повне ім'я та не масив властивостей. GetAltName використовує те саме поле, що GetTitle.
- Сам виклик читає локальні дані, не чекає на сервер і не відправляє одиночний клік. Для запиту імені/титулу використовуйте ClickOnObject окремо; відповідь приходить асинхронно.
- Порожній рядок допустимий і у існуючого персонажа. Перевірка Exists відповідає на інше питання – чи завантажено об'єкт.
- У цій реалізації альтернативне ім'я зіставлено полю Title персонажа.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.GetAltName("self");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- ObjID = self - персонаж поточного клієнта.
- title містить лише титул; порожнє поле не означає помилку скрипта.
var title = UO.GetAltName("self");
UO.Print(title);Параметри та порядок виконання:
- ObjID = id - serial останньої мети. GetName та титул читаються окремо.
- Ціль-предмет не має поля Title і дасть порожній рядок.
return RunScenario();
object? RunScenario()
{
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
var title = UO.GetAltName(id);
if (Truth(title != ""))
{
UO.Print(UO.GetName(id) + " " + title);
}
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- 350 - приклад паузи в мілісекундах після одиночного кліка; це не параметр getter.
- Сервер може відповісти пізніше або не передати титул. Зберігайте обробку порожнього рядка.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.ClickOnObject(id);
UO.Wait(350);
UO.Print(UO.GetAltName(id));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: objID (Any)
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetAltName:bridge.GetAltName(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Внутрішній код реалізації, не самостійний скрипт.
case "getaltname": return new InjectionValue(bridge.GetAltName(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetColor();
string UO.GetColor(object? id);Читає hue об'єкта і форматує його як шістнадцятковий рядок.
-
id— Serial/ID об'єкта, а не graphic/type. Число, hex-рядок, стандартне ім'я self/backpack/lasttarget/lastobject/lastcontainer/laststatus/finditem/lastcorpse або ім'я AddObject. Аліас має бути встановлений; існування перевіряється Exists. У зареєстрованій формі без аргументів використається self.
string виду "0x0481" - код hue/колір, чотири hex-цифри після 0x. Для відсутнього об'єкта повертається "0x0000"; цей же код буває біля незабарвленого предмета. Колір не є graphic/type або унікальним serial.
- Читаються останні дані, які вже відомі клієнту; запит на оновлення серверу не надсилається.
- Невідомий об'єкт та ще не отримана властивість можуть мати нульове/порожнє значення. Перевіряйте Exists та умови конкретної дії.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetColor("lastobject");
UO.Print("GetColor: " + Convert.ToString(result));Параметри та порядок виконання:
- id=lastobject - останній використаний об'єкт.
- Результат вже є hex-рядком і не потребує Int2Hex.
var hue = UO.GetColor("lastobject");
UO.Print(hue);Параметри та порядок виконання:
- type та hue - різні ознаки зразка; FindType приймає обидва hex-подання.
- match - знайдений serial або порожній рядок. Колір не замінює type.
return RunScenario();
object? RunScenario()
{
var sample = UO.GetSerial("lastobject");
if (Truth(UO.Exists(sample)))
{
var type = UO.GetGraphic(sample);
var hue = UO.GetColor(sample);
var match = UO.FindType(type, hue, "backpack");
UO.Print(match);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- GetColor читає self; Hex2Int перетворює hex-текст на int.
- Нульовий hue сам по собі не повідомляє, чи є персонаж у світі.
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 hue = UO.Hex2Int(UO.GetColor("self"));
if (Truth(hue == 0))
{
UO.Print("Hue is zero");
}
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.
Параметри: Немає параметрів.
Результат: string / String.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.GetColor. -
InjectionScript.Runtime.InjectionApiUO.GetColor:GetColor(new InjectionValue(bridge.Self)). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Внутрішній код реалізації, не самостійний скрипт.
public string GetColor() => GetColor(new InjectionValue(bridge.Self));Параметри: id (Any)
Результат: string / String.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.GetColor. -
InjectionScript.Runtime.NumberConversions.ToHex:NumberConversions.ToHex((short)bridge.GetColor(GetObject(id))). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetColor:bridge.GetColor(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Внутрішній код реалізації, не самостійний скрипт.
public string GetColor(InjectionValue id) => NumberConversions.ToHex((short)bridge.GetColor(GetObject(id)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetFlags(object? id);Читає бітову маску Entity.Flags з відомого локального об'єкта.
-
id— Serial об'єкта або підтримуване ім'я self/backpack/lasttarget/збереженого об'єкта; числові рядки та 0x-рядки дозволяються runtime.
int - вихідна Entity.Flags. Невідомий/відсутній Entity повертає 0; це маска, а чи не логічний результат.
- GetObject дозволяє посилання, потім bridge.World.Get читає Entity.Flags на ігровому потоці. Нульове значення може означати об'єкт без прапорів чи відсутність моделі; Exists відокремлює ці випадки. Команда не вимагає оновлення статусу.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetFlags("self");
UO.Print("GetFlags: " + Convert.ToString(result));Параметри та порядок виконання:
- Виводиться маска поточного персонажа.
var flags = UO.GetFlags("self");
UO.Print(Convert.ToString(flags));Параметри та порядок виконання:
- Перевірка Exists вирізняє відсутню модель.
return RunScenario();
object? RunScenario()
{
var id = UO.LastTarget();
if (Truth(UO.Exists(id)))
{
var flags = UO.GetFlags(id);
UO.Print(Convert.ToString(flags));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Нульовий serial зазвичай не відповідає Entity і повертає 0.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var flags = UO.GetFlags(0);
UO.Print(Convert.ToString(flags));
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: id (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.GetFlags. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetFlags:bridge.GetFlags(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Внутрішній код реалізації, не самостійний скрипт.
public int GetFlags(InjectionValue id) => bridge.GetFlags(GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetGraphic();
string UO.GetGraphic(object? id);Читає graphic предмет або body персонаж і повертає його в шістнадцятковому тексті.
-
id— Serial конкретного об'єкта або аліас, що дозволяється, наприклад "self", "backpack", "lasttarget" або ім'я, збережене AddObject. Graphic/type сюди не передається. У формі без аргументів використовується self.
string виду "0x0EED" - графічний type/body об'єкта. Це не унікальний ID/serial. Для невідомого об'єкта bridge повертає graphic 0, який форматується як 0x0000. Команда не повертає true/false.
- Команда читає локальні дані клієнта. Вона не надсилає target і не змінює об'єкт на сервері.
- Число 0 може бути допустимим значенням даних. Відсутність об'єкта перевіряйте Exists(serial), а чи не лише значенням його властивості.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetGraphic();
UO.Print("GetGraphic: " + Convert.ToString(result));Параметри та порядок виконання:
- FindType отримує type золота та повертає serial.
- GetGraphic(serial) повертає текст "0x0EED"; змінні item та graphic мають різний сенс.
var item = UO.FindType(0x0EED, -1, "backpack");
if (Truth(item != ""))
{
var graphic = UO.GetGraphic(item);
UO.Print("Graphic: " + graphic);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Форма без аргументу використовує self.
- body — код зовнішнього вигляду персонажа, а чи не його serial.
return RunScenario();
object? RunScenario()
{
var body = UO.GetGraphic();
UO.Print("Body graphic: " + body);
return null;
}Параметри та порядок виконання:
- lastobject - зразок; graphic — рядок hex, який FindType сприймає як type.
- -1 допускає будь-який колір, backpack задає область пошуку. sameType знову є serial.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var graphic = UO.GetGraphic("lastobject");
var sameType = UO.FindType(graphic, -1, "backpack");
if (Truth(sameType != ""))
{
UO.Print("Matching serial: " + sameType);
}
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.
Параметри: Немає параметрів.
Результат: string / String.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.GetGraphics. -
InjectionScript.Runtime.InjectionApiUO.GetGraphics:GetGraphics(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Внутрішній код реалізації, не самостійний скрипт.
public string GetGraphics() => GetGraphics(bridge.Self);Параметри: id (Integer/String)
Результат: string / String.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.GetGraphics. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetGraphics:bridge.GetGraphics(id).
Внутрішній код реалізації, не самостійний скрипт.
public string GetGraphics(int id) => $"0x{bridge.GetGraphics(id):X4}";Параметри: id (Integer/String)
Результат: string / String.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.GetGraphics. -
InjectionScript.Runtime.InjectionApiUO.GetGraphics:GetGraphics(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Внутрішній код реалізації, не самостійний скрипт.
public string GetGraphics(string id) => GetGraphics(GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetLayer();
string UO.GetLayer(object? id);-
id— Serial конкретного об'єкта або аліас, що дозволяється, наприклад "self", "backpack", "lasttarget" або ім'я, збережене AddObject. Graphic/type сюди не передається. У формі без аргументів використовується self.
string - ім'я шару, наприклад "Rhand", "Lhand", "Hat", "Bpack" або "Mount". Повертається перше канонічне ім'я для номера шару, тому Helmet виводиться як "Hat", а Backpack як "Bpack". Нульовий шар, невідомий предмет або self дають "Invalid". Невідомий ненульовий номер форматується як "0xNN". Це не serial, не graphic та не висота Z.
- Команда читає локальні дані клієнта. Вона не надсилає target і не змінює об'єкт на сервері.
- Число 0 може бути допустимим значенням даних. Відсутність об'єкта перевіряйте Exists(serial), а чи не лише значенням його властивості.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetLayer("backpack");
UO.Print("GetLayer: " + Convert.ToString(result));Параметри та порядок виконання:
- ObjAtLayer("Rhand") вибирає предмет на правій руці; 0 означає порожній слот.
- GetLayer отримує serial знайденого предмета та повертає рядок "Rhand".
object? item = UO.ObjAtLayer("Rhand");
if (item is string serial)
{
var layer = UO.GetLayer(serial);
UO.Print(layer);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- id="backpack" - serial рюкзак поточного персонажа.
- Перевіряється канонічне ім'я Bpack, а чи не аліас Backpack.
return RunScenario();
object? RunScenario()
{
var layer = UO.GetLayer("backpack");
if (Truth(layer == "Bpack"))
{
UO.Print("Player backpack layer");
}
else
{
UO.Print("Layer: " + layer);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- lastobject має бути актуальним аліасом предмета.
- Invalid означає нульовий шар. Саме собою це не доводить відсутність предмета: предмет у сумці теж не екіпірований.
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 layer = UO.GetLayer("lastobject");
if (Truth(layer == "Invalid"))
{
UO.Print("No equipment layer");
}
else
{
UO.Print("Equipment layer: " + layer);
}
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.
Параметри: Немає параметрів.
Результат: string / String.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.GetLayer. -
InjectionScript.Runtime.InjectionApiUO.GetLayer:GetLayer(new InjectionValue(bridge.Self)). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Внутрішній код реалізації, не самостійний скрипт.
public string GetLayer() => GetLayer(new InjectionValue(bridge.Self));Параметри: id (Any)
Результат: string / String.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.GetLayer. -
InjectionScript.Runtime.InjectionApiUO.ConvertLayer:ConvertLayer(bridge.GetLayer(GetObject(id))). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetLayer:bridge.GetLayer(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Внутрішній код реалізації, не самостійний скрипт.
public string GetLayer(InjectionValue id) => ConvertLayer(bridge.GetLayer(GetObject(id)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetLocked(object? id);Перевіряє параліч mobile.
-
id— Обов'язковий serial/ID конкретного об'єкта: int, hex-рядок або аліас self, backpack, lasttarget, lastobject, lastcontainer, laststatus, finditem, lastcorpse або ім'я AddObject. Це не graphic/type. Невстановлене ім'я дозволяється у 0; ніякий новий target команда не відкриває. Аргумент обов'язковий; для себе передайте self.
int 1 — завантажений mobile має ознаку IsParalyzed. int 0 — ознака відсутня, об'єкт не є mobile, невідомий чи видалений. Незважаючи на назву Locked, це не замок скрині, не закріпленість предмета та не будь-яка причина неможливості руху. Читається той самий прапор, що у Paralyzed.
Результат команди — числовий прапор: 1 означає виконану умову, 0 — невиконану. Після var result = команда (...) перевіряйте if (result != 0) або if (result == 0). Збережіть результат одного виклику: повторний виклик може виконати дію знову або прочитати стан, що вже змінився.
- Читається локальна модель клієнта; запитів серверу, очікування та переміщення немає.
- Результат відноситься до моменту читання. Після UO.Wait або іншої дії об'єкт та його прапори можуть змінитися.
- Незважаючи на назву Locked, це не замок скрині, не закріпленість предмета та не будь-яка причина неможливості руху. Читається той самий прапор, що у Paralyzed.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetLocked("self");
UO.Print("GetLocked: " + Convert.ToString(result));Параметри та порядок виконання:
- Аргумент self явно вибирає свого персонажа. state — лише 1/0.
- Незважаючи на назву Locked, це не замок скрині, не закріпленість предмета та не будь-яка причина неможливості руху. Читається той самий прапор, що у Paralyzed.
var state = UO.GetLocked("self");
var paralyzed = UO.Paralyzed();
UO.Print("GetLocked: " + Convert.ToString(state));
UO.Print("Paralyzed: " + Convert.ToString(paralyzed));Параметри та порядок виконання:
- IsNpc виключає предмет та невідомий об'єкт. target зберігає один serial, а не живе посилання на змінний lasttarget.
- Результат відноситься до поля IsParalyzed. Дані оновлюються лише після отримання відповідного стану клієнтом.
return RunScenario();
object? RunScenario()
{
var target = UO.GetSerial("lasttarget");
if (Truth(UO.IsNPC(target)))
{
var state = UO.GetLocked(target);
UO.Print("Selected mobile state 1/0: " + Convert.ToString(state));
}
else
{
UO.Print("No loaded mobile selected");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- UO.Wait(500) - пауза в мілісекундах. Після неї окремо перевіряється, що mobile ще існує.
- Порівнюються два знімки. Проміжні зміни можуть бути пропущені, і це не безперервна передплата серверних подій.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var target = UO.GetSerial("lasttarget");
if (Truth(UO.IsNPC(target)))
{
var before = UO.GetLocked(target);
await Delay(500);
if (Truth(UO.IsNPC(target)))
{
var after = UO.GetLocked(target);
if (Truth(before != after))
{
UO.Print("Flag changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
}
}
else
{
UO.Print("Mobile left the local world");
}
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: id (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.GetLocked. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetLocked:bridge.GetLocked(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Внутрішній код реалізації, не самостійний скрипт.
public int GetLocked(InjectionValue id) => bridge.GetLocked(GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetName();
string UO.GetName(object? id);Читає відоме клієнту ім'я предмета чи персонажа.
-
id— Serial/ID об'єкта, а не graphic/type. Число, hex-рядок, стандартне ім'я self/backpack/lasttarget/lastobject/lastcontainer/laststatus/finditem/lastcorpse або ім'я AddObject. Аліас має бути встановлений; існування перевіряється Exists. У зареєстрованій формі без аргументів використається self.
string - ім'я об'єкта. Невідомий об'єкт або ще не одержане ім'я дають порожній рядок "". Це не serial, не type і не повний список властивостей інструмента.
- Читаються останні дані, які вже відомі клієнту; запит на оновлення серверу не надсилається.
- Невідомий об'єкт та ще не отримана властивість можуть мати нульове/порожнє значення. Перевіряйте Exists та умови конкретної дії.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetName();
UO.Print("GetName: " + Convert.ToString(result));Параметри та порядок виконання:
- Без аргументу використається self.
- Результат – текст імені, його можна виводити безпосередньо.
var name = UO.GetName();
UO.Print(name);Параметри та порядок виконання:
- lasttarget - аліас об'єкта. GetName не відкриває новий target.
- Порожнє ім'я не доводить відсутність об'єкта: спочатку могла прийти інформація про serial без імені.
return RunScenario();
object? RunScenario()
{
var name = UO.GetName("lasttarget");
if (Truth(name == ""))
{
UO.Print("Name is not available");
}
else
{
UO.Print("Target: " + name);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- ToLowerInvariant переводить рядок у нижній регістр для порівняння.
- Ім'я задає сервер і може бути локалізовано. Для відбору за графічним типом використовуйте FindType/GetGraphic.
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 name = UO.GetName("lastobject");
if (Truth(Convert.ToString(name) == "gold"))
{
UO.Print("Known name matches");
}
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.
Параметри: Немає параметрів.
Результат: string / String.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.GetName. -
InjectionScript.Runtime.InjectionApiUO.GetName:GetName("self").
Внутрішній код реалізації, не самостійний скрипт.
public string GetName() => GetName("self");Параметри: id (Any/Integer/String)
Результат: string / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetName:bridge.GetName(Arg(0, bridge.Self)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0, bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Внутрішній код реалізації, не самостійний скрипт.
case "getname":
case "charname": return new InjectionValue(bridge.GetName(Arg(0, bridge.Self)));Параметри: id (Any/Integer/String)
Результат: string / String.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.GetName. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetName:bridge.GetName(id).
Внутрішній код реалізації, не самостійний скрипт.
public string GetName(int id) => bridge.GetName(id);Параметри: id (Any/Integer/String)
Результат: string / String.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.GetName. -
InjectionScript.Runtime.InjectionApiUO.GetName:GetName(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Внутрішній код реалізації, не самостійний скрипт.
public string GetName(string id) => GetName(GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetQuantity(object? id);Читає кількість одиниць у одному стеку предмета.
-
id— Serial/ID об'єкта, а не graphic/type. Число, hex-рядок, стандартне ім'я self/backpack/lasttarget/lastobject/lastcontainer/laststatus/finditem/lastcorpse або ім'я AddObject. Аліас має бути встановлений; існування перевіряється Exists. У зареєстрованій формі без аргументів використається self. Для цієї команди id обов'язковий.
int – поле Amount конкретного предмета. Стек із 1000 одиниць зазвичай повертає 1000; одиночний предмет - 1. Для невідомого serial і персонажа повертається 0. Це не число дочірніх предметів скрині і не ліміт елементів команди MassMove.
- Читаються останні дані, які вже відомі клієнту; запит на оновлення серверу не надсилається.
- Невідомий об'єкт та ще не отримана властивість можуть мати нульове/порожнє значення. Перевіряйте Exists та умови конкретної дії.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetQuantity("lastobject");
UO.Print("GetQuantity: " + Convert.ToString(result));Параметри та порядок виконання:
- FindType шукає type золота будь-якого кольору в рюкзаку.
- gold містить один serial, тому amount відноситься тільки до одного знайденого стосу.
var gold = UO.FindType(0x0EED, -1, "backpack");
if (Truth(gold != ""))
{
var amount = UO.GetQuantity(gold);
UO.Print("Units in this stack: " + Convert.ToString(amount));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- id=sample - останній використаний предмет.
- 50 означає одиниці в даному стеку. Тут не підраховуються 50 окремих items.
return RunScenario();
object? RunScenario()
{
var sample = UO.GetSerial("lastobject");
if (Truth(UO.Exists(sample)))
{
if (Truth(UO.GetQuantity(sample) >= 50))
{
UO.Print("At least 50 units in this item");
}
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- FindCount відноситься до результатів останнього пошуку; GetQuantity - до одного serial.
- Числа можуть відрізнятися. MassMove quantity обмежує цілі items, включаючи стоси.
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.FindType(0x0EED, -1, "backpack");
var stacks = UO.FindCount();
if (Truth(item != ""))
{
var units = UO.GetQuantity(item);
UO.Print("Matching items: " + Convert.ToString(stacks));
UO.Print("Units in selected item: " + Convert.ToString(units));
}
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/Integer/String)
Результат: int / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetQuantity:bridge.GetQuantity(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Внутрішній код реалізації, не самостійний скрипт.
case "getquantity": return new InjectionValue(bridge.GetQuantity(Arg(0)));Параметри: id (Any/Integer/String)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.GetQuantity. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetQuantity:bridge.GetQuantity(id).
Внутрішній код реалізації, не самостійний скрипт.
public int GetQuantity(int id) => bridge.GetQuantity(id);Параметри: id (Any/Integer/String)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.GetQuantity. -
InjectionScript.Runtime.InjectionApiUO.GetQuantity:GetQuantity(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Внутрішній код реалізації, не самостійний скрипт.
public int GetQuantity(string id) => GetQuantity(GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetSerial();
string UO.GetSerial(object? id);Дозволяє ім'я об'єкта в його serial і форматує serial як hex-рядок.
-
id— Необов'язковий рядок: стандартний аліас, ім'я AddObject або числовий текст (десятковий/hex). Без аргументу використовується serial поточного персонажа.
string виду "0x40001234" - унікальний serial/ID об'єкта, вісім hex-цифр після 0x. Не дозволене ім'я дає "0x00000000". Це не type. Числовий текст форматується, навіть якщо такий об'єкт не завантажений; GetSerial сам по собі не перевіряє Exists.
- Імена аліасів читаються з поточного стану скрипта/клієнта. Збережений рядок serial не змінюється автоматично, якщо аліас згодом вказує на інший об'єкт.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetSerial();
UO.Print("GetSerial: " + Convert.ToString(result));Параметри та порядок виконання:
- Параметрів немає, вибрано self.
- serial - hex-рядок. Значення 0x00000000 означає відсутність serial персонажа.
var serial = UO.GetSerial();
UO.Print(serial);Параметри та порядок виконання:
- id="lasttarget" дозволяється у serial останньої мети.
- Exists перевіряє наявність об'єкта, GetName читає його відоме ім'я клієнта.
return RunScenario();
object? RunScenario()
{
var serial = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(serial)))
{
UO.Print(UO.GetName(serial));
}
else
{
UO.Print("Target is not loaded");
}
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 - рядок з десятковим serial 1073746484.
- Результат 0x40001234 показує форматування. Це приклад числа; він не створює об’єкт і не гарантує його наявність.
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 serial = UO.GetSerial("1073746484");
UO.Print(serial);
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: string / String.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.GetSerial. -
InjectionScript.Runtime.NumberConversions.ToHex:NumberConversions.ToHex(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Внутрішній код реалізації, не самостійний скрипт.
public string GetSerial() => NumberConversions.ToHex(bridge.Self);Параметри: id (String)
Результат: string / String.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.GetSerial. -
InjectionScript.Runtime.NumberConversions.ToHex:NumberConversions.ToHex(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Внутрішній код реалізації, не самостійний скрипт.
public string GetSerial(string id) => NumberConversions.ToHex(GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetTooltip(object? objID);Читає готовий текст властивостей об'єкта з OPL. GetTooltip та GetCliloc є синонімами.
-
objID— Обов'язковий serial/ID об'єкта, не type і не cliloc. Допускається int, десятковий/hex-рядок, self, backpack, lasttarget, finditem або ім'я AddObject. 0 означає відсутність об'єкта.
string - ім'я та текст властивостей, розділені перекладом рядка, або лише непуста частина. Порожній рядок при ObjID=0 або якщо властивості не отримані. Це готовий текст; числові ID cliloc та параметри повертає GetTooltipRec.
- Якщо запис вже є в OPL, його текст повертається відразу. За відсутності запису надсилається запит властивостей і очікується відповідь до 200 мс з перевіркою кожні 10 мс. Пауза означає гарантоване отримання відповіді.
- Потрібний доступний об'єкт та підтримка властивостей сервером. Порожній результат не є доказом відсутності об'єкта: використовуйте окремо Exists.
- Текст може містити розмітку сервера. Чи не розбирайте числові властивості по позиції рядка; для цього використовуйте GetTooltipRec.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.GetTooltip("backpack");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- FindType: золото 0x0EED, будь-який hue=-1, прямий вміст backpack. ObjID=item - знайдений serial.
- Результат getter – текст, а не кількість золота. Для кількості використовуйте FindCount(item).
var item = UO.FindType(0x0EED, -1, "backpack");
if (Truth(item != ""))
{
UO.Print(UO.GetTooltip(item));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- ObjID=lasttarget має вказувати на потрібний об'єкт.
- Порожній рядок обробляється окремо; автоматично повторювати запит у нескінченному циклі не потрібно.
return RunScenario();
object? RunScenario()
{
var text = UO.GetTooltip("lasttarget");
if (Truth(text == ""))
{
UO.Print("No properties received");
}
else
{
UO.Print(text);
}
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 та saved — окремі змінні: унікальний ID об'єкта та знімок його тексту.
- saved не зміниться автоматично, якщо властивості на сервері пізніше зміняться.
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");
var saved = UO.GetTooltip(id);
UO.Print("Object: 0x" + Hex(id));
UO.Print(saved);
return null;
}
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: objID (Any)
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetTooltip:bridge.GetTooltip(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Внутрішній код реалізації, не самостійний скрипт.
case "getcliloc":
case "gettooltip":
return new InjectionValue(bridge.GetTooltip(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetTooltipRec(object? objID);Читає структуровані властивості: cliloc ID та параметри кожного запису OPL.
-
objID— Обов'язковий serial/ID об'єкта, не type і не cliloc. Допускається int, десятковий/hex-рядок, self, backpack, lasttarget, finditem або ім'я AddObject. 0 означає відсутність об'єкта.
Array - окремий знімок рядків властивостей. Кожен рядок дорівнює [clilocID:int, parameters:Array]. rows[i][0] - номер локалізованого повідомлення, rows[i][1] - масив параметрів. ArrayLength(rows) - кількість властивостей; ArrayLength(parameters) — кількість параметрів однієї властивості. Порожній масив при ObjID = 0 або відсутності отриманих записів. Це не список ID предметів та не готовий текст.
- Запис із кешу повертається одразу. За відсутності OPL запитуються властивості з очікуванням до 120 мс; скасування процедури перериває очікування. Відома порожня OPL не викликає очікування.
- Початкові службові табуляції пропускаються як у ClilocLoader. Порожні внутрішні характеристики зберігають позиції; число зберігається рядком для подальшої локалізації. Невідомі параметри дають порожній масив.
- Зміна поверненого масиву не змінює кеш клієнта. Для тексту використовуйте GetTooltip/GetCliloc; для перекладу одного рядка - GetClilocByID(clilocID, parameters).
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.GetTooltipRec("lasttarget");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- ObjID=lasttarget – об'єкт. rows містить властивості, i - індекс від 0. row[0] є cliloc, а не serial.
- Цикл не виконується для пустого масиву. Кожен запис обробляється один раз.
var rows = UO.GetTooltipRec("lasttarget");
var i = 0;
while (Truth(i < ArrayLength(rows)))
{
var row = rows[i];
UO.Print("Cliloc: " + Convert.ToString(row[0]));
i = i + 1;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- GetClilocByID отримує clilocID=row[0] та масив підстановок=row[1].
- Параметри зберігають порядок. Не передавайте весь ряд замість масиву параметрів.
return RunScenario();
object? RunScenario()
{
var rows = UO.GetTooltipRec("lasttarget");
var i = 0;
while (Truth(i < ArrayLength(rows)))
{
var row = rows[i];
var text = UO.GetClilocByID(row[0], row[1]);
UO.Print(text);
i = i + 1;
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- wanted - приклад ID властивості; замініть потрібним cliloc. args[0] - перший параметр, вихідний string.
- Перед Val перевіряються число параметрів та числовий формат. Параметр може бути текстом або посиланням #cliloc.
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 rows = UO.GetTooltipRec("lasttarget");
var wanted = 1060401;
var i = 0;
while (Truth(i < ArrayLength(rows)))
{
var row = rows[i];
var args = row[1];
if (Truth(row[0] == wanted) && Truth(ArrayLength(args) > 0))
{
if (Truth(IsNumeric(args[0])))
{
UO.Print("Value: " + Convert.ToString(Val(args[0])));
}
}
i = i + 1;
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool IsNumeric(object? value) => double.TryParse(Convert.ToString(value), System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out _);
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
double Val(object? value) => double.TryParse(Convert.ToString(value), System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out var number) ? number : 0;
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: objID (Any)
Результат: dynamic / Array.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetTooltipRecords:bridge.GetTooltipRecords(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Внутрішній код реалізації, не самостійний скрипт.
case "gettooltiprec":
return new InjectionValue(bridge.GetTooltipRecords(Arg(0)).Select(entry =>
new InjectionValue(new[]
{
new InjectionValue(entry.ClilocID),
new InjectionValue(entry.Parameters.Select(value => new InjectionValue(value)).ToArray())
})).ToArray());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetType(object? objID);Читає числові graphic предмет або body персонажа.
int — graphic/type предмета чи body персонажа, наприклад 0x0EED (3821) для золота. Значення 0 повертається, якщо об'єкт не знайдено. GetType не повертає serial або текст "0x..."; строкову форму дає GetGraphic.
- Команда читає локальні дані клієнта. Вона не надсилає target і не змінює об'єкт на сервері.
- Число 0 може бути допустимим значенням даних. Відсутність об'єкта перевіряйте Exists(serial), а чи не лише значенням його властивості.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.GetType("lastobject");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- ObjID="lastobject" - аліас конкретного об'єкта.
- 0x0EED є числом graphic; порівняння не шукає об'єкта з таким serial.
var graphic = UO.GetType("lastobject");
if (Truth(graphic == 0x0EED))
{
UO.Print("Gold graphic");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- ObjID="backpack" - поточний рюкзак.
- Convert.ToString форматує повернене число для виведення.
return RunScenario();
object? RunScenario()
{
var graphic = UO.GetType("backpack");
UO.Print("Backpack type: " + Convert.ToString(graphic));
return null;
}Параметри та порядок виконання:
- Порожній рядок FindType перевіряється до Exists.
- Exists повертає логічне 1/0; GetType повертає номер graphic.
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.FindType(0x0EED, -1, "backpack");
if (Truth(item != ""))
{
if (Truth(UO.Exists(item)))
{
UO.Print("Type: " + Convert.ToString(UO.GetType(item)));
}
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: objID (Any)
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetGraphics:bridge.GetGraphics(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Внутрішній код реалізації, не самостійний скрипт.
case "gettype": return new InjectionValue(bridge.GetGraphics(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Grab();
int UO.Grab(object? id);
int UO.Grab(object? amount, object? id);
int UO.Grab(object? amount, object? item, object? container);
int UO.Grab(object? amount, object? item, object? container, object? timeout);Переносить предмет у заданий/приймальний контейнер або відкриває вибір предмета.
-
id— Serial/аліас предмета. Без аргументів розпочинається інтерактивний вибір; з одним аргументом береться рівно 1 одиниця цього предмета. -
item— Serial/аліас предмета. Без аргументів розпочинається інтерактивний вибір; з одним аргументом береться рівно 1 одиниця цього предмета. -
id / item— Serial/аліас предмета. Без аргументів розпочинається інтерактивний вибір; з одним аргументом береться рівно 1 одиниця цього предмета. -
amount- У формах 2..4 - кількість першим аргументом, потім item. 0 означає весь стек за правилами MoveItem; не змінюйте порядок із формою Grab(item). -
container— Тільки форми 3/4: явне призначення. Без нього — state. ReceivingContainer, якщо > 0, інакше backpack. Рядки self/my/backpack у призначенні означають рюкзак; ground - Землю. -
timeout— Тільки форма 4, мілісекунди. Передається в CompactMoveItem з очікуванням на підтвердження; координати ground беруться з self, контейнера - 0xFFFF/0xFFFF/0.
Числовий прапор int: 1 — інтерактивний вибір прийнятий, або перенесення прийнято/підтверджено відповідно до обраної форми; 0 — невдача/немає відповідного предмета. Безаргументний результат не означає, що предмет уже перенесено.
- CompactGrab зберігає історичну форму Grab(item)=1 одиниця. Форми без timeout використовують CompactMoveItem без примусового очікування підтвердження; форма з timeout задає UO.Wait=true.
- Serial 0 відразу дає 0. Недозволені/невідповідні об'єкти перевіряються далі шляхом MoveItem. Серверні правила, stack amount та поточний контейнер впливають на результат. Три/чотири аргументи не є координатами drop.
- amount<=0 запитує весь стек. У формі з timeout негативна пауза стає 0, але виконується мінімум одна локальна перевірка; між перевірками UO.Wait(10). Часткове перенесення підтверджується зменшенням вихідної кількості, повне призначенням і для ground X/Y/Z. Це спостереження стану світу, не свіжа відповідь протоколу з ID запиту; вже підходящий стан може дати 1 відразу. Timeout дає 0, хоча запит вже міг бути надісланий.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.Grab();
UO.Print("Grab: " + Convert.ToString(result));Параметри та порядок виконання:
- Переносить предмет у заданий/приймальний контейнер або відкриває вибір предмета.
var accepted = UO.Grab();
UO.Print(accepted);Параметри та порядок виконання:
- CompactGrab зберігає історичну форму Grab(item)=1 одиниця. Форми без timeout використовують CompactMoveItem без примусового очікування підтвердження; форма з timeout задає UO.Wait=true.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Exists("lastobject")))
{
UO.Print(UO.Grab("lastobject"));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Serial 0 відразу дає 0. Недозволені/невідповідні об'єкти перевіряються далі шляхом MoveItem. Серверні правила, stack amount та поточний контейнер впливають на результат. Три/чотири аргументи не є координатами drop.
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("lastobject")))
{
UO.Print(UO.Grab(0, "lastobject", "backpack", 2000));
}
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.
Параметри: Немає параметрів.
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.Grab. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.RequestInteractiveGrabTarget:bridge.RequestInteractiveGrabTarget().
Внутрішній код реалізації, не самостійний скрипт.
public int Grab() => bridge.RequestInteractiveGrabTarget();Параметри: id (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.Grab. -
InjectionScript.Runtime.InjectionApiUO.CompactGrab:CompactGrab(new[] { id }).
Внутрішній код реалізації, не самостійний скрипт.
public int Grab(InjectionValue id) => CompactGrab(new[] { id });Параметри: amount (Any/Integer/String), id (Any/Integer/String)
Результат: int / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.CompactGrab:CompactGrab(arguments).
Внутрішній код реалізації, не самостійний скрипт.
case "grab": return new InjectionValue(CompactGrab(arguments));Параметри: amount (Any/Integer/String), id (Any/Integer/String)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.Grab. -
InjectionScript.Runtime.InjectionApiUO.CompactGrab:CompactGrab(new[] { new InjectionValue(amount), new InjectionValue(id) }).
Внутрішній код реалізації, не самостійний скрипт.
public int Grab(int amount, int id) => CompactGrab(new[] { new InjectionValue(amount), new InjectionValue(id) });Параметри: amount (Any/Integer/String), id (Any/Integer/String)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.Grab. -
InjectionScript.Runtime.InjectionApiUO.CompactGrab:CompactGrab(new[] { new InjectionValue(amount), new InjectionValue(id) }).
Внутрішній код реалізації, не самостійний скрипт.
public int Grab(int amount, string id) => CompactGrab(new[] { new InjectionValue(amount), new InjectionValue(id) });Параметри: amount (Any/Integer/String), id (Any/Integer/String)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.Grab. -
InjectionScript.Runtime.InjectionApiUO.CompactGrab:CompactGrab(new[] { new InjectionValue(amount), new InjectionValue(id) }).
Внутрішній код реалізації, не самостійний скрипт.
public int Grab(string amount, string id) => CompactGrab(new[] { new InjectionValue(amount), new InjectionValue(id) });Параметри: amount (Any), item (Any), container (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.Register [Grab]. -
InjectionScript.Runtime.InjectionApiUO.CompactGrab:CompactGrab(values).
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
values => new InjectionValue(CompactGrab(values))Параметри: amount (Any), item (Any), container (Any), timeout (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.Register [Grab]. -
InjectionScript.Runtime.InjectionApiUO.CompactGrab:CompactGrab(values).
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
values => new InjectionValue(CompactGrab(values))Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsMovable(object? objID);Перевіряє локальні ознаки переносимості відомого предмета за правилами підбору Classic UO.
-
objID— Обов'язковий serial/ID конкретного об'єкта: int, hex-рядок або аліас self, backpack, lasttarget, lastobject, lastcontainer, laststatus, finditem, lastcorpse або ім'я AddObject. Це не graphic/type. Невстановлене ім'я дозволяється у 0; ніякий новий target команда не відкриває.
int 1 — предмет не видалений, не multi та не заблокований локальним правилом ваги/Movable для предметів на землі. int 0 - mobile, multi, невідомий/віддалений предмет або заблокований предмет на землі. 1 не гарантує успішний Drag/MoveItem: дальність, доступ, стан курсору та остаточне рішення сервера перевіряються окремо.
Результат команди — числовий прапор: 1 означає виконану умову, 0 — невиконану. Після var result = команда (...) перевіряйте if (result != 0) або if (result == 0). Збережіть результат одного виклику: повторний виклик може виконати дію знову або прочитати стан, що вже змінився.
- Читається локальна модель клієнта; запитів серверу, очікування та переміщення немає.
- Результат відноситься до моменту читання. Після UO.Wait або іншої дії об'єкт та його прапори можуть змінитися.
- На землі предмет вважається заблокованим, коли вага його запису tiledata більша за 90 і відсутній серверний прапор Можувальний. Вага 90 і менше не вимагає цього прапора.
- Всередині контейнера правило блокування предмета землі не застосовується. Вага tiledata тут службова ознака, а не GetQuantity і не поточна вага персонажа.
- У документації інших клієнтів опис ваги може бути різним. Тут описано фактичне правило GameActions.PickUp цього клієнта.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.IsMovable(UO.GetSerial("lastobject"));
UO.Print("IsMovable: " + Convert.ToString(result));Параметри та порядок виконання:
- item - serial останнього використаного предмета. Число movable не є його кількістю.
- Приклад нічого не піднімає та не відправляє серверу.
var item = UO.GetSerial("lastobject");
var movable = UO.IsMovable(item);
UO.Print("Locally movable 1/0: " + Convert.ToString(movable));Параметри та порядок виконання:
- Для предмета землі GetDistance показує відому клієнту дальність.
- Навіть у разі movable=1 предмет може бути надто далеко. Позитивний результат не є роздільною здатністю сервера на перенесення.
return RunScenario();
object? RunScenario()
{
var item = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(item)))
{
var movable = UO.IsMovable(item);
var distance = UO.GetDistance(item);
UO.Print("Movable: " + Convert.ToString(movable));
UO.Print("Distance: " + Convert.ToString(distance));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- FindType вибирає один serial золота будь-якого кольору в рюкзаку.
- IsMovable перевіряє предмет повністю. GetQuantity окремо читає число одиниць; результат IsMovable не замінює цей лічильник.
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.FindType(0x0EED, -1, "backpack");
if (Truth(item != ""))
{
if (Truth(UO.IsMovable(item)))
{
var units = UO.GetQuantity(item);
UO.Print("Selected stack units: " + Convert.ToString(units));
}
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: objID (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsMovable:bridge.IsMovable(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Внутрішній код реалізації, не самостійний скрипт.
case "ismovable": return new InjectionValue(bridge.IsMovable(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsObjectExists(object? objID);Перевіряє наявність невидаленого об’єкта в локальному світі клієнта.
-
objID— Обов'язковий serial/ID конкретного об'єкта: int, hex-рядок або аліас self, backpack, lasttarget, lastobject, lastcontainer, laststatus, finditem, lastcorpse або ім'я AddObject. Це не graphic/type. Невстановлене ім'я дозволяється у 0; ніякий новий target команда не відкриває.
int 1 - serial зараз дозволяється в завантажений предмет або mobile. int 0 - об'єкт невідомий клієнту, видалений або аліас не встановлений. Це не відповідь сервера про існування об'єкта: предмет поза видимою областю може існувати на сервері і давати 0 тут.
Результат команди — числовий прапор: 1 означає виконану умову, 0 — невиконану. Після var result = команда (...) перевіряйте if (result != 0) або if (result == 0). Збережіть результат одного виклику: повторний виклик може виконати дію знову або прочитати стан, що вже змінився.
- Читається локальна модель клієнта; запитів серверу, очікування та переміщення немає.
- Результат відноситься до моменту читання. Після UO.Wait або іншої дії об'єкт та його прапори можуть змінитися.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.IsObjectExists("backpack");
UO.Print("IsObjectExists: " + Convert.ToString(result));Параметри та порядок виконання:
- Аргумент backpack - аліас serial рюкзак власного персонажа.
- 1 не означає, що вміст рюкзака вже повністю отриманий або він відкритий.
var present = UO.IsObjectExists("backpack");
if (Truth(present))
{
UO.Print("Backpack is loaded");
}
else
{
UO.Print("Backpack is unavailable");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- target зберігає конкретний serial. Нове значення lasttarget не підмінить його.
- Після паузи 500 мс об'єкт міг залишити видимість, тому перевірка виконується заново.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var target = UO.GetSerial("lasttarget");
await Delay(500);
if (Truth(UO.IsObjectExists(target)))
{
UO.Print(UO.GetName(target));
}
else
{
UO.Print("Saved target is no longer loaded");
}
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;Параметри та порядок виконання:
- GetSerial форматує число 1073746484 як 0x40001234, навіть якщо об'єкта немає.
- Тільки наступна перевірка повідомляє про наявність цього serial у поточному локальному світі.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var serial = UO.GetSerial("1073746484");
UO.Print("Serial: " + serial);
var present = UO.IsObjectExists(serial);
UO.Print("Present 1/0: " + Convert.ToString(present));
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: objID (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Exists:bridge.Exists(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Внутрішній код реалізації, не самостійний скрипт.
case "isobjectexists": return new InjectionValue(bridge.Exists(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LastObject();Читає serial останнього використаного об'єкта.
Параметрів немає.
int - збережений serial; 0 означає, що serial не встановлено. Це не bool та не graphic/type; ненульовий ID може вже бути відсутнім у світі.
- Джерело поля: _world. LastObject. Команда не вибирає, не використовує та не атакує об'єкт.
- Читає поточний локальний стан. Пакету, target та автоматичного оновлення немає; окремі читання можуть бачити різні стани.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.LastObject();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- Читає serial останнього використаного об'єкта.
var id = UO.LastObject();
UO.Print(Hex(id));
string Hex(object? value) => Convert.ToInt64(value).ToString("X");Параметри та порядок виконання:
- Джерело поля: _world. LastObject. Команда не вибирає, не використовує та не атакує об'єкт.
return RunScenario();
object? RunScenario()
{
var id = UO.LastObject();
if (Truth(id != 0) && Truth(UO.Exists(id)))
{
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;Параметри та порядок виконання:
- Читає поточний локальний стан. Пакету, target та автоматичного оновлення немає; окремі читання можуть бачити різні стани.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var before = UO.LastObject();
UO.Wait(500);
var after = UO.LastObject();
UO.Print(before = after);
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetLastObject:bridge.GetLastObject().
Внутрішній код реалізації, не самостійний скрипт.
case "lastobject": return new InjectionValue(bridge.GetLastObject());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.MakeFakeItem(object? @type);
void UO.MakeFakeItem(object? @type, object? serial);
void UO.MakeFakeItem(object? @type, object? serial, object? count);
void UO.MakeFakeItem(object? @type, object? serial, object? count, object? color);
void UO.MakeFakeItem(object? @type, object? serial, object? count, object? color, object? x);
void UO.MakeFakeItem(object? @type, object? serial, object? count, object? color, object? x, object? y);Створює чи змінює лише локальний предмет клієнта.
-
type— Обов'язковий graphic 1..65535; не іменований type через ResolveType: ця legacy-гілка використовує Arg/int. -
serial- Необов'язковий serial предмета. 0 (за замовчуванням) виділяє вільний ID з локального діапазону біля 0x7FFEFFFF; явний item serial може збігтися із вже завантаженим предметом та змінити його локальну модель. -
count— Необов'язкова кількість за промовчанням 1. Непозитивним стає 1; максимум 65535. -
color— Необов'язковий hue, за умовчанням 0; обмежується до 0..65535. -
x— Необов'язкові світові координати за промовчанням self; негативні використовують self, потім обмежуються 0..65535. Z завжди поточний Player.Z. -
y— Необов'язкові світові координати за промовчанням self; негативні використовують self, потім обмежуються 0..65535. Z завжди поточний Player.Z.
void - значення немає. Викликайте окремим рядком; завершення не підтверджує дію сервера.
- CreateFakeItem вимагає Player та допустимий graphic/item serial. GetOrCreateItem повертає локальну модель; якщо вона у контейнері, видаляє зв'язок. Призначає ground container 0xFFFFFFFF, graphic/amount/hue/X/Y/Z, Layer.Invalid, AllowedToDraw=true, IsDamageable=false та IsMulti=false.
- Legacy-команда відкидає повернутий serial. При 0 виводить повідомлення про помилку. Сервер предмет не створює: дія не дає реального предмета, видобутку чи права перенесення. Для прикладу, залишайте serial=0.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.MakeFakeItem");
UO.MakeFakeItem(0x0E21);Параметри та порядок виконання:
- Створює чи змінює лише локальний предмет клієнта.
UO.MakeFakeItem(0x0E21);Параметри та порядок виконання:
- CreateFakeItem вимагає Player та допустимий graphic/item serial. GetOrCreateItem повертає локальну модель; якщо вона у контейнері, видаляє зв'язок. Призначає ground container 0xFFFFFFFF, graphic/amount/hue/X/Y/Z, Layer.Invalid, AllowedToDraw=true, IsDamageable=false та IsMulti=false.
return RunScenario();
object? RunScenario()
{
UO.MakeFakeItem(0x0E21, 0, 5, 0);
return null;
}Параметри та порядок виконання:
- Legacy-команда відкидає повернутий serial. При 0 виводить повідомлення про помилку. Сервер предмет не створює: дія не дає реального предмета, видобутку чи права перенесення. Для прикладу, залишайте serial=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()
{
UO.MakeFakeItem(0x0E21, 0, 1, 0, UO.GetX(), UO.GetY());
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: type (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetX:bridge.GetX(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetY:bridge.GetY(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CreateFakeItem:bridge.CreateFakeItem(graphic, serial, amount, hue, x, y). -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage("MakeFakeItem: invalid graphic/serial or no active player."). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Внутрішній код реалізації, не самостійний скрипт.
case "makefakeitem":
{
int graphic = Arg(0);
int serial = Arg(1, 0);
int amount = Arg(2, 1);
int hue = Arg(3, 0);
int x = Arg(4, bridge.GetX(bridge.Self));
int y = Arg(5, bridge.GetY(bridge.Self));
int createdSerial = bridge.CreateFakeItem(graphic, serial, amount, hue, x, y);
if (createdSerial == 0)
SystemMessage("MakeFakeItem: invalid graphic/serial or no active player.");
break;
}Параметри: type (Any), serial (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetX:bridge.GetX(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetY:bridge.GetY(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CreateFakeItem:bridge.CreateFakeItem(graphic, serial, amount, hue, x, y). -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage("MakeFakeItem: invalid graphic/serial or no active player."). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Внутрішній код реалізації, не самостійний скрипт.
case "makefakeitem":
{
int graphic = Arg(0);
int serial = Arg(1, 0);
int amount = Arg(2, 1);
int hue = Arg(3, 0);
int x = Arg(4, bridge.GetX(bridge.Self));
int y = Arg(5, bridge.GetY(bridge.Self));
int createdSerial = bridge.CreateFakeItem(graphic, serial, amount, hue, x, y);
if (createdSerial == 0)
SystemMessage("MakeFakeItem: invalid graphic/serial or no active player.");
break;
}Параметри: type (Any), serial (Any), count (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetX:bridge.GetX(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetY:bridge.GetY(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CreateFakeItem:bridge.CreateFakeItem(graphic, serial, amount, hue, x, y). -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage("MakeFakeItem: invalid graphic/serial or no active player."). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Внутрішній код реалізації, не самостійний скрипт.
case "makefakeitem":
{
int graphic = Arg(0);
int serial = Arg(1, 0);
int amount = Arg(2, 1);
int hue = Arg(3, 0);
int x = Arg(4, bridge.GetX(bridge.Self));
int y = Arg(5, bridge.GetY(bridge.Self));
int createdSerial = bridge.CreateFakeItem(graphic, serial, amount, hue, x, y);
if (createdSerial == 0)
SystemMessage("MakeFakeItem: invalid graphic/serial or no active player.");
break;
}Параметри: type (Any), serial (Any), count (Any), color (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetX:bridge.GetX(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetY:bridge.GetY(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CreateFakeItem:bridge.CreateFakeItem(graphic, serial, amount, hue, x, y). -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage("MakeFakeItem: invalid graphic/serial or no active player."). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Внутрішній код реалізації, не самостійний скрипт.
case "makefakeitem":
{
int graphic = Arg(0);
int serial = Arg(1, 0);
int amount = Arg(2, 1);
int hue = Arg(3, 0);
int x = Arg(4, bridge.GetX(bridge.Self));
int y = Arg(5, bridge.GetY(bridge.Self));
int createdSerial = bridge.CreateFakeItem(graphic, serial, amount, hue, x, y);
if (createdSerial == 0)
SystemMessage("MakeFakeItem: invalid graphic/serial or no active player.");
break;
}Параметри: type (Any), serial (Any), count (Any), color (Any), x (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetX:bridge.GetX(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetY:bridge.GetY(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CreateFakeItem:bridge.CreateFakeItem(graphic, serial, amount, hue, x, y). -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage("MakeFakeItem: invalid graphic/serial or no active player."). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Внутрішній код реалізації, не самостійний скрипт.
case "makefakeitem":
{
int graphic = Arg(0);
int serial = Arg(1, 0);
int amount = Arg(2, 1);
int hue = Arg(3, 0);
int x = Arg(4, bridge.GetX(bridge.Self));
int y = Arg(5, bridge.GetY(bridge.Self));
int createdSerial = bridge.CreateFakeItem(graphic, serial, amount, hue, x, y);
if (createdSerial == 0)
SystemMessage("MakeFakeItem: invalid graphic/serial or no active player.");
break;
}Параметри: type (Any), serial (Any), count (Any), color (Any), x (Any), y (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetX:bridge.GetX(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetY:bridge.GetY(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CreateFakeItem:bridge.CreateFakeItem(graphic, serial, amount, hue, x, y). -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage("MakeFakeItem: invalid graphic/serial or no active player."). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Внутрішній код реалізації, не самостійний скрипт.
case "makefakeitem":
{
int graphic = Arg(0);
int serial = Arg(1, 0);
int amount = Arg(2, 1);
int hue = Arg(3, 0);
int x = Arg(4, bridge.GetX(bridge.Self));
int y = Arg(5, bridge.GetY(bridge.Self));
int createdSerial = bridge.CreateFakeItem(graphic, serial, amount, hue, x, y);
if (createdSerial == 0)
SystemMessage("MakeFakeItem: invalid graphic/serial or no active player.");
break;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.MassMove();
void UO.MassMove(object? delay);
void UO.MassMove(object? delay, object? quantity);
void UO.MassMove(object? delay, object? quantity, object? @type);
void UO.MassMove(object? delay, object? quantity, object? @type, object? destination);
void UO.MassMove(object? delay, object? quantity, object? @type, object? destination, object? x, object? y, object? z);Включає одноразове масове перенесення предметів обраного типу. Після Activate MassMove перетягніть один потрібний предмет мишею: з нього визначається вихідний контейнер. Інші предмети цього з того самого джерела слідують автоматично. Третій параметр - TYPE/Graphic, не ID предмета. Усі форми включають очікування першого ручного перенесення; явне призначення ставить, куди він піде.
-
delay— Перший параметр — затримка між запитами перенесення в мілісекундах, ціле число від 0 до 2147483647. 350 означає 0,35 секунди. При 0 відправляється не більше одного чергового перенесення за ігровий кадр. Затримка не додається до GrabDelay. Негативне значення вимикає режим та очищає чергу; для вимкнення переважна ясна запис UO.MassMove(). -
quantity— Другий параметр — Загальна межа окремих предметів-об'єктів (items), включаючи перше ручне перенесення. Один стек/стопка вважається одним item незалежно від кількості усередині. 50 означає до ?50? цілих стосів або ?50? одиночних предметів. Стек за цим лімітом не поділяється. 0 або відсутність параметра – всі відповідні items. Негативні значення неприпустимі. -
type— Третій параметр — код типу предмета (Graphic/Type), ціле 0..65535, наприклад 0x0EED або рядок 0x0EED для золота. Це НЕ serial/ID і НЕ ім'я AddObject. 0 або відсутність визначає тип першого ручного переносу. При явному типі перетягування іншого типу не активує чергу; режим продовжує чекати потрібний предмет. -
destination— Четвертий параметр — призначення. Serial скрині (число/hex-рядок) або збережене ім'я AddObject вибирає контейнер; X/Y — місце всередині вікна. backpack, self та my вибирають рюкзак поточного персонажа, також з координатами всередині рюкзака. ground або 0 вибирає землю: X/Y/Z — абсолютна позиція на карті, всі три параметри обов'язкові. lastcontainer - останній відкритий контейнер; lastobject, lasttarget, lastcorpse, finditem, laststatus допустимі, якщо вказують на доступний контейнер. receiving та catchbag вибирають встановлений SetCatchBag контейнер, а якщо він не встановлений – рюкзак. self/my тут означають саме рюкзак, хоча GetX(self) читає позицію персонажа. Імена порівнюються без урахування регістру; невідоме чи ще встановлене ім'я дає помилку, а чи не скидає предмет землі. Без destination місце запам'ятовується з першого ручного скидання: можна покласти зразок як у контейнер, так і на землю. Для землі запам'ятовуються світові X/Y/Z першого скидання. -
x- П'ятий параметр. Для контейнера – координата всередині контейнера; -1 або 65535 означає автоматичне розміщення. Для землі - абсолютна координата карти, 0 до 65535. При формі без X/Y/Z у явному контейнері використовується -1. -
y— Шостий параметр. Для контейнера - координата всередині контейнера, - 1 - / 65535 - для автоматичного розміщення; для землі - абсолютна координата карти 0..65535. При формі без координат у явному контейнері використовується -1. -
z— Сьомий параметр — висота призначення, ціле -128..127. У контейнері зазвичай 0; на землі вкажіть реальну висоту. У короткій формі висота та X/Y беруться з ручного перенесення.
void: немає значення. Activate MassMove означає увімкнення очікування ручного перенесення. Підсумковий рядок повідомляє кількість окремих items, для яких надіслано запити, включаючи перший. Стек вважається одним item; результат не підтверджує ухвалення кожного запиту сервером.
- Зареєстровані форми з "0", "1", "2", "3", "4" і "7" аргументами. X/Y/Z задаються лише разом. Форми з 5, 6 або 8 аргументами не підтримуються. Порядок: delay, quantity, type, destination, x, y, z.
- Активуйте режим ДО захоплення мишею. Перше ручне перенесення вважається одним item: стек з 1000 переноситься цілком і витрачає лише одне місце з ліміту 50. Увімкнений режим бере повні стеки без діалогу поділу. Якщо частина стека була взята до включення, таке перенесення відхиляється: покладіть частину назад і почніть заново.
- Одна активація відноситься до одного ручного перенесення. Після вибору зразка режим вибору вимикається; черга, що залишилася, обробляється автоматично. Звичайний виклик MoveItem з іншого скрипта не вважається ручним вибором зразка.
- Порівнюється тип Graphic. Колір цієї команди не фільтрується. Обробляється лише прямий вміст вихідного контейнера; вкладені сумки не розкриваються. Нові предмети, що з'явилися після створення черги, до неї не додаються. Якщо зразок лежав землі, враховуються завантажені предмети тієї ж типу у радіусі захоплення.
- Кількість – верхня межа запитів. Команда не повторює відкинуті сервером переноси автоматично. У разі відмови сервера, недоступному призначенні, смерті персонажа або неможливості взяти черговий предмет операція припиняється. При зайнятому курсорі черга чекає на звільнення до 5 секунд.
- UO.MassMove() вимикає режим і скасовує чергу, що залишилася. UO.TerminateAll() і вихід з персонажа також скасовують її. Вже надісланий запит скасуванням не відкочується. Черга виконується клієнтом після повернення команди; Наступний рядок скрипта не означає, що сервер вже завершив перенесення.
- Для повного перенесення вмісту різних типів використовуйте EmptyContainer. Для перенесення одного конкретного предмета - MoveItem. Вісім аргументів source, type, color, destination, x, y, z, delay відносяться до MoveItems, а не до MassMove.
- Повторний коректний виклик цієї команди, поки режим ще чекає першого перенесення мишею, вимикає очікування: Deactivate MassMove/MassPriceMove з'являється прямо у ігровому вікні. Наступний дзвінок знову вмикає режим. Після першого перенесення для зупинки черги, що залишилася, використовуйте форму без аргументів. Вже надіслані запити не відкочуються.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.MassMove");
UO.MassMove(350, 0);Параметри та порядок виконання:
- delay=350: наступні запити розділені мінімум 350 мс. quantity=0: верхнього ліміту користувача немає.
- type, destination та X/Y/Z не передані. Після Activate MassMove перетягніть зразок із сумки в скриню: тип та джерело беруться з нього, призначення – з місця скидання.
- Якщо зразок – золото, переміщуються завантажені стеки золота того самого вихідного контейнера. Предмети інших типів залишаються. Print лише пояснює наступну ручну дію.
UO.MassMove(350, 0);
UO.Print("Drag one sample item to the destination container");Параметри та порядок виконання:
- delay ставить 350 мс. total передається до другого параметра quantity і обмежує ВСЮ операцію 50 окремими items.
- Якщо в джерелі лежать 100 стосів одного типу, будуть перенесені 50 стосів повністю: перша ручна і ще 49. У кожному стосі може бути різна кількість; воно не впливає на лічильник. Якщо це одиночні предмети, переносяться 50 одиночних предметів.
- Інші параметри відсутні: перше захоплення та призначення вибираються мишею після виклику.
return RunScenario();
object? RunScenario()
{
var delay = 350;
var total = 50;
UO.MassMove(delay, total);
return null;
}Параметри та порядок виконання:
- goldType — TYPE золота, не ID окремої стопки. AddObject зберігає serial скрині в chest; замініть 0x40005678 своїм ID.
- delay=350 мс, quantity=50 окремих items, type=0x0EED, destination=chest. У ліміт входять перший стос і ще не більше 49; все цілком.
- x=-1 та y=-1 задають автоматичне розміщення в скрині, z=0. Це все сім параметрів.
- Черга почнеться після ручного перетягування золота. Його вихідна сумка стане джерелом. Явний chest замінює місце скидання миші; предмет іншого типу черга не запускає.
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 goldType = "0x0EED";
UO.AddObject("chest", "0x40005678");
UO.MassMove(350, 50, goldType, "chest", -1, -1, 0);
UO.Print("Now drag one gold stack from the source bag");
return null;
}
}Параметри та порядок виконання:
- delay=350 мс, quantity=0 — всі відповідні items. type=0 бере тип із майбутнього ручного перенесення.
- destination=0 означає землю, тому вказано повну трійку x,y,z. GetX/GetY/GetZ повертають поточну позицію персонажа.
- Після виклику візьміть та скиньте мишею зразок. Команда відправить його та інші відповідні елементи на зазначені координати, навіть якщо миша була над контейнером. Сервер перевіряє доступність землі.
var x = UO.GetX();
var y = UO.GetY();
var z = UO.GetZ();
UO.MassMove(350, 0, 0, 0, x, y, z);Параметри та порядок виконання:
- delay = 500 - півсекунди; quantity = 10 - десять окремих предметів / стеків за всю операцію.
- type = 0x0F7A - графічний тип предмета. Укажіть свій тип; серійний номер виду 0x40001234 тут неприпустимий.
- destination=backpack - рюкзак персонажа. Координати не передані, тому всередині нього використовуються x=-1, y=-1, z=0.
- Першим ручним перенесенням відповідного предмета вибирається джерело. Якщо джерело вже рюкзак, виберіть іншу вихідну сумку для корисного перенесення.
return RunScenario();
object? RunScenario()
{
UO.MassMove(500, 10, "0x0F7A", "backpack");
UO.Print("Drag one matching item from the source chest");
return null;
}Параметри та порядок виконання:
- Спочатку вручну покладіть предмет у потрібне місце скрині. Перший AddObject вибирає саму скриню і зберігає її ID в chest. Другий вибирає предмет усередині нього та зберігає ID у position_sample.
- GetX/GetY для предмета всередині контейнера повертають його координати всередині цього контейнера. Вони не залежать від того, де на екрані розташоване вікно скрині.
- delay=350 мс, quantity=50 цілих items, type=0 визначається майбутнім ручним переносом з джерела, destination=chest.
- x і y задають обране місце всередині скрині, останній z = 0. Предмет position_sample служить лише читання координат; джерело і тип, що переноситься, визначаються наступним ручним переносом.
- Для рюкзака замініть chest на backpack або self. Для землі використовуйте ground та координати карти, наприклад UO.GetX(), UO.GetY(), UO.GetZ() без аргументів для поточної позиції персонажа.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.Print("Select the destination chest");
UO.AddObject("chest");
UO.Print("Select an item already at the desired position inside that chest");
UO.AddObject("position_sample");
var x = UO.GetX("position_sample");
var y = UO.GetY("position_sample");
UO.MassMove(350, 50, 0, "chest", x, y, 0);
UO.Print("Drag one source item to start the transfer");
return null;
}
}Параметри та порядок виконання:
- delay=350 — не менше 350 мс між наступними запитами. quantity=50 — до 50 окремих items/цілих стосів, включаючи зразок; це не 50 одиниць з одного стека.
- Після Activate MassMove візьміть предмет у відкритій скрині та покладіть мишею на землю. Його тип і вихідна скриня визначаються за зразком; світові X/Y/Z призначення запам'ятовуються за місцем цього скидання.
- Інші завантажені предмети того ж типу з цієї скрині прямують на ту саму точку землі. Вміст вкладених сумок та інші типи не торкаються. Для всіх відповідних items замість 50 вкажіть 0.
- У MassMove немає значення, що повертається. Процедура завершується після включення режиму, черга продовжує працювати у клієнті. Підсумкове повідомлення вважає надіслані запити, а не підтвердження сервера. Для скасування черги, що залишилася, викличте UO.MassMove().
UO.MassMove(350, 50);
UO.Print("Drag one item from the chest onto the ground");C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MassMove:bridge.MassMove(-1, 0, 0, -1, -1, -1, 0). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[2]). -
InjectionScript.Runtime.InjectionApiUO.ResolveTransferDestination:ResolveTransferDestination(arguments[3], true).
Внутрішній код реалізації, не самостійний скрипт.
case "massmove":
if (arguments.Length == 0) bridge.MassMove(-1, 0, 0, -1, -1, -1, 0);
else bridge.MassMove(NumberConversions.ToInt(arguments[0]),
arguments.Length > 1 ? NumberConversions.ToInt(arguments[1]) : 0,
arguments.Length > 2 ? ResolveType(arguments[2]) : 0,
arguments.Length > 3 ? ResolveTransferDestination(arguments[3], true) : -1,
arguments.Length > 4 ? NumberConversions.ToInt(arguments[4]) : -1,
arguments.Length > 5 ? NumberConversions.ToInt(arguments[5]) : -1,
arguments.Length > 6 ? NumberConversions.ToInt(arguments[6]) : 0);
break;Параметри: delay (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MassMove:bridge.MassMove(-1, 0, 0, -1, -1, -1, 0). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[2]). -
InjectionScript.Runtime.InjectionApiUO.ResolveTransferDestination:ResolveTransferDestination(arguments[3], true).
Внутрішній код реалізації, не самостійний скрипт.
case "massmove":
if (arguments.Length == 0) bridge.MassMove(-1, 0, 0, -1, -1, -1, 0);
else bridge.MassMove(NumberConversions.ToInt(arguments[0]),
arguments.Length > 1 ? NumberConversions.ToInt(arguments[1]) : 0,
arguments.Length > 2 ? ResolveType(arguments[2]) : 0,
arguments.Length > 3 ? ResolveTransferDestination(arguments[3], true) : -1,
arguments.Length > 4 ? NumberConversions.ToInt(arguments[4]) : -1,
arguments.Length > 5 ? NumberConversions.ToInt(arguments[5]) : -1,
arguments.Length > 6 ? NumberConversions.ToInt(arguments[6]) : 0);
break;Параметри: delay (Any), quantity (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MassMove:bridge.MassMove(-1, 0, 0, -1, -1, -1, 0). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[2]). -
InjectionScript.Runtime.InjectionApiUO.ResolveTransferDestination:ResolveTransferDestination(arguments[3], true).
Внутрішній код реалізації, не самостійний скрипт.
case "massmove":
if (arguments.Length == 0) bridge.MassMove(-1, 0, 0, -1, -1, -1, 0);
else bridge.MassMove(NumberConversions.ToInt(arguments[0]),
arguments.Length > 1 ? NumberConversions.ToInt(arguments[1]) : 0,
arguments.Length > 2 ? ResolveType(arguments[2]) : 0,
arguments.Length > 3 ? ResolveTransferDestination(arguments[3], true) : -1,
arguments.Length > 4 ? NumberConversions.ToInt(arguments[4]) : -1,
arguments.Length > 5 ? NumberConversions.ToInt(arguments[5]) : -1,
arguments.Length > 6 ? NumberConversions.ToInt(arguments[6]) : 0);
break;Параметри: delay (Any), quantity (Any), type (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MassMove:bridge.MassMove(-1, 0, 0, -1, -1, -1, 0). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[2]). -
InjectionScript.Runtime.InjectionApiUO.ResolveTransferDestination:ResolveTransferDestination(arguments[3], true).
Внутрішній код реалізації, не самостійний скрипт.
case "massmove":
if (arguments.Length == 0) bridge.MassMove(-1, 0, 0, -1, -1, -1, 0);
else bridge.MassMove(NumberConversions.ToInt(arguments[0]),
arguments.Length > 1 ? NumberConversions.ToInt(arguments[1]) : 0,
arguments.Length > 2 ? ResolveType(arguments[2]) : 0,
arguments.Length > 3 ? ResolveTransferDestination(arguments[3], true) : -1,
arguments.Length > 4 ? NumberConversions.ToInt(arguments[4]) : -1,
arguments.Length > 5 ? NumberConversions.ToInt(arguments[5]) : -1,
arguments.Length > 6 ? NumberConversions.ToInt(arguments[6]) : 0);
break;Параметри: delay (Any), quantity (Any), type (Any), destination (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MassMove:bridge.MassMove(-1, 0, 0, -1, -1, -1, 0). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[2]). -
InjectionScript.Runtime.InjectionApiUO.ResolveTransferDestination:ResolveTransferDestination(arguments[3], true).
Внутрішній код реалізації, не самостійний скрипт.
case "massmove":
if (arguments.Length == 0) bridge.MassMove(-1, 0, 0, -1, -1, -1, 0);
else bridge.MassMove(NumberConversions.ToInt(arguments[0]),
arguments.Length > 1 ? NumberConversions.ToInt(arguments[1]) : 0,
arguments.Length > 2 ? ResolveType(arguments[2]) : 0,
arguments.Length > 3 ? ResolveTransferDestination(arguments[3], true) : -1,
arguments.Length > 4 ? NumberConversions.ToInt(arguments[4]) : -1,
arguments.Length > 5 ? NumberConversions.ToInt(arguments[5]) : -1,
arguments.Length > 6 ? NumberConversions.ToInt(arguments[6]) : 0);
break;Параметри: delay (Any), quantity (Any), type (Any), destination (Any), x (Any), y (Any), z (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MassMove:bridge.MassMove(-1, 0, 0, -1, -1, -1, 0). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[2]). -
InjectionScript.Runtime.InjectionApiUO.ResolveTransferDestination:ResolveTransferDestination(arguments[3], true).
Внутрішній код реалізації, не самостійний скрипт.
case "massmove":
if (arguments.Length == 0) bridge.MassMove(-1, 0, 0, -1, -1, -1, 0);
else bridge.MassMove(NumberConversions.ToInt(arguments[0]),
arguments.Length > 1 ? NumberConversions.ToInt(arguments[1]) : 0,
arguments.Length > 2 ? ResolveType(arguments[2]) : 0,
arguments.Length > 3 ? ResolveTransferDestination(arguments[3], true) : -1,
arguments.Length > 4 ? NumberConversions.ToInt(arguments[4]) : -1,
arguments.Length > 5 ? NumberConversions.ToInt(arguments[5]) : -1,
arguments.Length > 6 ? NumberConversions.ToInt(arguments[6]) : 0);
break;ClassicUO — Bad Newbie & C# Scripts IDE