From c0ee252eaa72bc4c594476d7398e6989fc51581e Mon Sep 17 00:00:00 2001 From: "ProjectKoi-Kalo\\Kalo" Date: Mon, 4 Aug 2025 07:51:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1.6/Assemblies/WulaFallenEmpire.dll | Bin 125952 -> 144896 bytes .../WULA_FE_Spiritualist_Rituals.xml | 15 - .../WULA_FallenEmpire_Buildings_Ritual.xml | 1 - Source/MCP/mcpserver_stdio.py | 202 ++++++---- Source/WulaFallenEmpire/CompWulaRitualSpot.cs | 55 ++- ...obGiver_GatherOfferingsForPsychicRitual.cs | 82 ++++ ...Patch_PsychicRitualGizmo_VisibleRituals.cs | 30 -- .../PsychicRitualDef_AddHediff.cs | 2 +- .../WulaFallenEmpire/PsychicRitualDef_Wula.cs | 16 + .../PsychicRitualDef_WulaBase.cs | 372 ++++++++++++++++++ ...chicRitualToil_GatherForInvocation_Wula.cs | 83 ++++ .../PsychicRitual_TechOffering.cs | 2 +- .../WulaFallenEmpire/WulaFallenEmpire.csproj | 5 + 13 files changed, 710 insertions(+), 155 deletions(-) create mode 100644 Source/WulaFallenEmpire/HarmonyPatches/Patch_JobGiver_GatherOfferingsForPsychicRitual.cs delete mode 100644 Source/WulaFallenEmpire/HarmonyPatches/Patch_PsychicRitualGizmo_VisibleRituals.cs create mode 100644 Source/WulaFallenEmpire/PsychicRitualDef_Wula.cs create mode 100644 Source/WulaFallenEmpire/PsychicRitualDef_WulaBase.cs create mode 100644 Source/WulaFallenEmpire/PsychicRitualToil_GatherForInvocation_Wula.cs diff --git a/1.6/Assemblies/WulaFallenEmpire.dll b/1.6/Assemblies/WulaFallenEmpire.dll index e0bb41b24ab11799e2cc42e998b8511ee89a01b4..a76656ae065054ddd0868638eae3578ddabc95f8 100644 GIT binary patch literal 144896 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 {M@tS-P#fmIR8BcabyC)PPQ5;d3yhUBXKsIkov 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 literal 125952 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 _57g^{A|X{9eW)nh%i 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 R(%3)5qWJ&+{@;VZ{|1<6$k6}* diff --git a/1.6/Defs/PsychicRitualDefs/WULA_FE_Spiritualist_Rituals.xml b/1.6/Defs/PsychicRitualDefs/WULA_FE_Spiritualist_Rituals.xml index 119a1784..6dc57c03 100644 --- a/1.6/Defs/PsychicRitualDefs/WULA_FE_Spiritualist_Rituals.xml +++ b/1.6/Defs/PsychicRitualDefs/WULA_FE_Spiritualist_Rituals.xml @@ -2,11 +2,6 @@ WULA_FE_Rituals_Create_Spear_Impale - -
  • - WulaRitual -
  • -
    使用镌刻法术创造一把携带了圣枪穿刺术式的法杖,需求魂楔作为额外祭品以提升仪式质量,仪式的质量将影响镌刻完成时法杖的质量。 2 @@ -84,11 +79,6 @@
    WULA_FE_Rituals_Create_Cotton_Counter - -
  • - WulaRitual -
  • -
    使用镌刻法术创造一把携带了飘絮反制术式的法杖,需求魂楔作为额外祭品以提升仪式质量,仪式的质量将影响镌刻完成时法杖的质量。 2 @@ -167,11 +157,6 @@ WULA_ImbuePsychicShock - -
  • - WulaRitual -
  • -
    Imbues the target with a psychic shock. PsychicShock diff --git a/1.6/Defs/ThingDefs_Buildings/WULA_FallenEmpire_Buildings_Ritual.xml b/1.6/Defs/ThingDefs_Buildings/WULA_FallenEmpire_Buildings_Ritual.xml index 85d5e864..20110535 100644 --- a/1.6/Defs/ThingDefs_Buildings/WULA_FallenEmpire_Buildings_Ritual.xml +++ b/1.6/Defs/ThingDefs_Buildings/WULA_FallenEmpire_Buildings_Ritual.xml @@ -46,7 +46,6 @@ True
  • - WulaRitual
  • diff --git a/Source/MCP/mcpserver_stdio.py b/Source/MCP/mcpserver_stdio.py index 6c25ef40..cc4c8d58 100644 --- a/Source/MCP/mcpserver_stdio.py +++ b/Source/MCP/mcpserver_stdio.py @@ -3,6 +3,7 @@ import os import sys import logging import json +import re # 1. --- 导入库 --- # mcp 库已通过 'pip install -e' 安装,无需修改 sys.path @@ -208,10 +209,10 @@ def extract_xml_def(lines, start_index): return "" # 5. --- 核心功能函数 --- -def find_files_with_keyword(roots, keyword, extensions=['.xml', '.cs', '.txt']): - """在指定目录中查找包含关键字的文件名和内容。""" - found_files = [] - keyword_lower = keyword.lower() +def find_files_with_keyword(roots, keywords: list[str], extensions=['.xml', '.cs', '.txt']): + """在指定目录中查找包含任何一个关键字的文件。""" + found_files = set() + keywords_lower = [k.lower() for k in keywords] for root_path in roots: if not os.path.isdir(root_path): logging.warning(f"知识库路径不存在或不是一个目录: {root_path}") @@ -222,58 +223,68 @@ def find_files_with_keyword(roots, keyword, extensions=['.xml', '.cs', '.txt']): file_path = os.path.join(dirpath, filename) try: with open(file_path, 'r', encoding='utf-8') as f: - content = f.read() - # 使用不区分大小写的子字符串搜索 - if keyword_lower in content.lower(): - found_files.append(file_path) + content_lower = f.read().lower() + # 如果任何一个关键词在内容中,就添加文件 + if any(kw in content_lower for kw in keywords_lower): + found_files.add(file_path) except Exception as e: logging.error(f"读取文件时出错 {file_path}: {e}") - return found_files + return list(found_files) -def find_keyword_in_question(question: str) -> str: - """从问题中提取最有可能的单个关键词 (通常是类型名或defName)。""" - # 排除常见但非特定的术语 - excluded_keywords = {"XML", "C#", "DEF", "CS"} +def find_keywords_in_question(question: str) -> list[str]: + """从问题中提取所有可能的关键词 (类型名, defName等)。""" + # 正则表达式优先,用于精确匹配定义 + # 匹配 C# class, struct, enum, interface 定义, 例如 "public class MyClass : Base" + csharp_def_pattern = re.compile(r'\b(?:public|private|internal|protected|sealed|abstract|static|new)\s+(?:class|struct|enum|interface)\s+([A-Za-z_][A-Za-z0-9_]*)') + # 匹配 XML Def, 例如 "" or "" + xml_def_pattern = re.compile(r'<([A-Za-z_][A-Za-z0-9_]*Def)\b') - # 使用更精确的规则来识别关键词 + # 启发式规则,用于匹配独立的关键词 # 规则1: 包含下划线 (很可能是 defName) # 规则2: 混合大小写 (很可能是 C# 类型名) - # 规则3: 全大写但不在排除列表中 + # 规则3: 多个大写字母(例如 CompPsychicScaling,但要排除纯大写缩写词) - parts = question.replace('"', ' ').replace("'", ' ').replace('`', ' ').split() + # 排除常见但非特定的术语 + excluded_keywords = {"XML", "C#", "DEF", "CS", "CLASS", "PUBLIC"} + + found_keywords = set() + + # 1. 正则匹配 + csharp_matches = csharp_def_pattern.findall(question) + xml_matches = xml_def_pattern.findall(question) + + for match in csharp_matches: + found_keywords.add(match) + for match in xml_matches: + found_keywords.add(match) + + # 2. 启发式单词匹配 + parts = re.split(r'[\s,.:;\'"`()<>]+', question) - potential_keywords = [] for part in parts: - part = part.strip(',.?;:') - if not part: - continue - - # 检查是否在排除列表中 - if part.upper() in excluded_keywords: + if not part or part.upper() in excluded_keywords: continue # 规则1: 包含下划线 if '_' in part: - potential_keywords.append((part, 3)) # 最高优先级 + found_keywords.add(part) # 规则2: 驼峰命名或混合大小写 - elif any(c.islower() for c in part) and any(c.isupper() for c in part): - potential_keywords.append((part, 2)) # 次高优先级 - # 规则3: 多个大写字母(例如 CompPsychicScaling,但要排除纯大写缩写词) + elif any(c.islower() for c in part) and any(c.isupper() for c in part) and len(part) > 3: + found_keywords.add(part) + # 规则3: 多个大写字母 elif sum(1 for c in part if c.isupper()) > 1 and not part.isupper(): - potential_keywords.append((part, 2)) - # 备用规则:如果之前的规则都没匹配上,就找一个看起来像专有名词的 - elif part[0].isupper() and len(part) > 4: # 长度大于4以避免像 'A' 'I' 这样的词 - potential_keywords.append((part, 1)) # 较低优先级 + found_keywords.add(part) + # 备用规则: 大写字母开头且较长 + elif part[0].isupper() and len(part) > 4: + found_keywords.add(part) - # 如果找到了关键词,按优先级排序并返回最高优先级的那个 - if potential_keywords: - potential_keywords.sort(key=lambda x: x[1], reverse=True) - logging.info(f"找到的潜在关键词: {potential_keywords}") - return potential_keywords[0][0] + if not found_keywords: + logging.warning(f"在 '{question}' 中未找到合适的关键词。") + return [] + + logging.info(f"找到的潜在关键词: {list(found_keywords)}") + return list(found_keywords) - # 如果没有找到,返回空字符串 - logging.warning(f"在 '{question}' 中未找到合适的关键词。") - return "" # 5. --- 创建和配置 MCP 服务器 --- # 使用 FastMCP 创建服务器实例 @@ -289,31 +300,74 @@ def get_context(question: str) -> str: 并将其整合后返回。 """ logging.info(f"收到问题: {question}") - keyword = find_keyword_in_question(question) - if not keyword: + keywords = find_keywords_in_question(question) + if not keywords: logging.warning("无法从问题中提取关键词。") return "无法从问题中提取关键词,请提供更具体的信息。" - logging.info(f"提取到关键词: {keyword}") + logging.info(f"提取到关键词: {keywords}") + + # 基于所有关键词创建缓存键 + cache_key = "-".join(sorted(keywords)) - # 1. 检查缓存 (新逻辑) - cached_result = load_cache_for_keyword(keyword) + # 1. 检查缓存 + cached_result = load_cache_for_keyword(cache_key) if cached_result: - logging.info(f"缓存命中: 关键词 '{keyword}'") + logging.info(f"缓存命中: 关键词 '{cache_key}'") return cached_result - logging.info(f"缓存未命中,开始实时搜索: {keyword}") + logging.info(f"缓存未命中,开始实时搜索: {cache_key}") - # 2. 关键词文件搜索 (初步筛选) + # 2. 关键词文件搜索 (分层智能筛选) try: - candidate_files = find_files_with_keyword(KNOWLEDGE_BASE_PATHS, keyword) + # 优先使用最长的(通常最具体)的关键词进行搜索 + specific_keywords = sorted(keywords, key=len, reverse=True) + candidate_files = find_files_with_keyword(KNOWLEDGE_BASE_PATHS, [specific_keywords[0]]) + + # 如果最具体的关键词找不到文件,再尝试所有关键词 + if not candidate_files and len(keywords) > 1: + logging.info(f"使用最具体的关键词 '{specific_keywords[0]}' 未找到文件,尝试所有关键词...") + candidate_files = find_files_with_keyword(KNOWLEDGE_BASE_PATHS, keywords) + if not candidate_files: - logging.info(f"未找到与 '{keyword}' 相关的文件。") - return f"未在知识库中找到与 '{keyword}' 相关的文件定义。" + logging.info(f"未找到与 '{keywords}' 相关的文件。") + return f"未在知识库中找到与 '{keywords}' 相关的文件定义。" logging.info(f"找到 {len(candidate_files)} 个候选文件,开始向量化处理...") + # 新增:文件名精确匹配优先 + priority_results = [] + remaining_files = [] + for file_path in candidate_files: + filename_no_ext = os.path.splitext(os.path.basename(file_path))[0] + is_priority = False + for keyword in keywords: + if filename_no_ext.lower() == keyword.lower(): + logging.info(f"文件名精确匹配: {file_path}") + code_block = extract_relevant_code(file_path, keyword) + if code_block: + lang = "csharp" if file_path.endswith(('.cs', '.txt')) else "xml" + priority_results.append( + f"---\n" + f"**文件路径 (精确匹配):** `{file_path}`\n\n" + f"```{lang}\n" + f"{code_block}\n" + f"```" + ) + is_priority = True + break # 已处理该文件,跳出内层循环 + if not is_priority: + remaining_files.append(file_path) + + candidate_files = remaining_files # 更新候选文件列表,排除已优先处理的文件 + # 3. 向量化和相似度计算 (精准筛选) + # 增加超时保护:限制向量化的文件数量 + MAX_FILES_TO_VECTORIZE = 25 + if len(candidate_files) > MAX_FILES_TO_VECTORIZE: + logging.warning(f"候选文件过多 ({len(candidate_files)}),仅处理前 {MAX_FILES_TO_VECTORIZE} 个。") + candidate_files = candidate_files[:MAX_FILES_TO_VECTORIZE] + question_embedding = get_embedding(question) if not question_embedding: return "无法生成问题向量,请检查API连接或问题内容。" @@ -323,7 +377,7 @@ def get_context(question: str) -> str: try: with open(file_path, 'r', encoding='utf-8') as f: content = f.read() - file_embedding = get_embedding(content[:8000]) + file_embedding = get_embedding(content[:8000]) # 限制内容长度以提高效率 if file_embedding: file_embeddings.append({'path': file_path, 'embedding': file_embedding}) except Exception as e: @@ -333,47 +387,45 @@ def get_context(question: str) -> str: return "无法为任何候选文件生成向量。" # 找到最相似的多个文件 - best_matches = find_most_similar_files(question_embedding, file_embeddings, top_n=3) + best_matches = find_most_similar_files(question_embedding, file_embeddings, top_n=5) # 增加返回数量 if not best_matches: return "计算向量相似度失败或没有找到足够相似的文件。" # 4. 提取代码并格式化输出 - output_parts = [f"根据向量相似度分析,与 '{keyword}' 最相关的代码定义如下:\n"] + output_parts = [f"根据向量相似度分析,与 '{', '.join(keywords)}' 最相关的代码定义如下:\n"] + output_parts.extend(priority_results) # 将优先结果放在最前面 + extracted_blocks = set() # 用于防止重复提取相同的代码块 + for match in best_matches: file_path = match['path'] similarity = match['similarity'] - # 智能提取代码块 - code_block = extract_relevant_code(file_path, keyword) - - # 如果提取失败,则跳过这个文件 - if not code_block or code_block.startswith("# Error"): - logging.warning(f"未能从 {file_path} 提取到完整的代码块。") - continue - - # 确定语言类型用于markdown高亮 - lang = "csharp" if file_path.endswith(('.cs', '.txt')) else "xml" - - output_parts.append( - f"---\n" - f"**文件路径:** `{file_path}`\n" - f"**相似度:** {similarity:.4f}\n\n" - f"```{lang}\n" - f"{code_block}\n" - f"```" - ) + # 对每个关键词都尝试提取代码 + for keyword in keywords: + code_block = extract_relevant_code(file_path, keyword) + + if code_block and code_block not in extracted_blocks: + extracted_blocks.add(code_block) + lang = "csharp" if file_path.endswith(('.cs', '.txt')) else "xml" + output_parts.append( + f"---\n" + f"**文件路径:** `{file_path}`\n" + f"**相似度:** {similarity:.4f}\n\n" + f"```{lang}\n" + f"{code_block}\n" + f"```" + ) - # 如果没有任何代码块被成功提取 if len(output_parts) <= 1: - return f"虽然找到了相似的文件,但无法在其中提取到关于 '{keyword}' 的完整代码块。" + return f"虽然找到了相似的文件,但无法在其中提取到关于 '{', '.join(keywords)}' 的完整代码块。" final_output = "\n".join(output_parts) # 5. 更新缓存并返回结果 logging.info(f"向量搜索完成。找到了 {len(best_matches)} 个匹配项并成功提取了代码。") - save_cache_for_keyword(keyword, final_output) + save_cache_for_keyword(cache_key, final_output) return final_output diff --git a/Source/WulaFallenEmpire/CompWulaRitualSpot.cs b/Source/WulaFallenEmpire/CompWulaRitualSpot.cs index c19f7ae7..61964e38 100644 --- a/Source/WulaFallenEmpire/CompWulaRitualSpot.cs +++ b/Source/WulaFallenEmpire/CompWulaRitualSpot.cs @@ -6,16 +6,11 @@ using Verse.AI.Group; namespace WulaFallenEmpire { - // NOTE: The PsychicRitualDef_Wula class has been removed as it's no longer needed. - // We are now using a DefModExtension for filtering, which is a much cleaner approach. - /// - /// Custom CompProperties for our ritual spot, with a tag. + /// Custom CompProperties for our ritual spot. It no longer needs a tag. /// public class CompProperties_WulaRitualSpot : CompProperties { - public string ritualTag; - public CompProperties_WulaRitualSpot() { this.compClass = typeof(CompWulaRitualSpot); @@ -24,7 +19,7 @@ namespace WulaFallenEmpire /// /// The core component for the custom ritual spot. Generates its own gizmos - /// by filtering for rituals with a matching tag via a DefModExtension. + /// by specifically looking for Defs that inherit from our custom PsychicRitualDef_Wula base class. /// public class CompWulaRitualSpot : ThingComp { @@ -37,35 +32,31 @@ namespace WulaFallenEmpire yield return gizmo; } - // Find all rituals that have our custom mod extension and a matching tag - foreach (PsychicRitualDef ritualDef in DefDatabase.AllDefsListForReading) + // Find all rituals that are of our custom base class type. + foreach (PsychicRitualDef_Wula ritualDef in DefDatabase.AllDefs) { - var extension = ritualDef.GetModExtension(); - if (extension != null && extension.ritualTag == this.Props.ritualTag) + Command_Action command_Action = new Command_Action(); + command_Action.defaultLabel = ritualDef.LabelCap.Resolve(); + command_Action.defaultDesc = ritualDef.description; + command_Action.icon = ritualDef.uiIcon; + command_Action.action = delegate { - Command_Action command_Action = new Command_Action(); - command_Action.defaultLabel = ritualDef.LabelCap; - command_Action.defaultDesc = ritualDef.description; - command_Action.icon = ritualDef.uiIcon; - command_Action.action = delegate - { - // Mimic vanilla initialization - TargetInfo target = new TargetInfo(this.parent); - PsychicRitualRoleAssignments assignments = ritualDef.BuildRoleAssignments(target); - PsychicRitualCandidatePool candidatePool = ritualDef.FindCandidatePool(); - ritualDef.InitializeCast(this.parent.Map); - Find.WindowStack.Add(new Dialog_BeginPsychicRitual(ritualDef, candidatePool, assignments, this.parent.Map)); - }; + // Mimic vanilla initialization + TargetInfo target = new TargetInfo(this.parent); + PsychicRitualRoleAssignments assignments = ritualDef.BuildRoleAssignments(target); + PsychicRitualCandidatePool candidatePool = ritualDef.FindCandidatePool(); + ritualDef.InitializeCast(this.parent.Map); + Find.WindowStack.Add(new Dialog_BeginPsychicRitual(ritualDef, candidatePool, assignments, this.parent.Map)); + }; - // Corrected check for cooldown and other requirements - AcceptanceReport acceptanceReport = Find.PsychicRitualManager.CanInvoke(ritualDef, this.parent.Map); - if (!acceptanceReport.Accepted) - { - command_Action.Disable(acceptanceReport.Reason.CapitalizeFirst()); - } - - yield return command_Action; + // Corrected check for cooldown and other requirements + AcceptanceReport acceptanceReport = Find.PsychicRitualManager.CanInvoke(ritualDef, this.parent.Map); + if (!acceptanceReport.Accepted) + { + command_Action.Disable(acceptanceReport.Reason.CapitalizeFirst()); } + + yield return command_Action; } } } diff --git a/Source/WulaFallenEmpire/HarmonyPatches/Patch_JobGiver_GatherOfferingsForPsychicRitual.cs b/Source/WulaFallenEmpire/HarmonyPatches/Patch_JobGiver_GatherOfferingsForPsychicRitual.cs new file mode 100644 index 00000000..02988a1f --- /dev/null +++ b/Source/WulaFallenEmpire/HarmonyPatches/Patch_JobGiver_GatherOfferingsForPsychicRitual.cs @@ -0,0 +1,82 @@ +using HarmonyLib; +using RimWorld; +using Verse; +using Verse.AI; +using Verse.AI.Group; +using UnityEngine; + +namespace WulaFallenEmpire.HarmonyPatches +{ + [HarmonyPatch(typeof(JobGiver_GatherOfferingsForPsychicRitual), "TryGiveJob")] + public static class Patch_JobGiver_GatherOfferingsForPsychicRitual_TryGiveJob + { + [HarmonyPrefix] + public static bool Prefix(Pawn pawn, ref Job __result) + { + Lord lord = pawn.GetLord(); + if (lord == null) + { + return true; // Continue to original method + } + + if (!(lord.CurLordToil is LordToil_PsychicRitual lordToil_PsychicRitual)) + { + return true; // Continue to original method + } + + var ritualDef = lordToil_PsychicRitual.RitualData.psychicRitual.def as PsychicRitualDef_WulaBase; + if (ritualDef == null) + { + return true; // Not our custom ritual, continue to original method + } + + if (ritualDef.RequiredOffering == null) + { + __result = null; + return false; // Stop original method + } + + PsychicRitual psychicRitual = lordToil_PsychicRitual.RitualData.psychicRitual; + PsychicRitualRoleDef psychicRitualRoleDef = psychicRitual.assignments.RoleForPawn(pawn); + if (psychicRitualRoleDef == null) + { + __result = null; + return false; // Stop original method + } + + float num = PsychicRitualToil_GatherOfferings.PawnsOfferingCount(psychicRitual.assignments.AssignedPawns(psychicRitualRoleDef), ritualDef.RequiredOffering); + int needed = Mathf.CeilToInt(ritualDef.RequiredOffering.GetBaseCount() - num); + if (needed == 0) + { + __result = null; + return false; // Stop original method + } + + Thing thing2 = GenClosest.ClosestThingReachable(pawn.PositionHeld, pawn.MapHeld, ThingRequest.ForGroup(ThingRequestGroup.HaulableAlways), PathEndMode.Touch, TraverseParms.For(pawn), 9999f, delegate (Thing thing) + { + if (!ritualDef.RequiredOffering.filter.Allows(thing)) + { + return false; + } + if (thing.IsForbidden(pawn)) + { + return false; + } + int stackCount = Mathf.Min(needed, thing.stackCount); + return pawn.CanReserve(thing, 10, stackCount); + }); + + if (thing2 == null) + { + __result = null; + return false; // Stop original method + } + + Job job = JobMaker.MakeJob(JobDefOf.TakeCountToInventory, thing2); + job.count = Mathf.Min(needed, thing2.stackCount); + __result = job; + + return false; // Stop original method, we've provided the result + } + } +} \ No newline at end of file diff --git a/Source/WulaFallenEmpire/HarmonyPatches/Patch_PsychicRitualGizmo_VisibleRituals.cs b/Source/WulaFallenEmpire/HarmonyPatches/Patch_PsychicRitualGizmo_VisibleRituals.cs deleted file mode 100644 index 2f8ea2e4..00000000 --- a/Source/WulaFallenEmpire/HarmonyPatches/Patch_PsychicRitualGizmo_VisibleRituals.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using HarmonyLib; -using Verse; -using RimWorld; - -namespace WulaFallenEmpire.HarmonyPatches -{ - [HarmonyPatch(typeof(PsychicRitualGizmo), "VisibleRituals")] - public static class Patch_PsychicRitualGizmo_VisibleRituals - { - [HarmonyPostfix] - public static List Postfix(List __result) - { - if (__result == null || __result.Count == 0) - { - return __result; - } - - // Create a new list containing only the rituals that DO NOT have our custom tag. - // This is a more robust way to ensure our custom rituals are filtered out. - return __result.Where(ritualDef => - { - var extension = ritualDef.GetModExtension(); - // Keep the ritual if it has no extension, or if the extension tag is null/empty. - return extension == null || string.IsNullOrEmpty(extension.ritualTag); - }).ToList(); - } - } -} \ No newline at end of file diff --git a/Source/WulaFallenEmpire/PsychicRitualDef_AddHediff.cs b/Source/WulaFallenEmpire/PsychicRitualDef_AddHediff.cs index a0e63cdb..2aa05bfc 100644 --- a/Source/WulaFallenEmpire/PsychicRitualDef_AddHediff.cs +++ b/Source/WulaFallenEmpire/PsychicRitualDef_AddHediff.cs @@ -5,7 +5,7 @@ using RimWorld; namespace WulaFallenEmpire { - public class PsychicRitualDef_AddHediff : PsychicRitualDef_InvocationCircle + public class PsychicRitualDef_AddHediff : PsychicRitualDef_Wula { public HediffDef hediff; diff --git a/Source/WulaFallenEmpire/PsychicRitualDef_Wula.cs b/Source/WulaFallenEmpire/PsychicRitualDef_Wula.cs new file mode 100644 index 00000000..a11cd947 --- /dev/null +++ b/Source/WulaFallenEmpire/PsychicRitualDef_Wula.cs @@ -0,0 +1,16 @@ +using RimWorld; + +namespace WulaFallenEmpire +{ + /// + /// This class serves as a custom base for all Wula rituals. + /// It inherits from PsychicRitualDef_InvocationCircle to retain all vanilla functionality, + /// but provides a unique type that our custom CompWulaRitualSpot can specifically look for, + /// ensuring these rituals only appear on our custom ritual spot. + /// + public class PsychicRitualDef_Wula : PsychicRitualDef_WulaBase + { + // This class can be expanded with Wula-specific ritual properties if needed in the future. + // For now, its existence is enough to separate our rituals from the vanilla ones. + } +} \ No newline at end of file diff --git a/Source/WulaFallenEmpire/PsychicRitualDef_WulaBase.cs b/Source/WulaFallenEmpire/PsychicRitualDef_WulaBase.cs new file mode 100644 index 00000000..701bd166 --- /dev/null +++ b/Source/WulaFallenEmpire/PsychicRitualDef_WulaBase.cs @@ -0,0 +1,372 @@ +using System.Collections.Generic; +using System.Linq; +using System.Text; +using RimWorld; +using UnityEngine; +using Verse; +using Verse.AI.Group; +using Verse.AI; + +namespace WulaFallenEmpire +{ + public class PsychicRitualDef_WulaBase : PsychicRitualDef + { + public enum InvalidTargetReasonEnum + { + None, + AreaNotClear + } + + private class RitualQualityOffsetCount + { + public float offset; + public int count; + + public RitualQualityOffsetCount(int count, float offset) + { + this.count = count; + this.offset = offset; + } + } + + public FloatRange hoursUntilHoraxEffect; + public FloatRange hoursUntilOutcome; + public float invocationCircleRadius = 3.9f; + [MustTranslate] + public string outcomeDescription; + public float psychicSensitivityPowerFactor = 0.25f; + protected PsychicRitualRoleDef invokerRole; + protected PsychicRitualRoleDef chanterRole; + protected PsychicRitualRoleDef targetRole; + protected PsychicRitualRoleDef defenderRole; + protected IngredientCount requiredOffering; + protected string timeAndOfferingLabelCached; + + public static readonly SimpleCurve PsychicSensitivityToPowerFactor = new SimpleCurve + { + new CurvePoint(0f, 0f), + new CurvePoint(1f, 0.5f), + new CurvePoint(2f, 0.9f), + new CurvePoint(3f, 1f) + }; + + protected const int DurationTicksWaitPostEffect = 120; + private static Dictionary> tmpParticipants = new Dictionary>(8); + private List tmpGatheringPawns = new List(8); + + public virtual PsychicRitualRoleDef InvokerRole => invokerRole; + public virtual PsychicRitualRoleDef ChanterRole => chanterRole; + public virtual PsychicRitualRoleDef TargetRole => targetRole; + public virtual PsychicRitualRoleDef DefenderRole => defenderRole; + public virtual IngredientCount RequiredOffering => requiredOffering; + public TaggedString CooldownLabel => "PsychicRitualCooldownLabel".Translate() + ": " + (cooldownHours * 2500).ToStringTicksToPeriod(); + + public override List Roles + { + get + { + List roles = base.Roles; + if (InvokerRole != null) roles.Add(InvokerRole); + if (TargetRole != null) roles.Add(TargetRole); + if (ChanterRole != null) roles.Add(ChanterRole); + if (DefenderRole != null) roles.Add(DefenderRole); + return roles; + } + } + + public override void ResolveReferences() + { + base.ResolveReferences(); + requiredOffering?.ResolveReferences(); + invokerRole = invokerRole ?? PsychicRitualRoleDefOf.Invoker; + chanterRole = chanterRole ?? PsychicRitualRoleDefOf.Chanter; + } + + public override List CreateToils(PsychicRitual psychicRitual, PsychicRitualGraph parent) + { + float randomInRange = hoursUntilOutcome.RandomInRange; + IReadOnlyDictionary> readOnlyDictionary = GenerateRolePositions(psychicRitual.assignments); + return new List + { + new PsychicRitualToil_GatherForInvocation_Wula(psychicRitual, this, readOnlyDictionary), + new PsychicRitualToil_InvokeHorax(InvokerRole, readOnlyDictionary.TryGetValue(InvokerRole), TargetRole, readOnlyDictionary.TryGetValue(TargetRole), ChanterRole, readOnlyDictionary.TryGetValue(ChanterRole), DefenderRole, readOnlyDictionary.TryGetValue(DefenderRole), RequiredOffering) + { + hoursUntilHoraxEffect = hoursUntilHoraxEffect.RandomInRange, + hoursUntilOutcome = randomInRange + }, + new PsychicRitualToil_Wait(120) + }; + } + + public override bool IsValidTarget(TargetInfo target, out AnyEnum reason) + { + foreach (IntVec3 item in GenRadial.RadialCellsAround(target.Cell, invocationCircleRadius, useCenter: true)) + { + if (!item.Standable(target.Map)) + { + reason = AnyEnum.FromEnum(InvalidTargetReasonEnum.AreaNotClear); + return false; + } + } + reason = AnyEnum.None; + return true; + } + + public override TaggedString InvalidTargetReason(AnyEnum reason) + { + InvalidTargetReasonEnum? invalidTargetReasonEnum = reason.As(); + if (invalidTargetReasonEnum.HasValue) + { + InvalidTargetReasonEnum valueOrDefault = invalidTargetReasonEnum.GetValueOrDefault(); + return valueOrDefault switch + { + InvalidTargetReasonEnum.None => TaggedString.Empty, + InvalidTargetReasonEnum.AreaNotClear => "PsychicRitualDef_InvocationCircle_AreaMustBeClear".Translate(), + _ => throw new System.InvalidOperationException($"Unknown reason {valueOrDefault}"), + }; + } + return base.InvalidTargetReason(reason); + } + + public override TaggedString OutcomeDescription(FloatRange qualityRange, string qualityNumber, PsychicRitualRoleAssignments assignments) + { + return outcomeDescription.Formatted(); + } + + public override IEnumerable OutcomeWarnings(PsychicRitualRoleAssignments assignments) + { + foreach (Pawn item in assignments.AssignedPawns(TargetRole)) + { + if (item.HomeFaction != null && item.HomeFaction != Faction.OfPlayer && item.HomeFaction.def.humanlikeFaction && !item.HomeFaction.def.PermanentlyHostileTo(FactionDefOf.PlayerColony) && !item.HomeFaction.temporary && !item.HomeFaction.Hidden) + { + yield return "PsychicRitualFactionWarning".Translate(item.Named("PAWN"), item.HomeFaction.Named("FACTION")).Colorize(ColoredText.WarningColor); + } + } + } + + public override TaggedString TimeAndOfferingLabel() + { + if (timeAndOfferingLabelCached != null) + { + return timeAndOfferingLabelCached; + } + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.AppendLine(DurationLabel()); + stringBuilder.Append(CooldownLabel); + if (!OfferingLabel().NullOrEmpty()) + { + stringBuilder.AppendLine(); + stringBuilder.Append(OfferingLabel()); + } + timeAndOfferingLabelCached = stringBuilder.ToString(); + return timeAndOfferingLabelCached; + } + + private TaggedString OfferingLabel() + { + StringBuilder stringBuilder = new StringBuilder(); + if (RequiredOffering != null) + { + stringBuilder.Append("PsychicRitualRequiredOffering".Translate().CapitalizeFirst()); + stringBuilder.Append(": "); + stringBuilder.Append(RequiredOffering.SummaryFilterFirst); + } + return stringBuilder.ToString(); + } + + public TaggedString DurationLabel() + { + string value = ((int)(hoursUntilOutcome.Average * 2500f)).ToStringTicksToPeriod(); + TaggedString taggedString = ((hoursUntilOutcome.min != hoursUntilOutcome.max) ? "ExpectedLordJobDuration".Translate().CapitalizeFirst() : "PsychicRitualExpectedDurationLabel".Translate().CapitalizeFirst()); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.Append(taggedString); + stringBuilder.Append(": "); + stringBuilder.Append(value); + return stringBuilder.ToString(); + } + + private IReadOnlyDictionary> GenerateRolePositions(PsychicRitualRoleAssignments assignments) + { + tmpParticipants.ClearAndPoolValueLists(); + foreach (PsychicRitualRoleDef role in Roles) + { + tmpParticipants[role] = SimplePool>.Get(); + } + int num = assignments.RoleAssignedCount(ChanterRole) + assignments.RoleAssignedCount(InvokerRole); + int num2 = 0; + foreach (Pawn item in assignments.AssignedPawns(InvokerRole)) + { + _ = item; + int num3 = 0; + IntVec3 cell; + do + { + cell = assignments.Target.Cell; + cell += IntVec3.FromPolar(360f * (float)num2++ / (float)num, invocationCircleRadius); + } + while (!cell.Walkable(assignments.Target.Map) && num3++ <= 10); + if (num3 >= 10) + { + cell = assignments.Target.Cell; + } + tmpParticipants[InvokerRole].Add(cell); + } + foreach (Pawn item2 in assignments.AssignedPawns(ChanterRole)) + { + _ = item2; + IntVec3 cell2 = assignments.Target.Cell; + cell2 += IntVec3.FromPolar(360f * (float)num2++ / (float)num, invocationCircleRadius); + tmpParticipants[ChanterRole].Add(cell2); + } + foreach (Pawn item3 in assignments.AssignedPawns(TargetRole)) + { + _ = item3; + tmpParticipants[TargetRole].Add(assignments.Target.Cell); + } + if (DefenderRole != null) + { + num2 = 0; + int num4 = assignments.RoleAssignedCount(DefenderRole); + bool playerRitual = assignments.AllAssignedPawns.Any((Pawn x) => x.Faction == Faction.OfPlayer); + foreach (Pawn item4 in assignments.AssignedPawns(DefenderRole)) + { + _ = item4; + IntVec3 cell3 = assignments.Target.Cell; + cell3 += IntVec3.FromPolar(360f * (float)num2++ / (float)num4, invocationCircleRadius + 5f); + cell3 = GetBestStandableRolePosition(playerRitual, cell3, assignments.Target.Cell, assignments.Target.Map); + tmpParticipants[DefenderRole].Add(cell3); + } + } + return tmpParticipants; + } + + public override IEnumerable BlockingIssues(PsychicRitualRoleAssignments assignments, Map map) + { + using (new ProfilerBlock("PsychicRitualDef.BlockingIssues")) + { + tmpGatheringPawns.Clear(); + foreach (var (psychicRitualRoleDef2, collection) in assignments.RoleAssignments) + { + if (psychicRitualRoleDef2.CanHandleOfferings) + { + tmpGatheringPawns.AddRange(collection); + } + } + tmpGatheringPawns.RemoveAll(map, (Map _map, Pawn _pawn) => _pawn.MapHeld != _map); + if (TargetRole != null && InvokerRole != null) + { + Pawn pawn = assignments.FirstAssignedPawn(TargetRole); + if (pawn != null) + { + Pawn pawn2 = assignments.FirstAssignedPawn(InvokerRole); + if (pawn2 != null && pawn.IsPrisoner && !map.reachability.CanReach(assignments.Target.Cell, pawn.PositionHeld, PathEndMode.Touch, TraverseParms.For(pawn2))) + { + yield return "PsychicRitualTargetUnreachableByInvoker".Translate(pawn.Named("TARGET"), pawn2.Named("INVOKER")); + } + } + } + if (RequiredOffering != null && !PsychicRitualDef.OfferingReachable(map, tmpGatheringPawns, RequiredOffering, out var reachableCount)) + { + yield return "PsychicRitualOfferingsInsufficient".Translate(RequiredOffering.SummaryFilterFirst, reachableCount); + } + } + } + + public override void CalculateMaxPower(PsychicRitualRoleAssignments assignments, List powerFactorsOut, out float power) + { + power = 0f; + foreach (Pawn item in assignments.AssignedPawns(InvokerRole)) + { + float statValue = item.GetStatValue(StatDefOf.PsychicSensitivity); + float num = PsychicSensitivityToPowerFactor.Evaluate(statValue); + num *= psychicSensitivityPowerFactor; + powerFactorsOut?.Add(new QualityFactor + { + label = "PsychicRitualDef_InvocationCircle_QualityFactor_PsychicSensitivity".Translate(item.Named("PAWN")), + positive = (statValue >= 1f), + count = statValue.ToStringPercent(), + quality = num, + toolTip = "PsychicRitualDef_InvocationCircle_QualityFactor_PsychicSensitivity_Tooltip".Translate(item.Named("PAWN")) + }); + power += num; + } + base.CalculateMaxPower(assignments, powerFactorsOut, out var power2); + power += power2; + if (assignments.Target.Thing is Building building) + { + CalculateFacilityQualityOffset(powerFactorsOut, ref power, building); + } + power = Mathf.Clamp01(power); + } + + private static void CalculateFacilityQualityOffset(List powerFactorsOut, ref float power, Building building) + { + Dictionary dictionary = new Dictionary(); + List linkedFacilitiesListForReading = building.GetComp().LinkedFacilitiesListForReading; + for (int i = 0; i < linkedFacilitiesListForReading.Count; i++) + { + Thing thing = linkedFacilitiesListForReading[i]; + CompFacility compFacility = thing.TryGetComp(); + if (compFacility?.StatOffsets == null) + { + continue; + } + for (int j = 0; j < compFacility.StatOffsets.Count; j++) + { + StatModifier statModifier = compFacility.StatOffsets[j]; + if (statModifier.stat == StatDefOf.PsychicRitualQuality) + { + if (dictionary.TryGetValue(thing.def, out var value)) + { + value.count++; + value.offset += statModifier.value; + } + else + { + dictionary.Add(thing.def, new RitualQualityOffsetCount(1, statModifier.value)); + } + } + } + } + foreach (KeyValuePair item in dictionary) + { + powerFactorsOut?.Add(new QualityFactor + { + label = Find.ActiveLanguageWorker.Pluralize(item.Key.label).CapitalizeFirst(), + positive = true, + count = item.Value.count + " / " + item.Key.GetCompProperties().maxSimultaneous, + quality = item.Value.offset, + toolTip = "PsychicRitualDef_InvocationCircle_QualityFactor_Increase_Tooltip".Translate().CapitalizeFirst().EndWithPeriod() + }); + power += item.Value.offset; + } + } + + public override IEnumerable SpecialDisplayStats(StatRequest req) + { + foreach (StatDrawEntry item in base.SpecialDisplayStats(req)) + { + yield return item; + } + if (requiredOffering != null) + { + yield return new StatDrawEntry(StatCategoryDefOf.PsychicRituals, "StatsReport_Offering".Translate(), requiredOffering.SummaryFilterFirst, "StatsReport_Offering_Desc".Translate(), 1000); + } + yield return new StatDrawEntry(StatCategoryDefOf.PsychicRituals, "StatsReport_RitualDuration".Translate(), Mathf.FloorToInt(hoursUntilOutcome.min * 2500f).ToStringTicksToPeriod(), "StatsReport_RitualDuration_Desc".Translate(), 500); + yield return new StatDrawEntry(StatCategoryDefOf.PsychicRituals, "StatsReport_RitualCooldown".Translate(), (cooldownHours * 2500).ToStringTicksToPeriod(), "StatsReport_RitualCooldown_Desc".Translate(), 100); + } + + public override void CheckPsychicRitualCancelConditions(PsychicRitual psychicRitual) + { + base.CheckPsychicRitualCancelConditions(psychicRitual); + if (!psychicRitual.canceled && invokerRole != null) + { + Pawn pawn = psychicRitual.assignments.FirstAssignedPawn(InvokerRole); + if (pawn != null && pawn.DeadOrDowned) + { + psychicRitual.CancelPsychicRitual("PsychicRitualDef_InvocationCircle_InvokerLost".Translate(pawn.Named("PAWN"))); + } + } + } + } +} \ No newline at end of file diff --git a/Source/WulaFallenEmpire/PsychicRitualToil_GatherForInvocation_Wula.cs b/Source/WulaFallenEmpire/PsychicRitualToil_GatherForInvocation_Wula.cs new file mode 100644 index 00000000..7d551c19 --- /dev/null +++ b/Source/WulaFallenEmpire/PsychicRitualToil_GatherForInvocation_Wula.cs @@ -0,0 +1,83 @@ +using System.Collections.Generic; +using System.Linq; +using RimWorld; +using Verse; +using Verse.AI; +using Verse.AI.Group; + +namespace WulaFallenEmpire +{ + public class PsychicRitualToil_GatherForInvocation_Wula : PsychicRitualToil_Multiplex + { + protected PsychicRitualToil_Goto fallbackToil; + protected PsychicRitualGraph invokerToil; + protected PsychicRitualToil_Goto invokerFinalToil; + private static List blockingPawns = new List(16); + + protected PsychicRitualToil_GatherForInvocation_Wula() { } + + protected PsychicRitualToil_GatherForInvocation_Wula(PsychicRitualDef_WulaBase def, PsychicRitualToil_Goto fallbackToil, PsychicRitualGraph invokerToil) + : base(new Dictionary { { def.InvokerRole, invokerToil } }, fallbackToil) + { + this.fallbackToil = fallbackToil; + this.invokerToil = invokerToil; + invokerFinalToil = (PsychicRitualToil_Goto)invokerToil.GetToil(invokerToil.ToilCount - 1); + } + + public PsychicRitualToil_GatherForInvocation_Wula(PsychicRitual psychicRitual, PsychicRitualDef_WulaBase def, IReadOnlyDictionary> rolePositions) + : this(def, FallbackToil(psychicRitual, def, rolePositions), InvokerToil(def, rolePositions)) + { + } + + public override void ExposeData() + { + base.ExposeData(); + Scribe_References.Look(ref fallbackToil, "fallbackToil"); + Scribe_References.Look(ref invokerToil, "invokerToil"); + Scribe_References.Look(ref invokerFinalToil, "invokerFinalToil"); + } + + public override string GetReport(PsychicRitual psychicRitual, PsychicRitualGraph parent) + { + blockingPawns.Clear(); + blockingPawns.AddRange(fallbackToil.BlockingPawns); + if (invokerToil.CurrentToil == invokerFinalToil) + { + blockingPawns.AddRange(invokerFinalToil.BlockingPawns); + } + else + { + blockingPawns.AddRange(invokerFinalToil.ControlledPawns(psychicRitual)); + } + string text = "PsychicRitualToil_GatherForInvocation_Report".Translate(); + string text2 = blockingPawns.Select((Pawn pawn) => pawn.LabelShortCap).ToCommaList(); + return text + ": " + text2; + } + + public static PsychicRitualToil_Goto FallbackToil(PsychicRitual psychicRitual, PsychicRitualDef_WulaBase def, IReadOnlyDictionary> rolePositions) + { + return new PsychicRitualToil_Goto(rolePositions.Slice(rolePositions.Keys.Except(def.InvokerRole))); + } + + public static PsychicRitualGraph InvokerToil(PsychicRitualDef_WulaBase def, IReadOnlyDictionary> rolePositions) + { + return new PsychicRitualGraph(InvokerGatherPhaseToils(def, rolePositions)) + { + willAdvancePastLastToil = false + }; + } + + public static IEnumerable InvokerGatherPhaseToils(PsychicRitualDef_WulaBase def, IReadOnlyDictionary> rolePositions) + { + if (def.RequiredOffering != null) + { + yield return new PsychicRitualToil_GatherOfferings(def.InvokerRole, def.RequiredOffering); + } + if (def.TargetRole != null) + { + yield return new PsychicRitualToil_CarryAndGoto(def.InvokerRole, def.TargetRole, rolePositions); + } + yield return new PsychicRitualToil_Goto(rolePositions.Slice(def.InvokerRole)); + } + } +} \ No newline at end of file diff --git a/Source/WulaFallenEmpire/PsychicRitual_TechOffering.cs b/Source/WulaFallenEmpire/PsychicRitual_TechOffering.cs index 47e2ac8b..9a9f6458 100644 --- a/Source/WulaFallenEmpire/PsychicRitual_TechOffering.cs +++ b/Source/WulaFallenEmpire/PsychicRitual_TechOffering.cs @@ -19,7 +19,7 @@ namespace WulaFallenEmpire public QualityCategory quality; } - public class PsychicRitual_TechOffering : PsychicRitualDef_InvocationCircle + public class PsychicRitual_TechOffering : PsychicRitualDef_Wula { // 从XML加载的额外祭品列表 public List extraOfferings = new List(); diff --git a/Source/WulaFallenEmpire/WulaFallenEmpire.csproj b/Source/WulaFallenEmpire/WulaFallenEmpire.csproj index 1ad637a8..1b1e7cba 100644 --- a/Source/WulaFallenEmpire/WulaFallenEmpire.csproj +++ b/Source/WulaFallenEmpire/WulaFallenEmpire.csproj @@ -12,6 +12,7 @@ v4.7.2 512 true + 8.0 false @@ -91,6 +92,7 @@ + @@ -110,6 +112,9 @@ + + +