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

UO.GetWorldCell

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

ClassicUO • Runtime API

Читает расширенные записи земли, записей над землёй и загруженных мировых предметов в выбранной области.

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

UO.GetWorldCell(x:Any, y:Any) -> Any
UO.GetWorldCell(x:Any, y:Any, map:Any) -> Any

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

Параметры

  • x — X клетки текущей загруженной карты; мировая координата, не позиция внутри гампа.
  • y — Y клетки текущей загруженной карты; мировая координата, не позиция внутри гампа.
  • map — Номер карты. Если этот аргумент отсутствует в выбранной форме, используется текущая карта. Реальный клиент читает тайлы только текущей загруженной карты.

Возвращает

Array записей. Каждый элемент result[i] имеет следующий формат:

Array из 11 полей одной записи; индексы начинаются с 0:

  • [0] kind — String: "land", "static" либо "object".
  • [1] serial — Integer: serial динамического предмета; для land/static равен 0.
  • [2] graphic — Integer: type графики.
  • [3] x, [4] y — Integer: мировые координаты клетки.
  • [5] z — Integer: высота основания в мире.
  • [6] hue — Integer: цвет, у земли 0.
  • [7] flags — Integer: младшие 32 бита флагов tiledata.
  • [8] name — String: название из tiledata.
  • [9] layer — Integer: слой экипировки из tiledata, у земли 0; не индекс статики.
  • [10] height — Integer: высота graphic из tiledata, у земли 0; не координата Z.

GetArrayLength(result) — число записей, не число клеток и не число шагов маршрута. Результат может быть пустым. У одного x/y может быть несколько записей с разными Z. Запись "object" имеет serial; запись "static" не имеет пригодного serial.

Поведение

  • Данные относятся к текущей загруженной карте. Другая карта или недоступная клетка дают пустой массив. Прямые запросы тайлов могут дополнительно сообщать о несовпадении карты; GetWorldCell и GetWorldTilesArray сразу возвращают пустой массив без такого сообщения.
  • Индексы массивов начинаются с 0. Перед чтением поля проверяйте GetArrayLength. Z означает высоту в мире; layer — свойство экипировки из tiledata, а index — порядковый номер записи клетки.
  • Статическая часть использует GetStaticTiles: его текущая выборка включает также Multi/Item. Мировой Item может дополнительно присутствовать как "object" с serial; не считайте каждую запись уникальным предметом.
  • GetWorldTilesArray ограничивает область 1 000 000 клеток. Превышение или координаты вне 0…65535/map вне 0…255 вызывают ошибку команды, а не частичный массив. Для частого опроса выбирайте небольшую область.

Примеры

Пример 1. Посчитать и перечислить записи

# Посчитать и перечислить записи
#
# Читает расширенные записи земли, записей над землёй и загруженных мировых предметов в
# выбранной области.
#
# Array записей. Каждый элемент result[i] имеет следующий формат:
#
# Array из 11 полей одной записи; индексы начинаются с 0:
#
# - `[0] kind` — String: "land", "static" либо "object".
# - `[1] serial` — Integer: serial динамического предмета; для land/static равен 0.
# - `[2] graphic` — Integer: type графики.
# - `[3] x`, `[4] y` — Integer: мировые координаты клетки.
# - `[5] z` — Integer: высота основания в мире.
# - `[6] hue` — Integer: цвет, у земли 0.
# - `[7] flags` — Integer: младшие 32 бита флагов tiledata.
# - `[8] name` — String: название из tiledata.
# - `[9] layer` — Integer: слой экипировки из tiledata, у земли 0; не индекс статики.
# - `[10] height` — Integer: высота graphic из tiledata, у земли 0; не координата Z.
#
# GetArrayLength(result) — число записей, не число клеток и не число шагов маршрута. Результат
# может быть пустым. У одного x/y может быть несколько записей с разными Z. Запись "object"
# имеет serial; запись "static" не имеет пригодного serial.

SUB Main()
    # GetWorldCell читает одну клетку; GetWorldTilesArray в этом примере читает квадрат 3×3 с
    # включёнными границами.
    # cells[i] — вложенный массив. tile[0] — категория, [2] — graphic, [5] — Z.

    VAR cells = UO.GetWorldCell(UO.GetX(), UO.GetY())
    VAR i = 0
    WHILE i < GetArrayLength(cells)
        VAR tile = cells[i]
        UO.Print(tile[0] + ': ' + CStr(tile[2]) + ', Z=' + CStr(tile[5]))
        i = i + 1
    WEND
END SUB

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

  • GetWorldCell читает одну клетку; GetWorldTilesArray в этом примере читает квадрат 3×3 с включёнными границами.
  • cells[i] — вложенный массив. tile[0] — категория, [2] — graphic, [5] — Z.

Пример 2. Показать только записи с serial предмета

# Показать только записи с serial предмета
#
# Читает расширенные записи земли, записей над землёй и загруженных мировых предметов в
# выбранной области.
#
# Array записей. Каждый элемент result[i] имеет следующий формат:
#
# Array из 11 полей одной записи; индексы начинаются с 0:
#
# - `[0] kind` — String: "land", "static" либо "object".
# - `[1] serial` — Integer: serial динамического предмета; для land/static равен 0.
# - `[2] graphic` — Integer: type графики.
# - `[3] x`, `[4] y` — Integer: мировые координаты клетки.
# - `[5] z` — Integer: высота основания в мире.
# - `[6] hue` — Integer: цвет, у земли 0.
# - `[7] flags` — Integer: младшие 32 бита флагов tiledata.
# - `[8] name` — String: название из tiledata.
# - `[9] layer` — Integer: слой экипировки из tiledata, у земли 0; не индекс статики.
# - `[10] height` — Integer: высота graphic из tiledata, у земли 0; не координата Z.
#
# GetArrayLength(result) — число записей, не число клеток и не число шагов маршрута. Результат
# может быть пустым. У одного x/y может быть несколько записей с разными Z. Запись "object"
# имеет serial; запись "static" не имеет пригодного serial.

SUB Main()
    # Область выбирается координатами, а не контейнером.
    # Проверка kind="object" отделяет серийные предметы от земли/статики; [1] содержит serial.

    VAR cells = UO.GetWorldCell(UO.GetX(), UO.GetY())
    VAR i = 0
    WHILE i < GetArrayLength(cells)
        VAR tile = cells[i]
        IF tile[0] = 'object' THEN
            UO.Print('Object serial: ' + CStr(tile[1]))
        END IF
        i = i + 1
    WEND
END SUB

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

  • Область выбирается координатами, а не контейнером.
  • Проверка kind="object" отделяет серийные предметы от земли/статики; [1] содержит serial.

Пример 3. Отобрать записи на высоте персонажа

# Отобрать записи на высоте персонажа
#
# Читает расширенные записи земли, записей над землёй и загруженных мировых предметов в
# выбранной области.
#
# Array записей. Каждый элемент result[i] имеет следующий формат:
#
# Array из 11 полей одной записи; индексы начинаются с 0:
#
# - `[0] kind` — String: "land", "static" либо "object".
# - `[1] serial` — Integer: serial динамического предмета; для land/static равен 0.
# - `[2] graphic` — Integer: type графики.
# - `[3] x`, `[4] y` — Integer: мировые координаты клетки.
# - `[5] z` — Integer: высота основания в мире.
# - `[6] hue` — Integer: цвет, у земли 0.
# - `[7] flags` — Integer: младшие 32 бита флагов tiledata.
# - `[8] name` — String: название из tiledata.
# - `[9] layer` — Integer: слой экипировки из tiledata, у земли 0; не индекс статики.
# - `[10] height` — Integer: высота graphic из tiledata, у земли 0; не координата Z.
#
# GetArrayLength(result) — число записей, не число клеток и не число шагов маршрута. Результат
# может быть пустым. У одного x/y может быть несколько записей с разными Z. Запись "object"
# имеет serial; запись "static" не имеет пригодного serial.

SUB Main()
    # tile[5] и GetZ() сравниваются в одинаковых единицах мировой высоты.
    # Равенство Z фильтрует основание, но не означает проходимость или совпадение этажа целиком.

    VAR cells = UO.GetWorldCell(UO.GetX(), UO.GetY())
    VAR i = 0
    WHILE i < GetArrayLength(cells)
        VAR tile = cells[i]
        IF tile[5] = UO.GetZ() THEN
            UO.Print(tile[8])
        END IF
        i = i + 1
    WEND
END SUB

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

  • tile[5] и GetZ() сравниваются в одинаковых единицах мировой высоты.
  • Равенство Z фильтрует основание, но не означает проходимость или совпадение этажа целиком.