Перейти к содержимому

MapInfo

MapInfo предоставляет параметры текущей карты и определяет игровые зоны в мировой позиции.

Свойства читаются из загруженного описания карты. GetZones(position) проверяет переданную мировую точку по объёмам игровых зон и возвращает имена всех совпавших зон. Метод не перемещает объект в зону и не подписывается на вход/выход.

Для отслеживания агента повторяйте запрос с его актуальной Movement.Position в подходящем цикле.

local zones = MapInfo:GetZones(Cameras.Main.Position)
for index = 1, zones.Length do
print(zones[index])
end

Cameras.Main доступен только на клиенте. В server.lua передайте позицию из серверного API.

Свойство Тип Доступ Описание
BasementBottomY number get Нижняя Y-граница подземного уровня.
BasementTopY number get Верхняя Y-граница подземного уровня.
MapCameraHeight number get Высота камеры миникарты.
MapCenter Vector3 get Центр карты в мировых координатах.
MapName string get Имя текущей карты.
MapSize number get Размер карты, используемый её представлением.

Все свойства getter-only.

На карте Castle во время проверки были получены:

Свойство Значение
BasementBottomY -5
BasementTopY 0
MapCameraHeight 200
MapCenter (15, 0, 20)
MapName Castle
MapSize 130

Эти значения описывают только проверенную карту и не являются общими константами.

MapInfo:GetZones(position: Vector3): Array<string>

Возвращает Array<string> с именами всех зон, содержащих указанную мировую позицию.

Одна позиция может находиться сразу в нескольких зонах:

local zones = MapInfo:GetZones(Cameras.Main.Position)
-- Пример: BuyZoneCT, CSspawn

Если позиция не относится ни к одной зоне, возвращается пустой массив с Length == 0, а не nil.

local zones = MapInfo:GetZones(Vector3.zero)
if zones.Length == 0 then
print("No zone at this position")
end

MapInfo и GetZones() работают и на клиенте, и в Reflex server. Результаты для одной карты и позиции совпали в обоих контекстах.