整理一下

This commit is contained in:
2025-08-21 15:39:46 +08:00
parent 82b663c891
commit d0d125d095
65 changed files with 64 additions and 152 deletions

View File

@@ -0,0 +1,57 @@
using System;
using System.Collections.Generic;
using System.Linq;
using RimWorld;
using Verse;
using HarmonyLib; // 引入Harmony库
namespace WulaFallenEmpire
{
// 定义一个新的HediffCompProperties用作标记以赋予机械师能力
public class HediffCompProperties_MakesMechanitor : HediffCompProperties
{
// 这个类本身不需要任何逻辑它的存在就是为了在XML中被引用作为标记
public HediffCompProperties_MakesMechanitor()
{
// compClass必须指向一个有效的HediffComp类。
// 由于我们只想用这个Properties作为标记我们可以指向一个通用的、空的HediffComp。
// 但更简洁的方法是直接在补丁里检查Properties本身。
// 为了避免运行时错误我们暂时指向一个基础的HediffComp。
// 实际上在下面的补丁逻辑中我们不会实例化这个compClass。
this.compClass = typeof(HediffComp);
}
}
// Harmony Patch类用于修改MechanitorUtility.ShouldBeMechanitor方法
[HarmonyPatch(typeof(MechanitorUtility), "ShouldBeMechanitor")]
public static class MechanitorShouldBeMechanitorPatch
{
// Postfix方法将在原始方法执行后运行
// originalResult 是原始方法的返回值
// pawn 是原始方法的参数
public static void Postfix(Pawn pawn, ref bool __result)
{
// 如果原始方法已经返回true则无需进一步检查
if (__result)
{
return;
}
// 检查Biotech DLC是否激活且Pawn属于玩家安全派系
if (ModsConfig.BiotechActive && pawn.Faction.IsPlayerSafe())
{
// 遍历Pawn的所有Hediff
foreach (Hediff hediff in pawn.health.hediffSet.hediffs)
{
// 检查Hediff的定义中是否包含HediffCompProperties_MakesMechanitor
if (hediff.def.comps?.Any(c => c is HediffCompProperties_MakesMechanitor) ?? false)
{
__result = true; // 如果找到则将结果设置为true
return;
}
}
}
}
}
}