From 35ed2c01d51406adfd9d427fc5c5f0f5cd4406b7 Mon Sep 17 00:00:00 2001 From: "ProjectKoi-Kalo\\Kalo" Date: Tue, 16 Sep 2025 11:22:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9A=82=E5=AD=98=E5=9C=B0=E5=BD=A2=E5=88=BA?= =?UTF-8?q?=E6=BF=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ARA_HediffDef_TerrainExample.xml | 61 +++++++++++++++++++ ...diffCompProperties_TerrainBasedSeverity.cs | 25 ++++++++ .../HediffComp_TerrainBasedSeverity.cs | 42 +++++++++++++ 3 files changed, 128 insertions(+) create mode 100644 1.6/1.6/Defs/HediffDefs/ARA_HediffDef_TerrainExample.xml create mode 100644 Source/ArachnaeSwarm/HediffCompProperties_TerrainBasedSeverity.cs create mode 100644 Source/ArachnaeSwarm/HediffComp_TerrainBasedSeverity.cs diff --git a/1.6/1.6/Defs/HediffDefs/ARA_HediffDef_TerrainExample.xml b/1.6/1.6/Defs/HediffDefs/ARA_HediffDef_TerrainExample.xml new file mode 100644 index 0000000..a14163a --- /dev/null +++ b/1.6/1.6/Defs/HediffDefs/ARA_HediffDef_TerrainExample.xml @@ -0,0 +1,61 @@ + + + + + ARA_TerrainBasedHediff + + 根据所处地形而强化自身。 + HediffWithComps + 1.0 + -0.01 + false + +
  • + + 60 + + + + + +
  • ARA_InsectCreep
  • + + + + 0.0167 + + + -0.0083 + +
  • + + +
  • + false + 0 + +
  • +
  • + 0.4 + + +
  • + Consciousness + 0.1 +
  • + + +
  • + 0.8 + + +
  • + Consciousness + 0.25 +
  • + + + +
    + +
    \ No newline at end of file diff --git a/Source/ArachnaeSwarm/HediffCompProperties_TerrainBasedSeverity.cs b/Source/ArachnaeSwarm/HediffCompProperties_TerrainBasedSeverity.cs new file mode 100644 index 0000000..979d143 --- /dev/null +++ b/Source/ArachnaeSwarm/HediffCompProperties_TerrainBasedSeverity.cs @@ -0,0 +1,25 @@ +using System.Collections.Generic; +using Verse; + +namespace ArachnaeSwarm +{ + public class HediffCompProperties_TerrainBasedSeverity : HediffCompProperties + { + // 检查效果的时间间隔(以ticks为单位) + public int interval = 60; + + // 当角色站在此列表中的任何地形上时,严重性的变化值 + public float severityOnTerrain = 0f; + + // 当角色不在任何目标地形上时,严重性的变化值 + public float severityOffTerrain = 0f; + + // 目标地形的defName列表 + public List terrainDefs; + + public HediffCompProperties_TerrainBasedSeverity() + { + compClass = typeof(HediffComp_TerrainBasedSeverity); + } + } +} \ No newline at end of file diff --git a/Source/ArachnaeSwarm/HediffComp_TerrainBasedSeverity.cs b/Source/ArachnaeSwarm/HediffComp_TerrainBasedSeverity.cs new file mode 100644 index 0000000..ffa58c2 --- /dev/null +++ b/Source/ArachnaeSwarm/HediffComp_TerrainBasedSeverity.cs @@ -0,0 +1,42 @@ +using Verse; + +namespace ArachnaeSwarm +{ + public class HediffComp_TerrainBasedSeverity : HediffComp + { + public HediffCompProperties_TerrainBasedSeverity Props => (HediffCompProperties_TerrainBasedSeverity)props; + + public override void CompPostTick(ref float severityAdjustment) + { + Pawn pawn = parent.pawn; + + // 按照设定的时间间隔执行 + if (pawn.IsHashIntervalTick(Props.interval)) + { + // 确保角色在地图上 + if (pawn.Spawned) + { + // 获取角色当前位置的地形 + TerrainDef currentTerrain = pawn.Position.GetTerrain(pawn.Map); + + // 检查当前地形是否存在于XML定义的列表中 + if (Props.terrainDefs != null && Props.terrainDefs.Contains(currentTerrain)) + { + // 如果在目标地形上,增加 severityOnTerrain + severityAdjustment += Props.severityOnTerrain; + } + else + { + // 如果不在目标地形上,增加 severityOffTerrain + severityAdjustment += Props.severityOffTerrain; + } + } + else + { + // 如果角色不在地图上(例如在运输舱里),则总是应用 off-terrain 的效果 + severityAdjustment += Props.severityOffTerrain; + } + } + } + } +} \ No newline at end of file