本讲以栓动步枪为例,讲解如何使用recipeMaker进行制作清单的自动生成。
栓动步枪def所在的位置:Core\Defs\ThingDefs_Misc\Weapons/RangedIndustrial.xml
在606~673行,defName为Gun_PumpShotgun
首先看到的是606行处的
<ThingDef ParentName="BaseHumanMakeableGun">
根据基础篇第四讲已经讲述过,此处为父定义,所以让我们先看到父定义
父定义所在位置:Core\Defs\ThingDefs_Misc\Weapons/BaseWeapons.xml
<ThingDef Name="BaseHumanMakeableGun" ParentName="BaseMakeableGun" Abstract="True">
<weaponTags>
<li>Gun</li>
</weaponTags>
<tradeTags>
<li>WeaponRanged</li>
</tradeTags>
<comps>
<li Class="CompProperties_Biocodable"/>
</comps>
</ThingDef>
再看父定义的父定义:
<ThingDef Name="BaseMakeableGun" ParentName="BaseGunWithQuality" Abstract="True">
<recipeMaker>
<workSpeedStat>GeneralLaborSpeed</workSpeedStat>
<workSkill>Crafting</workSkill>
<effectWorking>Smith</effectWorking>
<soundWorking>Recipe_Smith</soundWorking>
<recipeUsers>
<li>TableMachining</li>
</recipeUsers>
<unfinishedThingDef>UnfinishedGun</unfinishedThingDef>
<researchPrerequisite>Gunsmithing</researchPrerequisite>
</recipeMaker>
</ThingDef>
这里就出现了recipeMaker,也就是我们本次教程所讲述的对象。至于该父定义的父定义已经与本次内容无关,故不再研究。让我们聚焦于BaseMakeableGun
>workSpeedStat:与该清单制作速度相关的小人属性,比如制作栓动步枪与全局工作速度相关
>workSkill:相关的小人技能,比如制作栓动步枪与“制作”技能相关
>effectWorking:制作时的特效,Smith是冶炼使用的一个特效,仅与视觉效果相关
>soundWorking:制作时的音效,Recipe_Smith是冶炼使用的一个特效,仅与听觉效果相关
>recipeUsers:可用的工作台,是一个list,元素内容为某个工作台的defName,比如栓动步枪可以在TableMachining(机械加工台)处制作
>researchPrerequisite:清单所需的研究项目,栓动步枪所需的研究是Gunsmithing(枪械制作)
>unfinishedThingDef:制作未完成时使用的ThingDef。也就是:
使用的unfinishedThingDef不会影响成品。
>>这个一般不自己写一个新的,直接套用原版的几个。这里为大家准备了原版的:
>>UnfinishedSculpture:未完成的雕塑
>>UnfinishedGun:未完成的枪
>>UnfinishedWeapon:未完成的武器
>>UnfinishedArmor:未完成的盔甲
>>UnfinishedTechArmor:未完成的高科技护甲
>>UnfinishedMetallicTechArmor:未完成的金属护甲
>>UnfinishedApparel:未完成的衣物
>>UnfinishedBelt:未完成的腰带
>>UnfinishedPack:未完成的背包
>>UnfinishedComponent:未完成的零部件
>>UnfinishedHealthItemProsthetic:未完成的假体
>>UnfinishedHealthItemBionic:未完成的仿生体
回到栓动步枪的def,会发现它也有自己的recipeMaker
<recipeMaker>
<skillRequirements>
<Crafting>5</Crafting>
</skillRequirements>
<displayPriority>430</displayPriority>
</recipeMaker>
此处的recipeMaker会与所有父对象的进行合并。
>skillRequirements:该清单所需的技能要求,是一个list,元素是<技能名>技能最低要求等级</技能名>,比如栓动步枪就要求最低5级手工。
>displayPriority:显示优先级,指的是在目标工作台的清单栏里,该配方的显示优先级。
除了上述提到的属性以外,recipeMaker还有一些其他的数据,这里一并送给大家:
>label:清单的名字,放空的话由系统自动生成
>productCount:产品数量,默认为1
>targetCountAdjustment:这个可以把“维持X个”型清单的基础倍率改掉
默认为1:
填50的时候:
>bulkRecipeCount:这个可以让代码帮你复制一份批量制作版本的,比如医药的为4,那就:
>useIngredientsForColor:是否把原材料的颜色作为产物的颜色,注意这个要与材料颜色区分开。
>workAmount:工作量
>defaultIngredientFilter:清单筛选器,另开一讲进行讲解
>workSkillLearnPerTick:执行该清单时每tick的学习量,是float,默认为1,也就是每秒学习60
>memePrerequisitesAny:文化DLC内容,前置的meme的def,是一个list
>researchPrerequisites:与上面提到的researchPrerequisite类似,但是这个是list,两者选一个使用
>factionPrerequisiteTags:与派系相关的tag,目前看到战争面罩啥的有这个
>mechanitorOnlyRecipe:是否只有机械师能进行该清单
>fromIdeoBuildingPreceptOnly:是否只有当前文化接受时可以制作
recipeMaker分析完毕,但还有其他参数也参与了清单的生成。
在栓动步枪的def:
<costList>
<Steel>60</Steel>
<ComponentIndustrial>3</ComponentIndustrial>
</costList>
这里就指出了栓动步枪的造价:60x钢铁,3x零部件
以及:
<statBases>
<WorkToMake>12000</WorkToMake>
<Mass>3.4</Mass>
<AccuracyTouch>0.80</AccuracyTouch>
<AccuracyShort>0.87</AccuracyShort>
<AccuracyMedium>0.77</AccuracyMedium>
<AccuracyLong>0.64</AccuracyLong>
<RangedWeapon_Cooldown>1.25</RangedWeapon_Cooldown>
</statBases>
这里就指出了栓动步枪的工作量,注意此处的工作量单位为tick,而游戏里工作量单位为s,有一个1s=60tick的换算