Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
AI ИНСТРУКЦИЯ.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
82.22 Кб
Скачать

Общая информация для моддеров - Редакция 3

Под редакцией Arkhan 22.04.2007

Под редакцией Corsix 02.04.2006

Под редакцией Thudmeizer 23.04.2007

Перевод ALEXEI/mAmper 18.11.2014

Содержание:

  1. Введение

    1. Файлы в папках расы

    2. Краткое руководство по файлам

  2. Добавление новой расы

  3. Добавление новых юнитов к уже существующей расе

  4. Комбинирование модов

  5. Совместимость с другими версиями skirmish AI

  6. Управление AIControlPanel

  7. Устранение неполадок и детальная настройка

  8. Как отладить и протестировать наш АI

  1. Введение

В этой редакций AI структура кода была заменена, чтобы отделить инструкций для рас от основного ядра.

Ядро AI находится по пути ai\core. Там содержаться основные функции AI, используемые всеми расами. Эту часть кода не стоит изменять, если вы не являетесь разработчиком skirmish AI.

Если вы моддер который добавляет новую расу или изменяет уже существующую, то достаточно изменить только инструкции для этой расы, не затрагивая ядра, инструкции находятся по пути ai\races. Каждая раса имеет собственную папку.

Например, если вы хотите изменить AI расы Хаоса то путь к ней будет следующим: ai\races\chaos_marine_race.

    1. Файлы в папках расы:

Каждая папка расы (ai\races\name_race) содержит: файл-загрузчик (loader.ai) и три подпапки(info, strategies, tactics) с основными и дополнительными инструкциями AI.

Рассмотрим назначение каждой папки на примере расы Хаос:

Первая подпапка Data\ai\races\chaos_marine_race\info:

>> chaosunitstats.ai

В этом файле содержится основная информация о юнитах и их вооружении, а так же 'сила' юнита. 'Сила' – это показатель на основе которого AI делает вывод о результатах возможной стычки юнитов т.е. кто из них окажется сильнее и стоит ли ему отступить если его силы окажутся в меньшинстве, а так же формирует суммарную силу юнитов для реализаций стратегий защита/нападение. Это обязательный файл.

Вторая подпапка Data\ai\races\chaos_marine_race\strategies:

>> chaosbuildbasestrategy.ai

>> chaosstrategyinfo.ai

В этой папке находятся несколько важных файлов.

  1. chaosbuildbasestrategy.ai содержит информацию о строениях улучшениях и исследованиях.

  2. chaosstrategyinfo.ai содержит основные алгоритмы развития и поведения расы разделенные на три категории:

    1. BuildBaseStrategyInfo - Содержит один или более алгоритм постройки. Алгоритм определяет очередность действий и постройки (Унаследованный от метода buildbasestrategy ядра AI);

    2. BuildOrderStrategyInfo - Определяет начальную очередность строительства (в зависимости от условий сражения);

    3. AttackStrategyInfo - Небольшой и не особо важный раздел необходим для обеспечения совместимости.

Все уровни сложности AI описаны в одном файле и не существует разделения на Легкий, Обычный, и Сложный.

Третья подпапка Data\ai\races\chaos_marine_race\tactics:

>> bloodthirstertactic.ai

>> chaoslordtactic.ai

>> и т.д.

Эта папка содержит дополнительные файлы AI. Эти файлы описывают условия использования особых возможностей некоторых юнитов расы (особые тактики, способности).

Унаследовано из InfantryTactic/VehicleTactic из ядра AI.

2.1. Краткое руководство по файлам: (На примере Хаоса):

Подпапка Data\ai\races\chaos_marine_race\info:

>>chaosunitstats.ai

В этом файле указано значение UnitStrength, список доступного оружия и когда следует производить улучшение.

В данной секции:

UnitStrengths.chaos_squad_slave = 0

UnitStrengths.chaos_squad_cultist = 20

UnitStrengths.chaos_marine_squad = 50

LeaderStrengths.chaos_squad_cultist = 75

LeaderStrengths.chaos_marine_squad = 75

LeaderStrengths.chaos_squad_raptor = 75

Attachments.chaos_squad_cultist = {"chaos_squad_lord", "chaos_squad_sorcerer"}

Attachments.chaos_marine_squad = {"chaos_squad_lord", "chaos_squad_sorcerer"}

  • Значение UnitStrengths – параметр определяющий мощность юнита, обычно зависит от его стоимости;

  • Значение LeaderStrengths – определяет силу лидера(сержанта);

  • Параметр Attachments – определяет возможность присоединения командиров.

В следующей секции:

name = "Chaos Marine",

sbp_name = "chaos_marine_squad",

ebp_name = "chaos_marine_bolter",

class = UnitStatsAI.UC_HeavyInfantryMed,

rating = 4,

potential =

{

{

name = "chaos_bolter_tactical",

effectiveness = GenerateUnitEffectiveness(3.9,4.4,4.1,4.2,4.1,1.5,0.0,0.0,4.1,0.0,3.0,3.7,1.9,0.0, 0.0, 0.0, 0.0),

range = UnitStatsAI.RT_Ranged,

},

{

name = "chaos_heavy_bolter_tactical",

effectiveness = GenerateUnitEffectiveness(6.5,6.1,5.9,5.9,5.7,3.4,2.4,0.0,5.4,0.0,4.2,4.3,2.6,1.9, 0.0, 0.0, 0.0),

range = UnitStatsAI.RT_Ranged,

},

{

name = "chaos_plasma_gun_tactical",

effectiveness = GenerateUnitEffectiveness(6.1,5.1,5.1,5.3,7.1,4.9,3.8,2.2,7.1,2.2,6.5,0.0,4.1,3.2, 0.0, 0.0, 0.0),

range = UnitStatsAI.RT_Ranged,

},

{

name = "chaos_knife_tactical",

effectiveness = GenerateUnitEffectiveness(4.1,4.4,4.0,4.1,4.1,0.0,0.0,0.0,4.0,0.0,3.6,4.1,2.2,0.0, 0.0, 0.0, 0.0),

range = UnitStatsAI.RT_Melee,

},

}

},

{

name = "Chaos Raptor",

sbp_name = "chaos_squad_raptor",

ebp_name = "chaos_raptor",

class = UnitStatsAI.UC_HeavyInfantryMed,

rating = 4,

potential =

{

{

name = "chaos_flamer_raptor",

effectiveness = GenerateUnitEffectiveness(3.2,4.0,4.2,4.5,4.1,1.6,0.0,0.0,4.1,0.0,3.3,2.9,1.9,0.0, 0.0, 0.0, 0.0),

range = UnitStatsAI.RT_Ranged,

},

{

name = "chaos_bolt_pistol_raptor",

effectiveness = GenerateUnitEffectiveness(1.6,3.1,3.2,3.1,3.1,0.0,0.0,0.0,3.3,0.0,2.0,2.4,1.6,0.0, 0.0, 0.0, 0.0),

range = UnitStatsAI.RT_Ranged,

},

{

name = "chaos_chainsword_raptor",

effectiveness = GenerateUnitEffectiveness(5.1,5.6,5.3,5.3,4.6,2.4,0.7,0.0,5.3,0.0,4.2,4.0,2.8,0.0, 0.0, 0.0, 0.0),

range = UnitStatsAI.RT_Melee,

},

На что следует обратить внимание:

Юниты одних тиров и "весовых" категорий должны иметь схожие начальные параметры. Например, болтеры Космодесантников Хаоса и цепные мечи Рапторов Хаоса имеют схожие показатели. Выбор кого строить будет зависеть от тактики ведения боя.

Старайтесь сохранять порядок и последовательность добавляемого кода, например, распределите юнитов по возрастанию их силы.

Классы юнитов:

UnitStatsAI.UC_LightInfantryLow --Инженеры и разведчики

UnitStatsAI.UC_LightInfantryMed --Обычная пехота

UnitStatsAI.UC_LightInfantryHigh --Обычная пехота

UnitStatsAI.UC_HeavyInfantryMed --Тяжелая пехота

UnitStatsAI.UC_HeavyInfantryHigh --Тяжелая пехота

UnitStatsAI.UC_MonsterMed --Монстры

UnitStatsAI.UC_Commander --Командиры

UnitStatsAI.UC_VehicleLow --Легкая техника

UnitStatsAI.UC_VehicleMed --Средняя техника

UnitStatsAI.UC_VehicleHigh --Тяжелая техника и реликтовые юниты

UnitStatsAI.UC_MonsterHigh --Великие монстры и реликтовые юниты

UnitStatsAI.UC_AirLow --Легкие самолеты

UnitStatsAI.UC_AirMed --Средние самолеты

UnitStatsAI.UC_AirHigh --Тяжелые самолеты

В зависимости от класса юнита, будут использоваться подходящие отряды (против пехоты – антипехота, против техники – антитех.).

Решение использования отряда против конкретного юнита будет приниматься на основе показателей GenerateUnitEffectiveness.

Параметр GenerateUnitEffectiveness - для каждого оружия имеет диапазон значений от 0 до 10 (может быть дробным).

Для каждого из 17 GenerateUnitEffectiveness значений соответствует эффективность оружия против соответствующего вида брони (слева-направо):

tp_infantry_low, tp_tinfantry_med, tp_infantry_high, tp_infantry_heavy_med, tp_infantry_heavy _high, vehicle_low, tp_vehicle_med, tp_vehicle_high, tp_monster_med, tp_ monster_high, tp_commander, tp_building_low, tp_building_med, tp_building_high, tp_air_low, tp_air_med, tp_air_high

В качестве примера отметим, что Рапторы Хаоса более эффективны против техники чем болтеры Космодесантников Хаоса, но если неподалеку находится пехота, то для Космодесантников Хаоса оснащение тяжелыми болтерами будет приоритетным.

Более высокие значения эффективности оружия подскажут AI сделать улучшение.

Параметр "range" указывает дальность стрельбы оружия:

UnitStatsAI.RT_None -- Нет оружия

UnitStatsAI.RT_Melee -- Оружие ближнего боя

UnitStatsAI.RT_ShortRanged -- Оружие короткой дистанции (например, огнеметы)

UnitStatsAI.RT_Ranged -- Оружие дальней дистанции

Вы должны перечислить ВСЁ оружие в этом файле, иначе AI не сможет провести улучшение до "пропавшего" оружия.

Подпапка Data\ai\races\eldar_race\strategies:

>>chaosbuildbasestrategy.ai

Один из главных файлов инструкций для вашей расы, в нем описывается поведение AI для алгоритма постройки и развития. Советуем при создании взять как шаблон файл готовых стратегий.

Интересующие нас участки кода:

function ChaosBuildBaseStrategy:__init( baseinfo ) super( baseinfo )

AddDetectorUnit("unit_name")

  • С появлением дополнения DC была введена новая система обнаружения невидимых юнитов:

  • Теперь вы должны определить юнита-детектора при помощи метода

AddDetectorUnit("unit_name").

  • Если юнитов-детекторов больше одного, то вы можете вызвать эту функцию многократно.

    function ChaosBuildBaseStrategy:ChooseBuildProgram()

  • Выбирает какую из программ строительства использовать.

    function ChaosBuildBaseStrategy:EvaluateSquadCap()

  • Определяет как изменятся предел численности юнитов, исследованиями или зданиями.

Условие ставится следующим образом (в случае Хаоса):

CheckSquadCap(300, 0) и CheckSupportCap(150, 300) -- на первом месте необходимое количество влияния, на втором - энергии. Рекомендуется оставлять на уровне стоимости исследования или здания.

function ChaosBuildBaseStrategy:GetBuildingName( sType )

  • Проверка наличия основных зданий. Если AI чего то не найдет то он постарается построить недостающее здание.

    function ChaosBuildBaseStrategy:GetAddonBuilding( sType )

  • Проверка наличия важных апгрейдов на зданиях, например апгрейд турелей или прослушивающих постов.

    function ChaosBuildBaseStrategy:IsTierAddon( sName, iTargetTier )

  • Проверка на наличие апгрейдов тира (Эта функция применяется только если вы используете глобальные улучшения, используя функцию UpdateTierLevel() описанную ниже).

    function ChaosBuildBaseStrategy:UpdateTierLevel()

  • Определение текущего тира.

    function ChaosBuildBaseStrategy:GetUnitStats(sSquadName)

  • Позволяет AI контролировать лимит войск.

    function ChaosBuildBaseStrategy:BuildFlexible()

  • Устанавливает приоритетность постановки в очередь исследования.

Пример:

self:DynamicResearch("chaos_frag_grenade_research",2,25,75,0,0,"chaos_marine_squad",2)

Исследования "chaos_frag_grenade_research" будет поставлено в очередь во втором тире, за 25 влияния и 75 энергии, не требуя единиц пехоты или техники, если есть хотя бы 2 отряда "chaos_marine_squad".

Для динамической постройки строений:

Пример:

self:DynamicBuild("chaos_temple",2,1,800,0,0,0)

Постройка "chaos_temple" будет построена вторым зданием, на первом тире если есть 800 влияния,0 энергии, не требуя единиц пехоты или техник.

Для динамической постройки если нужно несколько зданий:

self:DynamicBuild("chaos_machine_pit", 2, 2, 200, 600, 0, 0)

self:DynamicBuild("chaos_machine_pit", 3, 3, 500, 1500, 0, 0)

Первое здание будет построено при выполнений первых требований, а второе после выполнения вторых условий.

function ChaosBuildBaseStrategy:ForceTech()

  • Проверяет уровень развития и если он окажется слишком низким, то AI поставит в приоритет развития в ущерб нападению (не обязательная функция).

function ChaosBuildBaseStrategy:RangedDeepStrike(iBuildingID)

//Не найден в Soulstorm//

  • Проверяет есть ли у строения возможность десантирования.(неточный перевод!!!)

    function ChaosBuildBaseStrategy:GetPlacementType(iBuildingID)

  • Новые возможности для постройки зданий (Унаследовано от GetPlacementType(iBuildingID)).

Вы можете указать следующие типы расположения:

  • HQ => Первое на основной базе, второе на базе союзника (Можно изменить под себя self.m_iNumHQAtStartPos. Используется некронами.);

  • Military => Строится и на основной, и на передовых базах;

  • Front1 => Строит 1 здание у ближайшего к противнику поста прослушки / большего генератора / главного здания;

  • Front2 => Застраивает зданиями ближайший к противнику пост прослушки / большей генератор / главное здание;

  • Mine => Строится на передовых и критических зонах;

  • Baseback => Строится в глубине базы.

function ChaosBuildBaseStrategy:RelicRequired(sName)

  • Описывает юниты/исследования/аддоны требующие реликтовых точек.

Следующие функций не используются Хаосом но так же важны:

function MarineBuildBaseStrategy:ModifySquadDemand(iUnitID)

  • Используется космодесантом, описывает перевозку юнитов.

>>chaosstrategyinfo.ai

Содержит шаблонные настройки, и алгоритмы развития.

Все что находится до секций BuildPrograms не нуждается в особом пояснений и настраивается под ваши нужды.

При проектировки алгоритма развития BuildProgram, следует учесть:

Участки кода – действия должны быть описаны в фигурных скобках:

{Min. Tier, Min. Requisition, Min. Power, Min. ArmyStrength, Object-Count (or Percentage), Object-Type, Object-Name}

Расшифровка элементов:

  • Min. Tier – какой тир необходим минимально;

  • Min. Requisition – минимальное кол-во влияния;

  • Min. Power – минимальное кол-во энергии;

  • Min. ArmyStrength – минимальная сила армии;

  • Object-Count (в процентах) – количество;

  • Object-Type – тип;

  • Object-Name – имя.

Примеры:

    1. {1, 700, 150, 0, 1, "Building", "chaos_hq"}

Создать здание "chaos_hq" в 1 тир, при наличии 700 влияния и 150 энергии, не имеет ограничения по силе армий, в количестве 1 шт.

Как правило, главное здание находится в начале очереди постройки и если оно будет разрушено, то AI его восстановит.

    1. {1, 220, 50, 0, 1, "Unit", "chaos_squad_lord"}

Создать юнит "chaos_squad_lord" в 1 тир, при наличии 220 влияния и 50 энергий, не имеет ограничения по силе армий, в количестве 1 шт.

ВАЖНО: Значение минимальной силы армий здесь означает немного другое, если она равна 0 то юнит будет построен, если больше 0, то юнит будет построен тогда, когда значение Min. ArmyStrength будет меньше указанного значения.

    1. {1, 100, 75, 0, 100, "TurretAddon", "chaos_list_post_addon_1"}

Построить аддон "chaos_list_post_addon_1" в первый тир, при наличии 100 влияния и 75 энергий, в 100% случаях. Последний параметр задается в процентах, вы можете контролировать процентное соотношение данного аддона на однотипных строениях.

    1. {1, 300, 100, 800, 100,"Addon", "chaos_hq_addon_1"}

То же самое за исключением "800" вместо "0". Будет объяснено ниже - Min. ArmyStrength .

    1. {1, 50, 25, 500, 1, "Research", "chaos_furious_charge_research" }

Провести исследование "chaos_furious_charge_research" в 1 тире, при наличий 50 влияния и 25 энергий, "500" то же что и в предыдущем, единожды.

    1. {2, 0, 0, 0, 0, "Restrict", "chaos_squad_cultist"}

При достижений 2 тира юнит "chaos_squad_cultist" больше не будет производиться.

    1. {1, 0, 0, 0, 0, "Rush", "Prepare"}

Инициирует тактику "рывка". Подробнее будет объяснено позже.

Совет:

Если определить "рывок" {1, 0, 0, 0, 0, "Rush", "Prepare"} тогда блок постройки будет ограничен, но по-прежнему сможет, защищается, укрепляя позиций.

Если же его определить следующим образом {1, 0, 0, 0, 1,"Rush", "Prepare"} то отключается возможность укрепления позиции.

    1. {2, 6, 6, 1500, 0,"Rush", "Unleash"}

Завершает "рывок" и возобновляет обычную тактику.

Создание buildprogram довольно простое. Вы можете использовать файлы стандартных рас как шаблон. Все же знать особенность не повредит.

Всегда проверяйте, чтобы ваша buildprogram была последовательна, если вы забудете хотя бы один элемент, то AI не сможет развиться дальше.

Проверяйте синтаксис написания вашего buildprogram, а так же правильность имен, иначе AI не сможет найти указанный элемент.

Значение Min. ArmyStrength отображает силу всей армии вместе (оно увеличивается по мере постройки юнитов).

В данном случае она используется для замедления развития AI, чтобы он не развивался слишком быстро и был приближен к действиям реального игрока. Используя это значение, вы можете составлять программу развития в нужном порядке, однако, AI будет учитывать значение Min. ArmyStrength как условие выполнения данной команды

Пример:

{1, 220, 50, 0, 1, "Unit", "chaos_squad_lord"},

{1, 200, 75, 500, 1, "Building", "chaos_armoury"},

{1, 100, 75, 0, 1, "TurretAddon", "chaos_list_post_addon_1"},

{1, 300, 100, 800, 1, "Addon", "chaos_hq_addon_1"},

{1, 150, 75, 500, 1, "Building", "chaos_turret_bolter" }

{1, 50, 25, 500, 1, "Research", "chaos_furious_charge_research"},

{1, 100, 75, 250, 100, "TurretAddon", "chaos_list_post_addon_1"},

{1, 40, 20, 500, 1, "Research", "chaos_champion_melee_research_1"}

Хотя все действия производятся в 1 тире и очередь выполнения действий уже определена, из-за значений Min. ArmyStrength порядок слегка измениться:

При Min. ArmyStrength = 0 построить "chaos_squad_lord" и улучшить один из постов прослушки.

По достижению Min. ArmyStrength = 250 начнется автоматическое улучшение ВСЕХ постов прослушки.

При достижении Min. ArmyStrength = 500 будут выполнены все оставшиеся задачи имеющие данное требование.

И наконец, по достижению Min. ArmyStrength = 800 будет изучен аддон "chaos_hq_addon_1".

Существует некоторый средний диапазон значений Min. ArmyStrength соответствующий игровым тирам:

Тир Min.ArmyStrength значение:

    1. 0 - 1000

    2. 1000 - 2500

    3. 2000 - 3000

    4. 2500 - 6000

Как уже говорилось выше значение "0" для любого действия означает - что оно будет выполнено немедленно (или по достижению остальных условий).

В начале второго тира некоторые постройки имеют значение Min. ArmyStrength всего лишь 250, в основном это здания создающие технику, которые должны быть построены даже если AI потерял большинство войск.

Таким образом, значение Min.ArmyStrength медленно растет до пикового значения 6000 в конце 4 тира.

Примечание: супер юниты (реликтовые) обычно имеют небольшие требование Min. ArmyStrength около 250, это делается для того, чтобы он был вызван как только будет доступен.

Пример:

{4, 400, 400, 250, 1, "Research", "chaos_bloodthirster_research"},

{4, 265, 155, 3000, 100,"TurretAddon", "chaos_list_post_addon_2"},

{4, 700, 150, 6000, 2, "Building", "chaos_hq"}

Из за меньшего требования армий, исследование "chaos_bloodthirster_research" будет выполнено раньше, чем апгрейд прослушивающего поста и постройка дополнительных главных зданий.

Функция "Restrict"

Она запрещает постройку юнита (или других типов) по достижению определенных условий.

Стоит отметить, что в buildprograms Хаоса данная функция используется в основном в начале нового тира, чтобы ограничить постройку слабых юнитов и освободить место для более сильных.

Пример:

{2, 0, 0, 0, 0, "Restrict", "chaos_squad_cultist"}, --На втором тире

{3, 0, 0, 0, 0, "Restrict", "chaos_marine_squad"} --На третьем тире

Так же можно указывать более одного ограничения в одном тире, просто добавив ещё строчек:

{2, 0, 0, 0, 0, "Restrict", "chaos_squad_cultist"},

{2, 0, 0, 0, 0, "Restrict", "chaos_marine_squad"},

{2, 0, 0, 0, 0, "Restrict", "chaos_squad_raptor"}

Функция "Rush"

Используется для описания тактики ведения боя – будет ли это попытка быстрого нападения или накопления огневой мощи и последующий экстерминатус.

Примеры описания "Rush" стратегий:

{1, 0, 0, 0, 0, "Rush", "Prepare"}

Данная строка описывает начало "рывка"

Совсем не обязательно начинать атаковать с первых минут игры, можно немного отложить это дабы в бою была поддержка более тяжелых юнитов а так же техники.

{2, 0, 0, 1500, 0, "Rush", "Unleash"}

Данная строка описывает завершение "рывка", по достижению второго тира и силы армий равной 1500 начнется атака.

Как только "рывок" завершится, AI продолжит обычное развитие. Если во время подготовки или во время проведения атаки компьютер был атакован превосходящими силами, то он отменит стратегию "рывка" и продолжит обычное развитие.

ОБЯЗАТЕЛЬНО вначале сделайте вашу стратегию без использования "Rush" для тестирования возможностей вашей расы и выявления проблем.

"SquadLimits ="

В этой секций описывается среднее количество определенных отрядов в игре.

Должны быть перечислены ВСЕ ваши отряды!

Если необходимо случайное значение а не точное то используйте "math.random" ( X,Y ) X-Y диапазон случайных значений.

Так же значения не должны превышать лимитов поставленных на отряды.

"BuildOrderStrategyInfo ="

Эти очереди постройки будут использоваться в первую минуту игры. Вы можете просто скопировать их т.к. они аналогичны практически для всех рас.

Всего их три:

  1. "Basic" - Используется в большинстве игр (Игра с средними условиями);

  2. "QuickStart" - Используется в случае выбора вами «быстрого старта» (Добавление дополнительных зданий постройки юнитов);

  3. "LargeMap" - Используется в случае, если карта имеет большой размер (Создается дополнительный отряд для захвата точек).

"AttackStrategyInfo ="

В этой секций описано нижнее значение силы армий, если значение опуститься ещё ниже то AI отступит, обычно это значение равно 750.

Подпапка Data\ai\races\eldar_race\tactics:

Содержит специальные инструкции для отдельных юнитов.

Совет: старайтесь описать тактики для каждого юнита - это разнообразит поведение AI, так же советуем посмотреть, как реализованы тактики у стандартных рас и юнитов.

Примечание: с введением нового метода IsSupportDetector(), Вы можете определить тактики для юнитов способных видеть невидимые цели, например, будут ли они присоединятся к общей атаке или останутся в защите.

Файл в корневой папке Data\ai\races\chaos_marine_race:

>> loader.ai

Файл загрузки должен быть для КАЖДОЙ расы. Он служит интерфейсом между ядром и файлами инструкций для расы.

Файл загрузки содержит определение класса (class) конкретной расы с фиксированными методами. «Фиксированные методы» означают, что файлы-загрузчики имеют одинаковую структуру, но для каждой расы пути обращения к файлам различны.

Большинство методов загружают и инициализируют инструкции AI данной расы и/или предоставляют информацию о расе.

Убедитесь, что файл-загрузчик назван loader.ai и что имя папки расы соответствует имени расы (например: space_marine_race, eldar_race, guard_race, ...)

Этот файл в основном указывает основные логические пути к файлам и папкам, связанным с данной расой.

Интересные моменты:

  1. Часть кода:

function chaos_marine_race:GetRaceName()

return "chaos_marine_race"

  • Убедитесь что название расы написано нижним регистром с окончанием "_race"

  • Так же убедитесь, что название class соответствует названию расы.

  1. Часть кода:

function chaos_marine_race:LoadRace( eDifficulty )

  • Эта секция загружает файлы общей тактики и индивидуальные модели поведения юнитов.

  • Так же секция содержит function ChaosMarineRace:CreateTactic(oSquadAI) ассоциирующую модель поведения с юнитом которому она принадлежит.

  1. Часть кода:

function chaos_marine_race:GetInfo(sType):

Check info type

if (sType == "TurretPower") then

return 300

elseif (sType == "SupportAllyFactor") then

return 8 / 4

elseif (sType == "AttackModifier") then

return 10

elseif (sType == "CriticalRangeIncreasePerTier") then

return 10

elseif (sType == "Min. ArmyStrength PerTier") then

return 750

elseif (sType == "AttackRatio") then

return 4 / 5

elseif (sType == "RetreatRatio") then

return 3 / 5

elseif (sType == "InvisibleBuildings") then

return false

    1. Значение TurretPower следует учитывать до перехода на второй тир, оно определяет, будет ли держаться враг от ваших турелей на расстоянии. Следует заметить, что у орков это значение ниже среднего, это компенсируется большим количеством WAAAAGH! баннеров что позволяет им держать противника на расстоянии. Приемлемым значением является 150-300.

    2. Значение SupportAllyFactor – показатель вероятности помощи союзникам, варьируется в диапазоне между:

  • 10 / 4 (Всегда помогать);

  • 8 / 4 (Помощь по возможности);

  • 6 / 4 (Неохотная помощь);

  • 1 (Нерешительно).

Приемлемые значения: от "9 / 4" до "7 / 4". Например, Эльдары ("10/4") предлагают хорошую поддержку за счет своей мобильности.

    1. Значение AttackModifier – показатель агрессивности, варьируется от

-10(Игра в защиту) до 10(Игра в нападение).

    1. Значение CriticalRangeIncreasePerTier – Уровень осторожности (при попытке атаки на свою или союзную базу), по умолчанию значение 10.

    2. Значение Min. ArmyStrength PerTier – Минимальная сила армии для атаки (на тир) – базовое значение 750.

    3. Значение AttackRatio и Retreat Ratio – Устанавливает агрессивность расы, т.е. длительность преследования отступающих войск и условия прекращения преследования, значения обычно не меняется и остается таким как указано в примере выше.

  1. Часть кода:

function chaos_marine_race:CreateBaseTactic(oBuilding)

Это новый добавленный метод для описания тактики для строений. Например, эльдарские звездные врата имеют отдельные файлы тактики, для их более разумного размещения.

  1. Часть кода:

function chaos_marine_race:GetBuildingType(sBuildingName)

Устанавливает значения опасности здания для противника – их ‘сила’. Например, турели имеют большую опасность, нежели генераторы.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]