This commit is contained in:
2025-08-19 23:35:22 +08:00
parent fa975ce0c8
commit 8ba6a26591
6 changed files with 179 additions and 34 deletions

View File

@@ -69,6 +69,7 @@
<!-- 隐藏事件:触发一次袭击 -->
<WulaFallenEmpire.EventDef>
<defName>Wula_HiddenEvent_TriggerRaid</defName>
<hiddenWindow>true</hiddenWindow>
<dismissEffects>
<li>
<effects>

View File

@@ -42,7 +42,7 @@
<li Class="WulaFallenEmpire.Effect_ClearVariable">
<name>Wula_FE_Spiritualist_Goodwill</name>
</li>
<li Class="WulaFallenEmpire.Effect_StoreFactionGoodwill">
<li Class="WulaFallenEmpire.Effect_CheckFactionGoodwill">
<factionDef>Wula_FE_Spiritualist_Faction</factionDef>
<variableName>Wula_FE_Spiritualist_Goodwill</variableName>
</li>

View File

@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<WulaFallenEmpire.EventDef>
<defName>WULA_Debug_StoreAllStats</defName>
<label>Debug: Store All Stats</label>
<description>一个用于将各种游戏统计数据存储到变量中的调试事件。</description>
<hiddenWindow>true</hiddenWindow>
<dismissEffects>
<li>
<effects>
<!-- 1. 存储派系好感度 (int) -->
<li Class="WulaFallenEmpire.Effect_CheckFactionGoodwill">
<factionDef>Mechanoid</factionDef>
<variableName>Debug_MechanoidGoodwill</variableName>
</li>
<!-- 2. 存储殖民地财富 (float) -->
<li Class="WulaFallenEmpire.Effect_StoreColonyWealth">
<variableName>Debug_ColonyWealth</variableName>
</li>
<!-- 3. 存储真实游戏时间 (float, 秒) -->
<li Class="WulaFallenEmpire.Effect_StoreRealPlayTime">
<variableName>Debug_RealPlayTimeSeconds</variableName>
</li>
<!-- 4. 存储已过去的游戏天数 (int) -->
<li Class="WulaFallenEmpire.Effect_StoreDaysPassed">
<variableName>Debug_DaysPassed</variableName>
</li>
</effects>
</li>
</dismissEffects>
</WulaFallenEmpire.EventDef>
</Defs>

View File

@@ -16,7 +16,37 @@ namespace WulaFallenEmpire
EventDef currentDef = localDef;
list.Add(new DebugMenuOption(currentDef.defName, DebugMenuOptionMode.Action, delegate
{
Find.WindowStack.Add(new Dialog_CustomDisplay(currentDef));
if (currentDef.hiddenWindow)
{
if (!currentDef.dismissEffects.NullOrEmpty())
{
foreach (var conditionalEffect in currentDef.dismissEffects)
{
string reason;
bool conditionsMet = true;
if (!conditionalEffect.conditions.NullOrEmpty())
{
foreach (var condition in conditionalEffect.conditions)
{
if (!condition.IsMet(out reason))
{
conditionsMet = false;
break;
}
}
}
if (conditionsMet)
{
conditionalEffect.Execute(null);
}
}
}
}
else
{
Find.WindowStack.Add(new Dialog_CustomDisplay(currentDef));
}
}));
}
Find.WindowStack.Add(new Dialog_DebugOptionListLister(list));

View File

@@ -506,43 +506,53 @@ namespace WulaFallenEmpire
return;
}
IncidentParms parms = new IncidentParms
{
target = map,
points = this.points,
faction = factionInst,
raidStrategy = this.raidStrategy,
raidArrivalMode = this.raidArrivalMode,
pawnGroupMakerSeed = Rand.Int,
forced = true
};
if (!RCellFinder.TryFindRandomPawnEntryCell(out parms.spawnCenter, map, CellFinder.EdgeRoadChance_Hostile))
{
Log.Error("[WulaFallenEmpire] Effect_TriggerRaid could not find a valid spawn center.");
return;
}
PawnGroupMakerParms groupMakerParms = new PawnGroupMakerParms
{
groupKind = this.groupKind ?? PawnGroupKindDefOf.Combat,
tile = map.Tile,
points = this.points,
faction = factionInst,
raidStrategy = this.raidStrategy,
seed = parms.pawnGroupMakerSeed
};
List<Pawn> pawns;
if (!pawnGroupMakers.NullOrEmpty())
{
IncidentParms parms = new IncidentParms
{
target = map,
points = this.points,
faction = factionInst,
raidStrategy = this.raidStrategy,
raidArrivalMode = this.raidArrivalMode,
pawnGroupMakerSeed = Rand.Int,
forced = true
};
var groupMaker = pawnGroupMakers.RandomElementByWeight(x => x.commonality);
pawns = groupMaker.GeneratePawns(groupMakerParms).ToList();
}
else
{
pawns = PawnGroupMakerUtility.GeneratePawns(groupMakerParms).ToList();
}
if (!RCellFinder.TryFindRandomPawnEntryCell(out parms.spawnCenter, map, CellFinder.EdgeRoadChance_Hostile))
{
Log.Error("[WulaFallenEmpire] Effect_TriggerRaid could not find a valid spawn center.");
return;
}
PawnGroupMakerParms groupMakerParms = new PawnGroupMakerParms
{
groupKind = this.groupKind ?? PawnGroupKindDefOf.Combat,
tile = map.Tile,
points = this.points,
faction = factionInst,
raidStrategy = this.raidStrategy,
seed = parms.pawnGroupMakerSeed
};
if (pawns.Any())
{
raidArrivalMode.Worker.Arrive(pawns, parms);
// Assign Lord and LordJob to make the pawns actually perform the raid.
raidStrategy.Worker.MakeLords(parms, pawns);
List<Pawn> pawns = PawnGroupMakerUtility.GeneratePawns(groupMakerParms).ToList();
if (pawns.Any())
if (!string.IsNullOrEmpty(letterLabel) && !string.IsNullOrEmpty(letterText))
{
raidArrivalMode.Worker.Arrive(pawns, parms);
if (!string.IsNullOrEmpty(letterLabel) && !string.IsNullOrEmpty(letterText))
{
Find.LetterStack.ReceiveLetter(letterLabel, letterText, LetterDefOf.ThreatBig, pawns[0]);
}
Find.LetterStack.ReceiveLetter(letterLabel, letterText, LetterDefOf.ThreatBig, pawns[0]);
}
}
}
@@ -577,4 +587,68 @@ namespace WulaFallenEmpire
}
}
}
public class Effect_StoreRealPlayTime : Effect
{
public string variableName;
public override void Execute(Dialog_CustomDisplay dialog = null)
{
if (string.IsNullOrEmpty(variableName))
{
Log.Error("[WulaFallenEmpire] Effect_StoreRealPlayTime is not configured correctly (missing variableName).");
return;
}
var eventVarManager = Find.World.GetComponent<EventVariableManager>();
float realPlayTime = Find.GameInfo.RealPlayTimeInteracting;
Log.Message($"[EventSystem] Storing real play time ({realPlayTime}s) into variable '{variableName}'.");
eventVarManager.SetVariable(variableName, realPlayTime);
}
}
public class Effect_StoreDaysPassed : Effect
{
public string variableName;
public override void Execute(Dialog_CustomDisplay dialog = null)
{
if (string.IsNullOrEmpty(variableName))
{
Log.Error("[WulaFallenEmpire] Effect_StoreDaysPassed is not configured correctly (missing variableName).");
return;
}
var eventVarManager = Find.World.GetComponent<EventVariableManager>();
int daysPassed = GenDate.DaysPassed;
Log.Message($"[EventSystem] Storing days passed ({daysPassed}) into variable '{variableName}'.");
eventVarManager.SetVariable(variableName, daysPassed);
}
}
public class Effect_StoreColonyWealth : Effect
{
public string variableName;
public override void Execute(Dialog_CustomDisplay dialog = null)
{
if (string.IsNullOrEmpty(variableName))
{
Log.Error("[WulaFallenEmpire] Effect_StoreColonyWealth is not configured correctly (missing variableName).");
return;
}
Map currentMap = Find.CurrentMap;
if (currentMap == null)
{
Log.Error("[WulaFallenEmpire] Effect_StoreColonyWealth cannot execute without a current map.");
return;
}
var eventVarManager = Find.World.GetComponent<EventVariableManager>();
float wealth = currentMap.wealthWatcher.WealthTotal;
Log.Message($"[EventSystem] Storing colony wealth ({wealth}) into variable '{variableName}'.");
eventVarManager.SetVariable(variableName, wealth);
}
}
}