API UO GetStaticTiles - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
UO.GetStaticTiles
Оглавление · Алфавитный указатель · World & Geometry
ClassicUO • Runtime API
Читает записи над землёй в одной клетке текущей карты.
Точный синтаксис
UO.GetStaticTiles(x:Any, y:Any, map:Any) -> Any
Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.
Параметры
x— X клетки текущей загруженной карты; мировая координата, не позиция внутри гампа.y— Y клетки текущей загруженной карты; мировая координата, не позиция внутри гампа.map— Номер карты. Если этот аргумент отсутствует в выбранной форме, используется текущая карта. Реальный клиент читает тайлы только текущей загруженной карты.
Возвращает
Array — плоская последовательность Integer-троек [graphic0, z0, hue0, graphic1, z1, hue1, …]. Число записей равно длине массива / 3. Для записи i graphic находится в [i*3], Z в [i*3+1], hue в [i*3+2]. Пустой массив означает отсутствие записей или недоступную карту/клетку. Serial и номер слоя здесь не возвращаются.
Поведение
- Данные относятся к текущей загруженной карте. Другая карта или недоступная клетка дают пустой массив. Прямые запросы тайлов могут дополнительно сообщать о несовпадении карты; GetWorldCell и GetWorldTilesArray сразу возвращают пустой массив без такого сообщения.
- Индексы массивов начинаются с 0. Перед чтением поля проверяйте GetArrayLength. Z означает высоту в мире; layer — свойство экипировки из tiledata, а index — порядковый номер записи клетки.
- В текущем bridge перечисляются Static, Multi и мировые Item в цепочке клетки. Название команды не ограничивает результат исключительно записями statics.mul. Порядок цепочки не гарантирует сортировку по Z.
Примеры
Пример 1. Посчитать записи клетки
# Посчитать записи клетки
#
# Читает записи над землёй в одной клетке текущей карты.
#
# Array — плоская последовательность Integer-троек `[graphic0, z0, hue0, graphic1, z1, hue1,
# …]`. Число записей равно длине массива / 3. Для записи i graphic находится в `[i*3]`, Z в
# `[i*3+1]`, hue в `[i*3+2]`. Пустой массив означает отсутствие записей или недоступную
# карту/клетку. Serial и номер слоя здесь не возвращаются.
SUB Main()
# x/y/map выбирают текущую клетку.
# Длина массива — число полей. Деление на 3 даёт число записей.
VAR tiles = UO.GetStaticTiles(UO.GetX(), UO.GetY(), UO.WorldNum())
VAR count = GetArrayLength(tiles) / 3
UO.Print('Tile records: ' + CStr(count))
END SUB
Разбор параметров и выполнения:
- x/y/map выбирают текущую клетку.
- Длина массива — число полей. Деление на 3 даёт число записей.
Пример 2. Перебрать graphic и высоту всех записей
# Перебрать graphic и высоту всех записей
#
# Читает записи над землёй в одной клетке текущей карты.
#
# Array — плоская последовательность Integer-троек `[graphic0, z0, hue0, graphic1, z1, hue1,
# …]`. Число записей равно длине массива / 3. Для записи i graphic находится в `[i*3]`, Z в
# `[i*3+1]`, hue в `[i*3+2]`. Пустой массив означает отсутствие записей или недоступную
# карту/клетку. Serial и номер слоя здесь не возвращаются.
SUB Main()
# offset — индекс первого поля очередной тройки, увеличивается на 3.
# Проверка offset+2 защищает чтение всей записи.
VAR tiles = UO.GetStaticTiles(UO.GetX(), UO.GetY(), UO.WorldNum())
VAR offset = 0
WHILE offset + 2 < GetArrayLength(tiles)
UO.Print('Type: ' + CStr(tiles[offset]) + ', Z: ' + CStr(tiles[offset + 1]))
offset = offset + 3
WEND
END SUB
Разбор параметров и выполнения:
- offset — индекс первого поля очередной тройки, увеличивается на 3.
- Проверка offset+2 защищает чтение всей записи.
Пример 3. Прочитать hue первой записи
# Прочитать hue первой записи
#
# Читает записи над землёй в одной клетке текущей карты.
#
# Array — плоская последовательность Integer-троек `[graphic0, z0, hue0, graphic1, z1, hue1,
# …]`. Число записей равно длине массива / 3. Для записи i graphic находится в `[i*3]`, Z в
# `[i*3+1]`, hue в `[i*3+2]`. Пустой массив означает отсутствие записей или недоступную
# карту/клетку. Serial и номер слоя здесь не возвращаются.
SUB Main()
# x+1 выбирает соседнюю клетку.
# tiles[2] — цвет первой записи; это не третий тайл.
VAR tiles = UO.GetStaticTiles(UO.GetX() + 1, UO.GetY(), UO.WorldNum())
IF GetArrayLength(tiles) >= 3 THEN
VAR hue = tiles[2]
UO.Print('First tile hue: ' + CStr(hue))
ELSE
UO.Print('No tile records')
END IF
END SUB
Разбор параметров и выполнения:
- x+1 выбирает соседнюю клетку.
- tiles[2] — цвет первой записи; это не третий тайл.