本帖最后由 6522748 于 2010-12-31 14:28 编辑
代码预处理:看到这么多代码文件可能要晕了,不过实际上有些文件不用修改,只是为了让别人继承属性,有些文件修改很少,下面我介绍我的做法:
1.新建一个文件夹命名为AI,并把上述所有代码文件复制到这个文件夹里,全部在一个目录下哟`
2.BasePersonality.xml CoopBasePersonality.xml 这2个文件不用修改,就放在那里,因为是让通用文件来继承它们的属性
3.全部9个指挥官特有AI的ID都需要修改,以免和系统冲突,放在那里等下去调用通用文件的部分属性,{ID修改实例:比如盟军温伦指挥官是这个文件AlliedBalanced.xml
打开这个文件把id="1AlliedBalanced"中的1AlliedBalanced改成别的名字,比如4AlliedBalanced,其余代码不能修改。}
所以现在我们只要重点处理通用文件的代码,修改到能够实现造新单位的功能
1.通用文件的大概内容
『AlliedBaseStates.xml SovietBaseStates.xml JapanBaseStates.xml』的内容:
a.登记AI需要建造的单位的名字,比如时空坦克;
b.各种建造方法:有2种分法,按照场地来分,比如船厂能造什么/兵营能造什么;按照部队属性来分,比如能够造哪些空军/能够造哪些两栖部队;它们对应的是简单和中等以上难度的建造方式
c.建造期望值:也有2种期望值,分别对应简单和中等以上难度,简单难度的期望值是固定的,每种兵种的百分比固定;中等以上难度采用代码判定,决定更喜欢出什么兵种
『AlliedCoopBasePersonality.xml
JapanCoopBasePersonality.xmlSovietCoopBasePersonality.xml』 管理兵种侵略性/防御性
『AlliedCoopBaseSkirmishPersonality.xmlJapanCoopBaseSkirmishPersonality.xml SovietCoopBaseSkirmishPersonality.xml 』管理难度组合
2.以盟军的超时空坦克为例,讲解如何加入新单位并让电脑造,盟军的修改文件为 AlliedBaseStates.xmlAlliedCoopBasePersonality.xml AlliedCoopBaseSkirmishPersonality.xml -------------------------------------------------------------------------------------------------------------------------- AlliedBaseStates.xml的修改 首先要了解这个单位的属性:英文ID,什么阵营的(日本、盟军、苏联);什么类型的(比如陆军、两栖、空军);打算在哪里建造(比如装甲车工厂、兵营、飞机场),我这个时空坦克是盟军单位,陆军非两栖,打算在装甲车工厂建造,英文ID为AlliedChronoVehicle。 我先在简单难度的建造序列里添加它,简单难度是按照兵种在哪里建造分类的,那么时空坦克应该在装甲车工厂序列里添加建造,这个建造序列ID为AlliedBaseStates.xml里的AlliedWarFactoryBuildState_RANDOM,这些序列均不能在原始基础上修改,必须新建序列,我们把这个AlliedWarFactoryBuildState_RANDOM整个建造序列复制出来并改名为AlliedWarFactoryBuildState_RANDOM_Elwin(这个名称随便改不和别的冲突就行),然后在某个地方插入时空坦克的代码,比如我在AlliedAntiVehicleVehicleTech1(多功能步兵车)和AlliedAntiVehicleVehicleTech1(守护者坦克)之间插入一句
<BuildEntryBuild="AlliedChronoVehicle" Heuristic="RANDOM_UNIT"PercentLow="50" PercentHigh="60"/>,整体代码为 - <AIBuildStateDefinition
- id="AlliedWarFactoryBuildState_RANDOM_Elwin">
- <Heuristic>
- <ConstantHeuristic/>
- </Heuristic>
- <BuildEntry Build="AlliedAntiInfantryVehicle_Ground"
- Heuristic="RANDOM_UNIT" PercentLow="0" PercentHigh="15"/>
- <BuildEntry Build="AlliedAntiVehicleVehicleTech1"
- Heuristic="RANDOM_UNIT" PercentLow="15" PercentHigh="25"/>
- <BuildEntry Build="AlliedChronoVehicle" Heuristic="RANDOM_UNIT" PercentLow="25" PercentHigh="50"/>
- <BuildEntry Build="AlliedAntiAirVehicleTech1"
- Heuristic="RANDOM_UNIT" PercentLow="50" PercentHigh="60"/>
- <BuildEntry Build="AlliedAntiVehicleVehicleTech3"
- Heuristic="RANDOM_UNIT" PercentLow="60" PercentHigh="80"/>
- <BuildEntry Build="AlliedAntiStructureVehicle"
- Heuristic="RANDOM_UNIT" PercentLow="80" PercentHigh="100"/>
- <BuildEntry Build="AlliedMiner" Heuristic="HARVESTER"/>
-
- </AIBuildStateDefinition>
复制代码
要点:1.插入的单位的最低百分比要对应它之前单位的最高百分比;插入单位的最高百分比要对应它之后单位的最低百分比
中等以上难度就不是按照兵种在哪里建造来分了,它是按照兵种是什么属性来分,比如
时空坦克是陆地的属性,那么在AlliedBaseStates.xml里找到这个ID:AlliedLandUnitBuildState 把整段这个ID的代码复制出来,另取名为AlliedLandUnitBuildState_Elwin,仿制幻影坦克写 一段话,最终代码为:
- <AIBuildStateDefinition id="AlliedLandUnitBuildState_Elwin"> <Heuristic> <ObjectOfTypeExistsHeuristic PassIfExists="true" Location="Land"> <ObjectFilter Relationship="ENEMIES" Rule="ALL" > </ObjectFilter> </ObjectOfTypeExistsHeuristic> <PathToTargetHeuristic Surface="Land"PathExists="true"ObjectTypeToUseForTest="AlliedAntiInfantryInfantry"LocomotorConditionToUseForTest="NORMAL" /> </Heuristic> <BuildEntry Build="AlliedWarFactory"Heuristic="FACTORY"/> <BuildEntry Build="AlliedAntiInfantryInfantry" Heuristic="BEST_UNIT_EXPECTED"> <BlockIfThingNearFactory Rule="ANY"Relationship="ENEMIES"> <IncludeThing>AlliedScoutInfantry</IncludeThing> <IncludeThing>SovietScoutInfantry</IncludeThing> </BlockIfThingNearFactory> </BuildEntry> <BuildEntry Build="AlliedAntiVehicleInfantry"Heuristic="BEST_UNIT_EXPECTED"> <BlockIfThingNearFactory Rule="ANY"Relationship="ENEMIES"> <IncludeThing>AlliedScoutInfantry</IncludeThing> <IncludeThing>SovietScoutInfantry</IncludeThing> </BlockIfThingNearFactory> </BuildEntry> <BuildEntry Build="AlliedAntiVehicleVehicleTech1"Heuristic="BEST_UNIT_EXPECTED"> <BlockIfThingNearFactory Rule="ANY"Relationship="ENEMIES"> <IncludeThing>SovietHeavyAntiVehicleInfantry</IncludeThing> </BlockIfThingNearFactory> </BuildEntry> <BuildEntry Build="AlliedChronoVehicle"Heuristic="BEST_UNIT_EXPECTED"> <BlockIfThingNearFactory Rule="ANY"Relationship="ENEMIES"> <IncludeThing>SovietHeavyAntiVehicleInfantry</IncludeThing> </BlockIfThingNearFactory> </BuildEntry> <BuildEntry Build="AlliedAntiAirVehicleTech1"Heuristic="BEST_UNIT_EXPECTED"> <BlockIfThingNearFactory Rule="ANY"Relationship="ENEMIES"> <IncludeThing>SovietHeavyAntiVehicleInfantry</IncludeThing> </BlockIfThingNearFactory> </BuildEntry> <BuildEntry Build="AlliedAntiVehicleVehicleTech3"Heuristic="BEST_UNIT_EXPECTED"> <BlockIfThingNearFactory Rule="ANY"Relationship="ENEMIES"> <IncludeThing>SovietHeavyAntiVehicleInfantry</IncludeThing> </BlockIfThingNearFactory> </BuildEntry> <BuildEntry Build="AlliedAntiStructureVehicle"Heuristic="BEST_UNIT_WEIGHTED"> <BlockIfThingNearFactory Rule="ANY" Relationship="ENEMIES"> <IncludeThing>SovietHeavyAntiVehicleInfantry</IncludeThing> </BlockIfThingNearFactory> </BuildEntry> </AIBuildStateDefinition>
复制代码
要点: BEST_UNIT_WEIGHTEDBEST_UNIT_EXPECTED 这些语句是对某些兵种的不同的预期值,可以仿着修改。 |