修修修

This commit is contained in:
Tourswen
2025-10-01 16:20:10 +08:00
parent f76ffb74de
commit 5d7d88e4ad
16 changed files with 280 additions and 131 deletions

Binary file not shown.

View File

@@ -40,6 +40,8 @@
<cooldownTicksRange>601</cooldownTicksRange>
<hostile>false</hostile>
<showOnCharacterCard>true</showOnCharacterCard>
<displayGizmoWhileUndrafted>true</displayGizmoWhileUndrafted>
<disableGizmoWhileUndrafted>false</disableGizmoWhileUndrafted>
<aiCanUse>false</aiCanUse>
<verbProperties>
<verbClass>Verb_CastAbility</verbClass>
@@ -68,6 +70,8 @@
<cooldownTicksRange>601</cooldownTicksRange>
<hostile>false</hostile>
<showOnCharacterCard>true</showOnCharacterCard>
<displayGizmoWhileUndrafted>true</displayGizmoWhileUndrafted>
<disableGizmoWhileUndrafted>false</disableGizmoWhileUndrafted>
<aiCanUse>false</aiCanUse>
<verbProperties>
<verbClass>Verb_CastAbility</verbClass>

View File

@@ -5,4 +5,11 @@
<driverClass>ArachnaeSwarm.JobDriver_Incubate</driverClass>
<reportString>为 TargetA 注入信息素.</reportString>
</JobDef>
<JobDef>
<defName>ARA_CarryPrisonerToNutrientVat</defName>
<driverClass>ArachnaeSwarm.JobDriver_CarryPrisonerToNutrientVat</driverClass>
<reportString>carrying TargetA to TargetB.</reportString>
<suspendable>false</suspendable>
</JobDef>
</Defs>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8" ?>
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<JobDef>
@@ -7,5 +7,4 @@
<reportString>正在部署虫洞。</reportString>
<allowOpportunisticPrefix>true</allowOpportunisticPrefix>
</JobDef>
</Defs>

View File

@@ -76,12 +76,6 @@
<li Class="ArachnaeSwarm.CompProperties_HediffGiver">
<hediffs>
<li>ARA_TemperatureRegulation</li>
</hediffs>
<addChance>1.0</addChance>
<allowDuplicates>false</allowDuplicates>
</li>
<li Class="ArachnaeSwarm.CompProperties_HediffGiver">
<hediffs>
<li>ARA_HiveMindWorker</li>
</hediffs>
<addChance>1.0</addChance>

View File

@@ -711,8 +711,7 @@
<AlienRace.ThingDef_AlienRace ParentName="ARA_NodeBase_Huge">
<defName>ArachnaeNode_Race_Myrmecocystus</defName>
<label>阿拉克涅蜜罐种</label>
<description>
阿拉克涅大型督虫之一,拥有广泛食谱的大型虫族,可以吞下许多未经处理的生物并将其分解为阿拉克涅虫蜜,以滋养虫群。\n\n她可以进行搬运、烹饪和种植工作战斗技能非常差。\n\n作为督虫她可以繁育并监管若干阿拉克涅食腐种辅虫以协助巢穴进行收割和播种工作。</description>
<description>阿拉克涅大型督虫之一,拥有广泛食谱的大型虫族,可以吞下许多未经处理的生物并将其分解为阿拉克涅虫蜜,以滋养虫群。\n\n她可以进行搬运、烹饪和种植工作战斗技能非常差。\n\n作为督虫她可以繁育并监管若干阿拉克涅食腐种辅虫以协助巢穴进行收割和播种工作。</description>
<alienRace>
<generalSettings>
<!-- 各种零件定义 -->
@@ -835,8 +834,7 @@
<AlienRace.ThingDef_AlienRace ParentName="ARA_NodeBase">
<defName>ArachnaeNode_Race_ShieldHead</defName>
<label>阿拉克涅盾头种</label>
<description>
阿拉克涅督虫之一,拥有过度生长而覆盖头部和腿部的甲壳,可以定时剥落甲壳素供虫巢使用。\n\n她可以进行搬运、采矿和建筑工作战斗技能平平无奇但是拥有较好的防御。\n\n作为督虫她可以繁育并监管若干阿拉克涅坚颚种辅虫以协助巢穴开采矿脉。</description>
<description>阿拉克涅督虫之一,拥有过度生长而覆盖头部和腿部的甲壳,可以定时剥落甲壳素供虫巢使用。\n\n她可以进行搬运、采矿和建筑工作战斗技能平平无奇但是拥有较好的防御。\n\n作为督虫她可以繁育并监管若干阿拉克涅坚颚种辅虫以协助巢穴开采矿脉。</description>
<alienRace>
<generalSettings>
<!-- 各种零件定义 -->
@@ -984,8 +982,7 @@
<AlienRace.ThingDef_AlienRace ParentName="ARA_NodeBase">
<defName>ArachnaeNode_Race_WeaponSmith</defName>
<label>阿拉克涅工艺种</label>
<description>
阿拉克涅督虫之一,是少数拥有结茧能力的非女皇种阿拉克涅虫族——她们可以排出一枚器官茧,这枚茧将按照其信息素所标定的方向定向演化出一个武装器官,以供虫群使用。\n\n她可以进行搬运、手工和艺术工作战斗技能平平无奇但本身极度脆弱。\n\n作为督虫她可以繁育并监管若干阿拉克涅家政种辅虫以协助巢穴进行清洁和搬运工作。</description>
<description>阿拉克涅督虫之一,是少数拥有结茧能力的非女皇种阿拉克涅虫族——她们可以排出一枚器官茧,这枚茧将按照其信息素所标定的方向定向演化出一个武装器官,以供虫群使用。\n\n她可以进行搬运、手工和艺术工作战斗技能平平无奇但本身极度脆弱。\n\n作为督虫她可以繁育并监管若干阿拉克涅家政种辅虫以协助巢穴进行清洁和搬运工作。</description>
<alienRace>
<generalSettings>
<!-- 各种零件定义 -->
@@ -1101,8 +1098,7 @@
<AlienRace.ThingDef_AlienRace ParentName="ARA_NodeBase">
<defName>ArachnaeNode_Race_Fighter</defName>
<label>阿拉克涅战士种</label>
<description>
阿拉克涅督虫之一,是巢穴中真正的战士,其拥有强大的可塑性基因,随着科技的解锁其将获得更多的能力。\n\n她可以进行搬运、狩猎和驯兽工作战斗技能非常亮眼并且移动敏捷。\n\n作为督虫她可以向敌人投射寿命有限但是非常恼人的阿拉克涅酸噬种辅虫以阻止敌人的远程火力开火。</description>
<description>阿拉克涅督虫之一,是巢穴中真正的战士,其拥有强大的可塑性基因,随着科技的解锁其将获得更多的能力。\n\n她可以进行搬运、狩猎和驯兽工作战斗技能非常亮眼并且移动敏捷。\n\n作为督虫她可以向敌人投射寿命有限但是非常恼人的阿拉克涅酸噬种辅虫以阻止敌人的远程火力开火。</description>
<alienRace>
<generalSettings>
<!-- 各种零件定义 -->
@@ -1235,8 +1231,7 @@
<AlienRace.ThingDef_AlienRace ParentName="ARA_NodeBase">
<defName>ArachnaeNode_Race_Facehugger</defName>
<label>阿拉克涅原虫种</label>
<description>
阿拉克涅督虫之一,呈现高度未分化状态的特殊督虫,可以通过独特的神经链接管控制受害者的身体,并释放灵能信号以使得周围的人忽略其存在。然而她本身实在过于脆弱,在完成寄生前难以胜任任何工作。\n\n她可以进行所有非研究工作战斗技能约等于无。\n\n不同于普通阿拉克涅虫族高度未分化的身体决定了其无法孕育任何辅虫。</description>
<description>阿拉克涅督虫之一,呈现高度未分化状态的特殊督虫,可以通过独特的神经链接管控制受害者的身体,并释放灵能信号以使得周围的人忽略其存在。然而她本身实在过于脆弱,在完成寄生前难以胜任任何工作。\n\n她可以进行所有非研究工作战斗技能约等于无。\n\n不同于普通阿拉克涅虫族高度未分化的身体决定了其无法孕育任何辅虫。</description>
<alienRace>
<generalSettings>
<!-- 各种零件定义 -->
@@ -1295,8 +1290,7 @@
<AlienRace.ThingDef_AlienRace ParentName="ARA_NodeBase_Huge">
<defName>ArachnaeNode_Race_Smokepop</defName>
<label>阿拉克涅浓雾种</label>
<description>
阿拉克涅大型督虫之一,身披厚重甲壳的大型虫族,拥有在大范围内喷射信息素以召唤辅虫虫群能力,虽然移动速度比较慢,但是在战斗中就如同装甲车一样难以撼动。\n\n她可以进行搬运和医护工作拥有不错的战斗技能防御力和伤害耐受能力强大。\n\n作为督虫她可以繁育并监管大量阿拉克涅家政种辅虫以协助巢穴进行清洁和搬运工作。</description>
<description>阿拉克涅大型督虫之一,身披厚重甲壳的大型虫族,拥有在大范围内喷射信息素以召唤辅虫虫群能力,虽然移动速度比较慢,但是在战斗中就如同装甲车一样难以撼动。\n\n她可以进行搬运和医护工作拥有不错的战斗技能防御力和伤害耐受能力强大。\n\n作为督虫她可以繁育并监管大量阿拉克涅家政种辅虫以协助巢穴进行清洁和搬运工作。</description>
<alienRace>
<generalSettings>
<!-- 各种零件定义 -->
@@ -1425,8 +1419,7 @@
<AlienRace.ThingDef_AlienRace ParentName="ARA_NodeBase_Huge">
<defName>ArachnaeNode_Race_Skyraider</defName>
<label>阿拉克涅空天种</label>
<description>
阿拉克涅大型督虫之一,众督虫中的精锐,身材巨大并且拥有引以为傲的飞行能力,是巢穴中无可争议的空中霸主。\n\n她可以进行搬运工作拥有不错的战斗技能在战场上行动时非常灵活。\n\n作为督虫她可以向敌人发射天巢种辅虫这种辅虫会自动修正姿态追踪敌军并在命中后对敌人进行持续啃咬。</description>
<description>阿拉克涅大型督虫之一,众督虫中的精锐,身材巨大并且拥有引以为傲的飞行能力,是巢穴中无可争议的空中霸主。\n\n她可以进行搬运工作拥有不错的战斗技能在战场上行动时非常灵活。\n\n作为督虫她可以向敌人发射天巢种辅虫这种辅虫会自动修正姿态追踪敌军并在命中后对敌人进行持续啃咬。</description>
<alienRace>
<generalSettings>
<!-- 各种零件定义 -->
@@ -1551,8 +1544,7 @@
<AlienRace.ThingDef_AlienRace ParentName="ARA_PawnBase">
<defName>ArachnaeNode_Race_NeuroSwarm</defName>
<label>阿拉克涅织域种</label>
<description>
阿拉克涅督虫之一,是阿拉克涅虫群中最为特殊的虫族,织域种虽然受到女皇种监管,但仍然具有强大的高级智慧和自我意志,织域种之间能够构建一种高度互联的神经网络从而进行复杂的研究和计算工作,织域种进行计算工作时无法感知外界环境,因此她们是虫群的重要保护对象。</description>
<description>阿拉克涅督虫之一,是阿拉克涅虫群中最为特殊的虫族,织域种虽然受到女皇种监管,但仍然具有强大的高级智慧和自我意志,织域种之间能够构建一种高度互联的神经网络从而进行复杂的研究和计算工作,织域种进行计算工作时无法感知外界环境,因此她们是虫群的重要保护对象。</description>
<alienRace>
<!-- 核心设置 -->

View File

@@ -418,8 +418,9 @@
<petList>
<li>ArachnaeBase_Race_Scavenger</li>
<li>ArachnaeBase_Race_HardJaw</li>
<li>ArachnaeBase_Race_Maid</li>
</petList>
<onlyTameRaceRestrictedPets>false</onlyTameRaceRestrictedPets>
<onlyTameRaceRestrictedPets>true</onlyTameRaceRestrictedPets>
<!-- 可以穿戴的衣服 -->
<apparelList>
</apparelList>

View File

@@ -19,6 +19,8 @@
<MedicalQualityMax>1.00</MedicalQualityMax>
<DeteriorationRate>2</DeteriorationRate>
<WorkToMake>700</WorkToMake>
<ARA_IncubationCost>10</ARA_IncubationCost>
<ARA_IncubationTime>2</ARA_IncubationTime>
</statBases>
<tickerType>Rare</tickerType>
<comps>
@@ -26,6 +28,12 @@
<daysToRotStart>150</daysToRotStart>
<rotDestroys>true</rotDestroys>
</li>
<li Class="ArachnaeSwarm.CompProperties_ExtraIncubationInfo">
<cocoonDefs>
<li>ARA_Cocoon_Medicine</li>
<li>ARA_BioforgeIncubator_Thing</li>
</cocoonDefs>
</li>
</comps>
<allowedArchonexusCount>20</allowedArchonexusCount>
</ThingDef>
@@ -49,6 +57,8 @@
<WorkToMake>1000</WorkToMake>
<MarketValue>50</MarketValue>
<Mass>0.01</Mass>
<ARA_IncubationCost>20</ARA_IncubationCost>
<ARA_IncubationTime>5</ARA_IncubationTime>
</statBases>
<techLevel>Animal</techLevel>
<ingestible>
@@ -74,6 +84,12 @@
<needLevelOffset>1</needLevelOffset>
<listOrder>1000</listOrder>
</li>
<li Class="ArachnaeSwarm.CompProperties_ExtraIncubationInfo">
<cocoonDefs>
<li>ARA_Cocoon_Medicine</li>
<li>ARA_BioforgeIncubator_Thing</li>
</cocoonDefs>
</li>
</comps>
</ThingDef>
<HediffDef>

View File

@@ -192,7 +192,7 @@
</statBases>
<costList>
<ARA_Carapace>5</ARA_Carapace>
<ARA_InsectJelly>2</ARA_InsectJelly>
<ARA_InsectJelly>1</ARA_InsectJelly>
</costList>
<leaveResourcesWhenKilled>false</leaveResourcesWhenKilled>
<selectable>true</selectable>
@@ -295,7 +295,7 @@
<MarketValue>50</MarketValue>
</statBases>
<costList>
<ARA_InsectJelly>3</ARA_InsectJelly>
<ARA_InsectJelly>2</ARA_InsectJelly>
</costList>
<graphicData>
<texPath>ArachnaeSwarm/Building/ARA_Tumor</texPath>
@@ -348,7 +348,7 @@
</statBases>
<designationCategory>ARA_Buildings</designationCategory>
<costList>
<ARA_InsectJelly>10</ARA_InsectJelly>
<ARA_InsectJelly>20</ARA_InsectJelly>
</costList>
<uiOrder>2995</uiOrder>
<terrainAffordanceNeeded>ARA_Creep</terrainAffordanceNeeded>
@@ -393,6 +393,7 @@
<thingCategories Inherit="False"/>
<costList>
<ARA_Carapace>50</ARA_Carapace>
<ARA_InsectJelly>10</ARA_InsectJelly>
</costList>
<graphicData>
<texPath>ArachnaeSwarm/Building/ARA_ResearchBench</texPath>
@@ -474,7 +475,7 @@
<size>(1,2)</size>
<costList>
<ARA_InsectJelly>3</ARA_InsectJelly>
<ARA_Carapace>15</ARA_Carapace>
<ARA_Carapace>25</ARA_Carapace>
</costList>
<uiOrder>2010</uiOrder>
<fillPercent>0.5</fillPercent>
@@ -596,12 +597,13 @@
<terrainAffordanceNeeded>ARA_Creep</terrainAffordanceNeeded>
<statBases>
<WorkToBuild>400</WorkToBuild>
<MaxHitPoints>100</MaxHitPoints>
<MaxHitPoints>1200</MaxHitPoints>
<Flammability>1.0</Flammability>
</statBases>
<tickerType>Rare</tickerType>
<costList>
<ARA_Carapace>30</ARA_Carapace>
<ARA_Carapace>50</ARA_Carapace>
<ARA_InsectJelly>20</ARA_InsectJelly>
</costList>
<placeWorkers>
<li>PlaceWorker_Vent</li>
@@ -659,7 +661,8 @@
<stuffCategories Inherit="False" />
<costStuffCount>0</costStuffCount>
<costList>
<ARA_Carapace>50</ARA_Carapace>
<ARA_Carapace>150</ARA_Carapace>
<ARA_Activated_Bacterium>25</ARA_Activated_Bacterium>
</costList>
<castEdgeShadows>false</castEdgeShadows>
<staticSunShadowHeight>0</staticSunShadowHeight>
@@ -715,18 +718,6 @@
<fuelConsumptionRate>25</fuelConsumptionRate>
<consumeFuelOnlyWhenUsed>true</consumeFuelOnlyWhenUsed>
</li>
<li Class="ArachnaeSwarm.CompProperties_RefuelableNutrition_WithKey">
<saveKeysPrefix>Bacterium</saveKeysPrefix>
<fuelLabel>活体钜菌</fuelLabel>
<fuelFilter>
<thingDefs>
<li>ARA_Activated_Bacterium</li>
</thingDefs>
</fuelFilter>
<fuelCapacity>25</fuelCapacity>
<fuelConsumptionRate>1</fuelConsumptionRate>
<consumeFuelOnlyWhenUsed>true</consumeFuelOnlyWhenUsed>
</li>
<li Class="ArachnaeSwarm.CompProperties_DelayedTerrainSpawn">
<terrainToSpawn>ARA_InsectCreep</terrainToSpawn>

View File

@@ -48,4 +48,11 @@
<WillDestroyBodyPart>将破坏:{0}</WillDestroyBodyPart>
<CasterDead>施法者已死亡</CasterDead>
<NoValidBodyParts>没有可破坏的身体部位</NoValidBodyParts>
<AssignCarryPrisoner>为囚犯/奴隶分配运送者</AssignCarryPrisoner>
<AssignCarryPrisonerDesc>选择一个虫群成员将囚犯或奴隶带到阿拉克涅消化茧中</AssignCarryPrisonerDesc>
<NoAvailableHiveCarriers>没有可用的虫群成员来携带囚犯</NoAvailableHiveCarriers>
<CarrierAssigned>已指派{0}将{1}运送到阿拉克涅消化茧</CarrierAssigned>
<NoAvailableCarriers>没有可用的虫群成员运送者</NoAvailableCarriers>
<NoPrisonersOrSlaves>没有可用的囚犯或奴隶</NoPrisonersOrSlaves>
</LanguageData>

View File

@@ -3,20 +3,12 @@
"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\\pawn_comps\\ara_compskillexperiencegiver\\compskillexperiencegiver.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:pawn_comps\\ara_compskillexperiencegiver\\compskillexperiencegiver.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\\jobdriver_carryprisonertonutrientvat.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:jobdriver_carryprisonertonutrientvat.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_compskillexperiencegiver\\compproperties_skillexperiencegiver.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:pawn_comps\\ara_compskillexperiencegiver\\compproperties_skillexperiencegiver.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\\moharhediffs\\hediffcomp_spawner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:hediffs\\moharhediffs\\hediffcomp_spawner.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\\stat\\statworker_incubationinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:stat\\statworker_incubationinfo.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\\building_comps\\ara_nutrientvat\\building_nutrientvat.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:building_comps\\ara_nutrientvat\\building_nutrientvat.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
}
],
"DocumentGroupContainers": [
@@ -35,53 +27,27 @@
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "CompSkillExperienceGiver.cs",
"DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_CompSkillExperienceGiver\\CompSkillExperienceGiver.cs",
"RelativeDocumentMoniker": "Pawn_Comps\\ARA_CompSkillExperienceGiver\\CompSkillExperienceGiver.cs",
"ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_CompSkillExperienceGiver\\CompSkillExperienceGiver.cs",
"RelativeToolTip": "Pawn_Comps\\ARA_CompSkillExperienceGiver\\CompSkillExperienceGiver.cs",
"ViewState": "AgIAAEQAAAAAAAAAAAAgwHkAAAAVAAAAAAAAAA==",
"Title": "JobDriver_CarryPrisonerToNutrientVat.cs",
"DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\JobDriver_CarryPrisonerToNutrientVat.cs",
"RelativeDocumentMoniker": "JobDriver_CarryPrisonerToNutrientVat.cs",
"ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\JobDriver_CarryPrisonerToNutrientVat.cs",
"RelativeToolTip": "JobDriver_CarryPrisonerToNutrientVat.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABwAAAAYAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-10-01T06:00:46.388Z",
"WhenOpened": "2025-10-01T07:37:06.309Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 1,
"Title": "CompProperties_SkillExperienceGiver.cs",
"DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_CompSkillExperienceGiver\\CompProperties_SkillExperienceGiver.cs",
"RelativeDocumentMoniker": "Pawn_Comps\\ARA_CompSkillExperienceGiver\\CompProperties_SkillExperienceGiver.cs",
"ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_CompSkillExperienceGiver\\CompProperties_SkillExperienceGiver.cs*",
"RelativeToolTip": "Pawn_Comps\\ARA_CompSkillExperienceGiver\\CompProperties_SkillExperienceGiver.cs*",
"ViewState": "AgIAAAAAAAAAAAAAAAAAACAAAAAIAAAAAAAAAA==",
"Title": "Building_NutrientVat.cs",
"DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_NutrientVat\\Building_NutrientVat.cs",
"RelativeDocumentMoniker": "Building_Comps\\ARA_NutrientVat\\Building_NutrientVat.cs",
"ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_NutrientVat\\Building_NutrientVat.cs",
"RelativeToolTip": "Building_Comps\\ARA_NutrientVat\\Building_NutrientVat.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAAXAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-10-01T06:00:42.508Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "HediffComp_Spawner.cs",
"DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\MoharHediffs\\HediffComp_Spawner.cs",
"RelativeDocumentMoniker": "Hediffs\\MoharHediffs\\HediffComp_Spawner.cs",
"ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\MoharHediffs\\HediffComp_Spawner.cs",
"RelativeToolTip": "Hediffs\\MoharHediffs\\HediffComp_Spawner.cs",
"ViewState": "AgIAAKABAAAAAAAAAAAUwLkBAAARAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-09-30T23:28:37.585Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 3,
"Title": "StatWorker_IncubationInfo.cs",
"DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Stat\\StatWorker_IncubationInfo.cs",
"RelativeDocumentMoniker": "Stat\\StatWorker_IncubationInfo.cs",
"ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Stat\\StatWorker_IncubationInfo.cs",
"RelativeToolTip": "Stat\\StatWorker_IncubationInfo.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-09-30T08:38:06.014Z",
"WhenOpened": "2025-10-01T07:14:25.565Z",
"EditorCaption": ""
}
]

View File

@@ -170,6 +170,7 @@
<Compile Include="Hediffs\WULA_HediffDamgeShield\DRMDamageShield.cs" />
<Compile Include="Hediffs\WULA_HediffDamgeShield\Hediff_DamageShield.cs" />
<Compile Include="Hediff_DynamicInterceptor.cs" />
<Compile Include="JobDriver_CarryPrisonerToNutrientVat.cs" />
<Compile Include="Pawn_Comps\ARA_CompSkillExperienceGiver\CompProperties_SkillExperienceGiver.cs" />
<Compile Include="Pawn_Comps\ARA_CompSkillExperienceGiver\CompSkillExperienceGiver.cs" />
<Compile Include="Stat\StatWorker_IncubationInfo.cs" />

View File

@@ -243,11 +243,18 @@ namespace ArachnaeSwarm
return "PawnBiostarving".Translate(pawn.Named("PAWN"));
}
//修改点:禁止置入虫群成员
if (pawn.health.hediffSet.HasHediff(ARA_HediffDefOf.ARA_HiveMindMaster) || pawn.health.hediffSet.HasHediff(ARA_HediffDefOf.ARA_HiveMindDrone) ||pawn.health.hediffSet.HasHediff(ARA_HediffDefOf.ARA_HiveMindWorker))
if (pawn.health.hediffSet.HasHediff(ARA_HediffDefOf.ARA_HiveMindMaster) || pawn.health.hediffSet.HasHediff(ARA_HediffDefOf.ARA_HiveMindDrone) || pawn.health.hediffSet.HasHediff(ARA_HediffDefOf.ARA_HiveMindWorker))
{
return "PawnIsHiveMember".Translate(pawn.Named("PAWN"));
}
return pawn.IsColonist && !pawn.IsQuestLodger();
//修改点:允许殖民者、囚犯和奴隶
bool isColonist = pawn.IsColonist;
bool isPrisoner = pawn.IsPrisonerOfColony;
bool isSlave = pawn.IsSlaveOfColony;
// 允许殖民者、囚犯或奴隶,但不能是任务寄宿者
return (isColonist || isPrisoner || isSlave) && !pawn.IsQuestLodger();
}
public override void TryAcceptPawn(Pawn pawn)
@@ -305,53 +312,26 @@ namespace ArachnaeSwarm
{
// You can add sound effects here if you want, e.g., SoundDefOf.GrowthVat_Open.PlayOneShot(SoundInfo.InMap(this));
}
public override IEnumerable<Gizmo> GetGizmos()
{
// Keep base gizmos
// 原有的基础Gizmos
foreach (Gizmo gizmo in base.GetGizmos())
{
yield return gizmo;
}
//修改点:删除了弹出功能
// 修改点:删除了弹出功能
if (base.Working)
{
//yield return new Command_Action
//{
// defaultLabel = "CommandCancelGrowth".Translate(), // Label can be changed
// defaultDesc = "CommandCancelGrowthDesc".Translate(), // Desc can be changed
// icon = ContentFinder<Texture2D>.Get("UI/Designators/Cancel"),
// action = () =>
// {
// Finish();
// innerContainer.TryDropAll(InteractionCell, base.Map, ThingPlaceMode.Near);
// }
//};
// 原有的工作状态下的Gizmos
}
else
{
//if (selectedPawn != null)
//{
// yield return new Command_Action
// {
// defaultLabel = "CommandCancelLoad".Translate(),
// defaultDesc = "CommandCancelLoadDesc".Translate(),
// icon = ContentFinder<Texture2D>.Get("UI/Designators/Cancel"),
// action = () =>
// {
// if (selectedPawn?.CurJobDef == JobDefOf.EnterBuilding)
// {
// selectedPawn.jobs.EndCurrentJob(JobCondition.InterruptForced);
// }
// OnStop();
// }
// };
//}
// 原有的选择殖民者的操作
var command_Action = new Command_Action
{
defaultLabel = "InsertPerson".Translate() + "...",
defaultDesc = "InsertPersonGrowthVatDesc".Translate(), // Desc can be changed
defaultDesc = "InsertPersonGrowthVatDesc".Translate(),
icon = Building_GrowthVat.InsertPawnIcon.Texture,
action = () =>
{
@@ -375,6 +355,49 @@ namespace ArachnaeSwarm
command_Action.Disable("NoViablePawns".Translate());
}
yield return command_Action;
// 新增:指派搬运囚犯/奴隶的操作
var command_CarryPrisoner = new Command_Action
{
defaultLabel = "AssignCarryPrisoner".Translate() + "...",
defaultDesc = "AssignCarryPrisonerDesc".Translate(),
icon = ContentFinder<Texture2D>.Get("UI/Commands/Attack"),
action = () =>
{
List<FloatMenuOption> list = new List<FloatMenuOption>();
// 获取所有可接受的囚犯和奴隶
foreach (Pawn p in base.Map.mapPawns.AllPawnsSpawned)
{
if ((bool)CanAcceptPawn(p) && (p.IsPrisonerOfColony || p.IsSlaveOfColony))
{
list.Add(new FloatMenuOption(
p.LabelCap + " (" + (p.IsPrisonerOfColony ? "Prisoner" : "Slave") + ")",
() => AssignCarrierForPrisoner(p),
p,
Color.white
));
}
}
if (!list.Any())
{
list.Add(new FloatMenuOption("NoPrisonersOrSlaves".Translate(), null));
}
Find.WindowStack.Add(new FloatMenu(list));
}
};
// 检查是否有可用的囚犯/奴隶
bool hasPrisonersOrSlaves = base.Map.mapPawns.AllPawnsSpawned
.Any(p => (bool)CanAcceptPawn(p) && (p.IsPrisonerOfColony || p.IsSlaveOfColony));
if (!hasPrisonersOrSlaves)
{
command_CarryPrisoner.Disable("NoPrisonersOrSlaves".Translate());
}
yield return command_CarryPrisoner;
}
}
@@ -443,5 +466,78 @@ namespace ArachnaeSwarm
TopGraphic.Draw(DrawPos + Altitudes.AltIncVect * 2f, base.Rotation, this);
}
}
public Job CreateCarryJobForPrisoner(Pawn prisoner, Pawn carrier)
{
if (prisoner == null || carrier == null)
return null;
if (!CanAcceptPawn(prisoner).Accepted)
return null;
// 创建搬运工作定义
JobDef carryJobDef = DefDatabase<JobDef>.GetNamed("ARA_CarryPrisonerToNutrientVat");
if (carryJobDef == null)
return null;
Job job = JobMaker.MakeJob(carryJobDef, prisoner, this);
job.count = 1;
return job;
}
public IEnumerable<Pawn> GetAvailableCarriers()
{
foreach (Pawn pawn in base.Map.mapPawns.AllPawnsSpawned)
{
// 检查是否是虫群成员拥有ARA_HiveMindDrone
if (pawn.health.hediffSet.HasHediff(ARA_HediffDefOf.ARA_HiveMindDrone) ||
pawn.health.hediffSet.HasHediff(ARA_HediffDefOf.ARA_HiveMindWorker) ||
pawn.health.hediffSet.HasHediff(ARA_HediffDefOf.ARA_HiveMindMaster))
{
// 检查是否能够工作且不是囚犯
if (pawn.workSettings != null && pawn.workSettings.WorkIsActive(WorkTypeDefOf.Hauling) &&
!pawn.Downed && !pawn.IsPrisoner && pawn.CanReach(this, PathEndMode.InteractionCell, Danger.Some))
{
yield return pawn;
}
}
}
}
public void AssignCarrierForPrisoner(Pawn prisoner)
{
if (prisoner == null)
return;
// 获取可用的搬运者
var availableCarriers = GetAvailableCarriers().ToList();
if (!availableCarriers.Any())
{
Messages.Message("NoAvailableHiveCarriers".Translate(), MessageTypeDefOf.RejectInput);
return;
}
// 创建浮动菜单选择搬运者
List<FloatMenuOption> options = new List<FloatMenuOption>();
foreach (Pawn carrier in availableCarriers)
{
options.Add(new FloatMenuOption(
carrier.LabelCap,
() =>
{
Job carryJob = CreateCarryJobForPrisoner(prisoner, carrier);
if (carryJob != null)
{
carrier.jobs.TryTakeOrderedJob(carryJob, JobTag.MiscWork);
Messages.Message("CarrierAssigned".Translate(carrier.LabelShort, prisoner.LabelShort), MessageTypeDefOf.NeutralEvent);
}
},
carrier,
Color.white
));
}
if (options.Any())
{
Find.WindowStack.Add(new FloatMenu(options));
}
else
{
Messages.Message("NoAvailableCarriers".Translate(), MessageTypeDefOf.RejectInput);
}
}
}
}

View File

@@ -0,0 +1,63 @@
using RimWorld;
using System.Collections.Generic;
using Verse;
using Verse.AI;
namespace ArachnaeSwarm
{
public class JobDriver_CarryPrisonerToNutrientVat : JobDriver
{
private const TargetIndex PrisonerInd = TargetIndex.A;
private const TargetIndex VatInd = TargetIndex.B;
protected Pawn Prisoner => (Pawn)job.GetTarget(PrisonerInd).Thing;
protected Building_NutrientVat Vat => (Building_NutrientVat)job.GetTarget(VatInd).Thing;
public override bool TryMakePreToilReservations(bool errorOnFailed)
{
return pawn.Reserve(Prisoner, job, 1, -1, null, errorOnFailed)
&& pawn.Reserve(Vat, job, 1, -1, null, errorOnFailed);
}
protected override IEnumerable<Toil> MakeNewToils() // 改为 protected
{
// 验证目标
this.FailOnDestroyedOrNull(PrisonerInd);
this.FailOnDestroyedOrNull(VatInd);
this.FailOn(() => !Vat.CanAcceptPawn(Prisoner).Accepted);
// 1. 前往囚犯位置
yield return Toils_Goto.GotoThing(PrisonerInd, PathEndMode.OnCell)
.FailOn(() => Prisoner.IsInNutrientVat())
.FailOnSomeonePhysicallyInteracting(PrisonerInd);
// 2. 开始搬运囚犯
yield return Toils_Haul.StartCarryThing(PrisonerInd);
// 3. 前往消化缸
yield return Toils_Goto.GotoThing(VatInd, PathEndMode.InteractionCell);
// 4. 将囚犯放入消化缸
yield return new Toil
{
initAction = () =>
{
if (Vat.CanAcceptPawn(Prisoner).Accepted)
{
Vat.TryAcceptPawn(Prisoner);
}
},
defaultCompleteMode = ToilCompleteMode.Instant
};
}
}
// 扩展方法检查pawn是否在消化缸中
public static class PawnExtensions
{
public static bool IsInNutrientVat(this Pawn pawn)
{
return pawn?.Spawned == false && pawn.ParentHolder is Building_NutrientVat;
}
}
}

12
mod.vdf Normal file
View File

@@ -0,0 +1,12 @@
"workshopitem"
{
"appid" "294100"
"contentfolder" "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm"
"previewfile" "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\About\\Preview.png"
"visibility" "3"
"title" "Arachnae Swarm"
"description" "Arachnae Swarm"
"changenote" "1.6"
"publishedfileid" "3563955520"
}