500

Руководство для начинающих по написанию скриптов AI - всеобъемлющее руководство, часть 2

Опять не поместилось
Уважаемые читатели, я приступаю ко второй части этого руководства по ИИ. Я делаю это в моих интересах и в интересах общества, и, надеюсь, вы чему-то научитесь из этого. Я никогда не собираюсь обидеть; никогда не путать; наша цель - простой английский и английский.

Вы спросите, где мы начнем? Мы начнем с того места, где остановились.
Никогда в истории моддинга мы не заходили так далеко. И все же мы ничего не знаем. Просто парадокс, а? Некоторые кодеры знают больше, чем другие; некоторые имеют больше опыта, чем другие. В конце концов, есть бесконечное количество улучшений, которые можно было бы сделать, и я полагаю, что если бы у нас было время отложить их все, даже у всего мира не было бы достаточно книг для них. Наша цель здесь - продолжить работу, которую мы начали; чтобы увидеть наши собственные возможности в модификации искусственного интеллекта игры. Я смиренно представляю:

всеобъемлющее руководство для начинающих по модификации ИИ, часть 2

За последние два года я многое узнал о том, что делать и чего не делать, особенно когда речь идет о кодировании. Зрелый кодер понимает, что самые простые исправления - лучшие. Поэтому я умоляю вас надеть маску смирения, надеть пальто, пропитанное дождем, и прижаться к кофейне, чтобы вы и я могли немного поговорить вместе. Проще говоря, я приглашаю вас потратить время на чтение моего руководства, вместо того, чтобы тратить часы времени, пытаясь выяснить все самостоятельно, потому что я не мог видеть, как вы страдаете, как когда-то делал, - изо всех сил пытаясь понять. Вы не без помощи или сторонников; сообщество - ваш дом, даже если у вас его вообще нет.

----

Итак, мы начинаем с нашего Techtree и Protoy в нашей резервной папке. Напомним, что буква «у» указывает на то, что они предназначены для пакета «Расширение азиатских династий», включая все подразделения и техников, относящихся к азиатским династиям.

Я начну с того, что помогу тебе немного. Первая технология, которую вы увидите в дереве технологий:

Код
<TechTree version ='3'>
<Tech name ='Age0French' type ='Normal'>
<DBID>105</DBID>
<Status>UNOBTAINABLE</Status>
<Flag>Shadow</Flag>
<Effects>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>Explorer</Target></Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>TownCenter</Target></Effect>
<Effect type ='TechStatus' status ='active'>AAStandardStartingTechs</Effect>
<Effect type ='TechStatus' status ='obtainable'>RGVoltigeur</Effect>
<Effect type ='TechStatus' status ='obtainable'>RGGendarmes</Effect>
<Effect type ='TechStatus' status ='obtainable'>ChurchCodeNapoleon</Effect>
<Effect type ='TechStatus' status ='obtainable'>ChurchGardeImperial1</Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>Hussar</Target></Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>Sheep</Target></Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>House</Target></Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>Mill</Target></Effect>
<Effect type ='TechStatus' status ='obtainable'>VeteranMusketeers</Effect>
<Effect type ='TechStatus' status ='obtainable'>GuardMusketeers</Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>Musketeer</Target></Effect>
<Effect type ='TechStatus' status ='obtainable'>ChurchGardeImperial3</Effect>
<Effect type ='TechStatus' status ='obtainable'>ChurchGardeImperial2</Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>Coureur</Target></Effect>
<Effect type ='TechStatus' status ='obtainable'>GuardHalberdiers</Effect>
<Effect type ='TechStatus' status ='obtainable'>GuardDragoons</Effect>
<Effect type ='TechStatus' status ='obtainable'>VeteranPikemen</Effect>
<Effect type ='TechStatus' status ='obtainable'>ImperialHalberdiers</Effect>
<Effect type ='TechStatus' status ='obtainable'>ImperialGendarme</Effect>
<Effect type ='TechStatus' status ='obtainable'>ImperialVoltigeur</Effect>
<Effect type ='TechStatus' status ='obtainable'>ImperialMusketeers</Effect>
<Effect type ='TechStatus' status ='obtainable'>ImperialDragoons</Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>Capitol</Target></Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>Falconet</Target></Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>ArtilleryDepot</Target></Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>Stable</Target></Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>Barracks</Target></Effect>
<Effect type ='TechStatus' status ='obtainable'>VeteranCrossbowmen</Effect>
<Effect type ='TechStatus' status ='obtainable'>PoliticianGeneral</Effect>
<Effect type ='TechStatus' status ='obtainable'>PoliticianPresidente</Effect>
<Effect type ='TechStatus' status ='obtainable'>PoliticianMohawk</Effect>
<Effect type ='TechStatus' status ='obtainable'>PoliticianEngineer</Effect>
<Effect type ='TechStatus' status ='obtainable'>PoliticianMusketeerFrench</Effect>
<Effect type ='TechStatus' status ='obtainable'>PoliticianNaturalist</Effect>
<Effect type ='TechStatus' status ='obtainable'>PoliticianMarksman</Effect>
<Effect type ='TechStatus' status ='obtainable'>PoliticianQuartermaster</Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>Plantation</Target></Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>TradingPost</Target></Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>Outpost</Target></Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>Caravel</Target></Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>Dock</Target></Effect>
<Effect type ='TechStatus' status ='active'>XPTrickle</Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>Market</Target></Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>Arsenal</Target></Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>Skirmisher</Target></Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>CWallGate</Target></Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>LivestockPen</Target></Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>Church</Target></Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>WallStraight2</Target></Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>WallStraight5</Target></Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>WallConnector</Target></Effect>
<Effect type ='TechStatus' status ='obtainable'>UnlockPoliticianTycoonFrench</Effect>
<Effect type ='TechStatus' status ='obtainable'>UnlockPoliticianScoutFrench</Effect>
<Effect type ='TechStatus' status ='obtainable'>UnlockPoliticianPhilosopherPrinceFrench</Effect>
<Effect type ='TechStatus' status ='obtainable'>UnlockPoliticianGovernorFrench</Effect>
<Effect type ='TechStatus' status ='obtainable'>UnlockPoliticianExiledPrinceFrench</Effect>
<Effect type ='TechStatus' status ='obtainable'>UnlockPoliticianCavalierFrench</Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>Pikeman</Target></Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>Crossbowman</Target></Effect>
<Effect type ='TechStatus' status ='obtainable'>ImperialHussars</Effect>
<Effect type ='TechStatus' status ='obtainable'>GuardHussars</Effect>
<Effect type ='TechStatus' status ='obtainable'>VeteranHussars</Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>Halberdier</Target></Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>FieldHospital</Target></Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>Priest</Target></Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>Cuirassier</Target></Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>Culverin</Target></Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>Mortar</Target></Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>Dragoon</Target></Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>Monitor</Target></Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>Frigate</Target></Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>Galleon</Target></Effect>
<Effect type ='TechStatus' status ='obtainable'>Bayonet</Effect>
<Effect type ='TechStatus' status ='active'>Levy</Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>FishingBoat</Target></Effect>
<Effect type ='Data' action ='SpawnCannon' amount ='1.00' subtype ='ActionEnable' relativity ='Absolute'>
<Target type ='ProtoUnit'>Factory</Target></Effect>
<Effect type ='TechStatus' status ='obtainable'>ImperialCannon</Effect>
<Effect type ='TechStatus' status ='obtainable'>ImperialFieldGun</Effect>
<Effect type ='TechStatus' status ='obtainable'>FieldGun</Effect>
<Effect type ='TechStatus' status ='obtainable'>VeteranDragoonsShadow</Effect>
<Effect type ='TechStatus' status ='obtainable'>VeteranSkirmishersShadow</Effect>
<Effect type ='TechStatus' status ='obtainable'>ImperialMonitors</Effect>
<Effect type ='TechStatus' status ='obtainable'>ImperialManOWar</Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>Saloon</Target></Effect>
<Effect type ='TechStatus' status ='obtainable'>XPRevolutionLouverture</Effect>
<Effect type ='TechStatus' status ='obtainable'>XPRevolutionSantander</Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>xpPetard</Target></Effect>
<Effect type ='TechStatus' status ='obtainable'>ImperialHorseArtillery</Effect>
<Effect type ='TechStatus' status ='obtainable'>HeavyHorseArtillery</Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>xpHorseArtillery</Target></Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>xpSpy</Target></Effect>
<Effect type ='TechStatus' status ='obtainable'>ShipHowitzers</Effect>
</Effects>
</Tech>


Вопрос: ну, сэр, что это значит? Что это за технология?

Ответ: Это технология эпохи открытий французской цивилизации. Технология Age0French включает в себя все подразделения, политики и специальные технологии для Франции, а также модернизирует это:

<Effect type ='TechStatus' status ='active'>AAStandardStartingTechs</Effect>

Прежде чем спросить, что такое AAStandardStartingTechs, я могу объяснить: это маленькие вещи, которые есть в каждой европейской цивилизации. У цивилизаций коренных американцев и азиатских цивилизаций также есть свои «Стандартные технологии», но сейчас мы не будем вдаваться в подробности.

Однако, как примечание:

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

Список Age0Techs для всех цивилизаций в том порядке, в котором они появляются в Techtree (есть также некоторые для кампаний, но они не имеют значения в данный момент):

Age0French (Tech DBID (число): 105)
Age0Russian (Технический DBID (номер): 214)
Age0British (Технический DBID (номер): 232)
Age0Dutch (Технический DBID (номер): 233)
Age0German (Технический DBID (номер): 235)
Age0Portuguese (Технический DBID (номер): 236)
Age0Ottoman (Технический DBID (номер): 238)
Age0Spanish (Технический DBID (номер): 309)
Age0XPIroquois (Технический DBID (номер): 2713)
Age0XPAztec (Технический DBID (номер): 2750)
Age0XPSioux (Технический DBID (номер): 2751)
ypAge0Japanese (Технический DBID (номер): 3525)
ypAge0Chinese (Технический DBID (номер): 3529)
ypAge0Indians (Технический DBID (номер): 3530)

Если вы видите ypAge0IndiansSPC или что-либо с «SPC», обратите внимание, что это принадлежит одиночному игроку кампания. То же самое касается юнитов с SPC перед их именем.

------

Кодирование ИИ: Как добавить техников, как для себя, так и для ИИ

Есть семь шагов, чтобы заставить ИИ исследовать новую технологию. Это

- Создание Технологии в техническом дереве, включение его в Age0Tech или с помощью технологии «Теней» (например, тех, которые используются для Ветеранских Стрелков, Ветеранских Драгун, которые в техническом дереве называются «VeteranSkirmishersShadow» и «VeteranDragoonsShadow»)

- Предоставление Tech имени и описания в файле randommapstringsy или stringtabley (randommapstringsy - это файл, который просто добавляет строки к stringtabley, а stringtabley содержит все имена и описания техников, но они не являются пробелами между строками кода, что делает его беспорядочным и трудно изменить. По правде говоря, эти два файла абсолютно одинакового типа).

- Заставить ИИ построить здание, в котором вы сможете исследовать эти новые технологии:

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

- Также включить для определенных цивилизаций

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

- придание ему высокого приоритета, например, cEconomyEscrowID, 80); или cEconomyEscrowID, 99); где 99 является высшим приоритетом.

- ДОПОЛНИТЕЛЬНО: наконец, полезная вещь, но не обязательная, «план исследований», который сообщает компьютеру заранее, чтобы он инвестировал достаточно ресурсов, прежде чем он состарится или в течение его возраста, чтобы попытаться собрать достаточно ресурсов для этой технологии / здания. Например, это может заставить ИИ построить другой Городской Центр в Возрасте 3.

-----
Пример:

Код
<Tech name ='VeteranSkirmishersShadow' type ='Normal'>
<DBID>2663</DBID>
<ResearchPoints>0.0000</ResearchPoints>
<Status>UNOBTAINABLE</Status>
<Flag>Shadow</Flag>
<Prereqs>
<TechStatus status ='Active'>Fortressize</TechStatus></Prereqs>
<Effects>
<Effect type ='Data' amount ='1.20' subtype ='Hitpoints' relativity ='BasePercent'>
<Target type ='ProtoUnit'>Skirmisher</Target></Effect>
<Effect type ='SetName' proto ='Skirmisher' culture ='none' newName ='41752'></Effect>
<Effect type ='Data' amount ='0.00' subtype ='UpdateVisual' unittype ='Skirmisher' relativity ='Absolute'>
<Target type ='Player'></Target></Effect>
<Effect type ='Data' amount ='1.20' subtype ='Damage' allactions ='1' relativity ='BasePercent'>
<Target type ='ProtoUnit'>Skirmisher</Target></Effect>
</Effects>
</Tech>
<Tech name ='VeteranDragoonsShadow' type ='Normal'>
<DBID>2664</DBID>
<ResearchPoints>0.0000</ResearchPoints>
<Status>UNOBTAINABLE</Status>
<Flag>Shadow</Flag>
<Prereqs>
<TechStatus status ='Active'>Fortressize</TechStatus></Prereqs>
<Effects>
<Effect type ='Data' amount ='1.20' subtype ='Hitpoints' relativity ='BasePercent'>
<Target type ='ProtoUnit'>Dragoon</Target></Effect>
<Effect type ='SetName' proto ='Dragoon' culture ='none' newName ='41753'></Effect>
<Effect type ='Data' amount ='0.00' subtype ='UpdateVisual' unittype ='Dragoon' relativity ='Absolute'>
<Target type ='Player'></Target></Effect>
<Effect type ='Data' amount ='1.20' subtype ='Damage' allactions ='1' relativity ='BasePercent'>
<Target type ='ProtoUnit'>Dragoon</Target></Effect>
</Effects>
</Tech>


«Теневая» технология в игровом языке означает, что она обновляется автоматически, когда она включена; таким образом, теневые технологии, как правило, бесплатны. Некоторые технологии активируются технологией «Fortressize» (технология, которую получают все, но каждая цивилизация имеет свою особую технологию Fortressize; например, «FortressizePortuguese» и т. Д.). Существуют также «Colonialize», отдельные «ColonizializeBritish» технологии и т. Д., «Industrialize», «IndustrializeDutch» и т. Д., «Imperialize» и «ImperializeOttomans» и т. Д. Обратите внимание, что у этих выше 0 исследований нет. точки.

Исследовательская точка - одна игровая секунда игры.

Вспомните тогда это:

Код
<TechTree version ='3'>
<Tech name ='Age0French' type ='Normal'>
<DBID>105</DBID>
<Status>UNOBTAINABLE</Status>
<Flag>Shadow</Flag>
<Effects>


Разве это не кажется знакомым? Когда доступно, он «модернизирует» французскую цивилизацию бесплатно, позволяя вам играть за Францию. Точно так же мы можем взглянуть на обновляемую технологию:

Код
<Tech name ='FactorySteamPower' type ='Normal'>
<DBID>1077</DBID>
<DisplayNameID>29530</DisplayNameID>
<Cost resourcetype ='Food'>250.0000</Cost>
<Cost resourcetype ='Wood'>250.0000</Cost>
<ResearchPoints>30.0000</ResearchPoints>
<Status>UNOBTAINABLE</Status>
<Icon>ui\techs\steam_power\steam_power</Icon>
<RolloverTextID>29529</RolloverTextID>
<Flag>CountsTowardEconomicScore</Flag>
<Prereqs>
<TechStatus status ='Active'>Industrialize</TechStatus></Prereqs>
<Effects>
<Effect type ='Data' action ='AutoGatherCoin' amount ='1.30' subtype ='WorkRate' unittype ='Gold' relativity ='BasePercent'>
<Target type ='ProtoUnit'>Factory</Target></Effect></Effects>
</Tech>


Эта технология относится к обновлению «Steam Power» на фабрике.

Вот пример отправления Homecity:

Код
<Tech name ='HCRidingSchoolGerman2' type ='Normal'>
<DBID>2641</DBID>
<DisplayNameID>37519</DisplayNameID>
<Cost resourcetype ='Ships'>1.0000</Cost>
<ResearchPoints>40.0000</ResearchPoints>
<Status>UNOBTAINABLE</Status>
<Icon>ui\techs\hc_spanish_riding_school\hc_spanish_riding_school</Icon>
<RolloverTextID>37518</RolloverTextID>
<Flag>HomeCity</Flag>
<Effects>
<Effect type ='Data' amount ='1.10' subtype ='MaximumVelocity' relativity ='BasePercent'>
<Target type ='ProtoUnit'>AbstractCavalry</Target></Effect>
<Effect type ='Data' amount ='4.00' subtype ='FreeHomeCityUnit' unittype ='Uhlan' relativity ='Absolute'>
<Target type ='Player'></Target></Effect>
<Effect type ='TextOutput'>41903</Effect>
</Effects>
</Tech>


Эта доставка по городу относится к «Испанской школе верховой езды» для немецкой цивилизации.

Обратите внимание, что техники сРодной городНЕ МОЖЕТ быть модернизирован в зданиях; они могут быть размещены только на родине. Если вы хотите использовать технологию homecity в качестве обычной технологии, скопируйте ее и вставьте в конец вашего techtree, переименуйте ее в нечто новое и удалите флаг homecity.

------
Вопрос: Как добавить техников к Протою, в новые / разные здания?

Ответ: добавив техников на techrows к зданиям в протои.

*** Один совет: лучше копировать, а потом модифицировать, а не делать технику или блок с нуля. Никогда не думайте, что вам нужно писать что-то с нуля, если уже есть доступная вещь из Techtree / Protoy / AI3. Манипулируйте больше, чем зарабатываете, и вы станете превосходным программистом, а также сэкономите гораздо больше времени.

Как примечание, я скопировал и вставил весь свой код прямо из Techtree / Protoy / AI3. Я сделал больше копирования, затем изменил, чем я сделал оригинальные технологии; на самом деле, я никогда не писал технику без предварительного копирования и вставки оригинала.

------

Но как мы можем добавить технологии в зданиях?

Мы открываем Протой. Если мы видим правильно, первый блок, который появляется, должен быть таким:

Код
<Proto version ='11'>
<Unit id ='712' name ='xpIroquoisWarChief'>
<DBID>1091</DBID>
<DisplayNameID>43489</DisplayNameID>
<EditorNameID>43493</EditorNameID>
<ObstructionRadiusX>0.4900</ObstructionRadiusX>
<ObstructionRadiusZ>0.4900</ObstructionRadiusZ>
<FormationCategory>Mobile</FormationCategory>
<MaxVelocity>4.5000</MaxVelocity>
<MaxRunVelocity>6.5000</MaxRunVelocity>
<MovementType>land</MovementType>
<TurnRate>8.0000</TurnRate>
<AnimFile>units\natives\iroquois\war_chief\war_chief.xml</AnimFile>
<ImpactType>Flesh</ImpactType>
<Icon>ui\units\IRO_warchief_icon</Icon>
<MinimapIcon>ui\minimap\hero</MinimapIcon>
<PortraitIcon>ui\units\IRO_warchief_portrait</PortraitIcon>
<SelectionPriority>5</SelectionPriority>
<RolloverTextID>43488</RolloverTextID>
<ShortRolloverTextID>43487</ShortRolloverTextID>
<InitialHitpoints>500.0000</InitialHitpoints>
<MaxHitpoints>500.0000</MaxHitpoints>
<LOS>18.0000</LOS>
<ProjectileProtoUnit>InvisibleProjectile</ProjectileProtoUnit>
<AutoAttackRange>18.0000</AutoAttackRange>
<UnitAIType>RangedCombative</UnitAIType>
<TrainPoints>20.0000</TrainPoints>
<BuildLimit>1</BuildLimit>
<Bounty>100.0000</Bounty>
<Cost resourcetype ='Gold'>200.0000</Cost>
<AllowedAge>0</AllowedAge>
<Armor type ='Ranged' value ='0.1000'></Armor>
<UnitType>LogicalTypeHealed</UnitType>
<UnitType>LogicalTypeNeededForVictory</UnitType>
<UnitType>LogicalTypeHandUnitsAutoAttack</UnitType>
<UnitType>LogicalTypeLandMilitary</UnitType>
<UnitType>LogicalTypeScout</UnitType>
<UnitType>LogicalTypeValidSPCUnitsDeadCondition</UnitType>
<UnitType>LogicalTypeGarrisonInShips</UnitType>
<UnitType>LogicalTypeRangedUnitsAutoAttack</UnitType>
<UnitType>LogicalTypeVillagersAttack</UnitType>
<UnitType>LogicalTypeHandUnitsAttack</UnitType>
<UnitType>LogicalTypeRangedUnitsAttack</UnitType>
<UnitType>LogicalTypeMinimapFilterMilitary</UnitType>
<UnitType>ConvertsHerds</UnitType>
<UnitType>AbstractRangedInfantry</UnitType>
<UnitType>AbstractCanSeeStealth</UnitType>
<UnitType>Ranged</UnitType>
<UnitType>AbstractGunpowderTrooper</UnitType>
<UnitType>HasBountyValue</UnitType>
<UnitType>AbstractCavalryInfantry</UnitType>
<UnitType>AbstractInfantry</UnitType>
<UnitType>Hero</UnitType>
<UnitType>Unit</UnitType>
<UnitType>Military</UnitType>
<UnitType>UnitClass</UnitType>
<Train row ='0' page ='6' column ='1'>TradingPost</Train>
<Train row ='0' page ='6' column ='0'>TownCenter</Train>
<Train row ='0' page ='6' column ='3'>NatBlowgunAmbusher</Train>
<Train row ='0' page ='6' column ='4'>NatClubmanLoyal</Train>
<Train row ='0' page ='6' column ='2'>PetWolf</Train>
<Train row ='0' page ='6' column ='5'>PetCougar</Train>
<Flag>CollidesWithProjectiles</Flag>
<Flag>ApplyHandicapTraining</Flag>
<Flag>CorpseDecays</Flag>
<Flag>ShowGarrisonButton</Flag>
<Flag>DontRotateObstruction</Flag>
<Flag>ObscuredByUnits</Flag>
<Flag>HeroName2</Flag>
<Flag>RotateInPlace</Flag>
<Flag>NotDeleteable</Flag>
<Flag>ForceBuildingData</Flag>
<Flag>KnockoutDeath</Flag>
<Flag>Tracked</Flag>
<Command page ='10' column ='0'>Garrison</Command>
<Command page ='10' column ='2'>Stop</Command>
<Command page ='11' column ='0'>Abilities</Command>
<Tactics>xpwarchief.tactics</Tactics>
<ProtoAction>
<Name>Build</Name>
<Rate type ='TradingPost'>3.000000</Rate>
<Rate type ='TownCenter'>1.000000</Rate>
</ProtoAction>
<ProtoAction>
<Name>BuildingAttack</Name>
<Damage>15.000000</Damage>
<DamageType>Siege</DamageType>
<ROF>3.000000</ROF>
<DamageBonus type ='Building'>1.000000</DamageBonus>
</ProtoAction>
<ProtoAction>
<Name>CrackshotAttack</Name>
<Damage>75.000000</Damage>
<DamageType>Ranged</DamageType>
<MaxRange>16.000000</MaxRange>
<ROF>3.000000</ROF>
<DamageCap>150.000000</DamageCap>
<DamageBonus type ='Guardian'>0.250000</DamageBonus>
<DamageArea>3.000000</DamageArea>
<DamageFlags>GAIAEnemy</DamageFlags>
<DamageBonus type ='MercType2'>0.250000</DamageBonus>
</ProtoAction>
<ProtoAction>
<Name>HandAttack</Name>
<Damage>6.000000</Damage>
<DamageType>Hand</DamageType>
<ROF>1.500000</ROF>
<DamageBonus type ='Guardian'>3.000000</DamageBonus>
<DamageBonus type ='AbstractVillager'>0.250000</DamageBonus>
</ProtoAction>
<ProtoAction>
<Name>Heal</Name>
<Rate type ='LogicalTypeHealed'>50.000000</Rate>
</ProtoAction>
<ProtoAction>
<Name>VolleyRangedAttack</Name>
<DamageBonus type ='AbstractVillager'>0.250000</DamageBonus>
<Damage>12.000000</Damage>
<DamageType>Ranged</DamageType>
<MaxRange>16.000000</MaxRange>
<ROF>3.000000</ROF>
<DamageBonus type ='Guardian'>3.000000</DamageBonus>
</ProtoAction>
</Unit>


Это вождь ирокезов. Самые важные вещи здесь:
Код
<Train row ='0' page ='6' column ='1'>TradingPost</Train>
<Train row ='0' page ='6' column ='0'>TownCenter</Train>
<Train row ='0' page ='6' column ='3'>NatBlowgunAmbusher</Train>
<Train row ='0' page ='6' column ='4'>NatClubmanLoyal</Train>
<Train row ='0' page ='6' column ='2'>PetWolf</Train>
<Train row ='0' page ='6' column ='5'>PetCougar</Train>

Таким образом, юнитам приказывают строить здания / юниты - это потому, что они используют в игре, а также что у них есть строительная анимация (строительство с молотком). Здания не строят другие здания. Это могут делать только движущиеся юниты, так как это относится к файлам юнитов. Художественная модификация не является целью этого руководства, и мы не будем вдаваться в подробности.
Однако, если мы спустимся к зданию (это измененное здание):
Код
<Unit id ='1487' name ='Observatory'>
<DBID>2168</DBID>
<DisplayNameID>200268</DisplayNameID>
<EditorNameID>200269</EditorNameID>
<ObstructionRadiusX>5.0000</ObstructionRadiusX>
<ObstructionRadiusZ>5.0000</ObstructionRadiusZ>
<MaxVelocity>0.0000</MaxVelocity>
<MovementType>land</MovementType>
<AnimFile>buildings\spc\ossuary\spc_ossuary.xml</AnimFile>
<ImpactType>Stone</ImpactType>
<PhysicsInfo>house</PhysicsInfo>
<Icon>buildings\spc\ossuary\spc_ossuary_icon_64x64</Icon>
<PortraitIcon>buildings\spc\ossuary\spc_ossuary_portrait</PortraitIcon>
<RolloverTextID>200270</RolloverTextID>
<ShortRolloverTextID>200271</ShortRolloverTextID>
<InitialHitpoints>5000.0000</InitialHitpoints>
<MaxHitpoints>5000.0000</MaxHitpoints>
<LOS>26.0000</LOS>
<BuildPoints>40.0000</BuildPoints>
<BuildLimit>1</BuildLimit>
<Bounty>320.0000</Bounty>
<BuildBounty>160.0000</BuildBounty>
<Cost resourcetype ='Wood'>400.0000</Cost>
<Cost resourcetype ='Gold'>400.0000</Cost>
<InitialResource resourcetype ='XP'>10.0000</InitialResource>
<AllowedAge>3</AllowedAge>
<Armor type ='Siege' value ='0.0000'></Armor>
<BuilderLimit>8</BuilderLimit>
<UnitType>LogicalTypeValidSabotage</UnitType>
<UnitType>LogicalTypeMinimapFilterEconomic</UnitType>
<UnitType>LogicalTypeHandUnitsAutoAttack</UnitType>
<UnitType>LogicalTypeBuildingsNotWalls</UnitType>
<UnitType>LogicalTypeRangedUnitsAutoAttack</UnitType>
<UnitType>LogicalTypeVillagersAttack</UnitType>
<UnitType>LogicalTypeHandUnitsAttack</UnitType>
<UnitType>LogicalTypeShipsAndBuildings</UnitType>
<UnitType>LogicalTypeRangedUnitsAttack</UnitType>
<UnitType>LogicalTypeBuildingsNotWallsOrGroves</UnitType>
<UnitType>LogicalTypeMinimapFilterMilitary</UnitType>
<UnitType>BuildingClass</UnitType>
<UnitType>MilitaryBuilding</UnitType>
<UnitType>ColonyBuilding</UnitType>
<UnitType>Building</UnitType>
<UnitType>ConvertsHerds</UnitType>
<UnitType>CountsTowardMilitaryScore</UnitType>
<UnitType>HasBountyValue</UnitType>
<Tech row ='0' page ='1' column ='0'>WealthOfNations</Tech>
<Tech row ='0' page ='1' column ='0'>DivisionOfLabour</Tech>
<Tech row ='0' page ='1' column ='0'>PackagedMeats</Tech>
<Tech row ='0' page ='1' column ='0'>ChurchfpGermanMeats</Tech>
<Tech row ='0' page ='1' column ='1'>Pasteurization</Tech>
<Tech row ='0' page ='1' column ='1'>TheJungle</Tech>
<Tech row ='0' page ='1' column ='2'>SpinningJenny</Tech>
<Tech row ='0' page ='1' column ='2'>MechanicalEngineering</Tech>
<Tech row ='0' page ='1' column ='3'>DailyNewspaper</Tech>
<Tech row ='0' page ='1' column ='3'>Nationalism</Tech>
<Tech row ='0' page ='1' column ='3'>Imperialism</Tech>
<Tech row ='0' page ='1' column ='4'>FrontierTerritory</Tech>
<Tech row ='0' page ='1' column ='4'>TheGreatPioneerWagonTrain</Tech>
<Tech row ='0' page ='1' column ='5'>HotAirBalloonTechnology</Tech>
<Tech row ='0' page ='1' column ='5'>AdvancedHotAirBalloonFrench</Tech>
<Tech row ='0' page ='1' column ='6'>TransContinentalRailroad</Tech>
<Tech row ='0' page ='1' column ='6'>LumberMillsEuropean</Tech>
<Tech row ='0' page ='1' column ='7'>ScoutCavalryEuropean</Tech>
<Tech row ='0' page ='1' column ='8'>BattlefieldSurveyors</Tech>
<Tech row ='0' page ='1' column ='9'>Dragooning</Tech>
<Tech row ='0' page ='1' column ='10'>Admirality</Tech>
<Tech row ='0' page ='1' column ='11'>PiratesOfTheBarbaryCoast</Tech>
<Tech row ='0' page ='1' column ='11'>TheRightsOfMan</Tech>
<Tech row ='0' page ='1' column ='11'>BritishImperialism</Tech>
<Tech row ='0' page ='1' column ='11'>RuleBritannia</Tech>
<Tech row ='0' page ='1' column ='12'>ExplosiveShells</Tech>
<Tech row ='0' page ='1' column ='12'>QuicklimeShells</Tech>
<Tech row ='0' page ='1' column ='13'>Fusils</Tech>
<Tech row ='0' page ='1' column ='13'>OttomanEgyptianMarket</Tech>
<Tech row ='0' page ='1' column ='13'>GreatElectorOfBrandenburg</Tech>
<Tech row ='0' page ='1' column ='14'>NativeFrenchAlliances</Tech>
<Tech row ='0' page ='1' column ='14'>Rifles</Tech>
<Tech row ='0' page ='1' column ='14'>OttomanBazaars</Tech>
<Tech row ='0' page ='1' column ='14'>DutchSpiceTrade</Tech>
<Tech row ='0' page ='1' column ='14'>DutchTeaTrade</Tech>
<Tech row ='0' page ='1' column ='14'>CanisterShot</Tech>
<Tech row ='0' page ='1' column ='14'>GatlingGuns</Tech>
<Tech row ='0' page ='1' column ='14'>GermanUniversities</Tech>
<Tech row ='0' page ='1' column ='15'>OttomanSpiceTrade</Tech>
<Tech row ='0' page ='1' column ='15'>OttomanCoffeeTrade</Tech>
<Tech row ='0' page ='1' column ='15'>OttomanTradeGuilds</Tech>
<Tech row ='0' page ='1' column ='15'>GermanExplorers</Tech>
<Tech row ='0' page ='1' column ='15'>IndustrialRevolutionRussian</Tech>
<Tech row ='0' page ='1' column ='15'>IronandCoalBusiness</Tech>
<Tech row ='0' page ='1' column ='15'>CottonPlantations</Tech>
<Tech row ='0' page ='1' column ='16'>BritishEastIndiaCompany</Tech>
<Tech row ='0' page ='1' column ='16'>SiberianFurTrade</Tech>
<Tech row ='0' page ='1' column ='16'>FishingFleets</Tech>
<Tech row ='0' page ='1' column ='16'>BrazilianWoodTrade</Tech>
<Tech row ='0' page ='1' column ='17'>SlaveTrade</Tech>
<Tech row ='0' page ='1' column ='17'>BritishHiredPrivateers</Tech>
<Tech row ='0' page ='1' column ='17'>SpanishGoldTrade</Tech>
<Tech row ='0' page ='1' column ='18'>AbolitionOfSlavery</Tech>
<Tech row ='0' page ='1' column ='18'>NaturalPhilosophy</Tech>
<Tech row ='0' page ='1' column ='18'>PublicSchooling</Tech>
<Tech row ='0' page ='1' column ='18'>SeparationofPowers</Tech>
<Tech row ='0' page ='1' column ='18'>NizamECeditLineInfantry</Tech>
<Tech row ='0' page ='255' column ='2'>ComputerObservatoryTechs1</Tech>
<Flag>UnlimitedSupply</Flag>
<Flag>CollidesWithProjectiles</Flag>
<Flag>StartsAtFullEfficiency</Flag>
<Flag>Immoveable</Flag>
<Flag>NoBloodOnDeath</Flag>
<Flag>ObscuresUnits</Flag>
<Flag>NoIdleActions</Flag>
<Flag>NonAutoFormedUnit</Flag>
<Flag>Doppled</Flag>
<Flag>SelectWithObstruction</Flag>
<Flag>PaintTextureWhenPlacing</Flag>
<Flag>FlattenGround</Flag>
<Flag>HasGatherPoint</Flag>
<Flag>Tracked</Flag>
<Command page ='10' column ='0'>Delete</Command>
<Tactics>autogatherer.tactics</Tactics>
<ProtoAction>
<Name>Autogather</Name>
<Rate type ='XP'>0.400000</Rate>
</ProtoAction>
</Unit>


По сути, я хотел донести до вас, что вы добавляете техников в здания в ряду Tech = ... Tech и т.д .; Вы должны разместить свои технологии между UnitTypes и Flags. Вот так, например:

<UnitType>HasBountyValue</UnitType>
<Tech row ='0' page ='1' column ='0'>WealthOfNations</Tech>
<Tech row ='0' page ='1' column ='2'>SpinningJenny</Tech>
<Flag>UnlimitedSupply</Flag>

------

Но как мне тренировать юниты из зданий?

Позвольте мне взять из европейского здания "Казармы":

Код
<Unit id ='296' name ='Barracks'>
<DBID>18</DBID>
<DisplayNameID>22847</DisplayNameID>
<ObstructionRadiusX>4.0000</ObstructionRadiusX>
<ObstructionRadiusZ>4.0000</ObstructionRadiusZ>
<MaxVelocity>0.0000</MaxVelocity>
<MovementType>land</MovementType>
<AnimFile>buildings\barracks\barracks.xml</AnimFile>
<DeadReplacement>BuildingRubble4x4</DeadReplacement>
<DeadReplacementLifespan>15</DeadReplacementLifespan>
<ImpactType>Wood</ImpactType>
<PhysicsInfo>barracks</PhysicsInfo>
<PlacementFile>buildinglarge.xml</PlacementFile>
<Icon>buildings\barracks\barracks_icon</Icon>
<PortraitIcon>buildings\barracks\barracks_portraits</PortraitIcon>
<RolloverTextID>22846</RolloverTextID>
<ShortRolloverTextID>25610</ShortRolloverTextID>
<InitialHitpoints>2500.0000</InitialHitpoints>
<MaxHitpoints>2500.0000</MaxHitpoints>
<LOS>12.0000</LOS>
<BuildPoints>30.0000</BuildPoints>
<Bounty>40.0000</Bounty>
<BuildBounty>20.0000</BuildBounty>
<Cost resourcetype ='Food'>0.0000</Cost>
<Cost resourcetype ='Wood'>200.0000</Cost>
<BuildingWorkRate>1.0000</BuildingWorkRate>
<AllowedAge>1</AllowedAge>
<Armor type ='Siege' value ='0.0000'></Armor>
<BuilderLimit>8</BuilderLimit>
<UnitType>LogicalTypeValidSabotage</UnitType>
<UnitType>LogicalTypeHandUnitsAutoAttack</UnitType>
<UnitType>LogicalTypeBuildingsNotWalls</UnitType>
<UnitType>LogicalTypeRangedUnitsAutoAttack</UnitType>
<UnitType>LogicalTypeVillagersAttack</UnitType>
<UnitType>LogicalTypeHandUnitsAttack</UnitType>
<UnitType>LogicalTypeShipsAndBuildings</UnitType>
<UnitType>LogicalTypeRangedUnitsAttack</UnitType>
<UnitType>LogicalTypeBuildingsNotWallsOrGroves</UnitType>
<UnitType>LogicalTypeMinimapFilterMilitary</UnitType>
<UnitType>Building</UnitType>
<UnitType>MilitaryBuilding</UnitType>
<UnitType>BuildingClass</UnitType>
<UnitType>ConvertsHerds</UnitType>
<UnitType>AbstractBarracks2</UnitType>
<UnitType>CountsTowardMilitaryScore</UnitType>
<UnitType>HasBountyValue</UnitType>
<Train row ='0' page ='0' column ='0'>Crossbowman</Train>
<Train row ='0' page ='0' column ='0'>Longbowman</Train>
<Train row ='0' page ='0' column ='4'>Musketeer</Train>
<Train row ='0' page ='0' column ='4'>Janissary</Train>
<Train row ='0' page ='0' column ='5'>Cacadore</Train>
<Train row ='0' page ='0' column ='5'>Skirmisher</Train>
<Train row ='0' page ='0' column ='1'>Pikeman</Train>
<Train row ='0' page ='0' column ='2'>Halberdier</Train>
<Train row ='0' page ='0' column ='2'>Rodelero</Train>
<Train row ='0' page ='0' column ='2'>Dopplesoldner</Train>
<Train row ='0' page ='0' column ='2'>Boneguard</Train>
<Train row ='0' page ='0' column ='2'>BoneguardAge2</Train>
<Tech row ='0' page ='1' column ='2'>ImperialNassauers</Tech>
<Tech row ='0' page ='1' column ='4'>ImperialRedcoat</Tech>
<Tech row ='0' page ='1' column ='4'>GuardMusketeers</Tech>
<Tech row ='0' page ='1' column ='0'>GuardLongbowmen</Tech>
<Tech row ='0' page ='1' column ='2'>VeteranDopplesoldners</Tech>
<Tech row ='0' page ='1' column ='4'>VeteranJanissaries</Tech>
<Tech row ='0' page ='1' column ='2'>VeteranRodeleros</Tech>
<Tech row ='0' page ='1' column ='1'>VeteranPikemen</Tech>
<Tech row ='0' page ='1' column ='2'>GuardHalberdiers</Tech>
<Tech row ='0' page ='1' column ='2'>ImperialEspada</Tech>
<Tech row ='0' page ='1' column ='4'>VeteranMusketeers</Tech>
<Tech row ='0' page ='1' column ='5'>ImperialNeedleGun</Tech>
<Tech row ='0' page ='1' column ='5'>GuardSkirmishers</Tech>
<Tech row ='0' page ='1' column ='0'>VeteranCrossbowmen</Tech>
<Tech row ='0' page ='1' column ='2'>RGNassausLinearTactics</Tech>
<Tech row ='0' page ='1' column ='5'>GuardCacadores</Tech>
<Tech row ='0' page ='1' column ='5'>RGVoltigeur</Tech>
<Tech row ='0' page ='1' column ='2'>GuardRodeleros</Tech>
<Tech row ='0' page ='1' column ='1'>RGTercio</Tech>
<Tech row ='0' page ='1' column ='4'>RGRedcoats</Tech>
<Tech row ='0' page ='1' column ='2'>ImperialDopplesoldner</Tech>
<Tech row ='0' page ='1' column ='2'>ImperialHalberdiers</Tech>
<Tech row ='0' page ='1' column ='4'>ImperialJanissaries</Tech>
<Tech row ='0' page ='1' column ='0'>ImperialLongbowmen</Tech>
<Tech row ='0' page ='1' column ='5'>ImperialSkirmishers</Tech>
<Tech row ='0' page ='1' column ='5'>ImperialVoltigeur</Tech>
<Tech row ='0' page ='1' column ='5'>RGPrussianNeedleGun</Tech>
<Tech row ='0' page ='1' column ='4'>GuardJanissaries</Tech>
<Tech row ='0' page ='1' column ='0'>VeteranLongbowmen</Tech>
<Tech row ='0' page ='1' column ='2'>RGEspadachins</Tech>
<Tech row ='0' page ='1' column ='1'>ImperialTercio</Tech>
<Tech row ='0' page ='1' column ='4'>RGGuerreiros</Tech>
<Tech row ='0' page ='1' column ='5'>ImperialCacadores</Tech>
<Tech row ='0' page ='1' column ='4'>ImperialMusketeers</Tech>
<Tech row ='0' page ='1' column ='2'>GuardDopplesoldners</Tech>
<Tech row ='0' page ='1' column ='4'>ImperialGuerreiros</Tech>
<Flag>CollidesWithProjectiles</Flag>
<Flag>StartsAtFullEfficiency</Flag>
<Flag>Immoveable</Flag>
<Flag>NoBloodOnDeath</Flag>
<Flag>ObscuresUnits</Flag>
<Flag>NoIdleActions</Flag>
<Flag>NonAutoFormedUnit</Flag>
<Flag>Doppled</Flag>
<Flag>SelectWithObstruction</Flag>
<Flag>PaintTextureWhenPlacing</Flag>
<Flag>FlattenGround</Flag>
<Flag>HasGatherPoint</Flag>
<Flag>InitialGarrisonOnly</Flag>
<Flag>Tracked</Flag>
<Command page ='10' column ='0'>SetGatherPointMilitary</Command>
<Command page ='10' column ='1'>Delete</Command>
<Tactics>barracks.tactics</Tactics>
</Unit>


Здесь вы видите различные вещи: номер отображаемого имени, радиус препятствия, максимальную скорость (скорость), точки попадания, точки сборки (игровые секунды, которые требуются для построения), награду за постройку (количество опыта, которое вы получаете от постройки), стоимость , Допустимый возраст (0 = открытие, 1 = колониальный возраст; 2 = крепость, 3 = промышленный, 4 = имперский), сопротивление броне, предел строителя и т. Д., Единицы, которые он может обучать, техники, которых он может модернизировать, разныеу него есть и командные страницы для пунктов сбора военных, и, наконец, информация о его тактике. Из всего этого мы можем понять, что делает здание, и что мы можем добавить / вычесть к нему.
------

Прежде чем добавлять техников, важно отметить следующее: ИИ, или искусственный интеллект, может модернизировать максимум 12-13 улучшений в данном здании, прежде чем он решит больше не исследовать это здание. , Поэтому, если вы хотите больше исследовать здание, вы должны создать «пакетную» технологию, которая бесплатно модернизирует множество небольших технологий в этом здании. Поместите эту технику в строку «0», страница «255» в колонку «2», если вы хотите, чтобы ее могли исследовать только компьютерные игроки.

ИИ может модернизировать только максимум 12-13 улучшений в данном здании. Это, скорее всего, ошибка в игре. Поэтому, если вы создаете много технологий в здании, сделайте «пакетную» технологию, которая бесплатно обновит множество небольших улучшений в этом здании.
------

Вот как выглядит мой ИИ для обновления Капитолия:

Примечание: '...' ниже означает сокращение большого количества кода между техническими правилами ИИ:
...

В // rule age4Monitor:

xsEnableRule("age5Monitor");

...

rule age5Monitor
inactive
minInterval 10
{
if (kbGetAge() >= cAge5)
{
aiEcho("*** We're in age 5.");
// Bump up settler train plan
updateSettlerCounts();

// Upgrade Capitol Upgrades
xsEnableRule("CapitolUpgradeMonitor");

// Enable brigade technologies at the consulate
if (civIsAsian() == true)
xsEnableRule("brigadeMonitor");

xsDisableSelf();
gAgeUpTime = xsGetTime();

updateEscrows();

}
}

...

rule CapitolUpgradeMonitor
inactive
minInterval 30
{
int upgradePlanID = -1;

if ((kbTechGetStatus(cTechImpExcessiveTaxation) == cTechStatusActive) &&
(kbTechGetStatus(cTechImpDeforestation) == cTechStatusActive) &&
(kbTechGetStatus(cTechImpLargeScaleAgriculture) == cTechStatusActive) &&
(kbTechGetStatus(cTechColonialGovernment) == cTechStatusActive) &&
(kbTechGetStatus(cTechImpKnighthood) == cTechStatusActive) &&
(kbTechGetStatus(cTechImpImmigrants) == cTechStatusActive) &&
(kbTechGetStatus(cTechImpPeerage) == cTechStatusActive))
{
xsDisableSelf();
return;
}

// Get upgrades one at a time
if (kbTechGetStatus(cTechImpExcessiveTaxation) == cTechStatusObtainable)
{
upgradePlanID = aiPlanGetIDByTypeAndVariableType(cPlanResearch, cResearchPlanTechID, cTechImpExcessiveTaxation);
if (upgradePlanID >= 0)
aiPlanDestroy(upgradePlanID);
createSimpleResearchPlan(cTechImpExcessiveTaxation, getUnit(cUnitTypeCapitol), cEconomyEscrowID, 99);
return;
}
if (kbTechGetStatus(cTechImpDeforestation) == cTechStatusObtainable)
{
upgradePlanID = aiPlanGetIDByTypeAndVariableType(cPlanResearch, cResearchPlanTechID, cTechImpDeforestation);
if (upgradePlanID >= 0)
aiPlanDestroy(upgradePlanID);
createSimpleResearchPlan(cTechImpDeforestation, getUnit(cUnitTypeCapitol), cEconomyEscrowID, 99);
return;
}
if (kbTechGetStatus(cTechImpLargeScaleAgriculture) == cTechStatusObtainable)
{
upgradePlanID = aiPlanGetIDByTypeAndVariableType(cPlanResearch, cResearchPlanTechID, cTechImpLargeScaleAgriculture);
if (upgradePlanID >= 0)
aiPlanDestroy(upgradePlanID);
createSimpleResearchPlan(cTechImpLargeScaleAgriculture, getUnit(cUnitTypeCapitol), cEconomyEscrowID, 99);
return;
}
if (kbTechGetStatus(cTechColonialGovernment) == cTechStatusObtainable)
{
upgradePlanID = aiPlanGetIDByTypeAndVariableType(cPlanResearch, cResearchPlanTechID, cTechColonialGovernment);
if (upgradePlanID >= 0)
aiPlanDestroy(upgradePlanID);
createSimpleResearchPlan(cTechColonialGovernment, getUnit(cUnitTypeCapitol), cEconomyEscrowID, 99);
return;
}
if (kbTechGetStatus(cTechImpKnighthood) == cTechStatusObtainable)
{
upgradePlanID = aiPlanGetIDByTypeAndVariableType(cPlanResearch, cResearchPlanTechID, cTechImpKnighthood);
if (upgradePlanID >= 0)
aiPlanDestroy(upgradePlanID);
createSimpleResearchPlan(cTechImpKnighthood, getUnit(cUnitTypeCapitol), cEconomyEscrowID, 99);
return;
}
if (kbTechGetStatus(cTechImpImmigrants) == cTechStatusObtainable)
{
upgradePlanID = aiPlanGetIDByTypeAndVariableType(cPlanResearch, cResearchPlanTechID, cTechImpImmigrants);
if (upgradePlanID >= 0)
aiPlanDestroy(upgradePlanID);
createSimpleResearchPlan(cTechImpImmigrants, getUnit(cUnitTypeCapitol), cEconomyEscrowID, 99);
return;
}
if (kbTechGetStatus(cTechImpPeerage) == cTechStatusObtainable)
{
upgradePlanID = aiPlanGetIDByTypeAndVariableType(cPlanResearch, cResearchPlanTechID, cTechImpPeerage);
if (upgradePlanID >= 0)
aiPlanDestroy(upgradePlanID);
createSimpleResearchPlan(cTechImpPeerage, getUnit(cUnitTypeCapitol), cEconomyEscrowID, 99);
return;
}
}

------

Кроме того, если мы хотим, чтобы ИИ строил здание, мы делаем это так:

// And how 'bout a capitol, as long as we're here (not for natives or Asians)
if ( (civIsNative() == false) && (civIsAsian() == false) )
{
planID = aiPlanGetIDByTypeAndVariableType(cPlanBuild, cBuildPlanBuildingTypeID, cUnitTypeCapitol);
if ( (planID < 0) && (kbUnitCount(cMyID, cUnitTypeCapitol, cUnitStateAlive) < 1) )
{ // Start a new one
createSimpleBuildPlan(cUnitTypeCapitol, 1, 60, true, cEconomyEscrowID, kbBaseGetMainID(cMyID), 1);
aiEcho("Starting a new capitol build plan.");
}
}

Обратите внимание, что в C + Coding, к которому относится Age of Empires III, // указывается на обнуление языка кодирования; если вы хотите прокомментировать какую-либо вещь, поставьте перед ней // и скажите, что вы хотите. Затем включите тех.
Пожайлуста, оцените материал. Ваша оценка нам очень важна! Спасибо!
↓ ↓ ↓
Дата: , 08:15 | Просмотров: 863 | Добавил: tupi857 | Автор:
Теги: статьи по Age of Empires III (AoE 3)
Смотрите также
Пятёрка форумщиков

В сети всего: 1
Гостей: 1
Пользователей: 0


Сегодня посетили нас:
tupi857