红警3 RA3 MOD 进阶教程翻译
[红警2共和国之辉下载www.xtcdj.com| 更新日期:2009年6月5日
hook上的进阶教程 没有翻译编辑声音和编辑多人游戏队伍颜色(这两个分量不大)
http://www.hookedoncnc.com/red-alert-3/mod-sdk-guide/
MOD高手请指正纰漏。
包括:
(bluefrank88 朋友已经翻译了武器修改的一些信息,我为了保持连贯性,就把自己翻的也贴进来了。)
1。如何修改单位图标 2.关于修改单位的更多信息 3.怎样改变单位和建筑的建造时间和花费 4.怎样改变一个用户或是建筑的科技附属性5.怎样改变单位或是建筑的武器
6.关于武器修改的更多消息。
7.为单位或者建筑添加维修工蜂。 8.如何编辑单位经验等级
How to change unit icons如何修改单位图标
嗨,这次是关于cameo的教程,Cameos,或许你不知道,正是用来作为单位图标的图像,,正是因为使用了它们,你在训练一个单位,或是建造一个建筑时,你知道你在训练什么,在建造什么,所以对于新的单位或是修改已有的单位来说,这是很重要的。今天,我们将学习去编辑一个新单位的cameo,我们还用mytank的例子。
这里是他的主要设置:
<GameObject
id=”mytank”
inheritFrom=”BaseVehicle”
SelectPortrait=”Portrait_AlliedAntiVehicleVehicleTech1″ !
ButtonImage=”Button_AlliedAntiVehicleVehicleTech1_on” !
Side=”Allies”
SubGroupPriority=”425″
EditorSorting=”UNIT”
HealthBoxHeightOffset=”25″
BuildTime=”10″
CommandSet=”mytankCommandSet”
KindOf=”SELECTABLE CAN_ATTACK CAN_CAST_REFLECTIONS SCORE VEHICLE CAN_BE_FAVORITE_UNIT T2_UNIT”
WeaponCategory=”CANNON”
VoicePriority=”188″
EditorName=”mytank”
Description=”Desc:mytank”
TypeDescription=”Type:mytank”
UnitIntro=”Allied_GuardianTank_UnitIntro”>
<DisplayName
xai:joinAction=”Replace” xmlns:xai=”uri:ea.com:eala:asset:instance”>Name:mytank</DisplayName>
有两个地方是和改变cameo有关的:
SelectPortrait=”Portrait_AlliedAntiVehicleVehicleTech1″
ButtonImage=”Button_AlliedAntiVehicleVehicleTech1_on”
现在,我们把上面文本括号里面的内容变为“Portrait_mytank”,当然,脚本会要求一个按钮图像和肖像,当然这两个可以不一样,但为了简单起见,我们使用一样的图像。
现在,保存并关闭它,我们进入图像文件夹 RA3 MOD SDK\Art\images
如果你看到了先驱者炮艇的肖像,那你就来对了。现在,我们要复制SampleUpdatedPackedImages.xml文件,把它重命名为SampleUpdatedPackedImages 2,现在,打开它,删除下面内容出现之前所有内容:
<?xml version=’1.0′ encoding=’UTF-8′?>
<AssetDeclaration xmlns=”uri:ea.com:eala:asset” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>
<Texture id=”Portrait_AlliedHarbingerGunship” File=”Portrait_AlliedHarbingerGunship.tga” OutputFormat=”A8R8G8B8″ GenerateMipMaps=”false” AllowAutomaticResize=”false”/>
<PackedTextureImage id=”Portrait_AlliedHarbingerGunship” Texture=”Portrait_AlliedHarbingerGunship” Rotated=”false”>
<Dimensions x=”128″ y=”128″/>
<Coords x=”0″ y=”0″/>
<TextureDimensions x=”128″ y=”128″/>
</PackedTextureImage>
</AssetDeclaration>
好的,现在我们要做的就是把每个“Portrait_AlliedHarbringerGunship”置换为“Portrait_mytank”。
一旦完成了上述的操作,保存并关闭.xml文件。现在,我们所需要做的就是制作肖像。使用你最喜欢的画图程序(要能够编辑TGA格式),最重要的是要把画的图命名为Portrait_mytank,并且你要把它存在image文件夹下,跟先驱者的肖像放在一起。
注意:图像尺寸最好在128*128或76*106,如果不是,会自动调整大小,但我不喜欢这样。
现在让我来解释我们刚才做的,新的cameo必须通SampleUpdatedPackedImages这种文件来引入mod中,否则,他们不会被使用。
OK,该最后一步了,前往mod.xml文件,在最下方,/asset declaration标签之上,加入如下内容:
<!– New sample portrait –>
<Include type=”all” source=”ART:Images/SampleUpdatedPackedImages2.xml” />
现在,build阁下的mod并享受吧,如果没效果,那么检查你的文件名,确保他们相同。
本教程由EvilConker编写。
More info on editing units 关于修改单位的更多信息
关于单位的文件可以在SageXml\阵营名称\Units文件夹下找到(Allied:盟军 japan:日本 Soviet:苏联)
让我们来看如何修改磁暴步兵。
找到Soviet/Units/SovietHeavyAntiVehicleInfantry.xml.
好吧..我知道..EA使用的名字转换并不是很直白,但你要适应。(单位的xml文件的名字不是其真实的名字,而是另一种名字,比如磁暴步兵,就是在这里的名字就是苏联重型反载具步兵,大家可以根据它们这里名字的意思来推测它们是哪种单位,heavy是重型,Anti的意思是反,克,venhicle是载具,infantyr是步兵,Air是空军,navyship是海军,structure是建筑,bomber是炸弹。Fighter是战斗机,。。解释这些可能多余了)
然后打开单位的文件。
我们看到了一长串的<Include type="all"。。。词条,好的,这些都是用来告诉游戏要使用那些单位动画(动作)。现在还不是那么有趣。
<Include type=”instance” source=”DATA:BaseObjects/BaseInfantry.xml” />意味着这个单位将使用在BaseInfantry.xml文件中定义的一般类步兵单位使用的基本动作。所有的步兵单位都链接到这个基础的文件上。
下面是关键的部分了:
‘inheritFrom=’与上面的并不是十分相同,区别在于,上一个是用于视觉(art),而另一个是用于单位的实际的基本特性.
‘id=’只是每个单位或是物件所需要的独特的标识符。可以随便设,但如果你要引用这个单位的话,要记住它。
‘SelectPortrait’ 和 ‘ButtonImage’对应着两个图标,一个是你在游戏中选择它时的图像,另一个则是建造界面上的图像。
‘Side=”Soviet”这个很明显,磁暴步兵是苏联的单位 (side:阵营)
‘BuildTime=’很重要,决定了单位的制造时间,以秒为单位。
‘CommandSet=’是一个特定的单位的特定的动作集,在这里不讨论。
‘KindOf=’一个制约环境来过滤这个单位可以做什么,不可以做什么
‘SELECTABLE’ 意味着你可以选中这个单位。‘CAN_ATTACK’意味着这个单位可以攻击目标 ‘INFANTRY’意味着这个单位是步兵单位,当然,也可以是别的。
‘VoicePriority’(语音优先级)被用在当你选择了一群不同类型的单位的情况。优先级高的单位会语音响应你的选中。比如,如果你同时选中了动员兵和磁暴步兵,磁暴步兵的语音将被播放。
‘Description’ 和 ‘TypeDescription’这两个标签定义了你在单位的制造界面上可以看到的描述说明。文本信息可以通过字段文件(mod.str)来自定义。
‘HealthBoxHeightOffset’标示单位的生命条在哪里显示,用默认的就行了。
‘UnitIntro’ 在你建造一个单位时,所播放的声音。
‘GameDependency’定义制造该单位需要什么前提。
<GameDependency
id=”ModuleTag_GameDependency”>
<RequiredObject>SovietPowerPlantAdvanced</RequiredObject>
</GameDependency>
从上面我们可以看到,磁暴步兵需要SovietPowerPlantAdvanced苏联的核电厂,实际的生产建筑没有列出来(苏联兵营),列出来是多此一举。
‘BuildCost’标签中的‘Amount=’的值表示该单位的造价。
<BuildCost Account=”=$ACCOUNT_ORE” Amount=”750″/>可以看到,磁暴步兵的造价是750。你可以任意修改这个值,不会影响别的东西,我建议你保持一个成比例的性价比。
‘ArmorSet’子段里的‘Armor=’定义了这个单位是何种装甲类型。这很重要,如果你想改变武器对不同护甲的伤害。
告诉我们这个单位怎样移动,我建议最好不要乱改。最好在你确定要做的情况下改变。你所能做的是修改‘Speed=’值,代表单位的速度。
然后是一大堆我们不愿理的动作条。
还有两个你是愿意修改的。
一个是单位的生命
一个单位的生命在‘Body’子段中如下定义:
<Body>
<ActiveBody
id=”ModuleTag_Body”
MaxHealth=”250″ />
</Body
‘MaxHealth=’可以改为随便一个正整数,我没试过改负数,也不推荐这样做。
第2个就是单位的武器。武器定义在‘WeaponSetUpdate’上,
让我们来看一看磁暴步兵的武器:
Let’s see the Tesla Trooper’s weapon:
<WeaponSetUpdate
id=”ModuleTag_WeaponSetUpdate”>
<WeaponSlotHardpoint
ID=”1″>
<Weapon
Ordering=”PRIMARY_WEAPON”
Template=”SovietHeavyAntiVehicleInfantryTeslaGun”
ForbiddenObjectStatus=”GENERIC_TOGGLE_STATE CHARGING_BASE_DEFENSES”/>
<Weapon
Ordering=”SECONDARY_WEAPON”
Template=”SovietHeavyAntiVehicleInfantryTeslaLinkGun”
ForbiddenObjectStatus=”GENERIC_TOGGLE_STATE”/>
</WeaponSlotHardpoint>
</WeaponSetUpdate>
有两个武器,定义为primary主武器和secondary副武器
不幸的是你不能在这里编辑它们,因为武器专门在Weapon.xml文件中定义。
如果你要修改它们,你要打开Weapon.xml文件,搜索‘SovietHeavyAntiVehicleInfantryTeslaGun’ 和‘SovietHeavyAntiVehicleInfantryTeslaLinkGun’
武器将在另一章讨论,本章结束
感谢Overmind的这篇指导。
How to change the build cost and time of a unit or structure怎样改变单位和建筑的建造时间和花费
还用我们在以第一个教程中的坦克例子,你可以发现修改建造时间和花费简直是小菜一碟。只要修改下划线部分就可以了。
<GameObject
id=”mytank”
inheritFrom=”BaseVehicle”
SelectPortrait=”Portrait_AlliedAntiVehicleVehicleTech1″
ButtonImage=”Button_AlliedAntiVehicleVehicleTech1_on”
Side=”Allies”
SubGroupPriority=”425″
EditorSorting=”UNIT”
HealthBoxHeightOffset=”25″
BuildTime=”10″建造时间=10 秒
CommandSet=”mytankCommandSet”
KindOf=”SELECTABLE CAN_ATTACK CAN_CAST_REFLECTIONS SCORE VEHICLE CAN_BE_FAVORITE_UNIT T2_UNIT”
WeaponCategory=”CANNON”
VoicePriority=”188″
EditorName=”mytank”
Description=”Desc:mytank”
TypeDescription=”Type:mytank”
UnitIntro=”Allied_GuardianTank_UnitIntro”>
<DisplayName
xai:joinAction=”Replace” xmlns:xai=”uri:ea.com:eala:asset:instance”>Name:mytank</DisplayName>
<ObjectResourceInfo>
<BuildCost Account=”=$ACCOUNT_ORE” Amount=”950″/花费 =950>
</ObjectResourceInfo>
How to change the dependancy of a unit or structure怎样改变一个用户或是建筑的科技附属性
一个单位的附属性就是建造这个单位所需要建造的建筑或是要进行的研究。使用前面的坦克例子来看看。
<GameObject
id=”mytank”
inheritFrom=”BaseVehicle”
SelectPortrait=”Portrait_AlliedAntiVehicleVehicleTech1″
ButtonImage=”Button_AlliedAntiVehicleVehicleTech1_on”
Side=”Allies”
SubGroupPriority=”425″
EditorSorting=”UNIT”
HealthBoxHeightOffset=”25″
BuildTime=”10″
CommandSet=”mytankCommandSet”
KindOf=”SELECTABLE CAN_ATTACK CAN_CAST_REFLECTIONS SCORE VEHICLE CAN_BE_FAVORITE_UNIT T2_UNIT”
WeaponCategory=”CANNON”
VoicePriority=”188″
EditorName=”mytank”
Description=”Desc:mytank”
TypeDescription=”Type:mytank”
UnitIntro=”Allied_GuardianTank_UnitIntro”>
<DisplayName
xai:joinAction=”Replace” xmlns:xai=”uri:ea.com:eala:asset:instance”>Name:mytank</DisplayName>
<ObjectResourceInfo>
<BuildCost Account=”=$ACCOUNT_ORE” Amount=”950″/>
</ObjectResourceInfo>
<GameDependency>
<NeededUpgrade>Upgrade_AlliedTech2</NeededUpgrade>
</GameDependency>
下划线部分表示我们的坦克需要盟军的高级授权来建造。删除它,就可以使得该单位的建造不再有附属性。
当然,你也可以根据你所设的附属性等级来修改粗体部分,你可以选择1,2,3。(这一行的作用是设定单位的某些属性,单位属于几级单位)
How to change the weapon of a unit or structure怎样改变单位或是建筑的武器
还使用以前的坦克作例子,把其xml文件拉到下面所示文本处,当然,你也可以使用搜索功能来搜索“weapon”
<WeaponSetUpdate
id=”ModuleTag_WeaponSetUpdate”>
<WeaponSlotTurret
ID=”1″>
<Weapon
Ordering=”PRIMARY_WEAPON”
Template=”AlliedAntiVehicleVehicleTech1Cannon”
ForbiddenObjectStatus=”GENERIC_TOGGLE_STATE”/>
<Weapon
Ordering=”SECONDARY_WEAPON”
Template=”AlliedAntiVehicleVehicleTech1TargetPainter”
ObjectStatus=”GENERIC_TOGGLE_STATE”/>
<TurretSettings
TurretTurnRate=”360″
MinimumPitch=”-30d”
AllowsPitch=”true”
TurretPitchRate=”180″
MinIdleScanTime=”1.0s”
MaxIdleScanTime=”4.0s”
MinIdleScanAngle=”30.0″
MaxIdleScanAngle=”50.0″
ComeToHaltJiggle=”3d”>
<TurretAITargetChooserData
IdleScanDelay=”=$FAST_IDLE_SCAN_DELAY”
CanAcquireDynamicIfAssignedOutOfRange=”true” />
</TurretSettings>
</WeaponSlotTurret>
从上面可以看到,这个单位有两种武器,因为是取自守护者坦克,因此有一个探测瞄准器作为副武器,现在我们只需关注主武器(下划线部分)。可以把它替换为其他的武器模板,只要查看别的单位的武器模板的名称就可以了,或者直接看weapon.xml文件。要记住,有些武器比如激光类的需要额外的代码来画出来,你可以打开这个激光武器单位的xml文件,把它的绘图代码拷到武器代码的下面。(有时候会出现原来的武器的开火效果和新的武器的效果并存,这应该也是绘图代码在作怪)
More info on how to edit weapons关于武器修改的更多消息。
游戏的所有武器都在GlobalData/Weapon.xml中保存。
就让我们来改一下海啸坦克的武器。
打开Weapon.xml文件,搜索JapanAntiVehicleVehicleTech1Cannon,这是海啸坦克的武器在这里的名称。
只需关注一些条目:
‘AttackRange=’攻击范围。
‘WeaponSpeed=’武器速度,其实是武器射出弹药的速度,对于激光类武器来说,很快,导弹类则很慢。
‘AcceptableAimDelta=’武器的最大攻击角度。与一个单位的炮塔是如何定义的有关。增加这个可以使武器开火更快,但是炮塔的动作将变得很丑。
‘ClipSize=’可以用在爆发型武器(应该指动员兵或是双刃那样)和弹药(应该是轰炸机)。对于没有弹药限制的单位,你可以把这个设的大一些,让武器在爆发模式下更持久。
‘AutoReloadsClip=’告诉你武器是自动重装还是有限需要回去补充。‘AUTO’表示没有弹药限制,‘RETURN_TO_BASE’表示单位要回去补充弹药。
‘Flags=’ 例如”ATTACK_NEEDS_LINE_OF_SIGHT”,表示武器开火需要看到目标。
‘CanFireWhileMoving=’表示武器是否可以运动中开火。
‘RequiredAntiMask=’过滤目标,使得武器只能攻击制定类型的目标。例如
RequiredAntiMask=”ANTI_WATER ANTI_GROUND ANTI_STRUCTURE”武器将会射击任何在水面上,陆地上的单位和建筑,但是,不能对空和反潜。
‘FiringDuration=’武器开火持续时间,经常被用在不同持续时间的武器开火动作上。
‘ClipReloadTime=’开火的准确速率。降低以使武器更快,但一定要在‘FiringDuration’之上,这样动作才能正常进行。
‘<Nuggets>’ 子段定义了武器的弹头和抛射物。
懂得其工作机理很重要。
武器其实并不造成伤害,他只是以一定速率发射出了抛射物,抛射物带着弹头到达目标,然后弹头来造成伤害。
所以说,武器造成了伤害是技术上的错误。海啸武器的弹头被称为‘JapanAntiVehicleVehicleTech1Warhead’.
来看看我们可以改些什么。
首先,弹头有自己的‘RequiredAntiMask’,这个理论上必须匹配武器的‘RequiredAntiMask’中的一个。但如果你想进一步做些什么,这也不是强制的。然后,我们找到‘DamageNugget’,它掌握着弹头所能造成的伤害。
改变‘Damage=’来改变弹头的伤害。
‘DamageType=’定义了伤害的类型,与护甲类型一起使用,来造成不同的伤害。
‘DeathType=’代表单位在弹头下的死亡方式,只有很少的死亡类型。
‘SuppressionNugget’表示弹头的区域压制效果。‘Radius=’表示压制的范围,‘DurationSeconds=’表示压制持续时间,单位为秒。
这就是关于武器的一切,随心所欲的修改吧。
感谢Overmind提供的教程。
How to add repair drones to units and structures为单位或者建筑添加维修工蜂。
随便找个单位或者建筑物,就拿我们的坦克也行,打开其xml文件向下拖直到你 找到了behaviors的起始标签(看起来像<Behaviors> 后面跟着</Draws>),也可以使用搜索功能来找。一旦你定位了,复制粘贴下面的代码到behaviors的开始标签<Behaviors>和结束标签</Behaviors>之间的任意部分。
<AssignSlavesTargetObjectSpecialPower
id=”ModuleTag_SpecialPowerRepairVehicle”
SpecialPowerTemplate=”SpecialPower_TargetedRepairVehicle” />
<SpawnBehavior
id=”ModuleTag_SpawnRepairDrones”
SpawnNumberData=”3″
InitialBurst=”3
SpawnReplaceDelayData=”10s”
SpawnedRequireSpawner=”true”
KillSpawnsOnCaptured=”true”
SpawnInsideBuilding=”true”
KillSpawnsOnDisabled=”true”>
<Die
DeathTypes=”ALL” />
<SpawnTemplate>AlliedWarFactoryRepairDrone</SpawnTemplate>
</SpawnBehavior>
改变下划线部分的值,分别来确定维修工蜂的总个数和该单位被制造出来时产生的工蜂个数。
How to edit experience levels如何编辑单位经验等级
要改变单位的XP等级,要去GlobalData/ExperienceLevels.xml文件。
There you can edit the XP values for all units.
这里你可以修改所有单位的经验值。如果你加入了新单位,你要把它们也加入到这个文件里,这样它们才能升级。
现在我们来谈谈这个文件。
最开始,定义了一般的老兵级别veterancy levels (VLs)。.
别改变它们,除非你为一个新的老兵系统增加了视觉效果。
所有单位初始级别是1,而2,3,4,分别对应老兵等级的1,2,3 (veterancy levels 1 2 and 3)
我称它们为有经验的,老兵,精英(‘experienced’, ‘veteran’ and ‘elite’),EA称它们为老兵,精英,英雄(‘veteran’ ‘elite’ and ‘heroic’),名称无所谓,所以我用LV1 LV2 LV3来代替。
现在来看看它们怎么运作的,其实很简单。
这是从ExperienceLevels.xml中提取的盟军海豚的经验代码:
等级1
<ExperienceLevelTemplate
id=”AlliedAntiNavalScoutExperienceLevel_1″
inheritFrom=”ExperienceLevel_AlliedRank1″
RequiredExperience=”1″
ExperienceAward=”750″>
<Target>AlliedAntiNavalScout</Target>
</ExperienceLevelTemplate>
等级2
<ExperienceLevelTemplate
id=”AlliedAntiNavalScoutExperienceLevel_2″
inheritFrom=”ExperienceLevel_AlliedRank2″
Prerequisite=”AlliedAntiNavalScoutExperienceLevel_1″
RequiredExperience=”2250″
ExperienceAward=”1500″>
<Target>AlliedAntiNavalScout</Target>
</ExperienceLevelTemplate>
等级3
<ExperienceLevelTemplate
id=”AlliedAntiNavalScoutExperienceLevel_3″
inheritFrom=”ExperienceLevel_AlliedRank3″
Prerequisite=”AlliedAntiNavalScoutExperienceLevel_2″
RequiredExperience=”4500″
ExperienceAward=”2250″>
<Target>AlliedAntiNavalScout</Target>
</ExperienceLevelTemplate>
等级4
<ExperienceLevelTemplate
id=”AlliedAntiNavalScoutExperienceLevel_4″
inheritFrom=”ExperienceLevel_AlliedRank4″
Prerequisite=”AlliedAntiNavalScoutExperienceLevel_3″
RequiredExperience=”6750″
ExperienceAward=”3000″>
<Target>AlliedAntiNavalScout</Target>
</ExperienceLevelTemplate>
The 4 templates define all 4 ranks of the unit: a default one (level 1) and the 3 promoted versions.
四个经验模板(即从<<ExperienceLevelTemplate。。到</ExperienceLevelTemplate>是一个经验模板)代表等级1到4。
我们工作集中在两个标签上。
第一个‘RequiredExperience=’,定义了该等级的该单位需要多少经验才能升级。例如,盟军海豚要6750的经验才能升到LV3。
The second function: ‘ExperienceAward=’ gives the value of XP a unit will gain by killing the current unit at it’s current level.
第二个‘ExperienceAward=’,定义了,该等级下的单位值多少经验。比如一个苏联潜艇宰了一只1级海豚,得到750经验,宰了一只3级海豚,得到3000经验。
我一般会把单位的升级经验设为其造价3倍,本身经验则为造价本身。
随便设就行了,别太夸张。
感谢Overmind提供本教程。
How to change special power templates如何改变特殊能力模板。
特殊能力模板是游戏中最复杂也最强大的部分。
用这些模板,你基本上可以无所不能,但要小心,它们也不容易对付。
对应的文件是GlobalData/SpecialPowerTemplates.xml.
从一个简单的例子开始:
<SpecialPowerTemplate
id=”SpecialPower_UnpackReplaceSelf”
TargetType=”LOCATION_AND_ANGLE”
NameOfVoiceNameToUseAsInitiateIntendToDoVoice=”VoiceDeploy”
RadiusCursorRadius=”1″
PreventConditions=”BOOBY_TRAPPED IS_BEING_DRAGGED SOLD”
Flags=”WATER_OK FOGGED_SHROUDED_CELLS_OK CANNOT_LEAVE_ENCLOSURE CAN_NOT_BE_SCRAMBLED”
WaypointModeTerminal=”false” >
<GameDependency
id=”SpecialPower_UnpackReplaceSelf_GameDependency”
ForbiddenModelConditions=”UNPACKING”/>
</SpecialPowerTemplate>
上述代码是一个MCV的展开特殊能力. ‘id=’必须是第一无二的,以便我们以后使用这个模板.
‘TargetType=’是一个目标选择系统,定义了当前的支援/特殊能力可以作用的对象. 被CAPS的关键词是被硬编码的动作,不能被重定义,但是这里有很多,所以我们只需去学习使用.所以,MCV展开的目标可以使任何地点/多角度的方位.
‘NameOfVoiceNameToUseAsInitiateIntendToDoVoice’字段定义了该能力模板执行时所播放的声音.这里的是MCV在展开时的音效.
‘RadiusCursorRadius=’影响你的光标的外形.对于一些支援能力,你的光标会变为一些不同的形状(比如核弹).这个标签定义了在使用在这个能力时,你的光标如何显示.
‘PreventConditions=’这个很重要.一个情况过滤器,来判断特殊能力动作是否可执行.我们可以看到,MCV不能展开的情况被定义了.例如‘IS_BEING_DRAGGED’,这个情况指的是MCV被天启的鱼叉捕获, ‘SOLD’指的是你买掉总部的时候,还想使用它的打包/部署功能.
‘Flags=’定义了其他的情况,这些情况被‘PreventConditions=’定义为限制条件.这个准确的保证了在特定的情况下,事情会无误的发生.
比如, ‘WATER_OK’表示,MCV可以在水面上展开.现在它当然可以按照缺省值来做,但在某些情况下,最好你最好保证事情会按你想的发展.
‘GameDependency’另一个特殊的功能.在当前的情况下,来阻止模型错误的发生.
‘ForbiddenModelConditions=”UNPACKING”表示MCV已经在展开时,不能在执行展开/打包动作.
现在我会给一个实实在在的修改例子.
我一直深恶痛疾的,EA这个2B一直不做的就是铁幕根本不是真正的铁幕,很多东西仍能够作用于这层神圣不可侵犯的护盾.
所以我要让铁幕重新雄起,就像在2代中一样,绝对的免疫.有两个点会影响它,我要修改的就是缩小光线和超时空转换.
到缩小光线(shrink ray)的模板,如下:
<SpecialPowerTemplate
id=”SpecialPower_ShrinkRay”
ReloadTime=”10s”
TargetType=”OBJECT”
NameOfVoiceNameToUseAsInitiateIntendToDoVoice=”VoiceShrinkRay”
Flags=”NEEDS_OBJECT_FILTER CANNOT_LEAVE_ENCLOSURE”
WaypointModeTerminal=”false” >
<!– must have same object filter as AlliedSupportAircraftShrinkRay –>
<ObjectFilter
Rule=”ANY”
Include=”VEHICLE HUGE_VEHICLE TIME_BOMB”
Exclude=”AIRCRAFT”
StatusBitFlagsExclude=”SUBMERGED AIRBORNE_TARGET”>
</ObjectFilter>
</SpecialPowerTemplate>
我们感兴趣的就是‘ObjectFilter’(目标过滤器),定义了光线可以作用的对象.这里定义的内容是:光线可以射载具,重型载具和时间炸弹,天上飞的和水下潜的它没辙.
现在我要让他在铁幕单位面前也阳痿不举.
于是我找到了硬编码的‘UNDER_IRON_CURTAIN’(铁幕之下)动作/特性条,以及铁幕的激活效果‘IronCurtainEffect’
对缩小光线的操作如下:
<SpecialPowerTemplate
id=”SpecialPower_ShrinkRay”
ReloadTime=”10s”
TargetType=”OBJECT”
NameOfVoiceNameToUseAsInitiateIntendToDoVoice=”VoiceShrinkRay”
Flags=”NEEDS_OBJECT_FILTER CANNOT_LEAVE_ENCLOSURE”
WaypointModeTerminal=”false” >
<!– must have same object filter as AlliedSupportAircraftShrinkRay –>
<ObjectFilter
Rule=”ANY”
Include=”VEHICLE HUGE_VEHICLE TIME_BOMB”
Exclude=”AIRCRAFT”
StatusBitFlagsExclude=”SUBMERGED AIRBORNE_TARGET UNDER_IRON_CURTAIN”>
<ExcludeThing>IronCurtainEffect</ExcludeThing>
</ObjectFilter>
</SpecialPowerTemplate>
我要做的就是把‘UNDER_IRON_CURTAIN’加到例外情况里,这样光线在铁幕单位前就射不了了.( StatusBitFlagsExclude=”SUBMERGED AIRBORNE_TARGET UNDER_IRON_CURTAIN”>)
‘ExcludeThing’也使得光线不能在铁幕效果生效时发射(例如,我正好激活了一个铁幕),同样,对超时空转换,我也这样做了,铁幕单位不会再被超时空转换推倒了. (<ExcludeThing>IronCurtainEffect</ExcludeThing>)
现在再给一个例子,让你更深入了解特殊能力模板的工作机制.
我将解说超时空换位怎样发生.
<SpecialPowerTemplate
id=”SpecialPowerChronoSwapTeleport”
ReloadTime=”120s”
TargetType=”OBJECT”
EvaEventToPlayWhenSelectingTarget=”SelectUnit”
inheritFrom=”SpecialPowerChrono_Base”
RequiredPlayerTech=”PlayerTech_Allied_ChronoSwap”>
<ObjectFilter
Rule=”ANY”
Relationship=”ALLIES”
Include=”INFANTRY VEHICLE TIME_BOMB”
Exclude=”AIRCRAFT”
StatusBitFlagsExclude=”SUBMERGED AIRBORNE_TARGET NOT_IN_WORLD”>
<IncludeThing>AlliedTimeBombLvl1</IncludeThing>
<IncludeThing>AlliedTimeBombLvl2</IncludeThing>
<IncludeThing>AlliedTimeBombLvl3</IncludeThing>
</ObjectFilter>
<GameDependency
id=”Allied_ChronoSwapTeleport_GameDependency”>
<RequiredObject>AlliedConstructionYard</RequiredObject>
</GameDependency>
</SpecialPowerTemplate>
‘TargetType=”OBJECT”表示在用这个能力时,我们必须选择一个单位.
‘EvaEventToPlayWhenSelectingTarget=’表示在你选择该单位时播放的EVA大妈的声音.
‘nheritFrom=’在源代码中被广泛使用.意味着定义的对象或是模板使用了一些别处定义的基础特性.在当前情况下,表示超时空换位是一个基于超时空技术的能力.
‘Relationship=表示能力是否可用于自己单位,敌人,还是两者皆可.在这种情况,是“ALLIES”(并非的盟军阵营(Allied),而是指你自己的单位或是友军),这样能力只作用于你的单位.
该能力,如你所见,将作用于步兵,载具和时间炸弹,对天上飞的和水下藏的无能为力.
‘IncludeThing’确保该能力能够作用于时间炸弹,其实是多余的,因为炸弹被单独的另外定义了.
最后的过滤器‘RequiredObject’是一个附属,告诉你要有总部才能使用该能力.
希望我让各位醍醐灌顶了。
记住,特殊能力模板可以无所不能,但确保你知道自己到底在干啥.
感谢Overmind为本次教学所作的。
http://www.hookedoncnc.com/red-alert-3/mod-sdk-guide/
MOD高手请指正纰漏。
包括:
(bluefrank88 朋友已经翻译了武器修改的一些信息,我为了保持连贯性,就把自己翻的也贴进来了。)
1。如何修改单位图标 2.关于修改单位的更多信息 3.怎样改变单位和建筑的建造时间和花费 4.怎样改变一个用户或是建筑的科技附属性5.怎样改变单位或是建筑的武器
6.关于武器修改的更多消息。
7.为单位或者建筑添加维修工蜂。 8.如何编辑单位经验等级
9.如何改变特殊能力模板。
How to change unit icons如何修改单位图标
嗨,这次是关于cameo的教程,Cameos,或许你不知道,正是用来作为单位图标的图像,,正是因为使用了它们,你在训练一个单位,或是建造一个建筑时,你知道你在训练什么,在建造什么,所以对于新的单位或是修改已有的单位来说,这是很重要的。今天,我们将学习去编辑一个新单位的cameo,我们还用mytank的例子。
这里是他的主要设置:
<GameObject
id=”mytank”
inheritFrom=”BaseVehicle”
SelectPortrait=”Portrait_AlliedAntiVehicleVehicleTech1″ !
ButtonImage=”Button_AlliedAntiVehicleVehicleTech1_on” !
Side=”Allies”
SubGroupPriority=”425″
EditorSorting=”UNIT”
HealthBoxHeightOffset=”25″
BuildTime=”10″
CommandSet=”mytankCommandSet”
KindOf=”SELECTABLE CAN_ATTACK CAN_CAST_REFLECTIONS SCORE VEHICLE CAN_BE_FAVORITE_UNIT T2_UNIT”
WeaponCategory=”CANNON”
VoicePriority=”188″
EditorName=”mytank”
Description=”Desc:mytank”
TypeDescription=”Type:mytank”
UnitIntro=”Allied_GuardianTank_UnitIntro”>
<DisplayName
xai:joinAction=”Replace” xmlns:xai=”uri:ea.com:eala:asset:instance”>Name:mytank</DisplayName>
有两个地方是和改变cameo有关的:
SelectPortrait=”Portrait_AlliedAntiVehicleVehicleTech1″
ButtonImage=”Button_AlliedAntiVehicleVehicleTech1_on”
现在,我们把上面文本括号里面的内容变为“Portrait_mytank”,当然,脚本会要求一个按钮图像和肖像,当然这两个可以不一样,但为了简单起见,我们使用一样的图像。
现在,保存并关闭它,我们进入图像文件夹 RA3 MOD SDK\Art\images
如果你看到了先驱者炮艇的肖像,那你就来对了。现在,我们要复制SampleUpdatedPackedImages.xml文件,把它重命名为SampleUpdatedPackedImages 2,现在,打开它,删除下面内容出现之前所有内容:
<?xml version=’1.0′ encoding=’UTF-8′?>
<AssetDeclaration xmlns=”uri:ea.com:eala:asset” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>
<Texture id=”Portrait_AlliedHarbingerGunship” File=”Portrait_AlliedHarbingerGunship.tga” OutputFormat=”A8R8G8B8″ GenerateMipMaps=”false” AllowAutomaticResize=”false”/>
<PackedTextureImage id=”Portrait_AlliedHarbingerGunship” Texture=”Portrait_AlliedHarbingerGunship” Rotated=”false”>
<Dimensions x=”128″ y=”128″/>
<Coords x=”0″ y=”0″/>
<TextureDimensions x=”128″ y=”128″/>
</PackedTextureImage>
</AssetDeclaration>
好的,现在我们要做的就是把每个“Portrait_AlliedHarbringerGunship”置换为“Portrait_mytank”。
一旦完成了上述的操作,保存并关闭.xml文件。现在,我们所需要做的就是制作肖像。使用你最喜欢的画图程序(要能够编辑TGA格式),最重要的是要把画的图命名为Portrait_mytank,并且你要把它存在image文件夹下,跟先驱者的肖像放在一起。
注意:图像尺寸最好在128*128或76*106,如果不是,会自动调整大小,但我不喜欢这样。
现在让我来解释我们刚才做的,新的cameo必须通SampleUpdatedPackedImages这种文件来引入mod中,否则,他们不会被使用。
OK,该最后一步了,前往mod.xml文件,在最下方,/asset declaration标签之上,加入如下内容:
<!– New sample portrait –>
<Include type=”all” source=”ART:Images/SampleUpdatedPackedImages2.xml” />
现在,build阁下的mod并享受吧,如果没效果,那么检查你的文件名,确保他们相同。
本教程由EvilConker编写。
More info on editing units 关于修改单位的更多信息
关于单位的文件可以在SageXml\阵营名称\Units文件夹下找到(Allied:盟军 japan:日本 Soviet:苏联)
让我们来看如何修改磁暴步兵。
找到Soviet/Units/SovietHeavyAntiVehicleInfantry.xml.
好吧..我知道..EA使用的名字转换并不是很直白,但你要适应。(单位的xml文件的名字不是其真实的名字,而是另一种名字,比如磁暴步兵,就是在这里的名字就是苏联重型反载具步兵,大家可以根据它们这里名字的意思来推测它们是哪种单位,heavy是重型,Anti的意思是反,克,venhicle是载具,infantyr是步兵,Air是空军,navyship是海军,structure是建筑,bomber是炸弹。Fighter是战斗机,。。解释这些可能多余了)
然后打开单位的文件。
我们看到了一长串的<Include type="all"。。。词条,好的,这些都是用来告诉游戏要使用那些单位动画(动作)。现在还不是那么有趣。
<Include type=”instance” source=”DATA:BaseObjects/BaseInfantry.xml” />意味着这个单位将使用在BaseInfantry.xml文件中定义的一般类步兵单位使用的基本动作。所有的步兵单位都链接到这个基础的文件上。
下面是关键的部分了:
‘inheritFrom=’与上面的并不是十分相同,区别在于,上一个是用于视觉(art),而另一个是用于单位的实际的基本特性.
‘id=’只是每个单位或是物件所需要的独特的标识符。可以随便设,但如果你要引用这个单位的话,要记住它。
‘SelectPortrait’ 和 ‘ButtonImage’对应着两个图标,一个是你在游戏中选择它时的图像,另一个则是建造界面上的图像。
‘Side=”Soviet”这个很明显,磁暴步兵是苏联的单位 (side:阵营)
‘BuildTime=’很重要,决定了单位的制造时间,以秒为单位。
‘CommandSet=’是一个特定的单位的特定的动作集,在这里不讨论。
‘KindOf=’一个制约环境来过滤这个单位可以做什么,不可以做什么
‘SELECTABLE’ 意味着你可以选中这个单位。‘CAN_ATTACK’意味着这个单位可以攻击目标 ‘INFANTRY’意味着这个单位是步兵单位,当然,也可以是别的。
‘VoicePriority’(语音优先级)被用在当你选择了一群不同类型的单位的情况。优先级高的单位会语音响应你的选中。比如,如果你同时选中了动员兵和磁暴步兵,磁暴步兵的语音将被播放。
‘Description’ 和 ‘TypeDescription’这两个标签定义了你在单位的制造界面上可以看到的描述说明。文本信息可以通过字段文件(mod.str)来自定义。
‘HealthBoxHeightOffset’标示单位的生命条在哪里显示,用默认的就行了。
‘UnitIntro’ 在你建造一个单位时,所播放的声音。
‘GameDependency’定义制造该单位需要什么前提。
<GameDependency
id=”ModuleTag_GameDependency”>
<RequiredObject>SovietPowerPlantAdvanced</RequiredObject>
</GameDependency>
从上面我们可以看到,磁暴步兵需要SovietPowerPlantAdvanced苏联的核电厂,实际的生产建筑没有列出来(苏联兵营),列出来是多此一举。
‘BuildCost’标签中的‘Amount=’的值表示该单位的造价。
<BuildCost Account=”=$ACCOUNT_ORE” Amount=”750″/>可以看到,磁暴步兵的造价是750。你可以任意修改这个值,不会影响别的东西,我建议你保持一个成比例的性价比。
‘ArmorSet’子段里的‘Armor=’定义了这个单位是何种装甲类型。这很重要,如果你想改变武器对不同护甲的伤害。
告诉我们这个单位怎样移动,我建议最好不要乱改。最好在你确定要做的情况下改变。你所能做的是修改‘Speed=’值,代表单位的速度。
然后是一大堆我们不愿理的动作条。
还有两个你是愿意修改的。
一个是单位的生命
一个单位的生命在‘Body’子段中如下定义:
<Body>
<ActiveBody
id=”ModuleTag_Body”
MaxHealth=”250″ />
</Body
‘MaxHealth=’可以改为随便一个正整数,我没试过改负数,也不推荐这样做。
第2个就是单位的武器。武器定义在‘WeaponSetUpdate’上,
让我们来看一看磁暴步兵的武器:
Let’s see the Tesla Trooper’s weapon:
<WeaponSetUpdate
id=”ModuleTag_WeaponSetUpdate”>
<WeaponSlotHardpoint
ID=”1″>
<Weapon
Ordering=”PRIMARY_WEAPON”
Template=”SovietHeavyAntiVehicleInfantryTeslaGun”
ForbiddenObjectStatus=”GENERIC_TOGGLE_STATE CHARGING_BASE_DEFENSES”/>
<Weapon
Ordering=”SECONDARY_WEAPON”
Template=”SovietHeavyAntiVehicleInfantryTeslaLinkGun”
ForbiddenObjectStatus=”GENERIC_TOGGLE_STATE”/>
</WeaponSlotHardpoint>
</WeaponSetUpdate>
有两个武器,定义为primary主武器和secondary副武器
不幸的是你不能在这里编辑它们,因为武器专门在Weapon.xml文件中定义。
如果你要修改它们,你要打开Weapon.xml文件,搜索‘SovietHeavyAntiVehicleInfantryTeslaGun’ 和‘SovietHeavyAntiVehicleInfantryTeslaLinkGun’
武器将在另一章讨论,本章结束
感谢Overmind的这篇指导。
How to change the build cost and time of a unit or structure怎样改变单位和建筑的建造时间和花费
还用我们在以第一个教程中的坦克例子,你可以发现修改建造时间和花费简直是小菜一碟。只要修改下划线部分就可以了。
<GameObject
id=”mytank”
inheritFrom=”BaseVehicle”
SelectPortrait=”Portrait_AlliedAntiVehicleVehicleTech1″
ButtonImage=”Button_AlliedAntiVehicleVehicleTech1_on”
Side=”Allies”
SubGroupPriority=”425″
EditorSorting=”UNIT”
HealthBoxHeightOffset=”25″
BuildTime=”10″建造时间=10 秒
CommandSet=”mytankCommandSet”
KindOf=”SELECTABLE CAN_ATTACK CAN_CAST_REFLECTIONS SCORE VEHICLE CAN_BE_FAVORITE_UNIT T2_UNIT”
WeaponCategory=”CANNON”
VoicePriority=”188″
EditorName=”mytank”
Description=”Desc:mytank”
TypeDescription=”Type:mytank”
UnitIntro=”Allied_GuardianTank_UnitIntro”>
<DisplayName
xai:joinAction=”Replace” xmlns:xai=”uri:ea.com:eala:asset:instance”>Name:mytank</DisplayName>
<ObjectResourceInfo>
<BuildCost Account=”=$ACCOUNT_ORE” Amount=”950″/花费 =950>
</ObjectResourceInfo>
How to change the dependancy of a unit or structure怎样改变一个用户或是建筑的科技附属性
一个单位的附属性就是建造这个单位所需要建造的建筑或是要进行的研究。使用前面的坦克例子来看看。
<GameObject
id=”mytank”
inheritFrom=”BaseVehicle”
SelectPortrait=”Portrait_AlliedAntiVehicleVehicleTech1″
ButtonImage=”Button_AlliedAntiVehicleVehicleTech1_on”
Side=”Allies”
SubGroupPriority=”425″
EditorSorting=”UNIT”
HealthBoxHeightOffset=”25″
BuildTime=”10″
CommandSet=”mytankCommandSet”
KindOf=”SELECTABLE CAN_ATTACK CAN_CAST_REFLECTIONS SCORE VEHICLE CAN_BE_FAVORITE_UNIT T2_UNIT”
WeaponCategory=”CANNON”
VoicePriority=”188″
EditorName=”mytank”
Description=”Desc:mytank”
TypeDescription=”Type:mytank”
UnitIntro=”Allied_GuardianTank_UnitIntro”>
<DisplayName
xai:joinAction=”Replace” xmlns:xai=”uri:ea.com:eala:asset:instance”>Name:mytank</DisplayName>
<ObjectResourceInfo>
<BuildCost Account=”=$ACCOUNT_ORE” Amount=”950″/>
</ObjectResourceInfo>
<GameDependency>
<NeededUpgrade>Upgrade_AlliedTech2</NeededUpgrade>
</GameDependency>
下划线部分表示我们的坦克需要盟军的高级授权来建造。删除它,就可以使得该单位的建造不再有附属性。
当然,你也可以根据你所设的附属性等级来修改粗体部分,你可以选择1,2,3。(这一行的作用是设定单位的某些属性,单位属于几级单位)
How to change the weapon of a unit or structure怎样改变单位或是建筑的武器
还使用以前的坦克作例子,把其xml文件拉到下面所示文本处,当然,你也可以使用搜索功能来搜索“weapon”
<WeaponSetUpdate
id=”ModuleTag_WeaponSetUpdate”>
<WeaponSlotTurret
ID=”1″>
<Weapon
Ordering=”PRIMARY_WEAPON”
Template=”AlliedAntiVehicleVehicleTech1Cannon”
ForbiddenObjectStatus=”GENERIC_TOGGLE_STATE”/>
<Weapon
Ordering=”SECONDARY_WEAPON”
Template=”AlliedAntiVehicleVehicleTech1TargetPainter”
ObjectStatus=”GENERIC_TOGGLE_STATE”/>
<TurretSettings
TurretTurnRate=”360″
MinimumPitch=”-30d”
AllowsPitch=”true”
TurretPitchRate=”180″
MinIdleScanTime=”1.0s”
MaxIdleScanTime=”4.0s”
MinIdleScanAngle=”30.0″
MaxIdleScanAngle=”50.0″
ComeToHaltJiggle=”3d”>
<TurretAITargetChooserData
IdleScanDelay=”=$FAST_IDLE_SCAN_DELAY”
CanAcquireDynamicIfAssignedOutOfRange=”true” />
</TurretSettings>
</WeaponSlotTurret>
从上面可以看到,这个单位有两种武器,因为是取自守护者坦克,因此有一个探测瞄准器作为副武器,现在我们只需关注主武器(下划线部分)。可以把它替换为其他的武器模板,只要查看别的单位的武器模板的名称就可以了,或者直接看weapon.xml文件。要记住,有些武器比如激光类的需要额外的代码来画出来,你可以打开这个激光武器单位的xml文件,把它的绘图代码拷到武器代码的下面。(有时候会出现原来的武器的开火效果和新的武器的效果并存,这应该也是绘图代码在作怪)
More info on how to edit weapons关于武器修改的更多消息。
游戏的所有武器都在GlobalData/Weapon.xml中保存。
就让我们来改一下海啸坦克的武器。
打开Weapon.xml文件,搜索JapanAntiVehicleVehicleTech1Cannon,这是海啸坦克的武器在这里的名称。
只需关注一些条目:
‘AttackRange=’攻击范围。
‘WeaponSpeed=’武器速度,其实是武器射出弹药的速度,对于激光类武器来说,很快,导弹类则很慢。
‘AcceptableAimDelta=’武器的最大攻击角度。与一个单位的炮塔是如何定义的有关。增加这个可以使武器开火更快,但是炮塔的动作将变得很丑。
‘ClipSize=’可以用在爆发型武器(应该指动员兵或是双刃那样)和弹药(应该是轰炸机)。对于没有弹药限制的单位,你可以把这个设的大一些,让武器在爆发模式下更持久。
‘AutoReloadsClip=’告诉你武器是自动重装还是有限需要回去补充。‘AUTO’表示没有弹药限制,‘RETURN_TO_BASE’表示单位要回去补充弹药。
‘Flags=’ 例如”ATTACK_NEEDS_LINE_OF_SIGHT”,表示武器开火需要看到目标。
‘CanFireWhileMoving=’表示武器是否可以运动中开火。
‘RequiredAntiMask=’过滤目标,使得武器只能攻击制定类型的目标。例如
RequiredAntiMask=”ANTI_WATER ANTI_GROUND ANTI_STRUCTURE”武器将会射击任何在水面上,陆地上的单位和建筑,但是,不能对空和反潜。
‘FiringDuration=’武器开火持续时间,经常被用在不同持续时间的武器开火动作上。
‘ClipReloadTime=’开火的准确速率。降低以使武器更快,但一定要在‘FiringDuration’之上,这样动作才能正常进行。
‘<Nuggets>’ 子段定义了武器的弹头和抛射物。
懂得其工作机理很重要。
武器其实并不造成伤害,他只是以一定速率发射出了抛射物,抛射物带着弹头到达目标,然后弹头来造成伤害。
所以说,武器造成了伤害是技术上的错误。海啸武器的弹头被称为‘JapanAntiVehicleVehicleTech1Warhead’.
来看看我们可以改些什么。
首先,弹头有自己的‘RequiredAntiMask’,这个理论上必须匹配武器的‘RequiredAntiMask’中的一个。但如果你想进一步做些什么,这也不是强制的。然后,我们找到‘DamageNugget’,它掌握着弹头所能造成的伤害。
改变‘Damage=’来改变弹头的伤害。
‘DamageType=’定义了伤害的类型,与护甲类型一起使用,来造成不同的伤害。
‘DeathType=’代表单位在弹头下的死亡方式,只有很少的死亡类型。
‘SuppressionNugget’表示弹头的区域压制效果。‘Radius=’表示压制的范围,‘DurationSeconds=’表示压制持续时间,单位为秒。
这就是关于武器的一切,随心所欲的修改吧。
感谢Overmind提供的教程。
How to add repair drones to units and structures为单位或者建筑添加维修工蜂。
随便找个单位或者建筑物,就拿我们的坦克也行,打开其xml文件向下拖直到你 找到了behaviors的起始标签(看起来像<Behaviors> 后面跟着</Draws>),也可以使用搜索功能来找。一旦你定位了,复制粘贴下面的代码到behaviors的开始标签<Behaviors>和结束标签</Behaviors>之间的任意部分。
<AssignSlavesTargetObjectSpecialPower
id=”ModuleTag_SpecialPowerRepairVehicle”
SpecialPowerTemplate=”SpecialPower_TargetedRepairVehicle” />
<SpawnBehavior
id=”ModuleTag_SpawnRepairDrones”
SpawnNumberData=”3″
InitialBurst=”3
SpawnReplaceDelayData=”10s”
SpawnedRequireSpawner=”true”
KillSpawnsOnCaptured=”true”
SpawnInsideBuilding=”true”
KillSpawnsOnDisabled=”true”>
<Die
DeathTypes=”ALL” />
<SpawnTemplate>AlliedWarFactoryRepairDrone</SpawnTemplate>
</SpawnBehavior>
改变下划线部分的值,分别来确定维修工蜂的总个数和该单位被制造出来时产生的工蜂个数。
How to edit experience levels如何编辑单位经验等级
要改变单位的XP等级,要去GlobalData/ExperienceLevels.xml文件。
There you can edit the XP values for all units.
这里你可以修改所有单位的经验值。如果你加入了新单位,你要把它们也加入到这个文件里,这样它们才能升级。
现在我们来谈谈这个文件。
最开始,定义了一般的老兵级别veterancy levels (VLs)。.
别改变它们,除非你为一个新的老兵系统增加了视觉效果。
所有单位初始级别是1,而2,3,4,分别对应老兵等级的1,2,3 (veterancy levels 1 2 and 3)
我称它们为有经验的,老兵,精英(‘experienced’, ‘veteran’ and ‘elite’),EA称它们为老兵,精英,英雄(‘veteran’ ‘elite’ and ‘heroic’),名称无所谓,所以我用LV1 LV2 LV3来代替。
现在来看看它们怎么运作的,其实很简单。
这是从ExperienceLevels.xml中提取的盟军海豚的经验代码:
等级1
<ExperienceLevelTemplate
id=”AlliedAntiNavalScoutExperienceLevel_1″
inheritFrom=”ExperienceLevel_AlliedRank1″
RequiredExperience=”1″
ExperienceAward=”750″>
<Target>AlliedAntiNavalScout</Target>
</ExperienceLevelTemplate>
等级2
<ExperienceLevelTemplate
id=”AlliedAntiNavalScoutExperienceLevel_2″
inheritFrom=”ExperienceLevel_AlliedRank2″
Prerequisite=”AlliedAntiNavalScoutExperienceLevel_1″
RequiredExperience=”2250″
ExperienceAward=”1500″>
<Target>AlliedAntiNavalScout</Target>
</ExperienceLevelTemplate>
等级3
<ExperienceLevelTemplate
id=”AlliedAntiNavalScoutExperienceLevel_3″
inheritFrom=”ExperienceLevel_AlliedRank3″
Prerequisite=”AlliedAntiNavalScoutExperienceLevel_2″
RequiredExperience=”4500″
ExperienceAward=”2250″>
<Target>AlliedAntiNavalScout</Target>
</ExperienceLevelTemplate>
等级4
<ExperienceLevelTemplate
id=”AlliedAntiNavalScoutExperienceLevel_4″
inheritFrom=”ExperienceLevel_AlliedRank4″
Prerequisite=”AlliedAntiNavalScoutExperienceLevel_3″
RequiredExperience=”6750″
ExperienceAward=”3000″>
<Target>AlliedAntiNavalScout</Target>
</ExperienceLevelTemplate>
The 4 templates define all 4 ranks of the unit: a default one (level 1) and the 3 promoted versions.
四个经验模板(即从<<ExperienceLevelTemplate。。到</ExperienceLevelTemplate>是一个经验模板)代表等级1到4。
我们工作集中在两个标签上。
第一个‘RequiredExperience=’,定义了该等级的该单位需要多少经验才能升级。例如,盟军海豚要6750的经验才能升到LV3。
The second function: ‘ExperienceAward=’ gives the value of XP a unit will gain by killing the current unit at it’s current level.
第二个‘ExperienceAward=’,定义了,该等级下的单位值多少经验。比如一个苏联潜艇宰了一只1级海豚,得到750经验,宰了一只3级海豚,得到3000经验。
我一般会把单位的升级经验设为其造价3倍,本身经验则为造价本身。
随便设就行了,别太夸张。
感谢Overmind提供本教程。
How to change special power templates如何改变特殊能力模板。
特殊能力模板是游戏中最复杂也最强大的部分。
用这些模板,你基本上可以无所不能,但要小心,它们也不容易对付。
对应的文件是GlobalData/SpecialPowerTemplates.xml.
从一个简单的例子开始:
<SpecialPowerTemplate
id=”SpecialPower_UnpackReplaceSelf”
TargetType=”LOCATION_AND_ANGLE”
NameOfVoiceNameToUseAsInitiateIntendToDoVoice=”VoiceDeploy”
RadiusCursorRadius=”1″
PreventConditions=”BOOBY_TRAPPED IS_BEING_DRAGGED SOLD”
Flags=”WATER_OK FOGGED_SHROUDED_CELLS_OK CANNOT_LEAVE_ENCLOSURE CAN_NOT_BE_SCRAMBLED”
WaypointModeTerminal=”false” >
<GameDependency
id=”SpecialPower_UnpackReplaceSelf_GameDependency”
ForbiddenModelConditions=”UNPACKING”/>
</SpecialPowerTemplate>
上述代码是一个MCV的展开特殊能力. ‘id=’必须是第一无二的,以便我们以后使用这个模板.
‘TargetType=’是一个目标选择系统,定义了当前的支援/特殊能力可以作用的对象. 被CAPS的关键词是被硬编码的动作,不能被重定义,但是这里有很多,所以我们只需去学习使用.所以,MCV展开的目标可以使任何地点/多角度的方位.
‘NameOfVoiceNameToUseAsInitiateIntendToDoVoice’字段定义了该能力模板执行时所播放的声音.这里的是MCV在展开时的音效.
‘RadiusCursorRadius=’影响你的光标的外形.对于一些支援能力,你的光标会变为一些不同的形状(比如核弹).这个标签定义了在使用在这个能力时,你的光标如何显示.
‘PreventConditions=’这个很重要.一个情况过滤器,来判断特殊能力动作是否可执行.我们可以看到,MCV不能展开的情况被定义了.例如‘IS_BEING_DRAGGED’,这个情况指的是MCV被天启的鱼叉捕获, ‘SOLD’指的是你买掉总部的时候,还想使用它的打包/部署功能.
‘Flags=’定义了其他的情况,这些情况被‘PreventConditions=’定义为限制条件.这个准确的保证了在特定的情况下,事情会无误的发生.
比如, ‘WATER_OK’表示,MCV可以在水面上展开.现在它当然可以按照缺省值来做,但在某些情况下,最好你最好保证事情会按你想的发展.
‘GameDependency’另一个特殊的功能.在当前的情况下,来阻止模型错误的发生.
‘ForbiddenModelConditions=”UNPACKING”表示MCV已经在展开时,不能在执行展开/打包动作.
现在我会给一个实实在在的修改例子.
我一直深恶痛疾的,EA这个2B一直不做的就是铁幕根本不是真正的铁幕,很多东西仍能够作用于这层神圣不可侵犯的护盾.
所以我要让铁幕重新雄起,就像在2代中一样,绝对的免疫.有两个点会影响它,我要修改的就是缩小光线和超时空转换.
到缩小光线(shrink ray)的模板,如下:
<SpecialPowerTemplate
id=”SpecialPower_ShrinkRay”
ReloadTime=”10s”
TargetType=”OBJECT”
NameOfVoiceNameToUseAsInitiateIntendToDoVoice=”VoiceShrinkRay”
Flags=”NEEDS_OBJECT_FILTER CANNOT_LEAVE_ENCLOSURE”
WaypointModeTerminal=”false” >
<!– must have same object filter as AlliedSupportAircraftShrinkRay –>
<ObjectFilter
Rule=”ANY”
Include=”VEHICLE HUGE_VEHICLE TIME_BOMB”
Exclude=”AIRCRAFT”
StatusBitFlagsExclude=”SUBMERGED AIRBORNE_TARGET”>
</ObjectFilter>
</SpecialPowerTemplate>
我们感兴趣的就是‘ObjectFilter’(目标过滤器),定义了光线可以作用的对象.这里定义的内容是:光线可以射载具,重型载具和时间炸弹,天上飞的和水下潜的它没辙.
现在我要让他在铁幕单位面前也阳痿不举.
于是我找到了硬编码的‘UNDER_IRON_CURTAIN’(铁幕之下)动作/特性条,以及铁幕的激活效果‘IronCurtainEffect’
对缩小光线的操作如下:
<SpecialPowerTemplate
id=”SpecialPower_ShrinkRay”
ReloadTime=”10s”
TargetType=”OBJECT”
NameOfVoiceNameToUseAsInitiateIntendToDoVoice=”VoiceShrinkRay”
Flags=”NEEDS_OBJECT_FILTER CANNOT_LEAVE_ENCLOSURE”
WaypointModeTerminal=”false” >
<!– must have same object filter as AlliedSupportAircraftShrinkRay –>
<ObjectFilter
Rule=”ANY”
Include=”VEHICLE HUGE_VEHICLE TIME_BOMB”
Exclude=”AIRCRAFT”
StatusBitFlagsExclude=”SUBMERGED AIRBORNE_TARGET UNDER_IRON_CURTAIN”>
<ExcludeThing>IronCurtainEffect</ExcludeThing>
</ObjectFilter>
</SpecialPowerTemplate>
我要做的就是把‘UNDER_IRON_CURTAIN’加到例外情况里,这样光线在铁幕单位前就射不了了.( StatusBitFlagsExclude=”SUBMERGED AIRBORNE_TARGET UNDER_IRON_CURTAIN”>)
‘ExcludeThing’也使得光线不能在铁幕效果生效时发射(例如,我正好激活了一个铁幕),同样,对超时空转换,我也这样做了,铁幕单位不会再被超时空转换推倒了. (<ExcludeThing>IronCurtainEffect</ExcludeThing>)
现在再给一个例子,让你更深入了解特殊能力模板的工作机制.
我将解说超时空换位怎样发生.
<SpecialPowerTemplate
id=”SpecialPowerChronoSwapTeleport”
ReloadTime=”120s”
TargetType=”OBJECT”
EvaEventToPlayWhenSelectingTarget=”SelectUnit”
inheritFrom=”SpecialPowerChrono_Base”
RequiredPlayerTech=”PlayerTech_Allied_ChronoSwap”>
<ObjectFilter
Rule=”ANY”
Relationship=”ALLIES”
Include=”INFANTRY VEHICLE TIME_BOMB”
Exclude=”AIRCRAFT”
StatusBitFlagsExclude=”SUBMERGED AIRBORNE_TARGET NOT_IN_WORLD”>
<IncludeThing>AlliedTimeBombLvl1</IncludeThing>
<IncludeThing>AlliedTimeBombLvl2</IncludeThing>
<IncludeThing>AlliedTimeBombLvl3</IncludeThing>
</ObjectFilter>
<GameDependency
id=”Allied_ChronoSwapTeleport_GameDependency”>
<RequiredObject>AlliedConstructionYard</RequiredObject>
</GameDependency>
</SpecialPowerTemplate>
‘TargetType=”OBJECT”表示在用这个能力时,我们必须选择一个单位.
‘EvaEventToPlayWhenSelectingTarget=’表示在你选择该单位时播放的EVA大妈的声音.
‘nheritFrom=’在源代码中被广泛使用.意味着定义的对象或是模板使用了一些别处定义的基础特性.在当前情况下,表示超时空换位是一个基于超时空技术的能力.
‘Relationship=表示能力是否可用于自己单位,敌人,还是两者皆可.在这种情况,是“ALLIES”(并非的盟军阵营(Allied),而是指你自己的单位或是友军),这样能力只作用于你的单位.
该能力,如你所见,将作用于步兵,载具和时间炸弹,对天上飞的和水下藏的无能为力.
‘IncludeThing’确保该能力能够作用于时间炸弹,其实是多余的,因为炸弹被单独的另外定义了.
最后的过滤器‘RequiredObject’是一个附属,告诉你要有总部才能使用该能力.
希望我让各位醍醐灌顶了。
记住,特殊能力模板可以无所不能,但确保你知道自己到底在干啥.
感谢Overmind为本次教学所作的。
上一篇:iPhone版《红色警报》实际演示! 下一篇:红警3MOD武器修改教程