diff --git a/1.6/1.6/Assemblies/WulaFallenEmpire.dll b/1.6/1.6/Assemblies/WulaFallenEmpire.dll index d0761747..7cba7d46 100644 Binary files a/1.6/1.6/Assemblies/WulaFallenEmpire.dll and b/1.6/1.6/Assemblies/WulaFallenEmpire.dll differ diff --git a/1.6/1.6/Defs/EventDefs/EventDef_Examples_HideWhenDisabled.xml b/1.6/1.6/Defs/EventDefs/EventDef_Examples_HideWhenDisabled.xml index 52eaf1ed..aa3f9622 100644 --- a/1.6/1.6/Defs/EventDefs/EventDef_Examples_HideWhenDisabled.xml +++ b/1.6/1.6/Defs/EventDefs/EventDef_Examples_HideWhenDisabled.xml @@ -3,10 +3,10 @@ Wula_TestEvent_HideWhenDisabled - - 测试者 + + 测试者]]> -
  • 这是一个用于演示新功能的测试事件。它包含多个选项,展示了不同的条件和可见性行为。当前机械族好感度: {MechanoidGoodwill}
  • +
  • 富文本功能的测试事件。你可以看到红色、绿色和蓝色的文本,以及斜体粗体样式。当前机械族好感度: {MechanoidGoodwill}]]>
  • @@ -17,14 +17,14 @@ 1 - 变量 TestVar 的值现在是 1,所以你看到了这段额外的描述。 + 变量 TestVar 的值现在是 1,所以你看到了这段额外的描述。]]>
  • - +
  • @@ -32,8 +32,8 @@ TestVar 1
  • -
  • - Wula_TestEvent_HideWhenDisabled +
  • + Wula_TestEvent_HideWhenDisabled
  • @@ -42,7 +42,7 @@
  • - +
  • TestVar @@ -60,7 +60,7 @@
  • - + true
  • @@ -76,18 +76,18 @@
  • - +
  • - +
  • -
  • +
  • TestVar
  • -
  • - Wula_TestEvent_HideWhenDisabled +
  • + Wula_TestEvent_HideWhenDisabled
  • @@ -96,7 +96,7 @@
  • - +
  • @@ -104,8 +104,8 @@ Mechanoid MechanoidGoodwill
  • -
  • - Wula_TestEvent_HideWhenDisabled +
  • + Wula_TestEvent_HideWhenDisabled
  • diff --git a/Source/Documentation/EventSystem_Documentation.md b/Source/Documentation/EventSystem_Documentation.md index 7d21f2c8..950e41f2 100644 --- a/Source/Documentation/EventSystem_Documentation.md +++ b/Source/Documentation/EventSystem_Documentation.md @@ -71,17 +71,53 @@ ### `EventDef` 参数 +- **defName**: (string) Def的唯一标识符。 - **label**: (string) 窗口的标题。 -- **characterName**: (string) 显示在肖像下方的角色名称。 -- **portraitPath**: (string) 角色肖像的纹理路径。 -- **descriptions**: (List) 一个描述文本列表。可以通过 `descriptionMode` 控制是随机选择一个还是按顺序显示。 -- **options**: (List) 对话框中显示的选项列表。 -- **immediateEffects**: (List) 当对话框打开时立即执行的效果列表。 -- **dismissEffects**: (List) 当对话框关闭时(通过关闭按钮或`Effect_CloseDialog`)执行的效果列表。 +- **characterName**: (string) (可选) 显示在肖像下方的角色名称。 +- **portraitPath**: (string) (可选) 角色肖像的纹理路径。 - **backgroundImagePath**: (string) (可选) 对话框的背景图片路径。 -- **windowSize**: (Vector2) (可选) 自定义窗口大小。 +- **descriptions**: (List) 一个描述文本列表。 +- **descriptionMode**: (enum) (可选) 决定如何从 `descriptions` 列表中选择文本。可以是 `Random` (默认) 或 `Sequential`。 +- **conditionalDescriptions**: (List) (可选) 一个条件描述列表,允许你根据特定条件在主描述后附加额外的文本块。 +- **options**: (List) 对话框中显示的选项列表。 +- **immediateEffects**: (List) (可选) 当对话框打开时立即执行的效果列表。 +- **dismissEffects**: (List) (可选) 当对话框关闭时(通过关闭按钮或`Effect_CloseDialog`)执行的效果列表。 +- **windowSize**: (Vector2) (可选) 自定义窗口大小。默认为 `(0, 0)`,表示使用默认大小。 - **hiddenWindow**: (bool) (可选) 如果为 `true`,则不会显示窗口。在这种模式下,`immediateEffects` 的内容会在加载时自动合并到 `dismissEffects` 中,然后在事件触发时作为单个效果链统一执行。这对于创建纯粹的后台“效果链”事件非常有用。默认为 `false`。 +### `EventOption` 参数 + +每个选项 (`
  • ` in ``) 包含以下字段: + +- **label**: (string) 选项按钮上显示的文本。 +- **optionEffects**: (List) 点击该选项时执行的效果列表。 +- **conditions**: (List) (可选) 决定该选项是否可用的条件列表。如果条件不满足,选项会变灰。 +- **disabledReason**: (string) (可选) 当选项因不满足 `conditions` 而变灰时,鼠标悬停时显示的提示信息。 +- **hideWhenDisabled**: (bool) (可选) 如果为 `true`,当 `conditions` 不满足时,该选项将完全隐藏而不是变灰。默认为 `false`。 + +### `ConditionalDescription` 参数 + +每个条件描述 (`
  • ` in ``) 包含以下字段: + +- **conditions**: (List) 决定此额外描述是否显示的条件列表。 +- **text**: (string) 当条件满足时,要附加到主描述文本末尾的字符串。 + +### 关于富文本 (Rich Text) 的使用 + +在所有面向玩家的文本字段中(如 `label`, `descriptions`, `characterName`, `disabledReason` 等),你都可以使用Unity的富文本标签,例如 ``, ``, ``。 + +**重要提示**: 由于 `<` 和 `>` 是XML的特殊字符,你必须将所有包含富文本标签的字符串包裹在 `` 块中,以避免XML解析错误。 + +**正确示例:** +```xml + +``` + +**错误示例 (会导致XML解析失败):** +```xml + +``` + ### `EventDef` 示例 ```xml @@ -391,26 +427,37 @@ ``` ### `Effect_SetVariable` -设置一个 `EventContext` 变量的值。 +**仅在变量尚不存在时**,设置一个 `EventContext` 变量的值。这使得它非常适合用于安全地初始化变量,而不用担心覆盖现有值。 - **name**: (string) 变量名。 -- **value**: (string) 变量的值。系统会自动尝试将其解析为 `int` 或 `float`,如果失败则作为 `string` 存储。 +- **value**: (string) 变量的初始值。系统会自动尝试将其解析为 `int` 或 `float`,如果失败则作为 `string` 存储。 ```xml
  • - PlayerChoice - AcceptedOffer + MetTheEnvoy + true
  • ``` ### `Effect_ModifyVariable` -对一个数字变量进行加、减、乘、除操作。 +对一个数字变量进行数学运算或直接赋值。如果变量不存在,会先将其初始化为0,然后再执行操作。 - **name**: (string) 变量名。 - **value**: (float) 用于操作的数值。 -- **operation**: (VariableOperation) 操作类型,可以是 `Add`, `Subtract`, `Multiply`, `Divide`。 +- **operation**: (VariableOperation) 操作类型,可以是 `Add`, `Subtract`, `Multiply`, `Divide`, `Set`。 + - `Set`: 直接将变量的值设置为 `value`,会覆盖任何现有值。 + +**加法示例:** ```xml
  • ResourceCount -10 - Add + Add +
  • +``` +**直接设置值示例:** +```xml +
  • + ResourceCount + 100 + Set
  • ``` @@ -423,6 +470,16 @@ ``` +### `Effect_CheckFactionGoodwill` +检查玩家与某个派系的好感度,并将其存储在一个变量中。 +- **factionDef**: (FactionDef) 要检查的派系的 `defName`。 +- **variableName**: (string) 用于存储好感度数值的变量名。 +```xml +
  • + Mechanoid + MechanoidGoodwill +
  • +``` --- ## 4. 可用的条件 (`Condition`) @@ -505,3 +562,13 @@ ``` --- + +--- +### `Condition_FactionExists` +检查一个派系当前是否存在于游戏中。 +- **factionDef**: (FactionDef) 要检查的派系的 `defName`。 +```xml +
  • + Pirate +
  • +``` diff --git a/Source/WulaFallenEmpire/EventSystem/Effect.cs b/Source/WulaFallenEmpire/EventSystem/Effect.cs index c1ce96e7..7c926496 100644 --- a/Source/WulaFallenEmpire/EventSystem/Effect.cs +++ b/Source/WulaFallenEmpire/EventSystem/Effect.cs @@ -175,23 +175,21 @@ namespace WulaFallenEmpire public override void Execute(Dialog_CustomDisplay dialog = null) { // Only set the variable if it doesn't already exist. - if (EventContext.HasVariable(name)) + if (!EventContext.HasVariable(name)) { - return; - } - - // Try to parse as int, then float, otherwise keep as string - if (int.TryParse(value, out int intValue)) - { - EventContext.SetVariable(name, intValue); - } - else if (float.TryParse(value, out float floatValue)) - { - EventContext.SetVariable(name, floatValue); - } - else - { - EventContext.SetVariable(name, value); + // Try to parse as int, then float, otherwise keep as string + if (int.TryParse(value, out int intValue)) + { + EventContext.SetVariable(name, intValue); + } + else if (float.TryParse(value, out float floatValue)) + { + EventContext.SetVariable(name, floatValue); + } + else + { + EventContext.SetVariable(name, value); + } } } } @@ -347,7 +345,8 @@ namespace WulaFallenEmpire Add, Subtract, Multiply, - Divide + Divide, + Set } public class Effect_ModifyVariable : Effect @@ -392,9 +391,12 @@ namespace WulaFallenEmpire Log.Error($"[WulaFallenEmpire] Effect_ModifyVariable tried to divide by zero for variable '{name}'."); } break; - } + case VariableOperation.Set: + currentValue = value; + break; + } - EventContext.SetVariable(name, currentValue); + EventContext.SetVariable(name, currentValue); } }