diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll
index 161b7e5..52a97d9 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/DamageDefs/ARA_Damage_Freeze.xml b/1.6/1.6/Defs/DamageDefs/ARA_Damage_Freeze.xml
index 075e020..f43af93 100644
--- a/1.6/1.6/Defs/DamageDefs/ARA_Damage_Freeze.xml
+++ b/1.6/1.6/Defs/DamageDefs/ARA_Damage_Freeze.xml
@@ -31,7 +31,7 @@
ARA_CryoShock
- 目标正处于急冻状态,这种状态。
+ 目标正处于急冻状态。这种状态将导致目标身体结构极度脆弱。当此效果加深时,足以摧毁其身体部位的“冷冻”伤害阈值将会显著降低。。
(1, 1, 0.8)
ArachnaeSwarm.HediffCurseFlame
@@ -66,10 +66,6 @@
-0.10
-
- 2
- 2
-
@@ -83,10 +79,6 @@
-0.20
-
- 3.5
- 3.5
-
@@ -100,10 +92,6 @@
-0.20
-
- 4.5
- 4.5
-
@@ -117,10 +105,6 @@
-0.30
-
- 6
- 6
-
@@ -134,10 +118,6 @@
-0.30
-
- 8
- 8
-
@@ -146,7 +126,7 @@
ARA_Damage_Freeze
- DamageWorker_Frostbite
+ ArachnaeSwarm.DamageWorker_InstaKill
true
{0}的身体在极寒中化为了冰雕,随后碎裂四散。
Frostbite
@@ -154,7 +134,7 @@
Heat
0
3
- 2
+ 1
0
0
-15
@@ -163,9 +143,25 @@
(0.52, 1, 0.95,0.5) -->
ARA_Fleck_Icez_Cloud
Explosion_Stun
+
+
+ ARA_CryoShock
+
+
+ (0.2, 0.8)
+ (0.35, 0.65)
+ (0.5, 0.5)
+ (0.65, 0.35)
+ (0.85, 0.15)
+
+
+ 1.0
+
+
ARA_Damage_Freeze_ex
+ ArachnaeSwarm.DamageWorker_InstaKill
ARA_CryoShock
diff --git a/1.6/1.6/Defs/Thing_Misc/Weapons/ARA_Weapon.xml b/1.6/1.6/Defs/Thing_Misc/Weapons/ARA_Weapon.xml
index 313d07d..4808ec4 100644
--- a/1.6/1.6/Defs/Thing_Misc/Weapons/ARA_Weapon.xml
+++ b/1.6/1.6/Defs/Thing_Misc/Weapons/ARA_Weapon.xml
@@ -2136,12 +2136,12 @@
true
- 5
+ 3
45
- 25
- 1
+ 3
+ 30
ARA_Damage_Freeze_ex
- 2
+ 25
1000
@@ -2182,13 +2182,13 @@
- false
-
-
-
+ 15
+ Explosion_Stun
+ 0
0
@@ -2198,7 +2198,7 @@
ARA_Huge_Weapon
- ARA_Weapon_ChainReload
+ ARA_Weapon_Damage_FrostExplode
2
diff --git a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj
index f045025..110b72d 100644
--- a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj
+++ b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj
@@ -278,6 +278,7 @@
+
diff --git a/Source/ArachnaeSwarm/Verbs/DamageWorker_InstaKill.cs b/Source/ArachnaeSwarm/Verbs/DamageWorker_InstaKill.cs
new file mode 100644
index 0000000..d91bf57
--- /dev/null
+++ b/Source/ArachnaeSwarm/Verbs/DamageWorker_InstaKill.cs
@@ -0,0 +1,61 @@
+using RimWorld;
+using Verse;
+
+namespace ArachnaeSwarm
+{
+ public class InstaKillExtension : DefModExtension
+ {
+ public HediffDef hediff;
+ // 根据Hediff严重性 (x) 决定触发所需的伤害百分比阈值 (y)
+ public SimpleCurve requiredDamagePercentageCurve;
+ public float destroyChance = 1.0f;
+ }
+
+ public class DamageWorker_InstaKill : DamageWorker_Frostbite
+ {
+ protected override void ApplySpecialEffectsToPart(Pawn pawn, float totalDamage, DamageInfo dinfo, DamageResult result)
+ {
+ var extension = def.GetModExtension();
+ // 检查配置是否完整
+ if (extension == null || extension.hediff == null || extension.requiredDamagePercentageCurve == null || dinfo.HitPart == null)
+ {
+ base.ApplySpecialEffectsToPart(pawn, totalDamage, dinfo, result);
+ return;
+ }
+
+ // 获取受害者身上的Hediff
+ Hediff hediff = pawn.health.hediffSet.GetFirstHediffOfDef(extension.hediff);
+ if (hediff == null)
+ {
+ // 如果受害者没有指定的Hediff,则效果不生效
+ base.ApplySpecialEffectsToPart(pawn, totalDamage, dinfo, result);
+ return;
+ }
+
+ // --- 日志输出 ---
+ Log.Message($"[DamageWorker_InstaKill] Executed on {pawn.LabelShort}. Target Part: {dinfo.HitPart.Label}. Damage: {totalDamage}.");
+
+ // 根据Hediff严重性从曲线计算所需的伤害百分比阈值
+ float requiredPercentage = extension.requiredDamagePercentageCurve.Evaluate(hediff.Severity);
+ float destroyChance = extension.destroyChance;
+
+ // 计算本次伤害占目标部件最大生命值的实际百分比
+ float actualDamagePercentage = totalDamage / dinfo.HitPart.def.GetMaxHealth(pawn);
+
+ Log.Message($"[DamageWorker_InstaKill] Hediff: {hediff.Label}, Severity: {hediff.Severity:F2}. RequiredDmg%: {requiredPercentage:P2}, ActualDmg%: {actualDamagePercentage:P2}.");
+
+ // 如果造成的实际伤害百分比 *大于或等于* 所需的百分比阈值,并且随机判定成功
+ if (actualDamagePercentage >= requiredPercentage && Rand.Chance(destroyChance))
+ {
+ Log.Message($"[DamageWorker_InstaKill] Insta-Kill triggered! Applying massive damage to destroy part.");
+ // 直接施加一个足以摧毁该部位的伤害
+ base.ApplySpecialEffectsToPart(pawn, dinfo.HitPart.def.GetMaxHealth(pawn) + 1, dinfo, result);
+ }
+ else
+ {
+ // 否则,走标准伤害流程
+ base.ApplySpecialEffectsToPart(pawn, totalDamage, dinfo, result);
+ }
+ }
+ }
+}
\ No newline at end of file