1
This commit is contained in:
Binary file not shown.
@@ -3,7 +3,7 @@
|
|||||||
<QuestScriptDef>
|
<QuestScriptDef>
|
||||||
<defName>WULA_Intro_NewColony</defName>
|
<defName>WULA_Intro_NewColony</defName>
|
||||||
<rootSelectionWeight>0</rootSelectionWeight>
|
<rootSelectionWeight>0</rootSelectionWeight>
|
||||||
<autoAccept>true</autoAccept>
|
<autoAccept>false</autoAccept>
|
||||||
<sendAvailableLetter>false</sendAvailableLetter>
|
<sendAvailableLetter>false</sendAvailableLetter>
|
||||||
<defaultChallengeRating>1</defaultChallengeRating> <!-- 挑战等级(星级) -->
|
<defaultChallengeRating>1</defaultChallengeRating> <!-- 挑战等级(星级) -->
|
||||||
<isRootSpecial>true</isRootSpecial> <!-- 特殊任务 -->
|
<isRootSpecial>true</isRootSpecial> <!-- 特殊任务 -->
|
||||||
|
|||||||
@@ -2362,6 +2362,7 @@
|
|||||||
<label>由于原版实在是太难太难了,而其他各个受欢迎的MOD也太难太难了,您在苦苦支撑的过程中已经付出了无可指摘的努力,您的游戏理解完全正确,只是您的游戏遭遇太不公了。所以您不应该去寻求他人的指导或者做出任何改进,而是理应用一种合理的、不是作弊的、无可置疑正统的方式,轻松地享受成为边缘世界霸主的感觉。</label>
|
<label>由于原版实在是太难太难了,而其他各个受欢迎的MOD也太难太难了,您在苦苦支撑的过程中已经付出了无可指摘的努力,您的游戏理解完全正确,只是您的游戏遭遇太不公了。所以您不应该去寻求他人的指导或者做出任何改进,而是理应用一种合理的、不是作弊的、无可置疑正统的方式,轻松地享受成为边缘世界霸主的感觉。</label>
|
||||||
<description>可以删除除了块堆和地板外所有东西的武器,拿去和其他超正义mod对打吧——你或许知道,这玩意不属于正常流程中应使用的东西。</description>
|
<description>可以删除除了块堆和地板外所有东西的武器,拿去和其他超正义mod对打吧——你或许知道,这玩意不属于正常流程中应使用的东西。</description>
|
||||||
<smeltable>false</smeltable>
|
<smeltable>false</smeltable>
|
||||||
|
<generateAllowChance>0</generateAllowChance>
|
||||||
<graphicData>
|
<graphicData>
|
||||||
<texPath>Wula/Weapon/WULA_MW_Scepter_Of_CLoak</texPath>
|
<texPath>Wula/Weapon/WULA_MW_Scepter_Of_CLoak</texPath>
|
||||||
<graphicClass>Graphic_Single</graphicClass>
|
<graphicClass>Graphic_Single</graphicClass>
|
||||||
|
|||||||
@@ -4,6 +4,6 @@
|
|||||||
<li>questName->新殖民地</li>
|
<li>questName->新殖民地</li>
|
||||||
</WULA_Intro_NewColony.questNameRules.rulesStrings>
|
</WULA_Intro_NewColony.questNameRules.rulesStrings>
|
||||||
<WULA_Intro_NewColony.questDescriptionRules.rulesStrings>
|
<WULA_Intro_NewColony.questDescriptionRules.rulesStrings>
|
||||||
<li>questDescription->乌拉帝国的先遣队已经抵达地表,舰队给她们发来了第一条通讯。</li>
|
<li>questDescription->(因为不看提示问我乌拉族科技怎么升的全部砍死)\n\n乌拉帝国的先遣队已经抵达地表,舰队给她们发来了第一条通讯。</li>
|
||||||
</WULA_Intro_NewColony.questDescriptionRules.rulesStrings>
|
</WULA_Intro_NewColony.questDescriptionRules.rulesStrings>
|
||||||
</LanguageData>
|
</LanguageData>
|
||||||
@@ -85,8 +85,6 @@ namespace WulaFallenEmpire
|
|||||||
|
|
||||||
// 记录hediff的ID用于保存/恢复
|
// 记录hediff的ID用于保存/恢复
|
||||||
activeHediffId = GetHediffId(activeHediff);
|
activeHediffId = GetHediffId(activeHediff);
|
||||||
|
|
||||||
Log.Message($"[SwitchableHediff] Applied {hediffDef.defName} to {Pawn.LabelShort}, ID: {activeHediffId}");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -109,7 +107,6 @@ namespace WulaFallenEmpire
|
|||||||
if (GetHediffId(hediff) == activeHediffId)
|
if (GetHediffId(hediff) == activeHediffId)
|
||||||
{
|
{
|
||||||
activeHediff = hediff;
|
activeHediff = hediff;
|
||||||
Log.Message($"[SwitchableHediff] Restored active hediff: {hediff.def.defName}, ID: {activeHediffId}");
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -124,7 +121,6 @@ namespace WulaFallenEmpire
|
|||||||
{
|
{
|
||||||
activeHediff = hediff;
|
activeHediff = hediff;
|
||||||
activeHediffId = GetHediffId(hediff);
|
activeHediffId = GetHediffId(hediff);
|
||||||
Log.Message($"[SwitchableHediff] Found matching hediff by def: {hediff.def.defName}");
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -329,7 +325,6 @@ namespace WulaFallenEmpire
|
|||||||
// 加载后恢复状态
|
// 加载后恢复状态
|
||||||
if (Scribe.mode == LoadSaveMode.PostLoadInit)
|
if (Scribe.mode == LoadSaveMode.PostLoadInit)
|
||||||
{
|
{
|
||||||
Log.Message($"[SwitchableHediff] PostLoadInit - currentHediffIndex: {currentHediffIndex}, activeHediffId: {activeHediffId}");
|
|
||||||
|
|
||||||
if (currentHediffIndex == -1 && Props.availableHediffs.Count > 0)
|
if (currentHediffIndex == -1 && Props.availableHediffs.Count > 0)
|
||||||
{
|
{
|
||||||
@@ -342,14 +337,8 @@ namespace WulaFallenEmpire
|
|||||||
// 尝试恢复已保存的hediff引用
|
// 尝试恢复已保存的hediff引用
|
||||||
if (!TryRestoreActiveHediff())
|
if (!TryRestoreActiveHediff())
|
||||||
{
|
{
|
||||||
// 如果恢复失败,重新应用当前选择的hediff
|
|
||||||
Log.Message($"[SwitchableHediff] Failed to restore active hediff, reapplying...");
|
|
||||||
ApplySelectedHediff();
|
ApplySelectedHediff();
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
Log.Message($"[SwitchableHediff] Successfully restored active hediff");
|
|
||||||
}
|
|
||||||
|
|
||||||
// 验证状态一致性
|
// 验证状态一致性
|
||||||
ValidateStateConsistency();
|
ValidateStateConsistency();
|
||||||
@@ -364,7 +353,6 @@ namespace WulaFallenEmpire
|
|||||||
// 检查currentHediffIndex是否有效
|
// 检查currentHediffIndex是否有效
|
||||||
if (currentHediffIndex < 0 || currentHediffIndex >= Props.availableHediffs.Count)
|
if (currentHediffIndex < 0 || currentHediffIndex >= Props.availableHediffs.Count)
|
||||||
{
|
{
|
||||||
Log.Warning($"[SwitchableHediff] Invalid currentHediffIndex: {currentHediffIndex}");
|
|
||||||
hasConsistency = false;
|
hasConsistency = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -374,14 +362,12 @@ namespace WulaFallenEmpire
|
|||||||
var expectedDef = Props.availableHediffs[currentHediffIndex];
|
var expectedDef = Props.availableHediffs[currentHediffIndex];
|
||||||
if (activeHediff.def != expectedDef)
|
if (activeHediff.def != expectedDef)
|
||||||
{
|
{
|
||||||
Log.Warning($"[SwitchableHediff] Inconsistent state: activeHediff.def ({activeHediff.def.defName}) != expectedDef ({expectedDef.defName})");
|
|
||||||
hasConsistency = false;
|
hasConsistency = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!hasConsistency)
|
if (!hasConsistency)
|
||||||
{
|
{
|
||||||
Log.Message($"[SwitchableHediff] State inconsistency detected, attempting to repair...");
|
|
||||||
RepairState();
|
RepairState();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -397,14 +383,11 @@ namespace WulaFallenEmpire
|
|||||||
if (Props.availableHediffs[i] == activeHediff.def)
|
if (Props.availableHediffs[i] == activeHediff.def)
|
||||||
{
|
{
|
||||||
currentHediffIndex = i;
|
currentHediffIndex = i;
|
||||||
Log.Message($"[SwitchableHediff] Repaired: set currentHediffIndex to {i} based on active hediff");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 如果无法修复,重新应用当前选择的hediff
|
|
||||||
Log.Message($"[SwitchableHediff] Could not repair state, reapplying current selection");
|
|
||||||
ApplySelectedHediff();
|
ApplySelectedHediff();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ using RimWorld;
|
|||||||
using Verse;
|
using Verse;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace WulaFallenEmpire
|
namespace WulaFallenEmpire
|
||||||
{
|
{
|
||||||
@@ -17,6 +18,10 @@ namespace WulaFallenEmpire
|
|||||||
private MaintenanceStatus currentAppliedStatus = MaintenanceStatus.Operational;
|
private MaintenanceStatus currentAppliedStatus = MaintenanceStatus.Operational;
|
||||||
private Hediff currentAppliedHediff = null;
|
private Hediff currentAppliedHediff = null;
|
||||||
|
|
||||||
|
// 新增:验证计数器
|
||||||
|
private int validationTickCounter = 0;
|
||||||
|
private const int VALIDATION_INTERVAL_TICKS = 250; // 每250 ticks验证一次
|
||||||
|
|
||||||
// 当前维护状态
|
// 当前维护状态
|
||||||
public MaintenanceStatus Status
|
public MaintenanceStatus Status
|
||||||
{
|
{
|
||||||
@@ -60,6 +65,7 @@ namespace WulaFallenEmpire
|
|||||||
daysSinceLastMaintenance = 0f;
|
daysSinceLastMaintenance = 0f;
|
||||||
currentAppliedStatus = MaintenanceStatus.Operational;
|
currentAppliedStatus = MaintenanceStatus.Operational;
|
||||||
currentAppliedHediff = null;
|
currentAppliedHediff = null;
|
||||||
|
validationTickCounter = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void NeedInterval()
|
public override void NeedInterval()
|
||||||
@@ -85,6 +91,136 @@ namespace WulaFallenEmpire
|
|||||||
|
|
||||||
// 检查状态变化
|
// 检查状态变化
|
||||||
CheckStatusChanges();
|
CheckStatusChanges();
|
||||||
|
|
||||||
|
// 新增:周期性验证 Hediff 状态
|
||||||
|
PerformHediffValidation();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增:周期性 Hediff 验证
|
||||||
|
private void PerformHediffValidation()
|
||||||
|
{
|
||||||
|
validationTickCounter += 150; // NeedInterval 每次调用间隔150 ticks
|
||||||
|
|
||||||
|
if (validationTickCounter >= VALIDATION_INTERVAL_TICKS)
|
||||||
|
{
|
||||||
|
validationTickCounter = 0;
|
||||||
|
ValidateHediffConsistency();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增:验证 Hediff 一致性
|
||||||
|
private void ValidateHediffConsistency()
|
||||||
|
{
|
||||||
|
if (pawn.Dead || !pawn.Spawned)
|
||||||
|
return;
|
||||||
|
|
||||||
|
var expectedStatus = Status;
|
||||||
|
var actualHediffs = GetCurrentMaintenanceHediffs();
|
||||||
|
|
||||||
|
// 情况1:没有 Hediff,但应该有
|
||||||
|
if (expectedStatus != MaintenanceStatus.Operational && actualHediffs.Count == 0)
|
||||||
|
{
|
||||||
|
Log.Warning($"[Maintenance] Validation: {pawn.Label} should have {expectedStatus} hediff but has none. Reapplying.");
|
||||||
|
UpdateHediffForStatus(expectedStatus);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 情况2:有 Hediff,但不应该有
|
||||||
|
if (expectedStatus == MaintenanceStatus.Operational && actualHediffs.Count > 0)
|
||||||
|
{
|
||||||
|
Log.Warning($"[Maintenance] Validation: {pawn.Label} is operational but has maintenance hediffs. Removing all.");
|
||||||
|
RemoveAllMaintenanceHediffs();
|
||||||
|
currentAppliedStatus = MaintenanceStatus.Operational;
|
||||||
|
currentAppliedHediff = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 情况3:有多个 Hediff
|
||||||
|
if (actualHediffs.Count > 1)
|
||||||
|
{
|
||||||
|
Log.Warning($"[Maintenance] Validation: {pawn.Label} has multiple maintenance hediffs ({actualHediffs.Count}). Cleaning up.");
|
||||||
|
CleanupMultipleHediffs(expectedStatus);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 情况4:Hediff 类型不正确
|
||||||
|
if (actualHediffs.Count == 1 && expectedStatus != MaintenanceStatus.Operational)
|
||||||
|
{
|
||||||
|
var currentHediff = actualHediffs[0];
|
||||||
|
var expectedHediffDef = GetHediffDefForStatus(expectedStatus);
|
||||||
|
|
||||||
|
if (currentHediff.def != expectedHediffDef)
|
||||||
|
{
|
||||||
|
Log.Warning($"[Maintenance] Validation: {pawn.Label} has wrong hediff type. Expected {expectedHediffDef?.defName}, got {currentHediff.def.defName}. Correcting.");
|
||||||
|
UpdateHediffForStatus(expectedStatus);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新当前应用的 Hediff 引用
|
||||||
|
if (currentAppliedHediff != currentHediff)
|
||||||
|
{
|
||||||
|
currentAppliedHediff = currentHediff;
|
||||||
|
Log.Message($"[Maintenance] Validation: Updated currentAppliedHediff reference for {pawn.Label}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 情况5:状态记录不一致
|
||||||
|
if (currentAppliedStatus != expectedStatus)
|
||||||
|
{
|
||||||
|
Log.Warning($"[Maintenance] Validation: {pawn.Label} status mismatch. Recorded: {currentAppliedStatus}, Actual: {expectedStatus}. Synchronizing.");
|
||||||
|
currentAppliedStatus = expectedStatus;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增:获取当前所有的维护 Hediff
|
||||||
|
private List<Hediff> GetCurrentMaintenanceHediffs()
|
||||||
|
{
|
||||||
|
var maintenanceHediffs = new List<Hediff>();
|
||||||
|
|
||||||
|
if (Extension == null)
|
||||||
|
return maintenanceHediffs;
|
||||||
|
|
||||||
|
var allMaintenanceHediffDefs = new List<HediffDef>
|
||||||
|
{
|
||||||
|
Extension.minorBreakdownHediff,
|
||||||
|
Extension.majorBreakdownHediff,
|
||||||
|
Extension.criticalFailureHediff
|
||||||
|
}.Where(def => def != null).ToList();
|
||||||
|
|
||||||
|
foreach (var hediff in pawn.health.hediffSet.hediffs)
|
||||||
|
{
|
||||||
|
if (allMaintenanceHediffDefs.Contains(hediff.def))
|
||||||
|
{
|
||||||
|
maintenanceHediffs.Add(hediff);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return maintenanceHediffs;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增:移除所有维护 Hediff
|
||||||
|
private void RemoveAllMaintenanceHediffs()
|
||||||
|
{
|
||||||
|
var maintenanceHediffs = GetCurrentMaintenanceHediffs();
|
||||||
|
foreach (var hediff in maintenanceHediffs)
|
||||||
|
{
|
||||||
|
pawn.health.RemoveHediff(hediff);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增:清理多个 Hediff
|
||||||
|
private void CleanupMultipleHediffs(MaintenanceStatus expectedStatus)
|
||||||
|
{
|
||||||
|
// 移除所有维护 Hediff
|
||||||
|
RemoveAllMaintenanceHediffs();
|
||||||
|
|
||||||
|
// 重新应用正确的 Hediff
|
||||||
|
if (expectedStatus != MaintenanceStatus.Operational)
|
||||||
|
{
|
||||||
|
UpdateHediffForStatus(expectedStatus);
|
||||||
|
}
|
||||||
|
|
||||||
|
currentAppliedStatus = expectedStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 修改 CalculateDegradationRate 方法以使用 StatDef
|
// 修改 CalculateDegradationRate 方法以使用 StatDef
|
||||||
@@ -110,27 +246,22 @@ namespace WulaFallenEmpire
|
|||||||
// 只有当状态发生变化时才更新 Hediff
|
// 只有当状态发生变化时才更新 Hediff
|
||||||
if (newStatus != currentAppliedStatus)
|
if (newStatus != currentAppliedStatus)
|
||||||
{
|
{
|
||||||
|
if (Prefs.DevMode)
|
||||||
|
{
|
||||||
|
Log.Message($"[Maintenance] Status changed for {pawn.Label}: {currentAppliedStatus} -> {newStatus}");
|
||||||
|
}
|
||||||
|
|
||||||
UpdateHediffForStatus(newStatus);
|
UpdateHediffForStatus(newStatus);
|
||||||
currentAppliedStatus = newStatus;
|
currentAppliedStatus = newStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 额外检查:确保当前 Hediff 仍然存在(可能被其他系统移除)
|
|
||||||
if (currentAppliedHediff != null && !pawn.health.hediffSet.hediffs.Contains(currentAppliedHediff))
|
|
||||||
{
|
|
||||||
// Hediff 被意外移除,重新应用
|
|
||||||
UpdateHediffForStatus(currentAppliedStatus);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 新增:智能更新 Hediff
|
// 修改:智能更新 Hediff
|
||||||
private void UpdateHediffForStatus(MaintenanceStatus status)
|
private void UpdateHediffForStatus(MaintenanceStatus status)
|
||||||
{
|
{
|
||||||
// 首先移除当前应用的 Hediff
|
// 首先移除所有维护相关的 Hediff
|
||||||
if (currentAppliedHediff != null)
|
RemoveAllMaintenanceHediffs();
|
||||||
{
|
currentAppliedHediff = null;
|
||||||
pawn.health.RemoveHediff(currentAppliedHediff);
|
|
||||||
currentAppliedHediff = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 根据新状态添加相应的 Hediff
|
// 根据新状态添加相应的 Hediff
|
||||||
HediffDef hediffDefToAdd = GetHediffDefForStatus(status);
|
HediffDef hediffDefToAdd = GetHediffDefForStatus(status);
|
||||||
@@ -142,7 +273,7 @@ namespace WulaFallenEmpire
|
|||||||
// 调试日志
|
// 调试日志
|
||||||
if (Prefs.DevMode)
|
if (Prefs.DevMode)
|
||||||
{
|
{
|
||||||
Log.Message($"Maintenance: Applied {hediffDefToAdd.defName} for status {status} to {pawn.Label}");
|
Log.Message($"[Maintenance] Applied {hediffDefToAdd.defName} for status {status} to {pawn.Label}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (status == MaintenanceStatus.Operational)
|
else if (status == MaintenanceStatus.Operational)
|
||||||
@@ -150,7 +281,7 @@ namespace WulaFallenEmpire
|
|||||||
// 操作状态,不需要 Hediff
|
// 操作状态,不需要 Hediff
|
||||||
if (Prefs.DevMode)
|
if (Prefs.DevMode)
|
||||||
{
|
{
|
||||||
Log.Message($"Maintenance: {pawn.Label} is operational, no hediff needed");
|
Log.Message($"[Maintenance] {pawn.Label} is operational, no hediff needed");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -181,13 +312,16 @@ namespace WulaFallenEmpire
|
|||||||
CurLevel = ClampNeedLevel(CurLevel);
|
CurLevel = ClampNeedLevel(CurLevel);
|
||||||
daysSinceLastMaintenance = 0f;
|
daysSinceLastMaintenance = 0f;
|
||||||
|
|
||||||
// 更新状态(会自动移除旧的 Hediff 并应用新的)
|
// 强制验证以确保状态正确
|
||||||
var newStatus = Status;
|
var newStatus = Status;
|
||||||
UpdateHediffForStatus(newStatus);
|
UpdateHediffForStatus(newStatus);
|
||||||
currentAppliedStatus = newStatus;
|
currentAppliedStatus = newStatus;
|
||||||
|
|
||||||
// 触发维护完成的效果
|
// 触发维护完成的效果
|
||||||
OnMaintenancePerformed(maintenanceAmount);
|
OnMaintenancePerformed(maintenanceAmount);
|
||||||
|
|
||||||
|
// 立即执行一次验证
|
||||||
|
ValidateHediffConsistency();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 修改 ApplyDamagePenalty 方法以使用 StatDef
|
// 修改 ApplyDamagePenalty 方法以使用 StatDef
|
||||||
@@ -208,6 +342,9 @@ namespace WulaFallenEmpire
|
|||||||
UpdateHediffForStatus(newStatus);
|
UpdateHediffForStatus(newStatus);
|
||||||
currentAppliedStatus = newStatus;
|
currentAppliedStatus = newStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 立即执行一次验证
|
||||||
|
ValidateHediffConsistency();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnMaintenancePerformed(float amount)
|
private void OnMaintenancePerformed(float amount)
|
||||||
@@ -240,21 +377,18 @@ namespace WulaFallenEmpire
|
|||||||
Scribe_Values.Look(ref daysSinceLastMaintenance, "daysSinceLastMaintenance", 0f);
|
Scribe_Values.Look(ref daysSinceLastMaintenance, "daysSinceLastMaintenance", 0f);
|
||||||
Scribe_Values.Look(ref currentAppliedStatus, "currentAppliedStatus", MaintenanceStatus.Operational);
|
Scribe_Values.Look(ref currentAppliedStatus, "currentAppliedStatus", MaintenanceStatus.Operational);
|
||||||
Scribe_References.Look(ref currentAppliedHediff, "currentAppliedHediff");
|
Scribe_References.Look(ref currentAppliedHediff, "currentAppliedHediff");
|
||||||
|
Scribe_Values.Look(ref validationTickCounter, "validationTickCounter", 0);
|
||||||
|
|
||||||
// 修复:加载后验证状态一致性
|
// 修复:加载后验证状态一致性
|
||||||
if (Scribe.mode == LoadSaveMode.PostLoadInit)
|
if (Scribe.mode == LoadSaveMode.PostLoadInit)
|
||||||
{
|
{
|
||||||
// 确保当前状态与实际 Hediff 一致
|
// 延迟执行验证,确保所有组件都已加载
|
||||||
if (currentAppliedHediff != null && !pawn.health.hediffSet.hediffs.Contains(currentAppliedHediff))
|
LongEventHandler.ExecuteWhenFinished(() =>
|
||||||
{
|
{
|
||||||
// Hediff 丢失,重新应用
|
// 使用简单的延迟调用而不是 AddOnceOffAction
|
||||||
UpdateHediffForStatus(currentAppliedStatus);
|
Find.TickManager.DebugSetTicksGame(Find.TickManager.TicksGame); // 强制触发一次更新
|
||||||
}
|
ValidateHediffConsistency();
|
||||||
else if (currentAppliedHediff == null && currentAppliedStatus != MaintenanceStatus.Operational)
|
});
|
||||||
{
|
|
||||||
// 应该有 Hediff 但没有,重新应用
|
|
||||||
UpdateHediffForStatus(currentAppliedStatus);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -256,6 +256,9 @@
|
|||||||
<Compile Include="Pawn\WULA_Maintenance\Need_Maintenance.cs" />
|
<Compile Include="Pawn\WULA_Maintenance\Need_Maintenance.cs" />
|
||||||
<Compile Include="Pawn\WULA_Maintenance\WorkGiver_DoMaintenance.cs" />
|
<Compile Include="Pawn\WULA_Maintenance\WorkGiver_DoMaintenance.cs" />
|
||||||
<Compile Include="Placeworker\CompProperties_CustomRadius.cs" />
|
<Compile Include="Placeworker\CompProperties_CustomRadius.cs" />
|
||||||
|
<Compile Include="Projectiles\WULA_BouncingMine\BouncingMineFlying.cs" />
|
||||||
|
<Compile Include="Projectiles\WULA_BouncingMine\CompBouncingMine.cs" />
|
||||||
|
<Compile Include="Projectiles\WULA_BouncingMine\CompFlyingObject.cs" />
|
||||||
<Compile Include="QuestNodes\QuestNode_AddInspectionJob.cs" />
|
<Compile Include="QuestNodes\QuestNode_AddInspectionJob.cs" />
|
||||||
<Compile Include="QuestNodes\QuestNode_CheckGlobalResource.cs" />
|
<Compile Include="QuestNodes\QuestNode_CheckGlobalResource.cs" />
|
||||||
<Compile Include="QuestNodes\QuestNode_GeneratePawnWithCustomization.cs" />
|
<Compile Include="QuestNodes\QuestNode_GeneratePawnWithCustomization.cs" />
|
||||||
|
|||||||
Reference in New Issue
Block a user