|
Руководство для начинающих по написанию скриптов 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, // указывается на обнуление языка кодирования; если вы хотите прокомментировать какую-либо вещь, поставьте перед ней // и скажите, что вы хотите. Затем включите тех.
Пожайлуста, оцените материал. Ваша оценка нам очень важна! Спасибо! ↓ ↓ ↓
|
Дата: 29/05/2019, 08:15 | Просмотров: 863 | Добавил: tupi857 | Автор: tupi857
|
Теги: статьи по Age of Empires III (AoE 3) |
| |