-
Notifications
You must be signed in to change notification settings - Fork 0
API UO GetWorldCell
Оглавление · Алфавитный указатель · World & Geometry
ClassicUO • Runtime API
Читает расширенные записи земли, записей над землёй и загруженных мировых предметов в выбранной области.
UO.GetWorldCell(x:Any, y:Any) -> Any
UO.GetWorldCell(x:Any, y:Any, map:Any) -> Any
Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.
-
x— X клетки текущей загруженной карты; мировая координата, не позиция внутри гампа. -
y— Y клетки текущей загруженной карты; мировая координата, не позиция внутри гампа. -
map— Номер карты. Если этот аргумент отсутствует в выбранной форме, используется текущая карта. Реальный клиент читает тайлы только текущей загруженной карты.
Array записей. Каждый элемент result[i] имеет следующий формат:
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.
GetArrayLength(result) — число записей, не число клеток и не число шагов маршрута. Результат может быть пустым. У одного x/y может быть несколько записей с разными Z. Запись "object" имеет serial; запись "static" не имеет пригодного serial.
- Данные относятся к текущей загруженной карте. Другая карта или недоступная клетка дают пустой массив. Прямые запросы тайлов могут дополнительно сообщать о несовпадении карты; GetWorldCell и GetWorldTilesArray сразу возвращают пустой массив без такого сообщения.
- Индексы массивов начинаются с 0. Перед чтением поля проверяйте GetArrayLength. Z означает высоту в мире; layer — свойство экипировки из tiledata, а index — порядковый номер записи клетки.
- Статическая часть использует GetStaticTiles: его текущая выборка включает также Multi/Item. Мировой Item может дополнительно присутствовать как "object" с serial; не считайте каждую запись уникальным предметом.
- GetWorldTilesArray ограничивает область 1 000 000 клеток. Превышение или координаты вне 0…65535/map вне 0…255 вызывают ошибку команды, а не частичный массив. Для частого опроса выбирайте небольшую область.
# Посчитать и перечислить записи
#
# Читает расширенные записи земли, записей над землёй и загруженных мировых предметов в
# выбранной области.
#
# Array записей. Каждый элемент result[i] имеет следующий формат:
#
# 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.
#
# GetArrayLength(result) — число записей, не число клеток и не число шагов маршрута. Результат
# может быть пустым. У одного x/y может быть несколько записей с разными Z. Запись "object"
# имеет serial; запись "static" не имеет пригодного serial.
SUB Main()
# GetWorldCell читает одну клетку; GetWorldTilesArray в этом примере читает квадрат 3×3 с
# включёнными границами.
# cells[i] — вложенный массив. tile[0] — категория, [2] — graphic, [5] — Z.
VAR cells = UO.GetWorldCell(UO.GetX(), UO.GetY())
VAR i = 0
WHILE i < GetArrayLength(cells)
VAR tile = cells[i]
UO.Print(tile[0] + ': ' + CStr(tile[2]) + ', Z=' + CStr(tile[5]))
i = i + 1
WEND
END SUBРазбор параметров и выполнения:
- GetWorldCell читает одну клетку; GetWorldTilesArray в этом примере читает квадрат 3×3 с включёнными границами.
- cells[i] — вложенный массив. tile[0] — категория, [2] — graphic, [5] — Z.
# Показать только записи с serial предмета
#
# Читает расширенные записи земли, записей над землёй и загруженных мировых предметов в
# выбранной области.
#
# Array записей. Каждый элемент result[i] имеет следующий формат:
#
# 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.
#
# GetArrayLength(result) — число записей, не число клеток и не число шагов маршрута. Результат
# может быть пустым. У одного x/y может быть несколько записей с разными Z. Запись "object"
# имеет serial; запись "static" не имеет пригодного serial.
SUB Main()
# Область выбирается координатами, а не контейнером.
# Проверка kind="object" отделяет серийные предметы от земли/статики; [1] содержит serial.
VAR cells = UO.GetWorldCell(UO.GetX(), UO.GetY())
VAR i = 0
WHILE i < GetArrayLength(cells)
VAR tile = cells[i]
IF tile[0] = 'object' THEN
UO.Print('Object serial: ' + CStr(tile[1]))
END IF
i = i + 1
WEND
END SUBРазбор параметров и выполнения:
- Область выбирается координатами, а не контейнером.
- Проверка kind="object" отделяет серийные предметы от земли/статики; [1] содержит serial.
# Отобрать записи на высоте персонажа
#
# Читает расширенные записи земли, записей над землёй и загруженных мировых предметов в
# выбранной области.
#
# Array записей. Каждый элемент result[i] имеет следующий формат:
#
# 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.
#
# GetArrayLength(result) — число записей, не число клеток и не число шагов маршрута. Результат
# может быть пустым. У одного x/y может быть несколько записей с разными Z. Запись "object"
# имеет serial; запись "static" не имеет пригодного serial.
SUB Main()
# tile[5] и GetZ() сравниваются в одинаковых единицах мировой высоты.
# Равенство Z фильтрует основание, но не означает проходимость или совпадение этажа целиком.
VAR cells = UO.GetWorldCell(UO.GetX(), UO.GetY())
VAR i = 0
WHILE i < GetArrayLength(cells)
VAR tile = cells[i]
IF tile[5] = UO.GetZ() THEN
UO.Print(tile[8])
END IF
i = i + 1
WEND
END SUBРазбор параметров и выполнения:
- tile[5] и GetZ() сравниваются в одинаковых единицах мировой высоты.
- Равенство Z фильтрует основание, но не означает проходимость или совпадение этажа целиком.
ClassicUO - Bad Newbie & Basic IDE Edition