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] — цвет первой записи; это не третий тайл.