设为首页收藏本站

红警DIY论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6180|回复: 7

【AI篇】RA3 AI教程

[复制链接]
发表于 2010-12-27 08:28:51 | 显示全部楼层 |阅读模式
本帖最后由 yangqs 于 2010-12-28 14:59 编辑

本篇是关于ra3的AI教程

首先要明确一点,要知道父级调用的关系,比如你要加入冷冻兵团,由盟军AI生产,那么方法如下(这里只写主要的):

盟军的设定
************************************************
************************************************
************************************************
第一步:
根据冷冻兵团的特点——重新自定义一个两栖的模块,一个兵营的模块,一个盟军部队集合的模块,《剧变》将它们写在了AIBuildStateDefinition.xml里
=====================================
一个两栖的模块,写法如下:

  1. <AIBuildStateDefinition
  2. id="AlliedAmphibiousUnitBuildState_Upheaval">
  3. <!--完全是英文翻译来,盟军两栖模块-->
  4. <Heuristic><!--启发,这里没有什么 ,如果有将是宏观参数-->
  5. <ConstantHeuristic/>
  6. </Heuristic>

  7. <!--建立入口-->
  8. <BuildEntry
  9. Build="AlliedLegionnaireInfantry"
  10. Heuristic="BEST_UNIT_EXPECTED"><!--启发=最佳期望单位-->
  11. <!--如果建造工厂附近有…  敌人,包括=敌人的狗、熊,将优先建造-->
  12. <BlockIfThingNearFactory Rule="ANY" Relationship="ENEMIES">
  13. <IncludeThing>AlliedScoutInfantry</IncludeThing>
  14. <IncludeThing>SovietScoutInfantry</IncludeThing>
  15. </BlockIfThingNearFactory>
  16. </BuildEntry>
  17. <!--……教程省略了其他步兵、载具;应该把所有的两栖单位写在这里,无论是老单位还是新单位,具体可参考sdk-->
  18. </AIBuildStateDefinition>
复制代码

=====================================

=====================================
一个兵营的模块,写法如下:

  1. <AIBuildStateDefinition
  2. id="AlliedBarracksBuildState_RANDOM_Upheaval">
  3. <Heuristic>
  4. <ConstantHeuristic/>
  5. </Heuristic>

  6. <!--建立入口-->
  7. <BuildEntry
  8. Build="AlliedScoutInfantry" 狗
  9. Heuristic="RANDOM_UNIT" 启发方式=随机
  10. PercentLow="0" 最低建造百分比
  11. PercentHigh="20"/>最高建造百分比
  12. <!--……教程省略了其他步兵,这里只写狗和冷冻兵团,具体可参考sdk-->

  13. <BuildEntry
  14. Build="AlliedLegionnaireInfantry" 冷冻兵团
  15. Heuristic="RANDOM_UNIT" 启发方式,随机
  16. PercentLow="80"最低建造百分比
  17. PercentHigh="100"/>最高建造百分比

  18. </AIBuildStateDefinition>
复制代码

=====================================

=====================================
一个部队集合的模块,写法如下:
  1. <AIBuildStateDefinition
  2. id="AlliedNeededUnits_Upheaval">
  3. <Heuristic>
  4. <ConstantHeuristic/>
  5. </Heuristic>

  6. <!--建立入口-->
  7. <BuildEntry
  8. Build="AlliedEngineer" 盟军工程师
  9. Heuristic="NEEDED_UNIT"/>启发方式=必要单位

  10. <BuildEntry
  11. Build="AlliedLegionnaireInfantry"冷冻兵团
  12. Heuristic="NEEDED_UNIT"/>启发方式=必要单位
  13. <!--……教程省略了其他步兵,载具,飞机等所有会动的部队,具体可参考sdk-->

  14. </AIBuildStateDefinition>
复制代码


=====================================
 楼主| 发表于 2010-12-27 08:29:22 | 显示全部楼层
本帖最后由 yangqs 于 2010-12-27 10:40 编辑

************************************************
************************************************
************************************************
第二步:
将第一步的这些模块加到合适的个性里面——AlliedCoopBasePersonality.xml(盟军基础个性的容器)、AlliedCoopBaseSkirmishPersonality.xml(盟军遭遇战个性的容器)

=====================================
【一】先说AlliedCoopBasePersonality.xml(盟军基础个性的容器)

这个文件主要包括4个部分
第一部分:基础及父级调用
  1. <AIPersonalityDefinition
  2. id="AlliedCoopBasePersonality"
  3. PersonalityType="AlliedCoopBasePersonality"个性类型
  4. inheritFrom="CoopBasePersonality"父级调用
  5. BaseCompactness="0.5">紧密值?一般也不用改
  6. <Side>Allies</Side>适用于哪个阵营
复制代码


第二部分:调用和定义模块,也可能已经是被你更改了的模块,继续第一步写
  1. <BuildState调用模块
  2. id="AlliedNeededUnits_Upheaval"第一步提到的“部队集合模块”
  3. State="AlliedNeededUnits_Upheaval"
  4. Difficulty="EASY MEDIUM HARD BRUTAL"/>适用于的难度
复制代码

       这里主要加入了:
          扩展基础模块(AlliedExpansion)、貌似仅用于地图的初始判断
          防御基础模块(AlliedDefensive)、
          科技占领模块(AlliedCaptureTech)、
          海战基础模块(AlliedNavalBase)、貌似仅用于地图的初始判断,因为里面没有任何出兵方式
          部队集合模块(AlliedNeededUnits),这里被AlliedNeededUnits_Upheaval取代
第三部分:部队进攻/防御指数,继续第二步写
  1. <UnitModifier
  2. Unit="AlliedLegionnaireInfantry"冷冻兵团
  3. OffensiveModifier="3.0" 进攻指数
  4. DefensiveModifier="2.0"/>防御指数
复制代码

狗的指数是0.5/0.5,谭雅的指数5.0/5.0,其他部队的进攻/防御指数,具体可参考sdk
第四部分:机密武器权重
  1. <owerChoice
  2. PlayerPower="PlayerTech_Allied_AirPower"
  3. Weight="100%"/>
  4. <!--第一行权重为100%,第五行权重为500%,其他机密武器具体可参考sdk-->
复制代码

=====================================
【二】再说AlliedCoopBaseSkirmishPersonality.xml(盟军遭遇战个性的容器)
和盟军基础个性的容器差不多,但是更复杂,各种细小的模块都被调用,比如mcv模块,微观的陆战模块,紧急事件模块等等,等等。
还记得第一步的两栖模块和兵营模块吧,这里将被调用
比如:
  1. <BuildState 调用的兵营模块
  2. id="AlliedBarracksBuildState_RANDOM_Upheaval" State="AlliedBarracksBuildState_RANDOM_Upheaval"
  3. Difficulty="EASY"/>只适合于简单AI
  4. <BuildState调用的两栖模块
  5. id="AlliedAmphibiousUnitBuildState_Upheaval"
  6. State="AlliedAmphibiousUnitBuildState_Upheaval"
  7. Difficulty="MEDIUM HARD BRUTAL"/>适合于中等、困难、冷酷AI
复制代码

也会去掉一些父级模块,去掉海战基础模块(AlliedNavalBase),被更加详细的模块取代(比如海战Easy,里面都是出兵方式)
去掉方法:(这里可以略去不看,毕竟不用改,知道即可)
  1. <StrategicState
  2. id="AlliedNavalBase"
  3. xai:joinAction="Remove"
  4. xmlns:xai="uri:ea.com:eala:asset:instance"/>
复制代码


对某些部队进行上限控制,例如:
  1. <SpecificUnitCap
  2. Unit="AlliedScoutInfantry" 狗
  3. Cap="6" 上限
  4. Difficulty="EASY MEDIUM HARD BRUTAL"/>适用难度
  5. <SpecificUnitCap
  6. Unit="AlliedCommandoTech1" 谭雅
  7. Cap="0"上限
  8. Difficulty="EASY"/>适用难度。看清楚了吧,简单敌人不能出谭雅!
复制代码

但是对冷冻兵团没有加入限制
=====================================
总结:针对第一步和第二步,合在一起就是一个完整的AI控制:从建立模块到调用模块,这样理解还是比较清楚的。只调用AlliedCoopBasePersonality.xml(盟军基础个性的容器)、AlliedCoopBaseSkirmishPersonality.xml(盟军遭遇战个性的容器)两个容器。
值得注意的是:原来的模块是无法在游戏里运行的,所以需要自定义一个其他模块。
 楼主| 发表于 2010-12-27 08:29:49 | 显示全部楼层
本帖最后由 yangqs 于 2010-12-28 09:08 编辑

************************************************
************************************************
************************************************
指挥官的设定:
为了大家看完之后不至于思维混乱,写在这里
AI个性详细定义,上面只是集体的去调用AI,但是不要忘了,即便是盟军,还有利赛特,吉尔利斯等指挥官,他们各有不同,这样就需要调用AIPersonalityDefinition.xml(AI个性详细定义)
调用方式有些特殊,游戏限制住了这方面的修改(新加的阵营没有限制),所以需要重新定义

  1. <AIPersonalityDefinition
  2. id="4AlliedBalanced"新加的AI个性
  3. PersonalityType="1AlliedBalanced">
  4. <!--指定为原来游戏的“温轮”指挥官,和一楼一样,添加或去掉一些模块-->

  5. <StrategicState
  6. id="BalancedDefense" 添加防御模块,这里指战机的防御
  7. State="BalancedDefense"
  8. Difficulty="EASY MEDIUM HARD BRUTAL"/>
复制代码

接下来……

  1. <!--打开步骤 开始-->
  2. <OpeningMove
  3. Name="AlliedStandard_EASY"
  4. Weight="100%" 权重
  5. Difficulty="EASY">仅适用于“普通进攻”的简单敌人

  6. <Heuristic>
  7.    <athToTargetHeuristic
  8.       PathExists="true" 想走过场一样,比如先建电厂,再建战车工厂
  9.       ObjectTypeToUseForTest="SovietAntiInfantryInfantry" LocomotorConditionToUseForTest="NORMAL" />
  10.    </Heuristic>
  11. </OpeningMove>
复制代码

在剧变的AI里我看只是重抄了一遍sdk,把温轮所需要的OpeningMove写进来
=====================================
继续写,添加这个指挥官特有的EVA声音,就是在游戏左上角时(和你是盟友),指挥官的回复

  1. <FeedbackEntry
  2. FeedbackKey="PlanAttackBeaconPlaced" 进攻指令
  3. EvaEvent="AlliedCoopWarrenPlanAttack"
  4. FeedbackTo="ALLIES"/> 盟军有效
复制代码


添加视频
  1. <FeedbackEntry
  2. FeedbackKey="StartGame"
  3. Video="AWAGR1"
  4. FeedbackTo="ALLIES"/>
复制代码

可以添加几个<FeedbackEntry/>,视频可以AWAGR1、 AWAGR2随机出现
注意FeedbackKey=的值

StartGame他和你是盟友,游戏开始时的视频
InTrouble他和你是盟友,遇到麻烦时的视频
Lost他和你是盟友,战败时的视频
FirstSeen他和你是敌人,游戏开始时,第一次探测到他的部队的视频
DefeatedByLocalPlayer他和你是敌人,游戏结束时的咒骂视频(你赢了)
DefeatedLocalPlayer他和你是敌人,游戏结束时的嘲笑视频(你输了)


  1. </AIPersonalityDefinition>
复制代码

指挥官模块完成
=====================================
越过声音和视频,刚才的<OpeningMove>只是被调用,里面到底写了写什么呢?
用AlliedStandard_EASY和AlliedStandard_BRUTAL举例
简单敌人

  1. <SkirmishOpeningMove
  2. id="AlliedStandard_EASY"
  3. Side="PlayerTemplate:Allies">盟军有效
  4. <Order Time="10s" Build="AlliedBarracks" />第一时间点10秒建造一个兵营
  5. <Order Time="30s" Build="AlliedPowerPlant" />第二时间点建造一个电厂
  6. <Order Time="50s" Build="AlliedRefinery" />第三时间点建造一个矿场
  7. <Order Build="AlliedAntiInfantryInfantry" />第四时间点训练3个大兵
  8. <Order Build="AlliedAntiInfantryInfantry" />
  9. <Order Build="AlliedAntiInfantryInfantry" />
  10. <Order Time="80s"/><!--80秒内完成-->

  11. <Order Build="AlliedAntiInfantryInfantry" />
  12. <Order Build="AlliedAntiInfantryInfantry" />
  13. <Order Build="AlliedAntiInfantryInfantry" />
  14. <Order Time="110s" Build="AlliedPowerPlant" />
  15. <!--……略-->
  16. </SkirmishOpeningMove>
复制代码



冷酷敌人,写法比简单敌人还简单
  1. <SkirmishOpeningMove
  2. id="AlliedStandard_BRUTAL"
  3. Side="PlayerTemplate:Allies">盟军有效
  4. <Order Build="AlliedBarracks" />第一时间点建造一个兵营
  5. <Order Time="10s" Account="PRODUCTION" Deposit="4000" />
  6. <!--如果有4000押金,将10秒后训练产品,这里指的是步兵-->
  7. <Order Build="AlliedPowerPlant" /><!--没有时间概念,只是抓紧时间的向下建造-->
  8. <Order Build="AlliedRefinery" />
  9. <Order Build="AlliedRefinery" />
  10. <Order Build="AlliedPowerPlant" />
  11. <Order Build="AlliedWarFactory" />

  12. <Order Build="AlliedAntiInfantryVehicle_Ground" /><!--从战车工厂出来激流ACV-->
  13. <Order Build="AlliedAntiInfantryVehicle_Ground" />
  14. <Order Build="AlliedAntiInfantryVehicle_Ground" />

  15. <Order Time="120s" />
  16. </SkirmishOpeningMove>
复制代码


代码部分完成,可以看出来,AI能否制造出你新加的单位,和AI难度有关,也和AI指挥官有关,也和地图有关(电脑首先判断是海战还是陆战),当然《剧变》只是宏观的加入新单位,没有细节到每个指挥官如何去添加他们。
指挥官吉尔利斯会多一层判断,判断对手是不是帝国,他甚至有早期都不建造战车工厂,因为他为了加快出飞机的速度。这需要修改OpeningMove。
在sdk里面,很容易找到<SkirmishOpeningMove/>,在SkirmishAI\OpeningMoves文件夹里。
只是添加有些麻烦,被游戏调用过的模块不能修改,添加一个新的,替换吧
其他代码可以参考bibber的开源代码
 楼主| 发表于 2010-12-27 08:30:20 | 显示全部楼层
本帖最后由 yangqs 于 2010-12-27 11:44 编辑

************************************************
************************************************
************************************************
主要部分已经讲完,这最后一个部分是一本字典,下面列着一些个性和常用模块,如果想修改时可以查找,也可以重新拆分模块
战略模块可以查找*BaseStates.xml
预算模块可以查找AIBudgetStateLibrary.xml
建造模块可以查找*OpeningMoves.xml
至于AI个性的父级关系如下(还是用盟军举例):
上面的个性是父级,宏观的,越到下方越是子级,越微观的个性

一共分3个部分,首先是盟军部分。
BasePersonality.xml基础个性
里面包括模块:
  1. <
  2. ScoutAircraft战略模块(探测战机)
  3. EngineerIdle战略模块(工程师闲置)
  4. JapanEggUnpacker战略模块(帝国核心展开)
  5. HarvesterController战略模块(矿车搜集)
  6. BaseDefenseController战略模块(防御搜集)
  7. OpeningMoveBudget预算模块(打开步骤预算,就是支援武器100%)
  8. />
复制代码

↓↓↓↓↓↓
CoopBasePersonality.xml基础个性的容器
里面包括模块:
  1. <
  2. CoopBudget预算模块(容器预算,通常部队85%,支援10%,防御5%),
  3. DefenseBudget预算模块(防御预算,对主要建筑的防御 ,防御20%,支援0%),
  4. HeavyDefenseBudget预算模块(增强防御预算,对主要建筑的防御 ,防御35%支援0)
  5. />
复制代码

↓↓↓↓↓↓
AlliedCoopBasePersonality.xml盟军基础个性的容器
里面包括模块:
  1. <
  2. AlliedExpansion战略模块(扩展基础,90秒后开始)
  3. AlliedNavalBase战略模块(海战基础,需要船厂)
  4. AlliedCaptureTech战略模块(科技占领,15秒后开始)
  5. AlliedCaptureWaterHusks战略模块(海战科技占领,范围450)
  6. AlliedDefenseBuildState战略模块(防御建造,把可防御的建筑写在里面)
  7. AlliedNeededUnits战略模块(所需部队,把本阵营所有的部队写在里面)
  8. />
复制代码

↓↓↓↓↓↓
AlliedCoopBaseSkirmishPersonality.xml盟军遭遇战个性的容器
里面包括模块:
  1. <
  2. LandDefense战略模块(陆地防御,罗列了所有的非空单位,用于困难和冷酷)
  3. WaterDefense战略模块(海战防御,需要船厂)
  4. LandDefense_MEDIUM战略模块(中等陆地防御,罗列了所有的非空单位,和LandDefense模块不同的就是参数MicroManager=DefenseMicroManager_MEDIUM,它的防御时间和范围得到了限制)
  5. WaterDefense_MEDIUM战略模块(中等海战防御,需要船厂)
  6. LandDefense_EASY战略模块(简单陆地防御)
  7. WaterDefense_EASY战略模块(简单海战防御)
  8. LandEmergencyDefense战略模块(陆地紧急防御)
  9. LandEmergencyDefense_MEDIUM战略模块(中等陆地紧急防御)
  10. WaterEmergencyDefense_MEDIUM战略模块(中等海战紧急防御)
  11. LandEmergencyDefense_EASY战略模块(简单陆地紧急防御)
  12. WaterEmergencyDefense_EASY战略模块(简单海战紧急防御)

  13. Cleanup战略模块(困难以下清除障碍)
  14. Cleanup_BRUTAL战略模块(冷酷清除障碍)
  15. RetreatMCVToLand战略模块(MCV到陆地上)
  16. RetreatMCVToWater战略模块(MCV到水上)
  17. EscortMCV战略模块(护卫MCV)
  18. BombardmentShipAttack战略模块(炮击船只)
  19. TanyaController战略模块(谭雅控制器)
  20. AlliedStealthDetector战略模块(间谍探测)
  21. CratePickup战略模块(捡取箱子)

  22. FighterAircraftFlankAttack战略模块(困难以上空战模块)
  23. FighterAircraft_MEDIUM战略模块(中等以下空战模块)

  24. VindicatorDefense战略模块(困难以上维和轰炸机的防御)
  25. VindicatorAttack战略模块(困难以上维和轰炸机的进攻)
  26. VindicatorAttack_MEDIUM战略模块(中等维和轰炸机的进攻)
  27. VindicatorAttack_EASY战略模块(简单维和轰炸机的进攻)
  28. CenturyBomberAttack战略模块(世纪轰炸机的进攻)
  29. AlliedTransportAttack战略模块(激流ACV的进攻)

  30. AlliedNonPathDependentStructureBuildState战略模块(不考虑升级的建筑)
  31. AlliedTechBuildState战略模块(科技建筑)
  32. AlliedTechBuildState_EASY战略模块(简单科技建筑,建造时间更慢)
  33. AlliedLandUnitBuildState战略模块(陆战部队)
  34. AlliedWaterUnitBuildState战略模块(海战部队)
  35. AlliedAmphibiousUnitBuildState战略模块(两栖部队)
  36. AlliedAntiInfantryOnlyBuildState战略模块(仅仅进攻步兵)
  37. AlliedAntiAirOnlyBuildState战略模块(仅仅空战)
  38. AlliedAntiGroundAircraftBuildState战略模块(空对地)
  39. AlliedBarracksBuildState_RANDOM战略模块(步兵随机)
  40. AlliedWarFactoryBuildState_RANDOM战略模块(工厂随机)
  41. AlliedNavalYardBuildState_RANDOM战略模块(船厂随机)
  42. AlliedAirfieldBuildState_RANDOM战略模块(机场随机)

  43. 去除了很多父级战略模块(略)
  44. />
复制代码

↓↓↓↓↓↓
AlliedSpecialForces.xml盟军利赛特指挥官
指挥官的战略模块需要到 [指挥官]States.xml 文件里查找
里面包括模块:
  1. <
  2. AlliedStandard_EASY建造模块(简单敌人的普通出兵方式)
  3. AlliedIsland_EASY建造模块(简单敌人的岛屿出兵方式)
  4. AlliedIFVRush建造模块(非简单敌人的多功能步兵流出兵方式)
  5. AlliedIsland建造模块(非简单敌人的岛屿出兵方式)

  6. IFVHarrassment战略模块(多功能步兵车的载入步兵)
  7. SpecialForces_MainAttack战略模块(主要技能的进攻)
  8. SpecialForces_SupportAttack战略模块(辅助技能的进攻)
  9. BalancedAttackGround_EASY战略模块(简单的陆地攻击)
  10. BalancedAttackWater_EASY战略模块(简单的水面攻击)
  11. AlliedInfiltration战略模块(间谍)
  12. />
复制代码

AlliedBalanced.xml盟军温轮指挥官
指挥官的战略模块需要到 [指挥官]States.xml 文件里查找
里面包括模块:
  1. <
  2. AlliedStandard_EASY建造模块(简单敌人的普通出兵方式)
  3. AlliedIsland_EASY建造模块(简单敌人的岛屿出兵方式)
  4. AlliedStandard建造模块(普通出兵方式)
  5. AlliedStandard_BRUTAL建造模块(冷酷敌人的普通出兵方式)
  6. AlliedIsland建造模块(非简单敌人的岛屿出兵方式)

  7. ACVHarrassment战略模块(ACV的载入步兵)
  8. BalancedDefense战略模块(部队防御)
  9. BalancedCleanup战略模块(清除)
  10. BalancedAttackGround战略模块(陆地攻击)
  11. BalancedAttackWater战略模块(水面攻击)
  12. BalancedAttackOverwhelm战略模块(攻击被压制)
  13. BalancedAttackGround_MEDIUM战略模块(中等敌人的水面攻击)
  14. BalancedAttackWater_MEDIUM战略模块(中等敌人的水面攻击)
  15. BalancedAttackOverwhelm_MEDIUM战略模块(中等敌人被压制)
  16. BalancedAttackGround_EASY战略模块(简单敌人的水面攻击)
  17. BalancedAttackWater_EASY战略模块(简单敌人的水面攻击)
  18. />
复制代码

AlliedSquadronLeader.xml盟军吉尔利斯指挥官
指挥官的战略模块需要到 [指挥官]States.xml 文件里查找
里面包括模块:
  1. <
  2. AlliedVindicatorRush_EASY建造模块(简单敌人的维和战机出兵方式)
  3. AlliedVindicatorRush建造模块(维和战机出兵方式)
  4. AlliedVindicatorRush_BRUTAL建造模块(冷酷敌人的维和战机出兵方式)
  5. AlliedVindicatorRushVsJapan建造模块(维和战机出兵方式,仅对帝国有效)
  6. AlliedVindicatorRushVsJapan_BRUTAL建造模块(冷酷敌人维和战机出兵方式,仅对帝国有效)

  7. SquardonLeader_Attack_Land战略模块(吉尔利斯攻击陆地)
  8. SquardonLeader_Attack_Land_MEDIUM战略模块(中等吉尔利斯攻击陆地)
  9. SquardonLeader_Attack_Water战略模块(吉尔利斯攻击水面)
  10. SquardonLeader_Attack_Water_MEDIUM战略模块(中等吉尔利斯攻击水面)
  11. BalancedAttackGround_EASY战略模块(简单的陆地攻击)
  12. BalancedAttackWater_EASY战略模块(简单的水面攻击)
  13. />
复制代码
 楼主| 发表于 2010-12-27 08:30:40 | 显示全部楼层

苏俄AI字典部分,以后补充

帝国AI字典部分,以后补充

发表于 2010-12-27 12:22:35 | 显示全部楼层
没时间细着,以后再研究。顶了。
发表于 2010-12-27 20:28:22 | 显示全部楼层
本帖最后由 6522748 于 2010-12-27 20:36 编辑

老大,原来你都研究这么透彻了 诶`
发表于 2011-6-17 10:54:42 | 显示全部楼层
顶了   继续 啊!!!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|手机版|管理员邮箱|红警DIY官方论坛    

GMT+8, 2017-5-25 07:28 , Processed in 0.056198 second(s), 19 queries , Xcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表