From 64afb0cbd677360d9a4a53f45bd527d433323afc Mon Sep 17 00:00:00 2001 From: "ProjectKoi-Kalo\\Kalo" Date: Fri, 5 Sep 2025 17:34:06 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1.6/1.6/Assemblies/ArachnaeSwarm.dll | Bin 77312 -> 78848 bytes .../Defs/AbilityDefs/ARA_Possession_Defs.xml | 21 ++-- .../Keyed/ArachnaeSwarm_Keys.xml | 9 ++ .../CompAbilityEffect_Possess.cs | 98 ++++++++++++++---- .../CompProperties_AbilityPossess.cs | 9 ++ .../Verb_JumpAndCastOnLanding.cs | 19 +++- 6 files changed, 127 insertions(+), 29 deletions(-) create mode 100644 Languages/ChineseSimplified/Keyed/ArachnaeSwarm_Keys.xml diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll index 632dc14886c592dad197c2c136e6806c2a5b0788..ba1c2ba9d1fe6672ae269559501573acdd6133dc 100644 GIT binary patch delta 23660 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 delta 22200 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 diff --git a/1.6/1.6/Defs/AbilityDefs/ARA_Possession_Defs.xml b/1.6/1.6/Defs/AbilityDefs/ARA_Possession_Defs.xml index 49dfee6..fbc0ddc 100644 --- a/1.6/1.6/Defs/AbilityDefs/ARA_Possession_Defs.xml +++ b/1.6/1.6/Defs/AbilityDefs/ARA_Possession_Defs.xml @@ -4,7 +4,7 @@ ARA_Ability_Possess - + 跃向目标,随后尝试使用长尾刺穿对象并截断其神经中枢信号,以自己的控制信号取而代之,进而完全侵占目标躯体。\n\n被侵占躯体的对象视为阿拉克涅虫族的一员,需要接受女皇种的信息素标记,并且不再拥有感情和高级需求,仅作为躯壳活着。目标的技能熟练度和背景故事会替换为原虫种的技能熟练度和背景故事,一旦宿主死亡,原虫种将从宿主身上逃离。 UI/Abilities/Longjump 800 @@ -13,7 +13,7 @@ ArachnaeSwarm.Verb_JumpAndCastOnLanding 1.0 - 19.9 + 9.9 true Longjump_Jump Longjump_Land @@ -26,11 +26,18 @@ -
  • -
  • - CompAbilityEffect_GiveHediff - ARA_HiveMindDrone -
  • +
  • + + 0.6~1.0 + + 0.01 + + ARA_HiveMindDrone + + +
  • ArachnaeQueen_Race
  • + +
    \ No newline at end of file diff --git a/Languages/ChineseSimplified/Keyed/ArachnaeSwarm_Keys.xml b/Languages/ChineseSimplified/Keyed/ArachnaeSwarm_Keys.xml new file mode 100644 index 0000000..9a71c32 --- /dev/null +++ b/Languages/ChineseSimplified/Keyed/ArachnaeSwarm_Keys.xml @@ -0,0 +1,9 @@ + + + + + 目标必须是类人生物。 + {0} 已被夺舍。 + 无法夺舍 {0} 种族。 + + \ No newline at end of file diff --git a/Source/ArachnaeSwarm/ARA_HuggingFace/CompAbilityEffect_Possess.cs b/Source/ArachnaeSwarm/ARA_HuggingFace/CompAbilityEffect_Possess.cs index d14db56..1b03b21 100644 --- a/Source/ArachnaeSwarm/ARA_HuggingFace/CompAbilityEffect_Possess.cs +++ b/Source/ArachnaeSwarm/ARA_HuggingFace/CompAbilityEffect_Possess.cs @@ -1,50 +1,110 @@ using RimWorld; using RimWorld.Planet; using Verse; +using UnityEngine; +using System.Linq; namespace ArachnaeSwarm { public class CompAbilityEffect_Possess : CompAbilityEffect, ICompAbilityEffectOnJumpCompleted { - public override void Apply(LocalTargetInfo target, LocalTargetInfo dest) + public new CompProperties_AbilityPossess Props => (CompProperties_AbilityPossess)props; + + public override bool Valid(LocalTargetInfo target, bool throwMessages = false) { - Log.Message($"[CompAbilityEffect_Possess] Apply called. Target: {target.Thing?.LabelShort ?? "null"}"); - base.Apply(target, dest); - - Pawn caster = this.parent.pawn; Pawn targetPawn = target.Pawn; + if (targetPawn == null) return false; - if (targetPawn == null || caster == null) + if (!targetPawn.RaceProps.Humanlike) { - Log.Warning($"[CompAbilityEffect_Possess] Apply aborted. TargetPawn or Caster is null."); - return; + if (throwMessages) Messages.Message("ARA_MustBeHumanlike".Translate(), targetPawn, MessageTypeDefOf.RejectInput, false); + return false; } + if (targetPawn.health.hediffSet.HasHediff(HediffDef.Named("ARA_Possession"))) + { + if (throwMessages) Messages.Message("ARA_AlreadyPossessed".Translate(targetPawn.LabelShort), targetPawn, MessageTypeDefOf.RejectInput, false); + return false; + } + + if (Props.raceBlacklist.Contains(targetPawn.def)) + { + if (throwMessages) Messages.Message("ARA_CannotPossessRace".Translate(targetPawn.def.label), targetPawn, MessageTypeDefOf.RejectInput, false); + return false; + } + + return base.Valid(target, throwMessages); + } + + public override void Apply(LocalTargetInfo target, LocalTargetInfo dest) + { + base.Apply(target, dest); + DoPossession(this.parent.pawn, target.Pawn); + } + + private void DoPossession(Pawn caster, Pawn targetPawn) + { + if (targetPawn == null || caster == null) return; + Log.Message($"[夺舍] 开始执行。施法者: {caster.LabelShort}, 目标: {targetPawn.LabelShort}"); Hediff_Possession hediff = (Hediff_Possession)HediffMaker.MakeHediff(HediffDef.Named("ARA_Possession"), targetPawn); - if (hediff.GetDirectlyHeldThings().TryAdd(caster.SplitOff(1), true)) { Log.Message($"[夺舍] 成功将 {caster.LabelShort} 的副本存入Hediff。"); + PawnDataUtility.TransferSoul(caster, targetPawn); + targetPawn.health.AddHediff(hediff); + + if (Props.hediffToApplyOnSuccess != null) + { + targetPawn.health.AddHediff(Props.hediffToApplyOnSuccess, null, null); + Log.Message($"[夺舍] 成功为 {targetPawn.LabelShort} 添加额外Hediff: {Props.hediffToApplyOnSuccess.defName}"); + } + Log.Message($"[夺舍] {targetPawn.LabelShort} (原 {caster.LabelShort}) 夺舍完成。"); } else { - Log.Error($"[夺舍] 无法将 {caster.LabelShort} 的副本存入Hediff。中止操作。"); - return; + Log.Error($"[夺舍] 无法将 {caster.LabelShort} 的副本存入Hediff。中止操作。"); } - - PawnDataUtility.TransferSoul(caster, targetPawn); - - targetPawn.health.AddHediff(hediff); - - Log.Message($"[夺舍] {targetPawn.LabelShort} (原 {caster.LabelShort}) 夺舍完成。"); } public void OnJumpCompleted(IntVec3 JUMPINPOS_UNUSED, LocalTargetInfo landingTarget) { - Log.Message($"[CompAbilityEffect_Possess] OnJumpCompleted called. Landing target: {landingTarget.Thing?.LabelShort ?? "null"}"); - this.Apply(landingTarget, null); + Pawn caster = this.parent.pawn; + if (caster == null || !(landingTarget.Thing is Pawn targetPawn)) return; + + Verb bestMeleeVerb = caster.meleeVerbs.TryGetMeleeVerb(targetPawn); + if (bestMeleeVerb == null) + { + Log.Warning($"[Possess] Caster {caster.LabelShort} has no melee verb."); + return; + } + + float damageAmount = bestMeleeVerb.verbProps.AdjustedMeleeDamageAmount(bestMeleeVerb, caster); + float armorPenetration = bestMeleeVerb.verbProps.AdjustedArmorPenetration(bestMeleeVerb, caster); + DamageDef damageDef = bestMeleeVerb.verbProps.meleeDamageDef; + + var dinfo = new DamageInfo(damageDef, damageAmount, armorPenetration, -1, caster); + DamageWorker.DamageResult damageResult = targetPawn.TakeDamage(dinfo); + Log.Message($"[Possess] Dealt {damageResult.totalDamageDealt} damage to {targetPawn.LabelShort} using {damageDef.defName}."); + + if (damageResult.totalDamageDealt > 0) + { + float baseChance = Props.successChance.RandomInRange; + float bonusFromDamage = damageResult.totalDamageDealt * Props.successChanceBonusPerDamage; + float finalChance = Mathf.Clamp01(baseChance + bonusFromDamage); + Log.Message($"[Possess] Base chance: {baseChance}, Bonus: {bonusFromDamage}, Final chance: {finalChance}"); + + if (Rand.Chance(finalChance)) + { + Log.Message($"[Possess] Success! Applying possession effect."); + DoPossession(caster, targetPawn); + } + else + { + Log.Message($"[Possess] Failed possession check."); + } + } } } } \ No newline at end of file diff --git a/Source/ArachnaeSwarm/ARA_HuggingFace/CompProperties_AbilityPossess.cs b/Source/ArachnaeSwarm/ARA_HuggingFace/CompProperties_AbilityPossess.cs index b4402d0..d1fef88 100644 --- a/Source/ArachnaeSwarm/ARA_HuggingFace/CompProperties_AbilityPossess.cs +++ b/Source/ArachnaeSwarm/ARA_HuggingFace/CompProperties_AbilityPossess.cs @@ -1,9 +1,18 @@ using RimWorld; +using Verse; +using System.Collections.Generic; namespace ArachnaeSwarm { public class CompProperties_AbilityPossess : CompProperties_AbilityEffect { + public FloatRange successChance = new FloatRange(0.6f, 1.0f); + public float successChanceBonusPerDamage = 0.01f; + public List raceBlacklist = new List(); + + // Optional: A hediff to apply to the victim upon successful possession. + public HediffDef hediffToApplyOnSuccess; + public CompProperties_AbilityPossess() { this.compClass = typeof(CompAbilityEffect_Possess); diff --git a/Source/ArachnaeSwarm/ARA_HuggingFace/Verb_JumpAndCastOnLanding.cs b/Source/ArachnaeSwarm/ARA_HuggingFace/Verb_JumpAndCastOnLanding.cs index 0140dd1..9ad7792 100644 --- a/Source/ArachnaeSwarm/ARA_HuggingFace/Verb_JumpAndCastOnLanding.cs +++ b/Source/ArachnaeSwarm/ARA_HuggingFace/Verb_JumpAndCastOnLanding.cs @@ -8,14 +8,18 @@ namespace ArachnaeSwarm { public class Verb_JumpAndCastOnLanding : Verb_CastAbility { + // 1. A private field to store our specific target, separate from what the base class does. private LocalTargetInfo capturedTarget; + // 2. Capture the reliable target information early. public override bool TryStartCastOn(LocalTargetInfo castTarg, LocalTargetInfo destTarg, bool surpriseAttack = false, bool canHitNonTargetPawns = true, bool preventFriendlyFire = false, bool nonInterruptingSelfCast = false) { + Log.Message($"[Verb_JumpAndCastOnLanding] TryStartCastOn: Capturing our dedicated target: {castTarg.Thing?.LabelShort ?? "null"}."); this.capturedTarget = castTarg; return base.TryStartCastOn(castTarg, destTarg, surpriseAttack, canHitNonTargetPawns, preventFriendlyFire, nonInterruptingSelfCast); } + // --- Copied and adapted methods from Verb_CastAbilityJump --- public virtual ThingDef JumpFlyerDef => ThingDefOf.PawnFlyer; public override float EffectiveRange => this.verbProps.range; @@ -35,25 +39,34 @@ namespace ArachnaeSwarm return true; } + // --- Our custom implementation of TryCastShot --- protected override bool TryCastShot() { + // The physical destination for the jump. This might be adjusted by the game. We let it be. LocalTargetInfo physicalTarget = this.currentTarget; + + // Our dedicated logical target, captured earlier and guaranteed to be the Pawn. LocalTargetInfo logicalTargetForUs = this.capturedTarget; if (logicalTargetForUs == null || !logicalTargetForUs.HasThing) { + Log.Error($"[Verb_JumpAndCastOnLanding] TryCastShot: Our captured target is invalid!"); return false; } + + Log.Message($"[Verb_JumpAndCastOnLanding] TryCastShot: Using our captured target '{logicalTargetForUs.Thing.LabelShort}' for logic, and letting game use '{physicalTarget.Cell}' for jump physics."); - return JumpUtility.DoJump( + bool jumpStarted = JumpUtility.DoJump( CasterPawn, - physicalTarget, + physicalTarget, // For the jump itself this.ReloadableCompSource, verbProps, this.ability, - logicalTargetForUs, + logicalTargetForUs, // For our logic on landing this.JumpFlyerDef ); + + return jumpStarted; } } } \ No newline at end of file