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

UO.GetLandTileAt

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

ClassicUO • Runtime API

Возвращает расширенную запись земли выбранной клетки.

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

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

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

Параметры

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

Возвращает

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.

Пустой массив [] означает отсутствие записи или недоступную карту/клетку. Для GetStaticTileAt отрицательный/слишком большой index также даёт []; переполнение индекса не выбирает чужую запись.

Поведение

  • Данные относятся к текущей загруженной карте. Другая карта или недоступная клетка дают пустой массив. Прямые запросы тайлов могут дополнительно сообщать о несовпадении карты; GetWorldCell и GetWorldTilesArray сразу возвращают пустой массив без такого сообщения.
  • Индексы массивов начинаются с 0. Перед чтением поля проверяйте GetArrayLength. Z означает высоту в мире; layer — свойство экипировки из tiledata, а index — порядковый номер записи клетки.

Примеры

Пример 1. Раздельно прочитать type, Z и слой

# Раздельно прочитать type, Z и слой
#
# Возвращает расширенную запись земли выбранной клетки.
#
# 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.
#
# Пустой массив `[]` означает отсутствие записи или недоступную карту/клетку. Для
# GetStaticTileAt отрицательный/слишком большой index также даёт `[]`; переполнение индекса не
# выбирает чужую запись.

SUB Main()
    # x/y — положение персонажа; карта опущена и выбирается автоматически. Для GetStaticTileAt
    # index=0 означает первую запись.
    # Поля [2], [5], [9] имеют разный смысл; все читаются только после проверки длины 11.

    VAR tile = UO.GetLandTileAt(UO.GetX(), UO.GetY())
    IF GetArrayLength(tile) = 11 THEN
        UO.Print('Type: ' + CStr(tile[2]))
        UO.Print('World Z: ' + CStr(tile[5]))
        UO.Print('Equipment layer: ' + CStr(tile[9]))
    ELSE
        UO.Print('Tile is unavailable')
    END IF
END SUB

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

  • x/y — положение персонажа; карта опущена и выбирается автоматически. Для GetStaticTileAt index=0 означает первую запись.
  • Поля [2], [5], [9] имеют разный смысл; все читаются только после проверки длины 11.

Пример 2. Получить имя и высоту graphic

# Получить имя и высоту graphic
#
# Возвращает расширенную запись земли выбранной клетки.
#
# 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.
#
# Пустой массив `[]` означает отсутствие записи или недоступную карту/клетку. Для
# GetStaticTileAt отрицательный/слишком большой index также даёт `[]`; переполнение индекса не
# выбирает чужую запись.

SUB Main()
    # Используются те же координаты; GetStaticTileAt читает index=0.
    # tile[8] — строка названия, tile[10] — размер по высоте из tiledata, а не Z основания.

    VAR tile = UO.GetLandTileAt(UO.GetX(), UO.GetY())
    IF GetArrayLength(tile) = 11 THEN
        UO.Print(tile[8])
        UO.Print('Graphic height: ' + CStr(tile[10]))
    END IF
END SUB

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

  • Используются те же координаты; GetStaticTileAt читает index=0.
  • tile[8] — строка названия, tile[10] — размер по высоте из tiledata, а не Z основания.

Пример 3. Подготовить цель по type и координатам

# Подготовить цель по type и координатам
#
# Возвращает расширенную запись земли выбранной клетки.
#
# 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.
#
# Пустой массив `[]` означает отсутствие записи или недоступную карту/клетку. Для
# GetStaticTileAt отрицательный/слишком большой index также даёт `[]`; переполнение индекса не
# выбирает чужую запись.

SUB Main()
    # WaitTargetTile получает graphic, x, y, z из полей 2…5.
    # Это только подготовка следующего target. Пример не запускает применение инструмента или
    # заклинание. serial=0 для статики не следует передавать как ID предмета.

    VAR tile = UO.GetLandTileAt(UO.GetX(), UO.GetY())
    IF GetArrayLength(tile) = 11 THEN
        UO.WaitTargetTile(tile[2], tile[3], tile[4], tile[5])
    END IF
END SUB

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

  • WaitTargetTile получает graphic, x, y, z из полей 2…5.
  • Это только подготовка следующего target. Пример не запускает применение инструмента или заклинание. serial=0 для статики не следует передавать как ID предмета.