This commit is contained in:
2025-10-16 17:25:29 +08:00
parent e42c88ef5a
commit ca1b2744de
6 changed files with 70 additions and 12 deletions

Binary file not shown.

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<!-- 自定义袭击定义 -->
<!-- 自定义袭击定义defname是硬编码指定不能更改 -->
<ArachnaeSwarm.CustomRaidDef>
<defName>ARA_Stage1_Raid</defName>
<defName>ARA_SpecialAttack</defName>
<factionDef>ARA_Hostile_Hive</factionDef>
<pointWavePools>
<li>
@@ -56,6 +56,9 @@
<defName>ARA_Wave_Scout_Patrol</defName>
<label>侦察巡逻队</label>
<description>一支小型侦察队伍,主要由远程单位组成,进行骚扰射击</description>
<possibleArrivalModes>
<li>CenterDrop</li>
</possibleArrivalModes>
<pawnComposition>
<li>
<pawnKind>ARA_Raid_Shooter</pawnKind>
@@ -77,6 +80,9 @@
<defName>ARA_Wave_Assault_Team</defName>
<label>突击小队</label>
<description>以近战单位为主的快速突击队伍,擅长冲锋陷阵</description>
<possibleArrivalModes>
<li>CenterDrop</li>
</possibleArrivalModes>
<pawnComposition>
<li>
<pawnKind>ARA_Raid_Assault</pawnKind>
@@ -98,6 +104,9 @@
<defName>ARA_Wave_Acid_Swarm</defName>
<label>酸液虫群</label>
<description>大量酸噬种辅虫组成的虫海战术,数量庞大但个体脆弱</description>
<possibleArrivalModes>
<li>CenterDrop</li>
</possibleArrivalModes>
<pawnComposition>
<li>
<pawnKind>ARA_Raid_AcidSwarm</pawnKind>
@@ -119,6 +128,9 @@
<defName>ARA_Wave_Heavy_Defense</defName>
<label>重装防御队</label>
<description>以盾头种为主的防御型队伍,移动缓慢但防御力强</description>
<possibleArrivalModes>
<li>CenterDrop</li>
</possibleArrivalModes>
<pawnComposition>
<li>
<pawnKind>ARA_Raid_Heavy</pawnKind>
@@ -140,13 +152,15 @@
<maxCount>8</maxCount>
</li>
</pawnComposition>
<strategy>Defensive</strategy> <!-- 防御战术 -->
</ArachnaeSwarm.RaidWaveDef>
<!-- 波次5: 混合部队 -->
<ArachnaeSwarm.RaidWaveDef>
<defName>ARA_Wave_Mixed_Forces</defName>
<label>混合部队</label>
<description>均衡配置的混合部队,包含各种单位类型</description>
<possibleArrivalModes>
<li>CenterDrop</li>
</possibleArrivalModes>
<pawnComposition>
<li>
<pawnKind>ARA_Raid_Assault</pawnKind>
@@ -174,7 +188,6 @@
<DefaultUnit>true</DefaultUnit>
</li>
</pawnComposition>
<strategy>Balanced</strategy> <!-- 均衡战术 -->
</ArachnaeSwarm.RaidWaveDef>
<!-- 事件定义 -->

View File

@@ -5,6 +5,10 @@
{
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\storyteller\\incidentworker_customraid.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:storyteller\\incidentworker_customraid.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\storyteller\\raidwavedef.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:storyteller\\raidwavedef.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
}
],
"DocumentGroupContainers": [
@@ -14,21 +18,34 @@
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 1,
"SelectedChildIndex": 2,
"Children": [
{
"$type": "Bookmark",
"Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}"
},
{
"$type": "Document",
"DocumentIndex": 1,
"Title": "RaidWaveDef.cs",
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Storyteller\\RaidWaveDef.cs",
"RelativeDocumentMoniker": "Storyteller\\RaidWaveDef.cs",
"ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Storyteller\\RaidWaveDef.cs*",
"RelativeToolTip": "Storyteller\\RaidWaveDef.cs*",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAA9AAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-10-16T09:14:26.956Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "IncidentWorker_CustomRaid.cs",
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Storyteller\\IncidentWorker_CustomRaid.cs",
"RelativeDocumentMoniker": "Storyteller\\IncidentWorker_CustomRaid.cs",
"ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Storyteller\\IncidentWorker_CustomRaid.cs",
"RelativeToolTip": "Storyteller\\IncidentWorker_CustomRaid.cs",
"ViewState": "AgIAAAYBAAAAAAAAAAAgwBYBAAAyAAAAAAAAAA==",
"ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Storyteller\\IncidentWorker_CustomRaid.cs*",
"RelativeToolTip": "Storyteller\\IncidentWorker_CustomRaid.cs*",
"ViewState": "AgIAAHgBAAAAAAAAAAA1wJIBAAAfAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-10-16T07:14:58.682Z",
"EditorCaption": ""

View File

@@ -381,9 +381,35 @@ namespace ArachnaeSwarm
Log.Message($"Raid arrival mode already set: {parms.raidArrivalMode.defName}");
return;
}
// 对于自定义袭击,默认使用边缘进入
// 自定义波次定义中获取进场方式
RaidWaveDef waveDef = parms.GetCustomRaidWave();
if (waveDef != null)
{
// 如果波次定义了多个可能的进场方式
if (waveDef.possibleArrivalModes != null && waveDef.possibleArrivalModes.Count > 0)
{
PawnsArrivalModeDef selectedMode;
selectedMode = waveDef.possibleArrivalModes.RandomElement();
parms.raidArrivalMode = selectedMode;
Log.Message($"Set random raid arrival mode from waveDef: {parms.raidArrivalMode.defName}");
return;
}
}
// 回退到派系特定的逻辑
Faction faction = parms.faction;
if (faction?.def?.defName == "ARA_Hostile_Hive")
{
// 阿拉克涅虫群默认使用空投
parms.raidArrivalMode = PawnsArrivalModeDefOf.CenterDrop;
Log.Message($"Set ARA_Hostile_Hive default raid arrival mode: {parms.raidArrivalMode.defName}");
}
else
{
// 默认使用边缘进入
parms.raidArrivalMode = PawnsArrivalModeDefOf.EdgeWalkIn;
Log.Message($"Set raid arrival mode: {parms.raidArrivalMode.defName}");
Log.Message($"Set default raid arrival mode: {parms.raidArrivalMode.defName}");
}
}
// 可选:重写其他方法以提供更好的调试信息

View File

@@ -1,3 +1,4 @@
using RimWorld;
using System.Collections.Generic;
using Verse;
@@ -6,6 +7,7 @@ namespace ArachnaeSwarm
public class RaidWaveDef : Def
{
public List<PawnComposition> pawnComposition;
public List<PawnsArrivalModeDef> possibleArrivalModes;
public override IEnumerable<string> ConfigErrors()
{