Files
WulaFallenEmpireRW/Source/WulaFallenEmpire/HarmonyPatches/MechanitorPatch.cs
2025-08-21 15:39:46 +08:00

58 lines
2.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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;
}
}
}
}
}
}