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

Здания по метке

Искать здание по типу нельзя, зато можно по роли: ядро, турель, склад, генератор

среднийНужно знать: Где лежит руда, Свойства зданий
тик 0
Связь с юнитом0
тип
Поиск юнитом1
locateфлагвраг?рудаXYoutFoundoutBuild
Поиск юнитом2
locateфлагвраг?рудаXYoutFoundoutBuild
Поиск юнитом3
locateфлагвраг?рудаXYoutFoundoutBuild
Стоп4
@counter0number
врагXnullnull
врагYnullnull
естьВрагnullnull
вражьяnullnull
свояXnullnull
свояYnullnull
естьСвояnullnull
свояnullnull
складXnullnull
складYnullnull
естьСкладnullnull
складnullnull
ulocate building turret true @copper врагX врагY естьВраг вражья
ulocate building turret false @copper свояX свояY естьСвоя своя

Две строки, отличающиеся одним словом: первая находит вражескую турель на клетке 18, вторая — свою на шестой. Третье поле и решает, чьё здание искать.

Поле Что в нём при поиске здания
первое building
второе метка: что это за здание по роли
третье true — чужое, false — своё
четвёртое предмет — этому виду поиска не нужен
пятое и шестое координаты найденного
седьмое нашлось или нет
восьмое само здание объектом

Искать «двойную турель» или «контейнер» нельзя — можно искать здание с нужной меткой. Метки расставлены заранее, в самой игре, и их десять:

Метка Кто ею помечен
core ядро
storage контейнер, хранилище
generator всё, что вырабатывает энергию
turret любая турель
factory фабрики: плавильни, прессы, смесители
repair ремонтная точка
battery батарея
reactor реактор
drill любой бур
shield проектор поля

Метка у здания может быть не одна: ториевый реактор помечен и как generator, и как reactor — искать его можно и так, и так.

ulocate отдаёт не только координаты, но и здание объектом — и это самое ценное. Дальше с ним работают как с любым зданием:

ulocate building core false @copper x y нашлось ядро
sensor меди ядро @copper
sensor цело ядро @health

Связь с этим зданием не нужна: sensor читает и не связанные блоки. А вот control — нет, ему связь обязательна.

Посмотрите на складX в примере: 10.5, хотя контейнер стоит на десятой клетке.

Так и должно быть. У блока с чётной стороной — 2×2, 4×4 — центр приходится не на середину клетки, а на её угол, и координаты у него получаются с половинкой. ulocate отдаёт именно центр здания, как и sensor @x.

Для ucontrol move это даже удобнее: юнит подлетит к середине склада, а не к его углу.

Неофициальный проект, с Anuke не связан. Спрайты, шрифты и переводы Mindustry © Anuke, используются по GPL-3.0; Fira Code — по OFL-1.1. Код сайта — GPL-3.0.