API UO Backpack - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

UO.Backpack

Оглавление · Алфавитный указатель · Containers

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 не изменяется.