diff --git a/EN_README.md b/EN_README.md index 43cd32a..b1422b5 100644 --- a/EN_README.md +++ b/EN_README.md @@ -179,9 +179,9 @@ You can also join the QQ group for discussion: 1071821688. Verification answer i - ✅ One-off choices (e.g., switch techniques or not) ### 🏛️ World Lore -- [ ] Lore framework -- [ ] Worldbuilding -- [ ] Ancient history generation +- ✅ Inject basic world knowledge +- [ ] Dynamic worldview generation +- [ ] Dynamic history generation ### Specials - ✅ Fortuitous encounters diff --git a/README.md b/README.md index d144e3b..59fa980 100644 --- a/README.md +++ b/README.md @@ -183,9 +183,9 @@ - ✅ 一次性选择(如是否要切换功法) ### 🏛️ 世界背景系统 -- [ ] 背景故事框架 -- [ ] 世界观生成 -- [ ] 上古历史生成 +- ✅ 注入基础世界知识 +- [ ] 动态世界观生成 +- [ ] 动态历史生成 ### 特殊 - ✅ 奇遇 diff --git a/src/classes/action/assassinate.py b/src/classes/action/assassinate.py index d452a63..209e713 100644 --- a/src/classes/action/assassinate.py +++ b/src/classes/action/assassinate.py @@ -9,7 +9,7 @@ from src.classes.battle import decide_battle, get_assassination_success_rate from src.classes.story_teller import StoryTeller from src.classes.normalize import normalize_avatar_name from src.classes.death import handle_death -from src.classes.death_reason import DeathReason +from src.classes.death_reason import DeathReason, DeathType from src.classes.kill_and_grab import kill_and_grab if TYPE_CHECKING: @@ -119,7 +119,7 @@ class Assassinate(InstantAction): story_event = Event(self.world.month_stamp, story, related_avatars=rel_ids, is_story=True) # 死亡清理 - handle_death(self.world, target, DeathReason.BATTLE) + handle_death(self.world, target, DeathReason(DeathType.BATTLE, killer_name=self.avatar.name)) return [result_event, story_event] diff --git a/src/classes/action/cast.py b/src/classes/action/cast.py index adb5d53..729a8c7 100644 --- a/src/classes/action/cast.py +++ b/src/classes/action/cast.py @@ -139,6 +139,14 @@ class Cast(TimedAction): # 4. 决策:保留还是卖出 base_desc = f"铸造成功!获得了{self.target_realm.value}{item_label}『{new_item.name}』。" + # 事件1:铸造成功 + events.append(Event( + self.world.month_stamp, + f"{self.avatar.name} 成功铸造{self.target_realm.value}{item_label}『{new_item.name}』。", + related_avatars=[self.avatar.id], + is_major=True + )) + _, result_text = await handle_item_exchange( avatar=self.avatar, new_item=new_item, @@ -147,6 +155,7 @@ class Cast(TimedAction): can_sell_new=True ) + # 事件2:处置结果 events.append(Event( self.world.month_stamp, result_text, diff --git a/src/classes/battle.py b/src/classes/battle.py index 2cb77db..3e435d5 100644 --- a/src/classes/battle.py +++ b/src/classes/battle.py @@ -267,7 +267,7 @@ async def handle_battle_finish( from src.classes.event import Event from src.classes.story_teller import StoryTeller from src.classes.death import handle_death - from src.classes.death_reason import DeathReason + from src.classes.death_reason import DeathReason, DeathType winner, loser, loser_damage, winner_damage = res is_fatal = loser.hp <= 0 @@ -306,5 +306,5 @@ async def handle_battle_finish( # 处理死亡 if is_fatal: - handle_death(world, loser, DeathReason.BATTLE) + handle_death(world, loser, DeathReason(DeathType.BATTLE, killer_name=attacker.name)) return [result_event, story_event] diff --git a/src/classes/fortune.py b/src/classes/fortune.py index a324b50..c957e5f 100644 --- a/src/classes/fortune.py +++ b/src/classes/fortune.py @@ -408,13 +408,14 @@ async def try_trigger_fortune(avatar: Avatar) -> list[Event]: if avatar.weapon: intro += f" 但你手中已有『{avatar.weapon.name}』。" - _, res_text = await handle_item_exchange( + _, exchange_text = await handle_item_exchange( avatar=avatar, new_item=weapon, item_type="weapon", context_intro=intro, can_sell_new=False ) + res_text = f"发现了兵器『{weapon.name}』,{exchange_text}" if kind == FortuneKind.AUXILIARY: auxiliary = _get_auxiliary_for_avatar(avatar) @@ -427,13 +428,14 @@ async def try_trigger_fortune(avatar: Avatar) -> list[Event]: if avatar.auxiliary: intro += f" 但你手中已有『{avatar.auxiliary.name}』。" - _, res_text = await handle_item_exchange( + _, exchange_text = await handle_item_exchange( avatar=avatar, new_item=auxiliary, item_type="auxiliary", context_intro=intro, can_sell_new=False ) + res_text = f"发现了辅助装备『{auxiliary.name}』,{exchange_text}" if kind == FortuneKind.TECHNIQUE: tech = _get_fortune_technique_for_avatar(avatar) @@ -444,13 +446,14 @@ async def try_trigger_fortune(avatar: Avatar) -> list[Event]: if avatar.technique: intro += f" 这与你当前主修的『{avatar.technique.name}』冲突。" - _, res_text = await handle_item_exchange( + _, exchange_text = await handle_item_exchange( avatar=avatar, new_item=tech, item_type="technique", context_intro=intro, can_sell_new=False ) + res_text = f"领悟了功法『{tech.name}』,{exchange_text}" elif kind == FortuneKind.FIND_MASTER: master = _find_potential_master(avatar) diff --git a/src/classes/kill_and_grab.py b/src/classes/kill_and_grab.py index 4b72977..471c316 100644 --- a/src/classes/kill_and_grab.py +++ b/src/classes/kill_and_grab.py @@ -57,6 +57,6 @@ async def kill_and_grab(winner: Avatar, loser: Avatar) -> str: else: loser.change_auxiliary(None) - return log_text + return f"缴获了{item_label}『{loot_item.name}』。{log_text}" return ""