diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll index 4d728ea..4edd339 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/HediffDefs/ARA_Hediffs_Incubator_Reward.xml b/1.6/1.6/Defs/HediffDefs/ARA_Hediffs_Incubator_Reward.xml index fe87e05..85efad1 100644 --- a/1.6/1.6/Defs/HediffDefs/ARA_Hediffs_Incubator_Reward.xml +++ b/1.6/1.6/Defs/HediffDefs/ARA_Hediffs_Incubator_Reward.xml @@ -1,84 +1,5 @@ - - ARA_Incubator_1_Flaw_Hediffs - - 急速的孵化使得该阿拉克涅督虫的内分泌系统发育异常,体内各种激素长期维持在低水平。\n\n由于较差的孵化质量,阿拉克涅督虫获得了这个不利突变。 - HediffWithComps - false - (0.9, 0.2 , 0.1) - true - -
  • - - -1 - -
  • -
    -
    - - ARA_Incubator_2_Flaw_Hediffs - - 急速的孵化使得该阿拉克涅督虫没有发育出完整的外骨骼,这使得它们弱不禁风。\n\n由于较差的孵化质量,阿拉克涅督虫获得了这个不利突变。 - HediffWithComps - false - (0.9, 0.2 , 0.1) - true - -
  • - - -0.3 - -0.3 - -
  • -
    -
    - - ARA_Incubator_3_Flaw_Hediffs - - 急速的孵化使得该阿拉克涅督虫的神经系统非常迟钝,不仅记不住什么东西,甚至有些寻常的动作都会受到干扰。\n\n由于较差的孵化质量,阿拉克涅督虫获得了这个不利突变。 - HediffWithComps - false - (0.9, 0.2 , 0.1) - true - -
  • - -
  • - Consciousness - -0.1 -
  • - - - -0.5 - - -
    -
    - - ARA_Incubator_4_Flaw_Hediffs - - 急速的孵化使得该阿拉克涅督虫的外界感受器官发育不良。\n\n由于较差的孵化质量,阿拉克涅督虫获得了这个不利突变。 - HediffWithComps - false - (0.9, 0.2 , 0.1) - true - -
  • - -
  • - Sight - 0.1 -
  • -
  • - Hearing - 0.1 -
  • - - -
    -
    - ARA_Incubator_1_Reward_Hediffs @@ -218,6 +139,84 @@ + + ARA_Incubator_1_Flaw_Hediffs + + 急速的孵化使得该阿拉克涅督虫的内分泌系统发育异常,体内各种激素长期维持在低水平。\n\n由于较差的孵化质量,阿拉克涅督虫获得了这个不利突变。 + HediffWithComps + false + (0.9, 0.2 , 0.1) + true + +
  • + + -1 + +
  • +
    +
    + + ARA_Incubator_2_Flaw_Hediffs + + 急速的孵化使得该阿拉克涅督虫没有发育出完整的外骨骼,这使得它们弱不禁风。\n\n由于较差的孵化质量,阿拉克涅督虫获得了这个不利突变。 + HediffWithComps + false + (0.9, 0.2 , 0.1) + true + +
  • + + -0.3 + -0.3 + +
  • +
    +
    + + ARA_Incubator_3_Flaw_Hediffs + + 急速的孵化使得该阿拉克涅督虫的神经系统非常迟钝,不仅记不住什么东西,甚至有些寻常的动作都会受到干扰。\n\n由于较差的孵化质量,阿拉克涅督虫获得了这个不利突变。 + HediffWithComps + false + (0.9, 0.2 , 0.1) + true + +
  • + +
  • + Consciousness + -0.1 +
  • + + + -0.5 + + +
    +
    + + ARA_Incubator_4_Flaw_Hediffs + + 急速的孵化使得该阿拉克涅督虫的外界感受器官发育不良。\n\n由于较差的孵化质量,阿拉克涅督虫获得了这个不利突变。 + HediffWithComps + false + (0.9, 0.2 , 0.1) + true + +
  • + +
  • + Sight + 0.1 +
  • +
  • + Hearing + 0.1 +
  • + + +
    +
    ARA_Incubator_5_Flaw_Hediffs @@ -283,11 +282,10 @@ - - ARA_Incubator_Elite_Regeneration - - 该阿拉克涅督虫的甲壳密度远超常规个体,几乎坚不可摧,同时还具有优秀的热抗性。\n\n由于极佳的孵化质量,阿拉克涅督虫获得了这个稀有突变。 + ARA_Incubator_1_EliteReward_Hediffs + + 该阿拉克涅督虫的甲壳密度令人发指——这真的是一个生物可以从身上生长出来的组织吗?不过因为自重太大,这只督虫几乎难以移动。\n\n这个稀有突变是致密甲壳的变种。 HediffWithComps false (0.8, 0.6, 0.0) @@ -295,34 +293,113 @@
  • - 1.0 - 1.0 - 0.8 - -
  • -
    -
    - - - ARA_Incubator_Elite_AdaptiveArmor - - 该阿拉克涅督虫的腺体异常发达,持续分泌高浓度激素,使其处于极度亢奋状态,攻击速度惊人。\n\n由于极佳的孵化质量,阿拉克涅督虫获得了这个稀有突变。 - HediffWithComps - false - (0.8, 0.6, 0.0) - true - -
  • - - 1.5 + -1.5 - 0.4 - 0.5 + 1.75 + 1.75 + 0.25
  • + + ARA_Incubator_2_EliteReward_Hediffs + + 该阿拉克涅督虫的皮下层有一层致密的强酸性脂肪,这种流体使得督虫变得更加耐冲击、并且完全阻挡外部灼烧和酸蚀,还赋予督虫以酸液迸溅的方式向对其发起近战攻击的敌人反射伤害。\n\n这个稀有突变是壳下阻燃脂的变种。 + HediffWithComps + false + (0.8, 0.6, 0.0) + true + +
  • + + 0 + + + 0.25 + 0.25 + 2 + + + 0 + 0 + 0 + +
  • +
    + +
  • + 3 +
  • +
    +
    + + ARA_Incubator_3_EliteReward_Hediffs + + 该阿拉克涅督虫的激素腺体使得其血管内充斥着大量的激素,简直比磕了群勃龙醋酸群勃龙美替诺龙司腾博龙曲托龙西斯龙氧雄龙康复龙康力龙还要强大,一切敌人在其眼里几乎都是慢动作播放——但是这种透支生命的行为使得这只督虫必然承受短命的代价。\n\n这个稀有突变是行动激素的变种。 + HediffWithComps + false + (0.8, 0.6, 0.0) + true + +
  • + + 2 + + + 0.1 + 0.2 + +
  • +
    + +
  • + 2520000~2880000 + true +
  • +
  • + + + + ARA_Incubator_4_EliteReward_Hediffs + + 该阿拉克涅督虫的眼睛可以近乎无限地聚焦,并且几乎不需要时间进行射击瞄准。\n\n这个稀有突变是高静态视力的变种。 + HediffWithComps + false + (0.8, 0.6, 0.0) + true + +
  • + + 0.5 + 10 + 0.01 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0.1 + -0.1 + +
  • + + +
  • + 2520000~2880000 + true +
  • +
  • + + ARA_Incubator_Elite_BerserkGlands diff --git a/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/.suo b/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/.suo index 29ba43b..3e9f1b6 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 cabc5bc..b65a362 100644 --- a/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/DocumentLayout.json +++ b/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/DocumentLayout.json @@ -2,24 +2,32 @@ "Version": 1, "WorkspaceRootPath": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\", "Documents": [ + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\hediffs\\hediffcomp_reflectmeleedamage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:hediffs\\hediffcomp_reflectmeleedamage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\ara_defof.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:ara_defof.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, { "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\jobs\\jobdriver_supercarry\\jobdriver_supercarry.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:jobs\\jobdriver_supercarry\\jobdriver_supercarry.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\jobs\\jobdriver_swarmmaintain\\jobdriver_swarmmaintain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\jobs\\jobdriver_swarmmaintain\\jobdriver_swarmmaintain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:jobs\\jobdriver_swarmmaintain\\jobdriver_swarmmaintain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\jobs\\jobdriver_swarmmaintain\\jobgiver_swarmmaintain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\jobs\\jobdriver_swarmmaintain\\jobgiver_swarmmaintain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:jobs\\jobdriver_swarmmaintain\\jobgiver_swarmmaintain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\jobs\\jobdriver_swarmmaintain\\thinknode_conditionalshouldmaintain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\jobs\\jobdriver_swarmmaintain\\thinknode_conditionalshouldmaintain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:jobs\\jobdriver_swarmmaintain\\thinknode_conditionalshouldmaintain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\damage\\damageworker_explosionwithterrain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\damage\\damageworker_explosionwithterrain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:damage\\damageworker_explosionwithterrain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { @@ -98,24 +106,54 @@ "DocumentGroups": [ { "DockedWidth": 200, - "SelectedChildIndex": 0, + "SelectedChildIndex": 2, "Children": [ + { + "$type": "Bookmark", + "Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}" + }, + { + "$type": "Document", + "DocumentIndex": 1, + "Title": "ARA_DefOf.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\ARA_DefOf.cs", + "RelativeDocumentMoniker": "ARA_DefOf.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\ARA_DefOf.cs*", + "RelativeToolTip": "ARA_DefOf.cs*", + "ViewState": "AgIAAFQAAAAAAAAAAAAUwGcAAAAmAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2026-03-24T08:34:43.383Z", + "EditorCaption": "" + }, { "$type": "Document", "DocumentIndex": 0, + "Title": "HediffComp_ReflectMeleeDamage.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\HediffComp_ReflectMeleeDamage.cs", + "RelativeDocumentMoniker": "Hediffs\\HediffComp_ReflectMeleeDamage.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\HediffComp_ReflectMeleeDamage.cs*", + "RelativeToolTip": "Hediffs\\HediffComp_ReflectMeleeDamage.cs*", + "ViewState": "AgIAAFUAAAAAAAAAAAAowGoAAAA/AAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2026-03-24T08:33:52.75Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 2, "Title": "JobDriver_SuperCarry.cs", "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_SuperCarry\\JobDriver_SuperCarry.cs", "RelativeDocumentMoniker": "Jobs\\JobDriver_SuperCarry\\JobDriver_SuperCarry.cs", "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_SuperCarry\\JobDriver_SuperCarry.cs", "RelativeToolTip": "Jobs\\JobDriver_SuperCarry\\JobDriver_SuperCarry.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAABcAAABWAAAAAAAAAA==", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAA8AAAA3AAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2026-03-06T03:21:58.524Z", "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 1, + "DocumentIndex": 3, "Title": "JobDriver_SwarmMaintain.cs", "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_SwarmMaintain\\JobDriver_SwarmMaintain.cs", "RelativeDocumentMoniker": "Jobs\\JobDriver_SwarmMaintain\\JobDriver_SwarmMaintain.cs", @@ -123,16 +161,11 @@ "RelativeToolTip": "Jobs\\JobDriver_SwarmMaintain\\JobDriver_SwarmMaintain.cs", "ViewState": "AgIAAAAAAAAAAAAAAAAAABYAAAAXAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2026-03-06T03:21:31.585Z", - "EditorCaption": "" - }, - { - "$type": "Bookmark", - "Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}" + "WhenOpened": "2026-03-06T03:21:31.585Z" }, { "$type": "Document", - "DocumentIndex": 2, + "DocumentIndex": 4, "Title": "JobGiver_SwarmMaintain.cs", "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_SwarmMaintain\\JobGiver_SwarmMaintain.cs", "RelativeDocumentMoniker": "Jobs\\JobDriver_SwarmMaintain\\JobGiver_SwarmMaintain.cs", @@ -140,12 +173,11 @@ "RelativeToolTip": "Jobs\\JobDriver_SwarmMaintain\\JobGiver_SwarmMaintain.cs", "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2026-03-06T03:21:34.528Z", - "EditorCaption": "" + "WhenOpened": "2026-03-06T03:21:34.528Z" }, { "$type": "Document", - "DocumentIndex": 3, + "DocumentIndex": 5, "Title": "ThinkNode_ConditionalShouldMaintain.cs", "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_SwarmMaintain\\ThinkNode_ConditionalShouldMaintain.cs", "RelativeDocumentMoniker": "Jobs\\JobDriver_SwarmMaintain\\ThinkNode_ConditionalShouldMaintain.cs", @@ -153,12 +185,11 @@ "RelativeToolTip": "Jobs\\JobDriver_SwarmMaintain\\ThinkNode_ConditionalShouldMaintain.cs", "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2026-03-06T03:21:32.052Z", - "EditorCaption": "" + "WhenOpened": "2026-03-06T03:21:32.052Z" }, { "$type": "Document", - "DocumentIndex": 4, + "DocumentIndex": 6, "Title": "DamageWorker_ExplosionWithTerrain.cs", "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Damage\\DamageWorker_ExplosionWithTerrain.cs", "RelativeDocumentMoniker": "Damage\\DamageWorker_ExplosionWithTerrain.cs", @@ -166,12 +197,11 @@ "RelativeToolTip": "Damage\\DamageWorker_ExplosionWithTerrain.cs", "ViewState": "AgIAAA0AAAAAAAAAAAAQwB4AAAARAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2026-03-06T01:33:29.803Z", - "EditorCaption": "" + "WhenOpened": "2026-03-06T01:33:29.803Z" }, { "$type": "Document", - "DocumentIndex": 5, + "DocumentIndex": 7, "Title": "DamageDefExtension_TerrainCover.cs", "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Damage\\DamageDefExtension_TerrainCover.cs", "RelativeDocumentMoniker": "Damage\\DamageDefExtension_TerrainCover.cs", @@ -183,7 +213,7 @@ }, { "$type": "Document", - "DocumentIndex": 6, + "DocumentIndex": 8, "Title": "JobDriver_StripChitin.cs", "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_StripChitin\\JobDriver_StripChitin.cs", "RelativeDocumentMoniker": "Jobs\\JobDriver_StripChitin\\JobDriver_StripChitin.cs", @@ -195,7 +225,7 @@ }, { "$type": "Document", - "DocumentIndex": 7, + "DocumentIndex": 9, "Title": "JobDriver_FeedWithHoney.cs", "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_FeedWithHoney\\JobDriver_FeedWithHoney.cs", "RelativeDocumentMoniker": "Jobs\\JobDriver_FeedWithHoney\\JobDriver_FeedWithHoney.cs", @@ -207,7 +237,7 @@ }, { "$type": "Document", - "DocumentIndex": 8, + "DocumentIndex": 10, "Title": "JobGiver_ExtractHoney.cs", "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_ExtractHoney\\JobGiver_ExtractHoney.cs", "RelativeDocumentMoniker": "Jobs\\JobDriver_ExtractHoney\\JobGiver_ExtractHoney.cs", @@ -219,7 +249,7 @@ }, { "$type": "Document", - "DocumentIndex": 9, + "DocumentIndex": 11, "Title": "JobDriver_ExtractHoney.cs", "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_ExtractHoney\\JobDriver_ExtractHoney.cs", "RelativeDocumentMoniker": "Jobs\\JobDriver_ExtractHoney\\JobDriver_ExtractHoney.cs", @@ -231,7 +261,7 @@ }, { "$type": "Document", - "DocumentIndex": 12, + "DocumentIndex": 14, "Title": "WorldComponent_AircraftManager.cs", "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Flyover\\ARA_AircraftHangar\\WorldComponent_AircraftManager.cs", "RelativeDocumentMoniker": "Flyover\\ARA_AircraftHangar\\WorldComponent_AircraftManager.cs", @@ -243,7 +273,7 @@ }, { "$type": "Document", - "DocumentIndex": 11, + "DocumentIndex": 13, "Title": "GameComponent_DropPodInterceptor.cs", "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Flyover\\GameComponent_DropPodInterceptor.cs", "RelativeDocumentMoniker": "Flyover\\GameComponent_DropPodInterceptor.cs", @@ -255,7 +285,7 @@ }, { "$type": "Document", - "DocumentIndex": 10, + "DocumentIndex": 12, "Title": "CompAbilityEffect_ToggleDropPodIntercept.cs", "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\CompAbilityEffect_ToggleDropPodIntercept.cs", "RelativeDocumentMoniker": "Abilities\\CompAbilityEffect_ToggleDropPodIntercept.cs", @@ -267,7 +297,7 @@ }, { "$type": "Document", - "DocumentIndex": 13, + "DocumentIndex": 15, "Title": "HediffComp_GestaltNode.cs", "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_GestaltNode\\HediffComp_GestaltNode.cs", "RelativeDocumentMoniker": "Hediffs\\ARA_GestaltNode\\HediffComp_GestaltNode.cs", @@ -279,7 +309,7 @@ }, { "$type": "Document", - "DocumentIndex": 14, + "DocumentIndex": 16, "Title": "Comp_SwarmSpellHolder.cs", "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_SwarmSpellHolder\\Comp_SwarmSpellHolder.cs", "RelativeDocumentMoniker": "Pawn_Comps\\ARA_SwarmSpellHolder\\Comp_SwarmSpellHolder.cs", @@ -291,7 +321,7 @@ }, { "$type": "Document", - "DocumentIndex": 18, + "DocumentIndex": 20, "Title": "Building_ResearchBlueprintReader.cs", "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_ResearchBlueprintReader\\Building_ResearchBlueprintReader.cs", "RelativeDocumentMoniker": "Buildings\\Building_ResearchBlueprintReader\\Building_ResearchBlueprintReader.cs", @@ -303,7 +333,7 @@ }, { "$type": "Document", - "DocumentIndex": 17, + "DocumentIndex": 19, "Title": "ResearchBlueprintReaderManager.cs", "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_ResearchBlueprintReader\\ResearchBlueprintReaderManager.cs", "RelativeDocumentMoniker": "Buildings\\Building_ResearchBlueprintReader\\ResearchBlueprintReaderManager.cs", @@ -315,7 +345,7 @@ }, { "$type": "Document", - "DocumentIndex": 16, + "DocumentIndex": 18, "Title": "CompProperties_AbilityFanShapedStunKnockback.cs", "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\ARA_FanShapedStunKnockback\\CompProperties_AbilityFanShapedStunKnockback.cs", "RelativeDocumentMoniker": "Abilities\\ARA_FanShapedStunKnockback\\CompProperties_AbilityFanShapedStunKnockback.cs", @@ -327,7 +357,7 @@ }, { "$type": "Document", - "DocumentIndex": 15, + "DocumentIndex": 17, "Title": "CompAbilityEffect_FanShapedStunKnockback.cs", "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\ARA_FanShapedStunKnockback\\CompAbilityEffect_FanShapedStunKnockback.cs", "RelativeDocumentMoniker": "Abilities\\ARA_FanShapedStunKnockback\\CompAbilityEffect_FanShapedStunKnockback.cs", @@ -339,7 +369,7 @@ }, { "$type": "Document", - "DocumentIndex": 19, + "DocumentIndex": 21, "Title": "CompAbilityEffect_EjectOrgans.cs", "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\ARA_EjectOrgans\\CompAbilityEffect_EjectOrgans.cs", "RelativeDocumentMoniker": "Abilities\\ARA_EjectOrgans\\CompAbilityEffect_EjectOrgans.cs", @@ -351,7 +381,7 @@ }, { "$type": "Document", - "DocumentIndex": 21, + "DocumentIndex": 23, "Title": "CompHediffGiver.cs", "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_CompHediffGiver\\CompHediffGiver.cs", "RelativeDocumentMoniker": "Pawn_Comps\\ARA_CompHediffGiver\\CompHediffGiver.cs", @@ -363,7 +393,7 @@ }, { "$type": "Document", - "DocumentIndex": 20, + "DocumentIndex": 22, "Title": "CompProperties_HediffGiver.cs", "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_CompHediffGiver\\CompProperties_HediffGiver.cs", "RelativeDocumentMoniker": "Pawn_Comps\\ARA_CompHediffGiver\\CompProperties_HediffGiver.cs", diff --git a/Source/ArachnaeSwarm/ARA_DefOf.cs b/Source/ArachnaeSwarm/ARA_DefOf.cs index 6e86164..2f35e89 100644 --- a/Source/ArachnaeSwarm/ARA_DefOf.cs +++ b/Source/ArachnaeSwarm/ARA_DefOf.cs @@ -100,4 +100,13 @@ namespace ArachnaeSwarm DefOfHelper.EnsureInitializedInCtor(typeof(ARA_StatDefOf)); } } + [DefOf] + public static class ARA_ThingDefOf + { + public static ThingDef Mote_SparkSimple; + static ARA_ThingDefOf() + { + DefOfHelper.EnsureInitializedInCtor(typeof(ARA_ThingDefOf)); + } + } } \ No newline at end of file diff --git a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj index bf22df1..96afed6 100644 --- a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj +++ b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj @@ -312,6 +312,7 @@ + diff --git a/Source/ArachnaeSwarm/Hediffs/HediffComp_ReflectMeleeDamage.cs b/Source/ArachnaeSwarm/Hediffs/HediffComp_ReflectMeleeDamage.cs new file mode 100644 index 0000000..3e444e6 --- /dev/null +++ b/Source/ArachnaeSwarm/Hediffs/HediffComp_ReflectMeleeDamage.cs @@ -0,0 +1,298 @@ +using ArachnaeSwarm; +using RimWorld; +using System; +using System.Collections.Generic; +using UnityEngine; +using Verse; + +namespace ArachnaeSwarmVerse +{ + /// + /// 近战伤害反射组件的属性 + /// + public class HediffCompProperties_ReflectMeleeDamage : HediffCompProperties + { + public float reflectMultiplier = 3.0f; // 反射倍数,默认300% + public bool showReflectionEffect = true; // 是否显示反射效果 + public bool reflectOnlyMelee = true; // 是否只反射近战伤害 + public bool includeToolBasedRanged = false; // 是否包含使用工具的远程伤害 + public float minDamageToReflect = 0.1f; // 最小反射伤害阈值 + + public HediffCompProperties_ReflectMeleeDamage() + { + this.compClass = typeof(HediffComp_ReflectMeleeDamage); + } + } + + /// + /// 近战伤害反射组件 + /// 当Pawn受到近战伤害时,将300%的伤害反射给攻击者 + /// + public class HediffComp_ReflectMeleeDamage : HediffComp + { + private bool isProcessingReflection = false; // 防止递归调用 + private int lastReflectionTick = -100; // 上次反射的tick + private const int MIN_TICKS_BETWEEN_REFLECTIONS = 2; // 最小反射间隔 + + public HediffCompProperties_ReflectMeleeDamage Props => (HediffCompProperties_ReflectMeleeDamage)props; + + /// + /// 获取反射倍率 + /// + public float ReflectMultiplier => Props.reflectMultiplier; + + /// + /// 检查是否为近战伤害 + /// 根据题目要求:所有damageinfo有tool的,视为近战伤害 + /// + private bool IsMeleeDamage(DamageInfo dinfo) + { + // 如果有Tool,视为近战伤害 + if (dinfo.Tool != null) + { + return true; + } + + // 如果没有Tool,进一步检查武器类型 + if (dinfo.Weapon != null) + { + // 检查是否为近战武器 + if (dinfo.Weapon.IsMeleeWeapon) + { + return true; + } + + // 如果设置为包含使用工具的远程伤害,且武器有工具定义 + if (Props.includeToolBasedRanged && dinfo.Weapon.tools != null && dinfo.Weapon.tools.Count > 0) + { + return true; + } + } + + // 默认情况下,不视为近战伤害 + return false; + } + + /// + /// 检查是否应该反射此伤害 + /// + private bool ShouldReflectDamage(DamageInfo dinfo, Pawn pawn) + { + // 防止递归调用 + if (isProcessingReflection) + { + return false; + } + + // 检查最小伤害阈值 + if (dinfo.Amount < Props.minDamageToReflect) + { + return false; + } + + // 检查是否只反射近战伤害 + if (Props.reflectOnlyMelee && !IsMeleeDamage(dinfo)) + { + return false; + } + + // 检查伤害来源 + if (dinfo.Instigator == null || dinfo.Instigator == pawn) + { + return false; + } + + // 检查最小反射间隔 + if (Find.TickManager.TicksGame - lastReflectionTick < MIN_TICKS_BETWEEN_REFLECTIONS) + { + return false; + } + + // 检查攻击者是否有效 + Pawn attacker = dinfo.Instigator as Pawn; + if (attacker != null && (attacker.Dead || attacker.Destroyed)) + { + return false; + } + + return true; + } + + /// + /// 反射伤害给攻击者 + /// + private void ReflectDamageToAttacker(DamageInfo originalDinfo, Pawn pawn) + { + try + { + isProcessingReflection = true; + lastReflectionTick = Find.TickManager.TicksGame; + + // 计算反射伤害 + float reflectedAmount = originalDinfo.Amount * ReflectMultiplier; + + // 确保有最小伤害 + if (reflectedAmount < 1f) + { + reflectedAmount = 1f; + } + + // 获取攻击者 + Thing attacker = originalDinfo.Instigator; + if (attacker == null || attacker.Destroyed) + { + return; + } + + // 创建反射伤害信息 + DamageInfo reflectedDinfo = new DamageInfo( + def: originalDinfo.Def, + amount: reflectedAmount, + armorPenetration: originalDinfo.ArmorPenetrationInt, + angle: Rand.Range(0, 359), + instigator: pawn, // 反射者作为伤害来源 + hitPart: null, + weapon: originalDinfo.Weapon, + category: DamageInfo.SourceCategory.ThingOrUnknown, + intendedTarget: attacker + ); + + // 设置反射伤害的特殊属性 + reflectedDinfo.SetAllowDamagePropagation(true); + reflectedDinfo.SetIgnoreArmor(false); + + // 如果有Tool,传递Tool信息(但标记为反射伤害) + if (originalDinfo.Tool != null) + { + reflectedDinfo.SetTool(originalDinfo.Tool); + } + + // 记录日志 + if (Prefs.DevMode) + { + Log.Message($"[ReflectMeleeDamage] {pawn.LabelShortCap} reflected {reflectedAmount:F1} damage " + + $"({originalDinfo.Amount:F1} × {ReflectMultiplier:F1}) to {attacker.LabelShortCap}"); + } + + // 对攻击者造成伤害 + attacker.TakeDamage(reflectedDinfo); + + // 显示反射效果 + if (Props.showReflectionEffect) + { + ShowReflectionEffect(pawn, attacker); + } + + // 发送消息 + if (pawn.Faction == Faction.OfPlayer && attacker.Faction != Faction.OfPlayer) + { + Messages.Message( + "ASV_ReflectDamageMessage".Translate( + pawn.LabelShort, + attacker.LabelShort, + reflectedAmount.ToString("F0") + ), + pawn, + MessageTypeDefOf.NeutralEvent + ); + } + } + catch (Exception ex) + { + Log.Error($"[ReflectMeleeDamage] Error reflecting damage: {ex}"); + } + finally + { + isProcessingReflection = false; + } + } + + /// + /// 显示反射效果 + /// + private void ShowReflectionEffect(Pawn pawn, Thing attacker) + { + try + { + // 显示反弹粒子 + if (pawn.Spawned && attacker.Spawned && pawn.Map == attacker.Map) + { + Vector3 startPos = pawn.DrawPos; + Vector3 endPos = attacker.DrawPos; + + // 创建一个从反射者到攻击者的弹道效果 + for (int i = 0; i < 3; i++) + { + MoteThrown mote = (MoteThrown)ThingMaker.MakeThing(ARA_ThingDefOf.Mote_SparkSimple, null); + mote.Scale = Rand.Range(0.5f, 0.8f); + mote.exactPosition = startPos + new Vector3( + Rand.Range(-0.3f, 0.3f), + 0f, + Rand.Range(-0.3f, 0.3f) + ); + mote.SetVelocity( + (endPos - startPos).normalized.x * Rand.Range(15f, 25f), + 0f + ); + GenSpawn.Spawn(mote, pawn.Position, pawn.Map); + } + } + } + catch (Exception ex) + { + Log.Error($"[ReflectMeleeDamage] Error showing reflection effect: {ex}"); + } + } + + /// + /// 在Pawn受到伤害后调用 + /// + public override void Notify_PawnPostApplyDamage(DamageInfo dinfo, float totalDamageDealt) + { + base.Notify_PawnPostApplyDamage(dinfo, totalDamageDealt); + + Pawn pawn = this.Pawn; + if (pawn == null || pawn.Dead || pawn.Destroyed) + { + return; + } + + // 检查是否应该反射伤害 + if (ShouldReflectDamage(dinfo, pawn)) + { + // 反射伤害给攻击者 + ReflectDamageToAttacker(dinfo, pawn); + } + } + + /// + /// 获取组件描述 + /// + public override string CompTipStringExtra + { + get + { + string tip = "ASV_ReflectMeleeDamage_Tip".Translate(ReflectMultiplier.ToStringPercent()); + + if (Props.includeToolBasedRanged) + { + tip += "\n" + "ASV_ReflectIncludesToolRanged".Translate(); + } + + return tip; + } + } + + /// + /// 获取调试信息 + /// + public override string CompDebugString() + { + return $"Reflect multiplier: {ReflectMultiplier:F1}x\n" + + $"Last reflection tick: {lastReflectionTick}\n" + + $"Min damage to reflect: {Props.minDamageToReflect}\n" + + $"Reflects only melee: {Props.reflectOnlyMelee}\n" + + $"Includes tool-based ranged: {Props.includeToolBasedRanged}"; + } + } +}