This commit is contained in:
2025-07-31 17:52:49 +08:00
11 changed files with 570 additions and 258 deletions

Binary file not shown.

View File

@@ -6,42 +6,76 @@
<label>测试袭击事件</label>
<description>这是一个测试,用于触发一个带有自定义 pawn 组的袭击。</description>
<dismissEffects>
<li Class="WulaFallenEmpire.Effect_TriggerRaid">
<letterLabel>侦测到失控乌拉!</letterLabel>
<letterText>我们的传感器侦测到一伙来自 {FACTION_name} 的袭击者!他们看起来充满敌意,正朝着我们的殖民地前进。</letterText>
<points>10000</points>
<faction>Wula_Broken_Personality_Faction</faction>
<raidStrategy>ImmediateAttack</raidStrategy>
<raidArrivalMode>EdgeWalkIn</raidArrivalMode>
<groupKind>Combat</groupKind>
<pawnGroupMakers>
<li>
<kindDef>Combat</kindDef>
<commonality>100</commonality>
<options>
<Mech_WULA_Cat_Constructor>20</Mech_WULA_Cat_Constructor>
<Mech_WULA_Cat_Assault>20</Mech_WULA_Cat_Assault>
<Wula_Broken_Personality_Pawn_7>2</Wula_Broken_Personality_Pawn_7>
<Wula_Broken_Personality_Pawn_5>1</Wula_Broken_Personality_Pawn_5>
</options>
<li>
<conditions>
</conditions>
<effects>
<li Class="WulaFallenEmpire.Effect_TriggerRaid">
<letterLabel>侦测到失控乌拉!</letterLabel>
<letterText>我们的传感器侦测到一伙来自 {FACTION_name} 的袭击者!他们看起来充满敌意,正朝着我们的殖民地前进。</letterText>
<points>10000</points>
<faction>Wula_Broken_Personality_Faction</faction>
<raidStrategy>ImmediateAttack</raidStrategy>
<raidArrivalMode>EdgeWalkIn</raidArrivalMode>
<groupKind>Combat</groupKind>
<pawnGroupMakers>
<li>
<kindDef>Combat</kindDef>
<commonality>100</commonality>
<options>
<Mech_WULA_Cat_Constructor>20</Mech_WULA_Cat_Constructor>
<Mech_WULA_Cat_Assault>20</Mech_WULA_Cat_Assault>
<Wula_Broken_Personality_Pawn_7>2</Wula_Broken_Personality_Pawn_7>
<Wula_Broken_Personality_Pawn_5>1</Wula_Broken_Personality_Pawn_5>
</options>
</li>
</pawnGroupMakers>
</li>
</pawnGroupMakers>
</effects>
</li>
</dismissEffects>
<options>
<li>
<label>触发袭击</label>
<effects>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
</optionEffects>
</li>
<li>
<label>关闭</label>
<effects>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
</optionEffects>
</li>
</options>
</WulaFallenEmpire.EventDef>
<!-- 隐藏事件:触发一次袭击 -->
<WulaFallenEmpire.EventDef>
<defName>Wula_HiddenEvent_TriggerRaid</defName>
<hiddenWindow>true</hiddenWindow>
<dismissEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_TriggerRaid">
<points>500</points>
<faction>Pirate</faction>
<raidStrategy>ImmediateAttack</raidStrategy>
<raidArrivalMode>EdgeWalkIn</raidArrivalMode>
<letterLabel>警报!</letterLabel>
<letterText>一个隐藏的信号被触发,吸引了一群海盗前来!</letterText>
</li>
</effects>
</li>
</dismissEffects>
</WulaFallenEmpire.EventDef>
</Defs>

View File

@@ -7,48 +7,49 @@
<portraitPath>Wula/Events/Portraits/Wula_insignal</portraitPath>
<characterName></characterName>
<description>基站运转正常,通讯程序已启动。\n\n需要联络乌拉帝国的哪个派系</description>
<onOpenEffects>
</onOpenEffects>
<dismissEffects>
</dismissEffects>
<options>
<li>
<label>守密者URa-1138「艾妮西娅」</label>
<effects>
<!-- <li Class="WulaFallenEmpire.Effect_SetVariable">
<name>wula_event_progress</name>
<value>1</value>
</li> -->
<!-- <li Class="WulaFallenEmpire.Effect_ShowMessage">
<message>你选择继续... (事件进度变量 'wula_event_progress' 已设为 1)</message>
<messageTypeDef>PositiveEvent</messageTypeDef>
</li> -->
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_1</defName>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_1</defName>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</optionEffects>
</li>
<li>
<label>乌拉帝国 大教堂(尚在制作)</label>
<effects>
<!-- <li Class="WulaFallenEmpire.Effect_FireIncident">
<incident>WandererJoin</incident>
</li> -->
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
</optionEffects>
</li>
<li>
<label>乌拉帝国 图书馆(尚在制作)</label>
<effects>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
</optionEffects>
</li>
<li>
<label>退出</label>
<effects>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
</optionEffects>
</li>
</options>
</WulaFallenEmpire.EventDef>
@@ -66,20 +67,16 @@
<options>
<li>
<label>我想问你点问题</label>
<effects>
<!-- <li Class="WulaFallenEmpire.Effect_SetVariable">
<name>wula_event_progress</name>
<value>1</value>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_10</defName>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
<li Class="WulaFallenEmpire.Effect_ShowMessage">
<message>你选择继续... (事件进度变量 'wula_event_progress' 已设为 1)</message>
<messageTypeDef>PositiveEvent</messageTypeDef>
</li> -->
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_10</defName>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</optionEffects>
</li>
<li>
<label>有事情想拜托你</label>
@@ -92,9 +89,13 @@
</li>
<li>
<label>再见</label>
<effects>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
</optionEffects>
</li>
</options>
</WulaFallenEmpire.EventDef>
@@ -108,37 +109,45 @@
<li>可以啊,问吧?</li>
<li>这次就不收你们咨询费了,想问什么?</li>
</descriptions>
<onOpenEffects>
</onOpenEffects>
<dismissEffects>
</dismissEffects>
<options>
<li>
<label>你是谁?</label>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_100</defName>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_100</defName>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</optionEffects>
</li>
<li>
<label>我们想要一些殖民地发展建议</label>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_101</defName>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_101</defName>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</optionEffects>
</li>
<li>
<label>没什么</label>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_1</defName>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_1</defName>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</optionEffects>
</li>
</options>
</WulaFallenEmpire.EventDef>
@@ -150,19 +159,19 @@
<descriptions>
<li>什么啊,我没有给你们做过自我介绍吗?难道是我记错了?\n\n咳你们可以叫我守密者我是负责看护乌拉帝国知识库的编目司书。然后如你们所见——我是乌拉帝国的合成人诞生于乌拉帝国最恢弘的黄金时代承载着先祖的意志阻止乌拉帝国散佚的先进科技泄露到一些宵小之辈手中。</li>
</descriptions>
<onOpenEffects>
</onOpenEffects>
<dismissEffects>
</dismissEffects>
<options>
<li>
<label>了解了</label>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_1</defName>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_1</defName>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</optionEffects>
</li>
</options>
</WulaFallenEmpire.EventDef>
@@ -174,46 +183,58 @@
<descriptions>
<li>那么,你们的殖民地现在发展的怎么样了?基于我的立场,我只会给出关于乌拉帝国科技方面的建议噢?</li>
</descriptions>
<onOpenEffects>
</onOpenEffects>
<dismissEffects>
</dismissEffects>
<options>
<li>
<label>我们刚刚醒来,还不知道发生了什么。</label>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_102</defName>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_102</defName>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</optionEffects>
</li>
<li>
<label>我们的殖民地初具规模,但是我们找不到前进的方向。</label>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_103</defName>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_103</defName>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</optionEffects>
</li>
<li>
<label>我们的殖民地已经相当强大。</label>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_104</defName>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_104</defName>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</optionEffects>
</li>
<li>
<label>没有别的问题了</label>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_1</defName>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_1</defName>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</optionEffects>
</li>
</options>
</WulaFallenEmpire.EventDef>
@@ -228,28 +249,32 @@
<li>啊,原来是刚被唤醒吗?好吧,希望你们没有在漫长的沉睡中忘记了自己的技能。\n\n黄金时代的机械乌拉在经历乌拉帝国人工智能网络崩溃后人格矩阵都不太稳定——当然我是特例。注意殖民地的整体心情任何崩溃的机械乌拉都会被边缘世界上的反常网络识别并监管她们将直接叛变殖民地尽量不要把事情闹到那一边好吗</li>
<li>啊,原来是刚被唤醒吗?好吧,希望你们没有在漫长的沉睡中忘记了自己的技能。\n\n乌拉猫猫是机械乌拉的得力助手它们是一个拥有多种型号的机械助手可以承担很多工作。机械乌拉与生俱来的设计使得她们可以控制少量的乌拉猫猫为其效命。你可以研究科技「机械体构建套件」以组装更多的小小劳工。</li>
</descriptions>
<onOpenEffects>
</onOpenEffects>
<dismissEffects>
</dismissEffects>
<options>
<li>
<label>还有别的建议吗?</label>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_102</defName>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_102</defName>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</optionEffects>
</li>
<li>
<label>了解了</label>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_101</defName>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_101</defName>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</optionEffects>
</li>
</options>
</WulaFallenEmpire.EventDef>
@@ -264,28 +289,32 @@
<li>很高兴听到这样的自我评价,自信是这块烂地生存的资本。\n\n或许你们已经筹划好增添新丁了研究「合成人构建套件」以解锁在乌拉帝国机械工厂建造新合成人的权限。新诞生的合成人是没有任何技能熟练度的记得提前研究「数据下载套件」准备好乌拉帝国数据包</li>
<li>很高兴听到这样的自我评价,自信是这块烂地生存的资本。\n\n如果乌拉帝国的遗孤们已经抵达这颗星球则你们可以试着接触她们——更高级的科技需要依靠她们解锁提前接触未尝不是未雨绸缪。</li>
</descriptions>
<onOpenEffects>
</onOpenEffects>
<dismissEffects>
</dismissEffects>
<options>
<li>
<label>还有别的建议吗?</label>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_103</defName>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_103</defName>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</optionEffects>
</li>
<li>
<label>了解了</label>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_101</defName>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_101</defName>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</optionEffects>
</li>
</options>
</WulaFallenEmpire.EventDef>
@@ -299,28 +328,32 @@
<li>已经凌驾于这片土地之上了,正在寻求终局的意义吗?\n\n有尝试过制造乌拉帝国的大型机械体吗它们是强大的战场支柱每一台都拥有改变战局的力量。不过机械乌拉的初始带宽无法控制大型机械体你们需要准备一些扩充带宽的改件和装备或者干脆植入机控中枢以利用边缘世界的本土科技。</li>
<li>已经凌驾于这片土地之上了,正在寻求终局的意义吗?\n\n小心友军火力乌拉帝国的高级装备基本上都是能将敌人炸的血肉横飞的区域性伤害武器它们的破坏力毋庸置疑但是同时也会导致战利品丢失和频繁的误伤——或许该考虑给殖民者配一套装甲了。</li>
</descriptions>
<onOpenEffects>
</onOpenEffects>
<dismissEffects>
</dismissEffects>
<options>
<li>
<label>还有别的建议吗?</label>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_104</defName>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_104</defName>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</optionEffects>
</li>
<li>
<label>了解了</label>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_101</defName>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_101</defName>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</optionEffects>
</li>
</options>
</WulaFallenEmpire.EventDef>
@@ -468,16 +501,20 @@
<options>
<li>
<label>完成事件 (获得新成员并改善帝国关系)</label>
<effects>
<li Class="WulaFallenEmpire.Effect_ShowMessage">
<message>事件链已完成!一位流浪者加入了你的殖民地,帝国对你的行为表示赞赏。</message>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_ShowMessage">
<message>事件链已完成!一位流浪者加入了你的殖民地,帝国对你的行为表示赞赏。</message>
</li>
<li Class="WulaFallenEmpire.Effect_ChangeFactionRelation">
<faction>Empire</faction>
<goodwillChange>15</goodwillChange>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
<li Class="WulaFallenEmpire.Effect_ChangeFactionRelation">
<faction>Empire</faction>
<goodwillChange>15</goodwillChange>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</optionEffects>
</li>
<li>
<label>特殊选项</label>
@@ -488,18 +525,26 @@
<value>1</value>
</li>
</conditions>
<effects>
<li Class="WulaFallenEmpire.Effect_ShowMessage">
<message>你触发了特殊选项!</message>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_ShowMessage">
<message>你触发了特殊选项!</message>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</optionEffects>
</li>
<li>
<label>离开</label>
<effects>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
</optionEffects>
</li>
</options>
</WulaFallenEmpire.EventDef>

View File

@@ -28,23 +28,31 @@
<options>
<li>
<label>阅览消息</label>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_1</defName>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_1</defName>
</li>
</effects>
</li>
</effects>
</optionEffects>
</li>
<li>
<label>尝试抵抗(但失败了)</label>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_1</defName>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_1</defName>
</li>
<li Class="WulaFallenEmpire.Effect_ShowMessage">
<message>你试图抵抗心灵入侵,但这股力量过于强大。无论如何,消息还是涌入了你的脑海。</message>
<messageTypeDef>NegativeEvent</messageTypeDef>
</li>
</effects>
</li>
<li Class="WulaFallenEmpire.Effect_ShowMessage">
<message>你试图抵抗心灵入侵,但这股力量过于强大。无论如何,消息还是涌入了你的脑海。</message>
<messageTypeDef>NegativeEvent</messageTypeDef>
</li>
</effects>
</optionEffects>
</li>
</options>
</li>

View File

@@ -34,20 +34,20 @@
<options>
<li>
<label>接受通讯</label>
<effects>
<optionEffects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_ExampleEvent</defName>
</li>
</effects>
</optionEffects>
</li>
<li>
<label>忽略他们</label>
<effects>
<optionEffects>
<li Class="WulaFallenEmpire.Effect_ShowMessage">
<message>你决定无视这个信号。宇宙的寂静再次笼罩着你。</message>
<messageTypeDef>NeutralEvent</messageTypeDef>
</li>
</effects>
</optionEffects>
</li>
</options>
</root>
@@ -69,6 +69,19 @@
4. 你可以通过 `Effect_OpenCustomUI` 效果来打开这个UI从任务事件或其他EventDef
5. 你也可以通过将 `CompOpenCustomUI` 附加到一个建筑上来从游戏中直接打开它。
### `EventDef` 参数
- **label**: (string) 窗口的标题。
- **characterName**: (string) 显示在肖像下方的角色名称。
- **portraitPath**: (string) 角色肖像的纹理路径。
- **descriptions**: (List<string>) 一个描述文本列表。可以通过 `descriptionMode` 控制是随机选择一个还是按顺序显示。
- **options**: (List<EventOption>) 对话框中显示的选项列表。
- **immediateEffects**: (List<ConditionalEffects>) 当对话框打开时立即执行的效果列表。
- **dismissEffects**: (List<ConditionalEffects>) 当对话框关闭时(通过关闭按钮或`Effect_CloseDialog`)执行的效果列表。
- **backgroundImagePath**: (string) (可选) 对话框的背景图片路径。
- **windowSize**: (Vector2) (可选) 自定义窗口大小。
- **hiddenWindow**: (bool) (可选) 如果为 `true`,则不会显示窗口。在这种模式下,`immediateEffects` 的内容会在加载时自动合并到 `dismissEffects` 中,然后在事件触发时作为单个效果链统一执行。这对于创建纯粹的后台“效果链”事件非常有用。默认为 `false`
### `EventDef` 示例
```xml
@@ -82,45 +95,87 @@
<descriptions>
<li>“你好,来自边缘世界的陌生人。我们观察你很久了。你的挣扎……很有趣。”</li>
</descriptions>
<immediateEffects>
<!-- 这是一个无条件的ConditionalEffects块 -->
<li>
<!-- 没有<conditions>,所以总是执行 -->
<effects>
<li Class="WulaFallenEmpire.Effect_SetVariable">
<name>MetTheEnvoy</name>
<value>true</value>
</li>
</effects>
</li>
</immediateEffects>
<dismissEffects>
<!-- 这是一个有条件的ConditionalEffects块 -->
<li>
<conditions>
<li Class="WulaFallenEmpire.Condition_VariableEquals">
<name>PlayerMadeChoice</name>
<value>false</value>
</li>
</conditions>
<effects>
<li Class="WulaFallenEmpire.Effect_ShowMessage">
<message>你没有做出选择就关闭了通讯。</message>
</li>
</effects>
</li>
</dismissEffects>
<options>
<li>
<label>“你是谁?”</label>
<effects>
<li Class="WulaFallenEmpire.Effect_ShowMessage">
<message>“我们是观察者。我们是见证者。现在,我们是你的未来。”</message>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_ShowMessage">
<message>“我们是观察者。我们是见证者。现在,我们是你的未来。”</message>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</optionEffects>
</li>
<li>
<label>“给我们一些东西来证明你的诚意。” (需要 帝国关系 >= 50)</label>
<label>“给我们一些东西来证明你的诚意。”</label>
<disabledReason>他们似乎对你不够信任。</disabledReason>
<!-- 这个conditions块现在只用于决定选项是否可点击 -->
<conditions>
<li Class="WulaFallenEmpire.Condition_VariableGreaterThanOrEqual">
<name>EmpireGoodwill</name>
<value>50</value>
</li>
</conditions>
<effects>
<li Class="WulaFallenEmpire.Effect_GiveThing">
<thingDef>Gold</thingDef>
<count>100</count>
<optionEffects>
<li>
<!-- 你甚至可以在选项的效果内部再次添加条件 -->
<conditions>
<li Class="WulaFallenEmpire.Condition_VariableEquals">
<name>IsGenerous</name>
<value>true</value>
</li>
</conditions>
<effects>
<li Class="WulaFallenEmpire.Effect_GiveThing">
<thingDef>Gold</thingDef>
<count>200</count> <!-- 如果IsGenerous为true则给予更多 -->
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_GiveThing">
<thingDef>Gold</thingDef>
<count>100</count>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
</optionEffects>
</li>
</options>
<onOpenEffects>
<li Class="WulaFallenEmpire.Effect_SetVariable">
<name>MetTheEnvoy</name>
<value>true</value>
</li>
</onOpenEffects>
<dismissEffects>
<li Class="WulaFallenEmpire.Effect_ShowMessage">
<message>通讯结束了。</message>
</li>
</dismissEffects>
</WulaFallenEmpire.EventDef>
</Defs>
```
@@ -131,9 +186,44 @@
---
## 3. 可用的效果 (`Effect`)
## 3. 核心结构: 条件化效果 (`ConditionalEffects`)
这些是可以在 `effects` 列表中使用的类
所有执行效果的地方 (`immediateEffects`, `dismissEffects`, 以及每个选项的 `optionEffects`) 都是一个 `ConditionalEffects` 块的列表。
这允许你将一组效果与一组条件绑定在一起。
### `ConditionalEffects` 结构
每个 `<li>` 代表一个 `ConditionalEffects` 块。它包含两个可选部分:
- **`<conditions>`**: 一个条件列表。只有当这里的所有条件都满足时,对应的效果才会执行。如果省略这个部分,效果将总是执行。
- **`<effects>`**: 一个效果列表。当条件满足时,这些效果会被执行。
```xml
<!-- 示例: 一个ConditionalEffects块 -->
<li>
<conditions>
<li Class="WulaFallenEmpire.Condition_VariableEquals">
<name>PlayerChoice</name>
<value>AcceptedOffer</value>
</li>
</conditions>
<effects>
<li Class="WulaFallenEmpire.Effect_ShowMessage">
<message>你接受了提议!</message>
</li>
<li Class="WulaFallenEmpire.Effect_GiveThing">
<thingDef>Silver</thingDef>
<count>500</count>
</li>
</effects>
</li>
```
---
## 4. 可用的效果 (`Effect`)
这些是可以在 `ConditionalEffects` 块的 `<effects>` 列表中使用的类。
### `Effect_OpenCustomUI`
打开一个指定的 `EventDef`
@@ -350,6 +440,14 @@
<value>AcceptedOffer</value>
</li>
```
### `Condition_VariableNotEqual`
检查一个变量是否 **不等于** 一个特定值。
```xml
<li Class="WulaFallenEmpire.Condition_VariableNotEqual">
<name>QuestStage</name>
<value>3</value>
</li>
```
### `Condition_CompareVariable` (基类)
这是一个抽象基类,不应直接使用。以下所有比较条件(大于、小于等)都继承自这个基类,并共享其参数。
@@ -406,14 +504,4 @@
<value>2</value>
</li>
```
### `Condition_VariableNotEqual`
检查一个变量是否 **不等于** 一个特定值。
```xml
<li Class="WulaFallenEmpire.Condition_VariableNotEqual">
<name>QuestStage</name>
<value>3</value>
</li>
```
---

View File

@@ -16,12 +16,12 @@ namespace WulaFallenEmpire
public override bool IsMet(out string reason)
{
object variable = EventContext.GetVariable<object>(name);
if (variable == null)
if (!EventContext.HasVariable(name))
{
reason = $"Variable '{name}' not set.";
return false;
EventContext.SetVariable(name, "0");
}
object variable = EventContext.GetVariable<object>(name);
string compareValue = value;
if (!string.IsNullOrEmpty(valueVariableName))
@@ -58,12 +58,12 @@ namespace WulaFallenEmpire
public override bool IsMet(out string reason)
{
float variable = EventContext.GetVariable<float>(name, float.NaN);
if (float.IsNaN(variable))
if (!EventContext.HasVariable(name))
{
reason = $"Variable '{name}' not set or not a number.";
return false;
EventContext.SetVariable(name, 0f);
}
float variable = EventContext.GetVariable<float>(name);
float compareValue = value;
if (!string.IsNullOrEmpty(valueVariableName))
@@ -113,9 +113,42 @@ namespace WulaFallenEmpire
protected override string GetOperatorString() => "<=";
}
public class Condition_VariableNotEqual : Condition_CompareVariable
public class Condition_VariableNotEqual : Condition
{
protected override bool Compare(float var1, float var2) => var1 != var2;
protected override string GetOperatorString() => "!=";
public string name;
public string value;
public string valueVariableName;
public override bool IsMet(out string reason)
{
if (!EventContext.HasVariable(name))
{
EventContext.SetVariable(name, "0");
}
object variable = EventContext.GetVariable<object>(name);
string compareValue = value;
if (!string.IsNullOrEmpty(valueVariableName))
{
compareValue = EventContext.GetVariable<object>(valueVariableName)?.ToString();
if (compareValue == null)
{
reason = $"Comparison variable '{valueVariableName}' not set.";
return false;
}
}
bool met = variable.ToString() != compareValue;
if (!met)
{
reason = $"Requires {name} != {compareValue} (Current: {variable})";
}
else
{
reason = "";
}
return met;
}
}
}

View File

@@ -83,7 +83,7 @@ namespace WulaFallenEmpire
background = ContentFinder<Texture2D>.Get(bgPath);
}
HandleAction(def.onOpenEffects);
HandleAction(def.immediateEffects);
}
public override void DoWindowContents(Rect inRect)
@@ -186,7 +186,7 @@ namespace WulaFallenEmpire
{
if (listing.ButtonText(option.label))
{
HandleAction(option.effects);
HandleAction(option.optionEffects);
}
}
else
@@ -200,16 +200,26 @@ namespace WulaFallenEmpire
listing.End();
}
private void HandleAction(List<Effect> effects)
private void HandleAction(List<ConditionalEffects> conditionalEffects)
{
if (effects.NullOrEmpty())
if (conditionalEffects.NullOrEmpty())
{
return;
}
foreach (var effect in effects)
foreach (var ce in conditionalEffects)
{
effect.Execute(this);
string reason;
if (AreConditionsMet(ce.conditions, out reason))
{
if (!ce.effects.NullOrEmpty())
{
foreach (var effect in ce.effects)
{
effect.Execute(this);
}
}
}
}
}

View File

@@ -21,13 +21,56 @@ namespace WulaFallenEmpire
EventDef nextDef = DefDatabase<EventDef>.GetNamed(defName);
if (nextDef != null)
{
Find.WindowStack.Add(new Dialog_CustomDisplay(nextDef));
if (nextDef.hiddenWindow)
{
// Since effects are merged in PostLoad, we only need to execute dismissEffects here.
if (!nextDef.dismissEffects.NullOrEmpty())
{
foreach (var conditionalEffect in nextDef.dismissEffects)
{
string reason;
if (AreConditionsMet(conditionalEffect.conditions, out reason))
{
if (!conditionalEffect.effects.NullOrEmpty())
{
foreach (var effect in conditionalEffect.effects)
{
effect.Execute(null);
}
}
}
}
}
}
else
{
Find.WindowStack.Add(new Dialog_CustomDisplay(nextDef));
}
}
else
{
Log.Error($"[WulaFallenEmpire] Effect_OpenCustomUI could not find EventDef named '{defName}'");
}
}
private bool AreConditionsMet(List<Condition> conditions, out string reason)
{
reason = "";
if (conditions.NullOrEmpty())
{
return true;
}
foreach (var condition in conditions)
{
if (!condition.IsMet(out string singleReason))
{
reason = singleReason;
return false;
}
}
return true;
}
}
public class Effect_CloseDialog : Effect
@@ -110,6 +153,12 @@ namespace WulaFallenEmpire
public override void Execute(Dialog_CustomDisplay dialog = null)
{
// Only set the variable if it doesn't already exist.
if (EventContext.HasVariable(name))
{
return;
}
// Try to parse as int, then float, otherwise keep as string
if (int.TryParse(value, out int intValue))
{

View File

@@ -18,6 +18,7 @@ namespace WulaFallenEmpire
// New system: list of descriptions
public List<string> descriptions;
public DescriptionSelectionMode descriptionMode = DescriptionSelectionMode.Random;
public bool hiddenWindow = false;
// Backwards compatibility: old single description field
public new string description = null;
@@ -26,9 +27,8 @@ namespace WulaFallenEmpire
public List<EventOption> options;
public string backgroundImagePath;
public List<Effect> onOpenEffects;
public List<Effect> dismissEffects;
public List<ConditionalEffects> immediateEffects;
public List<ConditionalEffects> dismissEffects;
public override void PostLoad()
{
base.PostLoad();
@@ -44,14 +44,30 @@ namespace WulaFallenEmpire
description = null; // Clear the old field to prevent confusion
}
#pragma warning restore 0618
// If hiddenWindow is true, merge immediateEffects into dismissEffects at load time.
if (hiddenWindow && !immediateEffects.NullOrEmpty())
{
if (dismissEffects.NullOrEmpty())
{
dismissEffects = new List<ConditionalEffects>();
}
dismissEffects.AddRange(immediateEffects);
immediateEffects = null; // Clear to prevent double execution
}
}
}
public class EventOption
{
public string label;
public List<Effect> effects;
public List<ConditionalEffects> optionEffects;
public List<Condition> conditions;
public string disabledReason;
}
public class ConditionalEffects
{
public List<Condition> conditions;
public List<Effect> effects;
}
}

View File

@@ -29,11 +29,21 @@ namespace WulaFallenEmpire
var currentOption = optionDef;
Action choiceAction = delegate
{
if (!currentOption.effects.NullOrEmpty())
if (!currentOption.optionEffects.NullOrEmpty())
{
foreach (var effect in currentOption.effects)
foreach (var conditionalEffect in currentOption.optionEffects)
{
effect.Execute(null);
string reason;
if (AreConditionsMet(conditionalEffect.conditions, out reason))
{
if (!conditionalEffect.effects.NullOrEmpty())
{
foreach (var effect in conditionalEffect.effects)
{
effect.Execute(null);
}
}
}
}
}
if (quest != null && !quest.hidden && !quest.Historical)
@@ -55,6 +65,25 @@ namespace WulaFallenEmpire
public override bool CanDismissWithRightClick => false;
private bool AreConditionsMet(List<Condition> conditions, out string reason)
{
reason = "";
if (conditions.NullOrEmpty())
{
return true;
}
foreach (var condition in conditions)
{
if (!condition.IsMet(out string singleReason))
{
reason = singleReason;
return false;
}
}
return true;
}
public override void ExposeData()
{
base.ExposeData();

View File

@@ -43,7 +43,7 @@ namespace WulaFallenEmpire
public class Option
{
public string label;
public List<Effect> effects;
public List<ConditionalEffects> optionEffects;
}
}
}