From dbc5fe42e86853643b4cf0a8645570e8db4c00b6 Mon Sep 17 00:00:00 2001 From: heipen <126669219+Heipen@users.noreply.github.com> Date: Wed, 4 Mar 2026 12:32:12 +0800 Subject: [PATCH] Upd: Battle UI SpringInn (#5541) --- assets/cn/combat_ui/PAUSE_SpringInn.png | Bin 0 -> 3715 bytes assets/cn/combat_ui/QUIT_SpringInn.png | Bin 0 -> 7247 bytes module/combat/combat.py | 6 ++++++ module/combat_ui/assets.py | 2 ++ module/exercise/hp_daemon.py | 1 + 5 files changed, 9 insertions(+) create mode 100644 assets/cn/combat_ui/PAUSE_SpringInn.png create mode 100644 assets/cn/combat_ui/QUIT_SpringInn.png diff --git a/assets/cn/combat_ui/PAUSE_SpringInn.png b/assets/cn/combat_ui/PAUSE_SpringInn.png new file mode 100644 index 0000000000000000000000000000000000000000..2eb3b3a4665e641836c72df894f19df3e08eefcb GIT binary patch literal 3715 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 AZvX%Q literal 0 HcmV?d00001 diff --git a/module/combat/combat.py b/module/combat/combat.py index 818d3de9b..342aa9e71 100644 --- a/module/combat/combat.py +++ b/module/combat/combat.py @@ -126,6 +126,8 @@ class Combat(Level, HPBalancer, Retirement, SubmarineCall, CombatAuto, CombatMan return PAUSE_MaidCafe if PAUSE_Ancient.match_template_color(self.device.image, offset=(10, 10)): return PAUSE_Ancient + if PAUSE_SpringInn.match_template_color(self.device.image, offset=(10, 10)): + return PAUSE_SpringInn return False def handle_combat_quit(self, offset=(20, 20), interval=3): @@ -177,6 +179,10 @@ class Combat(Level, HPBalancer, Retirement, SubmarineCall, CombatAuto, CombatMan self.device.click(QUIT_MaidCafe) timer.reset() return True + if QUIT_SpringInn.match_luma(self.device.image, offset=offset): + self.device.click(QUIT_SpringInn) + timer.reset() + return True return False def handle_combat_quit_reconfirm(self, interval=2): diff --git a/module/combat_ui/assets.py b/module/combat_ui/assets.py index cf309cd15..e8de38bc1 100644 --- a/module/combat_ui/assets.py +++ b/module/combat_ui/assets.py @@ -20,6 +20,7 @@ PAUSE_Nurse = Button(area={'cn': (1236, 33, 1251, 50), 'en': (1236, 33, 1251, 50 PAUSE_Pharaoh = Button(area={'cn': (1229, 55, 1259, 62), 'en': (1229, 55, 1259, 62), 'jp': (1229, 55, 1259, 62), 'tw': (1229, 55, 1259, 62)}, color={'cn': (164, 119, 78), 'en': (164, 119, 78), 'jp': (164, 119, 78), 'tw': (164, 119, 78)}, button={'cn': (1229, 55, 1259, 62), 'en': (1229, 55, 1259, 62), 'jp': (1229, 55, 1259, 62), 'tw': (1229, 55, 1259, 62)}, file={'cn': './assets/cn/combat_ui/PAUSE_Pharaoh.png', 'en': './assets/cn/combat_ui/PAUSE_Pharaoh.png', 'jp': './assets/cn/combat_ui/PAUSE_Pharaoh.png', 'tw': './assets/cn/combat_ui/PAUSE_Pharaoh.png'}) PAUSE_Seaside = Button(area={'cn': (1214, 31, 1239, 59), 'en': (1214, 31, 1239, 59), 'jp': (1214, 31, 1239, 59), 'tw': (1214, 31, 1239, 59)}, color={'cn': (172, 196, 212), 'en': (172, 196, 212), 'jp': (172, 196, 212), 'tw': (172, 196, 212)}, button={'cn': (1214, 31, 1239, 59), 'en': (1214, 31, 1239, 59), 'jp': (1214, 31, 1239, 59), 'tw': (1214, 31, 1239, 59)}, file={'cn': './assets/cn/combat_ui/PAUSE_Seaside.png', 'en': './assets/cn/combat_ui/PAUSE_Seaside.png', 'jp': './assets/cn/combat_ui/PAUSE_Seaside.png', 'tw': './assets/cn/combat_ui/PAUSE_Seaside.png'}) PAUSE_ShadowPuppetry = Button(area={'cn': (1216, 37, 1234, 55), 'en': (1216, 37, 1234, 55), 'jp': (1216, 37, 1234, 55), 'tw': (1216, 37, 1234, 55)}, color={'cn': (139, 112, 72), 'en': (139, 112, 72), 'jp': (139, 112, 72), 'tw': (139, 112, 72)}, button={'cn': (1216, 37, 1234, 55), 'en': (1216, 37, 1234, 55), 'jp': (1216, 37, 1234, 55), 'tw': (1216, 37, 1234, 55)}, file={'cn': './assets/cn/combat_ui/PAUSE_ShadowPuppetry.png', 'en': './assets/cn/combat_ui/PAUSE_ShadowPuppetry.png', 'jp': './assets/cn/combat_ui/PAUSE_ShadowPuppetry.png', 'tw': './assets/cn/combat_ui/PAUSE_ShadowPuppetry.png'}) +PAUSE_SpringInn = Button(area={'cn': (1212, 37, 1235, 61), 'en': (1212, 37, 1235, 61), 'jp': (1212, 37, 1235, 61), 'tw': (1212, 37, 1235, 61)}, color={'cn': (201, 91, 78), 'en': (201, 91, 78), 'jp': (201, 91, 78), 'tw': (201, 91, 78)}, button={'cn': (1212, 37, 1235, 61), 'en': (1212, 37, 1235, 61), 'jp': (1212, 37, 1235, 61), 'tw': (1212, 37, 1235, 61)}, file={'cn': './assets/cn/combat_ui/PAUSE_SpringInn.png', 'en': './assets/cn/combat_ui/PAUSE_SpringInn.png', 'jp': './assets/cn/combat_ui/PAUSE_SpringInn.png', 'tw': './assets/cn/combat_ui/PAUSE_SpringInn.png'}) PAUSE_Star = Button(area={'cn': (1234, 36, 1250, 57), 'en': (1234, 36, 1250, 57), 'jp': (1234, 36, 1250, 57), 'tw': (1234, 36, 1250, 57)}, color={'cn': (169, 179, 179), 'en': (169, 179, 179), 'jp': (169, 179, 179), 'tw': (169, 179, 179)}, button={'cn': (1234, 36, 1250, 57), 'en': (1234, 36, 1250, 57), 'jp': (1234, 36, 1250, 57), 'tw': (1234, 36, 1250, 57)}, file={'cn': './assets/cn/combat_ui/PAUSE_Star.png', 'en': './assets/cn/combat_ui/PAUSE_Star.png', 'jp': './assets/cn/combat_ui/PAUSE_Star.png', 'tw': './assets/cn/combat_ui/PAUSE_Star.png'}) QUIT = Button(area={'cn': (420, 490, 593, 548), 'en': (473, 508, 567, 532), 'jp': (433, 490, 606, 547), 'tw': (433, 490, 606, 547)}, color={'cn': (199, 122, 114), 'en': (216, 168, 164), 'jp': (196, 120, 113), 'tw': (200, 126, 118)}, button={'cn': (420, 490, 593, 548), 'en': (473, 508, 567, 532), 'jp': (433, 490, 606, 547), 'tw': (433, 490, 606, 547)}, file={'cn': './assets/cn/combat_ui/QUIT.png', 'en': './assets/en/combat_ui/QUIT.png', 'jp': './assets/jp/combat_ui/QUIT.png', 'tw': './assets/tw/combat_ui/QUIT.png'}) QUIT_Christmas = Button(area={'cn': (400, 506, 477, 525), 'en': (410, 507, 469, 524), 'jp': (400, 506, 477, 525), 'tw': (400, 506, 477, 525)}, color={'cn': (195, 139, 166), 'en': (207, 166, 185), 'jp': (195, 139, 166), 'tw': (195, 139, 166)}, button={'cn': (400, 506, 477, 525), 'en': (410, 507, 469, 524), 'jp': (400, 506, 477, 525), 'tw': (400, 506, 477, 525)}, file={'cn': './assets/cn/combat_ui/QUIT_Christmas.png', 'en': './assets/en/combat_ui/QUIT_Christmas.png', 'jp': './assets/cn/combat_ui/QUIT_Christmas.png', 'tw': './assets/cn/combat_ui/QUIT_Christmas.png'}) @@ -31,3 +32,4 @@ QUIT_Ninja = Button(area={'cn': (398, 509, 477, 528), 'en': (398, 509, 477, 528) QUIT_Nurse = Button(area={'cn': (400, 507, 477, 525), 'en': (400, 507, 477, 525), 'jp': (400, 507, 477, 525), 'tw': (400, 507, 477, 525)}, color={'cn': (254, 193, 170), 'en': (254, 193, 170), 'jp': (254, 193, 170), 'tw': (254, 193, 170)}, button={'cn': (400, 507, 477, 525), 'en': (400, 507, 477, 525), 'jp': (400, 507, 477, 525), 'tw': (400, 507, 477, 525)}, file={'cn': './assets/cn/combat_ui/QUIT_Nurse.png', 'en': './assets/cn/combat_ui/QUIT_Nurse.png', 'jp': './assets/cn/combat_ui/QUIT_Nurse.png', 'tw': './assets/cn/combat_ui/QUIT_Nurse.png'}) QUIT_Pharaoh = Button(area={'cn': (400, 507, 477, 525), 'en': (400, 507, 477, 525), 'jp': (400, 507, 477, 525), 'tw': (400, 507, 477, 525)}, color={'cn': (204, 132, 108), 'en': (204, 132, 108), 'jp': (204, 132, 108), 'tw': (204, 132, 108)}, button={'cn': (400, 507, 477, 525), 'en': (400, 507, 477, 525), 'jp': (400, 507, 477, 525), 'tw': (400, 507, 477, 525)}, file={'cn': './assets/cn/combat_ui/QUIT_Pharaoh.png', 'en': './assets/cn/combat_ui/QUIT_Pharaoh.png', 'jp': './assets/cn/combat_ui/QUIT_Pharaoh.png', 'tw': './assets/cn/combat_ui/QUIT_Pharaoh.png'}) QUIT_Seaside = Button(area={'cn': (398, 509, 476, 528), 'en': (398, 509, 476, 528), 'jp': (398, 509, 476, 528), 'tw': (398, 509, 476, 528)}, color={'cn': (247, 208, 188), 'en': (247, 208, 188), 'jp': (247, 208, 188), 'tw': (247, 208, 188)}, button={'cn': (398, 509, 476, 528), 'en': (398, 509, 476, 528), 'jp': (398, 509, 476, 528), 'tw': (398, 509, 476, 528)}, file={'cn': './assets/cn/combat_ui/QUIT_Seaside.png', 'en': './assets/cn/combat_ui/QUIT_Seaside.png', 'jp': './assets/cn/combat_ui/QUIT_Seaside.png', 'tw': './assets/cn/combat_ui/QUIT_Seaside.png'}) +QUIT_SpringInn = Button(area={'cn': (396, 559, 478, 584), 'en': (396, 559, 478, 584), 'jp': (396, 559, 478, 584), 'tw': (396, 559, 478, 584)}, color={'cn': (145, 88, 80), 'en': (145, 88, 80), 'jp': (145, 88, 80), 'tw': (145, 88, 80)}, button={'cn': (396, 559, 478, 584), 'en': (396, 559, 478, 584), 'jp': (396, 559, 478, 584), 'tw': (396, 559, 478, 584)}, file={'cn': './assets/cn/combat_ui/QUIT_SpringInn.png', 'en': './assets/cn/combat_ui/QUIT_SpringInn.png', 'jp': './assets/cn/combat_ui/QUIT_SpringInn.png', 'tw': './assets/cn/combat_ui/QUIT_SpringInn.png'}) diff --git a/module/exercise/hp_daemon.py b/module/exercise/hp_daemon.py index 321a88d24..0170498b4 100644 --- a/module/exercise/hp_daemon.py +++ b/module/exercise/hp_daemon.py @@ -77,6 +77,7 @@ class HpDaemon(ModuleBase): PAUSE_ShadowPuppetry, PAUSE_MaidCafe, PAUSE_Ancient, + PAUSE_SpringInn, ]: self.attacker_hp = self._calculate_hp(image, area=ATTACKER_HP_AREA_New.area, reverse=True) self.defender_hp = self._calculate_hp(image, area=DEFENDER_HP_AREA_New.area, reverse=True)