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

UO.GetMultiPartsAtPosition

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

ClassicUO • Runtime API

Читает компоненты домов в указанной мировой клетке.

Точный синтаксис

UO.GetMultiPartsAtPosition(X:Any, Y:Any) -> Any

Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.

Параметры

  • X — Мировая координата X клетки текущей карты, не смещение внутри дома.
  • Y — Мировая координата Y клетки. Возвращаются компоненты всех загруженных домов в этой клетке, на всех высотах Z.

Возвращает

Array<Array>. Каждая строка содержит 9 полей: [0] graphic/type компоненты, [1] hue, [2] мировой X, [3] мировой Y, [4] мировой Z, [5] multiOffsetX — смещение X от multi, [6] multiOffsetY — смещение Y, [7] multiOffsetZ — смещение Z, [8] multiSerial — serial дома. Нет компонент — пустой Array. Graphic не является ID; у отдельных статических компонент здесь нет собственного serial.

Поведение

  • Читаются данные, уже загруженные клиентом. Команда не открывает контейнер, не перемещает предметы и не загружает объекты со всего сервера.
  • Array — массив с индексами от 0. Сохраняйте его в VAR, проверяйте GetArrayLength перед доступом. Элементы могут исчезнуть из мира после создания снимка: перед действием проверяйте Exists(serial).
  • Возвращаются известные, не удалённые компоненты HouseManager. Отдельная статика карты и land в этот список не входят. Строки являются снимком; фиксированный порядок или сортировка по Z не обещаются.

Примеры

Пример 1. Посчитать компоненты

# Посчитать компоненты
#
# Читает компоненты домов в указанной мировой клетке.
#
# Array<Array<Integer>>. Каждая строка содержит 9 полей: [0] graphic/type компоненты, [1] hue,
# [2] мировой X, [3] мировой Y, [4] мировой Z, [5] multiOffsetXсмещение X от multi, [6]
# multiOffsetYсмещение Y, [7] multiOffsetZсмещение Z, [8] multiSerialserial дома. Нет
# компонентпустой Array. Graphic не является ID; у отдельных статических компонент здесь нет
# собственного serial.

SUB Main()
    # X/Yтекущая позиция персонажа.
    # Длиначисло компонент, не их высота и не число домов.

    VAR parts = UO.GetMultiPartsAtPosition(UO.GetX(), UO.GetY())
    UO.Print(STR(GetArrayLength(parts)))
END SUB

Разбор параметров и выполнения:

  • X/Y — текущая позиция персонажа.
  • Длина — число компонент, не их высота и не число домов.

Пример 2. Прочитать graphic и положение первой компоненты

# Прочитать graphic и положение первой компоненты
#
# Читает компоненты домов в указанной мировой клетке.
#
# Array<Array<Integer>>. Каждая строка содержит 9 полей: [0] graphic/type компоненты, [1] hue,
# [2] мировой X, [3] мировой Y, [4] мировой Z, [5] multiOffsetXсмещение X от multi, [6]
# multiOffsetYсмещение Y, [7] multiOffsetZсмещение Z, [8] multiSerialserial дома. Нет
# компонентпустой Array. Graphic не является ID; у отдельных статических компонент здесь нет
# собственного serial.

SUB Main()
    # parts[0] — первая строка массива. Её [0] — type, [2]/[3]/[4] — мировые X/Y/Z.
    # Индексы [5]/[6]/[7] вместо этого содержат относительные смещения.

    VAR parts = UO.GetMultiPartsAtPosition(UO.GetX(), UO.GetY())
    IF GetArrayLength(parts) > 0 THEN
        VAR part = parts[0]
        UO.Print('Type: 0x' + Hex(part[0]))
        UO.Print(STR(part[2]) + ',' + STR(part[3]) + ',' + STR(part[4]))
    END IF
END SUB

Разбор параметров и выполнения:

  • parts[0] — первая строка массива. Её [0] — type, [2]/[3]/[4] — мировые X/Y/Z.
  • Индексы [5]/[6]/[7] вместо этого содержат относительные смещения.

Пример 3. Обойти компоненты и вывести владельцев

# Обойти компоненты и вывести владельцев
#
# Читает компоненты домов в указанной мировой клетке.
#
# Array<Array<Integer>>. Каждая строка содержит 9 полей: [0] graphic/type компоненты, [1] hue,
# [2] мировой X, [3] мировой Y, [4] мировой Z, [5] multiOffsetXсмещение X от multi, [6]
# multiOffsetYсмещение Y, [7] multiOffsetZсмещение Z, [8] multiSerialserial дома. Нет
# компонентпустой Array. Graphic не является ID; у отдельных статических компонент здесь нет
# собственного serial.

SUB Main()
    # [8] — serial дома, [7] — смещение Z компоненты.
    # Не передавайте part[0] в команду, ожидающую serial дома: это graphic отдельной компоненты.

    VAR parts = UO.GetMultiPartsAtPosition(UO.GetX(), UO.GetY())
    VAR i = 0
    WHILE i < GetArrayLength(parts)
        VAR part = parts[i]
        UO.Print('Multi: 0x' + Hex(part[8]) + ', offset Z: ' + STR(part[7]))
        i = i + 1
    WEND
END SUB

Разбор параметров и выполнения:

  • [8] — serial дома, [7] — смещение Z компоненты.
  • Не передавайте part[0] в команду, ожидающую serial дома: это graphic отдельной компоненты.
⚠️ **GitHub.com Fallback** ⚠️