API backpack - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
backpack
Оглавление · Алфавитный указатель · Именованные параметры
ClassicUO • Runtime API • backpack.md
Точный синтаксис / Registered signatures
backpack -> Any (runtime value)
'backpack' — named object alias resolved from current client state
Порядок аргументов соответствует строкам выше. Unit означает отсутствие возвращаемого значения. Any — значение BASIC с преобразованием при вызове. Имена нечувствительны к регистру.
UO.Backpack
ClassicUO • Runtime API
Возвращает ID надетого рюкзака текущего персонажа.
Точный синтаксис
UO.Backpack() -> Integer
Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.
Параметры
Параметров нет.
Возвращает
Integer — serial/ID, не graphic/type, слой, количество предметов или Boolean. 0 — текущего объекта нет. Сохраняются все 32 бита serial; проверяйте <> 0, не = TRUE или > 0. Сохранённый результат сам не обновляется. Ищет неудалённый предмет на слое Backpack текущего Player. Нет/уничтожен Player, нет рюкзака или сумка удалена — 0. Возвращает контейнер, не содержимое; новую сумку не создаёт.
Поведение
- Параметров нет. Читает локальные данные через Invoke на игровом потоке; отмена скрипта прерывает ожидание этого потока. Не посылает пакет, не открывает контейнер/target и не переносит предмет.
- Встроенное self/backpack без скобок читается заново, если его не перекрыла переменная скрипта. Строковые имена обрабатывает принимающая команда. В назначении переноса "self" означает рюкзак, а UO.Self() возвращает serial персонажа. Для ID контейнера явно используйте UO.Backpack().
- World.Clear удаляет Player; последующие чтения дают 0. Вход в мир или замена надетой сумки могут изменить ID. Отдельные чтения не атомарны. Ненулевой ID не доказывает подключение, разрешение сервера или загрузку содержимого.
Внутренние функции: от вызова до результата
Ниже реальные этапы чтения объекта клиента. IsOwnSerial — полная функция показанного скрипта, а не ещё одна встроенная команда.
1. ExecuteStealthCompatibility
ExecuteStealthCompatibility выбирает ветку без аргументов и оборачивает Integer bridge в InjectionValue. Выходного параметра Pascal или дополнительных необязательных аргументов нет.
Integer — serial/ID, не graphic/type, слой, количество предметов или Boolean. 0 — текущего объекта нет. Сохраняются все 32 бита serial; проверяйте <> 0, не = TRUE или > 0. Сохранённый результат сам не обновляется.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция ExecuteStealthCompatibility.
2. Invoke
Ищет неудалённый предмет на слое Backpack текущего Player. Нет/уничтожен Player, нет рюкзака или сумка удалена — 0. Возвращает контейнер, не содержимое; новую сумку не создаёт. Invoke выполняет чтение на игровом потоке; с рабочего потока ожидается обработка запроса менеджером. Отмена скрипта прерывает ожидание. Паузы и дополнительные сетевые запросы не добавляются.
Integer — serial/ID, не graphic/type, слой, количество предметов или Boolean. 0 — текущего объекта нет. Сохраняются все 32 бита serial; проверяйте <> 0, не = TRUE или > 0. Сохранённый результат сам не обновляется. Параметров нет. Читает локальные данные через Invoke на игровом потоке; отмена скрипта прерывает ожидание этого потока. Не посылает пакет, не открывает контейнер/target и не переносит предмет.
Исходник проекта: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функция Invoke.
3. FindItemByLayer
Ищет неудалённый предмет на слое Backpack текущего Player. Нет/уничтожен Player, нет рюкзака или сумка удалена — 0. Возвращает контейнер, не содержимое; новую сумку не создаёт.
Integer — serial/ID, не graphic/type, слой, количество предметов или Boolean. 0 — текущего объекта нет. Сохраняются все 32 бита serial; проверяйте <> 0, не = TRUE или > 0. Сохранённый результат сам не обновляется.
Исходник проекта: src/ClassicUO.Client/Game/GameObjects/Entity.cs; функция FindItemByLayer.
4. Clear
World.Clear удаляет Player; последующие чтения дают 0. Вход в мир или замена надетой сумки могут изменить ID. Отдельные чтения не атомарны. Ненулевой ID не доказывает подключение, разрешение сервера или загрузку содержимого.
World.Clear удаляет Player; последующие чтения дают 0. Вход в мир или замена надетой сумки могут изменить ID. Отдельные чтения не атомарны. Ненулевой ID не доказывает подключение, разрешение сервера или загрузку содержимого.
Исходник проекта: src/ClassicUO.Client/Game/World.cs; функция Clear.
World.Clear удаляет Player; последующие чтения дают 0. Вход в мир или замена надетой сумки могут изменить ID. Отдельные чтения не атомарны. Ненулевой ID не доказывает подключение, разрешение сервера или загрузку содержимого.
Примеры
Пример 1. Прочитать и вывести ID
# Прочитать и вывести ID
#
# Возвращает ID надетого рюкзака текущего персонажа.
#
# Integer — serial/ID, не graphic/type, слой, количество предметов или Boolean. 0 — текущего
# объекта нет. Сохраняются все 32 бита serial; проверяйте <> 0, не = TRUE или > 0. Сохранённый
# результат сам не обновляется. Ищет неудалённый предмет на слое Backpack текущего Player.
# Нет/уничтожен Player, нет рюкзака или сумка удалена — 0. Возвращает контейнер, не содержимое;
# новую сумку не создаёт.
SUB Main()
# id сохраняет результат одного вызова; HEX форматирует serial для журнала. Пример ничего не
# выбирает и не использует.
VAR id = UO.Backpack()
UO.Print('ID: ' + HEX(id))
END SUB
Разбор параметров и выполнения:
- id сохраняет результат одного вызова; HEX форматирует serial для журнала. Пример ничего не выбирает и не использует.
Пример 2. Обнаружить изменение ID
# Обнаружить изменение ID
#
# Возвращает ID надетого рюкзака текущего персонажа.
#
# Integer — serial/ID, не graphic/type, слой, количество предметов или Boolean. 0 — текущего
# объекта нет. Сохраняются все 32 бита serial; проверяйте <> 0, не = TRUE или > 0. Сохранённый
# результат сам не обновляется. Ищет неудалённый предмет на слое Backpack текущего Player.
# Нет/уничтожен Player, нет рюкзака или сумка удалена — 0. Возвращает контейнер, не содержимое;
# новую сумку не создаёт.
SUB Main()
# before/after читаются с интервалом 250 мс. WAIT добавлен только в пример. Равенство означает
# одинаковые конечные ID; промежуточные изменения могут быть пропущены.
VAR before = UO.Backpack()
WAIT(250)
VAR after = UO.Backpack()
IF before <> after THEN
UO.Print('ID changed: ' + HEX(after))
END IF
END SUB
Разбор параметров и выполнения:
- before/after читаются с интервалом 250 мс. WAIT добавлен только в пример. Равенство означает одинаковые конечные ID; промежуточные изменения могут быть пропущены.
Пример 3. Полная функция IsOwnSerial
# Полная функция IsOwnSerial
#
# Возвращает ID надетого рюкзака текущего персонажа.
#
# Integer — serial/ID, не graphic/type, слой, количество предметов или Boolean. 0 — текущего
# объекта нет. Сохраняются все 32 бита serial; проверяйте <> 0, не = TRUE или > 0. Сохранённый
# результат сам не обновляется. Ищет неудалённый предмет на слое Backpack текущего Player.
# Нет/уничтожен Player, нет рюкзака или сумка удалена — 0. Возвращает контейнер, не содержимое;
# новую сумку не создаёт.
SUB Main()
# candidate — сохранённый ID LastTarget. IsOwnSerial(candidate) принимает один serial и
# возвращает Integer Boolean: 1=TRUE для текущего ненулевого собственного ID, иначе 0=FALSE.
# Определение функции приведено полностью; target не изменяется.
VAR candidate = UO.LastTarget()
IF IsOwnSerial(candidate) = TRUE THEN
UO.Print('Own object selected')
ELSE
UO.Print('Different object or no own object')
END IF
END SUB
SUB IsOwnSerial(candidate)
VAR current = UO.Backpack()
RETURN current <> 0 AND current = candidate
END SUB
Разбор параметров и выполнения:
- candidate — сохранённый ID LastTarget. IsOwnSerial(candidate) принимает один serial и возвращает Integer Boolean: 1=TRUE для текущего ненулевого собственного ID, иначе 0=FALSE. Определение функции приведено полностью; target не изменяется.
Варианты использования
Это отдельные сценарии. Подставьте свои serial, пути и координаты; серверные действия зависят от текущего состояния игры.
Чтение значения
SUB Main()
VAR value = 'backpack'
UO.Print(CStr(value))
END SUB
Использование в процедуре
SUB ShowValue()
VAR value = 'backpack'
UO.Print(CStr(value))
END SUB
SUB Main()
ShowValue()
END SUB