✅ 创建了 ArachnaeSwarmSettings.cs - 包含 enableDebugLogs 字段
✅ 创建了 ArachnaeLog.cs - 中央化日志类,仅检查mod设置(不检查DevMode) ✅ 创建了 ArachnaeSwarmMod.cs - Mod主类,提供UI设置选项 ✅ 修改了 MainHarmony.cs - 移除重复的Harmony初始化(现在由ArachnaeSwarmMod处理) ✅ 修改了 .csproj - 添加了3个新文件到编译列表 ✅ 替换了所有582个 Log.Message/Error/Warning 调用为 ArachnaeLog.Debug()
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
using RimWorld;
|
||||
using RimWorld;
|
||||
using RimWorld.Planet;
|
||||
using Verse;
|
||||
using UnityEngine;
|
||||
@@ -44,12 +44,12 @@ namespace ArachnaeSwarm
|
||||
// 新增:检查目标是否无法行动(倒地)
|
||||
if (target.Pawn != null && IsTargetImmobilized(target.Pawn))
|
||||
{
|
||||
Log.Message($"[夺舍] 目标 {target.Pawn.LabelShort} 无法行动,直接执行夺舍");
|
||||
ArachnaeLog.Debug($"[夺舍] 目标 {target.Pawn.LabelShort} 无法行动,直接执行夺舍");
|
||||
DoPossession(this.parent.pawn, target.Pawn);
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.Message($"[夺舍] 目标可以行动,执行标准夺舍流程");
|
||||
ArachnaeLog.Debug($"[夺舍] 目标可以行动,执行标准夺舍流程");
|
||||
DoPossession(this.parent.pawn, target.Pawn);
|
||||
}
|
||||
}
|
||||
@@ -62,14 +62,14 @@ namespace ArachnaeSwarm
|
||||
// 检查是否倒地
|
||||
if (target.Downed)
|
||||
{
|
||||
Log.Message($"[夺舍] 目标 {target.LabelShort} 处于倒地状态");
|
||||
ArachnaeLog.Debug($"[夺舍] 目标 {target.LabelShort} 处于倒地状态");
|
||||
return true;
|
||||
}
|
||||
|
||||
// 检查是否无法移动
|
||||
if (!target.health.capacities.CapableOf(PawnCapacityDefOf.Moving))
|
||||
{
|
||||
Log.Message($"[夺舍] 目标 {target.LabelShort} 无法移动");
|
||||
ArachnaeLog.Debug($"[夺舍] 目标 {target.LabelShort} 无法移动");
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -78,14 +78,14 @@ namespace ArachnaeSwarm
|
||||
target.health.hediffSet.HasHediff(HediffDefOf.CryptosleepSickness) ||
|
||||
target.health.hediffSet.HasHediff(HediffDefOf.FoodPoisoning))
|
||||
{
|
||||
Log.Message($"[夺舍] 目标 {target.LabelShort} 有严重的移动障碍");
|
||||
ArachnaeLog.Debug($"[夺舍] 目标 {target.LabelShort} 有严重的移动障碍");
|
||||
return true;
|
||||
}
|
||||
|
||||
// 检查是否被束缚或囚禁
|
||||
if (target.IsPrisoner || target.HostFaction != null)
|
||||
{
|
||||
Log.Message($"[夺舍] 目标 {target.LabelShort} 被囚禁或束缚");
|
||||
ArachnaeLog.Debug($"[夺舍] 目标 {target.LabelShort} 被囚禁或束缚");
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -98,7 +98,7 @@ namespace ArachnaeSwarm
|
||||
// 如果目标无法行动,100%成功率
|
||||
if (IsTargetImmobilized(targetPawn))
|
||||
{
|
||||
Log.Message($"[夺舍] 目标 {targetPawn.LabelShort} 无法行动,寄生成功率: 100%");
|
||||
ArachnaeLog.Debug($"[夺舍] 目标 {targetPawn.LabelShort} 无法行动,寄生成功率: 100%");
|
||||
return 1f;
|
||||
}
|
||||
|
||||
@@ -107,7 +107,7 @@ namespace ArachnaeSwarm
|
||||
float bonusFromDamage = damageDealt * Props.successChanceBonusPerDamage;
|
||||
float finalChance = Mathf.Clamp01(baseChance + bonusFromDamage);
|
||||
|
||||
Log.Message($"[夺舍] 目标 {targetPawn.LabelShort} 可以行动,寄生成功率: {finalChance:P0} (基础: {baseChance:P0}, 伤害加成: {bonusFromDamage:P0})");
|
||||
ArachnaeLog.Debug($"[夺舍] 目标 {targetPawn.LabelShort} 可以行动,寄生成功率: {finalChance:P0} (基础: {baseChance:P0}, 伤害加成: {bonusFromDamage:P0})");
|
||||
return finalChance;
|
||||
}
|
||||
|
||||
@@ -115,12 +115,12 @@ namespace ArachnaeSwarm
|
||||
{
|
||||
if (targetPawn == null || caster == null) return;
|
||||
|
||||
Log.Message($"[夺舍] 开始执行。施法者: {caster.LabelShort}, 目标: {targetPawn.LabelShort}");
|
||||
ArachnaeLog.Debug($"[夺舍] 开始执行。施法者: {caster.LabelShort}, 目标: {targetPawn.LabelShort}");
|
||||
|
||||
// 1. 捕获原宿主的完整数据,用于死亡后恢复尸体
|
||||
OriginalPawnData originalHostData = new OriginalPawnData();
|
||||
originalHostData.CaptureData(targetPawn);
|
||||
Log.Message($"[夺舍] 已捕获原始宿主 {targetPawn.LabelShort} 的完整数据。");
|
||||
ArachnaeLog.Debug($"[夺舍] 已捕获原始宿主 {targetPawn.LabelShort} 的完整数据。");
|
||||
|
||||
// 2. 备份原宿主的技能,用于后续合并
|
||||
var originalTargetSkills = new Dictionary<SkillDef, (int level, Passion passion)>();
|
||||
@@ -141,7 +141,7 @@ namespace ArachnaeSwarm
|
||||
// 4. 将抱脸虫存入Hediff
|
||||
if (hediff.casterContainer.TryAdd(originalCaster, true))
|
||||
{
|
||||
Log.Message($"[夺舍] 成功将 {caster.LabelShort} 的原始副本存入Hediff。");
|
||||
ArachnaeLog.Debug($"[夺舍] 成功将 {caster.LabelShort} 的原始副本存入Hediff。");
|
||||
|
||||
// 5. 灵魂转移,此时 targetPawn 的技能被 caster 的技能覆盖
|
||||
PawnDataUtility.TransferSoul(caster, targetPawn);
|
||||
@@ -155,7 +155,7 @@ namespace ArachnaeSwarm
|
||||
// 6. 技能合并:在灵魂转移后,直接在最终的身体 (targetPawn) 上进行合并
|
||||
if (targetPawn.skills != null)
|
||||
{
|
||||
Log.Message("[夺舍] 开始合并技能...");
|
||||
ArachnaeLog.Debug("[夺舍] 开始合并技能...");
|
||||
foreach (var skillRecord in targetPawn.skills.skills)
|
||||
{
|
||||
if (originalTargetSkills.TryGetValue(skillRecord.def, out var originalSkill))
|
||||
@@ -172,7 +172,7 @@ namespace ArachnaeSwarm
|
||||
}
|
||||
}
|
||||
}
|
||||
Log.Message("[夺舍] 技能合并完成。");
|
||||
ArachnaeLog.Debug("[夺舍] 技能合并完成。");
|
||||
}
|
||||
|
||||
// 7. 将Hediff添加到最终身体上
|
||||
@@ -181,13 +181,13 @@ namespace ArachnaeSwarm
|
||||
if (Props.hediffToApplyOnSuccess != null)
|
||||
{
|
||||
targetPawn.health.AddHediff(Props.hediffToApplyOnSuccess, null, null);
|
||||
Log.Message($"[夺舍] 成功为 {targetPawn.LabelShort} 添加额外Hediff: {Props.hediffToApplyOnSuccess.defName}");
|
||||
ArachnaeLog.Debug($"[夺舍] 成功为 {targetPawn.LabelShort} 添加额外Hediff: {Props.hediffToApplyOnSuccess.defName}");
|
||||
}
|
||||
Log.Message($"[夺舍] {targetPawn.LabelShort} (原 {caster.LabelShort}) 夺舍完成。");
|
||||
ArachnaeLog.Debug($"[夺舍] {targetPawn.LabelShort} (原 {caster.LabelShort}) 夺舍完成。");
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.Error($"[夺舍] 无法将 {caster.LabelShort} 的副本存入Hediff。中止操作。");
|
||||
ArachnaeLog.Debug($"[夺舍] 无法将 {caster.LabelShort} 的副本存入Hediff。中止操作。");
|
||||
if(originalCaster != null && !originalCaster.Destroyed) originalCaster.Destroy();
|
||||
}
|
||||
}
|
||||
@@ -200,7 +200,7 @@ namespace ArachnaeSwarm
|
||||
Verb bestMeleeVerb = caster.meleeVerbs.TryGetMeleeVerb(targetPawn);
|
||||
if (bestMeleeVerb == null)
|
||||
{
|
||||
Log.Warning($"[Possess] Caster {caster.LabelShort} has no melee verb.");
|
||||
ArachnaeLog.Debug($"[Possess] Caster {caster.LabelShort} has no melee verb.");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -210,23 +210,23 @@ namespace ArachnaeSwarm
|
||||
|
||||
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}.");
|
||||
ArachnaeLog.Debug($"[Possess] Dealt {damageResult.totalDamageDealt} damage to {targetPawn.LabelShort} using {damageDef.defName}.");
|
||||
|
||||
if (damageResult.totalDamageDealt > 0)
|
||||
{
|
||||
// 修改:使用新的成功率计算方法
|
||||
float finalChance = CalculateSuccessChance(targetPawn, damageResult.totalDamageDealt);
|
||||
|
||||
Log.Message($"[Possess] Final chance: {finalChance:P0}");
|
||||
ArachnaeLog.Debug($"[Possess] Final chance: {finalChance:P0}");
|
||||
|
||||
if (Rand.Chance(finalChance))
|
||||
{
|
||||
Log.Message($"[Possess] Success! Applying possession effect.");
|
||||
ArachnaeLog.Debug($"[Possess] Success! Applying possession effect.");
|
||||
DoPossession(caster, targetPawn);
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.Message($"[Possess] Failed possession check.");
|
||||
ArachnaeLog.Debug($"[Possess] Failed possession check.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user