Repository navigation
RU UO Topic items
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Главная · C# · IDE · UO API · A–Z · Примеры · Языки
Свойства, использование и перенос предметов. Serial выбирает конкретный предмет; type/graphic выбирает вид. Перенос единиц стека и число переносимых items имеют разные параметры.
| Тема | Команды и пояснения |
|---|---|
| Item Properties | 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 |
| Moving Предметы | UO.Grab · UO.Drag · UO.Drop · UO.MoveItem · UO.MoveItems · UO.MassMove · UO.EmptyContainer |
| Ground Предметы | UO.GetWorldItems · UO.FindType · UO.CountGround · UO.MoveItem |
| Контейнерные предметы | UO.GetContent · UO.FindTypeEx · UO.OpenContainer |
| Поддельные/клиентские товары | UO.MakeFakeItem · UO.DeleteObject |
| Dye | 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, без цвета, количества, контейнера, имени предмета, слоя или свойств. Два предмета одного типа разных цветов требуют отдельного color в поиске. Запись не подтверждает, что предмет сейчас существует, доступен или что сервер разрешит действие.
Каждый пример можно сохранить отдельным файлом .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 и не полный список свойств из tooltip.
- Читаются последние данные, уже известные клиенту; запрос обновления серверу не отправляется.
- Неизвестный объект и ещё не полученное свойство могут иметь нулевое/пустое значение. Проверяйте 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. Это не число дочерних предметов сундука и не лимит items команды 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].
- Параметры сохраняют порядок. Не передавайте весь row вместо массива параметров.
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 и отсутствует серверный флаг Movable. Вес 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 здесь возвращают текущую позицию персонажа.
- После вызова возьмите и сбросьте мышью образец. Команда отправит его и остальные подходящие items на указанные координаты, даже если мышь была над контейнером. Сервер проверяет доступность земли.
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