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 предмета.