Добро пожаловать во вторую часть журнала разработки ИИ.
Как и было описано в предыдущем девлоге, ИИ руководствуется стратегией, основанной на производстве энергии (Плазмы) в 10 раз выше, чем добыча ресурса (Сплава). Но конечно, нужна также стратегия для регулирования баланса со стороны добычи ресурса.
В качестве условия для выполнения стратегии мы здесь используем "MoreThanGameTimeSeconds"(1). Из этого условия следует, что стратегия активна с первой секунды игры до самого её конца.
Итак, у нас есть две стратегии для ресурса и энергии, которые могут быть активны одновременно.
Стратегия на добычу ресурсов активна всегда, а стратегия на энергию запускается тогда, когда её производится меньше, чем десятикратное количество ресурса.
И наконец, у нас есть менеджер стратегий, который создает таблицу с названиями стратегий, которые нужно запустить.
База, расширения и другие локации.
Итак, когда у нас есть одна или более стратегий, их нужно где-то выполнить.
Для этого мы определим области на карте, на которых мы будем запускать стратегии.
Первая область - это главная база, она определяется местоположением Командира или фабрики/инженера. За это отвечает"AILocationCreator". В случае необходимости, он также создает новые области в виде расширений или блокпостов. Например, если ИИ были переданы юниты или постройки, и поблизости нет базы, будет попросту основана новая.
После создания новой базы или расширения, для этой локации запускаются две функции Lua.
Сначала запускается "AILocationManager". Он просматривает список стратегий и выбирает, какие формации построек и юнитов должны быть запущены для данной области.
Организатор формаций юнитов и построек (далее формер) представляет следующий код:
Debug: при значении True позволяет отслеживать отдельный формер исключая общий лог locationmanager.
FormerName: случайное название для формера
RunWithStrategy: здесь располагаются названия стратегий, при выполнении которых будет запускаться формер
Priority: определяет приоритет данного формера
RunOnBaseType: указывает, на базах какого типа будет применяться формер.
AIPlan: название Lua функции, которую формер должен выполнить.
NeedMobileBuilder: здесь указывается требуемый уровень технологий инженеров и их нужное количество.
Сначала устанавливаем точное описание юнита. (MOBILE + ENGINEER + TECH1)
Далее идут два числа: минимум и максимум инженеров, которых мы хотим использовать.
Вторая строчка спецификаций нужна на случай, если условие выше не выполнено.
В нашем случае на скрине выше, мы используем Командующего, если нет доступных инженеров.
FormerConditions: как и в случае со стратегиями, здесь решается при каких условиях запускать формер.
wantStructures: как и в случае с инженерами, здесь мы только указываем категории построек.
desiresAssist: здесь указывается желаемое количество инженеров на ассист.
Так, а что насчет процесса стройки ?
Вторая функция Lua это "AILocationExecutor". Он ответственен за запуск формеров, определенных функцией "AILocationManager". В нашем случае, это формеры для стратегий "BuildMoreResource" и "BuildMoreEnergy". Здесь указания передаются отдельным специализированным функциям, которые активируют у требуемых юнитов команды, такие как "атаковать" или "строить".
Именно так, собственно, всё и строится!
Спасибо за внимание, увидимся в следующем девлоге, посвященном ИИ.
С наилучшими пожеланиями, ваш Uveso.
Comments