✅ WulaFallenEmpireSettings.cs - 添加了 public bool enableDebugLogs = false; 字段和保存配置
✅ WulaLog.cs - 修改了DebugEnabled属性,仅检查enableDebugLogs设置(不检查DevMode) ✅ WulaFallenEmpireMod.cs - 在DoSettingsWindowContents中添加了UI复选框,显示"Enable Debug Logs"选项 ✅ 替换了所有848个Log.Message/Error/Warning调用为WulaLog.Debug()
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
using RimWorld;
|
||||
using RimWorld;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Verse;
|
||||
@@ -37,7 +37,7 @@ namespace WulaFallenEmpire
|
||||
var prefab = DefDatabase<PrefabDef>.GetNamed(PropsPrefab.prefabDefName, false);
|
||||
if (prefab == null)
|
||||
{
|
||||
Log.Error($"[PrefabSkyfallerCaller] Could not find PrefabDef named {PropsPrefab.prefabDefName}");
|
||||
WulaLog.Debug($"[PrefabSkyfallerCaller] Could not find PrefabDef named {PropsPrefab.prefabDefName}");
|
||||
return new List<ThingDefCountClass>(); // Return empty list to avoid null reference
|
||||
}
|
||||
|
||||
@@ -69,7 +69,7 @@ namespace WulaFallenEmpire
|
||||
// Final material check before launching
|
||||
if (!HasEnoughMaterials())
|
||||
{
|
||||
Log.Warning($"[PrefabSkyfallerCaller] Aborting skyfaller call due to insufficient materials at the last moment.");
|
||||
WulaLog.Debug($"[PrefabSkyfallerCaller] Aborting skyfaller call due to insufficient materials at the last moment.");
|
||||
ResetCall(); // Reset the calling state
|
||||
return;
|
||||
}
|
||||
@@ -114,7 +114,7 @@ namespace WulaFallenEmpire
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.Error($"[PrefabSkyfallerCaller] Failed to create Skyfaller_PrefabSpawner. Created thing is of type {thing.GetType().FullName}. Def: {Props.skyfallerDef.defName}, ThingClass: {Props.skyfallerDef.thingClass.FullName}");
|
||||
WulaLog.Debug($"[PrefabSkyfallerCaller] Failed to create Skyfaller_PrefabSpawner. Created thing is of type {thing.GetType().FullName}. Def: {Props.skyfallerDef.defName}, ThingClass: {Props.skyfallerDef.thingClass.FullName}");
|
||||
// Fallback: spawn as normal skyfaller if possible, or just abort
|
||||
if (thing is Skyfaller normalSkyfaller)
|
||||
{
|
||||
@@ -138,7 +138,7 @@ namespace WulaFallenEmpire
|
||||
|
||||
if (roof != null && !roof.isThickRoof && Props.allowThinRoof)
|
||||
{
|
||||
Log.Message($"[PrefabSkyfallerCaller] Destroying thin roof at {targetPos}");
|
||||
WulaLog.Debug($"[PrefabSkyfallerCaller] Destroying thin roof at {targetPos}");
|
||||
parent.Map.roofGrid.SetRoof(targetPos, null);
|
||||
|
||||
// 生成屋顶破坏效果
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using RimWorld;
|
||||
using RimWorld.Planet;
|
||||
@@ -79,7 +79,7 @@ namespace WulaFallenEmpire
|
||||
}
|
||||
}
|
||||
|
||||
Log.Message($"[SkyfallerCaller] Found {allFlyOvers.Count} FlyOvers on map");
|
||||
WulaLog.Debug($"[SkyfallerCaller] Found {allFlyOvers.Count} FlyOvers on map");
|
||||
|
||||
foreach (var thing in allFlyOvers)
|
||||
{
|
||||
@@ -89,28 +89,28 @@ namespace WulaFallenEmpire
|
||||
var facilitiesComp = flyOver.GetComp<CompFlyOverFacilities>();
|
||||
if (facilitiesComp == null)
|
||||
{
|
||||
Log.Warning($"[SkyfallerCaller] FlyOver at {flyOver.Position} has no CompFlyOverFacilities");
|
||||
WulaLog.Debug($"[SkyfallerCaller] FlyOver at {flyOver.Position} has no CompFlyOverFacilities");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (facilitiesComp.HasFacility("BuildingdropperFacility"))
|
||||
{
|
||||
Log.Message($"[SkyfallerCaller] Found valid FlyOver at {flyOver.Position} with BuildingdropperFacility");
|
||||
WulaLog.Debug($"[SkyfallerCaller] Found valid FlyOver at {flyOver.Position} with BuildingdropperFacility");
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.Message($"[SkyfallerCaller] FlyOver at {flyOver.Position} missing BuildingdropperFacility. Has: {string.Join(", ", facilitiesComp.GetActiveFacilities())}");
|
||||
WulaLog.Debug($"[SkyfallerCaller] FlyOver at {flyOver.Position} missing BuildingdropperFacility. Has: {string.Join(", ", facilitiesComp.GetActiveFacilities())}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Log.Message("[SkyfallerCaller] No FlyOver with BuildingdropperFacility found");
|
||||
WulaLog.Debug("[SkyfallerCaller] No FlyOver with BuildingdropperFacility found");
|
||||
return false;
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
Log.Error($"[SkyfallerCaller] Exception while checking for FlyOver: {ex}");
|
||||
WulaLog.Debug($"[SkyfallerCaller] Exception while checking for FlyOver: {ex}");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -146,7 +146,7 @@ namespace WulaFallenEmpire
|
||||
callTick = Find.TickManager.TicksGame + Props.autoCallDelayTicks;
|
||||
calling = true;
|
||||
|
||||
Log.Message($"[SkyfallerCaller] Scheduled auto-call for non-player building {parent.Label} at tick {callTick}");
|
||||
WulaLog.Debug($"[SkyfallerCaller] Scheduled auto-call for non-player building {parent.Label} at tick {callTick}");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -185,11 +185,11 @@ namespace WulaFallenEmpire
|
||||
{
|
||||
try
|
||||
{
|
||||
Log.Message($"[SkyfallerCaller] Executing auto skyfaller call for non-player building at {parent.Position}");
|
||||
WulaLog.Debug($"[SkyfallerCaller] Executing auto skyfaller call for non-player building at {parent.Position}");
|
||||
|
||||
if (Props.skyfallerDef == null)
|
||||
{
|
||||
Log.Error("[SkyfallerCaller] Skyfaller def is null!");
|
||||
WulaLog.Debug("[SkyfallerCaller] Skyfaller def is null!");
|
||||
ResetCall();
|
||||
return;
|
||||
}
|
||||
@@ -202,19 +202,19 @@ namespace WulaFallenEmpire
|
||||
Skyfaller skyfaller = SkyfallerMaker.MakeSkyfaller(Props.skyfallerDef);
|
||||
if (skyfaller == null)
|
||||
{
|
||||
Log.Error("[SkyfallerCaller] Failed to create skyfaller!");
|
||||
WulaLog.Debug("[SkyfallerCaller] Failed to create skyfaller!");
|
||||
ResetCall();
|
||||
return;
|
||||
}
|
||||
|
||||
IntVec3 spawnPos = parent.Position;
|
||||
Log.Message($"[SkyfallerCaller] Spawning auto skyfaller at {spawnPos}");
|
||||
WulaLog.Debug($"[SkyfallerCaller] Spawning auto skyfaller at {spawnPos}");
|
||||
|
||||
GenSpawn.Spawn(skyfaller, spawnPos, parent.Map);
|
||||
|
||||
if (Props.destroyBuilding)
|
||||
{
|
||||
Log.Message($"[SkyfallerCaller] Destroying non-player building {parent.Label}");
|
||||
WulaLog.Debug($"[SkyfallerCaller] Destroying non-player building {parent.Label}");
|
||||
parent.Destroy(DestroyMode.Vanish);
|
||||
}
|
||||
|
||||
@@ -228,7 +228,7 @@ namespace WulaFallenEmpire
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
Log.Error($"[SkyfallerCaller] Error in ExecuteAutoSkyfallerCall: {ex}");
|
||||
WulaLog.Debug($"[SkyfallerCaller] Error in ExecuteAutoSkyfallerCall: {ex}");
|
||||
ResetCall();
|
||||
}
|
||||
}
|
||||
@@ -263,7 +263,7 @@ namespace WulaFallenEmpire
|
||||
return;
|
||||
}
|
||||
|
||||
Log.Message($"[SkyfallerCaller] Starting skyfaller call from {parent.Label} at {parent.Position}");
|
||||
WulaLog.Debug($"[SkyfallerCaller] Starting skyfaller call from {parent.Label} at {parent.Position}");
|
||||
|
||||
calling = true;
|
||||
used = true;
|
||||
@@ -295,11 +295,11 @@ namespace WulaFallenEmpire
|
||||
|
||||
protected virtual void ExecuteSkyfallerCall()
|
||||
{
|
||||
Log.Message($"[SkyfallerCaller] Executing skyfaller call at {parent.Position}");
|
||||
WulaLog.Debug($"[SkyfallerCaller] Executing skyfaller call at {parent.Position}");
|
||||
|
||||
if (Props.skyfallerDef == null)
|
||||
{
|
||||
Log.Error("[SkyfallerCaller] Skyfaller def is null!");
|
||||
WulaLog.Debug("[SkyfallerCaller] Skyfaller def is null!");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -307,7 +307,7 @@ namespace WulaFallenEmpire
|
||||
var resourceCheck = CheckAndConsumeMaterials();
|
||||
if (!resourceCheck.HasEnoughMaterials)
|
||||
{
|
||||
Log.Message($"[SkyfallerCaller] Aborting skyfaller call due to insufficient materials.");
|
||||
WulaLog.Debug($"[SkyfallerCaller] Aborting skyfaller call due to insufficient materials.");
|
||||
ResetCall();
|
||||
return;
|
||||
}
|
||||
@@ -322,18 +322,18 @@ namespace WulaFallenEmpire
|
||||
Skyfaller skyfaller = SkyfallerMaker.MakeSkyfaller(Props.skyfallerDef);
|
||||
if (skyfaller == null)
|
||||
{
|
||||
Log.Error("[SkyfallerCaller] Failed to create skyfaller!");
|
||||
WulaLog.Debug("[SkyfallerCaller] Failed to create skyfaller!");
|
||||
return;
|
||||
}
|
||||
|
||||
IntVec3 spawnPos = parent.Position;
|
||||
Log.Message($"[SkyfallerCaller] Spawning skyfaller at {spawnPos}");
|
||||
WulaLog.Debug($"[SkyfallerCaller] Spawning skyfaller at {spawnPos}");
|
||||
|
||||
GenSpawn.Spawn(skyfaller, spawnPos, parent.Map);
|
||||
|
||||
if (Props.destroyBuilding)
|
||||
{
|
||||
Log.Message($"[SkyfallerCaller] Destroying building {parent.Label}");
|
||||
WulaLog.Debug($"[SkyfallerCaller] Destroying building {parent.Label}");
|
||||
parent.Destroy(DestroyMode.Vanish);
|
||||
}
|
||||
|
||||
@@ -350,7 +350,7 @@ namespace WulaFallenEmpire
|
||||
|
||||
if (roof != null && !roof.isThickRoof && Props.allowThinRoof)
|
||||
{
|
||||
Log.Message($"[SkyfallerCaller] Destroying thin roof at {targetPos}");
|
||||
WulaLog.Debug($"[SkyfallerCaller] Destroying thin roof at {targetPos}");
|
||||
parent.Map.roofGrid.SetRoof(targetPos, null);
|
||||
|
||||
// 生成屋顶破坏效果
|
||||
@@ -670,7 +670,7 @@ namespace WulaFallenEmpire
|
||||
|
||||
// 在非 God Mode 下,这个方法不应该被调用
|
||||
// 实际的消耗在 CheckAndConsumeMaterials 中处理
|
||||
Log.Warning("[SkyfallerCaller] ConsumeMaterials called in non-God mode, this shouldn't happen");
|
||||
WulaLog.Debug("[SkyfallerCaller] ConsumeMaterials called in non-God mode, this shouldn't happen");
|
||||
}
|
||||
|
||||
// 其余方法保持不变...
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using RimWorld;
|
||||
using UnityEngine;
|
||||
@@ -18,7 +18,7 @@ namespace WulaFallenEmpire
|
||||
|
||||
if (!eligibleDefs.Any())
|
||||
{
|
||||
Log.Warning("[Debug] No ThingDefs found with CompProperties_PrefabSkyfallerCaller");
|
||||
WulaLog.Debug("[Debug] No ThingDefs found with CompProperties_PrefabSkyfallerCaller");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -43,7 +43,7 @@ namespace WulaFallenEmpire
|
||||
|
||||
if (!eligibleDefs.Any())
|
||||
{
|
||||
Log.Warning("[Debug] No ThingDefs found with CompProperties_PrefabSkyfallerCaller");
|
||||
WulaLog.Debug("[Debug] No ThingDefs found with CompProperties_PrefabSkyfallerCaller");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -85,7 +85,7 @@ namespace WulaFallenEmpire
|
||||
var currentMap = Find.CurrentMap;
|
||||
if (currentMap == null)
|
||||
{
|
||||
Log.Warning("[Debug] No current map found");
|
||||
WulaLog.Debug("[Debug] No current map found");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -97,11 +97,11 @@ namespace WulaFallenEmpire
|
||||
var compProps = thingDef.comps.OfType<CompProperties_PrefabSkyfallerCaller>().FirstOrDefault();
|
||||
if (compProps == null)
|
||||
{
|
||||
Log.Warning($"[Debug] Could not find CompProperties_PrefabSkyfallerCaller for {thingDef.defName}");
|
||||
WulaLog.Debug($"[Debug] Could not find CompProperties_PrefabSkyfallerCaller for {thingDef.defName}");
|
||||
return;
|
||||
}
|
||||
|
||||
Log.Message($"[Debug] Looking for spawn positions for {thingDef.defName} (Size: {thingDef.Size})");
|
||||
WulaLog.Debug($"[Debug] Looking for spawn positions for {thingDef.defName} (Size: {thingDef.Size})");
|
||||
|
||||
for (int i = 0; i < spawnCount && attempts < maxAttempts; i++)
|
||||
{
|
||||
@@ -120,11 +120,11 @@ namespace WulaFallenEmpire
|
||||
GenSpawn.Spawn(thing, spawnPos, currentMap);
|
||||
|
||||
successCount++;
|
||||
Log.Message($"[Debug] Successfully spawned {thingDef.defName} at {spawnPos} for faction {faction?.Name ?? "None"}");
|
||||
WulaLog.Debug($"[Debug] Successfully spawned {thingDef.defName} at {spawnPos} for faction {faction?.Name ?? "None"}");
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.Warning($"[Debug] Failed to find valid spawn position for {thingDef.defName} (attempt {attempts})");
|
||||
WulaLog.Debug($"[Debug] Failed to find valid spawn position for {thingDef.defName} (attempt {attempts})");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -144,7 +144,7 @@ namespace WulaFallenEmpire
|
||||
var potentialCells = new List<IntVec3>();
|
||||
|
||||
// 策略1:首先尝试玩家基地附近的开放区域
|
||||
Log.Message($"[Debug] Searching near base area...");
|
||||
WulaLog.Debug($"[Debug] Searching near base area...");
|
||||
var baseCells = GetOpenAreaCellsNearBase(map, thingDef.Size);
|
||||
foreach (var cell in baseCells)
|
||||
{
|
||||
@@ -157,12 +157,12 @@ namespace WulaFallenEmpire
|
||||
|
||||
if (potentialCells.Count > 0)
|
||||
{
|
||||
Log.Message($"[Debug] Found {potentialCells.Count} positions near base");
|
||||
WulaLog.Debug($"[Debug] Found {potentialCells.Count} positions near base");
|
||||
return potentialCells.RandomElement();
|
||||
}
|
||||
|
||||
// 策略2:搜索整个地图的开阔区域
|
||||
Log.Message($"[Debug] Searching open areas...");
|
||||
WulaLog.Debug($"[Debug] Searching open areas...");
|
||||
var openAreas = FindOpenAreas(map, thingDef.Size, 1000);
|
||||
foreach (var cell in openAreas)
|
||||
{
|
||||
@@ -175,12 +175,12 @@ namespace WulaFallenEmpire
|
||||
|
||||
if (potentialCells.Count > 0)
|
||||
{
|
||||
Log.Message($"[Debug] Found {potentialCells.Count} positions in open areas");
|
||||
WulaLog.Debug($"[Debug] Found {potentialCells.Count} positions in open areas");
|
||||
return potentialCells.RandomElement();
|
||||
}
|
||||
|
||||
// 策略3:使用随机采样
|
||||
Log.Message($"[Debug] Trying random sampling...");
|
||||
WulaLog.Debug($"[Debug] Trying random sampling...");
|
||||
for (int i = 0; i < 500; i++)
|
||||
{
|
||||
IntVec3 randomCell = new IntVec3(
|
||||
@@ -198,11 +198,11 @@ namespace WulaFallenEmpire
|
||||
|
||||
if (potentialCells.Count > 0)
|
||||
{
|
||||
Log.Message($"[Debug] Found {potentialCells.Count} positions via random sampling");
|
||||
WulaLog.Debug($"[Debug] Found {potentialCells.Count} positions via random sampling");
|
||||
return potentialCells.RandomElement();
|
||||
}
|
||||
|
||||
Log.Warning($"[Debug] No valid positions found for {thingDef.defName}");
|
||||
WulaLog.Debug($"[Debug] No valid positions found for {thingDef.defName}");
|
||||
return IntVec3.Invalid;
|
||||
}
|
||||
|
||||
@@ -415,12 +415,12 @@ namespace WulaFallenEmpire
|
||||
}
|
||||
}
|
||||
|
||||
Log.Message($"[Debug] Force cleared {clearedCount} objects for skyfaller drop");
|
||||
WulaLog.Debug($"[Debug] Force cleared {clearedCount} objects for skyfaller drop");
|
||||
return clearedCount > 0;
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
Log.Error($"[Debug] Error force clearing area: {ex}");
|
||||
WulaLog.Debug($"[Debug] Error force clearing area: {ex}");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using RimWorld;
|
||||
using RimWorld;
|
||||
using Verse;
|
||||
|
||||
namespace WulaFallenEmpire
|
||||
@@ -13,14 +13,14 @@ namespace WulaFallenEmpire
|
||||
// Don't spawn the innerThing, we are spawning a prefab instead.
|
||||
if (string.IsNullOrEmpty(prefabDefName))
|
||||
{
|
||||
Log.Error("[Skyfaller_PrefabSpawner] prefabDefName is null or empty. Cannot spawn prefab.");
|
||||
WulaLog.Debug("[Skyfaller_PrefabSpawner] prefabDefName is null or empty. Cannot spawn prefab.");
|
||||
return;
|
||||
}
|
||||
|
||||
PrefabDef prefabDef = DefDatabase<PrefabDef>.GetNamed(prefabDefName, false);
|
||||
if (prefabDef == null)
|
||||
{
|
||||
Log.Error($"[Skyfaller_PrefabSpawner] Could not find PrefabDef named {prefabDefName}.");
|
||||
WulaLog.Debug($"[Skyfaller_PrefabSpawner] Could not find PrefabDef named {prefabDefName}.");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user