diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll index e10a3f0..63c9f3e 100644 Binary files a/1.6/1.6/Assemblies/ArachnaeSwarm.dll and b/1.6/1.6/Assemblies/ArachnaeSwarm.dll differ diff --git a/1.6/1.6/Defs/AbilityDefs/ARA_Abilities.xml b/1.6/1.6/Defs/AbilityDefs/ARA_Abilities.xml index a35fa6b..5d64a2a 100644 --- a/1.6/1.6/Defs/AbilityDefs/ARA_Abilities.xml +++ b/1.6/1.6/Defs/AbilityDefs/ARA_Abilities.xml @@ -40,6 +40,8 @@ 601 false true + true + false false Verb_CastAbility @@ -68,6 +70,8 @@ 601 false true + true + false false Verb_CastAbility diff --git a/1.6/1.6/Defs/JobDefs/ARA_Jobs.xml b/1.6/1.6/Defs/JobDefs/ARA_Jobs.xml index f568d22..d8bfe99 100644 --- a/1.6/1.6/Defs/JobDefs/ARA_Jobs.xml +++ b/1.6/1.6/Defs/JobDefs/ARA_Jobs.xml @@ -5,4 +5,11 @@ ArachnaeSwarm.JobDriver_Incubate 为 TargetA 注入信息素. + + + ARA_CarryPrisonerToNutrientVat + ArachnaeSwarm.JobDriver_CarryPrisonerToNutrientVat + carrying TargetA to TargetB. + false + \ No newline at end of file diff --git a/1.6/1.6/Defs/JobDefs/ARA_Jobs_Wormhole.xml b/1.6/1.6/Defs/JobDefs/ARA_Jobs_Wormhole.xml index e619ef0..edbb2e9 100644 --- a/1.6/1.6/Defs/JobDefs/ARA_Jobs_Wormhole.xml +++ b/1.6/1.6/Defs/JobDefs/ARA_Jobs_Wormhole.xml @@ -1,4 +1,4 @@ - + @@ -7,5 +7,4 @@ 正在部署虫洞。 true - \ No newline at end of file diff --git a/1.6/1.6/Defs/ThingDef_Races/ARA_RaceBaseSwarm.xml b/1.6/1.6/Defs/ThingDef_Races/ARA_RaceBaseSwarm.xml index e666e12..c69a669 100644 --- a/1.6/1.6/Defs/ThingDef_Races/ARA_RaceBaseSwarm.xml +++ b/1.6/1.6/Defs/ThingDef_Races/ARA_RaceBaseSwarm.xml @@ -76,12 +76,6 @@
  • ARA_TemperatureRegulation
  • - - 1.0 - false - -
  • -
  • ARA_HiveMindWorker
  • 1.0 diff --git a/1.6/1.6/Defs/ThingDef_Races/ARA_RaceNodeSwarm.xml b/1.6/1.6/Defs/ThingDef_Races/ARA_RaceNodeSwarm.xml index f7cf914..c80146c 100644 --- a/1.6/1.6/Defs/ThingDef_Races/ARA_RaceNodeSwarm.xml +++ b/1.6/1.6/Defs/ThingDef_Races/ARA_RaceNodeSwarm.xml @@ -711,8 +711,7 @@ ArachnaeNode_Race_Myrmecocystus - - 阿拉克涅大型督虫之一,拥有广泛食谱的大型虫族,可以吞下许多未经处理的生物并将其分解为阿拉克涅虫蜜,以滋养虫群。\n\n她可以进行搬运、烹饪和种植工作,战斗技能非常差。\n\n作为督虫,她可以繁育并监管若干阿拉克涅食腐种辅虫,以协助巢穴进行收割和播种工作。 + 阿拉克涅大型督虫之一,拥有广泛食谱的大型虫族,可以吞下许多未经处理的生物并将其分解为阿拉克涅虫蜜,以滋养虫群。\n\n她可以进行搬运、烹饪和种植工作,战斗技能非常差。\n\n作为督虫,她可以繁育并监管若干阿拉克涅食腐种辅虫,以协助巢穴进行收割和播种工作。 @@ -835,8 +834,7 @@ ArachnaeNode_Race_ShieldHead - - 阿拉克涅督虫之一,拥有过度生长而覆盖头部和腿部的甲壳,可以定时剥落甲壳素供虫巢使用。\n\n她可以进行搬运、采矿和建筑工作,战斗技能平平无奇,但是拥有较好的防御。\n\n作为督虫,她可以繁育并监管若干阿拉克涅坚颚种辅虫,以协助巢穴开采矿脉。 + 阿拉克涅督虫之一,拥有过度生长而覆盖头部和腿部的甲壳,可以定时剥落甲壳素供虫巢使用。\n\n她可以进行搬运、采矿和建筑工作,战斗技能平平无奇,但是拥有较好的防御。\n\n作为督虫,她可以繁育并监管若干阿拉克涅坚颚种辅虫,以协助巢穴开采矿脉。 @@ -984,8 +982,7 @@ ArachnaeNode_Race_WeaponSmith - - 阿拉克涅督虫之一,是少数拥有结茧能力的非女皇种阿拉克涅虫族——她们可以排出一枚器官茧,这枚茧将按照其信息素所标定的方向定向演化出一个武装器官,以供虫群使用。\n\n她可以进行搬运、手工和艺术工作,战斗技能平平无奇,但本身极度脆弱。\n\n作为督虫,她可以繁育并监管若干阿拉克涅家政种辅虫,以协助巢穴进行清洁和搬运工作。 + 阿拉克涅督虫之一,是少数拥有结茧能力的非女皇种阿拉克涅虫族——她们可以排出一枚器官茧,这枚茧将按照其信息素所标定的方向定向演化出一个武装器官,以供虫群使用。\n\n她可以进行搬运、手工和艺术工作,战斗技能平平无奇,但本身极度脆弱。\n\n作为督虫,她可以繁育并监管若干阿拉克涅家政种辅虫,以协助巢穴进行清洁和搬运工作。 @@ -1101,8 +1098,7 @@ ArachnaeNode_Race_Fighter - - 阿拉克涅督虫之一,是巢穴中真正的战士,其拥有强大的可塑性基因,随着科技的解锁其将获得更多的能力。\n\n她可以进行搬运、狩猎和驯兽工作,战斗技能非常亮眼,并且移动敏捷。\n\n作为督虫,她可以向敌人投射寿命有限但是非常恼人的阿拉克涅酸噬种辅虫,以阻止敌人的远程火力开火。 + 阿拉克涅督虫之一,是巢穴中真正的战士,其拥有强大的可塑性基因,随着科技的解锁其将获得更多的能力。\n\n她可以进行搬运、狩猎和驯兽工作,战斗技能非常亮眼,并且移动敏捷。\n\n作为督虫,她可以向敌人投射寿命有限但是非常恼人的阿拉克涅酸噬种辅虫,以阻止敌人的远程火力开火。 @@ -1235,8 +1231,7 @@ ArachnaeNode_Race_Facehugger - - 阿拉克涅督虫之一,呈现高度未分化状态的特殊督虫,可以通过独特的神经链接管控制受害者的身体,并释放灵能信号以使得周围的人忽略其存在。然而她本身实在过于脆弱,在完成寄生前难以胜任任何工作。\n\n她可以进行所有非研究工作,战斗技能约等于无。\n\n不同于普通阿拉克涅虫族,高度未分化的身体决定了其无法孕育任何辅虫。 + 阿拉克涅督虫之一,呈现高度未分化状态的特殊督虫,可以通过独特的神经链接管控制受害者的身体,并释放灵能信号以使得周围的人忽略其存在。然而她本身实在过于脆弱,在完成寄生前难以胜任任何工作。\n\n她可以进行所有非研究工作,战斗技能约等于无。\n\n不同于普通阿拉克涅虫族,高度未分化的身体决定了其无法孕育任何辅虫。 @@ -1295,8 +1290,7 @@ ArachnaeNode_Race_Smokepop - - 阿拉克涅大型督虫之一,身披厚重甲壳的大型虫族,拥有在大范围内喷射信息素以召唤辅虫虫群能力,虽然移动速度比较慢,但是在战斗中就如同装甲车一样难以撼动。\n\n她可以进行搬运和医护工作,拥有不错的战斗技能,防御力和伤害耐受能力强大。\n\n作为督虫,她可以繁育并监管大量阿拉克涅家政种辅虫,以协助巢穴进行清洁和搬运工作。 + 阿拉克涅大型督虫之一,身披厚重甲壳的大型虫族,拥有在大范围内喷射信息素以召唤辅虫虫群能力,虽然移动速度比较慢,但是在战斗中就如同装甲车一样难以撼动。\n\n她可以进行搬运和医护工作,拥有不错的战斗技能,防御力和伤害耐受能力强大。\n\n作为督虫,她可以繁育并监管大量阿拉克涅家政种辅虫,以协助巢穴进行清洁和搬运工作。 @@ -1425,8 +1419,7 @@ ArachnaeNode_Race_Skyraider - - 阿拉克涅大型督虫之一,众督虫中的精锐,身材巨大并且拥有引以为傲的飞行能力,是巢穴中无可争议的空中霸主。\n\n她可以进行搬运工作,拥有不错的战斗技能,在战场上行动时非常灵活。\n\n作为督虫,她可以向敌人发射天巢种辅虫,这种辅虫会自动修正姿态追踪敌军,并在命中后对敌人进行持续啃咬。 + 阿拉克涅大型督虫之一,众督虫中的精锐,身材巨大并且拥有引以为傲的飞行能力,是巢穴中无可争议的空中霸主。\n\n她可以进行搬运工作,拥有不错的战斗技能,在战场上行动时非常灵活。\n\n作为督虫,她可以向敌人发射天巢种辅虫,这种辅虫会自动修正姿态追踪敌军,并在命中后对敌人进行持续啃咬。 @@ -1551,8 +1544,7 @@ ArachnaeNode_Race_NeuroSwarm - - 阿拉克涅督虫之一,是阿拉克涅虫群中最为特殊的虫族,织域种虽然受到女皇种监管,但仍然具有强大的高级智慧和自我意志,织域种之间能够构建一种高度互联的神经网络从而进行复杂的研究和计算工作,织域种进行计算工作时无法感知外界环境,因此她们是虫群的重要保护对象。 + 阿拉克涅督虫之一,是阿拉克涅虫群中最为特殊的虫族,织域种虽然受到女皇种监管,但仍然具有强大的高级智慧和自我意志,织域种之间能够构建一种高度互联的神经网络从而进行复杂的研究和计算工作,织域种进行计算工作时无法感知外界环境,因此她们是虫群的重要保护对象。 diff --git a/1.6/1.6/Defs/ThingDef_Races/ARA_RaceQueen.xml b/1.6/1.6/Defs/ThingDef_Races/ARA_RaceQueen.xml index 6617662..3c653a7 100644 --- a/1.6/1.6/Defs/ThingDef_Races/ARA_RaceQueen.xml +++ b/1.6/1.6/Defs/ThingDef_Races/ARA_RaceQueen.xml @@ -418,8 +418,9 @@
  • ArachnaeBase_Race_Scavenger
  • ArachnaeBase_Race_HardJaw
  • +
  • ArachnaeBase_Race_Maid
  • - false + true diff --git a/1.6/1.6/Defs/Thing_Misc/ARA_Medicine.xml b/1.6/1.6/Defs/Thing_Misc/ARA_Medicine.xml index 112ea03..51f86e6 100644 --- a/1.6/1.6/Defs/Thing_Misc/ARA_Medicine.xml +++ b/1.6/1.6/Defs/Thing_Misc/ARA_Medicine.xml @@ -19,6 +19,8 @@ 1.00 2 700 + 10 + 2 Rare @@ -26,6 +28,12 @@ 150 true +
  • + +
  • ARA_Cocoon_Medicine
  • +
  • ARA_BioforgeIncubator_Thing
  • + +
    20 @@ -49,6 +57,8 @@ 1000 50 0.01 + 20 + 5 Animal @@ -74,6 +84,12 @@ 1 1000 +
  • + +
  • ARA_Cocoon_Medicine
  • +
  • ARA_BioforgeIncubator_Thing
  • + + diff --git a/1.6/1.6/Defs/Thing_building/ARA_Building.xml b/1.6/1.6/Defs/Thing_building/ARA_Building.xml index acd448c..8843bda 100644 --- a/1.6/1.6/Defs/Thing_building/ARA_Building.xml +++ b/1.6/1.6/Defs/Thing_building/ARA_Building.xml @@ -192,7 +192,7 @@ 5 - 2 + 1 false true @@ -295,7 +295,7 @@ 50 - 3 + 2 ArachnaeSwarm/Building/ARA_Tumor @@ -348,7 +348,7 @@ ARA_Buildings - 10 + 20 2995 ARA_Creep @@ -393,6 +393,7 @@ 50 + 10 ArachnaeSwarm/Building/ARA_ResearchBench @@ -474,7 +475,7 @@ (1,2) 3 - 15 + 25 2010 0.5 @@ -596,12 +597,13 @@ ARA_Creep 400 - 100 + 1200 1.0 Rare - 30 + 50 + 20
  • PlaceWorker_Vent
  • @@ -659,7 +661,8 @@ 0 - 50 + 150 + 25 false 0 @@ -715,18 +718,6 @@ 25 true -
  • - Bacterium - 活体钜菌 - - -
  • ARA_Activated_Bacterium
  • - - - 25 - 1 - true -
  • ARA_InsectCreep diff --git a/1.6/1.6/Languages/ChineseSimplified (简体中文)/Keyed/ArachnaeSwarm_Keys.xml b/1.6/1.6/Languages/ChineseSimplified (简体中文)/Keyed/ArachnaeSwarm_Keys.xml index 197e7be..5f7831b 100644 --- a/1.6/1.6/Languages/ChineseSimplified (简体中文)/Keyed/ArachnaeSwarm_Keys.xml +++ b/1.6/1.6/Languages/ChineseSimplified (简体中文)/Keyed/ArachnaeSwarm_Keys.xml @@ -48,4 +48,11 @@ 将破坏:{0} 施法者已死亡 没有可破坏的身体部位 + + 为囚犯/奴隶分配运送者 + 选择一个虫群成员将囚犯或奴隶带到阿拉克涅消化茧中 + 没有可用的虫群成员来携带囚犯 + 已指派{0}将{1}运送到阿拉克涅消化茧 + 没有可用的虫群成员运送者 + 没有可用的囚犯或奴隶 \ No newline at end of file diff --git a/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/.suo b/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/.suo index e73d86e..ab2b636 100644 Binary files a/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/.suo and b/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/.suo differ diff --git a/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/DocumentLayout.json b/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/DocumentLayout.json index c816232..d175f61 100644 --- a/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/DocumentLayout.json +++ b/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/DocumentLayout.json @@ -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": "" } ] diff --git a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj index 3c8dc35..aff9a51 100644 --- a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj +++ b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj @@ -170,6 +170,7 @@ + diff --git a/Source/ArachnaeSwarm/Building_Comps/ARA_NutrientVat/Building_NutrientVat.cs b/Source/ArachnaeSwarm/Building_Comps/ARA_NutrientVat/Building_NutrientVat.cs index 080a398..484a248 100644 --- a/Source/ArachnaeSwarm/Building_Comps/ARA_NutrientVat/Building_NutrientVat.cs +++ b/Source/ArachnaeSwarm/Building_Comps/ARA_NutrientVat/Building_NutrientVat.cs @@ -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 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.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.Get("UI/Designators/Cancel"), - // action = () => - // { - // if (selectedPawn?.CurJobDef == JobDefOf.EnterBuilding) - // { - // selectedPawn.jobs.EndCurrentJob(JobCondition.InterruptForced); - // } - // OnStop(); - // } - // }; - //} - + // ԭеѡֳߵIJ 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; + + // ָɰ/ūIJ + var command_CarryPrisoner = new Command_Action + { + defaultLabel = "AssignCarryPrisoner".Translate() + "...", + defaultDesc = "AssignCarryPrisonerDesc".Translate(), + icon = ContentFinder.Get("UI/Commands/Attack"), + action = () => + { + List list = new List(); + + // ȡпɽܵū + 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.GetNamed("ARA_CarryPrisonerToNutrientVat"); + if (carryJobDef == null) + return null; + Job job = JobMaker.MakeJob(carryJobDef, prisoner, this); + job.count = 1; + return job; + } + public IEnumerable GetAvailableCarriers() + { + foreach (Pawn pawn in base.Map.mapPawns.AllPawnsSpawned) + { + // ǷdzȺԱӵ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 options = new List(); + + 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); + } + } } } \ No newline at end of file diff --git a/Source/ArachnaeSwarm/JobDriver_CarryPrisonerToNutrientVat.cs b/Source/ArachnaeSwarm/JobDriver_CarryPrisonerToNutrientVat.cs new file mode 100644 index 0000000..546a5c0 --- /dev/null +++ b/Source/ArachnaeSwarm/JobDriver_CarryPrisonerToNutrientVat.cs @@ -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 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; + } + } +} diff --git a/mod.vdf b/mod.vdf new file mode 100644 index 0000000..a6de8fc --- /dev/null +++ b/mod.vdf @@ -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" +} \ No newline at end of file