diff --git a/pyproject.toml b/pyproject.toml index fac1d28..5fcd776 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,2 +1,4 @@ [tool.pytest.ini_options] pythonpath = "." +testpaths = ["tests"] +norecursedirs = ["tmp", "assets", "node_modules", "dist", "build", "web", "tools"] diff --git a/src/classes/mutual_action/gift_spirit_stone.py b/src/classes/mutual_action/gift_spirit_stone.py index 31cbb1e..ac33d9e 100644 --- a/src/classes/mutual_action/gift_spirit_stone.py +++ b/src/classes/mutual_action/gift_spirit_stone.py @@ -89,9 +89,9 @@ class GiftSpiritStone(MutualAction): return events if success: - result_text = f"{self.avatar.name} 赠送了 {self.GIFT_AMOUNT} 灵石给 {target.name}({self.avatar. - name} 灵石:{self.avatar.magic_stone + self.GIFT_AMOUNT} → {self.avatar.magic_stone},{target. - name} 灵石:{target.magic_stone - self.GIFT_AMOUNT} → {target.magic_stone})" + result_text = f"""{self.avatar.name} 赠送了 {self.GIFT_AMOUNT} 灵石给 {target.name} +({self.avatar.name} 灵石:{self.avatar.magic_stone + self.GIFT_AMOUNT} → {self.avatar.magic_stone}, +{target.name} 灵石:{target.magic_stone - self.GIFT_AMOUNT} → {target.magic_stone})""" result_event = Event( self.world.month_stamp, result_text, diff --git a/src/classes/mutual_action/occupy.py b/src/classes/mutual_action/occupy.py index cc5f68f..6355727 100644 --- a/src/classes/mutual_action/occupy.py +++ b/src/classes/mutual_action/occupy.py @@ -66,6 +66,7 @@ class Occupy(MutualAction): region, host, _ = self._get_region_and_host(region_name) self._start_month_stamp = self.world.month_stamp + self.target_region_name = region_name region_display_name = region.name if region else self.avatar.tile.location_name event_text = f"{self.avatar.name} 对 {host.name} 的 {region_display_name} 发起抢夺" @@ -93,14 +94,16 @@ class Occupy(MutualAction): def _settle_feedback(self, target_avatar: "Avatar", feedback_name: str) -> None: """处理反馈结果""" - region = self.avatar.tile.region + region_name = getattr(self, "target_region_name", self.avatar.tile.location_name) + region, _, _ = self._get_region_and_host(region_name) if feedback_name == "Yield": # 对方让步:直接转移所有权 - region.host_avatar = self.avatar + if region: + region.host_avatar = self.avatar # 共用一个事件 - event_text = f"{self.avatar.name} 逼迫 {target_avatar.name} 让出了 {self.avatar.tile.location_name}。" + event_text = f"{self.avatar.name} 逼迫 {target_avatar.name} 让出了 {region_name}。" event = Event( self.world.month_stamp, event_text, @@ -120,10 +123,10 @@ class Occupy(MutualAction): # 进攻方胜利则洞府易主 attacker_won = winner == self.avatar - if attacker_won: + if attacker_won and region: region.host_avatar = self.avatar - self._last_result = (winner, loser, loser_dmg, winner_dmg, self.avatar.tile.location_name, attacker_won) + self._last_result = (winner, loser, loser_dmg, winner_dmg, region_name, attacker_won) async def finish(self, region_name: str) -> list[Event]: """完成动作,生成战斗故事并处理死亡""" diff --git a/web/src/components/game/panels/system/SaveLoadPanel.vue b/web/src/components/game/panels/system/SaveLoadPanel.vue index 9f32e19..9fa94da 100644 --- a/web/src/components/game/panels/system/SaveLoadPanel.vue +++ b/web/src/components/game/panels/system/SaveLoadPanel.vue @@ -52,7 +52,6 @@ async function handleLoad(filename: string) { await gameApi.loadGame(filename) worldStore.reset() uiStore.clearSelection() - uiStore.clearHoverCache() await worldStore.initialize() message.success('读档成功') emit('close') diff --git a/web/src/stores/socket.ts b/web/src/stores/socket.ts index b9ab2e7..857eac8 100644 --- a/web/src/stores/socket.ts +++ b/web/src/stores/socket.ts @@ -34,9 +34,6 @@ export const useSocketStore = defineStore('socket', () => { // Update World worldStore.handleTick(payload); - // UI Cache Invalidations - uiStore.clearHoverCache(); - // Refresh Detail if open (Silent update) if (uiStore.selectedTarget) { uiStore.refreshDetail();