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

UO.GetLandscapeTile

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

ClassicUO • Runtime API

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

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

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

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

Параметры

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

Возвращает

Array из трёх Integer: [0] graphic — type земли; [1] z — мировая высота земли; [2] flags — младшие 32 бита tiledata-флагов. Если карта/клетка недоступна или земли нет, возвращается пустой массив []. Это плоская запись, а не список из трёх тайлов.

Поведение

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

Примеры

Пример 1. Показать землю под персонажем

# Показать землю под персонажем
#
# Читает землю одной клетки текущей карты.
#
# Array из трёх Integer: `[0] graphic` — type земли; `[1] z` — мировая высота земли; `[2] flags`
# — младшие 32 бита tiledata-флагов. Если карта/клетка недоступна или земли нет, возвращается
# пустой массив `[]`. Это плоская запись, а не список из трёх тайлов.

SUB Main()
    # x/y берутся из позиции персонажа; map=WorldNum() выбирает текущую карту.
    # Наличие трёх полей проверяется до индексации; land[0] — graphic, land[1] — Z.

    VAR land = UO.GetLandscapeTile(UO.GetX(), UO.GetY(), UO.WorldNum())
    IF GetArrayLength(land) >= 3 THEN
        UO.Print('Graphic: ' + CStr(land[0]))
        UO.Print('Ground Z: ' + CStr(land[1]))
    ELSE
        UO.Print('Land is unavailable')
    END IF
END SUB

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

  • x/y берутся из позиции персонажа; map=WorldNum() выбирает текущую карту.
  • Наличие трёх полей проверяется до индексации; land[0] — graphic, land[1] — Z.

Пример 2. Сравнить высоту соседней клетки

# Сравнить высоту соседней клетки
#
# Читает землю одной клетки текущей карты.
#
# Array из трёх Integer: `[0] graphic` — type земли; `[1] z` — мировая высота земли; `[2] flags`
# — младшие 32 бита tiledata-флагов. Если карта/клетка недоступна или земли нет, возвращается
# пустой массив `[]`. Это плоская запись, а не список из трёх тайлов.

SUB Main()
    # x+1 — соседняя клетка, y и map сохраняются.
    # deltaZ сравнивает землю и персонажа. Это не проверка проходимости: мосты и статики учитываются
    # отдельно.

    VAR land = UO.GetLandscapeTile(UO.GetX() + 1, UO.GetY(), UO.WorldNum())
    IF GetArrayLength(land) >= 3 THEN
        VAR deltaZ = land[1] - UO.GetZ()
        UO.Print('Ground height difference: ' + CStr(deltaZ))
    END IF
END SUB

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

  • x+1 — соседняя клетка, y и map сохраняются.
  • deltaZ сравнивает землю и персонажа. Это не проверка проходимости: мосты и статики учитываются отдельно.

Пример 3. Прочитать название найденной земли

# Прочитать название найденной земли
#
# Читает землю одной клетки текущей карты.
#
# Array из трёх Integer: `[0] graphic` — type земли; `[1] z` — мировая высота земли; `[2] flags`
# — младшие 32 бита tiledata-флагов. Если карта/клетка недоступна или земли нет, возвращается
# пустой массив `[]`. Это плоская запись, а не список из трёх тайлов.

SUB Main()
    # group=0 выбирает землю; land[0] — graphic.
    # GetTileName возвращает текст, тогда как GetLandscapeTile возвращает массив.

    VAR land = UO.GetLandscapeTile(UO.GetX(), UO.GetY(), UO.WorldNum())
    IF GetArrayLength(land) >= 3 THEN
        VAR name = UO.GetTileName(0, land[0])
        UO.Print(name)
    END IF
END SUB

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

  • group=0 выбирает землю; land[0] — graphic.
  • GetTileName возвращает текст, тогда как GetLandscapeTile возвращает массив.