暂存
This commit is contained in:
Binary file not shown.
@@ -9,6 +9,7 @@
|
||||
<iconPath>UI/Abilities/Longjump</iconPath>
|
||||
<cooldownTicksRange>800</cooldownTicksRange>
|
||||
<casterMustBeCapableOfViolence>false</casterMustBeCapableOfViolence>
|
||||
<hotKey>Misc1</hotKey>
|
||||
<verbProperties>
|
||||
<!-- 使用我们新的Verb -->
|
||||
<verbClass>ArachnaeSwarm.Verb_JumpAndCastOnLanding</verbClass>
|
||||
@@ -28,7 +29,7 @@
|
||||
<!-- comps部分现在只包含夺舍效果,因为跳跃由Verb处理 -->
|
||||
<li Class="ArachnaeSwarm.CompProperties_AbilityPossess">
|
||||
<!-- Base success chance range (60% to 100%) -->
|
||||
<successChance>0.6~1.0</successChance>
|
||||
<successChance>0.1</successChance>
|
||||
<!-- Bonus success chance per point of damage dealt (1%) -->
|
||||
<successChanceBonusPerDamage>0.01</successChanceBonusPerDamage>
|
||||
<!-- Optional: Hediff to apply on successful possession -->
|
||||
|
||||
@@ -3,6 +3,7 @@ using RimWorld.Planet;
|
||||
using Verse;
|
||||
using UnityEngine;
|
||||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
@@ -45,14 +46,55 @@ namespace ArachnaeSwarm
|
||||
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))
|
||||
// 为了保留原始宿主的技能数据,在灵魂转移前先复制一份
|
||||
var originalTargetSkills = new Dictionary<SkillDef, (int, Passion)>();
|
||||
if (targetPawn.skills != null)
|
||||
{
|
||||
Log.Message($"[夺舍] 成功将 {caster.LabelShort} 的副本存入Hediff。");
|
||||
foreach (var skill in targetPawn.skills.skills)
|
||||
{
|
||||
originalTargetSkills[skill.def] = (skill.levelInt, skill.passion);
|
||||
}
|
||||
}
|
||||
|
||||
// 储存原始抱脸虫
|
||||
Pawn originalCaster = caster.SplitOff(1) as Pawn;
|
||||
|
||||
Hediff_Possession hediff = (Hediff_Possession)HediffMaker.MakeHediff(HediffDef.Named("ARA_Possession"), targetPawn);
|
||||
if (hediff.GetDirectlyHeldThings().TryAdd(originalCaster, true))
|
||||
{
|
||||
Log.Message($"[夺舍] 成功将 {caster.LabelShort} 的原始副本存入Hediff。");
|
||||
|
||||
// 灵魂转移,此时 targetPawn 的技能被 caster 的技能覆盖
|
||||
PawnDataUtility.TransferSoul(caster, targetPawn);
|
||||
|
||||
// --- 技能合并 ---
|
||||
// 在灵魂转移后,直接在最终的身体 (targetPawn) 上进行合并
|
||||
if (targetPawn.skills != null)
|
||||
{
|
||||
Log.Message("[夺舍] 开始合并技能...");
|
||||
foreach (var skillRecord in targetPawn.skills.skills)
|
||||
{
|
||||
if (originalTargetSkills.TryGetValue(skillRecord.def, out var originalSkill))
|
||||
{
|
||||
// 比较等级
|
||||
if (originalSkill.Item1 > skillRecord.levelInt)
|
||||
{
|
||||
skillRecord.levelInt = originalSkill.Item1;
|
||||
}
|
||||
// 比较热情
|
||||
if (originalSkill.Item2 > skillRecord.passion)
|
||||
{
|
||||
skillRecord.passion = originalSkill.Item2;
|
||||
}
|
||||
}
|
||||
}
|
||||
Log.Message("[夺舍] 技能合并完成。");
|
||||
}
|
||||
|
||||
|
||||
targetPawn.health.AddHediff(hediff);
|
||||
|
||||
if (Props.hediffToApplyOnSuccess != null)
|
||||
|
||||
@@ -44,7 +44,7 @@ namespace ArachnaeSwarm
|
||||
}
|
||||
|
||||
Log.Message($"Host {deadBody.LabelShort} died. Transferring experience back to {storedCaster.LabelShort} and ejecting.");
|
||||
PawnDataUtility.TransferSoul(deadBody, storedCaster);
|
||||
// PawnDataUtility.TransferSoul(deadBody, storedCaster); // 注释掉这一行,因为我们不希望宿主的技能在死亡时传回给抱脸虫。
|
||||
this.EjectContents();
|
||||
}
|
||||
|
||||
|
||||
@@ -16,6 +16,9 @@ namespace ArachnaeSwarm
|
||||
}
|
||||
|
||||
Log.Message($"Beginning soul transfer from {soulSource.LabelShort} to {bodyTarget.LabelShort}.");
|
||||
|
||||
bool isPossessing = soulSource.def.defName == "ARA_HuggingFace";
|
||||
Log.Message(isPossessing ? "[夺舍] 模式:抱脸虫 -> 宿主" : "[回归] 模式:宿主 -> 抱脸虫");
|
||||
|
||||
// --- 1. Core Identity ---
|
||||
bodyTarget.Name = soulSource.Name;
|
||||
@@ -37,6 +40,7 @@ namespace ArachnaeSwarm
|
||||
}
|
||||
|
||||
// --- 2. Growth & Experience ---
|
||||
// 技能合并逻辑已移出,这里只做纯粹的数据覆盖
|
||||
if (bodyTarget.skills != null) bodyTarget.skills.skills.Clear();
|
||||
if (soulSource.skills != null)
|
||||
{
|
||||
@@ -52,6 +56,7 @@ namespace ArachnaeSwarm
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (bodyTarget.records != null && soulSource.records != null)
|
||||
{
|
||||
foreach (RecordDef recordDef in DefDatabase<RecordDef>.AllDefs)
|
||||
|
||||
Reference in New Issue
Block a user