From 0ed7bb14d10ce23f6279456f706605ef482b5f24 Mon Sep 17 00:00:00 2001 From: "ProjectKoi-Kalo\\Kalo" Date: Sun, 27 Jul 2025 17:02:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9A=82=E5=AD=984?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1.6/Assemblies/WulaFallenEmpire.dll | Bin 76800 -> 79872 bytes Documentation/EventSystem_Documentation.md | 97 +++++++++++++++-- .../.vs/WulaFallenEmpire/v17/.suo | Bin 120832 -> 114176 bytes .../WulaFallenEmpire/v17/DocumentLayout.json | 46 +++----- .../WulaFallenEmpire/EventSystem/Condition.cs | 69 ++++++++++-- .../{ => EventSystem}/DebugActions.cs | 0 Source/WulaFallenEmpire/EventSystem/Effect.cs | 103 +++++++++++++++++- .../EventSystem/EventContext.cs | 12 ++ .../WulaFallenEmpire/WulaFallenEmpire.csproj | 2 +- 9 files changed, 273 insertions(+), 56 deletions(-) rename Source/WulaFallenEmpire/{ => EventSystem}/DebugActions.cs (100%) diff --git a/1.6/Assemblies/WulaFallenEmpire.dll b/1.6/Assemblies/WulaFallenEmpire.dll index 29cc4e9218b4d3a8285e499f5aca7c3f65a1bdeb..c0ce499d266305bd4607355ae83c2afbeb3ad83e 100644 GIT binary patch delta 27553 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 Y?NM7@`Ras8n^(EjQ>4CEZQZT^2iRlOsQ>@~ delta 24823 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 diff --git a/Documentation/EventSystem_Documentation.md b/Documentation/EventSystem_Documentation.md index 2613f96d..97ab5a35 100644 --- a/Documentation/EventSystem_Documentation.md +++ b/Documentation/EventSystem_Documentation.md @@ -210,6 +210,59 @@ ``` +#### 5.9 `Effect_ModifyVariable` +- **功能**: 对一个数值类型的变量进行数学运算(加、减、乘、除)。 +- **Class**: `WulaFallenEmpire.Effect_ModifyVariable` +- **字段**: + - `name`: (必须) 要修改的变量的名称。 + - `value`: (必须) 用于运算的数值。 + - `operation`: (必须) 执行的运算类型。可选值: `Add`, `Subtract`, `Multiply`, `Divide`。 +- **示例**: + ```xml + +
  • + player_score + 10 + Add +
  • + ``` + +#### 5.10 `Effect_ClearVariable` +- **功能**: 从事件上下文中移除一个变量。 +- **Class**: `WulaFallenEmpire.Effect_ClearVariable` +- **字段**: + - `name`: (必须) 要移除的变量的名称。 +- **示例**: + ```xml +
  • + quest_completed_flag +
  • + ``` + +#### 5.11 `Effect_AddQuest` +- **功能**: 给予玩家一个由游戏核心任务系统生成的任务。 +- **Class**: `WulaFallenEmpire.Effect_AddQuest` +- **字段**: + - `quest`: (必须) 要给予的 `QuestScriptDef` 的 `defName`。 +- **示例**: + ```xml +
  • + OpportunitySite_BanditCamp +
  • + ``` + +#### 5.12 `Effect_FinishResearch` +- **功能**: 立即完成一个指定的科技研究项目。 +- **Class**: `WulaFallenEmpire.Effect_FinishResearch` +- **字段**: + - `research`: (必须) 要完成的 `ResearchProjectDef` 的 `defName`。 +- **示例**: + ```xml +
  • + MicroelectronicsBasics +
  • + ``` + --- ## 6. 核心概念:条件 (`Condition`) @@ -219,32 +272,54 @@ ### 已实现的 `Condition` 列表 #### 6.1 `Condition_VariableEquals` -- **功能**: 检查一个变量是否等于指定的值。 +- **功能**: 检查一个变量是否等于指定的值。支持字符串和数字的比较。 - **Class**: `WulaFallenEmpire.Condition_VariableEquals` - **字段**: - `name`: (必须) 要检查的变量的名称。 - - `value`: (必须) 要比较的值(作为字符串)。 -- **示例**: + - `value`: (可选) 要比较的固定值。 + - `valueVariableName`: (可选) 存储比较值的变量的名称。如果同时提供了 `value` 和 `valueVariableName`,则优先使用 `valueVariableName`。 +- **示例 (与固定值比较)**: ```xml
  • - my_quest_progress - 1 + quest_status + completed +
  • + ``` +- **示例 (与另一个变量比较)**: + ```xml +
  • + player_choice + correct_answer
  • ``` -#### 6.2 `Condition_VariableGreaterThan` -- **功能**: 检查一个变量是否大于指定的值。 -- **Class**: `WulaFallenEmpire.Condition_VariableGreaterThan` -- **字段**: +#### 6.2 数值比较条件 +以下所有条件都用于数值比较,并共享相同的字段。 + +- **通用字段**: - `name`: (必须) 要检查的变量的名称。 - - `value`: (必须) 要比较的数值。 -- **示例**: + - `value`: (可选) 要比较的固定数值。 + - `valueVariableName`: (可选) 存储比较数值的变量的名称。如果同时提供了 `value` 和 `valueVariableName`,则优先使用 `valueVariableName`。 + +- **`Condition_VariableGreaterThan`**: 检查变量是否 **大于** 比较值。 +- **`Condition_VariableLessThan`**: 检查变量是否 **小于** 比较值。 +- **`Condition_VariableGreaterThanOrEqual`**: 检查变量是否 **大于或等于** 比较值。 +- **`Condition_VariableLessThanOrEqual`**: 检查变量是否 **小于或等于** 比较值。 + +- **示例 (大于固定值)**: ```xml
  • player_reputation 50
  • ``` +- **示例 (小于或等于另一个变量)**: + ```xml +
  • + current_threat_level + max_allowed_threat +
  • + ``` --- diff --git a/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/.suo b/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/.suo index 9e11ffcd8c8bac388b3f73708d9f9ed07d2b4dc1..72a39eb5242748606828d32f84f754d2f66b54d1 100644 GIT binary patch delta 2277 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 Tx%u)3&o>`(^V7R<`QzuGbNv8A diff --git a/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/DocumentLayout.json b/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/DocumentLayout.json index 01d50c37..0b4bebea 100644 --- a/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/DocumentLayout.json +++ b/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/DocumentLayout.json @@ -2,10 +2,6 @@ "Version": 1, "WorkspaceRootPath": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\", "Documents": [ - { - "AbsoluteMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|c:\\steam\\steamapps\\common\\rimworld\\mods\\3516260226\\source\\wulafallenempire\\debugactions.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|solutionrelative:debugactions.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\mentalstate_brokenpersonality.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|solutionrelative:mentalstate_brokenpersonality.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" @@ -71,19 +67,6 @@ { "$type": "Document", "DocumentIndex": 0, - "Title": "DebugActions.cs", - "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\DebugActions.cs", - "RelativeDocumentMoniker": "DebugActions.cs", - "ToolTip": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\DebugActions.cs", - "RelativeToolTip": "DebugActions.cs", - "ViewState": "AQIAAAAAAAAAAAAAAAAAAAkAAAAAAAAA", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-07-27T07:57:05.014Z", - "EditorCaption": "" - }, - { - "$type": "Document", - "DocumentIndex": 1, "Title": "MentalState_BrokenPersonality.cs", "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\MentalState_BrokenPersonality.cs", "RelativeDocumentMoniker": "MentalState_BrokenPersonality.cs", @@ -91,11 +74,12 @@ "RelativeToolTip": "MentalState_BrokenPersonality.cs", "ViewState": "AQIAABMAAAAAAAAAAAAAwEsAAAAjAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-07-25T13:51:03.13Z" + "WhenOpened": "2025-07-25T13:51:03.13Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 2, + "DocumentIndex": 1, "Title": "Recipe_AdministerWulaMechRepairKit.cs", "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\Recipe_AdministerWulaMechRepairKit.cs", "RelativeDocumentMoniker": "Recipe_AdministerWulaMechRepairKit.cs", @@ -107,7 +91,7 @@ }, { "$type": "Document", - "DocumentIndex": 3, + "DocumentIndex": 2, "Title": "WorkGiver_Warden_DeliverEnergy.cs", "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\WorkGiver_Warden_DeliverEnergy.cs", "RelativeDocumentMoniker": "WorkGiver_Warden_DeliverEnergy.cs", @@ -119,7 +103,7 @@ }, { "$type": "Document", - "DocumentIndex": 4, + "DocumentIndex": 3, "Title": "WorkGiverDefExtension_FeedWula.cs", "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\WorkGiverDefExtension_FeedWula.cs", "RelativeDocumentMoniker": "WorkGiverDefExtension_FeedWula.cs", @@ -131,7 +115,7 @@ }, { "$type": "Document", - "DocumentIndex": 5, + "DocumentIndex": 4, "Title": "CompApparelInterceptor.cs", "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\CompApparelInterceptor.cs", "RelativeDocumentMoniker": "CompApparelInterceptor.cs", @@ -143,7 +127,7 @@ }, { "$type": "Document", - "DocumentIndex": 6, + "DocumentIndex": 5, "Title": "Projectile_Launch_Patch.cs", "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\HarmonyPatches\\Projectile_Launch_Patch.cs", "RelativeDocumentMoniker": "HarmonyPatches\\Projectile_Launch_Patch.cs", @@ -155,7 +139,7 @@ }, { "$type": "Document", - "DocumentIndex": 8, + "DocumentIndex": 7, "Title": "IngestPatch.cs", "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\IngestPatch.cs", "RelativeDocumentMoniker": "IngestPatch.cs", @@ -167,7 +151,7 @@ }, { "$type": "Document", - "DocumentIndex": 7, + "DocumentIndex": 6, "Title": "CompUseEffect_WulaSkillTrainer.cs", "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\CompUseEffect_WulaSkillTrainer.cs", "RelativeDocumentMoniker": "CompUseEffect_WulaSkillTrainer.cs", @@ -179,7 +163,7 @@ }, { "$type": "Document", - "DocumentIndex": 9, + "DocumentIndex": 8, "Title": "Building_Wula_DarkEnergy_Engine.cs", "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\Building_Wula_DarkEnergy_Engine.cs", "RelativeDocumentMoniker": "Building_Wula_DarkEnergy_Engine.cs", @@ -191,7 +175,7 @@ }, { "$type": "Document", - "DocumentIndex": 10, + "DocumentIndex": 9, "Title": "HediffComp_RegenerateBackstory.cs", "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\HediffComp_RegenerateBackstory.cs", "RelativeDocumentMoniker": "HediffComp_RegenerateBackstory.cs", @@ -203,7 +187,7 @@ }, { "$type": "Document", - "DocumentIndex": 11, + "DocumentIndex": 10, "Title": "WulaFallenEmpireMod.cs", "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\WulaFallenEmpireMod.cs", "RelativeDocumentMoniker": "WulaFallenEmpireMod.cs", @@ -215,7 +199,7 @@ }, { "$type": "Document", - "DocumentIndex": 12, + "DocumentIndex": 11, "Title": "MechanitorPatch.cs", "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\MechanitorPatch.cs", "RelativeDocumentMoniker": "MechanitorPatch.cs", @@ -224,10 +208,6 @@ "ViewState": "AQIAAAAAAAAAAAAAAAAAACEAAAAJAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2025-07-18T10:20:31.368Z" - }, - { - "$type": "Bookmark", - "Name": "ST:0:0:{269a02dc-6af8-11d3-bdc4-00c04f688e50}" } ] } diff --git a/Source/WulaFallenEmpire/EventSystem/Condition.cs b/Source/WulaFallenEmpire/EventSystem/Condition.cs index 0e9e1a7d..2bb758d2 100644 --- a/Source/WulaFallenEmpire/EventSystem/Condition.cs +++ b/Source/WulaFallenEmpire/EventSystem/Condition.cs @@ -12,6 +12,7 @@ namespace WulaFallenEmpire { public string name; public string value; + public string valueVariableName; public override bool IsMet(out string reason) { @@ -22,11 +23,21 @@ namespace WulaFallenEmpire return false; } - // Simple string comparison for now. Can be expanded. - bool met = variable.ToString() == value; + string compareValue = value; + if (!string.IsNullOrEmpty(valueVariableName)) + { + compareValue = EventContext.GetVariable(valueVariableName)?.ToString(); + if (compareValue == null) + { + reason = $"Comparison variable '{valueVariableName}' not set."; + return false; + } + } + + bool met = variable.ToString() == compareValue; if (!met) { - reason = $"Requires {name} = {value} (Current: {variable})"; + reason = $"Requires {name} = {compareValue} (Current: {variable})"; } else { @@ -35,25 +46,40 @@ namespace WulaFallenEmpire return met; } } - - public class Condition_VariableGreaterThan : Condition + + public abstract class Condition_CompareVariable : Condition { public string name; public float value; + public string valueVariableName; + + protected abstract bool Compare(float var1, float var2); + protected abstract string GetOperatorString(); public override bool IsMet(out string reason) { - float variable = EventContext.GetVariable(name, float.MinValue); - if (variable == float.MinValue) + float variable = EventContext.GetVariable(name, float.NaN); + if (float.IsNaN(variable)) { - reason = $"Variable '{name}' not set."; + reason = $"Variable '{name}' not set or not a number."; return false; } - bool met = variable > value; + float compareValue = value; + if (!string.IsNullOrEmpty(valueVariableName)) + { + compareValue = EventContext.GetVariable(valueVariableName, float.NaN); + if (float.IsNaN(compareValue)) + { + reason = $"Comparison variable '{valueVariableName}' not set or not a number."; + return false; + } + } + + bool met = Compare(variable, compareValue); if (!met) { - reason = $"Requires {name} > {value} (Current: {variable})"; + reason = $"Requires {name} {GetOperatorString()} {compareValue} (Current: {variable})"; } else { @@ -63,4 +89,27 @@ namespace WulaFallenEmpire } } + public class Condition_VariableGreaterThan : Condition_CompareVariable + { + protected override bool Compare(float var1, float var2) => var1 > var2; + protected override string GetOperatorString() => ">"; + } + + public class Condition_VariableLessThan : Condition_CompareVariable + { + protected override bool Compare(float var1, float var2) => var1 < var2; + protected override string GetOperatorString() => "<"; + } + + public class Condition_VariableGreaterThanOrEqual : Condition_CompareVariable + { + protected override bool Compare(float var1, float var2) => var1 >= var2; + protected override string GetOperatorString() => ">="; + } + + public class Condition_VariableLessThanOrEqual : Condition_CompareVariable + { + protected override bool Compare(float var1, float var2) => var1 <= var2; + protected override string GetOperatorString() => "<="; + } } diff --git a/Source/WulaFallenEmpire/DebugActions.cs b/Source/WulaFallenEmpire/EventSystem/DebugActions.cs similarity index 100% rename from Source/WulaFallenEmpire/DebugActions.cs rename to Source/WulaFallenEmpire/EventSystem/DebugActions.cs diff --git a/Source/WulaFallenEmpire/EventSystem/Effect.cs b/Source/WulaFallenEmpire/EventSystem/Effect.cs index 78115c8f..3bda014e 100644 --- a/Source/WulaFallenEmpire/EventSystem/Effect.cs +++ b/Source/WulaFallenEmpire/EventSystem/Effect.cs @@ -264,8 +264,109 @@ namespace WulaFallenEmpire TaggedString finalText = letterText.Formatted(pawn.Named("PAWN")).AdjustedFor(pawn); PawnRelationUtility.TryAppendRelationsWithColonistsInfo(ref finalText, ref finalLabel, pawn); Find.LetterStack.ReceiveLetter(finalLabel, finalText, letterDef ?? LetterDefOf.PositiveEvent, pawn); - } } } } + + public enum VariableOperation + { + Add, + Subtract, + Multiply, + Divide + } + + public class Effect_ModifyVariable : Effect + { + public string name; + public float value; + public VariableOperation operation; + + public override void Execute(Dialog_CustomDisplay dialog) + { + if (string.IsNullOrEmpty(name)) + { + Log.Error("[WulaFallenEmpire] Effect_ModifyVariable has a null or empty name."); + return; + } + + float currentValue = EventContext.GetVariable(name, 0f); + + switch (operation) + { + case VariableOperation.Add: + currentValue += value; + break; + case VariableOperation.Subtract: + currentValue -= value; + break; + case VariableOperation.Multiply: + currentValue *= value; + break; + case VariableOperation.Divide: + if (value != 0) + { + currentValue /= value; + } + else + { + Log.Error($"[WulaFallenEmpire] Effect_ModifyVariable tried to divide by zero for variable '{name}'."); + } + break; + } + + EventContext.SetVariable(name, currentValue); + } + } + + public class Effect_ClearVariable : Effect + { + public string name; + + public override void Execute(Dialog_CustomDisplay dialog) + { + if (string.IsNullOrEmpty(name)) + { + Log.Error("[WulaFallenEmpire] Effect_ClearVariable has a null or empty name."); + return; + } + EventContext.ClearVariable(name); + } + } + + public class Effect_AddQuest : Effect + { + public QuestScriptDef quest; + + public override void Execute(Dialog_CustomDisplay dialog) + { + if (quest == null) + { + Log.Error("[WulaFallenEmpire] Effect_AddQuest has a null quest Def."); + return; + } + + Quest newQuest = Quest.MakeRaw(); + newQuest.root = quest; + newQuest.id = Find.UniqueIDsManager.GetNextQuestID(); + Find.QuestManager.Add(newQuest); + } + } + + public class Effect_FinishResearch : Effect + { + public ResearchProjectDef research; + + public override void Execute(Dialog_CustomDisplay dialog) + { + if (research == null) + { + Log.Error("[WulaFallenEmpire] Effect_FinishResearch has a null research Def."); + return; + } + + Find.ResearchManager.FinishProject(research); + } + } +} } diff --git a/Source/WulaFallenEmpire/EventSystem/EventContext.cs b/Source/WulaFallenEmpire/EventSystem/EventContext.cs index ec1c72bf..68a2717e 100644 --- a/Source/WulaFallenEmpire/EventSystem/EventContext.cs +++ b/Source/WulaFallenEmpire/EventSystem/EventContext.cs @@ -48,5 +48,17 @@ namespace WulaFallenEmpire variables.Clear(); Log.Message("[EventContext] All variables cleared."); } + + public static void ClearVariable(string name) + { + if (variables.Remove(name)) + { + Log.Message($"[EventContext] Cleared variable '{name}'."); + } + else + { + Log.Warning($"[EventContext] Tried to clear variable '{name}' but it was not found."); + } + } } } diff --git a/Source/WulaFallenEmpire/WulaFallenEmpire.csproj b/Source/WulaFallenEmpire/WulaFallenEmpire.csproj index 4e55959b..d55965c6 100644 --- a/Source/WulaFallenEmpire/WulaFallenEmpire.csproj +++ b/Source/WulaFallenEmpire/WulaFallenEmpire.csproj @@ -102,7 +102,7 @@ - +