更新更新

This commit is contained in:
Tourswen
2025-10-21 01:33:29 +08:00
parent a49b9cb554
commit 2314b7bca7
37 changed files with 990 additions and 439 deletions

Binary file not shown.

View File

@@ -3,18 +3,18 @@
<AbilityDef ParentName="AbilityTouchBase">
<defName>ARA_BindDrone</defName>
<label>信息素标记</label>
<description>使用信息素标记一只阿拉克涅督虫,受到标记的督虫和其麾下的辅虫将誓死效忠于女皇种,并与其建立心灵链接。\n\n除了手动链接外女皇种也会每60秒尝试自动链接所有未链接的阿拉克涅督虫此类链接和手动链接不一样不需要目视。</description>
<description>使用信息素标记一只阿拉克涅督虫(包括野生虫群子个体),受到标记的督虫和其麾下的辅虫将誓死效忠于女皇种,并与其建立心灵链接。\n\n除了手动链接外女皇种也会每60秒尝试自动链接己方所有未链接的阿拉克涅督虫,此类链接和手动链接不一样,不需要目视。</description>
<iconPath>ArachnaeSwarm/UI/Abilities/ARA_BindDrone</iconPath> <!-- Placeholder: You'll need to create this icon -->
<hotKey>Misc1</hotKey>
<jobDef>CastAbilityOnThing</jobDef>
<targetRequired>true</targetRequired>
<cooldownTicksRange>60</cooldownTicksRange> <!-- 1 second cooldown -->
<cooldownTicksRange>600</cooldownTicksRange> <!-- 1 second cooldown -->
<verbProperties>
<verbClass>Verb_CastAbility</verbClass>
<warmupTime>0</warmupTime>
<range>99</range>
<warmupTime>1</warmupTime>
<range>30</range>
<targetParams>
<canTargetPawns>true</canTargetPawns>
<canTargetBuildings>false</canTargetBuildings>
@@ -863,6 +863,45 @@
</comps>
</AbilityDef>
<AbilityDef>
<defName>ARA_FireSpew</defName>
<label>爆燃火焰</label>
<description>爆燃种经过短暂蓄力后,向前大范围地喷出火焰。这种火焰喷射距离不是太长,但是可以形成一道致密的火墙。</description>
<iconPath>ArachnaeSwarm/UI/Abilities/ARA_FireSpew</iconPath>
<cooldownTicksRange>5000</cooldownTicksRange>
<aiCanUse>true</aiCanUse>
<ai_IsIncendiary>true</ai_IsIncendiary>
<sendMessageOnCooldownComplete>true</sendMessageOnCooldownComplete>
<warmupStartSound>FireSpew_Warmup</warmupStartSound>
<charges>3</charges>
<cooldownPerCharge>true</cooldownPerCharge>
<verbProperties>
<verbClass>Verb_CastAbility</verbClass>
<range>10</range>
<warmupTime>1</warmupTime>
<soundCast>FireSpew_Resolve</soundCast>
<targetParams>
<canTargetLocations>true</canTargetLocations>
</targetParams>
</verbProperties>
<comps>
<li Class="ArachnaeSwarm.CompProperties_AbilityNeedCost">
<customLabel>饮食</customLabel>
<showProgressBar>true</showProgressBar>
<needDef>Food</needDef>
<needCost>0.25</needCost>
<failMessage>营养值不足,需要进食</failMessage>
</li>
<li Class="CompProperties_AbilityFireSpew">
<range>10</range>
<lineWidthEnd>35</lineWidthEnd>
<filthDef>Filth_FlammableBile</filthDef>
<effecterDef>Fire_Spew</effecterDef>
<canHitFilledCells>true</canHitFilledCells>
</li>
</comps>
</AbilityDef>
<AbilityDef>
<defName>ARA_TerrainHeal_Ability</defName>
<label>护士装疗愈</label>
@@ -1093,8 +1132,8 @@
<warmupStartSound>AcidSpray_Warmup</warmupStartSound>
<verbProperties>
<verbClass>Verb_CastAbility</verbClass>
<range>-1</range>
<warmupTime>0.1</warmupTime>
<range>24</range>
<warmupTime>0</warmupTime>
<soundCast>AcidSpray_Resolve</soundCast>
<violent>false</violent>
<targetable>false</targetable>
@@ -1124,6 +1163,7 @@
<cooldownTicksRange>1000</cooldownTicksRange>
<charges>3</charges>
<cooldownPerCharge>true</cooldownPerCharge>
<aiCanUse>false</aiCanUse>
<hostile>false</hostile>
<casterMustBeCapableOfViolence>false</casterMustBeCapableOfViolence>
<verbProperties>
@@ -1296,7 +1336,7 @@
<description>只要一声令下,阿拉克涅虫族随时可以为了虫巢的大业立刻死去</description>
<iconPath>ArachnaeSwarm/UI/Abilities/ARA_Suicide_Ability</iconPath>
<cooldownTicksRange>1</cooldownTicksRange>
<aiCanUse>true</aiCanUse>
<aiCanUse>false</aiCanUse>
<displayOrder>9900</displayOrder>
<displayGizmoWhileUndrafted>true</displayGizmoWhileUndrafted>
<warmupStartSound>AcidSpray_Warmup</warmupStartSound>

View File

@@ -31,10 +31,12 @@
<li>(0.35, 0.65)</li>
<li>(0.5, 0.5)</li>
<li>(0.65, 0.35)</li>
<li>(0.85, 0.15)</li> <!-- 高严重性(0.85)时, 只需要造成15%的伤害 -->
<li>(0.85, 0.15)</li>
<li>(1.25, 0.01)</li>
<li>(2.5, 0.001)</li> <!-- 高严重性(0.85)时, 只需要造成15%的伤害 -->
</points>
</requiredDamagePercentageCurve>
<destroyChance>1.0</destroyChance>
<destroyChance>0.25</destroyChance>
</li>
</modExtensions>
<additionalHediffs>

View File

@@ -81,43 +81,8 @@
<kindDef>Combat</kindDef>
<commonality>100</commonality>
<options>
<ARA_Raid_AcidSwarm>20</ARA_Raid_AcidSwarm>
<ARA_Raid_Acidling>5</ARA_Raid_Acidling>
</options>
</li>
</pawnGroupMakers>
</li>
<li Class="ArachnaeSwarm.Effect_TriggerRaid">
<points>10000</points>
<faction>ARA_Hostile_Hive</faction>
<raidStrategy>ImmediateAttack</raidStrategy>
<raidArrivalMode>EdgeWalkIn</raidArrivalMode>
<groupKind>Combat</groupKind>
<pawnGroupMakers>
<li>
<kindDef>Combat</kindDef>
<commonality>100</commonality>
<options>
<ARA_Raid_AcidSwarm>20</ARA_Raid_AcidSwarm>
<ARA_Raid_Heavy>3</ARA_Raid_Heavy>
</options>
</li>
</pawnGroupMakers>
</li>
<li Class="ArachnaeSwarm.Effect_TriggerRaid">
<points>10000</points>
<faction>ARA_Hostile_Hive</faction>
<raidStrategy>ImmediateAttack</raidStrategy>
<raidArrivalMode>EdgeWalkIn</raidArrivalMode>
<groupKind>Combat</groupKind>
<pawnGroupMakers>
<li>
<kindDef>Combat</kindDef>
<commonality>100</commonality>
<options>
<ARA_Raid_AcidSwarm>20</ARA_Raid_AcidSwarm>
<ARA_Raid_Shooter>3</ARA_Raid_Shooter>
<ARA_Raid_Assault>7</ARA_Raid_Assault>
<ArachnaeBase_Race_Acidcut_Enermy>7</ArachnaeBase_Race_Acidcut_Enermy>
<ArachnaeNode_Race_ShieldHead_Enermy>3</ArachnaeNode_Race_ShieldHead_Enermy>
</options>
</li>
</pawnGroupMakers>

View File

@@ -345,6 +345,35 @@
<isBad>false</isBad>
<scenarioCanAdd>false</scenarioCanAdd>
<maxSeverity>1.0</maxSeverity>
<renderNodeProperties>
<li>
<nodeClass>PawnRenderNode_AttachmentHead</nodeClass>
<workerClass>PawnRenderNodeWorker_FlipWhenCrawling</workerClass>
<texPath>ArachnaeSwarm/Things/ARA_HiveNode/Addons/ArachnaeNode_Race_Myrmecocystus_Addons_Stomach</texPath>
<parentTagDef>Body</parentTagDef>
<useSkinShader>false</useSkinShader>
<useRottenColor>false</useRottenColor>
<rotDrawMode>Fresh, Rotting</rotDrawMode>
<drawData>
<dataNorth>
<offset>(0, 0, -0.05)</offset>
<layer>120</layer>
</dataNorth>
<dataEast>
<offset>(0, 0, -0.05)</offset>
</dataEast>
<dataSouth>
<offset>(0, 0, -0.05)</offset>
</dataSouth>
<dataWest>
<offset>(0, 0, -0.05)</offset>
</dataWest>
<defaultData>
<layer>-40</layer>
</defaultData>
</drawData>
</li>
</renderNodeProperties>
<!-- <stages>
<li>
<becomeVisible>ture</becomeVisible>
@@ -403,11 +432,13 @@
<li Class="HediffCompProperties_GiveAbility">
<abilityDefs>
<li>ARA_Myrmecocystus_Production_Medicine</li>
<li>ARA_Myrmecocystus_Production_Fuel</li>
</abilityDefs>
</li>
<li Class="HediffCompProperties_RemoveIfOtherHediff">
<hediffs>
<li>ARA_Myrmecocystus_Production_Medicine</li>
<li>ARA_Myrmecocystus_Production_Fuel</li>
</hediffs>
</li>
</comps>
@@ -472,6 +503,35 @@
<isBad>false</isBad>
<scenarioCanAdd>false</scenarioCanAdd>
<maxSeverity>1.0</maxSeverity>
<renderNodeProperties>
<li>
<nodeClass>PawnRenderNode_AttachmentHead</nodeClass>
<workerClass>PawnRenderNodeWorker_FlipWhenCrawling</workerClass>
<texPath>ArachnaeSwarm/Things/ARA_HiveNode/Addons/ArachnaeNode_Race_Myrmecocystus_Addons_StomachMedicine</texPath>
<parentTagDef>Body</parentTagDef>
<useSkinShader>false</useSkinShader>
<useRottenColor>false</useRottenColor>
<rotDrawMode>Fresh, Rotting</rotDrawMode>
<drawData>
<dataNorth>
<offset>(0, 0, -0.05)</offset>
<layer>120</layer>
</dataNorth>
<dataEast>
<offset>(0, 0, -0.05)</offset>
</dataEast>
<dataSouth>
<offset>(0, 0, -0.05)</offset>
</dataSouth>
<dataWest>
<offset>(0, 0, -0.05)</offset>
</dataWest>
<defaultData>
<layer>-40</layer>
</defaultData>
</drawData>
</li>
</renderNodeProperties>
<stages>
<li>
<minSeverity>0.01</minSeverity>
@@ -490,6 +550,148 @@
</li>
</comps>
</HediffDef>
<AbilityDef>
<defName>ARA_Myrmecocystus_Production_Fuel</defName>
<label>蜜罐种转换——易燃腔室</label>
<description>使蜜罐种发生内驱性进化,以牺牲生产阿拉克涅虫蜜的代价,使其可以产出化合燃料,增强其护甲并给予其额外的喷射火焰的能力。\n\n该进化过程不可逆</description>
<iconPath>ArachnaeSwarm/UI/Abilities/ARA_Myrmecocystus_Production_Fuel</iconPath>
<cooldownTicksRange>1800</cooldownTicksRange>
<hostile>false</hostile>
<groupAbility>true</groupAbility>
<displayGizmoWhileUndrafted>true</displayGizmoWhileUndrafted>
<disableGizmoWhileUndrafted>false</disableGizmoWhileUndrafted>
<aiCanUse>false</aiCanUse>
<ai_IsOffensive>true</ai_IsOffensive>
<targetRequired>false</targetRequired>
<jobDef>CastAbilityOnThing</jobDef>
<verbProperties>
<verbClass>Verb_CastAbility</verbClass>
<range>1</range>
<warmupTime>12</warmupTime>
<soundCast>AcidSpray_Resolve</soundCast>
<violent>false</violent>
<targetable>false</targetable>
<targetParams>
<canTargetSelf>True</canTargetSelf>
</targetParams>
</verbProperties>
<comps>
<li Class="CompProperties_AbilityGiveHediff">
<compClass>CompAbilityEffect_GiveHediff</compClass>
<hediffDef>ARA_Myrmecocystus_Production_Fuel</hediffDef>
<onlyApplyToSelf>True</onlyApplyToSelf>
<replaceExisting>true</replaceExisting>
<severity>1</severity>
</li>
<li Class="ArachnaeSwarm.CompProperties_AbilityResearchPrereq">
<requiredResearch>ARA_Technology_8FEL</requiredResearch>
<failMessage>需要科技 节点FEL-8"爆燃腔" 以解锁进化</failMessage>
</li>
</comps>
</AbilityDef>
<HediffDef>
<defName>ARA_Myrmecocystus_Production_Fuel</defName>
<label>亚种-爆燃种</label>
<description>这只阿拉克涅蜜罐种已经获得拔耀,不再生产虫蜜,而是生产巢穴所稀缺的化合燃料,并可以通过喷射火焰对抗敌人。</description>
<descriptionHyperlinks>
<ThingDef>Chemfuel</ThingDef>
</descriptionHyperlinks>
<hediffClass>HediffWithComps</hediffClass>
<defaultLabelColor>(0.6, 0.4, 0.8)</defaultLabelColor>
<isBad>false</isBad>
<scenarioCanAdd>false</scenarioCanAdd>
<maxSeverity>1.0</maxSeverity>
<renderNodeProperties>
<li>
<nodeClass>PawnRenderNode_AttachmentHead</nodeClass>
<workerClass>PawnRenderNodeWorker_FlipWhenCrawling</workerClass>
<texPath>ArachnaeSwarm/Things/ARA_HiveNode/Addons/ArachnaeNode_Race_Myrmecocystus_Addons_StomachFuel</texPath>
<parentTagDef>Body</parentTagDef>
<useSkinShader>false</useSkinShader>
<useRottenColor>false</useRottenColor>
<rotDrawMode>Fresh, Rotting</rotDrawMode>
<drawData>
<dataNorth>
<offset>(0, 0, -0.05)</offset>
<layer>120</layer>
</dataNorth>
<dataEast>
<offset>(0, 0, -0.05)</offset>
</dataEast>
<dataSouth>
<offset>(0, 0, -0.05)</offset>
</dataSouth>
<dataWest>
<offset>(0, 0, -0.05)</offset>
</dataWest>
<defaultData>
<layer>-40</layer>
</defaultData>
</drawData>
</li>
</renderNodeProperties>
<stages>
<li>
<minSeverity>0.01</minSeverity>
<statOffsets>
<ArmorRating_Blunt>0.5</ArmorRating_Blunt>
<ArmorRating_Sharp>0.5</ArmorRating_Sharp>
</statOffsets>
</li>
</stages>
<comps>
<li Class="ArachnaeSwarm.MoharHediffs.HediffCompProperties_Spawner">
<!--
==================================================
基础设置 (Basic Settings)
==================================================
-->
<!-- [DEBUG] 如果为true则为此组件启用详细的调试日志记录。 -->
<debug>true</debug>
<!-- 要生成的物品的ThingDef。 -->
<thingToSpawn>Chemfuel</thingToSpawn>
<!-- 每次生成的基础物品数量。 -->
<spawnCount>20</spawnCount>
<!--
==================================================
生成周期 (Spawning Interval)
==================================================
-->
<!-- 下一次生成事件发生前的最少天数。 -->
<minDaysB4Next>1</minDaysB4Next>
<!-- 下一次生成事件发生前的最大天数。 -->
<maxDaysB4Next>1</maxDaysB4Next>
<randomGrace>0</randomGrace>
<!--
==================================================
与年龄相关的调整 (Age-Related Adjustments)
==================================================
-->
<!-- 如果为true生成数量将根据宿主的年龄进行调整。 -->
<ageWeightedQuantity>false</ageWeightedQuantity>
<!-- 如果为true且ageWeightedQuantity为true则随着宿主年龄增长生成数量变多。 -->
<olderBiggerQuantity>true</olderBiggerQuantity>
<!-- 如果为true且ageWeightedQuantity为true则随年龄增长的数量缩放将是指数性的而非线性的。 -->
<exponentialQuantity>true</exponentialQuantity>
<!-- 指数级数量缩放的最大乘数,以防止出现荒谬的数字。 -->
<exponentialRatioLimit>20</exponentialRatioLimit>
<!--
==================================================
生成条件 (Spawning Conditions)
==================================================
-->
<!-- 如果为true当宿主Pawn饥饿时生成将暂停。 -->
<hungerRelative>true</hungerRelative>
<!-- 如果为true当宿主Pawn受伤时生成将暂停。 -->
<healthRelative>false</healthRelative>
</li>
<li Class="HediffCompProperties_GiveAbility">
<abilityDefs>
<li>ARA_FireSpew</li>
</abilityDefs>
</li>
</comps>
</HediffDef>
<!-- 战士种 -->
<HediffDef>
@@ -795,9 +997,41 @@
<isBad>false</isBad>
<scenarioCanAdd>false</scenarioCanAdd>
<maxSeverity>1.0</maxSeverity>
<renderNodeProperties>
<li>
<nodeClass>PawnRenderNode_AttachmentHead</nodeClass>
<workerClass>PawnRenderNodeWorker_FlipWhenCrawling</workerClass>
<texPath>ArachnaeSwarm/Things/ARA_HiveNode/Addons/ArachnaeNode_Race_Addons_ShieldBody</texPath>
<parentTagDef>Body</parentTagDef>
<useSkinShader>false</useSkinShader>
<useRottenColor>false</useRottenColor>
<rotDrawMode>Fresh, Rotting</rotDrawMode>
<drawData>
<dataNorth>
<offset>(0, 0, 0)</offset>
</dataNorth>
<dataEast>
<offset>(0, 0, 0)</offset>
</dataEast>
<dataSouth>
<offset>(0, 0, 0)</offset>
</dataSouth>
<dataWest>
<offset>(0, 0, 0)</offset>
</dataWest>
<defaultData>
<layer>40</layer>
</defaultData>
</drawData>
</li>
</renderNodeProperties>
<stages>
<li>
<minSeverity>0</minSeverity>
<statOffsets>
<ArmorRating_Blunt>0.4</ArmorRating_Blunt>
<ArmorRating_Sharp>0.5</ArmorRating_Sharp>
</statOffsets>
</li>
</stages>
<comps>
@@ -849,11 +1083,13 @@
<li Class="HediffCompProperties_GiveAbility">
<abilityDefs>
<li>ARA_ShieldHead_Protector</li>
<li>ARA_ShieldHead_HiveBuilder</li>
</abilityDefs>
</li>
<li Class="HediffCompProperties_RemoveIfOtherHediff">
<hediffs>
<li>ARA_ShieldHead_Protector</li>
<li>ARA_ShieldHead_HiveBuilder</li>
</hediffs>
</li>
</comps>
@@ -925,11 +1161,41 @@
<isBad>false</isBad>
<scenarioCanAdd>false</scenarioCanAdd>
<maxSeverity>1.0</maxSeverity>
<renderNodeProperties>
<li>
<nodeClass>PawnRenderNode_AttachmentHead</nodeClass>
<workerClass>PawnRenderNodeWorker_FlipWhenCrawling</workerClass>
<texPath>ArachnaeSwarm/Things/ARA_HiveNode/Addons/ArachnaeNode_Race_Addons_ShieldBody</texPath>
<parentTagDef>Body</parentTagDef>
<useSkinShader>false</useSkinShader>
<useRottenColor>false</useRottenColor>
<rotDrawMode>Fresh, Rotting</rotDrawMode>
<drawData>
<dataNorth>
<offset>(0, 0, 0)</offset>
</dataNorth>
<dataEast>
<offset>(0, 0, 0)</offset>
</dataEast>
<dataSouth>
<offset>(0, 0, 0)</offset>
</dataSouth>
<dataWest>
<offset>(0, 0, 0)</offset>
</dataWest>
<defaultData>
<layer>800</layer>
</defaultData>
</drawData>
</li>
</renderNodeProperties>
<stages>
<li>
<minSeverity>0.01</minSeverity>
<minSeverity>0</minSeverity>
<statOffsets>
<MoveSpeed>1</MoveSpeed>
<ArmorRating_Blunt>0.4</ArmorRating_Blunt>
<ArmorRating_Sharp>0.5</ArmorRating_Sharp>
</statOffsets>
</li>
</stages>
@@ -941,6 +1207,116 @@
</li>
</comps>
</HediffDef>
<AbilityDef>
<defName>ARA_ShieldHead_HiveBuilder</defName>
<label>盾头种转换——营建大师</label>
<description>使盾头种发生内驱性进化,以防御能力为代价,使其获得更强大的甲壳素产出能力和建造技能。\n\n该进化过程不可逆</description>
<iconPath>ArachnaeSwarm/UI/Abilities/ARA_ShieldHead_HiveBuilder</iconPath>
<cooldownTicksRange>1800</cooldownTicksRange>
<hostile>false</hostile>
<groupAbility>true</groupAbility>
<displayGizmoWhileUndrafted>true</displayGizmoWhileUndrafted>
<disableGizmoWhileUndrafted>false</disableGizmoWhileUndrafted>
<aiCanUse>false</aiCanUse>
<ai_IsOffensive>true</ai_IsOffensive>
<targetRequired>false</targetRequired>
<jobDef>CastAbilityOnThing</jobDef>
<verbProperties>
<verbClass>Verb_CastAbility</verbClass>
<range>1</range>
<warmupTime>12</warmupTime>
<soundCast>AcidSpray_Resolve</soundCast>
<violent>false</violent>
<targetable>false</targetable>
<targetParams>
<canTargetSelf>True</canTargetSelf>
</targetParams>
</verbProperties>
<comps>
<li Class="CompProperties_AbilityGiveHediff">
<compClass>CompAbilityEffect_GiveHediff</compClass>
<hediffDef>ARA_ShieldHead_HiveBuilder</hediffDef>
<onlyApplyToSelf>True</onlyApplyToSelf>
<replaceExisting>true</replaceExisting>
<severity>1</severity>
</li>
<li Class="ArachnaeSwarm.CompProperties_AbilityAddExtraExp">
<skillChanges>
<li>
<skill>Construction</skill>
<passionGained>Major</passionGained>
<xpGainAmount>350000</xpGainAmount>
</li>
</skillChanges>
</li>
<li Class="ArachnaeSwarm.CompProperties_AbilityResearchPrereq">
<requiredResearch>ARA_Technology_3CON</requiredResearch>
<failMessage>需要科技 节点CON-3"建造者" 以解锁进化</failMessage>
</li>
</comps>
</AbilityDef>
<HediffDef>
<defName>ARA_ShieldHead_HiveBuilder</defName>
<label>亚种-营建种</label>
<description>这只阿拉克涅盾头种已经获得拔耀获得了强大的产出能力和建造能力。一只盾头种每天产出25份甲壳素。</description>
<hediffClass>HediffWithComps</hediffClass>
<defaultLabelColor>(0.6, 0.4, 0.8)</defaultLabelColor>
<isBad>false</isBad>
<scenarioCanAdd>false</scenarioCanAdd>
<maxSeverity>1.0</maxSeverity>
<stages>
<li>
<minSeverity>0</minSeverity>
</li>
</stages>
<comps>
<li Class="ArachnaeSwarm.MoharHediffs.HediffCompProperties_Spawner">
<!--
==================================================
基础设置 (Basic Settings)
==================================================
-->
<!-- [DEBUG] 如果为true则为此组件启用详细的调试日志记录。 -->
<debug>true</debug>
<!-- 要生成的物品的ThingDef。 -->
<thingToSpawn>ARA_Carapace</thingToSpawn>
<!-- 每次生成的基础物品数量。 -->
<spawnCount>25</spawnCount>
<!--
==================================================
生成周期 (Spawning Interval)
==================================================
-->
<!-- 下一次生成事件发生前的最少天数。 -->
<minDaysB4Next>1</minDaysB4Next>
<!-- 下一次生成事件发生前的最大天数。 -->
<maxDaysB4Next>1</maxDaysB4Next>
<randomGrace>0</randomGrace>
<!--
==================================================
与年龄相关的调整 (Age-Related Adjustments)
==================================================
-->
<!-- 如果为true生成数量将根据宿主的年龄进行调整。 -->
<ageWeightedQuantity>false</ageWeightedQuantity>
<!-- 如果为true且ageWeightedQuantity为true则随着宿主年龄增长生成数量变多。 -->
<olderBiggerQuantity>true</olderBiggerQuantity>
<!-- 如果为true且ageWeightedQuantity为true则随年龄增长的数量缩放将是指数性的而非线性的。 -->
<exponentialQuantity>true</exponentialQuantity>
<!-- 指数级数量缩放的最大乘数,以防止出现荒谬的数字。 -->
<exponentialRatioLimit>20</exponentialRatioLimit>
<!--
==================================================
生成条件 (Spawning Conditions)
==================================================
-->
<!-- 如果为true当宿主Pawn饥饿时生成将暂停。 -->
<hungerRelative>true</hungerRelative>
<!-- 如果为true当宿主Pawn受伤时生成将暂停。 -->
<healthRelative>false</healthRelative>
</li>
</comps>
</HediffDef>
<!-- 空天种 -->
<HediffDef>

View File

@@ -22,7 +22,7 @@
</categories>
</li>
</backstoryFilters>
<techLevel>Medieval</techLevel>
<techLevel>Industrial</techLevel>
<arrivalLayerWhitelist>
<li>Surface</li>
<!-- <li MayRequire="Ludeon.RimWorld.Odyssey">Orbit</li> -->
@@ -30,12 +30,12 @@
<colorSpectrum>
<li>(0.6, 0.5, 0.9)</li>
</colorSpectrum>
<!-- <arrivalModeWhitelist>
<arrivalModeWhitelist>
<li>EdgeDrop</li>
<li>EdgeDropGroups</li>
<li>CenterDrop</li>
<!-- <li>CenterDrop</li> -->
<li>RandomDrop</li>
</arrivalModeWhitelist> -->
</arrivalModeWhitelist>
<raidCommonalityFromPointsCurve>
<points>
<li>(300, 0)</li>
@@ -47,11 +47,24 @@
</raidCommonalityFromPointsCurve>
<pawnGroupMakers>
<li>
<!-- Normal fights, standard mix -->
<commonality>100</commonality>
<kindDef>Combat</kindDef>
<options>
<ARA_Raid_Shooter>7</ARA_Raid_Shooter>
<ARA_Raid_Assault>3</ARA_Raid_Assault>
<ArachnaeNode_Race_Praetorian_Enermy>3</ArachnaeNode_Race_Praetorian_Enermy>
</options>
</li>
<li>
<commonality>80</commonality>
<kindDef>Combat</kindDef>
<options>
<ArachnaeNode_Race_ShieldHead_Enermy>3</ArachnaeNode_Race_ShieldHead_Enermy>
</options>
</li>
<li>
<commonality>80</commonality>
<kindDef>Combat</kindDef>
<options>
<ArachnaeNode_Race_Fighter_Enermy>5</ArachnaeNode_Race_Fighter_Enermy>
</options>
</li>
<li>
@@ -76,7 +89,7 @@
</raidLootValueFromPointsCurve>
<humanlikeFaction>true</humanlikeFaction>
<hidden>true</hidden>
<!-- <autoFlee>false</autoFlee> -->
<autoFlee>false</autoFlee>
<canUseAvoidGrid>false</canUseAvoidGrid>
<apparelStuffFilter>
<thingDefs>
@@ -97,8 +110,8 @@
<allowedArrivalTemperatureRange>-2000~2000</allowedArrivalTemperatureRange>
<maxConfigurableAtWorldCreation>1</maxConfigurableAtWorldCreation>
<configurationListOrderPriority>900</configurationListOrderPriority>
<dropPodActive>ActiveDropPodMechanoid</dropPodActive>
<dropPodIncoming>DropPodIncomingMechanoidRapid</dropPodIncoming>
<dropPodActive>ARA_ActiveDropPod</dropPodActive>
<dropPodIncoming>ARA_DropPodIncoming</dropPodIncoming>
<disallowedRaidAgeRestrictions>
<li MayRequire="Ludeon.RimWorld.Biotech">Children</li>
</disallowedRaidAgeRestrictions>

View File

@@ -473,7 +473,7 @@
<HediffDef>
<defName>ARA_CryoShock</defName>
<label>急速冷却</label>
<description>目标正处于急冻状态。这种状态将导致目标身体结构极度脆弱。当此效果加深时,足以摧毁其身体部位的“冷冻伤害阈值将会显著降低</description>
<description>目标正处于急冻状态。这种状态将导致目标身体结构极度脆弱。当此效果加深时,其身体部位有可能会被冷冻伤害直接摧毁</description>
<defaultLabelColor>(1, 1, 0.8)</defaultLabelColor>
<hediffClass>ArachnaeSwarm.HediffCurseFlame</hediffClass>
<comps>
@@ -493,11 +493,11 @@
</injuryProps>
<stages>
<li>
<label>轻微</label>
<label>1/8</label>
<becomeVisible>true</becomeVisible>
</li>
<li>
<label>轻微</label>
<label>2/8</label>
<minSeverity>0.2</minSeverity>
<statOffsets>
<ComfyTemperatureMin>40</ComfyTemperatureMin>
@@ -513,7 +513,7 @@
</capMods>
</li>
<li>
<label>中等</label>
<label>3/8</label>
<minSeverity>0.35</minSeverity>
<statOffsets>
<ComfyTemperatureMin>80</ComfyTemperatureMin>
@@ -529,7 +529,7 @@
</capMods>
</li>
<li>
<label>严重</label>
<label>4/8</label>
<minSeverity>0.5</minSeverity>
<statOffsets>
<ComfyTemperatureMin>120</ComfyTemperatureMin>
@@ -545,7 +545,7 @@
</capMods>
</li>
<li>
<label>极度</label>
<label>5/8</label>
<minSeverity>0.65</minSeverity>
<statOffsets>
<ComfyTemperatureMin>160</ComfyTemperatureMin>
@@ -561,7 +561,7 @@
</capMods>
</li>
<li>
<label>完全</label>
<label>6/8</label>
<minSeverity>0.85</minSeverity>
<statOffsets>
<ComfyTemperatureMin>200</ComfyTemperatureMin>
@@ -576,6 +576,38 @@
</li>
</capMods>
</li>
<li>
<label>7/8</label>
<minSeverity>1.25</minSeverity>
<statOffsets>
<ComfyTemperatureMin>500</ComfyTemperatureMin>
</statOffsets>
<statFactors>
<ARA_IcezKillingFactor>0.01</ARA_IcezKillingFactor>
</statFactors>
<capMods>
<li>
<capacity>Consciousness</capacity>
<offset>-0.50</offset>
</li>
</capMods>
</li>
<li>
<label>8/8</label>
<minSeverity>2.5</minSeverity>
<statOffsets>
<ComfyTemperatureMin>1000</ComfyTemperatureMin>
</statOffsets>
<statFactors>
<ARA_IcezKillingFactor>0.001</ARA_IcezKillingFactor>
</statFactors>
<capMods>
<li>
<capacity>Consciousness</capacity>
<offset>-0.50</offset>
</li>
</capMods>
</li>
</stages>
</HediffDef>
</Defs>

View File

@@ -163,6 +163,17 @@
<li>
<naturalHealingFactor>0</naturalHealingFactor>
<painFactor>0</painFactor>
<foodPoisoningChanceFactor>0</foodPoisoningChanceFactor>
<disablesNeeds>
<li>Mood</li>
<li>Joy</li>
<li>Beauty</li>
<li>Comfort</li>
<li>Outdoors</li>
<li>Indoors</li>
<li>DrugDesire</li>
<li>RoomSize</li>
</disablesNeeds>
<statFactors>
<MeleeCooldownFactor>1.5</MeleeCooldownFactor>
<PsychicSensitivity>0</PsychicSensitivity>

View File

@@ -1,205 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<!-- 自定义袭击定义defname是硬编码指定不能更改 -->
<ArachnaeSwarm.CustomRaidDef>
<defName>ARA_SpecialAttack</defName>
<factionDef>ARA_Hostile_Hive</factionDef>
<pointWavePools>
<li>
<minPoints>0</minPoints>
<maxPoints>800</maxPoints>
<wavePool>ARA_WavePool_Stage1</wavePool>
</li>
</pointWavePools>
<baseRaidNembers>3</baseRaidNembers>
<pointsGrowthPerWave>
<growthType>Linear</growthType>
<linearGrowth>1.2</linearGrowth>
</pointsGrowthPerWave>
</ArachnaeSwarm.CustomRaidDef>
<!-- 第一阶段波次池 -->
<ArachnaeSwarm.RaidWavePoolDef>
<defName>ARA_WavePool_Stage1</defName>
<waves>
<li>ARA_Wave_Scout_Patrol</li>
<li>ARA_Wave_Assault_Team</li>
<li>ARA_Wave_Acid_Swarm</li>
<li>ARA_Wave_Heavy_Defense</li>
<li>ARA_Wave_Mixed_Forces</li>
</waves>
<selectionWeights>
<li>
<key>ARA_Wave_Scout_Patrol</key>
<value>0.25</value>
</li>
<li>
<key>ARA_Wave_Assault_Team</key>
<value>0.25</value>
</li>
<li>
<key>ARA_Wave_Acid_Swarm</key>
<value>0.20</value>
</li>
<li>
<key>ARA_Wave_Heavy_Defense</key>
<value>0.15</value>
</li>
<li>
<key>ARA_Wave_Mixed_Forces</key>
<value>0.15</value>
</li>
</selectionWeights>
</ArachnaeSwarm.RaidWavePoolDef>
<!-- 波次1: 侦察巡逻队 -->
<ArachnaeSwarm.RaidWaveDef>
<defName>ARA_Wave_Scout_Patrol</defName>
<label>侦察巡逻队</label>
<description>一支小型侦察队伍,主要由远程单位组成,进行骚扰射击</description>
<possibleArrivalModes>
<li>CenterDrop</li>
</possibleArrivalModes>
<pawnComposition>
<li>
<pawnKind>ARA_Raid_Shooter</pawnKind>
<ratio>0.7</ratio>
<minCount>2</minCount>
<maxCount>6</maxCount>
<DefaultUnit>true</DefaultUnit>
</li>
<li>
<pawnKind>ARA_Raid_Assault</pawnKind>
<ratio>0.3</ratio>
<minCount>1</minCount>
<maxCount>3</maxCount>
</li>
</pawnComposition>
</ArachnaeSwarm.RaidWaveDef>
<!-- 波次2: 突击小队 -->
<ArachnaeSwarm.RaidWaveDef>
<defName>ARA_Wave_Assault_Team</defName>
<label>突击小队</label>
<description>以近战单位为主的快速突击队伍,擅长冲锋陷阵</description>
<possibleArrivalModes>
<li>CenterDrop</li>
</possibleArrivalModes>
<pawnComposition>
<li>
<pawnKind>ARA_Raid_Assault</pawnKind>
<ratio>0.6</ratio>
<minCount>3</minCount>
<maxCount>8</maxCount>
<DefaultUnit>true</DefaultUnit>
</li>
<li>
<pawnKind>ARA_Raid_Shooter</pawnKind>
<ratio>0.4</ratio>
<minCount>2</minCount>
<maxCount>4</maxCount>
</li>
</pawnComposition>
</ArachnaeSwarm.RaidWaveDef>
<!-- 波次3: 酸液虫群 -->
<ArachnaeSwarm.RaidWaveDef>
<defName>ARA_Wave_Acid_Swarm</defName>
<label>酸液虫群</label>
<description>大量酸噬种辅虫组成的虫海战术,数量庞大但个体脆弱</description>
<possibleArrivalModes>
<li>CenterDrop</li>
</possibleArrivalModes>
<pawnComposition>
<li>
<pawnKind>ARA_Raid_AcidSwarm</pawnKind>
<ratio>0.8</ratio>
<minCount>8</minCount>
<maxCount>20</maxCount>
<DefaultUnit>true</DefaultUnit>
</li>
<li>
<pawnKind>ARA_Raid_Assault</pawnKind>
<ratio>0.2</ratio>
<minCount>2</minCount>
<maxCount>5</maxCount>
</li>
</pawnComposition>
</ArachnaeSwarm.RaidWaveDef>
<!-- 波次4: 重装防御 -->
<ArachnaeSwarm.RaidWaveDef>
<defName>ARA_Wave_Heavy_Defense</defName>
<label>重装防御队</label>
<description>以盾头种为主的防御型队伍,移动缓慢但防御力强</description>
<possibleArrivalModes>
<li>CenterDrop</li>
</possibleArrivalModes>
<pawnComposition>
<li>
<pawnKind>ARA_Raid_Heavy</pawnKind>
<ratio>0.5</ratio>
<minCount>2</minCount>
<maxCount>6</maxCount>
<DefaultUnit>true</DefaultUnit>
</li>
<li>
<pawnKind>ARA_Raid_Shooter</pawnKind>
<ratio>0.3</ratio>
<minCount>2</minCount>
<maxCount>4</maxCount>
</li>
<li>
<pawnKind>ARA_Raid_Acidling</pawnKind>
<ratio>0.2</ratio>
<minCount>3</minCount>
<maxCount>8</maxCount>
</li>
</pawnComposition>
</ArachnaeSwarm.RaidWaveDef>
<!-- 波次5: 混合部队 -->
<ArachnaeSwarm.RaidWaveDef>
<defName>ARA_Wave_Mixed_Forces</defName>
<label>混合部队</label>
<description>均衡配置的混合部队,包含各种单位类型</description>
<possibleArrivalModes>
<li>CenterDrop</li>
</possibleArrivalModes>
<pawnComposition>
<li>
<pawnKind>ARA_Raid_Assault</pawnKind>
<ratio>0.3</ratio>
<minCount>2</minCount>
<maxCount>5</maxCount>
</li>
<li>
<pawnKind>ARA_Raid_Shooter</pawnKind>
<ratio>0.3</ratio>
<minCount>2</minCount>
<maxCount>5</maxCount>
</li>
<li>
<pawnKind>ARA_Raid_Heavy</pawnKind>
<ratio>0.2</ratio>
<minCount>1</minCount>
<maxCount>3</maxCount>
</li>
<li>
<pawnKind>ARA_Raid_AcidSwarm</pawnKind>
<ratio>0.2</ratio>
<minCount>3</minCount>
<maxCount>6</maxCount>
<DefaultUnit>true</DefaultUnit>
</li>
</pawnComposition>
</ArachnaeSwarm.RaidWaveDef>
<!-- 事件定义 -->
<IncidentDef>
<defName>ARA_Raid_Incident</defName>
<label>阿拉克涅虫群袭击</label>
<workerClass>ArachnaeSwarm.IncidentWorker_CustomRaid</workerClass>
<category>Special</category>
<minRefireDays>5</minRefireDays>
<baseChance>0</baseChance>
<targetTags>
<li>Map_PlayerHome</li>
</targetTags>
</IncidentDef>
</Defs>

View File

@@ -1,144 +1,85 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<!-- 基础袭击者类型 -->
<PawnKindDef Name="ARA_RaidBase" Abstract="True">
<combatPower>150</combatPower>
<PawnKindDef ParentName="ArachnaeNode_Race_Fighter">
<defName>ArachnaeNode_Race_Fighter_Enermy</defName>
<isFighter>true</isFighter>
<trader>false</trader>
<chemicalAddictionChance>0</chemicalAddictionChance>
<apparelIgnoreSeasons>true</apparelIgnoreSeasons>
<forceNormalGearQuality>true</forceNormalGearQuality>
<initialWillRange>99~99</initialWillRange>
<initialResistanceRange>99~99</initialResistanceRange>
<overrideDeathOnDownedChance>1</overrideDeathOnDownedChance>
<forceDeathOnDowned>true</forceDeathOnDowned>
<maxGenerationAge>2</maxGenerationAge>
<minGenerationAge>1</minGenerationAge>
<canBeScattered>false</canBeScattered>
<defaultFactionType>ARA_Hostile_Hive</defaultFactionType>
<techHediffsMoney>0</techHediffsMoney>
<requiredWorkTags>
<li>Violent</li>
</requiredWorkTags>
<moveSpeedFactorByTerrainTag>
<li>
<key>ARA_Creep</key>
<value>1.5</value>
</li>
</moveSpeedFactorByTerrainTag>
</PawnKindDef>
<!-- 传统类:以毒针、酸液和近战战士虫组成阵线,辅助以小辅虫 -->
<!-- 近战突击单位 -->
<PawnKindDef ParentName="ARA_RaidBase">
<defName>ARA_Raid_Assault</defName>
<label>阿拉克涅突击者</label>
<race>ArachnaeNode_Race_Fighter</race>
<combatPower>200</combatPower>
<weaponTags>
<li>ARA_Armed_Organ_Melee</li>
<li>ARA_Armed_Organ_T1</li>
</weaponTags>
<apparelTags>
<li>ARA_Inner</li>
<li>ARA_Clothes</li>
</apparelTags>
<apparelMoney>200</apparelMoney>
<weaponMoney>50000</weaponMoney>
<abilities>
<li>ARA_BaseRace_Acid_Launcher</li>
</abilities>
<apparelMoney>1000</apparelMoney>
<weaponMoney>5000</weaponMoney>
<combatPower>250</combatPower>
</PawnKindDef>
<!-- 远程射手单位 -->
<PawnKindDef ParentName="ARA_RaidBase">
<defName>ARA_Raid_Shooter</defName>
<label>阿拉克涅射手</label>
<race>ArachnaeNode_Race_Fighter</race>
<combatPower>180</combatPower>
<PawnKindDef ParentName="ArachnaeNode_Race_ShieldHead">
<defName>ArachnaeNode_Race_ShieldHead_Enermy</defName>
<isFighter>true</isFighter>
<trader>false</trader>
<chemicalAddictionChance>0</chemicalAddictionChance>
<apparelIgnoreSeasons>true</apparelIgnoreSeasons>
<forceNormalGearQuality>true</forceNormalGearQuality>
<overrideDeathOnDownedChance>1</overrideDeathOnDownedChance>
<forceDeathOnDowned>true</forceDeathOnDowned>
<canBeScattered>false</canBeScattered>
<defaultFactionType>ARA_Hostile_Hive</defaultFactionType>
<weaponTags>
<li>ARA_Armed_Organ_Small_Ranged_Needle</li>
<li>ARA_Armed_Organ_Small_Ranged_Acid</li>
<li>ARA_Armed_Organ_T1</li>
</weaponTags>
<apparelTags>
<li>ARA_Inner</li>
<li>ARA_Clothes</li>
</apparelTags>
<apparelMoney>150</apparelMoney>
<weaponMoney>50000</weaponMoney>
<techHediffsMoney>0</techHediffsMoney>
<abilities>
<li>ARA_BaseRace_Acid_Launcher</li>
</abilities>
<apparelMoney>1000</apparelMoney>
<weaponMoney>5000</weaponMoney>
<combatPower>330</combatPower>
</PawnKindDef>
<PawnKindDef ParentName="ArachnaeNode_Race_Praetorian">
<defName>ArachnaeNode_Race_Praetorian_Enermy</defName>
<isFighter>true</isFighter>
<trader>false</trader>
<chemicalAddictionChance>0</chemicalAddictionChance>
<apparelIgnoreSeasons>true</apparelIgnoreSeasons>
<forceNormalGearQuality>true</forceNormalGearQuality>
<overrideDeathOnDownedChance>1</overrideDeathOnDownedChance>
<forceDeathOnDowned>true</forceDeathOnDowned>
<canBeScattered>false</canBeScattered>
<defaultFactionType>ARA_Hostile_Hive</defaultFactionType>
<weaponTags>
<li>ARA_Armed_Organ_T3</li>
</weaponTags>
<apparelTags>
<li>ARA_Inner</li>
<li>ARA_Clothes</li>
</apparelTags>
<apparelMoney>1000</apparelMoney>
<weaponMoney>5000</weaponMoney>
<combatPower>700</combatPower>
</PawnKindDef>
<!-- 辅虫群单位 -->
<PawnKindDef ParentName="ARA_RaidBase">
<defName>ARA_Raid_AcidSwarm</defName>
<label>阿拉克涅酸噬群</label>
<combatPower>80</combatPower>
<apparelMoney>0</apparelMoney>
<weaponMoney>0</weaponMoney>
<techHediffsMoney>0</techHediffsMoney>
<race>ArachnaeBase_Race_Acidcut</race>
<lifeStages>
<li>
<bodyGraphicData>
<texPath>ArachnaeSwarm/Things/ARA_Acidcut/Bodies/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>
</PawnKindDef>
<!-- 重装类:远近盾头混搭,辅以自杀辅虫和攻击辅虫 -->
<!-- 重型单位,远近混搭 -->
<PawnKindDef ParentName="ARA_RaidBase">
<defName>ARA_Raid_Heavy</defName>
<label>阿拉克涅重装兵</label>
<race>ArachnaeNode_Race_ShieldHead</race>
<combatPower>350</combatPower>
<weaponTags>
<li>ARA_Armed_Organ_Melee</li>
<li>ARA_Armed_Organ_Small_Ranged_Needle</li>
<li>ARA_Armed_Organ_Small_Ranged_Acid</li>
</weaponTags>
<apparelTags>
<li>ARA_Inner</li>
<li>ARA_Clothes</li>
</apparelTags>
<apparelMoney>400</apparelMoney>
<weaponMoney>1200</weaponMoney>
<techHediffsMoney>0</techHediffsMoney>
</PawnKindDef>
<!-- 自杀辅虫群单位 -->
<PawnKindDef ParentName="ARA_InsectKindBase">
<defName>ARA_Raid_Acidling</defName>
<label>阿拉克涅爆裂群</label>
<race>ArachnaeBase_Race_Acidling</race>
<PawnKindDef ParentName="ArachnaeBase_Race_Acidcut">
<defName>ArachnaeBase_Race_Acidcut_Enermy</defName>
<combatPower>50</combatPower>
<apparelMoney>0</apparelMoney>
<weaponMoney>0</weaponMoney>
<techHediffsMoney>0</techHediffsMoney>
<lifeStages>
<li>
<bodyGraphicData>
<texPath>ArachnaeSwarm/Things/ARA_Acidling/Bodies/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>
</PawnKindDef>
<PawnKindDef ParentName="ArachnaeBase_Race_Acidling">
<defName>ArachnaeBase_Race_Acidling_Enermy</defName>
<combatPower>150</combatPower>
<apparelMoney>0</apparelMoney>
<weaponMoney>0</weaponMoney>
<techHediffsMoney>0</techHediffsMoney>
</PawnKindDef>
</Defs>

View File

@@ -217,7 +217,7 @@
</apparelTags>
<apparelMoney>0</apparelMoney>
</PawnKindDef>
<PawnKindDef ParentName="ArachnaeNodeABasePawnKind">
<PawnKindDef Name="ArachnaeNode_Race_ShieldHead" ParentName="ArachnaeNodeABasePawnKind">
<defName>ArachnaeNode_Race_ShieldHead</defName>
<label>阿拉克涅盾头种</label>
<race>ArachnaeNode_Race_ShieldHead</race>
@@ -282,7 +282,7 @@
</apparelTags>
<apparelMoney>0</apparelMoney>
</PawnKindDef>
<PawnKindDef ParentName="ArachnaeNodeABasePawnKind">
<PawnKindDef Name="ArachnaeNode_Race_Fighter" ParentName="ArachnaeNodeABasePawnKind">
<defName>ArachnaeNode_Race_Fighter</defName>
<label>阿拉克涅战士种</label>
<race>ArachnaeNode_Race_Fighter</race>
@@ -390,7 +390,7 @@
</apparelTags>
<apparelMoney>0</apparelMoney>
</PawnKindDef>
<PawnKindDef ParentName="ArachnaeNodeABasePawnKind">
<PawnKindDef Name="ArachnaeNode_Race_Praetorian" ParentName="ArachnaeNodeABasePawnKind">
<defName>ArachnaeNode_Race_Praetorian</defName>
<label>阿拉克涅禁卫种</label>
<race>ArachnaeNode_Race_Praetorian</race>
@@ -520,7 +520,7 @@
</li>
</lifeStages>
</PawnKindDef>
<PawnKindDef ParentName="ARA_InsectKindBase">
<PawnKindDef Name="ArachnaeBase_Race_Acidcut" ParentName="ARA_InsectKindBase">
<defName>ArachnaeBase_Race_Acidcut</defName>
<label>阿拉克涅酸噬种</label>
<race>ArachnaeBase_Race_Acidcut</race>
@@ -541,7 +541,7 @@
</li>
</lifeStages>
</PawnKindDef>
<PawnKindDef ParentName="ARA_InsectKindBase">
<PawnKindDef Name="ArachnaeBase_Race_Acidling" ParentName="ARA_InsectKindBase">
<defName>ArachnaeBase_Race_Acidling</defName>
<label>阿拉克涅爆裂种</label>
<race>ArachnaeBase_Race_Acidling</race>

View File

@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<PawnsArrivalModeDef>
<defName>ARA_EdgeDropGroups</defName>
<workerClass>PawnsArrivalModeWorker_EdgeDropGroups</workerClass>
<layerWhitelist>
<li>Surface</li>
<li MayRequire="Ludeon.RimWorld.Odyssey">Orbit</li>
</layerWhitelist>
<minSpaceSelectionWeight>0.1</minSpaceSelectionWeight>
<selectionWeightCurve>
<points>
<li>(0, 1)</li>
<li>(99999, 1)</li>
</points>
</selectionWeightCurve>
<selectionWeightCurvesPerFaction>
<li>
<faction>ARA_Hostile_Hive</faction>
<selectionWeightPerPointsCurve>
<points>
<li>(0, 1)</li>
<li>(99999, 1)</li>
</points>
</selectionWeightPerPointsCurve>
</li>
</selectionWeightCurvesPerFaction>
<!-- <pointsFactorCurve>
<points>
<li>0, 0.9</li>
</points>
</pointsFactorCurve> -->
<minTechLevel>Medieval</minTechLevel>
<textEnemy>一些来自 {1} 的 {0} 正在通过气囊种空降到附近。</textEnemy>
<textFriendly>Several separate groups of friendly {0} from {1} have arrived in transport pods nearby.</textFriendly>
<textWillArrive>Several separate groups of {0_pawnsPluralDef} will arrive in transport pods.</textWillArrive>
</PawnsArrivalModeDef>
</Defs>

View File

@@ -608,7 +608,7 @@
<ResearchProjectDef ParentName="ARA_techBase_Needtechprint">
<defName>ARA_Technology_1MED</defName>
<label>节点MED-1"疗愈种"</label>
<description>允许蜜罐种进行定向进化,以强化其自身的医疗能力并解锁孵化医药茧的技能。\n\n阿拉克涅虫群所有需要蓝图的科技其蓝图只能通过女皇种的基因试验卵获取。</description>
<description>允许蜜罐种进行定向进化,抛弃生产虫蜜的能力,以强化其自身的医疗能力并解锁孵化医药茧的技能。\n\n阿拉克涅虫群所有需要蓝图的科技其蓝图只能通过女皇种的基因试验卵获取。</description>
<baseCost>1200</baseCost>
<researchViewX>5.50</researchViewX>
<researchViewY>2.10</researchViewY>
@@ -660,6 +660,30 @@
<li>ARA_Technology_2WMT</li>
</prerequisites>
</ResearchProjectDef>
<ResearchProjectDef ParentName="ARA_techBase_Needtechprint">
<defName>ARA_Technology_3CON</defName>
<label>节点CON-3"建造者"</label>
<description>允许盾头种进行定向进化,抛弃其防御能力以换取更强大的甲壳素产出能力和建造建筑的能力。\n\n阿拉克涅虫群所有需要蓝图的科技其蓝图只能通过女皇种的基因试验卵获取。</description>
<baseCost>300</baseCost>
<researchViewX>2.00</researchViewX>
<researchViewY>2.70</researchViewY>
<requiredResearchBuilding>ARA_ResearchBench</requiredResearchBuilding>
<prerequisites>
<li>ARA_Base_Technology</li>
</prerequisites>
</ResearchProjectDef>
<ResearchProjectDef ParentName="ARA_techBase_Needtechprint">
<defName>ARA_Technology_8FEL</defName>
<label>节点FEL-8"爆燃腔"</label>
<description>允许蜜罐种进行定向进化,抛弃生产虫蜜的能力,以获得防御力增强、生产化合燃料和喷射火焰的能力。\n\n阿拉克涅虫群所有需要蓝图的科技其蓝图只能通过女皇种的基因试验卵获取。</description>
<baseCost>300</baseCost>
<researchViewX>2.00</researchViewX>
<researchViewY>2.10</researchViewY>
<requiredResearchBuilding>ARA_ResearchBench</requiredResearchBuilding>
<prerequisites>
<li>ARA_Base_Technology</li>
</prerequisites>
</ResearchProjectDef>
<!-- 改造发展 -->
<ResearchProjectDef ParentName="ARA_techBase">
<defName>ARA_Technology_1EVO</defName>

View File

@@ -4,6 +4,7 @@
<alienRace>
<!-- 核心设置 -->
<generalSettings>
<additionalTraits>2~3</additionalTraits>
<!-- 男性生成几率 -->
<maleGenderProbability>0</maleGenderProbability>
<!-- 无视年龄疾病 -->
@@ -403,15 +404,10 @@
<blackTraitList>
<li>BodyPurist</li>
<li>Cannibal</li>
<li>CreepyBreathing</li>
<li>DislikesWomen</li>
<li>Gourmand</li>
<li>QuickSleeper</li>
<li>Wimp</li>
<li>Beauty</li>
<li>DrugDesire</li>
<li>Immunity</li>
<li>PsychicSensitivity</li>
</blackTraitList>
</raceRestriction>
<!-- 想法设置 -->
@@ -624,6 +620,8 @@
</tools>
<recipes Inherit="False">
<li>ARA_CureBloodRot</li>
<li>ARA_CureAcid</li>
<li>RemovePorcupineQuill</li>
<li>SurgicalInspection</li>
<li>ARA_Surgery_Install_Plasteel</li>
@@ -723,7 +721,7 @@
<!-- 各种零件定义 -->
<alienPartGenerator>
<!-- 额外身体部件 -->
<bodyAddons>
<!-- <bodyAddons>
<li>
<path>ArachnaeSwarm/Things/ARA_HiveNode/Addons/ArachnaeNode_Race_Myrmecocystus_Addons_Stomach</path>
<inFrontOfBody>false</inFrontOfBody>
@@ -736,7 +734,7 @@
</Apparel>
</conditions>
</li>
</bodyAddons>
</bodyAddons> -->
</alienPartGenerator>
</generalSettings>
<!-- 种族的允许和禁止特化设置 -->
@@ -886,7 +884,7 @@
</Apparel>
</conditions>
</li>
<li>
<!-- <li>
<path>ArachnaeSwarm/Things/ARA_HiveNode/Addons/ArachnaeNode_Race_Addons_ShieldBody</path>
<offsets>
<south>
@@ -912,7 +910,7 @@
</hiddenUnderApparelTag>
</Apparel>
</conditions>
</li>
</li> -->
</bodyAddons>
</alienPartGenerator>
</generalSettings>
@@ -949,8 +947,8 @@
<!-- <TradePriceImprovement>0.5</TradePriceImprovement> -->
<!-- 自带的甲壳可以防御外部攻击 -->
<ArmorRating_Blunt>0.5</ArmorRating_Blunt>
<ArmorRating_Sharp>0.75</ArmorRating_Sharp>
<ArmorRating_Blunt>0.1</ArmorRating_Blunt>
<ArmorRating_Sharp>0.25</ArmorRating_Sharp>
<ArmorRating_Heat>0.2</ArmorRating_Heat>
</statBases>
@@ -1942,6 +1940,7 @@
<onlyEatRaceRestrictedFood>true</onlyEatRaceRestrictedFood>
<!-- 武器列表 -->
<weaponList>
<li>ARA_RW_Large_Arc_Gun</li>
<li>ARA_RW_Acid_Mortar</li>
<li>ARA_RW_Basic_SniperCannon_Gun</li>
<li>ARA_RW_Basic_FireSpewer_Gun</li>

View File

@@ -713,6 +713,8 @@
<recipes Inherit="False">
<li>RemovePorcupineQuill</li>
<li>ARA_CureBloodRot</li>
<li>ARA_CureAcid</li>
</recipes>
<comps>

View File

@@ -20,8 +20,9 @@
<castEdgeShadows>true</castEdgeShadows>
<fillPercent>0.5</fillPercent>
<canOverlapZones>false</canOverlapZones>
<uiIconScale>0.5</uiIconScale>
<size>(1,1)</size>
<!-- <designationCategory>Misc</designationCategory> -->
<designationCategory>ARA_Buildings</designationCategory>
<researchPrerequisites>
<li>ARA_Technology_2SYM</li>
</researchPrerequisites>
@@ -111,7 +112,7 @@
<texPath>ArachnaeSwarm/Building/ARA_Building_SpiderOne_south</texPath>
</graphicData>
<apparel>
<tags>
<tags Inherit="False">
<li>ARA_PowerArmor</li>
</tags>
<bodyPartGroups>

View File

@@ -2294,7 +2294,7 @@
<explosionRadius>1.5</explosionRadius>
<explosionDamageDef>ARA_Damage_Freeze</explosionDamageDef>
<explosionDamage>5</explosionDamage>
<explosionSound>Explosion_Stun</explosionSound>
<!-- <explosionSound>Explosion_Stun</explosionSound> -->
<chanceToStartFire>0</chanceToStartFire>
</li>
</verbs>

View File

@@ -373,10 +373,10 @@
<graphicClass>Graphic_Single</graphicClass>
</graphicData>
<statBases>
<AccuracyTouch>0.60</AccuracyTouch>
<AccuracyShort>0.70</AccuracyShort>
<AccuracyMedium>0.65</AccuracyMedium>
<AccuracyLong>0.55</AccuracyLong>
<AccuracyTouch>0.4</AccuracyTouch>
<AccuracyShort>0.7</AccuracyShort>
<AccuracyMedium>0.86</AccuracyMedium>
<AccuracyLong>0.9</AccuracyLong>
<RangedWeapon_Cooldown>2.2</RangedWeapon_Cooldown>
</statBases>
<verbs>

View File

@@ -10,7 +10,11 @@
<ARA_BindDrone_NoDroneHediff>目标 {0} 不是阿拉克涅的督虫,或不需要链接。</ARA_BindDrone_NoDroneHediff>
<ARA_BindDrone_AlreadyBound>目标 {0} 已绑定到 {1}。</ARA_BindDrone_AlreadyBound>
<ARA_BindDrone_NoMasterHediff>施法者 {0} 不是阿拉克涅的女皇种。</ARA_BindDrone_NoMasterHediff>
<!-- 在你的语言文件中添加 -->
<ARA_BindDrone_ConversionSuccess>成功将 {0} 转换为我方子个体并绑定到 {1}</ARA_BindDrone_ConversionSuccess>
<ARA_BindDrone_ConversionFailure>转换 {0} 成功,但绑定到 {1} 失败</ARA_BindDrone_ConversionFailure>
<ARA_BindDrone_NoMasterForConversion>{0} 不是阿拉克涅的女皇种</ARA_BindDrone_NoMasterForConversion>
<!-- Possession Ability Keys -->
<ARA_MustBeHumanlike>目标必须是类人生物。</ARA_MustBeHumanlike>
<ARA_AlreadyPossessed>{0} 已被寄生。</ARA_AlreadyPossessed>

View File

@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<Patch>
<Operation Class="PatchOperationFindMod">
<mods>
<li>Search and Destroy (Continued)</li>
</mods>
<match Class="PatchOperationInsert">
<xpath>Defs/ThinkTreeDef[defName = "ARA_Humanlike"]/thinkRoot[@Class ="ThinkNode_Priority"]/subNodes/li[@Class="ThinkNode_ConditionalColonist"]</xpath> <!--Priority
is important here, hence the insert after this specific subNode-->
<value>
<!-- Do search and destroy instead of waiting -->
<li Class="SearchAndDestroy.ThinkNode_ConditionalSearchAndDestroy">
<subNodes>
<li Class="ThinkNode_Priority">
<subNodes>
<!-- <li Class="JobGiver_MoveToStandable"/> -->
<li Class="SearchAndDestroy.JobGiver_AIFightEnemiesShortExp">
<targetAcquireRadius>200</targetAcquireRadius>
<targetKeepRadius>72</targetKeepRadius>
</li>
<li Class="SearchAndDestroy.JobGiver_GoWithinRangeOfHostile" />
</subNodes>
</li>
</subNodes>
</li>
</value>
</match>
</Operation>
</Patch>

10
1.6/1.6/Patches/Patch.xml Normal file
View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<Patch>
<Operation Class="PatchOperationAdd">
<xpath>/Defs/ThingDef[@Name="Human"]/recipes</xpath>
<value>
<li>ARA_CureAcid</li>
<li>ARA_CureBloodRot</li>
</value>
</Operation>
</Patch>

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@@ -2,6 +2,22 @@
"Version": 1,
"WorkspaceRootPath": "E:\\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\\hediffs\\ara_hivemind\\hediff_hivemindmaster.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:hediffs\\ara_hivemind\\hediff_hivemindmaster.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_hivemind\\hediff_hiveminddrone.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:hediffs\\ara_hivemind\\hediff_hiveminddrone.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_hivemind\\compabilityeffect_binddrone.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:hediffs\\ara_hivemind\\compabilityeffect_binddrone.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_hivemind\\compproperties_abilitybinddrone.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:hediffs\\ara_hivemind\\compproperties_abilitybinddrone.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\\verbs\\verb_shootarc.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:verbs\\verb_shootarc.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
@@ -14,21 +30,73 @@
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 1,
"SelectedChildIndex": 2,
"Children": [
{
"$type": "Bookmark",
"Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}"
},
{
"$type": "Document",
"DocumentIndex": 1,
"Title": "Hediff_HiveMindDrone.cs",
"DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_HiveMind\\Hediff_HiveMindDrone.cs",
"RelativeDocumentMoniker": "Hediffs\\ARA_HiveMind\\Hediff_HiveMindDrone.cs",
"ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_HiveMind\\Hediff_HiveMindDrone.cs",
"RelativeToolTip": "Hediffs\\ARA_HiveMind\\Hediff_HiveMindDrone.cs",
"ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-10-20T17:26:14.842Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "Hediff_HiveMindMaster.cs",
"DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_HiveMind\\Hediff_HiveMindMaster.cs",
"RelativeDocumentMoniker": "Hediffs\\ARA_HiveMind\\Hediff_HiveMindMaster.cs",
"ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_HiveMind\\Hediff_HiveMindMaster.cs",
"RelativeToolTip": "Hediffs\\ARA_HiveMind\\Hediff_HiveMindMaster.cs",
"ViewState": "AgIAAHwAAAAAAAAAAAAkwJwAAAAQAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-10-20T17:25:29.183Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "CompAbilityEffect_BindDrone.cs",
"DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_HiveMind\\CompAbilityEffect_BindDrone.cs",
"RelativeDocumentMoniker": "Hediffs\\ARA_HiveMind\\CompAbilityEffect_BindDrone.cs",
"ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_HiveMind\\CompAbilityEffect_BindDrone.cs",
"RelativeToolTip": "Hediffs\\ARA_HiveMind\\CompAbilityEffect_BindDrone.cs",
"ViewState": "AgIAADYAAAAAAAAAAAAAwE8AAAAtAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-10-20T17:10:14.403Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 3,
"Title": "CompProperties_AbilityBindDrone.cs",
"DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_HiveMind\\CompProperties_AbilityBindDrone.cs",
"RelativeDocumentMoniker": "Hediffs\\ARA_HiveMind\\CompProperties_AbilityBindDrone.cs",
"ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_HiveMind\\CompProperties_AbilityBindDrone.cs",
"RelativeToolTip": "Hediffs\\ARA_HiveMind\\CompProperties_AbilityBindDrone.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAA/AAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-10-20T17:10:09.072Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 4,
"Title": "Verb_ShootArc.cs",
"DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Verbs\\Verb_ShootArc.cs",
"RelativeDocumentMoniker": "Verbs\\Verb_ShootArc.cs",
"ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Verbs\\Verb_ShootArc.cs",
"RelativeToolTip": "Verbs\\Verb_ShootArc.cs",
"ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
"ViewState": "AgIAAAAAAAAAAAAAAADwvw4AAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-10-19T13:10:19.942Z",
"EditorCaption": ""

View File

@@ -15,6 +15,17 @@ namespace ArachnaeSwarm
if (masterPawn != null && dronePawn != null)
{
// 检查目标是否有 ARA_NonPlayer_HiveMindDroneHediff
Hediff nonPlayerDroneHediff = dronePawn.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("ARA_NonPlayer_HiveMindDroneHediff"));
if (nonPlayerDroneHediff != null)
{
// 处理非玩家派系的无人机
HandleNonPlayerDroneConversion(dronePawn, masterPawn);
return;
}
// 原有的玩家派系无人机绑定逻辑
Hediff_HiveMindMaster masterHediff = masterPawn.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("ARA_HiveMindMaster")) as Hediff_HiveMindMaster;
if (masterHediff != null)
{
@@ -34,6 +45,56 @@ namespace ArachnaeSwarm
}
}
/// <summary>
/// 处理非玩家派系无人机的转换
/// </summary>
private void HandleNonPlayerDroneConversion(Pawn dronePawn, Pawn masterPawn)
{
// 1. 改变阵营
if (dronePawn.Faction != masterPawn.Faction)
{
dronePawn.SetFaction(masterPawn.Faction, masterPawn);
Log.Message($"Converted {dronePawn.LabelShort} from {dronePawn.Faction?.Name ?? "null"} to {masterPawn.Faction?.Name}");
}
// 2. 移除 ARA_NonPlayer_HiveMindDroneHediff
Hediff nonPlayerHediff = dronePawn.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("ARA_NonPlayer_HiveMindDroneHediff"));
if (nonPlayerHediff != null)
{
dronePawn.health.RemoveHediff(nonPlayerHediff);
Log.Message($"Removed ARA_NonPlayer_HiveMindDroneHediff from {dronePawn.LabelShort}");
}
// 3. 添加 ARA_HiveMindDrone
HediffDef hiveMindDroneDef = HediffDef.Named("ARA_HiveMindDrone");
if (hiveMindDroneDef != null && !dronePawn.health.hediffSet.HasHediff(hiveMindDroneDef))
{
dronePawn.health.AddHediff(hiveMindDroneDef);
Log.Message($"Added ARA_HiveMindDrone to {dronePawn.LabelShort}");
}
// 4. 尝试绑定到主节点
Hediff_HiveMindMaster masterHediff = masterPawn.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("ARA_HiveMindMaster")) as Hediff_HiveMindMaster;
if (masterHediff != null)
{
if (masterHediff.TryBindDrone(dronePawn))
{
Messages.Message("ARA_BindDrone_ConversionSuccess".Translate(dronePawn.LabelShort, masterPawn.LabelShort), MessageTypeDefOf.PositiveEvent, historical: false);
Log.Message($"Successfully bound converted drone {dronePawn.LabelShort} to master {masterPawn.LabelShort}");
}
else
{
Messages.Message("ARA_BindDrone_ConversionFailure".Translate(dronePawn.LabelShort, masterPawn.LabelShort), MessageTypeDefOf.NegativeEvent, historical: false);
Log.Warning($"Failed to bind converted drone {dronePawn.LabelShort} to master {masterPawn.LabelShort}");
}
}
else
{
Messages.Message("ARA_BindDrone_NoMasterForConversion".Translate(masterPawn.LabelShort), MessageTypeDefOf.NegativeEvent, historical: false);
Log.Error($"[ArachnaeSwarm] Master {masterPawn.LabelShort} tried to convert a non-player drone but does not have Hediff_HiveMindMaster.");
}
}
public override bool Valid(LocalTargetInfo target, bool throwMessages = false)
{
if (!base.Valid(target, throwMessages))
@@ -64,7 +125,16 @@ namespace ArachnaeSwarm
return false;
}
// Target must have ARA_HiveMindDrone hediff
// 检查目标是否有 ARA_NonPlayer_HiveMindDroneHediff(新增条件)
Hediff nonPlayerDroneHediff = dronePawn.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("ARA_NonPlayer_HiveMindDroneHediff"));
if (nonPlayerDroneHediff != null)
{
// 对于非玩家派系无人机,只需要基本检查,不需要绑定状态检查
// 所有检查通过
return true;
}
// 原有的玩家派系无人机检查逻辑
Hediff_HiveMindDrone droneHediff = dronePawn.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("ARA_HiveMindDrone")) as Hediff_HiveMindDrone;
if (droneHediff == null)
{
@@ -105,4 +175,4 @@ namespace ArachnaeSwarm
return Valid(target);
}
}
}
}

View File

@@ -74,6 +74,9 @@ namespace ArachnaeSwarm
return false;
}
// 新增:强制赋予主节点的文化给无人机
ForceMasterCultureToDrone(drone);
droneHediff.target = this.pawn; // Set the drone's target to this master
drones.Add(drone);
UpdateSeverity();
@@ -81,6 +84,84 @@ namespace ArachnaeSwarm
return true;
}
/// <summary>
/// 强制将主节点的文化赋予无人机
/// </summary>
private void ForceMasterCultureToDrone(Pawn drone)
{
// 检查是否有意识形态系统Ideology DLC
if (ModsConfig.IdeologyActive)
{
// 获取主节点的意识形态
Ideo masterIdeo = this.pawn.Ideo;
if (masterIdeo != null)
{
// 设置无人机的意识形态为主节点的意识形态
if (drone.Ideo != masterIdeo)
{
drone.ideo.SetIdeo(masterIdeo);
Log.Message($"[ArachnaeSwarm] Set drone {drone.LabelShort} ideology to master's ideology: {masterIdeo.name}");
}
}
else
{
Log.Warning($"[ArachnaeSwarm] Master {this.pawn.LabelShort} has no ideology to assign to drone {drone.LabelShort}");
}
// 强制同步文化相关记忆和状态
SyncCulturalMemories(drone);
}
else
{
Log.Message($"[ArachnaeSwarm] Ideology DLC not active, skipping cultural assignment for drone {drone.LabelShort}");
}
}
/// <summary>
/// 同步文化相关记忆和状态
/// </summary>
private void SyncCulturalMemories(Pawn drone)
{
try
{
// 清除可能存在的文化冲突记忆
if (drone.needs?.mood != null)
{
// 移除与文化转换相关的负面想法
var thoughtsToRemove = drone.needs.mood.thoughts.memories.Memories
.Where(thought => thought.def.defName.Contains("Cultural") ||
thought.def.defName.Contains("Ideo") ||
thought.def.defName.Contains("Convert"))
.ToList();
foreach (var thought in thoughtsToRemove)
{
drone.needs.mood.thoughts.memories.RemoveMemory(thought);
}
if (thoughtsToRemove.Count > 0)
{
Log.Message($"[ArachnaeSwarm] Removed {thoughtsToRemove.Count} cultural conflict thoughts from drone {drone.LabelShort}");
}
// 添加蜂群文化适应的正面想法
ThoughtDef culturalHarmonyThought = DefDatabase<ThoughtDef>.GetNamedSilentFail("ARA_CulturalHarmony");
if (culturalHarmonyThought != null)
{
drone.needs.mood.thoughts.memories.TryGainMemory(culturalHarmonyThought);
}
}
// 同步服装和文化偏好
Log.Message($"[ArachnaeSwarm] Successfully synchronized cultural memories for drone {drone.LabelShort}");
}
catch (System.Exception ex)
{
Log.Error($"[ArachnaeSwarm] Error synchronizing cultural memories for drone {drone.LabelShort}: {ex.Message}");
}
}
public void TryBindAllAvailableDrones()
{
if (this.pawn?.Map == null) return;
@@ -102,6 +183,9 @@ namespace ArachnaeSwarm
// Check if the drone is unlinked (target is null) and not already in our list
if (droneHediff != null && droneHediff.target == null && !drones.Contains(drone))
{
// 新增:在自动绑定时也强制赋予文化
ForceMasterCultureToDrone(drone);
droneHediff.target = this.pawn; // Set the drone's target to this master
drones.Add(drone);
Log.Message($"[ArachnaeSwarm] Master {this.pawn.LabelShort} automatically bound drone {drone.LabelShort}.");
@@ -144,4 +228,4 @@ namespace ArachnaeSwarm
}
}
}
}
}

View File

@@ -37,11 +37,24 @@ namespace ArachnaeSwarm
// 添加:获取总天数
public float TotalDays => Props.lifetimeDays;
// 新增:检查是否为玩家派系
public bool IsPlayerFaction
{
get
{
Pawn pawn = parent as Pawn;
return pawn != null && pawn.Faction == Faction.OfPlayer;
}
}
// 添加:检查是否有关闭系统的 Hediff
public bool HasShutdownHediff
{
get
{
// 非玩家派系不检查 Hediff
if (!IsPlayerFaction) return false;
// 每 300 tick 检查一次,避免性能问题
if (hasShutdownHediffCached == null || Find.TickManager.TicksGame > lastHediffCheckTick + 300)
{
@@ -77,6 +90,9 @@ namespace ArachnaeSwarm
// 新增当hediff消失时执行的处理
private void HandleMissingHediff()
{
// 非玩家派系不处理 Hediff 消失
if (!IsPlayerFaction) return;
Pawn pawn = parent as Pawn;
if (pawn == null) return;
@@ -109,6 +125,9 @@ namespace ArachnaeSwarm
// 新增获取或创建寿命Hediff
private Hediff GetOrCreateLifespanHediff()
{
// 非玩家派系不创建 Hediff
if (!IsPlayerFaction) return null;
Pawn pawn = parent as Pawn;
if (pawn == null) return null;
@@ -150,6 +169,9 @@ namespace ArachnaeSwarm
// 新增同步组件和Hediff的寿命数据
private void SyncLifespanWithHediff()
{
// 非玩家派系不进行同步
if (!IsPlayerFaction) return;
Pawn pawn = parent as Pawn;
if (pawn == null) return;
@@ -198,6 +220,9 @@ namespace ArachnaeSwarm
// 新增将Comp的数据写入Hediff用于调试命令
private void WriteCompDataToHediff()
{
// 非玩家派系不写入 Hediff
if (!IsPlayerFaction) return;
Pawn pawn = parent as Pawn;
if (pawn == null) return;
@@ -223,6 +248,9 @@ namespace ArachnaeSwarm
// 新增定期校验Hediff状态
private void ValidateHediffState()
{
// 非玩家派系不进行 Hediff 校验
if (!IsPlayerFaction) return;
Pawn pawn = parent as Pawn;
if (pawn == null) return;
@@ -259,6 +287,9 @@ namespace ArachnaeSwarm
// 新增:检查是否需要创建寿命 Hediff
private bool ShouldCreateLifespanHediff()
{
// 非玩家派系不创建 Hediff
if (!IsPlayerFaction) return false;
// 如果有关闭 Hediff不应该创建寿命 Hediff
if (HasShutdownHediff)
{
@@ -290,33 +321,39 @@ namespace ArachnaeSwarm
lastHediffSyncTick = Find.TickManager.TicksGame;
lastHediffMissingCheckTick = Find.TickManager.TicksGame;
// 添加:检查是否需要创建寿命 Hediff
if (ShouldCreateLifespanHediff())
// 只有玩家派系才进行 Hediff 管理
if (IsPlayerFaction)
{
// 确保寿命Hediff存在
GetOrCreateLifespanHediff();
// 初始同步
SyncLifespanWithHediff();
}
else
{
Log.Message($"Skipping lifespan hediff creation for {parent.Label} due to shutdown hediff");
// 添加:检查是否需要创建寿命 Hediff
if (ShouldCreateLifespanHediff())
{
// 确保寿命Hediff存在
GetOrCreateLifespanHediff();
// 初始同步
SyncLifespanWithHediff();
}
else
{
Log.Message($"Skipping lifespan hediff creation for {parent.Label} due to shutdown hediff");
}
}
}
public override IEnumerable<Gizmo> CompGetGizmosExtra()
{
// 非玩家派系不显示 Gizmo除非特别配置
if (!IsPlayerFaction && !Props.showGizmoOnNonPlayerControlled)
{
yield break;
}
// 添加:如果有关闭 Hediff不显示任何 Gizmo
if (HasShutdownHediff)
{
yield break;
}
if (parent.Faction != Faction.OfPlayer && !Props.showGizmoOnNonPlayerControlled)
{
yield break;
}
if (Find.Selector.SingleSelectedThing == parent)
{
if (gizmo == null)
@@ -340,6 +377,7 @@ namespace ArachnaeSwarm
if (pawn != null)
{
string message = $"关闭Hediff状态:\n" +
$"玩家派系: {IsPlayerFaction}\n" +
$"HasShutdownHediff: {HasShutdownHediff}\n" +
$"Shutdown Hediff Def: {Props.immuteHediff?.defName ?? "None"}\n" +
$"实际存在: {(Props.immuteHediff != null ? pawn.health.hediffSet.HasHediff(Props.immuteHediff).ToString() : "N/A")}";
@@ -431,6 +469,7 @@ namespace ArachnaeSwarm
if (hediff != null)
{
string message = $"寿命Hediff信息:\n" +
$"玩家派系: {IsPlayerFaction}\n" +
$"严重程度: {hediff.Severity:P4}\n" +
$"剩余ticks: {powerTicksLeft}\n" +
$"剩余天数: {DaysLeft:F4}\n" +
@@ -444,6 +483,7 @@ namespace ArachnaeSwarm
else
{
string message = $"未找到寿命hediff\n" +
$"玩家派系: {IsPlayerFaction}\n" +
$"关闭Hediff存在: {HasShutdownHediff}";
Messages.Message(message, MessageTypeDefOf.SilentInput);
}
@@ -507,6 +547,9 @@ namespace ArachnaeSwarm
{
base.CompTick();
// 非玩家派系不进行任何 Tick 逻辑
if (!IsPlayerFaction) return;
// 添加:如果有关闭 Hediff停止所有 Tick 逻辑
if (HasShutdownHediff)
{
@@ -605,19 +648,23 @@ namespace ArachnaeSwarm
powerTicksLeft = (int)(Props.lifetimeDays * 60000);
}
// 立即检查hediff是否存在
ValidateHediffState();
// 只有玩家派系才进行 Hediff 管理
if (IsPlayerFaction)
{
// 立即检查hediff是否存在
ValidateHediffState();
// 添加:检查是否需要创建寿命 Hediff
if (ShouldCreateLifespanHediff())
{
// 确保寿命Hediff存在并同步
GetOrCreateLifespanHediff();
SyncLifespanWithHediff();
}
else
{
Log.Message($"Skipping lifespan hediff creation for {parent.Label} after load due to shutdown hediff");
// 添加:检查是否需要创建寿命 Hediff
if (ShouldCreateLifespanHediff())
{
// 确保寿命Hediff存在并同步
GetOrCreateLifespanHediff();
SyncLifespanWithHediff();
}
else
{
Log.Message($"Skipping lifespan hediff creation for {parent.Label} after load due to shutdown hediff");
}
}
}
}