diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll index c8c769f..e10a3f0 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/BackstoryDefs/ARA_BackstoryDef.xml b/1.6/1.6/Defs/BackstoryDefs/ARA_BackstoryDef.xml index fe65e8f..e12485f 100644 --- a/1.6/1.6/Defs/BackstoryDefs/ARA_BackstoryDef.xml +++ b/1.6/1.6/Defs/BackstoryDefs/ARA_BackstoryDef.xml @@ -100,7 +100,6 @@ -10 -10 - 50 @@ -128,9 +127,6 @@
  • Artistic
  • Intellectual
  • - - 50 -
  • ArachnaeNode_spawnCategories_ShieldHead
  • @@ -157,9 +153,6 @@
  • Intellectual
  • - - 50 -
  • ArachnaeNode_spawnCategories_WeaponSmith
  • @@ -186,10 +179,6 @@
  • Artistic
  • Intellectual
  • - - 50 - 50 -
  • ArachnaeNode_spawnCategories_Fighter
  • @@ -216,10 +205,6 @@
  • Artistic
  • Intellectual
  • - - 30 - 30 -
  • ArachnaeNode_spawnCategories_Smokepop
  • @@ -246,10 +231,6 @@
  • Artistic
  • Intellectual
  • - - 80 - 50 -
  • ArachnaeNode_spawnCategories_Skyraider
  • @@ -300,9 +281,6 @@
  • Caring
  • - - 100 -
  • ArachnaeNode_spawnCategories_NeuroSwarm
  • diff --git a/1.6/1.6/Defs/EvolutionDefs/ARA_Evolution.xml b/1.6/1.6/Defs/EvolutionDefs/ARA_Evolution.xml index 8796f2f..107b37c 100644 --- a/1.6/1.6/Defs/EvolutionDefs/ARA_Evolution.xml +++ b/1.6/1.6/Defs/EvolutionDefs/ARA_Evolution.xml @@ -1119,8 +1119,8 @@ 1
  • - ARA_Technology_1VTE - 需要科技 节点VTE-1"护卫者" 以解锁进化 + ARA_Technology_6LOD + 需要科技 节点LOD-6"巢之主" 以解锁进化
  • diff --git a/1.6/1.6/Defs/HediffDefs/ARA_Hediffs_HiveMind.xml b/1.6/1.6/Defs/HediffDefs/ARA_Hediffs_HiveMind.xml index 0f0052a..81c6ade 100644 --- a/1.6/1.6/Defs/HediffDefs/ARA_Hediffs_HiveMind.xml +++ b/1.6/1.6/Defs/HediffDefs/ARA_Hediffs_HiveMind.xml @@ -134,7 +134,7 @@ ARA_TemperatureRegulation - 阿拉克涅虫族是冷血动物,这代表着她们对外界的温度变化更加敏感——在适宜温度下她们将变得敏捷而致命,在不适温度下她们将难以行动。\n\n此类阿拉克涅虫族可以接受在16~26°C的温度下活动,温度接近21°C时会获得额外的意识加成。 + 阿拉克涅虫族是冷血动物,这代表着她们对外界的温度变化更加敏感——在适宜温度下她们将变得敏捷而致命,在不适温度下她们将难以行动。\n\n此类阿拉克涅虫族可以接受在6~36°C的温度下活动,温度接近21°C时会获得额外的意识加成。 Hediff_High (0.6, 0.8, 0.9) 1.0 @@ -142,8 +142,8 @@ 0.5
  • - 16 - 26 + 6 + 36 0.01 -0.01
  • @@ -176,7 +176,7 @@
  • Consciousness - -0.5 + 0.5
  • diff --git a/1.6/1.6/Defs/ResearchProjectDefs/ARA_ResearchProjects.xml b/1.6/1.6/Defs/ResearchProjectDefs/ARA_ResearchProjects.xml index 179b90a..884b0f8 100644 --- a/1.6/1.6/Defs/ResearchProjectDefs/ARA_ResearchProjects.xml +++ b/1.6/1.6/Defs/ResearchProjectDefs/ARA_ResearchProjects.xml @@ -584,7 +584,7 @@ ARA_Technology_6LOD - + 允许空天种进行定向进化,以牺牲高速和高空机动的能力换取向敌人投射大量天巢种的能力。 2500 10.00 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 f7544d6..f7cf914 100644 --- a/1.6/1.6/Defs/ThingDef_Races/ARA_RaceNodeSwarm.xml +++ b/1.6/1.6/Defs/ThingDef_Races/ARA_RaceNodeSwarm.xml @@ -629,6 +629,8 @@
  • ARA_Surgery_Install_Reactive_Shell
  • ARA_Surgery_Install_Strengthening_Tendon
  • ARA_Surgery_Install_Slide_Patagium
  • +
  • ARA_Surgery_Install_Acidling_Pouch
  • +
  • ARA_Surgery_Install_Tumor_Pouch
  • @@ -658,6 +660,7 @@
  • +
  • ARA_RaceBaseSwarmProduceSwitchHediff
  • ARA_HiveMindDrone
  • ARA_HiveStrength_Low
  • @@ -708,7 +711,8 @@ ArachnaeNode_Race_Myrmecocystus - 阿拉克涅大型督虫之一,拥有广泛食谱的大型虫族,可以吞下许多未经处理的生物并将其分解为阿拉克涅虫蜜,以滋养虫群。\n\n她可以进行搬运、烹饪和种植工作,战斗技能非常差。\n\n作为督虫,她可以繁育并监管若干阿拉克涅食腐种辅虫,以协助巢穴进行收割和播种工作。 + + 阿拉克涅大型督虫之一,拥有广泛食谱的大型虫族,可以吞下许多未经处理的生物并将其分解为阿拉克涅虫蜜,以滋养虫群。\n\n她可以进行搬运、烹饪和种植工作,战斗技能非常差。\n\n作为督虫,她可以繁育并监管若干阿拉克涅食腐种辅虫,以协助巢穴进行收割和播种工作。 @@ -803,17 +807,36 @@
  • +
  • ARA_RaceBaseSwarmProduceSwitchHediff
  • ARA_Myrmecocystus_Production_InsectJelly
  • 1.0 false +
  • + 1.0 + false + +
  • + Plants + + 1 + + 10 + + 18000 + 36000 + +
  • + +
    ArachnaeNode_Race_ShieldHead - 阿拉克涅督虫之一,拥有过度生长而覆盖头部和腿部的甲壳,可以定时剥落甲壳素供虫巢使用。\n\n她可以进行搬运、采矿和建筑工作,战斗技能平平无奇,但是拥有较好的防御。\n\n作为督虫,她可以繁育并监管若干阿拉克涅坚颚种辅虫,以协助巢穴开采矿脉。 + + 阿拉克涅督虫之一,拥有过度生长而覆盖头部和腿部的甲壳,可以定时剥落甲壳素供虫巢使用。\n\n她可以进行搬运、采矿和建筑工作,战斗技能平平无奇,但是拥有较好的防御。\n\n作为督虫,她可以繁育并监管若干阿拉克涅坚颚种辅虫,以协助巢穴开采矿脉。 @@ -909,6 +932,7 @@
  • +
  • ARA_RaceBaseSwarmProduceSwitchHediff
  • ARA_ShieldHead_Base
  • 1.0 @@ -938,12 +962,30 @@ 阿拉克涅的督虫们生命如精密的发条般运转着。 true +
  • + 1.0 + false + +
  • + Construction + + 1 + + 10 + + 18000 + 36000 + +
  • + +
    ArachnaeNode_Race_WeaponSmith - 阿拉克涅督虫之一,是少数拥有结茧能力的非女皇种阿拉克涅虫族——她们可以排出一枚器官茧,这枚茧将按照其信息素所标定的方向定向演化出一个武装器官,以供虫群使用。\n\n她可以进行搬运、手工和艺术工作,战斗技能平平无奇,但本身极度脆弱。\n\n作为督虫,她可以繁育并监管若干阿拉克涅家政种辅虫,以协助巢穴进行清洁和搬运工作。 + + 阿拉克涅督虫之一,是少数拥有结茧能力的非女皇种阿拉克涅虫族——她们可以排出一枚器官茧,这枚茧将按照其信息素所标定的方向定向演化出一个武装器官,以供虫群使用。\n\n她可以进行搬运、手工和艺术工作,战斗技能平平无奇,但本身极度脆弱。\n\n作为督虫,她可以繁育并监管若干阿拉克涅家政种辅虫,以协助巢穴进行清洁和搬运工作。 @@ -994,8 +1036,6 @@ 0.1 0.1 0.05 - - 1.26 @@ -1008,6 +1048,7 @@
  • +
  • ARA_RaceBaseSwarmProduceSwitchHediff
  • ARA_WeaponSmith_0_Stage
  • 1.0 @@ -1038,12 +1079,30 @@ 阿拉克涅的督虫们生命如精密的发条般运转着。 true +
  • + 1.0 + false + +
  • + Crafting + + 1 + + 10 + + 18000 + 36000 + +
  • + +
    ArachnaeNode_Race_Fighter - 阿拉克涅督虫之一,是巢穴中真正的战士,其拥有强大的可塑性基因,随着科技的解锁其将获得更多的能力。\n\n她可以进行搬运、狩猎和驯兽工作,战斗技能非常亮眼,并且移动敏捷。\n\n作为督虫,她可以向敌人投射寿命有限但是非常恼人的阿拉克涅酸噬种辅虫,以阻止敌人的远程火力开火。 + + 阿拉克涅督虫之一,是巢穴中真正的战士,其拥有强大的可塑性基因,随着科技的解锁其将获得更多的能力。\n\n她可以进行搬运、狩猎和驯兽工作,战斗技能非常亮眼,并且移动敏捷。\n\n作为督虫,她可以向敌人投射寿命有限但是非常恼人的阿拉克涅酸噬种辅虫,以阻止敌人的远程火力开火。 @@ -1143,12 +1202,41 @@ ARA_Fighter_Invisibility 120 +
  • + 1.0 + false + +
  • + Shooting + + 1 + + 10 + + 18000 + 36000 + +
  • +
  • + Melee + + 1 + + 10 + + 18000 + 36000 + +
  • + +
    ArachnaeNode_Race_Facehugger - 阿拉克涅督虫之一,呈现高度未分化状态的特殊督虫,可以通过独特的神经链接管控制受害者的身体,并释放灵能信号以使得周围的人忽略其存在。然而她本身实在过于脆弱,在完成寄生前难以胜任任何工作。\n\n她可以进行所有非研究工作,战斗技能约等于无。\n\n不同于普通阿拉克涅虫族,高度未分化的身体决定了其无法孕育任何辅虫。 + + 阿拉克涅督虫之一,呈现高度未分化状态的特殊督虫,可以通过独特的神经链接管控制受害者的身体,并释放灵能信号以使得周围的人忽略其存在。然而她本身实在过于脆弱,在完成寄生前难以胜任任何工作。\n\n她可以进行所有非研究工作,战斗技能约等于无。\n\n不同于普通阿拉克涅虫族,高度未分化的身体决定了其无法孕育任何辅虫。 @@ -1207,7 +1295,8 @@ ArachnaeNode_Race_Smokepop - 阿拉克涅大型督虫之一,身披厚重甲壳的大型虫族,拥有在大范围内喷射信息素以召唤辅虫虫群能力,虽然移动速度比较慢,但是在战斗中就如同装甲车一样难以撼动。\n\n她可以进行搬运和医护工作,拥有不错的战斗技能,防御力和伤害耐受能力强大。\n\n作为督虫,她可以繁育并监管大量阿拉克涅家政种辅虫,以协助巢穴进行清洁和搬运工作。 + + 阿拉克涅大型督虫之一,身披厚重甲壳的大型虫族,拥有在大范围内喷射信息素以召唤辅虫虫群能力,虽然移动速度比较慢,但是在战斗中就如同装甲车一样难以撼动。\n\n她可以进行搬运和医护工作,拥有不错的战斗技能,防御力和伤害耐受能力强大。\n\n作为督虫,她可以繁育并监管大量阿拉克涅家政种辅虫,以协助巢穴进行清洁和搬运工作。 @@ -1272,6 +1361,7 @@
  • +
  • ARA_RaceBaseSwarmProduceSwitchHediff
  • ARA_Smokepop_Base
  • 1.0 @@ -1302,12 +1392,41 @@ 阿拉克涅的督虫们生命如精密的发条般运转着。 true +
  • + 1.0 + false + +
  • + Shooting + + 1 + + 10 + + 18000 + 24000 + +
  • +
  • + Melee + + 1 + + 10 + + 18000 + 24000 + +
  • + +
    ArachnaeNode_Race_Skyraider - 阿拉克涅大型督虫之一,众督虫中的精锐,身材巨大并且拥有引以为傲的飞行能力,是巢穴中无可争议的空中霸主。\n\n她可以进行搬运工作,拥有不错的战斗技能,在战场上行动时非常灵活。\n\n作为督虫,她可以向敌人发射天巢种辅虫,这种辅虫会自动修正姿态追踪敌军,并在命中后对敌人进行持续啃咬。 + + 阿拉克涅大型督虫之一,众督虫中的精锐,身材巨大并且拥有引以为傲的飞行能力,是巢穴中无可争议的空中霸主。\n\n她可以进行搬运工作,拥有不错的战斗技能,在战场上行动时非常灵活。\n\n作为督虫,她可以向敌人发射天巢种辅虫,这种辅虫会自动修正姿态追踪敌军,并在命中后对敌人进行持续啃咬。 @@ -1398,14 +1517,43 @@ 阿拉克涅的督虫们生命如精密的发条般运转着。 true +
  • + 1.0 + false + +
  • + Shooting + + 1 + + 10 + + 18000 + 24000 + +
  • +
  • + Melee + + 1 + + 10 + + 18000 + 24000 + +
  • + +
    ArachnaeNode_Race_NeuroSwarm - 阿拉克涅督虫之一,是阿拉克涅虫群中最为特殊的虫族,织域种虽然受到女皇种监管,但仍然具有强大的高级智慧和自我意志,织域种之间能够构建一种高度互联的神经网络从而进行复杂的研究和计算工作,织域种进行计算工作时无法感知外界环境,因此她们是虫群的重要保护对象。 - + + 阿拉克涅督虫之一,是阿拉克涅虫群中最为特殊的虫族,织域种虽然受到女皇种监管,但仍然具有强大的高级智慧和自我意志,织域种之间能够构建一种高度互联的神经网络从而进行复杂的研究和计算工作,织域种进行计算工作时无法感知外界环境,因此她们是虫群的重要保护对象。 + @@ -1745,15 +1893,15 @@ Humanlike - HumanStandard - Filth_BloodInsect - Filth_BloodSmear + HumanStandard + Filth_BloodInsect + Filth_BloodSmear - 6 + 6 4 - ARA_Carapace + ARA_Carapace Pawn_Melee_BigBash_HitPawn Pawn_Melee_BigBash_HitBuilding @@ -1845,6 +1993,7 @@
  • +
  • ARA_RaceBaseSwarmProduceSwitchHediff
  • ARA_HiveMindDrone
  • ARA_HiveStrength
  • ARA_Psi_Master
  • @@ -1853,6 +2002,23 @@ 1.0 false +
  • + 1.0 + false + +
  • + Intellectual + + 1 + + 10 + + 32000 + 48000 + +
  • + +
    \ No newline at end of file diff --git a/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/.suo b/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/.suo index 66d03ca..e73d86e 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 6e20ec9..c816232 100644 --- a/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/DocumentLayout.json +++ b/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/DocumentLayout.json @@ -2,6 +2,14 @@ "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\\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\\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}" @@ -27,19 +35,45 @@ { "$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==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-10-01T06:00:46.388Z", + "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==", + "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": "AgIAAKABAAAAAAAAAAAUwLoBAAAUAAAAAAAAAA==", + "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": 1, + "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", diff --git a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj index 38b2ea5..3c8dc35 100644 --- a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj +++ b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj @@ -170,6 +170,8 @@ + + diff --git a/Source/ArachnaeSwarm/Pawn_Comps/ARA_CompSkillExperienceGiver/CompProperties_SkillExperienceGiver.cs b/Source/ArachnaeSwarm/Pawn_Comps/ARA_CompSkillExperienceGiver/CompProperties_SkillExperienceGiver.cs new file mode 100644 index 0000000..4ad255f --- /dev/null +++ b/Source/ArachnaeSwarm/Pawn_Comps/ARA_CompSkillExperienceGiver/CompProperties_SkillExperienceGiver.cs @@ -0,0 +1,46 @@ +using RimWorld; +using System; +using System.Collections.Generic; +using Verse; + +namespace ArachnaeSwarm +{ + public class CompProperties_SkillExperienceGiver : CompProperties + { + // 技能经验配置列表 + public List skillExperiences; + + // 全局添加概率(0-1之间) + public float addChance = 1.0f; + + // 调试模式 + public bool debug = false; + + public CompProperties_SkillExperienceGiver() + { + this.compClass = typeof(CompSkillExperienceGiver); + } + } + + // 技能经验配置类 + public class SkillExperienceConfig + { + // 技能定义 + public SkillDef skillDef; + + // 基础经验值(如果使用固定值) + public float experienceAmount = 0f; + + // 经验范围(如果使用随机值,优先于固定值) + public FloatRange? experienceRange = null; + + // 该技能的经验给予概率(0-1之间) + public float skillChance = 1.0f; + + // 可选:最小技能等级限制(只有达到该等级才会给予经验) + public int minSkillLevel = 0; + + // 可选:最大技能等级限制(只有低于该等级才会给予经验) + public int maxSkillLevel = 20; + } +} diff --git a/Source/ArachnaeSwarm/Pawn_Comps/ARA_CompSkillExperienceGiver/CompSkillExperienceGiver.cs b/Source/ArachnaeSwarm/Pawn_Comps/ARA_CompSkillExperienceGiver/CompSkillExperienceGiver.cs new file mode 100644 index 0000000..4d5cfa2 --- /dev/null +++ b/Source/ArachnaeSwarm/Pawn_Comps/ARA_CompSkillExperienceGiver/CompSkillExperienceGiver.cs @@ -0,0 +1,139 @@ +using System; +using System.Collections.Generic; +using Verse; +using RimWorld; + +namespace ArachnaeSwarm +{ + public class CompSkillExperienceGiver : ThingComp + { + public CompProperties_SkillExperienceGiver Props => (CompProperties_SkillExperienceGiver)this.props; + + private int ticksToWait = 5; // 等待5个tick确保完全初始化 + private bool experienceGiven = false; + + public override void PostSpawnSetup(bool respawningAfterLoad) + { + base.PostSpawnSetup(respawningAfterLoad); + + // 重置状态 + experienceGiven = false; + ticksToWait = 5; + } + + public override void CompTick() + { + base.CompTick(); + + if (!experienceGiven && this.parent is Pawn pawn) + { + if (ticksToWait > 0) + { + ticksToWait--; + return; + } + + GiveSkillExperienceToPawn(pawn); + experienceGiven = true; + } + } + + private void GiveSkillExperienceToPawn(Pawn pawn) + { + // 安全检查pawn和技能系统 + if (pawn == null || pawn.Destroyed || !pawn.Spawned) + return; + + if (pawn.skills == null) + return; + + // 检查是否有技能经验列表 + if (Props.skillExperiences == null || Props.skillExperiences.Count == 0) + return; + + // 检查全局概率 + if (Props.addChance < 1.0f && Rand.Value > Props.addChance) + return; + + // 为每个配置的技能给予经验 + foreach (var skillExp in Props.skillExperiences) + { + try + { + // 检查技能定义是否存在 + if (skillExp.skillDef == null) + continue; + + // 检查技能特定的概率 + if (skillExp.skillChance < 1.0f && Rand.Value > skillExp.skillChance) + continue; + + // 获取技能记录 + SkillRecord skillRecord = pawn.skills.GetSkill(skillExp.skillDef); + + // 检查技能是否可用 + if (skillRecord == null || skillRecord.TotallyDisabled) + continue; + + // 检查技能等级限制 + int currentLevel = skillRecord.Level; + if (currentLevel < skillExp.minSkillLevel || currentLevel > skillExp.maxSkillLevel) + continue; + + // 给予经验值 + float experienceToGive = skillExp.experienceAmount; + + // 如果有随机范围,则使用随机值 + if (skillExp.experienceRange != null && skillExp.experienceRange.Value.min >= 0) + { + experienceToGive = Rand.Range(skillExp.experienceRange.Value.min, skillExp.experienceRange.Value.max); + } + + // 应用经验 - 使用安全的方式 + if (experienceToGive > 0) + { + // 直接修改经验值,避免触发绘制相关的计算 + skillRecord.xpSinceLastLevel += experienceToGive; + + // 检查是否需要升级 + int originalLevel = skillRecord.Level; + while (skillRecord.xpSinceLastLevel >= skillRecord.XpRequiredForLevelUp) + { + // 检查是否已达到最大等级 + if (skillRecord.Level >= 20) // RimWorld中技能最大等级是20 + break; + + skillRecord.xpSinceLastLevel -= skillRecord.XpRequiredForLevelUp; + skillRecord.Level++; + } + + // 可选:记录日志(调试用) + if (Props.debug) + { + if (skillRecord.Level > originalLevel) + { + Log.Message($"{pawn.LabelShort} gained {experienceToGive} experience in {skillExp.skillDef.label} (Level up: {originalLevel} -> {skillRecord.Level})"); + } + else + { + Log.Message($"{pawn.LabelShort} gained {experienceToGive} experience in {skillExp.skillDef.label} (Current level: {skillRecord.Level}, Progress: {skillRecord.xpSinceLastLevel}/{skillRecord.XpRequiredForLevelUp})"); + } + } + } + } + catch (Exception ex) + { + // 记录错误但继续处理其他技能 + Log.Warning($"Error giving experience to {pawn.LabelShort} for skill {skillExp.skillDef?.defName}: {ex.Message}"); + } + } + } + + public override void PostExposeData() + { + base.PostExposeData(); + Scribe_Values.Look(ref ticksToWait, "ticksToWait", 5); + Scribe_Values.Look(ref experienceGiven, "experienceGiven", false); + } + } +}