diff --git a/README.md b/README.md index 15d5fb3..3356910 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,7 @@ - ✅ 角色性格 - ✅ 境界突破机制 - ✅ 角色间的相互关系 +- ✅ 角色感知范围 - [ ] 角色特殊能力 - [ ] 角色绰号 - [ ] 角色Buffs系统:增益/减益效果、状态管理 @@ -70,6 +71,7 @@ - ✅ 动作完成时的自动结算机制 - ✅ 多人动作:动作发起与动作响应 - ✅ 影响人际关系的LLM动作(LLM Action) +- ✅ 系统性的动作注册与运行逻辑 - [ ] 更丰富的角色动作 ### 🎭 事件系统 @@ -109,6 +111,8 @@ - ✅ 长期规划和目标导向行为 - ✅ 突发动作响应系统(对外界刺激的即时反应) - ✅ LLM驱动的NPC对话、思考、互动 +- ✅ LLM生成小片段剧情 +- ✅ 根据任务需求分别接入max/flash模型 - [ ] 动态剧情生成 - [ ] NPC观测空间设计 @@ -118,12 +122,12 @@ - [ ] 背景故事框架 ### 特殊 -- [ ] 夺舍 -- [ ] 重生 +- [ ] 夺舍 & 重生 - [ ] 阵法 - [ ] 机缘 - [ ] 天劫 & 心魔 - [ ] 可灵活自定义的世界法则 +- [ ] 占卜 & 谶纬 ## 使用方法 diff --git a/src/classes/action/devour_mortals.py b/src/classes/action/devour_mortals.py index de911f4..785745a 100644 --- a/src/classes/action/devour_mortals.py +++ b/src/classes/action/devour_mortals.py @@ -4,6 +4,7 @@ from src.classes.action import TimedAction from src.classes.event import Event from src.classes.region import CityRegion from src.classes.alignment import Alignment +from src.classes.technique import TechniqueAttribute class DevourMortals(TimedAction): @@ -12,8 +13,8 @@ class DevourMortals(TimedAction): 与普通修炼相比,经验获取显著更高。 """ - COMMENT = "在城镇吞噬凡人,获得大量修行经验(邪修)" - DOABLES_REQUIREMENTS = "仅限城市区域,且角色阵营为‘邪’,且未处于瓶颈" + COMMENT = "在城镇吞噬凡人,获得大量修行经验(邪功法)" + DOABLES_REQUIREMENTS = "仅限城市区域,且当前功法为‘邪’,且未处于瓶颈" PARAMS = {} duration_months = 2 @@ -31,7 +32,8 @@ class DevourMortals(TimedAction): region = self.avatar.tile.region if not isinstance(region, CityRegion): return False - if self.avatar.alignment != Alignment.EVIL: + tech = self.avatar.technique + if tech.attribute != TechniqueAttribute.EVIL: return False return not self.avatar.cultivation_progress.is_in_bottleneck() diff --git a/src/classes/root.py b/src/classes/root.py index b0436a3..65166d8 100644 --- a/src/classes/root.py +++ b/src/classes/root.py @@ -102,4 +102,23 @@ extra_breakthrough_success_rate = defaultdict( { Root.HEAVEN: 0.1, }, -) \ No newline at end of file +) + + +def format_root_cn(root: "Root") -> str: + """ + 将 Root 显示为中文短名 + 组成,例如: + - 天(金、木、水、火、土) + - 风(木、水) + - 金(金) + 回退:若无法获取组成则仅显示短名。 + """ + # Root 成员的 value 为中文名(如“风灵根”、“天灵根”) + name = getattr(root, "value", str(root)) + short_name = name.replace("灵根", "") if isinstance(name, str) else str(root) + elements = getattr(root, "elements", None) + if not elements: + return short_name + # RootElement.__str__ 返回其中文值,因此直接 str(e) + elements_cn = "、".join(str(e) for e in elements) + return f"{short_name}({elements_cn})" \ No newline at end of file diff --git a/src/front/rendering.py b/src/front/rendering.py index 0abf7d9..d253545 100644 --- a/src/front/rendering.py +++ b/src/front/rendering.py @@ -4,6 +4,7 @@ from src.classes.avatar import Avatar, Gender from src.classes.tile import TileType from src.utils.text_wrap import wrap_text from src.classes.relation import Relation +from src.classes.root import format_root_cn # 顶部状态栏高度(像素) STATUS_BAR_HEIGHT = 32 @@ -156,7 +157,7 @@ def draw_tooltip_for_avatar(pygame_mod, screen, colors, font, avatar: Avatar): f"境界: {str(avatar.cultivation_progress)}", f"HP: {avatar.hp}", f"MP: {avatar.mp}", - f"灵根: {str(avatar.root)}", + f"灵根: {format_root_cn(avatar.root)}", f"功法: {avatar.technique.name}({avatar.technique.attribute}·{avatar.technique.grade.value})", f"个性: {', '.join([persona.name for persona in avatar.personas])}", f"位置: ({avatar.pos_x}, {avatar.pos_y})",