From 12ea403c979908cfd60cb7ed9ef512e860622ced Mon Sep 17 00:00:00 2001 From: "ProjectKoi-Kalo\\Kalo" Date: Wed, 10 Sep 2025 01:02:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1.6/1.6/Assemblies/ArachnaeSwarm.dll | Bin 167936 -> 174592 bytes .../Defs/ThingDef_Races/ARA_RaceNodeSwarm.xml | 21 +- Source/ArachnaeSwarm/ArachnaeSwarm.csproj | 6 + .../HediffComp_NecroticTransformation.cs | 28 +++ .../Hediff_NecroticVirus_Configurable.cs | 118 ++++++++++ .../NecroticTransformationUtility.cs | 65 ++++++ Source/ArachnaeSwarm/ProphecyGearEffect.cs | 211 ++++++++++++++++++ 7 files changed, 435 insertions(+), 14 deletions(-) create mode 100644 Source/ArachnaeSwarm/HediffComp_NecroticTransformation.cs create mode 100644 Source/ArachnaeSwarm/Hediff_NecroticVirus_Configurable.cs create mode 100644 Source/ArachnaeSwarm/NecroticTransformationUtility.cs create mode 100644 Source/ArachnaeSwarm/ProphecyGearEffect.cs diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll index 4d620e57530b081ec4ade6c803d72221c0e1cb6a..98f74186df9392f3518ad99cdde8dac9032e8745 100644 GIT binary patch delta 53187 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 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 5a67720..4e73614 100644 --- a/1.6/1.6/Defs/ThingDef_Races/ARA_RaceNodeSwarm.xml +++ b/1.6/1.6/Defs/ThingDef_Races/ARA_RaceNodeSwarm.xml @@ -663,8 +663,7 @@ ArachnaeNode_Race_Myrmecocystus - - 阿拉克涅督虫之一,拥有广泛食谱的大型虫族,可以吞下许多未经处理的生物并将其分解为阿拉克涅虫蜜,以滋养虫群。\n\n她可以进行搬运、烹饪和种植工作,战斗技能非常差。\n\n作为督虫,她可以繁育并监管若干阿拉克涅食腐种辅虫,以协助巢穴进行收割和播种工作。 + 阿拉克涅督虫之一,拥有广泛食谱的大型虫族,可以吞下许多未经处理的生物并将其分解为阿拉克涅虫蜜,以滋养虫群。\n\n她可以进行搬运、烹饪和种植工作,战斗技能非常差。\n\n作为督虫,她可以繁育并监管若干阿拉克涅食腐种辅虫,以协助巢穴进行收割和播种工作。 @@ -758,8 +757,7 @@ ArachnaeNode_Race_ShieldHead - - 阿拉克涅督虫之一,拥有过度生长而覆盖头部和腿部的甲壳,可以定时剥落甲壳素供虫巢使用。\n\n她可以进行搬运、采矿和建筑工作,战斗技能平平无奇,但是拥有较好的防御。\n\n作为督虫,她可以繁育并监管若干阿拉克涅坚颚种辅虫,以协助巢穴开采矿脉。 + 阿拉克涅督虫之一,拥有过度生长而覆盖头部和腿部的甲壳,可以定时剥落甲壳素供虫巢使用。\n\n她可以进行搬运、采矿和建筑工作,战斗技能平平无奇,但是拥有较好的防御。\n\n作为督虫,她可以繁育并监管若干阿拉克涅坚颚种辅虫,以协助巢穴开采矿脉。 @@ -879,8 +877,7 @@ ArachnaeNode_Race_WeaponSmith - - 阿拉克涅督虫之一,是少数拥有结茧能力的非女皇种阿拉克涅虫族——她们可以排出一枚器官茧,这枚茧将按照其信息素所标定的方向定向演化出一个武装器官,以供虫群使用。\n\n她可以进行搬运、手工和艺术工作,战斗技能平平无奇,但本身极度脆弱。\n\n作为督虫,她可以繁育并监管若干阿拉克涅家政种辅虫,以协助巢穴进行清洁和搬运工作。 + 阿拉克涅督虫之一,是少数拥有结茧能力的非女皇种阿拉克涅虫族——她们可以排出一枚器官茧,这枚茧将按照其信息素所标定的方向定向演化出一个武装器官,以供虫群使用。\n\n她可以进行搬运、手工和艺术工作,战斗技能平平无奇,但本身极度脆弱。\n\n作为督虫,她可以繁育并监管若干阿拉克涅家政种辅虫,以协助巢穴进行清洁和搬运工作。 @@ -964,8 +961,7 @@ ArachnaeNode_Race_Fighter - - 阿拉克涅督虫之一,是巢穴中真正的战士,其拥有强大的可塑性基因,随着科技的解锁其将获得更多的能力。\n\n她可以进行搬运、狩猎和驯兽工作,战斗技能非常亮眼,并且移动敏捷。\n\n作为督虫,她可以向敌人投射寿命有限但是非常恼人的阿拉克涅酸噬种辅虫,以阻止敌人的远程火力开火。 + 阿拉克涅督虫之一,是巢穴中真正的战士,其拥有强大的可塑性基因,随着科技的解锁其将获得更多的能力。\n\n她可以进行搬运、狩猎和驯兽工作,战斗技能非常亮眼,并且移动敏捷。\n\n作为督虫,她可以向敌人投射寿命有限但是非常恼人的阿拉克涅酸噬种辅虫,以阻止敌人的远程火力开火。 @@ -1050,8 +1046,7 @@ ArachnaeNode_Race_Facehugger - - 阿拉克涅督虫之一,呈现高度未分化状态的特殊督虫,可以通过独特的神经链接管控制受害者的身体,并释放灵能信号以使得周围的人忽略其存在。然而她本身实在过于脆弱,在完成寄生前难以胜任任何工作。\n\n她可以进行所有非研究工作,战斗技能约等于无。\n\n不同于普通阿拉克涅虫族,高度未分化的身体决定了其无法孕育任何辅虫。 + 阿拉克涅督虫之一,呈现高度未分化状态的特殊督虫,可以通过独特的神经链接管控制受害者的身体,并释放灵能信号以使得周围的人忽略其存在。然而她本身实在过于脆弱,在完成寄生前难以胜任任何工作。\n\n她可以进行所有非研究工作,战斗技能约等于无。\n\n不同于普通阿拉克涅虫族,高度未分化的身体决定了其无法孕育任何辅虫。 @@ -1110,8 +1105,7 @@ ArachnaeNode_Race_Smokepop - - 阿拉克涅督虫之一,身披厚重甲壳的大型虫族,拥有在大范围内喷射烟雾、阻燃物和铺设菌毯的能力,虽然移动速度比较慢,但是在战斗中就如同装甲车一样难以撼动。\n\n她可以进行搬运和医护工作,拥有不错的战斗技能,防御力和伤害耐受能力强大。\n\n作为督虫,她可以繁育并监管大量阿拉克涅家政种辅虫,以协助巢穴进行清洁和搬运工作。 + 阿拉克涅督虫之一,身披厚重甲壳的大型虫族,拥有在大范围内喷射烟雾、阻燃物和铺设菌毯的能力,虽然移动速度比较慢,但是在战斗中就如同装甲车一样难以撼动。\n\n她可以进行搬运和医护工作,拥有不错的战斗技能,防御力和伤害耐受能力强大。\n\n作为督虫,她可以繁育并监管大量阿拉克涅家政种辅虫,以协助巢穴进行清洁和搬运工作。 @@ -1202,8 +1196,7 @@ ArachnaeNode_Race_Skyraider - - 阿拉克涅督虫之一,众督虫中的精锐,进化出了强大的飞行能力,是巢穴中无可争议的空中霸主。\n\n她可以进行搬运工作,拥有不错的战斗技能,非常灵活。\n\n作为为数不多拥有飞行能力的虫族,她可以从空中掠袭猎物并将其带至千米高空之上俯冲投下,只留其余猎物在地面无助的挣扎。 + 阿拉克涅督虫之一,众督虫中的精锐,进化出了强大的飞行能力,是巢穴中无可争议的空中霸主。\n\n她可以进行搬运工作,拥有不错的战斗技能,非常灵活。\n\n作为为数不多拥有飞行能力的虫族,她可以从空中掠袭猎物并将其带至千米高空之上俯冲投下,只留其余猎物在地面无助的挣扎。 diff --git a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj index 514182c..36c9596 100644 --- a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj +++ b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj @@ -184,6 +184,12 @@ + + + + + + diff --git a/Source/ArachnaeSwarm/HediffComp_NecroticTransformation.cs b/Source/ArachnaeSwarm/HediffComp_NecroticTransformation.cs new file mode 100644 index 0000000..ac96aa0 --- /dev/null +++ b/Source/ArachnaeSwarm/HediffComp_NecroticTransformation.cs @@ -0,0 +1,28 @@ +using Verse; +using RimWorld; + +namespace ArachnaeSwarm +{ + /// + /// XML配置类,用于在HediffDef的comp中指定转化后的MutantDef + /// + public class HediffCompProperties_NecroticTransformation : HediffCompProperties + { + // 在XML中需要指定的MutantDef的defName + public MutantDef mutantDef; + + public HediffCompProperties_NecroticTransformation() + { + compClass = typeof(HediffComp_NecroticTransformation); + } + } + + /// + /// HediffComp,用于在运行时存储和提供由XML定义的MutantDef + /// + public class HediffComp_NecroticTransformation : HediffComp + { + // 属性,用于方便地从Comp中获取配置 + public HediffCompProperties_NecroticTransformation Props => (HediffCompProperties_NecroticTransformation)props; + } +} \ No newline at end of file diff --git a/Source/ArachnaeSwarm/Hediff_NecroticVirus_Configurable.cs b/Source/ArachnaeSwarm/Hediff_NecroticVirus_Configurable.cs new file mode 100644 index 0000000..8192b5c --- /dev/null +++ b/Source/ArachnaeSwarm/Hediff_NecroticVirus_Configurable.cs @@ -0,0 +1,118 @@ +using RimWorld; +using Verse; +using UnityEngine; +using System.Linq; + +namespace ArachnaeSwarm +{ + public class Hediff_NecroticVirus : HediffWithComps + { + private const int EffectInterval = 600; + + // 属性来获取我们的自定义Comp + private HediffComp_NecroticTransformation PropsComp => this.TryGetComp(); + + public override void Notify_PawnDied(DamageInfo? dinfo, Hediff culprit = null) + { + base.Notify_PawnDied(dinfo, culprit); + TransformToMutant(); + } + + public override void PostTick() + { + base.PostTick(); + if (pawn.IsHashIntervalTick(EffectInterval) && pawn.Spawned) + { + ShowVirusEffects(); + } + } + + private void TransformToMutant() + { + var comp = PropsComp; + if (comp == null || comp.Props.mutantDef == null) + { + Log.Error($"[NecroticVirus] HediffComp_NecroticTransformation or its mutantDef is not configured in XML for {this.def.defName}."); + return; + } + + try + { + if (pawn.Corpse == null || pawn.Corpse.Destroyed) + { + return; + } + + Map map = pawn.Corpse.Map; + IntVec3 position = pawn.Corpse.Position; + + if (!MutantUtility.CanResurrectAsShambler(pawn.Corpse)) + { + Log.Warning($"[NecroticVirus] Cannot resurrect {pawn.LabelShort} as a shambler-like creature."); + return; + } + + Faction faction = GetHostileFaction(); + + // **调用我们自己的工具方法,传入从XML获取的mutantDef** + NecroticTransformationUtility.ResurrectAsCustomMutant(pawn, comp.Props.mutantDef, faction); + + // 添加转化特效 + FleckMaker.ThrowSmoke(position.ToVector3Shifted(), map, 1.5f); + FleckMaker.ThrowDustPuff(position.ToVector3Shifted(), map, 1.2f); + + // 发送转化消息 + if (PawnUtility.ShouldSendNotificationAbout(pawn)) + { + Messages.Message( + "NecroticVirus_TransformationMessage".Translate(pawn.LabelShortCap, pawn.LabelShortCap), + new LookTargets(position, map), + MessageTypeDefOf.NegativeEvent + ); + } + } + catch (System.Exception ex) + { + Log.Error($"[NecroticVirus] Error during transformation: {ex}"); + } + } + + private Faction GetHostileFaction() + { + if (pawn.Faction != null && pawn.Faction.HostileTo(Faction.OfPlayer)) + { + return pawn.Faction; + } + + Faction entitiesFaction = Find.FactionManager.AllFactions.FirstOrDefault(f => f.def.defName == "Entities"); + if (entitiesFaction != null && !entitiesFaction.defeated) + { + return entitiesFaction; + } + + return Find.FactionManager.RandomEnemyFaction(allowNonHumanlike: true, allowHidden: false, allowDefeated: false); + } + + private void ShowVirusEffects() + { + if (pawn == null || !pawn.Spawned) return; + + Vector3 pos = pawn.DrawPos; + Map map = pawn.Map; + float sizeMultiplier = 1f; + if (CurStageIndex == 1) sizeMultiplier = 1.2f; + if (CurStageIndex == 2) sizeMultiplier = 1.5f; + + FleckMaker.ThrowMicroSparks(pos, map); + FleckMaker.ThrowDustPuff(pos, map, 0.8f * sizeMultiplier); + } + + public override string TipStringExtra + { + get + { + return base.TipStringExtra + "\n" + "NecroticVirus_EffectTip".Translate(); + } + } + } +} \ No newline at end of file diff --git a/Source/ArachnaeSwarm/NecroticTransformationUtility.cs b/Source/ArachnaeSwarm/NecroticTransformationUtility.cs new file mode 100644 index 0000000..ba24fca --- /dev/null +++ b/Source/ArachnaeSwarm/NecroticTransformationUtility.cs @@ -0,0 +1,65 @@ +using RimWorld; +using Verse; + +namespace ArachnaeSwarm +{ + public static class NecroticTransformationUtility + { + /// + /// 将一个Pawn复活为指定的自定义变异体. + /// 这个方法是模仿原版 MutantUtility.ResurrectAsShambler, + /// 但允许传入一个自定义的 MutantDef. + /// + public static void ResurrectAsCustomMutant(Pawn pawn, MutantDef mutantDef, Faction faction = null, int lifespanTicks = -1) + { + if (pawn?.Corpse == null || mutantDef == null) + { + return; + } + + RotStage rotStage = pawn.Corpse.GetRotStage(); + + // 创建并附加Pawn_MutantTracker,使用我们从XML传入的mutantDef + pawn.mutant = new Pawn_MutantTracker(pawn, mutantDef, rotStage); + + // 添加变异体核心Hediff + Hediff hediff = pawn.health.AddHediff(mutantDef.hediff); + + // 如果是蹒跚者类型的Hediff,则调用其上升动画 + if (hediff is Hediff_Shambler shamblerHediff) + { + shamblerHediff.StartRising(lifespanTicks); + } + + // 设置生命周期 + var disappearsComp = hediff.TryGetComp(); + if (disappearsComp != null) + { + if (lifespanTicks > 0) + { + disappearsComp.disappearsAfterTicks = lifespanTicks; + disappearsComp.ticksToDisappear = lifespanTicks; + } + else + { + disappearsComp.disabled = true; + } + } + + // 如果没有提供派系,则尝试使用变异体定义的默认派系 + if (faction == null && mutantDef.defaultFaction != null) + { + faction = Find.FactionManager.FirstFactionOfDef(mutantDef.defaultFaction); + } + + // 设置派系 + if (faction != null && pawn.Faction != faction) + { + pawn.SetFaction(faction); + } + + // 立即执行转变 + pawn.mutant.Turn(clearLord: true); + } + } +} \ No newline at end of file diff --git a/Source/ArachnaeSwarm/ProphecyGearEffect.cs b/Source/ArachnaeSwarm/ProphecyGearEffect.cs new file mode 100644 index 0000000..470c82b --- /dev/null +++ b/Source/ArachnaeSwarm/ProphecyGearEffect.cs @@ -0,0 +1,211 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using HarmonyLib; +using RimWorld; +using UnityEngine; +using Verse; + +namespace ArachnaeSwarm +{ + public class ProphecyGearEffect : DefModExtension + { + public HediffDef hediffToApply; + public float severityPerDamage = 0f; + public float minSeverity = 0f; + public float maxSeverity = 1f; + public bool enableHediffEffect = true; + + public float extraDamageFactor = 0f; + public DamageDef extraDamageType; + public float armorPenetration = 0f; + public BodyPartDef targetBodyPart; + public bool enableExtraDamage = true; + + // 新添加:触发效果所需的仿生体 Hediff + public HediffDef requiredBionicHediff; + } + + [HarmonyPatch(typeof(Pawn), "PostApplyDamage")] + public static class DRM_ProphecyGear_Patch + { + private static readonly FieldInfo damageInfoWeaponField = + typeof(DamageInfo).GetField("weapon", BindingFlags.Instance | BindingFlags.NonPublic); + + private static bool isApplyingExtraDamage = false; + + public static void Postfix(Pawn __instance, DamageInfo dinfo, float totalDamageDealt) + { + if (isApplyingExtraDamage) return; + + try + { + if (__instance == null || __instance.Dead || __instance.health == null) return; + if (!(dinfo.Instigator is Pawn attacker) || attacker.apparel == null) return; + if (totalDamageDealt <= 0) return; + + // 收集所有可能的效果来源 + var effectsToApply = new List(); + + // 1. 从装备收集效果 + foreach (var apparel in attacker.apparel.WornApparel) + { + var effect = apparel.def.GetModExtension(); + if (effect != null && IsEffectValid(effect, attacker)) + { + effectsToApply.Add(effect); + } + } + + // 2. 从仿生体 Hediff 收集效果 + foreach (var hediff in attacker.health.hediffSet.hediffs) + { + var effect = hediff.def.GetModExtension(); + if (effect != null && IsEffectValid(effect, attacker)) + { + effectsToApply.Add(effect); + } + } + + // 应用所有效果 + foreach (var effect in effectsToApply) + { + if (effect.enableHediffEffect && effect.hediffToApply != null) + { + ApplyHediffEffect(__instance, effect, totalDamageDealt); + } + + if (effect.enableExtraDamage && + effect.extraDamageFactor > 0 && + effect.extraDamageType != null) + { + isApplyingExtraDamage = true; + ApplyExtraDamage(__instance, effect, totalDamageDealt, dinfo); + isApplyingExtraDamage = false; + } + } + } + catch (Exception ex) + { + isApplyingExtraDamage = false; + Log.Error($"[ArachnaeSwarm] Error in PostApplyDamage patch: {ex}"); + } + } + + // 检查效果是否有效(满足仿生体要求) + private static bool IsEffectValid(ProphecyGearEffect effect, Pawn attacker) + { + // 如果没有要求仿生体,则始终有效 + if (effect.requiredBionicHediff == null) + return true; + + // 检查攻击者是否拥有所需的仿生体 + return attacker.health.hediffSet.HasHediff(effect.requiredBionicHediff); + } + + private static void ApplyHediffEffect(Pawn target, ProphecyGearEffect effect, float damageDealt) + { + try + { + double severityToAdd = (double)damageDealt * (double)effect.severityPerDamage; + float finalSeverity = (float)severityToAdd; + + if (finalSeverity < 0.001f) return; + + var existingHediff = target.health.hediffSet.GetFirstHediffOfDef(effect.hediffToApply); + + if (existingHediff == null) + { + Hediff newHediff = HediffMaker.MakeHediff(effect.hediffToApply, target); + if (newHediff != null) + { + newHediff.Severity = finalSeverity; + + if (effect.minSeverity > 0) + newHediff.Severity = Math.Max(newHediff.Severity, effect.minSeverity); + if (effect.maxSeverity > 0) + newHediff.Severity = Math.Min(newHediff.Severity, effect.maxSeverity); + + target.health.AddHediff(newHediff); + } + } + else + { + float newSeverity = existingHediff.Severity + finalSeverity; + + if (effect.minSeverity > 0) + newSeverity = Math.Max(newSeverity, effect.minSeverity); + if (effect.maxSeverity > 0) + newSeverity = Math.Min(newSeverity, effect.maxSeverity); + + existingHediff.Severity = newSeverity; + + if (existingHediff is HediffWithComps hwc) + { + var comp = hwc.TryGetComp(); + if (comp != null) + { + comp.ticksToDisappear = comp.Props.disappearsAfterTicks.max; + } + } + } + } + catch (Exception ex) + { + Log.Error($"[ArachnaeSwarm] Error in ApplyHediffEffect: {ex}"); + } + } + + private static void ApplyExtraDamage( + Pawn target, + ProphecyGearEffect effect, + float baseDamage, + DamageInfo originalDinfo) + { + try + { + float extraDamageAmount = baseDamage * effect.extraDamageFactor; + if (extraDamageAmount < 0.5f) extraDamageAmount = 0.5f; + if (extraDamageAmount <= 0) return; + + Thing weapon = null; + if (damageInfoWeaponField != null) + { + weapon = damageInfoWeaponField.GetValue(originalDinfo) as Thing; + } + + BodyPartRecord hitPart = null; + if (effect.targetBodyPart != null) + { + var bodyPartDef = DefDatabase.GetNamedSilentFail(effect.targetBodyPart.defName); + if (bodyPartDef != null) + { + hitPart = target.RaceProps.body.GetPartsWithDef(bodyPartDef).FirstOrFallback(); + } + } + else + { + hitPart = originalDinfo.HitPart; + } + + DamageInfo extraDinfo = new DamageInfo( + def: effect.extraDamageType, + amount: extraDamageAmount, + armorPenetration: effect.armorPenetration, + angle: -1f, + instigator: originalDinfo.Instigator, + hitPart: hitPart, + weapon: originalDinfo.Weapon, + category: DamageInfo.SourceCategory.ThingOrUnknown, + intendedTarget: target + ); + + target.TakeDamage(extraDinfo); + } + catch (Exception ex) + { + Log.Error($"[ArachnaeSwarm] Error in ApplyExtraDamage: {ex}"); + } + } + } +} \ No newline at end of file