11
@@ -1578,10 +1578,36 @@
|
||||
</li>
|
||||
</comps>
|
||||
</AbilityDef>
|
||||
<AbilityDef>
|
||||
<defName>ARA_Locust_Needle_Fire</defName>
|
||||
<label>毒针连射</label>
|
||||
<description>阿拉克涅督虫使用可以喷射剧毒尾针的毒针腺对敌方进行一轮射击。</description>
|
||||
<writeCombatLog>True</writeCombatLog>
|
||||
<showPsycastEffects>False</showPsycastEffects>
|
||||
<cooldownTicksRange>120</cooldownTicksRange>
|
||||
<aiCanUse>true</aiCanUse>
|
||||
<iconPath>ArachnaeSwarm/UI/Abilities/ARA_Toxic_Needle_Fire</iconPath>
|
||||
<verbProperties>
|
||||
<verbClass>Verb_CastAbility</verbClass>
|
||||
<range>24</range>
|
||||
<warmupTime>1</warmupTime>
|
||||
<soundCast>Heatspikes_Shot</soundCast>
|
||||
<soundCastTail>Heatspikes_Tail</soundCastTail>
|
||||
<targetParams>
|
||||
<canTargetPawns>True</canTargetPawns>
|
||||
</targetParams>
|
||||
</verbProperties>
|
||||
<comps>
|
||||
<li Class="ArachnaeSwarm.CompProperties_AbilityLaunchMultiProjectile">
|
||||
<projectileDef>Bullet_ARA_RW_Basic_Fist_Needle_Gun</projectileDef>
|
||||
<numProjectiles>12</numProjectiles>
|
||||
</li>
|
||||
</comps>
|
||||
</AbilityDef>
|
||||
|
||||
<!-- 蜕荚 -->
|
||||
<AbilityDef>
|
||||
<defName>ARA_Pouch_Hatching_Acidling</defName>
|
||||
<defName>ARA_Pouch_Hatching_Baneling</defName>
|
||||
<label>蜕荚孵化:爆裂种</label>
|
||||
<description>立刻在脚下孵化三只阿拉克涅爆裂种辅虫,它们会对敌方发起自杀性攻击。</description>
|
||||
<iconPath>ArachnaeSwarm/UI/Abilities/ARA_BaseRace_Launcher</iconPath>
|
||||
@@ -1603,7 +1629,7 @@
|
||||
</verbProperties>
|
||||
<comps>
|
||||
<li Class="ArachnaeSwarm.CompProperties_AbilityLaunchMultiProjectile">
|
||||
<projectileDef>ArachnaeBase_Race_Acidling_Proj</projectileDef>
|
||||
<projectileDef>ArachnaeBase_Race_Baneling_Proj</projectileDef>
|
||||
<numProjectiles>3</numProjectiles>
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_AbilityNeedCost">
|
||||
|
||||
@@ -1260,7 +1260,7 @@
|
||||
<AbilityDef>
|
||||
<defName>ARA_Skyraider_Hivelord</defName>
|
||||
<label>空天种转换——巢虫之主</label>
|
||||
<description>使空天种发生内驱性进化,以降低机动力和失去高空机动能力为代价,使其获得向敌方自动投射天巢种辅虫的能力——这种辅虫体型很小,会以让人烦扰的近战紧紧黏住敌人。\n\n该进化过程不可逆!</description>
|
||||
<description>使空天种发生内驱性进化,以降低机动力和失去高空机动能力为代价,使其获得孵化大量天巢种辅虫的能力——这种辅虫体型很小,会以让人烦扰的近战紧紧黏住敌人。\n\n该进化方向提供8只阿拉克涅天巢种辅虫。</description>
|
||||
<iconPath>ArachnaeSwarm/UI/Abilities/ARA_Skyraider_Hivelord</iconPath>
|
||||
<cooldownTicksRange>1800</cooldownTicksRange>
|
||||
<hostile>false</hostile>
|
||||
@@ -1299,7 +1299,7 @@
|
||||
<HediffDef>
|
||||
<defName>ARA_Skyraider_Hivelord</defName>
|
||||
<label>亚种-领主种</label>
|
||||
<description>这只阿拉克涅空天种已经获得拔耀,会对敌方投掷天巢种辅虫,这些灵敏的辅虫会在落地后散开四处狩猎目标。</description>
|
||||
<description>这只阿拉克涅空天种已经获得拔耀,可以孵化大量的天巢种辅虫,这些灵敏的辅虫会后散开四处狩猎目标。</description>
|
||||
<hediffClass>HediffWithComps</hediffClass>
|
||||
<defaultLabelColor>(0.6, 0.4, 0.8)</defaultLabelColor>
|
||||
<isBad>false</isBad>
|
||||
@@ -1343,15 +1343,24 @@
|
||||
</li>
|
||||
</stages>
|
||||
<comps>
|
||||
<li Class="ArachnaeSwarm.HediffCompProperties_TopTurret">
|
||||
<li Class="ArachnaeSwarm.HediffCompProperties_ProductionQueue">
|
||||
<productionQueue>
|
||||
<li>
|
||||
<pawnKind>ArachnaeBase_Race_Skyhive</pawnKind>
|
||||
<count>8</count>
|
||||
<cooldownTicks>400</cooldownTicks>
|
||||
</li>
|
||||
</productionQueue>
|
||||
</li>
|
||||
<!-- <li Class="ArachnaeSwarm.HediffCompProperties_TopTurret">
|
||||
<turretDef>ARA_Skyraider_Hivelord_Turret</turretDef>
|
||||
<angleOffset>0</angleOffset>
|
||||
<autoAttack>true</autoAttack>
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.HediffCompProperties_DrawMote">
|
||||
<mote>ARA_Mote_Hivelord_Turret_Range</mote> <!-- 大小和range没有严格对应关系,需要自己试出来drawSize -->
|
||||
<mote>ARA_Mote_Hivelord_Turret_Range</mote>
|
||||
<hideMoteWhenNotDrafted>true</hideMoteWhenNotDrafted>
|
||||
</li>
|
||||
</li> -->
|
||||
</comps>
|
||||
</HediffDef>
|
||||
<ThingDef ParentName="MoteBase">
|
||||
@@ -1374,7 +1383,7 @@
|
||||
<AbilityDef>
|
||||
<defName>ARA_Skyraider_Empthrower</defName>
|
||||
<label>空天种转换——电磁风暴</label>
|
||||
<description>使空天种发生内驱性进化,以降低机动力和失去高空机动能力为代价,使其获得向敌方自动投射磁暴种辅虫的能力——这种辅虫会以自杀式袭击的方式释放出EMP,以对抗机械族。\n\n该进化过程不可逆!</description>
|
||||
<description>使空天种发生内驱性进化,以降低机动力和失去高空机动能力为代价,使其获得孵化磁暴种辅虫的能力——这种辅虫会以自杀式袭击的方式释放出EMP,以对抗机械族。\n\n该进化方向提供3只阿拉克涅电磁种辅虫。</description>
|
||||
<iconPath>ArachnaeSwarm/UI/Abilities/ARA_Skyraider_Empthrower</iconPath>
|
||||
<cooldownTicksRange>1800</cooldownTicksRange>
|
||||
<hostile>false</hostile>
|
||||
@@ -1413,7 +1422,7 @@
|
||||
<HediffDef>
|
||||
<defName>ARA_Skyraider_Empthrower</defName>
|
||||
<label>亚种-飓风种</label>
|
||||
<description>这只阿拉克涅空天种已经获得拔耀,会对敌方投掷磁暴种辅虫,这些辅虫会在落地后散开,以自杀性袭击释放EMP对抗敌方机械族。</description>
|
||||
<description>这只阿拉克涅空天种已经获得拔耀,会孵化磁暴种辅虫,这些辅虫以自杀性袭击释放EMP对抗敌方机械族。</description>
|
||||
<hediffClass>HediffWithComps</hediffClass>
|
||||
<defaultLabelColor>(0.6, 0.4, 0.8)</defaultLabelColor>
|
||||
<isBad>false</isBad>
|
||||
@@ -1457,7 +1466,16 @@
|
||||
</li>
|
||||
</stages>
|
||||
<comps>
|
||||
<li Class="ArachnaeSwarm.HediffCompProperties_TopTurret">
|
||||
<li Class="ArachnaeSwarm.HediffCompProperties_ProductionQueue">
|
||||
<productionQueue>
|
||||
<li>
|
||||
<pawnKind>ArachnaeBase_Race_Empsuicider</pawnKind>
|
||||
<count>3</count>
|
||||
<cooldownTicks>500</cooldownTicks>
|
||||
</li>
|
||||
</productionQueue>
|
||||
</li>
|
||||
<!-- <li Class="ArachnaeSwarm.HediffCompProperties_TopTurret">
|
||||
<turretDef>ARA_Skyraider_Empthrower_Turret</turretDef>
|
||||
<angleOffset>0</angleOffset>
|
||||
<autoAttack>true</autoAttack>
|
||||
@@ -1465,7 +1483,7 @@
|
||||
<li Class="ArachnaeSwarm.HediffCompProperties_DrawMote">
|
||||
<mote>ARA_Mote_Empthrower_Turret_Range</mote>
|
||||
<hideMoteWhenNotDrafted>true</hideMoteWhenNotDrafted>
|
||||
</li>
|
||||
</li> -->
|
||||
</comps>
|
||||
</HediffDef>
|
||||
<ThingDef ParentName="MoteBase">
|
||||
@@ -1508,10 +1526,19 @@
|
||||
</li>
|
||||
</stages>
|
||||
<comps>
|
||||
<li Class="ArachnaeSwarm.HediffCompProperties_TopTurret">
|
||||
<turretDef>ARA_Praetorian_Base_Turret</turretDef>
|
||||
<angleOffset>0</angleOffset>
|
||||
<autoAttack>true</autoAttack>
|
||||
<li Class="ArachnaeSwarm.HediffCompProperties_ProductionQueue">
|
||||
<productionQueue>
|
||||
<li>
|
||||
<pawnKind>ArachnaeBase_Race_Acidcut</pawnKind>
|
||||
<count>3</count>
|
||||
<cooldownTicks>500</cooldownTicks>
|
||||
</li>
|
||||
<li>
|
||||
<pawnKind>ArachnaeBase_Race_Locust</pawnKind>
|
||||
<count>2</count>
|
||||
<cooldownTicks>700</cooldownTicks>
|
||||
</li>
|
||||
</productionQueue>
|
||||
</li>
|
||||
<li Class="HediffCompProperties_GiveAbility">
|
||||
<abilityDefs>
|
||||
@@ -1531,7 +1558,7 @@
|
||||
<AbilityDef>
|
||||
<defName>ARA_Praetorian_Navigator</defName>
|
||||
<label>禁卫种转换——引航灯塔</label>
|
||||
<description>使禁卫种发生内驱性进化,以牺牲射击能力、跳跃能力、指挥能力为代价,使其换取指挥空中兽虫的能力。\n\n该进化过程不可逆!另外,空中兽虫必须成功升空才能进行指挥——在你解锁这个进化路径时,应该还不能建造空中兽虫。</description>
|
||||
<description>使禁卫种发生内驱性进化,以牺牲射击能力、跳跃能力、指挥能力为代价,使其换取指挥空中兽虫的能力。\n\n该进化方向不提供阿拉克涅辅虫。另外,空中兽虫必须成功升空才能进行指挥——在你解锁这个进化路径时,应该还不能建造空中兽虫。</description>
|
||||
<iconPath>ArachnaeSwarm/UI/Abilities/ARA_Praetorian_Navigator</iconPath>
|
||||
<cooldownTicksRange>1800</cooldownTicksRange>
|
||||
<hostile>false</hostile>
|
||||
|
||||
@@ -150,7 +150,7 @@
|
||||
<li>ArachnaeNode_Race_Skyraider</li>
|
||||
<li>ArachnaeNode_Race_Praetorian</li>
|
||||
<li>ArachnaeBase_Race_Acidcut</li>
|
||||
<li>ArachnaeBase_Race_Acidling</li>
|
||||
<li>ArachnaeBase_Race_Baneling</li>
|
||||
<li>ArachnaeBase_Race_Skyhive</li>
|
||||
<li>ArachnaeNode_Race_MimicNematode</li>
|
||||
</targetRaces>
|
||||
|
||||
@@ -284,8 +284,8 @@
|
||||
<weaponMoney>0</weaponMoney>
|
||||
<techHediffsMoney>0</techHediffsMoney>
|
||||
</PawnKindDef>
|
||||
<PawnKindDef ParentName="ArachnaeBase_Race_Acidling">
|
||||
<defName>ArachnaeBase_Race_Acidling_Enermy</defName>
|
||||
<PawnKindDef ParentName="ArachnaeBase_Race_Baneling">
|
||||
<defName>ArachnaeBase_Race_Baneling_Enermy</defName>
|
||||
<combatPower>150</combatPower>
|
||||
<apparelMoney>0</apparelMoney>
|
||||
<weaponMoney>0</weaponMoney>
|
||||
|
||||
@@ -537,7 +537,7 @@
|
||||
<lifeStages>
|
||||
<li>
|
||||
<bodyGraphicData>
|
||||
<texPath>ArachnaeSwarm/Things/ARA_Acidling/Bodies/Naked_Thin</texPath>
|
||||
<texPath>ArachnaeSwarm/Things/ARA_Baneling/Bodies/Naked_Thin</texPath>
|
||||
<drawSize>1</drawSize>
|
||||
<shadowData>
|
||||
<volume>(0.4, 0.5, 0.37)</volume>
|
||||
@@ -606,15 +606,14 @@
|
||||
</li>
|
||||
</lifeStages>
|
||||
</PawnKindDef>
|
||||
|
||||
<PawnKindDef Name="ArachnaeBase_Race_Acidling" ParentName="ARA_InsectKindBase">
|
||||
<defName>ArachnaeBase_Race_Acidling</defName>
|
||||
<PawnKindDef Name="ArachnaeBase_Race_Baneling" ParentName="ARA_InsectKindBase">
|
||||
<defName>ArachnaeBase_Race_Baneling</defName>
|
||||
<label>阿拉克涅爆裂种</label>
|
||||
<race>ArachnaeBase_Race_Acidling</race>
|
||||
<race>ArachnaeBase_Race_Baneling</race>
|
||||
<lifeStages>
|
||||
<li>
|
||||
<bodyGraphicData>
|
||||
<texPath>ArachnaeSwarm/Things/ARA_Acidling/Bodies/Naked_Thin</texPath>
|
||||
<texPath>ArachnaeSwarm/Things/ARA_Baneling/Bodies/Naked_Thin</texPath>
|
||||
<drawSize>1</drawSize>
|
||||
<shadowData>
|
||||
<volume>(0.4, 0.5, 0.37)</volume>
|
||||
@@ -635,7 +634,7 @@
|
||||
<lifeStages>
|
||||
<li>
|
||||
<bodyGraphicData>
|
||||
<texPath>ArachnaeSwarm/Things/ARA_Acidling/BodiesEmp/Naked_Thin</texPath>
|
||||
<texPath>ArachnaeSwarm/Things/ARA_Baneling/BodiesEmp/Naked_Thin</texPath>
|
||||
<drawSize>1</drawSize>
|
||||
<shadowData>
|
||||
<volume>(0.4, 0.5, 0.37)</volume>
|
||||
@@ -649,6 +648,30 @@
|
||||
</li>
|
||||
</lifeStages>
|
||||
</PawnKindDef>
|
||||
<PawnKindDef ParentName="ARA_InsectKindBase">
|
||||
<defName>ArachnaeBase_Race_Locust</defName>
|
||||
<label>阿拉克涅爆裂种</label>
|
||||
<race>ArachnaeBase_Race_Locust</race>
|
||||
<lifeStages>
|
||||
<li>
|
||||
<bodyGraphicData>
|
||||
<texPath>ArachnaeSwarm/Things/ARA_Baneling/BodiesEmp/Naked_Thin</texPath>
|
||||
<drawSize>1</drawSize>
|
||||
<shadowData>
|
||||
<volume>(0.4, 0.5, 0.37)</volume>
|
||||
<offset>(0,0,-0.15)</offset>
|
||||
</shadowData>
|
||||
</bodyGraphicData>
|
||||
<dessicatedBodyGraphicData>
|
||||
<texPath>Things/Pawn/Animal/Spelopede/Dessicated_Spelopede</texPath>
|
||||
<drawSize>1</drawSize>
|
||||
</dessicatedBodyGraphicData>
|
||||
</li>
|
||||
</lifeStages>
|
||||
<abilities>
|
||||
<li>ARA_Locust_Needle_Fire</li>
|
||||
</abilities>
|
||||
</PawnKindDef>
|
||||
|
||||
<PawnKindDef Name="ArachnaeBeast_Race_Slayer" ParentName="ARA_InsectKindBase">
|
||||
<defName>ArachnaeBeast_Race_Slayer</defName>
|
||||
|
||||
@@ -700,11 +700,11 @@
|
||||
|
||||
<!-- 蜕荚 -->
|
||||
<RecipeDef ParentName="ARA_SurgeryInstallImplantBase">
|
||||
<defName>ARA_Surgery_Install_Acidling_Pouch</defName>
|
||||
<defName>ARA_Surgery_Install_Baneling_Pouch</defName>
|
||||
<label>爆裂种蜕荚</label>
|
||||
<description>诱发阿拉克涅虫族的定向变异,使其蜕荚中预先储存三只即将孵化的阿拉克涅爆裂种,它们一旦被释放就会以自杀式袭击攻击敌方。</description>
|
||||
<descriptionHyperlinks>
|
||||
<HediffDef>ARA_Acidling_Pouch_Hediff</HediffDef>
|
||||
<HediffDef>ARA_Baneling_Pouch_Hediff</HediffDef>
|
||||
</descriptionHyperlinks>
|
||||
<jobString>正在实施定向变异</jobString>
|
||||
<ingredients>
|
||||
@@ -725,16 +725,16 @@
|
||||
<li>ARA_Activated_Bacterium</li>
|
||||
</thingDefs>
|
||||
</fixedIngredientFilter>
|
||||
<addsHediff>ARA_Acidling_Pouch_Hediff</addsHediff>
|
||||
<addsHediff>ARA_Baneling_Pouch_Hediff</addsHediff>
|
||||
<researchPrerequisite>ARA_Technology_4EVO</researchPrerequisite>
|
||||
</RecipeDef>
|
||||
<HediffDef ParentName="AddedBodyPartBase">
|
||||
<defName>ARA_Acidling_Pouch_Hediff</defName>
|
||||
<defName>ARA_Baneling_Pouch_Hediff</defName>
|
||||
<label>爆裂种蜕荚</label>
|
||||
<hediffClass>Hediff_Implant</hediffClass>
|
||||
<description>阿拉克涅虫族的蜕荚里装了若干只即将孵化的阿拉克涅爆裂种,只需要获得指令就会立刻破体而出攻击敌方。</description>
|
||||
<descriptionHyperlinks>
|
||||
<RecipeDef>ARA_Surgery_Install_Acidling_Pouch</RecipeDef>
|
||||
<RecipeDef>ARA_Surgery_Install_Baneling_Pouch</RecipeDef>
|
||||
</descriptionHyperlinks>
|
||||
<addedPartProps>
|
||||
<betterThanNatural>true</betterThanNatural>
|
||||
@@ -742,17 +742,17 @@
|
||||
<comps>
|
||||
<li Class="HediffCompProperties_GiveAbility">
|
||||
<abilityDefs>
|
||||
<li>ARA_Pouch_Hatching_Acidling</li>
|
||||
<li>ARA_Pouch_Hatching_Baneling</li>
|
||||
</abilityDefs>
|
||||
</li>
|
||||
</comps>
|
||||
</HediffDef>
|
||||
<ThingDef ParentName="ARA_BodyPartProstheticBase">
|
||||
<defName>ARA_Acidling_Pouch</defName>
|
||||
<defName>ARA_Baneling_Pouch</defName>
|
||||
<label>爆裂种蜕荚</label>
|
||||
<description>阿拉克涅虫族的蜕荚里装了若干只即将孵化的阿拉克涅爆裂种,只需要获得指令就会立刻破体而出攻击敌方。该手术不需要制作部件,可以直接在阿拉克涅督虫身上实施。</description>
|
||||
<descriptionHyperlinks>
|
||||
<RecipeDef>ARA_Surgery_Install_Acidling_Pouch</RecipeDef>
|
||||
<RecipeDef>ARA_Surgery_Install_Baneling_Pouch</RecipeDef>
|
||||
</descriptionHyperlinks>
|
||||
<recipeMaker>
|
||||
<researchPrerequisite>ARA_Technology_4EVO</researchPrerequisite>
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
<li>ARA_Surgery_Install_Reactive_Shell</li>
|
||||
<li>ARA_Surgery_Install_Strengthening_Tendon</li>
|
||||
<li>ARA_Surgery_Install_Slide_Patagium</li>
|
||||
<li>ARA_Surgery_Install_Acidling_Pouch</li>
|
||||
<li>ARA_Surgery_Install_Baneling_Pouch</li>
|
||||
<li>ARA_Surgery_Install_Tumor_Pouch</li>
|
||||
<li>ARA_Surgery_Install_Internal_Circulation_Lung</li>
|
||||
</recipes>
|
||||
@@ -524,6 +524,74 @@
|
||||
</li>
|
||||
</comps>
|
||||
</ThingDef>
|
||||
<ThingDef ParentName="ArachnaeBase_Race">
|
||||
<defName>ArachnaeBase_Race_Empsuicider</defName>
|
||||
<label>阿拉克涅电磁种</label>
|
||||
<description>阿拉克涅辅虫之一,智力低下,一般以自杀式袭击的方式伤害敌军,靠近敌人后就会释放EMP瘫痪附加的机械族,如果其监管者督虫处于征召状态,则会跟随督虫一起行动。</description>
|
||||
<race>
|
||||
<thinkTreeMain>ARA_Insect_Baneling_Thinktree</thinkTreeMain>
|
||||
<baseBodySize>0.35</baseBodySize>
|
||||
<!-- <hasCorpse>false</hasCorpse> -->
|
||||
<body>BeetleLikeWithClaw</body>
|
||||
<deathAction Class="DeathActionProperties_Vanish">
|
||||
<workerClass>DeathActionWorker_Vanish</workerClass>
|
||||
<filth>Filth_Slime</filth>
|
||||
<filthCountRange>1~3</filthCountRange>
|
||||
</deathAction>
|
||||
</race>
|
||||
<statBases>
|
||||
<MoveSpeed>6.6</MoveSpeed>
|
||||
</statBases>
|
||||
<comps>
|
||||
<li Class="ArachnaeSwarm.CompProperties_AdvancedTraining">
|
||||
<trainables>
|
||||
<li>
|
||||
<trainable>Obedience</trainable>
|
||||
<trainInstantly>true</trainInstantly>
|
||||
<setWanted>true</setWanted>
|
||||
</li>
|
||||
<li>
|
||||
<trainable>Release</trainable>
|
||||
<trainInstantly>true</trainInstantly>
|
||||
<setWanted>true</setWanted>
|
||||
</li>
|
||||
<li>
|
||||
<trainable>Rescue</trainable>
|
||||
<trainInstantly>true</trainInstantly>
|
||||
<setWanted>true</setWanted>
|
||||
</li>
|
||||
<li>
|
||||
<trainable>Tameness</trainable>
|
||||
<trainInstantly>true</trainInstantly>
|
||||
<setWanted>true</setWanted>
|
||||
</li>
|
||||
<li>
|
||||
<trainable>AttackTarget</trainable>
|
||||
<trainInstantly>true</trainInstantly>
|
||||
<setWanted>true</setWanted>
|
||||
</li>
|
||||
</trainables>
|
||||
<disableAllSkillDecay>true</disableAllSkillDecay> <!-- 阻止这个动物的所有技能衰减 -->
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_HunterExplosion">
|
||||
<explosionRadius>6</explosionRadius> <!-- Mapped from smokeRadius -->
|
||||
<explosionDamageType>EMP</explosionDamageType>
|
||||
<explosionDamageAmount>65</explosionDamageAmount>
|
||||
<armorPenetration>2</armorPenetration>
|
||||
<explosionSound>Explosion_EMP</explosionSound>
|
||||
<!-- <postExplosionSpawnThingDef>ARA_AcidGasCloud</postExplosionSpawnThingDef>
|
||||
<postExplosionSpawnChance>1</postExplosionSpawnChance>
|
||||
<postExplosionSpawnThingCount>1</postExplosionSpawnThingCount> -->
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_HediffGiver">
|
||||
<hediffs>
|
||||
<li>ARA_HiveMindWorker</li>
|
||||
</hediffs>
|
||||
<addChance>1.0</addChance>
|
||||
<allowDuplicates>false</allowDuplicates>
|
||||
</li>
|
||||
</comps>
|
||||
</ThingDef>
|
||||
<ThingDef ParentName="ArachnaeBase_Race">
|
||||
<defName>ArachnaeBase_Race_Skyhive</defName>
|
||||
<label>阿拉克涅天巢种</label>
|
||||
@@ -608,6 +676,80 @@
|
||||
</li>
|
||||
</comps>
|
||||
</ThingDef>
|
||||
<ThingDef ParentName="ArachnaeBase_Race">
|
||||
<defName>ArachnaeBase_Race_Locust</defName>
|
||||
<label>阿拉克涅天巢种</label>
|
||||
<description>阿拉克涅辅虫之一,拥有贴地飞行的能力,无论是攻击还是移动速度非常快。</description>
|
||||
<race>
|
||||
<thinkTreeMain>ARA_Insect_Locust_Thinktree</thinkTreeMain>
|
||||
<baseBodySize>0.36</baseBodySize>
|
||||
<!-- <hasCorpse>false</hasCorpse> -->
|
||||
<body>BeetleLikeWithClaw</body>
|
||||
<deathAction Class="DeathActionProperties_Vanish">
|
||||
<workerClass>DeathActionWorker_Vanish</workerClass>
|
||||
<filth>Filth_Slime</filth>
|
||||
<filthCountRange>1~3</filthCountRange>
|
||||
</deathAction>
|
||||
</race>
|
||||
<statBases>
|
||||
<MoveSpeed>5.5</MoveSpeed>
|
||||
|
||||
<ArmorRating_Blunt>0.4</ArmorRating_Blunt>
|
||||
<ArmorRating_Sharp>0.4</ArmorRating_Sharp>
|
||||
<ArmorRating_Heat>0.25</ArmorRating_Heat>
|
||||
</statBases>
|
||||
<tools Inherit="False">
|
||||
<li>
|
||||
<label>复合颚</label>
|
||||
<capacities>
|
||||
<li>Cut</li>
|
||||
</capacities>
|
||||
<power>3</power>
|
||||
<cooldownTime>0.8</cooldownTime>
|
||||
<linkedBodyPartsGroup>HeadAttackTool</linkedBodyPartsGroup>
|
||||
<ensureLinkedBodyPartsGroupAlwaysUsable>true</ensureLinkedBodyPartsGroupAlwaysUsable>
|
||||
</li>
|
||||
</tools>
|
||||
<comps>
|
||||
<li Class="ArachnaeSwarm.CompProperties_AdvancedTraining">
|
||||
<trainables>
|
||||
<li>
|
||||
<trainable>Obedience</trainable>
|
||||
<trainInstantly>true</trainInstantly>
|
||||
<setWanted>true</setWanted>
|
||||
</li>
|
||||
<li>
|
||||
<trainable>Release</trainable>
|
||||
<trainInstantly>true</trainInstantly>
|
||||
<setWanted>true</setWanted>
|
||||
</li>
|
||||
<li>
|
||||
<trainable>Rescue</trainable>
|
||||
<trainInstantly>true</trainInstantly>
|
||||
<setWanted>true</setWanted>
|
||||
</li>
|
||||
<li>
|
||||
<trainable>Tameness</trainable>
|
||||
<trainInstantly>true</trainInstantly>
|
||||
<setWanted>true</setWanted>
|
||||
</li>
|
||||
<li>
|
||||
<trainable>AttackTarget</trainable>
|
||||
<trainInstantly>true</trainInstantly>
|
||||
<setWanted>true</setWanted>
|
||||
</li>
|
||||
</trainables>
|
||||
<disableAllSkillDecay>true</disableAllSkillDecay> <!-- 阻止这个动物的所有技能衰减 -->
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_HediffGiver">
|
||||
<hediffs>
|
||||
<li>ARA_HiveMindWorker</li>
|
||||
</hediffs>
|
||||
<addChance>1.0</addChance>
|
||||
<allowDuplicates>false</allowDuplicates>
|
||||
</li>
|
||||
</comps>
|
||||
</ThingDef>
|
||||
|
||||
<ToolCapacityDef>
|
||||
<defName>ARA_AcidCut</defName>
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
</comps>
|
||||
</ThingDef>
|
||||
<ThingDef ParentName="ARA_BaseDroneSwarm">
|
||||
<defName>ArachnaeBase_Race_Acidling</defName>
|
||||
<defName>ArachnaeBase_Race_Baneling</defName>
|
||||
<label>阿拉克涅爆裂种</label>
|
||||
<description>阿拉克涅辅虫之一,智力低下,一般以自杀式袭击的方式伤害敌军,靠近敌人后就会引爆酸囊产生危险的酸性雾气。</description>
|
||||
<race>
|
||||
@@ -112,32 +112,5 @@
|
||||
</li>
|
||||
</tools>
|
||||
</ThingDef>
|
||||
<ThingDef ParentName="ARA_BaseDroneSwarm">
|
||||
<defName>ArachnaeBase_Race_Empsuicider</defName>
|
||||
<label>阿拉克涅爆裂种</label>
|
||||
<description>阿拉克涅辅虫之一,智力低下,一般以自杀式袭击的方式伤害敌军,靠近敌人后就会释放EMP瘫痪附加的机械族。</description>
|
||||
<race>
|
||||
<thinkTreeConstant>HunterDroneConstant</thinkTreeConstant>
|
||||
<baseBodySize>0.25</baseBodySize>
|
||||
<!-- <hasCorpse>false</hasCorpse> -->
|
||||
<body>BeetleLikeWithClaw</body>
|
||||
<baseHealthScale>1</baseHealthScale>
|
||||
</race>
|
||||
<statBases>
|
||||
<MoveSpeed>6</MoveSpeed>
|
||||
</statBases>
|
||||
<comps>
|
||||
<li Class="ArachnaeSwarm.CompProperties_HunterExplosion">
|
||||
<explosionRadius>6</explosionRadius> <!-- Mapped from smokeRadius -->
|
||||
<explosionDamageType>EMP</explosionDamageType>
|
||||
<explosionDamageAmount>65</explosionDamageAmount>
|
||||
<armorPenetration>2</armorPenetration>
|
||||
<explosionSound>Explosion_EMP</explosionSound>
|
||||
<!-- <postExplosionSpawnThingDef>ARA_AcidGasCloud</postExplosionSpawnThingDef>
|
||||
<postExplosionSpawnChance>1</postExplosionSpawnChance>
|
||||
<postExplosionSpawnThingCount>1</postExplosionSpawnThingCount> -->
|
||||
</li>
|
||||
</comps>
|
||||
</ThingDef>
|
||||
|
||||
</Defs>
|
||||
@@ -625,7 +625,7 @@
|
||||
<li>ARA_Surgery_Install_Reactive_Shell</li>
|
||||
<li>ARA_Surgery_Install_Strengthening_Tendon</li>
|
||||
<li>ARA_Surgery_Install_Slide_Patagium</li>
|
||||
<li>ARA_Surgery_Install_Acidling_Pouch</li>
|
||||
<li>ARA_Surgery_Install_Baneling_Pouch</li>
|
||||
<li>ARA_Surgery_Install_Tumor_Pouch</li>
|
||||
<li>ARA_Surgery_Install_Internal_Circulation_Lung</li>
|
||||
</recipes>
|
||||
|
||||
@@ -556,7 +556,7 @@
|
||||
<li>ARA_Surgery_Install_Reactive_Shell</li>
|
||||
<li>ARA_Surgery_Install_Strengthening_Tendon</li>
|
||||
<li>ARA_Surgery_Install_Slide_Patagium</li>
|
||||
<li>ARA_Surgery_Install_Acidling_Pouch</li>
|
||||
<li>ARA_Surgery_Install_Baneling_Pouch</li>
|
||||
<li>ARA_Surgery_Install_Tumor_Pouch</li>
|
||||
<li>ARA_Surgery_Install_Internal_Circulation_Lung</li>
|
||||
</recipes>
|
||||
|
||||
@@ -2158,7 +2158,7 @@
|
||||
<label>阿拉克涅磁暴种</label>
|
||||
<thingClass>Projectile_SpawnsPawnZeroAge</thingClass>
|
||||
<graphicData>
|
||||
<texPath>ArachnaeSwarm/Things/ARA_Acidling/BodiesEmp/Naked_Thin_north</texPath>
|
||||
<texPath>ArachnaeSwarm/Things/ARA_Baneling/BodiesEmp/Naked_Thin_north</texPath>
|
||||
<graphicClass>Graphic_Single</graphicClass>
|
||||
</graphicData>
|
||||
<projectile>
|
||||
|
||||
@@ -96,7 +96,7 @@
|
||||
</modExtensions>
|
||||
</ThingDef>
|
||||
<ThingDef ParentName="PlantBase">
|
||||
<defName>ARA_AcidlingTrapPlant</defName>
|
||||
<defName>ARA_BanelingTrapPlant</defName>
|
||||
<label>爆裂巢花</label>
|
||||
<thingClass>ArachnaeSwarm.Plant_Transforming</thingClass>
|
||||
<description>一种由阿拉克涅虫群培育的真菌混合体,它会汲取菌毯的营养,在生长到一定阶段后进行变态发育,最终转换成一枚阿拉克涅爆裂茧——一种会对附近的敌军释放自杀性辅虫的特殊陷阱。</description>
|
||||
@@ -107,7 +107,7 @@
|
||||
<Nutrition>0.2</Nutrition>
|
||||
</statBases>
|
||||
<graphicData>
|
||||
<texPath>ArachnaeSwarm/Plant/ARA_AcidlingTrapPlant</texPath>
|
||||
<texPath>ArachnaeSwarm/Plant/ARA_BanelingTrapPlant</texPath>
|
||||
<graphicClass>Graphic_Single</graphicClass>
|
||||
</graphicData>
|
||||
<selectable>true</selectable>
|
||||
@@ -132,7 +132,7 @@
|
||||
</plant>
|
||||
<modExtensions>
|
||||
<li Class="ArachnaeSwarm.PlantTransformExtension">
|
||||
<buildingDef>Arachnae_AcidlingTrap</buildingDef>
|
||||
<buildingDef>Arachnae_BanelingTrap</buildingDef>
|
||||
<transformAtGrowth>0.8</transformAtGrowth>
|
||||
</li>
|
||||
</modExtensions>
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
<li>ARA_MorphableResearchBench</li>
|
||||
<li>ARANutrientDispenser</li>
|
||||
<li>ARA_WormholePortal_A</li>
|
||||
<li>ARA_Acidling_AutoMortar</li>
|
||||
<li>ARA_Baneling_AutoMortar</li>
|
||||
<li>CatastropheMissileSilo</li>
|
||||
<li>ARA_AutoSniperCannon</li>
|
||||
<li>ARA_Pawn_Ootheca</li>
|
||||
|
||||
@@ -198,7 +198,7 @@
|
||||
</ThingDef>
|
||||
|
||||
<ThingDef>
|
||||
<defName>Arachnae_AcidlingTrap</defName>
|
||||
<defName>Arachnae_BanelingTrap</defName>
|
||||
<label>阿拉克涅爆裂茧</label>
|
||||
<description>一种阿拉克涅休眠茧,内藏有休眠中的阿拉克涅虫族。如果靠太近则会唤醒其中的虫族。</description>
|
||||
<thingClass>ArachnaeSwarm.Building_TrapReleaseRandom</thingClass>
|
||||
@@ -228,7 +228,7 @@
|
||||
<MarketValue>50</MarketValue>
|
||||
</statBases>
|
||||
<graphicData>
|
||||
<texPath>ArachnaeSwarm/Plant/ARA_AcidlingTrapPlant</texPath>
|
||||
<texPath>ArachnaeSwarm/Plant/ARA_BanelingTrapPlant</texPath>
|
||||
<graphicClass>Graphic_Single</graphicClass>
|
||||
<drawSize>1.2</drawSize>
|
||||
<shadowData>
|
||||
@@ -242,7 +242,7 @@
|
||||
<detectionRadius>5</detectionRadius>
|
||||
<countToSpawn>3</countToSpawn>
|
||||
<pawnKinds>
|
||||
<li>ArachnaeBase_Race_Acidling</li>
|
||||
<li>ArachnaeBase_Race_Baneling</li>
|
||||
<!-- <li>ArachnaeBase_Race_Acid</li> -->
|
||||
</pawnKinds>
|
||||
</li>
|
||||
@@ -394,14 +394,14 @@
|
||||
</ThingDef>
|
||||
<!-- Auto mortar -->
|
||||
<ThingDef ParentName="BuildingBase">
|
||||
<defName>ARA_Acidling_AutoMortar</defName>
|
||||
<defName>ARA_Baneling_AutoMortar</defName>
|
||||
<label>爆裂种投射巢组织</label>
|
||||
<description>阿拉克涅虫族用于防御巢穴的组织之一。它由大量没有自主意识的高度特化器官共同构成,能向进犯巢穴的敌军发射多只阿拉克涅爆裂种辅虫,这些辅虫将自行寻找目标以发起自杀性袭击。作为阿拉克涅防御组织,其可以通过获取营养来自行生成补充弹药。</description>
|
||||
<thingClass>ArachnaeSwarm.Building_TurretGunHasSpeed</thingClass>
|
||||
<drawerType>MapMeshAndRealTime</drawerType>
|
||||
<drawHighlight>true</drawHighlight>
|
||||
<drawHighlightOnlyForHostile>true</drawHighlightOnlyForHostile>
|
||||
<uiIconPath>ArachnaeSwarm/Building/ARA_Acidling_AutoMortar_Icon</uiIconPath>
|
||||
<uiIconPath>ArachnaeSwarm/Building/ARA_Baneling_AutoMortar_Icon</uiIconPath>
|
||||
<graphicData>
|
||||
<texPath>ArachnaeSwarm/Building/ARA_AutoSniperCannon_Base</texPath>
|
||||
<graphicClass>Graphic_Single</graphicClass>
|
||||
@@ -481,7 +481,7 @@
|
||||
<buildingTags>
|
||||
<li>Artillery</li>
|
||||
</buildingTags>
|
||||
<turretGunDef>ARA_Acidling_Artillery_AutoMortar</turretGunDef>
|
||||
<turretGunDef>ARA_Baneling_Artillery_AutoMortar</turretGunDef>
|
||||
<turretBurstWarmupTime>10.0</turretBurstWarmupTime>
|
||||
<turretTopDrawSize>3.0</turretTopDrawSize>
|
||||
<relatedTerrain>
|
||||
@@ -496,10 +496,10 @@
|
||||
<constructionSkillPrerequisite>8</constructionSkillPrerequisite>
|
||||
</ThingDef>
|
||||
<ThingDef ParentName="BaseArtilleryWeapon">
|
||||
<defName>ARA_Acidling_Artillery_AutoMortar</defName>
|
||||
<defName>ARA_Baneling_Artillery_AutoMortar</defName>
|
||||
<label>爆裂种投射巢</label>
|
||||
<graphicData>
|
||||
<texPath>ArachnaeSwarm/Building/ARA_Acidling_Artillery_AutoMortar_Tower</texPath>
|
||||
<texPath>ArachnaeSwarm/Building/ARA_Baneling_Artillery_AutoMortar_Tower</texPath>
|
||||
<graphicClass>Graphic_Single</graphicClass>
|
||||
</graphicData>
|
||||
<uiIconScale>1.25</uiIconScale>
|
||||
@@ -509,7 +509,7 @@
|
||||
<verbs>
|
||||
<li>
|
||||
<verbClass>ArachnaeSwarm.Verb_ShootWithOffset</verbClass>
|
||||
<defaultProjectile>ArachnaeBase_Race_Acidling_Proj</defaultProjectile>
|
||||
<defaultProjectile>ArachnaeBase_Race_Baneling_Proj</defaultProjectile>
|
||||
<ai_AvoidFriendlyFireRadius>3</ai_AvoidFriendlyFireRadius>
|
||||
<warmupTime>2</warmupTime>
|
||||
<range>500</range>
|
||||
@@ -534,16 +534,16 @@
|
||||
</modExtensions>
|
||||
</ThingDef>
|
||||
<ThingDef ParentName="BaseGrenadeProjectile">
|
||||
<defName>ArachnaeBase_Race_Acidling_Proj</defName>
|
||||
<defName>ArachnaeBase_Race_Baneling_Proj</defName>
|
||||
<label>阿拉克涅爆裂种</label>
|
||||
<thingClass>Projectile_SpawnsPawnZeroAge</thingClass>
|
||||
<graphicData>
|
||||
<texPath>ArachnaeSwarm/Things/ARA_Acidling/Bodies/Naked_Thin</texPath>
|
||||
<texPath>ArachnaeSwarm/Things/ARA_Baneling/Bodies/Naked_Thin</texPath>
|
||||
<graphicClass>Graphic_Multi</graphicClass>
|
||||
</graphicData>
|
||||
<projectile>
|
||||
<speed>41</speed>
|
||||
<spawnsPawnKind>ArachnaeBase_Race_Acidling</spawnsPawnKind>
|
||||
<spawnsPawnKind>ArachnaeBase_Race_Baneling</spawnsPawnKind>
|
||||
<tryAdjacentFreeSpaces>true</tryAdjacentFreeSpaces>
|
||||
<damageDef>ARA_AcidBurn</damageDef>
|
||||
<damageAmountBase>10</damageAmountBase>
|
||||
|
||||
@@ -1102,6 +1102,26 @@
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<!-- 特殊处理——非生产者生产会使用单元逻辑 -->
|
||||
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
||||
<subNodes>
|
||||
<li Class="ArachnaeSwarm.ThinkNode_ConditionalNotProducedByMechCarrier">
|
||||
<subNodes>
|
||||
<li Class="JobGiver_AIFightEnemies">
|
||||
<targetAcquireRadius>100</targetAcquireRadius>
|
||||
<targetKeepRadius>100</targetKeepRadius>
|
||||
</li>
|
||||
<li Class="JobGiver_AITrashColonyClose" />
|
||||
<li Class="JobGiver_AITrashBuildingsDistant" />
|
||||
<li Class="JobGiver_AIGotoNearestHostile" />
|
||||
<li Class="JobGiver_AITrashBuildingsDistant">
|
||||
<attackAllInert>true</attackAllInert>
|
||||
</li>
|
||||
<li Class="JobGiver_WanderAnywhere" />
|
||||
</subNodes>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
<!-- 特殊处理——如果生产者被征召会跟随pawn -->
|
||||
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
||||
<subNodes>
|
||||
@@ -1442,6 +1462,26 @@
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<!-- 特殊处理——非生产者生产会使用单元逻辑 -->
|
||||
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
||||
<subNodes>
|
||||
<li Class="ArachnaeSwarm.ThinkNode_ConditionalNotProducedByMechCarrier">
|
||||
<subNodes>
|
||||
<li Class="JobGiver_AIFightEnemies">
|
||||
<targetAcquireRadius>100</targetAcquireRadius>
|
||||
<targetKeepRadius>100</targetKeepRadius>
|
||||
</li>
|
||||
<li Class="JobGiver_AITrashColonyClose" />
|
||||
<li Class="JobGiver_AITrashBuildingsDistant" />
|
||||
<li Class="JobGiver_AIGotoNearestHostile" />
|
||||
<li Class="JobGiver_AITrashBuildingsDistant">
|
||||
<attackAllInert>true</attackAllInert>
|
||||
</li>
|
||||
<li Class="JobGiver_WanderAnywhere" />
|
||||
</subNodes>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
<!-- 特殊处理——如果生产者被征召会跟随pawn -->
|
||||
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
||||
<subNodes>
|
||||
@@ -2305,6 +2345,26 @@
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<!-- 特殊处理——非生产者生产会使用单元逻辑 -->
|
||||
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
||||
<subNodes>
|
||||
<li Class="ArachnaeSwarm.ThinkNode_ConditionalNotProducedByMechCarrier">
|
||||
<subNodes>
|
||||
<li Class="JobGiver_AIFightEnemies">
|
||||
<targetAcquireRadius>100</targetAcquireRadius>
|
||||
<targetKeepRadius>100</targetKeepRadius>
|
||||
</li>
|
||||
<li Class="JobGiver_AITrashColonyClose" />
|
||||
<li Class="JobGiver_AITrashBuildingsDistant" />
|
||||
<li Class="JobGiver_AIGotoNearestHostile" />
|
||||
<li Class="JobGiver_AITrashBuildingsDistant">
|
||||
<attackAllInert>true</attackAllInert>
|
||||
</li>
|
||||
<li Class="JobGiver_WanderAnywhere" />
|
||||
</subNodes>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
<!-- 特殊处理——如果生产者被征召会跟随pawn -->
|
||||
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
||||
<subNodes>
|
||||
@@ -2559,6 +2619,26 @@
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<!-- 特殊处理——非生产者生产会使用单元逻辑 -->
|
||||
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
||||
<subNodes>
|
||||
<li Class="ArachnaeSwarm.ThinkNode_ConditionalNotProducedByMechCarrier">
|
||||
<subNodes>
|
||||
<li Class="JobGiver_AIFightEnemies">
|
||||
<targetAcquireRadius>100</targetAcquireRadius>
|
||||
<targetKeepRadius>100</targetKeepRadius>
|
||||
</li>
|
||||
<li Class="JobGiver_AITrashColonyClose" />
|
||||
<li Class="JobGiver_AITrashBuildingsDistant" />
|
||||
<li Class="JobGiver_AIGotoNearestHostile" />
|
||||
<li Class="JobGiver_AITrashBuildingsDistant">
|
||||
<attackAllInert>true</attackAllInert>
|
||||
</li>
|
||||
<li Class="JobGiver_WanderAnywhere" />
|
||||
</subNodes>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
<!-- 特殊处理——如果生产者被征召会跟随pawn -->
|
||||
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
||||
<subNodes>
|
||||
@@ -2691,6 +2771,313 @@
|
||||
</subNodes>
|
||||
</thinkRoot>
|
||||
</ThinkTreeDef>
|
||||
<ThinkTreeDef>
|
||||
<defName>ARA_Insect_Locust_Thinktree</defName>
|
||||
<thinkRoot Class="ThinkNode_Priority">
|
||||
<subNodes>
|
||||
<!-- Keep lying down if we have to -->
|
||||
<li Class="ThinkNode_ConditionalMustKeepLyingDown">
|
||||
<subNodes>
|
||||
<!-- Do a queued job if possible -->
|
||||
<li Class="ThinkNode_QueuedJob">
|
||||
<inBedOnly>true</inBedOnly>
|
||||
</li>
|
||||
|
||||
<!-- Keep lying down -->
|
||||
<li Class="JobGiver_KeepLyingDown"/>
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<li Class="ThinkNode_Subtree">
|
||||
<treeDef>Downed</treeDef>
|
||||
</li>
|
||||
<li Class="ThinkNode_Subtree">
|
||||
<treeDef>BurningResponse</treeDef>
|
||||
</li>
|
||||
<li Class="ThinkNode_Subtree">
|
||||
<treeDef>MentalStateCritical</treeDef>
|
||||
</li>
|
||||
|
||||
<!-- React to close melee threat -->
|
||||
<li Class="JobGiver_ReactToCloseMeleeThreat">
|
||||
<maxDistance>2.9</maxDistance>
|
||||
</li>
|
||||
|
||||
<!-- Do a queued job -->
|
||||
<li Class="ThinkNode_QueuedJob"/>
|
||||
|
||||
<!-- Mental state non critical -->
|
||||
<li Class="ThinkNode_Subtree">
|
||||
<treeDef>MentalStateNonCritical</treeDef>
|
||||
</li>
|
||||
|
||||
<!-- Forced goto -->
|
||||
<li Class="ThinkNode_ConditionalForcedGoto">
|
||||
<subNodes>
|
||||
<li Class="ThinkNode_Tagger">
|
||||
<tagToGive>Misc</tagToGive>
|
||||
<subNodes>
|
||||
<li Class="JobGiver_ForcedGoto"/>
|
||||
</subNodes>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<!-- Behavior when roped -->
|
||||
<li Class="ThinkNode_Subtree">
|
||||
<treeDef>RopedPawn</treeDef>
|
||||
</li>
|
||||
|
||||
<!-- Lord directives -->
|
||||
<li Class="ThinkNode_Subtree">
|
||||
<treeDef>LordDuty</treeDef>
|
||||
</li>
|
||||
|
||||
<li Class="ThinkNode_ConditionalHasFaction">
|
||||
<invert>true</invert>
|
||||
<subNodes>
|
||||
<!-- Wild insects with no lord will fight nearby enemies -->
|
||||
<li Class="JobGiver_AIFightEnemies">
|
||||
<targetAcquireRadius>30</targetAcquireRadius> <!-- Same as DefendAndExpandHive -->
|
||||
<targetKeepRadius>35</targetKeepRadius>
|
||||
</li>
|
||||
|
||||
<!-- Wild insects leave map in some conditions -->
|
||||
<li Class="ThinkNode_Subtree">
|
||||
<treeDef>LeaveIfWrongSeason</treeDef>
|
||||
</li>
|
||||
<li Class="ThinkNode_Subtree">
|
||||
<treeDef>LeaveIfStarving</treeDef>
|
||||
</li>
|
||||
|
||||
<!-- Wild insects randomly leave map -->
|
||||
<li Class="ThinkNode_ChancePerHour_Constant">
|
||||
<mtbDays>60</mtbDays>
|
||||
<subNodes>
|
||||
<li Class="ThinkNode_Tagger">
|
||||
<tagToGive>Misc</tagToGive>
|
||||
<subNodes>
|
||||
<li Class="JobGiver_ExitMapRandom">
|
||||
<defaultLocomotion>Walk</defaultLocomotion>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<!-- Insects of a faction that's not the players without a lord leave randomly -->
|
||||
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
||||
<invert>true</invert>
|
||||
<subNodes>
|
||||
<li Class="ThinkNode_ConditionalHasFaction">
|
||||
<subNodes>
|
||||
<li Class="ThinkNode_ConditionalNoLord">
|
||||
<subNodes>
|
||||
<li Class="ThinkNode_ChancePerHour_Constant">
|
||||
<mtbDays>60</mtbDays>
|
||||
<subNodes>
|
||||
<li Class="ThinkNode_Tagger">
|
||||
<tagToGive>Misc</tagToGive>
|
||||
<subNodes>
|
||||
<li Class="JobGiver_ExitMapRandom">
|
||||
<defaultLocomotion>Walk</defaultLocomotion>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<!-- 特殊处理——非生产者生产会使用单元逻辑 -->
|
||||
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
||||
<subNodes>
|
||||
<li Class="ArachnaeSwarm.ThinkNode_ConditionalNotProducedByMechCarrier">
|
||||
<subNodes>
|
||||
<li Class="JobGiver_FleeForDistance">
|
||||
<enemyDistToFleeRange>2.9~7.9</enemyDistToFleeRange>
|
||||
<fleeDistRange>13.5~20</fleeDistRange>
|
||||
</li>
|
||||
<!-- React to close melee threat -->
|
||||
<li Class="JobGiver_ReactToCloseMeleeThreat">
|
||||
<maxDistance>2.9</maxDistance>
|
||||
</li>
|
||||
<!-- Fire spikes at distant enemies -->
|
||||
<li Class="JobGiver_AIAbilityFight">
|
||||
<targetAcquireRadius>65</targetAcquireRadius>
|
||||
<targetKeepRadius>72</targetKeepRadius>
|
||||
<skipIfCantTargetNow>true</skipIfCantTargetNow>
|
||||
<ability>ARA_Locust_Needle_Fire</ability>
|
||||
<allowTurrets>true</allowTurrets>
|
||||
<needLOSToAcquireNonPawnTargets>true</needLOSToAcquireNonPawnTargets>
|
||||
</li>
|
||||
<li Class="JobGiver_AITrashColonyClose" />
|
||||
<li Class="JobGiver_AITrashBuildingsDistant" />
|
||||
<li Class="JobGiver_AIGotoNearestHostile" />
|
||||
<li Class="JobGiver_AITrashBuildingsDistant">
|
||||
<attackAllInert>true</attackAllInert>
|
||||
</li>
|
||||
<li Class="JobGiver_WanderAnywhere" />
|
||||
</subNodes>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
<!-- 特殊处理——如果生产者被征召会跟随pawn -->
|
||||
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
||||
<subNodes>
|
||||
<li Class="ArachnaeSwarm.ThinkNode_ConditionalShouldFollowProducer">
|
||||
<subNodes>
|
||||
<!-- <li Class="ArachnaeSwarm.JobGiver_AIDefendProducer">
|
||||
<attackMeleeThreatEvenIfNotHostile>true</attackMeleeThreatEvenIfNotHostile>
|
||||
<defendRadius>100</defendRadius>
|
||||
</li> -->
|
||||
<!-- Keep distance -->
|
||||
<li Class="JobGiver_FleeForDistance">
|
||||
<enemyDistToFleeRange>2.9~7.9</enemyDistToFleeRange>
|
||||
<fleeDistRange>13.5~20</fleeDistRange>
|
||||
</li>
|
||||
<!-- React to close melee threat -->
|
||||
<li Class="JobGiver_ReactToCloseMeleeThreat">
|
||||
<maxDistance>2.9</maxDistance>
|
||||
</li>
|
||||
<!-- Fire spikes at distant enemies -->
|
||||
<li Class="JobGiver_AIAbilityFight">
|
||||
<targetAcquireRadius>65</targetAcquireRadius>
|
||||
<targetKeepRadius>72</targetKeepRadius>
|
||||
<skipIfCantTargetNow>true</skipIfCantTargetNow>
|
||||
<ability>ARA_Locust_Needle_Fire</ability>
|
||||
<allowTurrets>true</allowTurrets>
|
||||
<needLOSToAcquireNonPawnTargets>true</needLOSToAcquireNonPawnTargets>
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.JobGiver_AIFollowProducer"/>
|
||||
<li Class="ArachnaeSwarm.JobGiver_WanderNearProducer"/>
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<!-- Take care of critical needs (below rescue - so heroic!)-->
|
||||
|
||||
<li Class="ThinkNode_Tagger">
|
||||
<tagToGive>RestingForMedicalReasons</tagToGive>
|
||||
<subNodes>
|
||||
<li Class="JobGiver_PatientGoToBed"/>
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<li Class="JobGiver_SeekAllowedArea"/>
|
||||
<li Class="JobGiver_SeekSafeTemperature"/>
|
||||
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<!-- Satisfy basic needs -->
|
||||
<li Class="ThinkNode_Subtree">
|
||||
<treeDef>SatisfyBasicNeeds</treeDef>
|
||||
</li>
|
||||
|
||||
<!-- Tame animal: wander near colony if possible -->
|
||||
<li Class="ThinkNode_ConditionalOfPlayerFaction">
|
||||
<subNodes>
|
||||
<li Class="ThinkNode_Tagger">
|
||||
<tagToGive>Idle</tagToGive>
|
||||
<subNodes>
|
||||
<!-- Wander near your current position if in hostile map -->
|
||||
<li Class="ThinkNode_ConditionalAnyEnemyInHostileMap">
|
||||
<subNodes>
|
||||
<li Class="JobGiver_WanderAnywhere">
|
||||
<maxDanger>None</maxDanger>
|
||||
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<li Class="ThinkNode_ConditionalRoamer">
|
||||
<subNodes>
|
||||
<li Class="JobGiver_WanderInRoofedCellsInPen">
|
||||
<maxDanger>None</maxDanger>
|
||||
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
||||
<expiryInterval>1200</expiryInterval>
|
||||
</li>
|
||||
|
||||
<!-- tame roamers should not wander too far, and if unenclosed wander near a suitable pen marker 10% of the time -->
|
||||
<li Class="ThinkNode_ConditionalRandom">
|
||||
<chance>0.1</chance>
|
||||
<subNodes>
|
||||
<li Class="JobGiver_WanderInPen">
|
||||
<maxDanger>None</maxDanger>
|
||||
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
||||
<expiryInterval>1200</expiryInterval>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<li Class="JobGiver_WanderAnywhere">
|
||||
<maxDanger>None</maxDanger>
|
||||
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<!-- Wander near colony -->
|
||||
<li Class="JobGiver_WanderColony">
|
||||
<maxDanger>None</maxDanger>
|
||||
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<!-- Of neutral faction: rest and then exit the map -->
|
||||
<li Class="ThinkNode_ConditionalNonPlayerNonHostileFaction">
|
||||
<subNodes>
|
||||
<li Class="ThinkNode_Tagger">
|
||||
<tagToGive>RestingForMedicalReasons</tagToGive>
|
||||
<subNodes>
|
||||
<li Class="JobGiver_PatientGoToBed" />
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<li Class="ThinkNode_Tagger">
|
||||
<tagToGive>Misc</tagToGive>
|
||||
<subNodes>
|
||||
<li Class="JobGiver_ExitMapBest">
|
||||
<defaultLocomotion>Walk</defaultLocomotion>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<!-- Wander -->
|
||||
<li Class="ThinkNode_Tagger">
|
||||
<tagToGive>Idle</tagToGive>
|
||||
<subNodes>
|
||||
<li Class="ThinkNode_ConditionalHerdAnimal">
|
||||
<subNodes>
|
||||
<li Class="JobGiver_WanderHerd">
|
||||
<maxDanger>Deadly</maxDanger>
|
||||
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<li Class="JobGiver_WanderAnywhere">
|
||||
<maxDanger>Deadly</maxDanger>
|
||||
<ticksBetweenWandersRange>160~300</ticksBetweenWandersRange>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<li Class="JobGiver_IdleError"/>
|
||||
</subNodes>
|
||||
</thinkRoot>
|
||||
</ThinkTreeDef>
|
||||
|
||||
<ThinkTreeDef>
|
||||
<defName>ARA_Humanlike</defName> <!-- 更改defName以避免与原版Humanlike冲突 -->
|
||||
|
||||
|
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 70 KiB |
|
Before Width: | Height: | Size: 177 KiB After Width: | Height: | Size: 177 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 66 KiB |
|
Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 80 KiB |
|
Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 88 KiB |
|
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 67 KiB |
|
Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 80 KiB |
|
Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 88 KiB |
@@ -1,21 +1,41 @@
|
||||
{
|
||||
"Version": 1,
|
||||
"WorkspaceRootPath": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\",
|
||||
"WorkspaceRootPath": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\",
|
||||
"Documents": [
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|e:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\pawn_comps\\ara_flight\\pawn_flighttrackerpatches.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\buildings\\building_corpsevat\\building_corpsevat.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:buildings\\building_corpsevat\\building_corpsevat.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\buildings\\building_corpsevat\\jobdriver_haulcorpsetovat.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:buildings\\building_corpsevat\\jobdriver_haulcorpsetovat.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\buildings\\building_dormancyvat\\building_dormancyvat.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:buildings\\building_dormancyvat\\building_dormancyvat.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\buildings\\building_corpsevat\\corpsevatextension.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:buildings\\building_corpsevat\\corpsevatextension.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\jobs\\jobdriver_followproducer\\thinknode_conditionalnotproducedbymechcarrier.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:jobs\\jobdriver_followproducer\\thinknode_conditionalnotproducedbymechcarrier.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\pawn_comps\\ara_flight\\pawn_flighttrackerpatches.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:pawn_comps\\ara_flight\\pawn_flighttrackerpatches.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|e:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\pawn_comps\\ara_flight\\compproperties_pawnflight.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\pawn_comps\\ara_flight\\compproperties_pawnflight.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:pawn_comps\\ara_flight\\compproperties_pawnflight.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|e:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\hediffs\\ara_productionqueue\\hediffcompproperties_productionqueue.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\hediffs\\ara_productionqueue\\hediffcompproperties_productionqueue.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:hediffs\\ara_productionqueue\\hediffcompproperties_productionqueue.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|e:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\hediffs\\ara_productionqueue\\hediffcomp_productionqueue.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\hediffs\\ara_productionqueue\\hediffcomp_productionqueue.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:hediffs\\ara_productionqueue\\hediffcomp_productionqueue.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
}
|
||||
],
|
||||
@@ -26,19 +46,84 @@
|
||||
"DocumentGroups": [
|
||||
{
|
||||
"DockedWidth": 200,
|
||||
"SelectedChildIndex": 1,
|
||||
"SelectedChildIndex": 2,
|
||||
"Children": [
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 3,
|
||||
"Title": "CorpseVatExtension.cs",
|
||||
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_CorpseVat\\CorpseVatExtension.cs",
|
||||
"RelativeDocumentMoniker": "Buildings\\Building_CorpseVat\\CorpseVatExtension.cs",
|
||||
"ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_CorpseVat\\CorpseVatExtension.cs",
|
||||
"RelativeToolTip": "Buildings\\Building_CorpseVat\\CorpseVatExtension.cs",
|
||||
"ViewState": "AgIAAAYAAAAAAAAAAAAAABkAAAAIAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2026-01-23T04:01:21.774Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 1,
|
||||
"Title": "JobDriver_HaulCorpseToVat.cs",
|
||||
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_CorpseVat\\JobDriver_HaulCorpseToVat.cs",
|
||||
"RelativeDocumentMoniker": "Buildings\\Building_CorpseVat\\JobDriver_HaulCorpseToVat.cs",
|
||||
"ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_CorpseVat\\JobDriver_HaulCorpseToVat.cs",
|
||||
"RelativeToolTip": "Buildings\\Building_CorpseVat\\JobDriver_HaulCorpseToVat.cs",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAAAAAA0AAAA0AAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2026-01-23T04:01:20.292Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 0,
|
||||
"Title": "Building_CorpseVat.cs",
|
||||
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_CorpseVat\\Building_CorpseVat.cs",
|
||||
"RelativeDocumentMoniker": "Buildings\\Building_CorpseVat\\Building_CorpseVat.cs",
|
||||
"ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_CorpseVat\\Building_CorpseVat.cs",
|
||||
"RelativeToolTip": "Buildings\\Building_CorpseVat\\Building_CorpseVat.cs",
|
||||
"ViewState": "AgIAAEYBAAAAAAAAAAAawFgBAAAMAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2026-01-23T04:01:18.535Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 2,
|
||||
"Title": "Building_DormancyVat.cs",
|
||||
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_DormancyVat\\Building_DormancyVat.cs",
|
||||
"RelativeDocumentMoniker": "Buildings\\Building_DormancyVat\\Building_DormancyVat.cs",
|
||||
"ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_DormancyVat\\Building_DormancyVat.cs",
|
||||
"RelativeToolTip": "Buildings\\Building_DormancyVat\\Building_DormancyVat.cs",
|
||||
"ViewState": "AgIAACUAAAAAAAAAAIA8wDcAAAAAAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2026-01-23T03:49:32.234Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Bookmark",
|
||||
"Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}"
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 0,
|
||||
"DocumentIndex": 4,
|
||||
"Title": "ThinkNode_ConditionalNotProducedByMechCarrier.cs",
|
||||
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_FollowProducer\\ThinkNode_ConditionalNotProducedByMechCarrier.cs",
|
||||
"RelativeDocumentMoniker": "Jobs\\JobDriver_FollowProducer\\ThinkNode_ConditionalNotProducedByMechCarrier.cs",
|
||||
"ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_FollowProducer\\ThinkNode_ConditionalNotProducedByMechCarrier.cs",
|
||||
"RelativeToolTip": "Jobs\\JobDriver_FollowProducer\\ThinkNode_ConditionalNotProducedByMechCarrier.cs",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAoAAAA+AAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2026-01-23T02:44:35.619Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 5,
|
||||
"Title": "Pawn_FlightTrackerPatches.cs",
|
||||
"DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_Flight\\Pawn_FlightTrackerPatches.cs",
|
||||
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_Flight\\Pawn_FlightTrackerPatches.cs",
|
||||
"RelativeDocumentMoniker": "Pawn_Comps\\ARA_Flight\\Pawn_FlightTrackerPatches.cs",
|
||||
"ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_Flight\\Pawn_FlightTrackerPatches.cs",
|
||||
"ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_Flight\\Pawn_FlightTrackerPatches.cs",
|
||||
"RelativeToolTip": "Pawn_Comps\\ARA_Flight\\Pawn_FlightTrackerPatches.cs",
|
||||
"ViewState": "AgIAAB0AAAAAAAAAAAAuwEsAAAAfAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
@@ -47,42 +132,39 @@
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 1,
|
||||
"DocumentIndex": 6,
|
||||
"Title": "CompProperties_PawnFlight.cs",
|
||||
"DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_Flight\\CompProperties_PawnFlight.cs",
|
||||
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_Flight\\CompProperties_PawnFlight.cs",
|
||||
"RelativeDocumentMoniker": "Pawn_Comps\\ARA_Flight\\CompProperties_PawnFlight.cs",
|
||||
"ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_Flight\\CompProperties_PawnFlight.cs",
|
||||
"ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_Flight\\CompProperties_PawnFlight.cs",
|
||||
"RelativeToolTip": "Pawn_Comps\\ARA_Flight\\CompProperties_PawnFlight.cs",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAAAAAA4AAAAeAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2026-01-22T14:02:45.434Z",
|
||||
"EditorCaption": ""
|
||||
"WhenOpened": "2026-01-22T14:02:45.434Z"
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 3,
|
||||
"DocumentIndex": 8,
|
||||
"Title": "HediffComp_ProductionQueue.cs",
|
||||
"DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_ProductionQueue\\HediffComp_ProductionQueue.cs",
|
||||
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_ProductionQueue\\HediffComp_ProductionQueue.cs",
|
||||
"RelativeDocumentMoniker": "Hediffs\\ARA_ProductionQueue\\HediffComp_ProductionQueue.cs",
|
||||
"ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_ProductionQueue\\HediffComp_ProductionQueue.cs",
|
||||
"ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_ProductionQueue\\HediffComp_ProductionQueue.cs",
|
||||
"RelativeToolTip": "Hediffs\\ARA_ProductionQueue\\HediffComp_ProductionQueue.cs",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAAAAAB8AAAAMAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2026-01-22T10:31:06.201Z",
|
||||
"EditorCaption": ""
|
||||
"WhenOpened": "2026-01-22T10:31:06.201Z"
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 2,
|
||||
"DocumentIndex": 7,
|
||||
"Title": "HediffCompProperties_ProductionQueue.cs",
|
||||
"DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_ProductionQueue\\HediffCompProperties_ProductionQueue.cs",
|
||||
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_ProductionQueue\\HediffCompProperties_ProductionQueue.cs",
|
||||
"RelativeDocumentMoniker": "Hediffs\\ARA_ProductionQueue\\HediffCompProperties_ProductionQueue.cs",
|
||||
"ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_ProductionQueue\\HediffCompProperties_ProductionQueue.cs",
|
||||
"ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_ProductionQueue\\HediffCompProperties_ProductionQueue.cs",
|
||||
"RelativeToolTip": "Hediffs\\ARA_ProductionQueue\\HediffCompProperties_ProductionQueue.cs",
|
||||
"ViewState": "AgIAAB8AAAAAAAAAAAAewEoAAAApAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2026-01-22T09:30:17.721Z",
|
||||
"EditorCaption": ""
|
||||
"WhenOpened": "2026-01-22T09:30:17.721Z"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -34,6 +34,9 @@
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Buildings\Building_CorpseVat\Building_CorpseVat.cs" />
|
||||
<Compile Include="Buildings\Building_CorpseVat\CorpseVatExtension.cs" />
|
||||
<Compile Include="Buildings\Building_CorpseVat\JobDriver_HaulCorpseToVat.cs" />
|
||||
<Compile Include="Damage\DamageDefExtension_TerrainCover.cs" />
|
||||
<Compile Include="Damage\DamageWorker_ExplosionWithTerrain.cs" />
|
||||
<Compile Include="Hediffs\ARA_GestaltNode\CompGestalt.cs" />
|
||||
@@ -311,6 +314,7 @@
|
||||
<Compile Include="Jobs\JobDriver_FollowProducer\JobGiver_AIDefendProducer.cs" />
|
||||
<Compile Include="Jobs\JobDriver_FollowProducer\JobGiver_AIFollowProducer.cs" />
|
||||
<Compile Include="Jobs\JobDriver_FollowProducer\JobGiver_WanderNearProducer.cs" />
|
||||
<Compile Include="Jobs\JobDriver_FollowProducer\ThinkNode_ConditionalNotProducedByMechCarrier.cs" />
|
||||
<Compile Include="Jobs\JobDriver_FollowProducer\ThinkNode_ConditionalShouldFollowProducer.cs" />
|
||||
<Compile Include="Jobs\JobDriver_Refuel_Nutrition.cs" />
|
||||
<Compile Include="Jobs\JobDriver_StripChitin\CompProperties_ChitinStripping.cs" />
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
using System;
|
||||
using RimWorld;
|
||||
using UnityEngine;
|
||||
using Verse;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
/// <summary>
|
||||
/// 尸体保存建筑的扩展定义
|
||||
/// </summary>
|
||||
public class CorpseVatExtension : DefModExtension
|
||||
{
|
||||
// ===== 贴图配置 =====
|
||||
public string topGraphicPath; // 顶部贴图路径
|
||||
public Type graphicClass = typeof(Graphic_Multi); // 贴图类
|
||||
|
||||
// ===== 尸体绘制配置 =====
|
||||
public Vector3 corpseDrawOffset = Vector3.zero; // 尸体绘制偏移
|
||||
public float corpseDrawRotation = 0f; // 尸体绘制旋转
|
||||
public float corpseDrawScale = 1f; // 尸体绘制缩放
|
||||
public bool drawPreservationEffect = true; // 是否绘制保存效果
|
||||
|
||||
// ===== 功能配置 =====
|
||||
public bool requiresPower = true; // 是否需要电源
|
||||
public float slowDecayRate = 0.1f; // 腐烂减缓率(0-1,0=完全停止腐烂,1=正常腐烂)
|
||||
|
||||
// ===== 音效配置 =====
|
||||
public SoundDef insertSound; // 放入音效
|
||||
public SoundDef ejectSound; // 弹出音效
|
||||
|
||||
public string GetConfigSummary()
|
||||
{
|
||||
System.Text.StringBuilder sb = new System.Text.StringBuilder();
|
||||
sb.AppendLine("=== CorpseVat 配置摘要 ===");
|
||||
sb.AppendLine($"需要电源: {requiresPower}");
|
||||
sb.AppendLine($"减缓腐烂: {(slowDecayRate * 100):F0}%");
|
||||
sb.AppendLine($"顶部贴图: {topGraphicPath ?? "无"}");
|
||||
sb.AppendLine($"绘制偏移: {corpseDrawOffset}");
|
||||
sb.AppendLine($"绘制旋转: {corpseDrawRotation}");
|
||||
sb.AppendLine($"绘制缩放: {corpseDrawScale}");
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
using Verse;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
public class DefModExtension_CorpseContainer : DefModExtension
|
||||
{
|
||||
// 最大容量
|
||||
public int maxCapacity = 1;
|
||||
|
||||
// 是否允许存储非人类尸体
|
||||
public bool allowNonHumanCorpses = true;
|
||||
|
||||
// 是否允许存储腐烂的尸体
|
||||
public bool allowRottingCorpses = true;
|
||||
|
||||
// 是否自动保鲜(防止腐烂)
|
||||
public bool preserveCorpses = false;
|
||||
|
||||
// 自定义存储效果描述
|
||||
public string storageEffectDescriptionKey;
|
||||
}
|
||||
}
|
||||
@@ -1,64 +0,0 @@
|
||||
using RimWorld;
|
||||
using Verse;
|
||||
using Verse.AI;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
public class JobDriver_HaulCorpseToContainer : JobDriver
|
||||
{
|
||||
private const TargetIndex CorpseIndex = TargetIndex.A;
|
||||
private const TargetIndex ContainerIndex = TargetIndex.B;
|
||||
private const TargetIndex StoreCellIndex = TargetIndex.C;
|
||||
|
||||
private Corpse Corpse => (Corpse)job.GetTarget(CorpseIndex).Thing;
|
||||
private Building_CorpseContainer Container => (Building_CorpseContainer)job.GetTarget(ContainerIndex).Thing;
|
||||
|
||||
public override bool TryMakePreToilReservations(bool errorOnFailed)
|
||||
{
|
||||
return pawn.Reserve(Corpse, job, 1, -1, null, errorOnFailed) &&
|
||||
pawn.Reserve(Container, job, 1, -1, null, errorOnFailed);
|
||||
}
|
||||
|
||||
protected override IEnumerable<Toil> MakeNewToils()
|
||||
{
|
||||
// 验证目标
|
||||
this.FailOnDestroyedOrNull(CorpseIndex);
|
||||
this.FailOnDestroyedOrNull(ContainerIndex);
|
||||
this.FailOnForbidden(CorpseIndex);
|
||||
this.FailOnForbidden(ContainerIndex);
|
||||
|
||||
// 前往尸体
|
||||
yield return Toils_Goto.GotoThing(CorpseIndex, PathEndMode.Touch)
|
||||
.FailOnSomeonePhysicallyInteracting(CorpseIndex);
|
||||
|
||||
// 捡起尸体
|
||||
yield return Toils_Haul.StartCarryThing(CorpseIndex);
|
||||
|
||||
// 前往容器
|
||||
yield return Toils_Goto.GotoThing(ContainerIndex, PathEndMode.InteractionCell);
|
||||
|
||||
// 存储尸体到容器
|
||||
Toil storeToil = new Toil();
|
||||
storeToil.initAction = delegate
|
||||
{
|
||||
if (pawn.carryTracker.CarriedThing is Corpse carriedCorpse)
|
||||
{
|
||||
AcceptanceReport report = Container.TryAcceptCorpse(carriedCorpse);
|
||||
|
||||
if (report.Accepted)
|
||||
{
|
||||
// 尸体已成功存储,清空搬运
|
||||
pawn.carryTracker.innerContainer.Clear();
|
||||
}
|
||||
else
|
||||
{
|
||||
// 存储失败,结束工作
|
||||
EndJobWith(JobCondition.Incompletable);
|
||||
}
|
||||
}
|
||||
};
|
||||
storeToil.defaultCompleteMode = ToilCompleteMode.Instant;
|
||||
yield return storeToil;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
using RimWorld;
|
||||
using Verse;
|
||||
using Verse.AI;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
/// <summary>
|
||||
/// 自定义的搬运尸体工作驱动
|
||||
/// </summary>
|
||||
public class JobDriver_HaulCorpseToVat : JobDriver_HaulToContainer
|
||||
{
|
||||
protected override Toil CarryToContainerToil()
|
||||
{
|
||||
Toil toil = base.CarryToContainerToil();
|
||||
|
||||
// 添加自定义行为
|
||||
toil.AddPreTickAction(() =>
|
||||
{
|
||||
Corpse corpse = TargetThingA as Corpse;
|
||||
Building_CorpseVat vat = TargetThingB as Building_CorpseVat;
|
||||
|
||||
if (corpse != null && vat != null && pawn != null)
|
||||
{
|
||||
// 检查距离,如果太远可以取消工作
|
||||
float distance = corpse.Position.DistanceTo(vat.Position);
|
||||
if (distance > 100f) // 最大距离限制
|
||||
{
|
||||
pawn.jobs.EndCurrentJob(JobCondition.Incompletable);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return toil;
|
||||
}
|
||||
|
||||
protected override Toil FindCarryToCellToil()
|
||||
{
|
||||
Toil toil = base.FindCarryToCellToil();
|
||||
|
||||
// 添加额外条件检查
|
||||
toil.AddFailCondition(() =>
|
||||
{
|
||||
Corpse corpse = TargetThingA as Corpse;
|
||||
Building_CorpseVat vat = TargetThingB as Building_CorpseVat;
|
||||
|
||||
if (corpse == null || corpse.Destroyed || vat == null || vat.Destroyed)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// 检查尸体是否仍然可以被接受
|
||||
AcceptanceReport report = vat.CanAcceptCorpse(corpse);
|
||||
return !report.Accepted;
|
||||
});
|
||||
|
||||
return toil;
|
||||
}
|
||||
|
||||
public override bool TryMakePreToilReservations(bool errorOnFailed)
|
||||
{
|
||||
// 为尸体和建筑预留
|
||||
if (!pawn.Reserve(TargetA, job, 1, -1, null, errorOnFailed))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (!pawn.Reserve(TargetB, job, 1, -1, null, errorOnFailed))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
using RimWorld;
|
||||
using Verse;
|
||||
using Verse.AI;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
/// <summary>
|
||||
/// 反向条件节点:如果单位不是由生产者生产的,则进入此节点
|
||||
/// 与ThinkNode_ConditionalShouldFollowProducer逻辑相反
|
||||
/// </summary>
|
||||
public class ThinkNode_ConditionalNotProducedByMechCarrier : ThinkNode_Conditional
|
||||
{
|
||||
// 可选:是否检查生产者是否存活
|
||||
private bool checkProducerAlive = true;
|
||||
|
||||
// 可选:是否检查生产者是否在同一地图
|
||||
private bool checkSameMap = true;
|
||||
|
||||
// 可选:是否检查生产者是否可到达
|
||||
private bool checkReachable = true;
|
||||
|
||||
// 可选:是否检查生产者类型(pawn必须征召才跟随)
|
||||
private bool checkProducerTypeConditions = true;
|
||||
|
||||
// 可选:额外条件类(可以通过XML添加额外条件)
|
||||
public string extraConditionClass;
|
||||
|
||||
public ThinkNode_ConditionalNotProducedByMechCarrier()
|
||||
{
|
||||
}
|
||||
|
||||
protected override bool Satisfied(Pawn pawn)
|
||||
{
|
||||
// 基础检查:如果不是生产者生产的,返回true
|
||||
bool isProduced = IsProducedByMechCarrier(pawn);
|
||||
|
||||
// 如果是生产者生产的,再检查其他条件
|
||||
if (isProduced)
|
||||
{
|
||||
return false; // 是生产者生产的,不满足条件
|
||||
}
|
||||
|
||||
// 不是生产者生产的,满足条件
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 检查pawn是否由生产者生产
|
||||
/// </summary>
|
||||
private bool IsProducedByMechCarrier(Pawn pawn)
|
||||
{
|
||||
if (!pawn.Spawned)
|
||||
return false;
|
||||
|
||||
// 检查是否有生产者Comp
|
||||
CompProducedByMechCarrier producerComp = pawn.TryGetComp<CompProducedByMechCarrier>();
|
||||
if (producerComp == null || !producerComp.HasValidProducer)
|
||||
return false;
|
||||
|
||||
Thing producer = producerComp.Producer;
|
||||
if (producer == null || producer.Destroyed)
|
||||
return false;
|
||||
|
||||
// 检查生产者是否在同一地图
|
||||
if (checkSameMap && producer.Map != pawn.Map)
|
||||
return false;
|
||||
|
||||
// 检查是否可以到达生产者
|
||||
if (checkReachable && !pawn.CanReach(producer, PathEndMode.OnCell, Danger.Deadly))
|
||||
return false;
|
||||
|
||||
// 根据生产者类型检查特定条件
|
||||
if (checkProducerTypeConditions && producer is Pawn pawnProducer)
|
||||
{
|
||||
// 如果生产者是pawn,则只在征召状态下才跟随
|
||||
// 这是为了模拟原版动物跟随主人的逻辑
|
||||
if (checkProducerAlive && (pawnProducer.Dead || pawnProducer.Downed))
|
||||
return false;
|
||||
|
||||
// 只有在征召状态下才认为需要跟随
|
||||
if (!pawnProducer.Drafted)
|
||||
return false;
|
||||
}
|
||||
else if (checkProducerTypeConditions && producer is Building buildingProducer)
|
||||
{
|
||||
// 如果生产者是建筑,默认返回true
|
||||
// 可以根据需要添加其他条件
|
||||
return true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||