1
0
mirror of https://github.com/0O0o0oOoO00/Alas.git synced 2026-05-14 07:39:25 +08:00

Merge remote-tracking branch 'LmeSzinc/master' into refactor

# Conflicts:
#	module/config/argument/args.json
This commit is contained in:
0O0o0oOoO00
2025-10-01 19:43:47 +08:00
83 changed files with 126 additions and 153 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.3 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.6 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 7.5 KiB

View File

@@ -258,3 +258,4 @@ To add a new event, add a new row in here, and run `python -m module.config.conf
| 20250821 | event 20220224 cn | Abyssal Refrain | - | - | - | 復刻深度回音 |
| 20250828 | event 20250814 cn | Secrets of the Abyss | - | - | - | 奇淵下的秘密 |
| 20250912 | event 20250912 cn | A Dance for Amahara Above | 起舞于天原之上 | A Dance for Amahara Above | アマハラに舞い奉れ | - |
| 20250919 | event 20250912 cn | A Dance for Amahara Above | - | - | - | 起舞於天原之上 |

View File

@@ -62,6 +62,7 @@ class Config(ConfigBase):
MAP_HAS_MYSTERY = False
# ===== End of generated config =====
MAP_WALK_USE_CURRENT_FLEET = False
HOMO_STORAGE = ((8, 6), [(137.405, 104.804), (1046.044, 104.804), (-12.171, 652.093), (1166.717, 652.093)])
MAP_SWIPE_MULTIPLY = (1.109, 1.130)
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.073, 1.093)

View File

@@ -63,6 +63,7 @@ class Config(ConfigBase):
MAP_HAS_MYSTERY = False
# ===== End of generated config =====
MAP_WALK_USE_CURRENT_FLEET = False
HOMO_STORAGE = ((8, 6), [(137.405, 104.804), (1046.044, 104.804), (-12.171, 652.093), (1166.717, 652.093)])
MAP_SWIPE_MULTIPLY = (1.109, 1.130)
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.073, 1.093)

View File

@@ -117,6 +117,8 @@ class Combat(Level, HPBalancer, Retirement, SubmarineCall, CombatAuto, CombatMan
# PAUSE_Seaside is in light blue
if PAUSE_Seaside.match_template_color(self.device.image, offset=(10, 10)):
return PAUSE_Seaside
if PAUSE_Ninja.match_template_color(self.device.image, offset=(10, 10)):
return PAUSE_Ninja
return False
def handle_combat_quit(self, offset=(20, 20), interval=3):
@@ -160,6 +162,10 @@ class Combat(Level, HPBalancer, Retirement, SubmarineCall, CombatAuto, CombatMan
self.device.click(QUIT_Seaside)
timer.reset()
return True
if QUIT_Ninja.match_luma(self.device.image, offset=offset):
self.device.click(QUIT_Ninja)
timer.reset()
return True
return False
def ensure_combat_oil_loaded(self):

View File

@@ -13,6 +13,7 @@ PAUSE_HolyLight = Button(area={'cn': (1233, 35, 1250, 57), 'en': (1233, 35, 1250
PAUSE_Iridescent_Fantasy = Button(area={'cn': (1232, 33, 1252, 57), 'en': (1232, 33, 1252, 57), 'jp': (1232, 33, 1252, 57), 'tw': (1232, 33, 1252, 57)}, color={'cn': (124, 139, 190), 'en': (124, 139, 190), 'jp': (124, 139, 190), 'tw': (124, 139, 190)}, button={'cn': (1232, 33, 1252, 57), 'en': (1232, 33, 1252, 57), 'jp': (1232, 33, 1252, 57), 'tw': (1232, 33, 1252, 57)}, file={'cn': './assets/cn/combat_ui/PAUSE_Iridescent_Fantasy.png', 'en': './assets/en/combat_ui/PAUSE_Iridescent_Fantasy.png', 'jp': './assets/jp/combat_ui/PAUSE_Iridescent_Fantasy.png', 'tw': './assets/tw/combat_ui/PAUSE_Iridescent_Fantasy.png'})
PAUSE_Neon = Button(area={'cn': (1228, 32, 1250, 59), 'en': (1228, 32, 1250, 59), 'jp': (1228, 32, 1250, 59), 'tw': (1228, 32, 1250, 59)}, color={'cn': (106, 137, 80), 'en': (106, 137, 80), 'jp': (106, 137, 80), 'tw': (106, 137, 80)}, button={'cn': (1228, 32, 1250, 59), 'en': (1228, 32, 1250, 59), 'jp': (1228, 32, 1250, 59), 'tw': (1228, 32, 1250, 59)}, file={'cn': './assets/cn/combat_ui/PAUSE_Neon.png', 'en': './assets/cn/combat_ui/PAUSE_Neon.png', 'jp': './assets/cn/combat_ui/PAUSE_Neon.png', 'tw': './assets/cn/combat_ui/PAUSE_Neon.png'})
PAUSE_New = Button(area={'cn': (1231, 29, 1253, 56), 'en': (1231, 29, 1253, 56), 'jp': (1231, 29, 1253, 56), 'tw': (1231, 29, 1253, 56)}, color={'cn': (156, 158, 166), 'en': (156, 158, 166), 'jp': (156, 158, 166), 'tw': (156, 158, 166)}, button={'cn': (1231, 29, 1253, 56), 'en': (1231, 29, 1253, 56), 'jp': (1231, 29, 1253, 56), 'tw': (1231, 29, 1253, 56)}, file={'cn': './assets/cn/combat_ui/PAUSE_New.png', 'en': './assets/en/combat_ui/PAUSE_New.png', 'jp': './assets/jp/combat_ui/PAUSE_New.png', 'tw': './assets/tw/combat_ui/PAUSE_New.png'})
PAUSE_Ninja = Button(area={'cn': (1230, 37, 1246, 53), 'en': (1230, 37, 1246, 53), 'jp': (1230, 37, 1246, 53), 'tw': (1230, 37, 1246, 53)}, color={'cn': (135, 109, 92), 'en': (135, 109, 92), 'jp': (135, 109, 92), 'tw': (135, 109, 92)}, button={'cn': (1230, 37, 1246, 53), 'en': (1230, 37, 1246, 53), 'jp': (1230, 37, 1246, 53), 'tw': (1230, 37, 1246, 53)}, file={'cn': './assets/cn/combat_ui/PAUSE_Ninja.png', 'en': './assets/cn/combat_ui/PAUSE_Ninja.png', 'jp': './assets/cn/combat_ui/PAUSE_Ninja.png', 'tw': './assets/cn/combat_ui/PAUSE_Ninja.png'})
PAUSE_Nurse = Button(area={'cn': (1236, 33, 1251, 50), 'en': (1236, 33, 1251, 50), 'jp': (1236, 33, 1251, 50), 'tw': (1236, 33, 1251, 50)}, color={'cn': (200, 206, 209), 'en': (200, 206, 209), 'jp': (200, 206, 209), 'tw': (200, 206, 209)}, button={'cn': (1236, 33, 1251, 50), 'en': (1236, 33, 1251, 50), 'jp': (1236, 33, 1251, 50), 'tw': (1236, 33, 1251, 50)}, file={'cn': './assets/cn/combat_ui/PAUSE_Nurse.png', 'en': './assets/cn/combat_ui/PAUSE_Nurse.png', 'jp': './assets/cn/combat_ui/PAUSE_Nurse.png', 'tw': './assets/cn/combat_ui/PAUSE_Nurse.png'})
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'})
@@ -22,6 +23,7 @@ QUIT_Christmas = Button(area={'cn': (400, 506, 477, 525), 'en': (410, 507, 469,
QUIT_Cyber = Button(area={'cn': (393, 506, 470, 524), 'en': (393, 506, 470, 524), 'jp': (393, 506, 470, 524), 'tw': (393, 506, 470, 524)}, color={'cn': (255, 198, 190), 'en': (255, 198, 190), 'jp': (255, 198, 190), 'tw': (255, 198, 190)}, button={'cn': (393, 506, 470, 524), 'en': (393, 506, 470, 524), 'jp': (393, 506, 470, 524), 'tw': (393, 506, 470, 524)}, file={'cn': './assets/cn/combat_ui/QUIT_Cyber.png', 'en': './assets/cn/combat_ui/QUIT_Cyber.png', 'jp': './assets/cn/combat_ui/QUIT_Cyber.png', 'tw': './assets/tw/combat_ui/QUIT_Cyber.png'})
QUIT_Iridescent_Fantasy = Button(area={'cn': (391, 522, 464, 540), 'en': (402, 507, 460, 523), 'jp': (391, 522, 464, 540), 'tw': (391, 522, 464, 540)}, color={'cn': (121, 73, 79), 'en': (255, 174, 164), 'jp': (108, 60, 70), 'tw': (121, 73, 79)}, button={'cn': (391, 522, 464, 540), 'en': (402, 507, 460, 523), 'jp': (391, 522, 464, 540), 'tw': (391, 522, 464, 540)}, file={'cn': './assets/cn/combat_ui/QUIT_Iridescent_Fantasy.png', 'en': './assets/en/combat_ui/QUIT_Iridescent_Fantasy.png', 'jp': './assets/jp/combat_ui/QUIT_Iridescent_Fantasy.png', 'tw': './assets/cn/combat_ui/QUIT_Iridescent_Fantasy.png'})
QUIT_New = Button(area={'cn': (394, 506, 467, 524), 'en': (404, 506, 463, 523), 'jp': (394, 506, 467, 524), 'tw': (393, 505, 471, 524)}, color={'cn': (255, 180, 171), 'en': (255, 195, 187), 'jp': (255, 180, 171), 'tw': (255, 200, 193)}, button={'cn': (394, 506, 467, 524), 'en': (404, 506, 463, 523), 'jp': (394, 506, 467, 524), 'tw': (393, 505, 471, 524)}, file={'cn': './assets/cn/combat_ui/QUIT_New.png', 'en': './assets/en/combat_ui/QUIT_New.png', 'jp': './assets/cn/combat_ui/QUIT_New.png', 'tw': './assets/tw/combat_ui/QUIT_New.png'})
QUIT_Ninja = Button(area={'cn': (398, 509, 477, 528), 'en': (398, 509, 477, 528), 'jp': (398, 509, 477, 528), 'tw': (398, 509, 477, 528)}, color={'cn': (148, 138, 134), 'en': (148, 138, 134), 'jp': (148, 138, 134), 'tw': (148, 138, 134)}, button={'cn': (398, 509, 477, 528), 'en': (398, 509, 477, 528), 'jp': (398, 509, 477, 528), 'tw': (398, 509, 477, 528)}, file={'cn': './assets/cn/combat_ui/QUIT_Ninja.png', 'en': './assets/cn/combat_ui/QUIT_Ninja.png', 'jp': './assets/cn/combat_ui/QUIT_Ninja.png', 'tw': './assets/cn/combat_ui/QUIT_Ninja.png'})
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'})

View File

@@ -3598,6 +3598,7 @@
"event_20200227_cn"
],
"option_tw": [
"event_20250912_cn",
"event_20250814_cn",
"event_20220224_cn",
"event_20221124_cn",
@@ -4376,6 +4377,7 @@
"event_20200227_cn"
],
"option_tw": [
"event_20250912_cn",
"event_20250814_cn",
"event_20220224_cn",
"event_20221124_cn",
@@ -5101,6 +5103,7 @@
"event_20200227_cn"
],
"option_tw": [
"event_20250912_cn",
"event_20250814_cn",
"event_20220224_cn",
"event_20221124_cn",
@@ -5826,6 +5829,7 @@
"event_20200227_cn"
],
"option_tw": [
"event_20250912_cn",
"event_20250814_cn",
"event_20220224_cn",
"event_20221124_cn",
@@ -6551,6 +6555,7 @@
"event_20200227_cn"
],
"option_tw": [
"event_20250912_cn",
"event_20250814_cn",
"event_20220224_cn",
"event_20221124_cn",
@@ -7276,6 +7281,7 @@
"event_20200227_cn"
],
"option_tw": [
"event_20250912_cn",
"event_20250814_cn",
"event_20220224_cn",
"event_20221124_cn",
@@ -8001,6 +8007,7 @@
"event_20200227_cn"
],
"option_tw": [
"event_20250912_cn",
"event_20250814_cn",
"event_20220224_cn",
"event_20221124_cn",
@@ -10082,6 +10089,7 @@
"event_20200227_cn"
],
"option_tw": [
"event_20250912_cn",
"event_20250814_cn",
"event_20220224_cn",
"event_20221124_cn",
@@ -10824,6 +10832,7 @@
"event_20200227_cn"
],
"option_tw": [
"event_20250912_cn",
"event_20250814_cn",
"event_20220224_cn",
"event_20221124_cn",
@@ -11566,6 +11575,7 @@
"event_20200227_cn"
],
"option_tw": [
"event_20250912_cn",
"event_20250814_cn",
"event_20220224_cn",
"event_20221124_cn",
@@ -12308,6 +12318,7 @@
"event_20200227_cn"
],
"option_tw": [
"event_20250912_cn",
"event_20250814_cn",
"event_20220224_cn",
"event_20221124_cn",
@@ -13040,6 +13051,7 @@
"event_20200227_cn"
],
"option_tw": [
"event_20250912_cn",
"event_20250814_cn",
"event_20220224_cn",
"event_20221124_cn",

View File

@@ -800,7 +800,7 @@
"event_20250520_cn": "高塔上的薔薇",
"event_20250724_cn": "鍊金術士與天際交會之塔",
"event_20250814_cn": "奇淵下的秘密",
"event_20250912_cn": "A Dance for Amahara Above",
"event_20250912_cn": "起舞於天原之上",
"raid_20200624": "特別演習埃塞克斯級(復刻)",
"raid_20210708": "復刻穿越彼方的水線",
"raid_20220127": "演習神秘事件調查",

View File

@@ -153,6 +153,10 @@ class Device(Screenshot, Control, AppControl):
if not (self.is_emulator and self.is_ldplayer_bluestacks_family):
logger.warning('ScreenshotMethod ldopengl is available on LD Player only, fallback to auto')
self.config.Emulator_ScreenshotMethod = 'auto'
if not IS_WINDOWS and self.config.Emulator_ScreenshotMethod in ['nemu_ipc', 'ldopengl']:
logger.warning(f'ScreenshotMethod {self.config.Emulator_ScreenshotMethod} is available on Windows only, '
f'fallback to auto')
self.config.Emulator_ScreenshotMethod = 'auto'
def handle_night_commission(self, daily_trigger='21:00', threshold=30):
"""

View File

@@ -5,7 +5,7 @@ from module.base.template import Template
# Don't modify it manually.
EQUIPMENT_CLOSE = Button(area={'cn': (1139, 87, 1231, 111), 'en': (1139, 86, 1232, 113), 'jp': (1139, 87, 1232, 112), 'tw': (1138, 88, 1232, 112)}, color={'cn': (215, 149, 69), 'en': (212, 147, 66), 'jp': (216, 150, 71), 'tw': (215, 151, 72)}, button={'cn': (1139, 87, 1231, 111), 'en': (1139, 86, 1232, 113), 'jp': (1139, 87, 1232, 112), 'tw': (1138, 88, 1232, 112)}, file={'cn': './assets/cn/equipment/EQUIPMENT_CLOSE.png', 'en': './assets/en/equipment/EQUIPMENT_CLOSE.png', 'jp': './assets/jp/equipment/EQUIPMENT_CLOSE.png', 'tw': './assets/tw/equipment/EQUIPMENT_CLOSE.png'})
EQUIPMENT_OPEN = Button(area={'cn': (1139, 87, 1231, 111), 'en': (1143, 90, 1229, 110), 'jp': (1140, 88, 1234, 111), 'tw': (1138, 87, 1232, 112)}, color={'cn': (82, 137, 199), 'en': (75, 134, 200), 'jp': (80, 135, 198), 'tw': (86, 139, 198)}, button={'cn': (1139, 87, 1231, 111), 'en': (1143, 90, 1229, 110), 'jp': (1140, 88, 1234, 111), 'tw': (1138, 87, 1232, 112)}, file={'cn': './assets/cn/equipment/EQUIPMENT_OPEN.png', 'en': './assets/en/equipment/EQUIPMENT_OPEN.png', 'jp': './assets/jp/equipment/EQUIPMENT_OPEN.png', 'tw': './assets/tw/equipment/EQUIPMENT_OPEN.png'})
EQUIPMENT_OPEN = Button(area={'cn': (1166, 91, 1203, 110), 'en': (1162, 92, 1211, 107), 'jp': (1167, 91, 1202, 110), 'tw': (1165, 91, 1203, 110)}, color={'cn': (128, 178, 223), 'en': (102, 157, 212), 'jp': (133, 181, 225), 'tw': (132, 180, 222)}, button={'cn': (1166, 91, 1203, 110), 'en': (1162, 92, 1211, 107), 'jp': (1167, 91, 1202, 110), 'tw': (1165, 91, 1203, 110)}, file={'cn': './assets/cn/equipment/EQUIPMENT_OPEN.png', 'en': './assets/en/equipment/EQUIPMENT_OPEN.png', 'jp': './assets/jp/equipment/EQUIPMENT_OPEN.png', 'tw': './assets/tw/equipment/EQUIPMENT_OPEN.png'})
EQUIPMENT_SCROLL_BOTTOM = Button(area={'cn': (1256, 575, 1264, 583), 'en': (1256, 575, 1264, 583), 'jp': (1256, 575, 1264, 583), 'tw': (1256, 575, 1264, 583)}, color={'cn': (244, 209, 66), 'en': (244, 209, 66), 'jp': (244, 209, 66), 'tw': (244, 209, 66)}, button={'cn': (1256, 575, 1264, 583), 'en': (1256, 575, 1264, 583), 'jp': (1256, 575, 1264, 583), 'tw': (1256, 575, 1264, 583)}, file={'cn': './assets/cn/equipment/EQUIPMENT_SCROLL_BOTTOM.png', 'en': './assets/en/equipment/EQUIPMENT_SCROLL_BOTTOM.png', 'jp': './assets/jp/equipment/EQUIPMENT_SCROLL_BOTTOM.png', 'tw': './assets/tw/equipment/EQUIPMENT_SCROLL_BOTTOM.png'})
EQUIPPING_OFF = Button(area={'cn': (25, 565, 60, 589), 'en': (30, 585, 59, 605), 'jp': (25, 565, 60, 589), 'tw': (25, 565, 60, 589)}, color={'cn': (94, 101, 104), 'en': (65, 70, 96), 'jp': (94, 101, 104), 'tw': (94, 101, 104)}, button={'cn': (25, 565, 60, 589), 'en': (30, 585, 59, 605), 'jp': (25, 565, 60, 589), 'tw': (25, 565, 60, 589)}, file={'cn': './assets/cn/equipment/EQUIPPING_OFF.png', 'en': './assets/en/equipment/EQUIPPING_OFF.png', 'jp': './assets/jp/equipment/EQUIPPING_OFF.png', 'tw': './assets/tw/equipment/EQUIPPING_OFF.png'})
EQUIPPING_ON = Button(area={'cn': (26, 510, 57, 584), 'en': (32, 563, 54, 583), 'jp': (32, 513, 55, 586), 'tw': (26, 510, 61, 590)}, color={'cn': (97, 115, 156), 'en': (164, 173, 208), 'jp': (108, 123, 165), 'tw': (86, 105, 148)}, button={'cn': (26, 510, 57, 584), 'en': (7, 559, 78, 606), 'jp': (32, 513, 55, 586), 'tw': (26, 510, 61, 590)}, file={'cn': './assets/cn/equipment/EQUIPPING_ON.png', 'en': './assets/en/equipment/EQUIPPING_ON.png', 'jp': './assets/jp/equipment/EQUIPPING_ON.png', 'tw': './assets/tw/equipment/EQUIPPING_ON.png'})

View File

@@ -10,6 +10,8 @@ from module.ui.navbar import Navbar
SWIPE_DISTANCE = 250
SWIPE_RANDOM_RANGE = (-40, -20, 40, 20)
# patch to handle both blue (folded) and orange (expanded) button
EQUIPMENT_OPEN.match = EQUIPMENT_OPEN.match_luma
class Equipment(StorageHandler):

View File

@@ -73,6 +73,7 @@ class HpDaemon(ModuleBase):
PAUSE_Devil,
PAUSE_Seaside,
PAUSE_Star,
PAUSE_Ninja,
]:
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)

View File

@@ -8,7 +8,7 @@ BATTLE_PASS_RED_DOT = Button(area={'cn': (623, 105, 629, 113), 'en': (623, 105,
BUY_CONFIRM = Button(area={'cn': (698, 579, 871, 636), 'en': (710, 583, 860, 633), 'jp': (749, 592, 820, 623), 'tw': (699, 579, 869, 636)}, color={'cn': (81, 129, 190), 'en': (92, 142, 203), 'jp': (122, 158, 205), 'tw': (85, 132, 191)}, button={'cn': (698, 579, 871, 636), 'en': (710, 583, 860, 633), 'jp': (749, 592, 820, 623), 'tw': (699, 579, 869, 636)}, file={'cn': './assets/cn/freebies/BUY_CONFIRM.png', 'en': './assets/en/freebies/BUY_CONFIRM.png', 'jp': './assets/jp/freebies/BUY_CONFIRM.png', 'tw': './assets/tw/freebies/BUY_CONFIRM.png'})
DATA_KEY_COLLECT = Button(area={'cn': (251, 38, 339, 73), 'en': (256, 42, 337, 68), 'jp': (254, 40, 340, 72), 'tw': (251, 38, 339, 73)}, color={'cn': (144, 116, 77), 'en': (145, 109, 72), 'jp': (144, 111, 69), 'tw': (144, 116, 77)}, button={'cn': (251, 38, 339, 73), 'en': (256, 42, 337, 68), 'jp': (254, 40, 340, 72), 'tw': (251, 38, 339, 73)}, file={'cn': './assets/cn/freebies/DATA_KEY_COLLECT.png', 'en': './assets/en/freebies/DATA_KEY_COLLECT.png', 'jp': './assets/jp/freebies/DATA_KEY_COLLECT.png', 'tw': './assets/tw/freebies/DATA_KEY_COLLECT.png'})
DATA_KEY_COLLECTED = Button(area={'cn': (251, 38, 339, 73), 'en': (255, 42, 338, 68), 'jp': (254, 41, 340, 71), 'tw': (251, 38, 339, 73)}, color={'cn': (102, 103, 103), 'en': (113, 113, 115), 'jp': (102, 103, 103), 'tw': (102, 103, 103)}, button={'cn': (251, 38, 339, 73), 'en': (255, 42, 338, 68), 'jp': (254, 41, 340, 71), 'tw': (251, 38, 339, 73)}, file={'cn': './assets/cn/freebies/DATA_KEY_COLLECTED.png', 'en': './assets/en/freebies/DATA_KEY_COLLECTED.png', 'jp': './assets/jp/freebies/DATA_KEY_COLLECTED.png', 'tw': './assets/tw/freebies/DATA_KEY_COLLECTED.png'})
FREE_SUPPLY_PACK = Button(area={'cn': (264, 615, 312, 641), 'en': (269, 619, 317, 636), 'jp': (281, 617, 324, 639), 'tw': (524, 532, 582, 562)}, color={'cn': (124, 136, 144), 'en': (148, 158, 164), 'jp': (136, 147, 154), 'tw': (130, 143, 154)}, button={'cn': (234, 302, 348, 396), 'en': (268, 311, 344, 387), 'jp': (247, 302, 361, 396), 'tw': (388, 194, 554, 352)}, file={'cn': './assets/cn/freebies/FREE_SUPPLY_PACK.png', 'en': './assets/en/freebies/FREE_SUPPLY_PACK.png', 'jp': './assets/jp/freebies/FREE_SUPPLY_PACK.png', 'tw': './assets/tw/freebies/FREE_SUPPLY_PACK.png'})
FREE_SUPPLY_PACK = Button(area={'cn': (264, 615, 312, 641), 'en': (269, 619, 317, 636), 'jp': (281, 617, 324, 639), 'tw': (264, 615, 312, 641)}, color={'cn': (124, 136, 144), 'en': (148, 158, 164), 'jp': (136, 147, 154), 'tw': (124, 136, 144)}, button={'cn': (234, 302, 348, 396), 'en': (268, 311, 344, 387), 'jp': (247, 302, 361, 396), 'tw': (234, 302, 348, 396)}, file={'cn': './assets/cn/freebies/FREE_SUPPLY_PACK.png', 'en': './assets/en/freebies/FREE_SUPPLY_PACK.png', 'jp': './assets/jp/freebies/FREE_SUPPLY_PACK.png', 'tw': './assets/tw/freebies/FREE_SUPPLY_PACK.png'})
MAIL_BATCH_CLAIM = Button(area={'cn': (593, 524, 687, 546), 'en': (643, 525, 704, 543), 'jp': (592, 523, 688, 547), 'tw': (593, 524, 687, 546)}, color={'cn': (114, 209, 255), 'en': (147, 220, 255), 'jp': (109, 207, 255), 'tw': (114, 209, 255)}, button={'cn': (593, 524, 687, 546), 'en': (643, 525, 704, 543), 'jp': (592, 523, 688, 547), 'tw': (593, 524, 687, 546)}, file={'cn': './assets/cn/freebies/MAIL_BATCH_CLAIM.png', 'en': './assets/en/freebies/MAIL_BATCH_CLAIM.png', 'jp': './assets/jp/freebies/MAIL_BATCH_CLAIM.png', 'tw': './assets/cn/freebies/MAIL_BATCH_CLAIM.png'})
MAIL_BATCH_DELETE = Button(area={'cn': (770, 523, 865, 547), 'en': (817, 526, 887, 544), 'jp': (770, 523, 866, 547), 'tw': (770, 523, 865, 547)}, color={'cn': (112, 209, 255), 'en': (150, 221, 255), 'jp': (114, 209, 255), 'tw': (112, 209, 255)}, button={'cn': (770, 523, 865, 547), 'en': (817, 526, 887, 544), 'jp': (770, 523, 866, 547), 'tw': (770, 523, 865, 547)}, file={'cn': './assets/cn/freebies/MAIL_BATCH_DELETE.png', 'en': './assets/en/freebies/MAIL_BATCH_DELETE.png', 'jp': './assets/jp/freebies/MAIL_BATCH_DELETE.png', 'tw': './assets/cn/freebies/MAIL_BATCH_DELETE.png'})
MAIL_COLLECT = Button(area={'cn': (841, 577, 970, 608), 'en': (865, 583, 947, 601), 'jp': (842, 575, 964, 609), 'tw': (838, 575, 973, 611)}, color={'cn': (155, 184, 219), 'en': (151, 180, 216), 'jp': (116, 154, 203), 'tw': (145, 174, 212)}, button={'cn': (841, 577, 970, 608), 'en': (865, 583, 947, 601), 'jp': (842, 575, 964, 609), 'tw': (838, 575, 973, 611)}, file={'cn': './assets/cn/freebies/MAIL_COLLECT.png', 'en': './assets/en/freebies/MAIL_COLLECT.png', 'jp': './assets/jp/freebies/MAIL_COLLECT.png', 'tw': './assets/tw/freebies/MAIL_COLLECT.png'})

View File

@@ -24,10 +24,6 @@ class Freebies(ModuleBase):
if self.config.SupplyPack_Collect:
logger.hr('Supply pack', level=1)
if self.config.SERVER in ['tw']:
# SupplyPack(self.config, self.device).run()
pass
else:
SupplyPack_250814(self.config, self.device).run()
SupplyPack_250814(self.config, self.device).run()
self.config.task_delay(server_update=True)

View File

@@ -364,15 +364,21 @@ class GuildOperations(GuildBase):
else:
self.device.screenshot()
if self.appear(GUILD_DISPATCH_FLEET_UNFILLED, threshold=20, interval=5):
if self.appear(GUILD_DISPATCH_FLEET_UNFILLED, offset=(20, 20), interval=3):
# Don't use offset here, because GUILD_DISPATCH_FLEET_UNFILLED only has a difference in colors
# Use long interval because the game needs a few seconds to choose the ships
self.device.click(GUILD_DISPATCH_RECOMMEND)
continue
if not dispatched and self.appear_then_click(GUILD_DISPATCH_FLEET, threshold=20, interval=5):
# Don't use offset here, because GUILD_DISPATCH_FLEET only has a difference in colors
if not dispatched and self.appear(GUILD_DISPATCH_FLEET, offset=(20, 20), interval=3):
# GUILD_DISPATCH_FLEET and GUILD_DISPATCH_FLEET_UNFILLED has same feature but different colors
# check background blue for double check
if self.image_color_count(GUILD_DISPATCH_FLEET, color=(82, 93, 221), threshold=235, count=500):
self.device.click(GUILD_DISPATCH_FLEET)
else:
self.interval_clear(GUILD_DISPATCH_FLEET)
continue
if self.handle_popup_confirm('GUILD_DISPATCH'):
self.interval_clear(GUILD_DISPATCH_FLEET)
dispatched = True
continue
@@ -381,13 +387,16 @@ class GuildOperations(GuildBase):
# In first dispatch, it will show GUILD_DISPATCH_IN_PROGRESS
logger.info('Fleet dispatched, dispatch in progress')
break
if dispatched and self.appear(GUILD_DISPATCH_FLEET, threshold=20, interval=0):
# In the rest of the dispatch, it will show GUILD_DISPATCH_FLEET
# We can't ensure that fleet has dispatched,
# because GUILD_DISPATCH_FLEET also shows after clicking recommend before dispatching
# _guild_operations_dispatch() will retry it if haven't dispatched
logger.info('Fleet dispatched')
break
if dispatched and self.appear(GUILD_DISPATCH_FLEET, offset=(20, 20), interval=3):
# GUILD_DISPATCH_FLEET and GUILD_DISPATCH_FLEET_UNFILLED has same feature but different colors
# check background blue for double check
if self.image_color_count(GUILD_DISPATCH_FLEET, color=(82, 93, 221), threshold=235, count=500):
# In the rest of the dispatch, it will show GUILD_DISPATCH_FLEET
# We can't ensure that fleet has dispatched,
# because GUILD_DISPATCH_FLEET still shows after clicking recommend before dispatching
# _guild_operations_dispatch() will retry it if haven't dispatched
logger.info('Fleet dispatched')
break
def _guild_operations_dispatch_exit(self, skip_first_screenshot=True):
"""
@@ -473,9 +482,8 @@ class GuildOperations(GuildBase):
if self.appear_then_click(GUILD_BOSS_ENTER, interval=3):
continue
if self.appear(GUILD_DISPATCH_FLEET, threshold=20, interval=3):
# Button does not appear greyed out even
# when empty fleet composition
if self.appear(GUILD_DISPATCH_FLEET, offset=(20, 20), interval=3):
# Button does not appear greyed out even when empty fleet composition
if dispatch_count < 5:
self.device.click(GUILD_DISPATCH_FLEET)
dispatch_count += 1

View File

@@ -313,7 +313,8 @@ class FastForwardHandler(AutoSearchHandler):
return False
if not self.is_call_submarine_at_boss:
return False
if not self.map_is_auto_search:
# 2025.09.22, correct that fleet role settings is unlocked after clear mode
if not self.map_is_clear_mode:
logger.warning('Can not set submarine call because auto search not available, assuming disabled')
logger.warning('Please do the followings: '
'goto any stage -> auto search role -> set submarine role to standby')

View File

@@ -411,7 +411,7 @@ class Camera(MapOperation):
mystery_count:
siren_count:
carrier_count:
mode (str): Scan mode, such as 'normal', 'carrier', 'movable'
mode (str): Scan mode, such as 'init', 'normal', 'carrier', 'movable'
"""
logger.info(f'Full scan start, mode={mode}')

View File

@@ -897,7 +897,7 @@ class Fleet(Camera, AmbushHandler):
self.lv_get()
self.ensure_edge_insight(preset=self.map.in_map_swipe_preset_data)
self.handle_info_bar() # The info_bar which shows "Changed to fleet 2", will block the ammo icon
self.full_scan(must_scan=self.map.camera_data_spawn_point)
self.full_scan(must_scan=self.map.camera_data_spawn_point, mode='init')
self.find_current_fleet()
self.find_submarine()
self.find_path_initial()

View File

@@ -302,6 +302,24 @@ class CampaignMap:
return True
def fixup_submarine_fleet(self):
# fixup submarine spawn point
# If a grid is_submarine, the lower grid may detected as is_fleet, because they have the same ammo icon
for grid in self.select(is_fleet=True):
if grid.is_spawn_point:
continue
for upper in self.grid_covered(grid, location=[(0, -1)]):
if upper.is_submarine_spawn_point:
logger.info(f'Fixup submarine spawn point, fleet={grid} -> submarine={upper}')
grid.is_fleet = False
grid.is_current_fleet = False
upper.is_submarine = True
# and we don't allow a grid to be both is_enemy and is_fleet at init
# which might be an submarine above
for grid in self.select(is_enemy=True, is_fleet=True):
grid.is_fleet = False
grid.is_current_fleet = False
def show(self):
# logger.info('Showing grids:')
logger.info(' ' + ' '.join([' ' + chr(x + 64 + 1) for x in range(self.shape[0] + 1)]))
@@ -315,7 +333,7 @@ class CampaignMap:
Args:
grids:
camera (tuple):
mode (str): Scan mode, such as 'normal', 'carrier', 'movable'
mode (str): Scan mode, such as 'init', 'normal', 'carrier', 'movable'
"""
offset = np.array(camera) - np.array(grids.center_loca)
# grids.show()
@@ -337,6 +355,8 @@ class CampaignMap:
if self.ignore_prediction_match(globe=loca, local=grid):
continue
self.grids[loca].merge(grid, mode=mode)
if mode == 'init':
self.fixup_submarine_fleet()
return True
else:
logger.warning('Too many wrong prediction')

View File

@@ -186,7 +186,7 @@ class GridInfo:
"""
Args:
info (GridInfo):
mode (str): Scan mode, such as 'normal', 'carrier', 'movable'
mode (str): Scan mode, such as 'init', 'normal', 'carrier', 'movable'
Returns:
bool: If success.
@@ -209,7 +209,12 @@ class GridInfo:
self.is_fleet = True
if info.is_current_fleet:
self.is_current_fleet = True
return True
if mode == 'init' and info.is_enemy:
# on init scan, we allow a grid to be both is_fleet and is_enemy
# so fixup_submarine_fleet can info
pass
else:
return True
else:
return False
if info.is_boss:

View File

@@ -14,7 +14,7 @@ DOCK_FILTER_CONFIRM = Button(area={'cn': (714, 613, 886, 671), 'en': (718, 618,
DOCK_FIRST_NPC = Button(area={'cn': (96, 111, 123, 123), 'en': (96, 111, 123, 123), 'jp': (96, 111, 123, 123), 'tw': (96, 111, 123, 123)}, color={'cn': (184, 150, 150), 'en': (184, 150, 150), 'jp': (184, 150, 150), 'tw': (184, 150, 150)}, button={'cn': (96, 111, 123, 123), 'en': (96, 111, 123, 123), 'jp': (96, 111, 123, 123), 'tw': (96, 111, 123, 123)}, file={'cn': './assets/cn/retire/DOCK_FIRST_NPC.png', 'en': './assets/cn/retire/DOCK_FIRST_NPC.png', 'jp': './assets/cn/retire/DOCK_FIRST_NPC.png', 'tw': './assets/cn/retire/DOCK_FIRST_NPC.png'})
DOCK_SCROLL = Button(area={'cn': (1239, 76, 1248, 641), 'en': (1239, 76, 1248, 641), 'jp': (1237, 78, 1250, 628), 'tw': (1239, 76, 1248, 641)}, color={'cn': (47, 46, 37), 'en': (47, 46, 37), 'jp': (180, 156, 66), 'tw': (47, 46, 37)}, button={'cn': (1239, 76, 1248, 641), 'en': (1239, 76, 1248, 641), 'jp': (1237, 78, 1250, 628), 'tw': (1239, 76, 1248, 641)}, file={'cn': './assets/cn/retire/DOCK_SCROLL.png', 'en': './assets/en/retire/DOCK_SCROLL.png', 'jp': './assets/jp/retire/DOCK_SCROLL.png', 'tw': './assets/tw/retire/DOCK_SCROLL.png'})
DOCK_SELECTED = Button(area={'cn': (582, 662, 647, 685), 'en': (597, 658, 655, 691), 'jp': (603, 662, 655, 685), 'tw': (582, 662, 647, 685)}, color={'cn': (75, 75, 83), 'en': (64, 62, 73), 'jp': (84, 83, 92), 'tw': (75, 75, 83)}, button={'cn': (582, 662, 647, 685), 'en': (597, 658, 655, 691), 'jp': (603, 662, 655, 685), 'tw': (582, 662, 647, 685)}, file={'cn': './assets/cn/retire/DOCK_SELECTED.png', 'en': './assets/en/retire/DOCK_SELECTED.png', 'jp': './assets/jp/retire/DOCK_SELECTED.png', 'tw': './assets/tw/retire/DOCK_SELECTED.png'})
EMPTY_ENHANCE_SLOT_PLUS = Button(area={'cn': (737, 402, 773, 437), 'en': (747, 402, 782, 437), 'jp': (737, 402, 773, 437), 'tw': (737, 402, 773, 437)}, color={'cn': (46, 46, 46), 'en': (38, 38, 38), 'jp': (46, 46, 46), 'tw': (46, 46, 46)}, button={'cn': (737, 402, 773, 437), 'en': (747, 402, 782, 437), 'jp': (737, 402, 773, 437), 'tw': (737, 402, 773, 437)}, file={'cn': './assets/cn/retire/EMPTY_ENHANCE_SLOT_PLUS.png', 'en': './assets/en/retire/EMPTY_ENHANCE_SLOT_PLUS.png', 'jp': './assets/jp/retire/EMPTY_ENHANCE_SLOT_PLUS.png', 'tw': './assets/tw/retire/EMPTY_ENHANCE_SLOT_PLUS.png'})
EMPTY_ENHANCE_SLOT_PLUS = Button(area={'cn': (737, 402, 773, 437), 'en': (747, 402, 782, 437), 'jp': (737, 402, 773, 437), 'tw': (747, 401, 782, 437)}, color={'cn': (46, 46, 46), 'en': (38, 38, 38), 'jp': (46, 46, 46), 'tw': (43, 43, 43)}, button={'cn': (737, 402, 773, 437), 'en': (747, 402, 782, 437), 'jp': (737, 402, 773, 437), 'tw': (747, 401, 782, 437)}, file={'cn': './assets/cn/retire/EMPTY_ENHANCE_SLOT_PLUS.png', 'en': './assets/en/retire/EMPTY_ENHANCE_SLOT_PLUS.png', 'jp': './assets/jp/retire/EMPTY_ENHANCE_SLOT_PLUS.png', 'tw': './assets/tw/retire/EMPTY_ENHANCE_SLOT_PLUS.png'})
ENHANCE_CONFIRM = Button(area={'cn': (1126, 602, 1256, 645), 'en': (1226, 605, 1262, 641), 'jp': (1126, 601, 1257, 646), 'tw': (1215, 606, 1253, 641)}, color={'cn': (203, 149, 81), 'en': (212, 167, 100), 'jp': (189, 139, 78), 'tw': (216, 169, 99)}, button={'cn': (1126, 602, 1256, 645), 'en': (1226, 605, 1262, 641), 'jp': (1126, 601, 1257, 646), 'tw': (1215, 606, 1253, 641)}, file={'cn': './assets/cn/retire/ENHANCE_CONFIRM.png', 'en': './assets/en/retire/ENHANCE_CONFIRM.png', 'jp': './assets/jp/retire/ENHANCE_CONFIRM.png', 'tw': './assets/tw/retire/ENHANCE_CONFIRM.png'})
ENHANCE_FILLED = Button(area={'cn': (728, 440, 781, 454), 'en': (728, 440, 781, 454), 'jp': (722, 387, 789, 400), 'tw': (728, 440, 781, 454)}, color={'cn': (156, 138, 127), 'en': (156, 138, 127), 'jp': (146, 153, 211), 'tw': (156, 138, 127)}, button={'cn': (728, 440, 781, 454), 'en': (728, 440, 781, 454), 'jp': (722, 387, 789, 400), 'tw': (728, 440, 781, 454)}, file={'cn': './assets/cn/retire/ENHANCE_FILLED.png', 'en': './assets/en/retire/ENHANCE_FILLED.png', 'jp': './assets/jp/retire/ENHANCE_FILLED.png', 'tw': './assets/tw/retire/ENHANCE_FILLED.png'})
ENHANCE_RECOMMEND = Button(area={'cn': (959, 602, 1089, 645), 'en': (1057, 606, 1091, 640), 'jp': (965, 605, 1085, 641), 'tw': (1050, 607, 1082, 639)}, color={'cn': (87, 134, 194), 'en': (106, 151, 215), 'jp': (86, 136, 201), 'tw': (106, 151, 212)}, button={'cn': (959, 602, 1089, 645), 'en': (1057, 606, 1091, 640), 'jp': (965, 605, 1085, 641), 'tw': (1050, 607, 1082, 639)}, file={'cn': './assets/cn/retire/ENHANCE_RECOMMEND.png', 'en': './assets/en/retire/ENHANCE_RECOMMEND.png', 'jp': './assets/jp/retire/ENHANCE_RECOMMEND.png', 'tw': './assets/tw/retire/ENHANCE_RECOMMEND.png'})

View File

@@ -4,6 +4,7 @@ from module.base.template import Template
# This file was automatically generated by dev_tools/button_extract.py.
# Don't modify it manually.
MAIN_OCR_COIN = Button(area={'cn': (716, 24, 780, 49), 'en': (716, 24, 780, 49), 'jp': (716, 24, 780, 49), 'tw': (716, 24, 780, 49)}, color={'cn': (119, 126, 145), 'en': (119, 126, 145), 'jp': (119, 126, 145), 'tw': (119, 126, 145)}, button={'cn': (716, 24, 780, 49), 'en': (716, 24, 780, 49), 'jp': (716, 24, 780, 49), 'tw': (716, 24, 780, 49)}, file={'cn': './assets/cn/shipyard/MAIN_OCR_COIN.png', 'en': './assets/cn/shipyard/MAIN_OCR_COIN.png', 'jp': './assets/cn/shipyard/MAIN_OCR_COIN.png', 'tw': './assets/cn/shipyard/MAIN_OCR_COIN.png'})
SHIPYARD_CONFIRM_DEV = Button(area={'cn': (1074, 497, 1152, 524), 'en': (1067, 492, 1163, 518), 'jp': (1058, 497, 1169, 534), 'tw': (1084, 495, 1144, 523)}, color={'cn': (106, 144, 211), 'en': (102, 140, 209), 'jp': (79, 122, 195), 'tw': (112, 148, 213)}, button={'cn': (1074, 497, 1152, 524), 'en': (1067, 492, 1163, 518), 'jp': (1058, 497, 1169, 534), 'tw': (1084, 495, 1144, 523)}, file={'cn': './assets/cn/shipyard/SHIPYARD_CONFIRM_DEV.png', 'en': './assets/en/shipyard/SHIPYARD_CONFIRM_DEV.png', 'jp': './assets/jp/shipyard/SHIPYARD_CONFIRM_DEV.png', 'tw': './assets/tw/shipyard/SHIPYARD_CONFIRM_DEV.png'})
SHIPYARD_CONFIRM_FATE = Button(area={'cn': (1145, 523, 1221, 558), 'en': (1145, 522, 1242, 555), 'jp': (1137, 525, 1231, 556), 'tw': (1153, 521, 1215, 559)}, color={'cn': (109, 149, 203), 'en': (145, 173, 214), 'jp': (104, 144, 198), 'tw': (121, 159, 208)}, button={'cn': (1145, 523, 1221, 558), 'en': (1145, 522, 1242, 555), 'jp': (1137, 525, 1231, 556), 'tw': (1153, 521, 1215, 559)}, file={'cn': './assets/cn/shipyard/SHIPYARD_CONFIRM_FATE.png', 'en': './assets/en/shipyard/SHIPYARD_CONFIRM_FATE.png', 'jp': './assets/jp/shipyard/SHIPYARD_CONFIRM_FATE.png', 'tw': './assets/tw/shipyard/SHIPYARD_CONFIRM_FATE.png'})
SHIPYARD_GO_FATE = Button(area={'cn': (943, 508, 1031, 531), 'en': (943, 508, 1018, 531), 'jp': (944, 509, 1029, 530), 'tw': (943, 507, 1030, 531)}, color={'cn': (169, 165, 54), 'en': (181, 177, 58), 'jp': (146, 143, 46), 'tw': (160, 156, 50)}, button={'cn': (1080, 415, 1147, 505), 'en': (1080, 415, 1147, 505), 'jp': (1078, 414, 1149, 506), 'tw': (1080, 415, 1147, 505)}, file={'cn': './assets/cn/shipyard/SHIPYARD_GO_FATE.png', 'en': './assets/en/shipyard/SHIPYARD_GO_FATE.png', 'jp': './assets/jp/shipyard/SHIPYARD_GO_FATE.png', 'tw': './assets/tw/shipyard/SHIPYARD_GO_FATE.png'})

View File

@@ -1,13 +1,11 @@
from datetime import datetime
from module.base.timer import Timer
from module.campaign.assets import OCR_OIL_CHECK
from module.campaign.campaign_status import OCR_COIN
from module.base.timer import Timer
from module.config.utils import get_server_last_update
from module.exception import ScriptError
from module.logger import logger
from module.shipyard.ui import ShipyardUI
from module.ui.page import page_reshmenu, page_shipyard
from module.config.utils import get_server_last_update
from module.ui.page import page_main, page_shipyard
PRBP_BUY_PRIZE = {
(1, 2): 0,
@@ -188,8 +186,8 @@ class RewardShipyard(ShipyardUI):
# Gold difficult to Ocr in page_shipyard
# due to both text and number being
# right-aligned together
# Retrieve information from page_reshmenu instead
self.ui_ensure(page_reshmenu)
# Retrieve information from page_main instead
self.ui_ensure(page_main)
timeout = Timer(1, count=1).start()
skip_first_screenshot = True
while True:
@@ -197,14 +195,15 @@ class RewardShipyard(ShipyardUI):
skip_first_screenshot = False
else:
self.device.screenshot()
if self.appear(OCR_OIL_CHECK, offset=(5, 2)):
self._coin_count = self._shipyard_get_coin()
if self._coin_count > 0:
break
if timeout.reached():
logger.warning('Assumes that OCR_COIN is in the right place')
break
self._coin_count = OCR_COIN.ocr(self.device.image)
self.ui_goto(page_shipyard)
if not self.shipyard_set_focus(series=series, index=index) \
or not self._shipyard_buy_enter() \

View File

@@ -1,11 +1,13 @@
from module.base.decorator import cached_property
from module.base.timer import Timer
from module.base.utils import area_pad
from module.campaign.campaign_status import OCR_COIN
from module.handler.assets import LOGIN_ANNOUNCE
from module.logger import logger
from module.shipyard.ui_globals import *
from module.ui.assets import SHIPYARD_CHECK
from module.ui.navbar import Navbar
from module.ui.page import page_main_white
from module.ui.ui import UI
@@ -371,3 +373,13 @@ class ShipyardUI(UI):
self.wait_until_appear(SHIPYARD_IN_FATE, offset=(20, 20))
return True
def _shipyard_get_coin(self):
"""
Returns:
int: Coin amount
"""
if self.ui_page_appear(page_main_white):
return MAIN_OCR_COIN.ocr(self.device.image)
else:
return OCR_COIN.ocr(self.device.image)

View File

@@ -23,3 +23,5 @@ OCR_SHIPYARD_TOTAL_DEV = Digit(SHIPYARD_TOTAL_DEV, letter=(255, 247, 247),
OCR_SHIPYARD_TOTAL_FATE = Digit(SHIPYARD_TOTAL_FATE, letter=(255, 247, 247),
threshold=64)
MAIN_OCR_COIN = Digit(MAIN_OCR_COIN, letter=(255, 255, 255), threshold=128, name='MAIN_OCR_COIN')

View File

@@ -8,7 +8,7 @@ AMOUNT_MAX = Button(area={'cn': (772, 316, 822, 332), 'en': (772, 316, 822, 332)
AMOUNT_MINUS = Button(area={'cn': (546, 304, 586, 344), 'en': (546, 304, 586, 344), 'jp': (546, 304, 586, 344), 'tw': (546, 304, 586, 344)}, color={'cn': (76, 127, 195), 'en': (76, 127, 195), 'jp': (76, 127, 195), 'tw': (76, 127, 195)}, button={'cn': (546, 304, 586, 344), 'en': (546, 304, 586, 344), 'jp': (546, 304, 586, 344), 'tw': (546, 304, 586, 344)}, file={'cn': './assets/cn/shop/AMOUNT_MINUS.png', 'en': './assets/en/shop/AMOUNT_MINUS.png', 'jp': './assets/jp/shop/AMOUNT_MINUS.png', 'tw': './assets/tw/shop/AMOUNT_MINUS.png'})
AMOUNT_PLUS = Button(area={'cn': (693, 304, 735, 344), 'en': (693, 304, 735, 344), 'jp': (693, 304, 735, 344), 'tw': (693, 304, 735, 344)}, color={'cn': (81, 130, 196), 'en': (81, 130, 196), 'jp': (81, 130, 196), 'tw': (81, 130, 196)}, button={'cn': (693, 304, 735, 344), 'en': (693, 304, 735, 344), 'jp': (693, 304, 735, 344), 'tw': (693, 304, 735, 344)}, file={'cn': './assets/cn/shop/AMOUNT_PLUS.png', 'en': './assets/en/shop/AMOUNT_PLUS.png', 'jp': './assets/jp/shop/AMOUNT_PLUS.png', 'tw': './assets/tw/shop/AMOUNT_PLUS.png'})
MEDAL_SHOP_SCROLL_AREA = Button(area={'cn': (1260, 221, 1266, 643), 'en': (1260, 221, 1266, 643), 'jp': (1260, 221, 1266, 643), 'tw': (1260, 221, 1266, 643)}, color={'cn': (242, 205, 66), 'en': (242, 205, 66), 'jp': (242, 205, 66), 'tw': (242, 205, 66)}, button={'cn': (1260, 221, 1266, 643), 'en': (1260, 221, 1266, 643), 'jp': (1260, 221, 1266, 643), 'tw': (1260, 221, 1266, 643)}, file={'cn': './assets/cn/shop/MEDAL_SHOP_SCROLL_AREA.png', 'en': './assets/en/shop/MEDAL_SHOP_SCROLL_AREA.png', 'jp': './assets/jp/shop/MEDAL_SHOP_SCROLL_AREA.png', 'tw': './assets/tw/shop/MEDAL_SHOP_SCROLL_AREA.png'})
MEDAL_SHOP_SCROLL_AREA_250814 = Button(area={'cn': (996, 201, 997, 623), 'en': (996, 201, 997, 623), 'jp': (996, 201, 997, 623), 'tw': (996, 201, 997, 623)}, color={'cn': (148, 149, 158), 'en': (148, 149, 158), 'jp': (148, 149, 158), 'tw': (148, 149, 158)}, button={'cn': (996, 201, 997, 623), 'en': (996, 201, 997, 623), 'jp': (996, 201, 997, 623), 'tw': (996, 201, 997, 623)}, file={'cn': './assets/cn/shop/MEDAL_SHOP_SCROLL_AREA_250814.png', 'en': './assets/cn/shop/MEDAL_SHOP_SCROLL_AREA_250814.png', 'jp': './assets/cn/shop/MEDAL_SHOP_SCROLL_AREA_250814.png', 'tw': './assets/cn/shop/MEDAL_SHOP_SCROLL_AREA_250814.png'})
MEDAL_SHOP_SCROLL_AREA_250814 = Button(area={'cn': (996, 201, 997, 623), 'en': (996, 201, 997, 623), 'jp': (996, 201, 997, 623), 'tw': (996, 201, 997, 623)}, color={'cn': (148, 149, 158), 'en': (148, 149, 158), 'jp': (148, 149, 158), 'tw': (149, 150, 158)}, button={'cn': (996, 201, 997, 623), 'en': (996, 201, 997, 623), 'jp': (996, 201, 997, 623), 'tw': (996, 201, 997, 623)}, file={'cn': './assets/cn/shop/MEDAL_SHOP_SCROLL_AREA_250814.png', 'en': './assets/cn/shop/MEDAL_SHOP_SCROLL_AREA_250814.png', 'jp': './assets/cn/shop/MEDAL_SHOP_SCROLL_AREA_250814.png', 'tw': './assets/tw/shop/MEDAL_SHOP_SCROLL_AREA_250814.png'})
SELECT_MINUS = Button(area={'cn': (562, 201, 588, 227), 'en': (562, 201, 588, 227), 'jp': (562, 201, 588, 227), 'tw': (562, 201, 588, 227)}, color={'cn': (86, 70, 70), 'en': (86, 70, 70), 'jp': (86, 70, 70), 'tw': (86, 70, 70)}, button={'cn': (562, 201, 588, 227), 'en': (562, 201, 588, 227), 'jp': (562, 201, 588, 227), 'tw': (562, 201, 588, 227)}, file={'cn': './assets/cn/shop/SELECT_MINUS.png', 'en': './assets/en/shop/SELECT_MINUS.png', 'jp': './assets/jp/shop/SELECT_MINUS.png', 'tw': './assets/tw/shop/SELECT_MINUS.png'})
SELECT_PLUS = Button(area={'cn': (674, 201, 700, 227), 'en': (674, 201, 700, 227), 'jp': (674, 201, 700, 227), 'tw': (674, 201, 700, 227)}, color={'cn': (97, 70, 70), 'en': (97, 70, 70), 'jp': (97, 70, 70), 'tw': (97, 70, 70)}, button={'cn': (674, 201, 700, 227), 'en': (674, 201, 700, 227), 'jp': (674, 201, 700, 227), 'tw': (674, 201, 700, 227)}, file={'cn': './assets/cn/shop/SELECT_PLUS.png', 'en': './assets/en/shop/SELECT_PLUS.png', 'jp': './assets/jp/shop/SELECT_PLUS.png', 'tw': './assets/tw/shop/SELECT_PLUS.png'})
SHOP_AMOUNT = Button(area={'cn': (600, 310, 680, 340), 'en': (600, 310, 680, 340), 'jp': (600, 310, 680, 340), 'tw': (600, 310, 680, 340)}, color={'cn': (48, 52, 62), 'en': (48, 52, 62), 'jp': (48, 52, 62), 'tw': (48, 52, 62)}, button={'cn': (600, 310, 680, 340), 'en': (600, 310, 680, 340), 'jp': (600, 310, 680, 340), 'tw': (600, 310, 680, 340)}, file={'cn': './assets/cn/shop/SHOP_AMOUNT.png', 'en': './assets/en/shop/SHOP_AMOUNT.png', 'jp': './assets/jp/shop/SHOP_AMOUNT.png', 'tw': './assets/tw/shop/SHOP_AMOUNT.png'})
@@ -16,23 +16,19 @@ SHOP_BUY_CONFIRM = Button(area={'cn': (703, 483, 876, 540), 'en': (708, 487, 872
SHOP_BUY_CONFIRM_AMOUNT = Button(area={'cn': (756, 622, 827, 653), 'en': (724, 623, 856, 650), 'jp': (756, 623, 826, 653), 'tw': (756, 623, 827, 653)}, color={'cn': (137, 168, 209), 'en': (146, 174, 211), 'jp': (123, 158, 204), 'tw': (139, 170, 210)}, button={'cn': (756, 622, 827, 653), 'en': (724, 623, 856, 650), 'jp': (756, 623, 826, 653), 'tw': (756, 623, 827, 653)}, file={'cn': './assets/cn/shop/SHOP_BUY_CONFIRM_AMOUNT.png', 'en': './assets/en/shop/SHOP_BUY_CONFIRM_AMOUNT.png', 'jp': './assets/jp/shop/SHOP_BUY_CONFIRM_AMOUNT.png', 'tw': './assets/tw/shop/SHOP_BUY_CONFIRM_AMOUNT.png'})
SHOP_BUY_CONFIRM_MISTAKE = Button(area={'cn': (590, 300, 612, 318), 'en': (590, 300, 612, 318), 'jp': (590, 300, 612, 318), 'tw': (590, 300, 612, 318)}, color={'cn': (154, 79, 103), 'en': (154, 79, 103), 'jp': (154, 79, 103), 'tw': (154, 79, 103)}, button={'cn': (590, 300, 612, 318), 'en': (590, 300, 612, 318), 'jp': (590, 300, 612, 318), 'tw': (590, 300, 612, 318)}, file={'cn': './assets/cn/shop/SHOP_BUY_CONFIRM_MISTAKE.png', 'en': './assets/en/shop/SHOP_BUY_CONFIRM_MISTAKE.png', 'jp': './assets/jp/shop/SHOP_BUY_CONFIRM_MISTAKE.png', 'tw': './assets/tw/shop/SHOP_BUY_CONFIRM_MISTAKE.png'})
SHOP_BUY_CONFIRM_SELECT = Button(area={'cn': (604, 642, 676, 671), 'en': (567, 630, 712, 675), 'jp': (588, 638, 689, 669), 'tw': (558, 627, 725, 680)}, color={'cn': (236, 191, 130), 'en': (229, 171, 90), 'jp': (230, 170, 89), 'tw': (225, 155, 60)}, button={'cn': (604, 642, 676, 671), 'en': (567, 630, 712, 675), 'jp': (588, 638, 689, 669), 'tw': (558, 627, 725, 680)}, file={'cn': './assets/cn/shop/SHOP_BUY_CONFIRM_SELECT.png', 'en': './assets/en/shop/SHOP_BUY_CONFIRM_SELECT.png', 'jp': './assets/jp/shop/SHOP_BUY_CONFIRM_SELECT.png', 'tw': './assets/tw/shop/SHOP_BUY_CONFIRM_SELECT.png'})
SHOP_CLICK_SAFE_AREA = Button(area={'cn': (1051, 137, 1218, 179), 'en': (1051, 137, 1218, 179), 'jp': (1051, 137, 1218, 179), 'tw': (108, 108, 143, 233)}, color={'cn': (150, 181, 163), 'en': (150, 181, 163), 'jp': (150, 181, 163), 'tw': (50, 57, 76)}, button={'cn': (1051, 137, 1218, 179), 'en': (1051, 137, 1218, 179), 'jp': (1051, 137, 1218, 179), 'tw': (108, 108, 143, 233)}, file={'cn': './assets/cn/shop/SHOP_CLICK_SAFE_AREA.png', 'en': './assets/en/shop/SHOP_CLICK_SAFE_AREA.png', 'jp': './assets/jp/shop/SHOP_CLICK_SAFE_AREA.png', 'tw': './assets/tw/shop/SHOP_CLICK_SAFE_AREA.png'})
SHOP_CORE = Button(area={'cn': (1163, 174, 1261, 198), 'en': (1163, 174, 1261, 198), 'jp': (1163, 174, 1261, 198), 'tw': (1163, 174, 1261, 198)}, color={'cn': (88, 91, 101), 'en': (88, 91, 101), 'jp': (88, 91, 101), 'tw': (88, 91, 101)}, button={'cn': (1163, 174, 1261, 198), 'en': (1163, 174, 1261, 198), 'jp': (1163, 174, 1261, 198), 'tw': (1163, 174, 1261, 198)}, file={'cn': './assets/cn/shop/SHOP_CORE.png', 'en': './assets/en/shop/SHOP_CORE.png', 'jp': './assets/jp/shop/SHOP_CORE.png', 'tw': './assets/tw/shop/SHOP_CORE.png'})
SHOP_CLICK_SAFE_AREA = Button(area={'cn': (1051, 137, 1218, 179), 'en': (1051, 137, 1218, 179), 'jp': (1051, 137, 1218, 179), 'tw': (1051, 137, 1218, 179)}, color={'cn': (150, 181, 163), 'en': (150, 181, 163), 'jp': (150, 181, 163), 'tw': (150, 181, 163)}, button={'cn': (1051, 137, 1218, 179), 'en': (1051, 137, 1218, 179), 'jp': (1051, 137, 1218, 179), 'tw': (1051, 137, 1218, 179)}, file={'cn': './assets/cn/shop/SHOP_CLICK_SAFE_AREA.png', 'en': './assets/en/shop/SHOP_CLICK_SAFE_AREA.png', 'jp': './assets/jp/shop/SHOP_CLICK_SAFE_AREA.png', 'tw': './assets/tw/shop/SHOP_CLICK_SAFE_AREA.png'})
SHOP_CORE_SWIPE_END = Button(area={'cn': (1135, 659, 1216, 678), 'en': (1137, 658, 1182, 676), 'jp': (1093, 660, 1199, 679), 'tw': (1135, 659, 1216, 678)}, color={'cn': (126, 126, 128), 'en': (126, 126, 128), 'jp': (81, 81, 85), 'tw': (126, 126, 128)}, button={'cn': (1135, 659, 1216, 678), 'en': (1137, 658, 1182, 676), 'jp': (1093, 660, 1199, 679), 'tw': (1135, 659, 1216, 678)}, file={'cn': './assets/cn/shop/SHOP_CORE_SWIPE_END.png', 'en': './assets/en/shop/SHOP_CORE_SWIPE_END.png', 'jp': './assets/jp/shop/SHOP_CORE_SWIPE_END.png', 'tw': './assets/cn/shop/SHOP_CORE_SWIPE_END.png'})
SHOP_GEMS = Button(area={'cn': (1035, 23, 1133, 51), 'en': (1035, 23, 1133, 51), 'jp': (1035, 23, 1133, 51), 'tw': (1035, 23, 1133, 51)}, color={'cn': (55, 56, 53), 'en': (55, 56, 53), 'jp': (55, 56, 53), 'tw': (55, 56, 53)}, button={'cn': (1035, 23, 1133, 51), 'en': (1035, 23, 1133, 51), 'jp': (1035, 23, 1133, 51), 'tw': (1035, 23, 1133, 51)}, file={'cn': './assets/cn/shop/SHOP_GEMS.png', 'en': './assets/en/shop/SHOP_GEMS.png', 'jp': './assets/jp/shop/SHOP_GEMS.png', 'tw': './assets/tw/shop/SHOP_GEMS.png'})
SHOP_GIFT_SWIPE_END = Button(area={'cn': (414, 660, 494, 678), 'en': (466, 658, 568, 676), 'jp': (419, 661, 496, 678), 'tw': (414, 660, 494, 678)}, color={'cn': (138, 138, 140), 'en': (125, 126, 129), 'jp': (86, 88, 92), 'tw': (138, 138, 140)}, button={'cn': (414, 660, 494, 678), 'en': (466, 658, 568, 676), 'jp': (419, 661, 496, 678), 'tw': (414, 660, 494, 678)}, file={'cn': './assets/cn/shop/SHOP_GIFT_SWIPE_END.png', 'en': './assets/en/shop/SHOP_GIFT_SWIPE_END.png', 'jp': './assets/jp/shop/SHOP_GIFT_SWIPE_END.png', 'tw': './assets/cn/shop/SHOP_GIFT_SWIPE_END.png'})
SHOP_GOLD_COINS = Button(area={'cn': (815, 23, 922, 51), 'en': (815, 23, 922, 51), 'jp': (815, 23, 922, 51), 'tw': (815, 23, 922, 51)}, color={'cn': (61, 61, 73), 'en': (61, 61, 73), 'jp': (61, 61, 73), 'tw': (61, 61, 73)}, button={'cn': (815, 23, 922, 51), 'en': (815, 23, 922, 51), 'jp': (815, 23, 922, 51), 'tw': (815, 23, 922, 51)}, file={'cn': './assets/cn/shop/SHOP_GOLD_COINS.png', 'en': './assets/en/shop/SHOP_GOLD_COINS.png', 'jp': './assets/jp/shop/SHOP_GOLD_COINS.png', 'tw': './assets/tw/shop/SHOP_GOLD_COINS.png'})
SHOP_GUILD_COINS = Button(area={'cn': (882, 174, 970, 198), 'en': (882, 174, 970, 198), 'jp': (882, 174, 970, 198), 'tw': (882, 174, 970, 198)}, color={'cn': (92, 94, 104), 'en': (92, 94, 104), 'jp': (92, 94, 104), 'tw': (92, 94, 104)}, button={'cn': (882, 174, 970, 198), 'en': (882, 174, 970, 198), 'jp': (882, 174, 970, 198), 'tw': (882, 174, 970, 198)}, file={'cn': './assets/cn/shop/SHOP_GUILD_COINS.png', 'en': './assets/en/shop/SHOP_GUILD_COINS.png', 'jp': './assets/jp/shop/SHOP_GUILD_COINS.png', 'tw': './assets/tw/shop/SHOP_GUILD_COINS.png'})
SHOP_MEDAL = Button(area={'cn': (1163, 174, 1261, 198), 'en': (1163, 174, 1261, 198), 'jp': (1163, 174, 1261, 198), 'tw': (1163, 174, 1261, 198)}, color={'cn': (88, 91, 101), 'en': (88, 91, 101), 'jp': (88, 91, 101), 'tw': (88, 91, 101)}, button={'cn': (1163, 174, 1261, 198), 'en': (1163, 174, 1261, 198), 'jp': (1163, 174, 1261, 198), 'tw': (1163, 174, 1261, 198)}, file={'cn': './assets/cn/shop/SHOP_MEDAL.png', 'en': './assets/en/shop/SHOP_MEDAL.png', 'jp': './assets/jp/shop/SHOP_MEDAL.png', 'tw': './assets/tw/shop/SHOP_MEDAL.png'})
SHOP_MEDAL_SWIPE_END = Button(area={'cn': (415, 660, 494, 678), 'en': (371, 658, 434, 676), 'jp': (370, 671, 501, 701), 'tw': (412, 670, 497, 686)}, color={'cn': (137, 138, 140), 'en': (128, 130, 131), 'jp': (81, 84, 91), 'tw': (143, 144, 145)}, button={'cn': (415, 660, 494, 678), 'en': (371, 658, 434, 676), 'jp': (370, 671, 501, 701), 'tw': (412, 670, 497, 686)}, file={'cn': './assets/cn/shop/SHOP_MEDAL_SWIPE_END.png', 'en': './assets/en/shop/SHOP_MEDAL_SWIPE_END.png', 'jp': './assets/jp/shop/SHOP_MEDAL_SWIPE_END.png', 'tw': './assets/tw/shop/SHOP_MEDAL_SWIPE_END.png'})
SHOP_MERIT = Button(area={'cn': (876, 173, 971, 197), 'en': (876, 173, 971, 197), 'jp': (876, 173, 971, 197), 'tw': (876, 173, 971, 197)}, color={'cn': (99, 101, 111), 'en': (99, 101, 111), 'jp': (99, 101, 111), 'tw': (99, 101, 111)}, button={'cn': (876, 173, 971, 197), 'en': (876, 173, 971, 197), 'jp': (876, 173, 971, 197), 'tw': (876, 173, 971, 197)}, file={'cn': './assets/cn/shop/SHOP_MERIT.png', 'en': './assets/en/shop/SHOP_MERIT.png', 'jp': './assets/jp/shop/SHOP_MERIT.png', 'tw': './assets/tw/shop/SHOP_MERIT.png'})
SHOP_MERIT_SWIPE_END = Button(area={'cn': (1135, 660, 1215, 678), 'en': (1131, 658, 1193, 676), 'jp': (1101, 677, 1211, 700), 'tw': (1131, 676, 1217, 694)}, color={'cn': (138, 139, 140), 'en': (119, 119, 122), 'jp': (77, 78, 84), 'tw': (140, 140, 142)}, button={'cn': (1135, 660, 1215, 678), 'en': (1131, 658, 1193, 676), 'jp': (1101, 677, 1211, 700), 'tw': (1131, 676, 1217, 694)}, file={'cn': './assets/cn/shop/SHOP_MERIT_SWIPE_END.png', 'en': './assets/en/shop/SHOP_MERIT_SWIPE_END.png', 'jp': './assets/jp/shop/SHOP_MERIT_SWIPE_END.png', 'tw': './assets/tw/shop/SHOP_MERIT_SWIPE_END.png'})
SHOP_META_SWIPE_END = Button(area={'cn': (394, 661, 494, 677), 'en': (381, 658, 472, 676), 'jp': (377, 663, 477, 678), 'tw': (394, 661, 494, 677)}, color={'cn': (126, 127, 129), 'en': (127, 128, 130), 'jp': (106, 107, 109), 'tw': (126, 127, 129)}, button={'cn': (394, 661, 494, 677), 'en': (381, 658, 472, 676), 'jp': (377, 663, 477, 678), 'tw': (394, 661, 494, 677)}, file={'cn': './assets/cn/shop/SHOP_META_SWIPE_END.png', 'en': './assets/en/shop/SHOP_META_SWIPE_END.png', 'jp': './assets/jp/shop/SHOP_META_SWIPE_END.png', 'tw': './assets/cn/shop/SHOP_META_SWIPE_END.png'})
SHOP_OCR_BALANCE = Button(area={'cn': (903, 164, 983, 189), 'en': (903, 164, 983, 189), 'jp': (903, 164, 983, 189), 'tw': (903, 164, 983, 189)}, color={'cn': (210, 215, 220), 'en': (210, 215, 220), 'jp': (210, 215, 220), 'tw': (210, 215, 220)}, button={'cn': (903, 164, 983, 189), 'en': (903, 164, 983, 189), 'jp': (903, 164, 983, 189), 'tw': (903, 164, 983, 189)}, file={'cn': './assets/cn/shop/SHOP_OCR_BALANCE.png', 'en': './assets/cn/shop/SHOP_OCR_BALANCE.png', 'jp': './assets/cn/shop/SHOP_OCR_BALANCE.png', 'tw': './assets/cn/shop/SHOP_OCR_BALANCE.png'})
SHOP_OCR_OIL = Button(area={'cn': (700, 23, 785, 47), 'en': (863, 24, 955, 46), 'jp': (700, 23, 785, 47), 'tw': (700, 23, 785, 47)}, color={'cn': (150, 185, 194), 'en': (150, 183, 189), 'jp': (150, 185, 194), 'tw': (150, 185, 194)}, button={'cn': (700, 23, 785, 47), 'en': (863, 24, 955, 46), 'jp': (700, 23, 785, 47), 'tw': (700, 23, 785, 47)}, file={'cn': './assets/cn/shop/SHOP_OCR_OIL.png', 'en': './assets/en/shop/SHOP_OCR_OIL.png', 'jp': './assets/cn/shop/SHOP_OCR_OIL.png', 'tw': './assets/cn/shop/SHOP_OCR_OIL.png'})
SHOP_OCR_OIL_CHECK = Button(area={'cn': (666, 30, 682, 43), 'en': (834, 25, 854, 45), 'jp': (666, 30, 682, 43), 'tw': (666, 30, 682, 43)}, color={'cn': (73, 73, 73), 'en': (71, 75, 75), 'jp': (73, 73, 73), 'tw': (73, 73, 73)}, button={'cn': (666, 30, 682, 43), 'en': (834, 25, 854, 45), 'jp': (666, 30, 682, 43), 'tw': (666, 30, 682, 43)}, file={'cn': './assets/cn/shop/SHOP_OCR_OIL_CHECK.png', 'en': './assets/en/shop/SHOP_OCR_OIL_CHECK.png', 'jp': './assets/cn/shop/SHOP_OCR_OIL_CHECK.png', 'tw': './assets/cn/shop/SHOP_OCR_OIL_CHECK.png'})
SHOP_OCR_BALANCE = Button(area={'cn': (903, 164, 983, 189), 'en': (903, 164, 983, 189), 'jp': (903, 164, 983, 189), 'tw': (903, 164, 983, 189)}, color={'cn': (210, 215, 220), 'en': (210, 215, 220), 'jp': (210, 215, 220), 'tw': (199, 206, 211)}, button={'cn': (903, 164, 983, 189), 'en': (903, 164, 983, 189), 'jp': (903, 164, 983, 189), 'tw': (903, 164, 983, 189)}, file={'cn': './assets/cn/shop/SHOP_OCR_BALANCE.png', 'en': './assets/cn/shop/SHOP_OCR_BALANCE.png', 'jp': './assets/cn/shop/SHOP_OCR_BALANCE.png', 'tw': './assets/tw/shop/SHOP_OCR_BALANCE.png'})
SHOP_OCR_OIL = Button(area={'cn': (700, 23, 785, 47), 'en': (863, 24, 955, 46), 'jp': (700, 23, 785, 47), 'tw': (700, 23, 785, 47)}, color={'cn': (150, 185, 194), 'en': (150, 183, 189), 'jp': (150, 185, 194), 'tw': (150, 185, 194)}, button={'cn': (700, 23, 785, 47), 'en': (863, 24, 955, 46), 'jp': (700, 23, 785, 47), 'tw': (700, 23, 785, 47)}, file={'cn': './assets/cn/shop/SHOP_OCR_OIL.png', 'en': './assets/en/shop/SHOP_OCR_OIL.png', 'jp': './assets/cn/shop/SHOP_OCR_OIL.png', 'tw': './assets/tw/shop/SHOP_OCR_OIL.png'})
SHOP_OCR_OIL_CHECK = Button(area={'cn': (666, 30, 682, 43), 'en': (834, 25, 854, 45), 'jp': (666, 30, 682, 43), 'tw': (666, 30, 682, 43)}, color={'cn': (73, 73, 73), 'en': (71, 75, 75), 'jp': (73, 73, 73), 'tw': (73, 73, 73)}, button={'cn': (666, 30, 682, 43), 'en': (834, 25, 854, 45), 'jp': (666, 30, 682, 43), 'tw': (666, 30, 682, 43)}, file={'cn': './assets/cn/shop/SHOP_OCR_OIL_CHECK.png', 'en': './assets/en/shop/SHOP_OCR_OIL_CHECK.png', 'jp': './assets/cn/shop/SHOP_OCR_OIL_CHECK.png', 'tw': './assets/tw/shop/SHOP_OCR_OIL_CHECK.png'})
SHOP_PROTOTYPE_SWIPE_END = Button(area={'cn': (1135, 660, 1215, 678), 'en': (1101, 658, 1215, 676), 'jp': (1097, 660, 1199, 678), 'tw': (1135, 660, 1215, 678)}, color={'cn': (136, 137, 139), 'en': (111, 112, 115), 'jp': (86, 87, 91), 'tw': (136, 137, 139)}, button={'cn': (1135, 660, 1215, 678), 'en': (1101, 658, 1215, 676), 'jp': (1097, 660, 1199, 678), 'tw': (1135, 660, 1215, 678)}, file={'cn': './assets/cn/shop/SHOP_PROTOTYPE_SWIPE_END.png', 'en': './assets/en/shop/SHOP_PROTOTYPE_SWIPE_END.png', 'jp': './assets/jp/shop/SHOP_PROTOTYPE_SWIPE_END.png', 'tw': './assets/cn/shop/SHOP_PROTOTYPE_SWIPE_END.png'})
SHOP_REFRESH = Button(area={'cn': (950, 660, 1003, 684), 'en': (950, 660, 1003, 684), 'jp': (950, 660, 1003, 684), 'tw': (1161, 162, 1270, 206)}, color={'cn': (73, 164, 221), 'en': (73, 164, 221), 'jp': (73, 164, 221), 'tw': (179, 143, 88)}, button={'cn': (950, 660, 1003, 684), 'en': (950, 660, 1003, 684), 'jp': (950, 660, 1003, 684), 'tw': (1161, 162, 1270, 206)}, file={'cn': './assets/cn/shop/SHOP_REFRESH.png', 'en': './assets/en/shop/SHOP_REFRESH.png', 'jp': './assets/jp/shop/SHOP_REFRESH.png', 'tw': './assets/tw/shop/SHOP_REFRESH.png'})
SHOP_REFRESH = Button(area={'cn': (950, 660, 1003, 684), 'en': (950, 660, 1003, 684), 'jp': (950, 660, 1003, 684), 'tw': (950, 660, 1003, 684)}, color={'cn': (73, 164, 221), 'en': (73, 164, 221), 'jp': (73, 164, 221), 'tw': (73, 164, 221)}, button={'cn': (950, 660, 1003, 684), 'en': (950, 660, 1003, 684), 'jp': (950, 660, 1003, 684), 'tw': (950, 660, 1003, 684)}, file={'cn': './assets/cn/shop/SHOP_REFRESH.png', 'en': './assets/en/shop/SHOP_REFRESH.png', 'jp': './assets/jp/shop/SHOP_REFRESH.png', 'tw': './assets/tw/shop/SHOP_REFRESH.png'})
SHOP_SELECT_PR1 = Button(area={'cn': (182, 212, 308, 339), 'en': (182, 212, 308, 339), 'jp': (182, 212, 308, 339), 'tw': (182, 212, 308, 339)}, color={'cn': (157, 158, 143), 'en': (157, 158, 143), 'jp': (157, 158, 143), 'tw': (157, 158, 143)}, button={'cn': (182, 212, 308, 339), 'en': (182, 212, 308, 339), 'jp': (182, 212, 308, 339), 'tw': (182, 212, 308, 339)}, file={'cn': './assets/cn/shop/SHOP_SELECT_PR1.png', 'en': './assets/en/shop/SHOP_SELECT_PR1.png', 'jp': './assets/jp/shop/SHOP_SELECT_PR1.png', 'tw': './assets/tw/shop/SHOP_SELECT_PR1.png'})
SHOP_SELECT_PR2 = Button(area={'cn': (182, 212, 310, 340), 'en': (182, 212, 310, 340), 'jp': (182, 212, 310, 340), 'tw': (182, 212, 310, 340)}, color={'cn': (160, 159, 145), 'en': (160, 159, 145), 'jp': (160, 159, 145), 'tw': (160, 159, 145)}, button={'cn': (182, 212, 310, 340), 'en': (182, 212, 310, 340), 'jp': (182, 212, 310, 340), 'tw': (182, 212, 310, 340)}, file={'cn': './assets/cn/shop/SHOP_SELECT_PR2.png', 'en': './assets/en/shop/SHOP_SELECT_PR2.png', 'jp': './assets/jp/shop/SHOP_SELECT_PR2.png', 'tw': './assets/tw/shop/SHOP_SELECT_PR2.png'})
SHOP_SELECT_PR3 = Button(area={'cn': (180, 212, 309, 340), 'en': (180, 212, 309, 340), 'jp': (180, 212, 309, 340), 'tw': (180, 212, 309, 340)}, color={'cn': (156, 156, 142), 'en': (156, 156, 142), 'jp': (156, 156, 142), 'tw': (156, 156, 142)}, button={'cn': (180, 212, 309, 340), 'en': (180, 212, 309, 340), 'jp': (180, 212, 309, 340), 'tw': (180, 212, 309, 340)}, file={'cn': './assets/cn/shop/SHOP_SELECT_PR3.png', 'en': './assets/en/shop/SHOP_SELECT_PR3.png', 'jp': './assets/jp/shop/SHOP_SELECT_PR3.png', 'tw': './assets/tw/shop/SHOP_SELECT_PR3.png'})

View File

@@ -123,17 +123,6 @@ class ShopBase(UI):
"""
return ''
@cached_property
@Config.when(SERVER='tw')
def shop_grid(self):
"""
Returns:
ButtonGrid:
"""
shop_grid = ButtonGrid(
origin=(476, 246), delta=(156, 213), button_shape=(98, 98), grid_shape=(5, 2), name='SHOP_GRID')
return shop_grid
@cached_property
@Config.when(SERVER=None)
def shop_grid(self):

View File

@@ -7,9 +7,6 @@ from module.shop.clerk import ShopClerk
from module.shop.shop_status import ShopStatus
from module.shop.ui import ShopUI
OCR_SHOP_GOLD_COINS = Digit(SHOP_GOLD_COINS, letter=(239, 239, 239), name='OCR_SHOP_GOLD_COINS')
OCR_SHOP_GEMS = Digit(SHOP_GEMS, letter=(255, 243, 82), name='OCR_SHOP_GEMS')
class GeneralShop(ShopClerk, ShopUI, ShopStatus):
gems = 0

View File

@@ -8,11 +8,6 @@ from module.shop.ui import ShopUI
class RewardShop(ShopUI):
def run_frequent(self):
# Munitions shops
if self.config.SERVER in ['tw']:
self.config.task_delay(server_update=True)
self.config.task_stop()
self.ui_goto_shop()
self.device.click_record_clear()
self.shop_tab_250814.set(main=self, upper=1)
@@ -23,10 +18,6 @@ class RewardShop(ShopUI):
def run_once(self):
# Munitions shops
if self.config.SERVER in ['tw']:
self.config.task_delay(server_update=True)
self.config.task_stop()
self.ui_goto_shop()
self.device.click_record_clear()
self.shop_tab_250814.set(main=self, upper=1)

View File

@@ -14,18 +14,13 @@ if server.server == 'jp':
OCR_SHOP_MERIT = Digit(SHOP_OCR_BALANCE, letter=(110, 120, 130), name='OCR_SHOP_MERIT')
OCR_SHOP_GUILD_COINS = Digit(SHOP_OCR_BALANCE, letter=(110, 120, 130), name='OCR_SHOP_GUILD_COINS')
OCR_SHOP_CORE = Digit(SHOP_OCR_BALANCE, letter=(110, 120, 130), name='OCR_SHOP_CORE')
elif server.server != 'tw':
else:
OCR_SHOP_GOLD_COINS = Digit(SHOP_OCR_BALANCE, letter=(100, 100, 100), name='OCR_SHOP_GOLD_COINS')
OCR_SHOP_MEDAL = Digit(SHOP_OCR_BALANCE, letter=(100, 100, 100), name='OCR_SHOP_MEDAL')
OCR_SHOP_MERIT = Digit(SHOP_OCR_BALANCE, letter=(100, 100, 100), name='OCR_SHOP_MERIT')
OCR_SHOP_GUILD_COINS = Digit(SHOP_OCR_BALANCE, letter=(100, 100, 100), name='OCR_SHOP_GUILD_COINS')
OCR_SHOP_CORE = Digit(SHOP_OCR_BALANCE, letter=(100, 100, 100), name='OCR_SHOP_CORE')
else:
OCR_SHOP_GOLD_COINS = Digit(SHOP_GOLD_COINS, letter=(239, 239, 239), name='OCR_SHOP_GOLD_COINS')
OCR_SHOP_MEDAL = Digit(SHOP_MEDAL, letter=(239, 239, 239), name='OCR_SHOP_MEDAL')
OCR_SHOP_MERIT = Digit(SHOP_MERIT, letter=(239, 239, 239), name='OCR_SHOP_MERIT')
OCR_SHOP_GUILD_COINS = Digit(SHOP_GUILD_COINS, letter=(255, 255, 255), name='OCR_SHOP_GUILD_COINS')
OCR_SHOP_CORE = Digit(SHOP_CORE, letter=(239, 239, 239), name='OCR_SHOP_CORE')
OCR_SHOP_VOUCHER = Digit(SHOP_VOUCHER, letter=(255, 255, 255), name='OCR_SHOP_VOUCHER')
class ShopStatus(UI):

View File

@@ -50,55 +50,6 @@ class ShopUI(UI):
return True
return False
@cached_property
def shop_tab(self):
"""
Set with `self.shop_tab.set(main=self, left={index})`
- index
1: Monthly shops
2: General supply shops
"""
grids = ButtonGrid(
origin=(340, 93), delta=(189, 0),
button_shape=(188, 54), grid_shape=(2, 1),
name='SHOP_TAB')
return Navbar(
grids=grids,
# Yellow bottom dash
active_color=(255, 219, 83), active_threshold=221, active_count=100,
# Black bottom dash
inactive_color=(181, 178, 181), inactive_threshold=221, inactive_count=100,
)
@cached_property
def shop_nav(self):
"""
Set with `self.shop_nav.set(main=self, upper={index})`
- index when `shop_tab` is at 1
1: Core shop (limited items)
2: Core shop monthly
3: Medal shop
4: Prototype shop
- index when `shop_tab` is at 2
1: General shop
2: Merit shop
3: Guild shop
4: Meta shop
5: Gift shop
"""
grids = ButtonGrid(
origin=(339, 217), delta=(0, 65),
button_shape=(15, 64), grid_shape=(1, 5),
name='SHOP_NAV')
return Navbar(
grids=grids,
# White vertical line to the left of shop names
active_color=(255, 255, 255), active_threshold=221, active_count=100,
# Just whatever to make it match
inactive_color=(49, 56, 82), inactive_threshold=0, inactive_count=100,
)
@cached_property
@Config.when(SERVER='en')
def shop_tab_250814(self):
@@ -121,7 +72,8 @@ class ShopUI(UI):
inactive_color=(252, 252, 253), inactive_threshold=221, inactive_count=100,
)
@Config.when(SERVER='jp')
@cached_property
@Config.when(SERVER='None')
def shop_tab_250814(self):
"""
Set with `self.shop_tab.set(main=self, upper={index})`
@@ -142,27 +94,6 @@ class ShopUI(UI):
inactive_color=(38, 92, 121), inactive_threshold=221, inactive_count=100,
)
@cached_property
@Config.when(SERVER=None)
def shop_tab_250814(self):
"""
Set with `self.shop_tab.set(main=self, upper={index})`
- index
1: Monthly shops
2: General supply shops
"""
grids = ButtonGrid(
origin=(29, 424), delta=(0, 61),
button_shape=(74, 21), grid_shape=(1, 2),
name='SHOP_TAB')
return Navbar(
grids=grids,
# white bottom dash
active_color=(40, 150, 254), active_threshold=221, active_count=50,
# Black bottom dash
inactive_color=(75, 150, 200), inactive_threshold=0, inactive_count=100,
)
@cached_property
def shop_nav_250814(self):
"""

View File

@@ -66,7 +66,7 @@ MEOWFFICER_GOTO_DORMMENU = Button(area={'cn': (24, 7, 49, 45), 'en': (24, 7, 49,
MEOWFFICER_INFO = Button(area={'cn': (1090, 603, 1241, 650), 'en': (1106, 616, 1227, 638), 'jp': (1089, 608, 1240, 647), 'tw': (1124, 610, 1207, 647)}, color={'cn': (243, 214, 92), 'en': (212, 182, 77), 'jp': (247, 218, 92), 'tw': (229, 200, 87)}, button={'cn': (1090, 603, 1241, 650), 'en': (1106, 616, 1227, 638), 'jp': (1089, 608, 1240, 647), 'tw': (1124, 610, 1207, 647)}, file={'cn': './assets/cn/ui/MEOWFFICER_INFO.png', 'en': './assets/en/ui/MEOWFFICER_INFO.png', 'jp': './assets/jp/ui/MEOWFFICER_INFO.png', 'tw': './assets/tw/ui/MEOWFFICER_INFO.png'})
META_CHECK = Button(area={'cn': (120, 14, 209, 35), 'en': (148, 13, 265, 36), 'jp': (125, 11, 235, 39), 'tw': (120, 14, 209, 35)}, color={'cn': (159, 143, 144), 'en': (170, 156, 156), 'jp': (124, 105, 106), 'tw': (159, 143, 144)}, button={'cn': (120, 14, 209, 35), 'en': (148, 13, 265, 36), 'jp': (125, 11, 235, 39), 'tw': (120, 14, 209, 35)}, file={'cn': './assets/cn/ui/META_CHECK.png', 'en': './assets/en/ui/META_CHECK.png', 'jp': './assets/jp/ui/META_CHECK.png', 'tw': './assets/tw/ui/META_CHECK.png'})
MISSION_CHECK = Button(area={'cn': (120, 15, 173, 40), 'en': (123, 18, 221, 37), 'jp': (120, 14, 173, 40), 'tw': (119, 12, 176, 42)}, color={'cn': (141, 156, 194), 'en': (104, 117, 158), 'jp': (150, 165, 202), 'tw': (125, 139, 178)}, button={'cn': (120, 15, 173, 40), 'en': (123, 18, 221, 37), 'jp': (120, 14, 173, 40), 'tw': (119, 12, 176, 42)}, file={'cn': './assets/cn/ui/MISSION_CHECK.png', 'en': './assets/en/ui/MISSION_CHECK.png', 'jp': './assets/jp/ui/MISSION_CHECK.png', 'tw': './assets/tw/ui/MISSION_CHECK.png'})
MUNITIONS_CHECK = Button(area={'cn': (11, 369, 131, 397), 'en': (9, 369, 144, 404), 'jp': (10, 369, 131, 397), 'tw': (31, 619, 88, 649)}, color={'cn': (112, 204, 255), 'en': (96, 199, 255), 'jp': (102, 201, 255), 'tw': (127, 121, 121)}, button={'cn': (11, 369, 131, 397), 'en': (9, 369, 144, 404), 'jp': (10, 369, 131, 397), 'tw': (31, 619, 88, 649)}, file={'cn': './assets/cn/ui/MUNITIONS_CHECK.png', 'en': './assets/en/ui/MUNITIONS_CHECK.png', 'jp': './assets/jp/ui/MUNITIONS_CHECK.png', 'tw': './assets/tw/ui/MUNITIONS_CHECK.png'})
MUNITIONS_CHECK = Button(area={'cn': (11, 369, 131, 397), 'en': (9, 369, 144, 404), 'jp': (10, 369, 131, 397), 'tw': (11, 374, 131, 402)}, color={'cn': (112, 204, 255), 'en': (96, 199, 255), 'jp': (102, 201, 255), 'tw': (101, 200, 255)}, button={'cn': (11, 369, 131, 397), 'en': (9, 369, 144, 404), 'jp': (10, 369, 131, 397), 'tw': (11, 374, 131, 402)}, file={'cn': './assets/cn/ui/MUNITIONS_CHECK.png', 'en': './assets/en/ui/MUNITIONS_CHECK.png', 'jp': './assets/jp/ui/MUNITIONS_CHECK.png', 'tw': './assets/tw/ui/MUNITIONS_CHECK.png'})
OS_CHECK = Button(area={'cn': (613, 17, 627, 34), 'en': (613, 17, 627, 34), 'jp': (613, 17, 627, 34), 'tw': (613, 17, 627, 34)}, color={'cn': (58, 117, 146), 'en': (58, 117, 146), 'jp': (58, 117, 146), 'tw': (58, 117, 146)}, button={'cn': (613, 17, 627, 34), 'en': (613, 17, 627, 34), 'jp': (613, 17, 627, 34), 'tw': (613, 17, 627, 34)}, file={'cn': './assets/cn/ui/OS_CHECK.png', 'en': './assets/en/ui/OS_CHECK.png', 'jp': './assets/jp/ui/OS_CHECK.png', 'tw': './assets/tw/ui/OS_CHECK.png'})
PLAYER_CHECK = Button(area={'cn': (28, 668, 139, 688), 'en': (11, 649, 157, 705), 'jp': (26, 668, 139, 689), 'tw': (28, 668, 139, 688)}, color={'cn': (237, 204, 127), 'en': (197, 156, 97), 'jp': (237, 205, 128), 'tw': (237, 204, 127)}, button={'cn': (28, 668, 139, 688), 'en': (11, 649, 157, 705), 'jp': (26, 668, 139, 689), 'tw': (28, 668, 139, 688)}, file={'cn': './assets/cn/ui/PLAYER_CHECK.png', 'en': './assets/en/ui/PLAYER_CHECK.png', 'jp': './assets/jp/ui/PLAYER_CHECK.png', 'tw': './assets/tw/ui/PLAYER_CHECK.png'})
PQ_GOTO_MAIN = Button(area={'cn': (1107, 19, 1143, 51), 'en': (1107, 19, 1143, 51), 'jp': (1107, 19, 1143, 51), 'tw': (1107, 19, 1143, 51)}, color={'cn': (199, 199, 199), 'en': (199, 199, 199), 'jp': (199, 199, 199), 'tw': (199, 199, 199)}, button={'cn': (1107, 19, 1143, 51), 'en': (1107, 19, 1143, 51), 'jp': (1107, 19, 1143, 51), 'tw': (1107, 19, 1143, 51)}, file={'cn': './assets/cn/ui/PQ_GOTO_MAIN.png', 'en': './assets/en/ui/PQ_GOTO_MAIN.png', 'jp': './assets/jp/ui/PQ_GOTO_MAIN.png', 'tw': './assets/tw/ui/PQ_GOTO_MAIN.png'})
@@ -83,13 +83,13 @@ REWARD_GOTO_COMMISSION = Button(area={'cn': (418, 271, 468, 293), 'en': (407, 27
REWARD_GOTO_MAIN = Button(area={'cn': (219, 107, 267, 158), 'en': (219, 107, 267, 158), 'jp': (219, 107, 267, 158), 'tw': (219, 107, 267, 158)}, color={'cn': (143, 116, 123), 'en': (143, 116, 123), 'jp': (143, 116, 123), 'tw': (143, 116, 123)}, button={'cn': (787, 602, 867, 642), 'en': (787, 602, 867, 642), 'jp': (787, 602, 867, 642), 'tw': (787, 602, 867, 642)}, file={'cn': './assets/cn/ui/REWARD_GOTO_MAIN.png', 'en': './assets/en/ui/REWARD_GOTO_MAIN.png', 'jp': './assets/jp/ui/REWARD_GOTO_MAIN.png', 'tw': './assets/tw/ui/REWARD_GOTO_MAIN.png'})
REWARD_GOTO_TACTICAL = Button(area={'cn': (418, 413, 468, 434), 'en': (407, 416, 499, 433), 'jp': (431, 416, 476, 437), 'tw': (418, 413, 468, 435)}, color={'cn': (143, 176, 216), 'en': (157, 185, 219), 'jp': (151, 182, 217), 'tw': (141, 175, 215)}, button={'cn': (383, 404, 503, 444), 'en': (393, 404, 514, 445), 'jp': (393, 404, 514, 445), 'tw': (383, 404, 503, 444)}, file={'cn': './assets/cn/ui/REWARD_GOTO_TACTICAL.png', 'en': './assets/en/ui/REWARD_GOTO_TACTICAL.png', 'jp': './assets/jp/ui/REWARD_GOTO_TACTICAL.png', 'tw': './assets/tw/ui/REWARD_GOTO_TACTICAL.png'})
SHIPYARD_CHECK = Button(area={'cn': (9, 131, 82, 148), 'en': (4, 126, 52, 141), 'jp': (8, 130, 82, 148), 'tw': (7, 130, 83, 150)}, color={'cn': (159, 180, 229), 'en': (133, 148, 171), 'jp': (152, 169, 202), 'tw': (142, 164, 219)}, button={'cn': (9, 131, 82, 148), 'en': (4, 126, 52, 141), 'jp': (8, 130, 82, 148), 'tw': (7, 130, 83, 150)}, file={'cn': './assets/cn/ui/SHIPYARD_CHECK.png', 'en': './assets/en/ui/SHIPYARD_CHECK.png', 'jp': './assets/jp/ui/SHIPYARD_CHECK.png', 'tw': './assets/tw/ui/SHIPYARD_CHECK.png'})
SHOP_BACK_ARROW = Button(area={'cn': (43, 35, 57, 56), 'en': (43, 35, 57, 56), 'jp': (43, 35, 57, 56), 'tw': (33, 44, 47, 64)}, color={'cn': (191, 191, 191), 'en': (191, 191, 191), 'jp': (191, 191, 191), 'tw': (112, 118, 152)}, button={'cn': (43, 35, 57, 56), 'en': (43, 35, 57, 56), 'jp': (43, 35, 57, 56), 'tw': (33, 44, 47, 64)}, file={'cn': './assets/cn/ui/SHOP_BACK_ARROW.png', 'en': './assets/cn/ui/SHOP_BACK_ARROW.png', 'jp': './assets/jp/ui/SHOP_BACK_ARROW.png', 'tw': './assets/tw/ui/SHOP_BACK_ARROW.png'})
SHOP_CHECK = Button(area={'cn': (149, 23, 192, 44), 'en': (143, 25, 199, 41), 'jp': (127, 22, 217, 42), 'tw': (92, 504, 133, 545)}, color={'cn': (107, 114, 125), 'en': (150, 155, 163), 'jp': (64, 72, 87), 'tw': (184, 199, 221)}, button={'cn': (149, 23, 192, 44), 'en': (143, 25, 199, 41), 'jp': (127, 22, 217, 42), 'tw': (92, 504, 133, 545)}, file={'cn': './assets/cn/ui/SHOP_CHECK.png', 'en': './assets/en/ui/SHOP_CHECK.png', 'jp': './assets/jp/ui/SHOP_CHECK.png', 'tw': './assets/tw/ui/SHOP_CHECK.png'})
SHOP_BACK_ARROW = Button(area={'cn': (43, 35, 57, 56), 'en': (43, 35, 57, 56), 'jp': (43, 35, 57, 56), 'tw': (43, 35, 57, 56)}, color={'cn': (191, 191, 191), 'en': (191, 191, 191), 'jp': (191, 191, 191), 'tw': (191, 191, 191)}, button={'cn': (43, 35, 57, 56), 'en': (43, 35, 57, 56), 'jp': (43, 35, 57, 56), 'tw': (43, 35, 57, 56)}, file={'cn': './assets/cn/ui/SHOP_BACK_ARROW.png', 'en': './assets/cn/ui/SHOP_BACK_ARROW.png', 'jp': './assets/jp/ui/SHOP_BACK_ARROW.png', 'tw': './assets/tw/ui/SHOP_BACK_ARROW.png'})
SHOP_CHECK = Button(area={'cn': (149, 23, 192, 44), 'en': (143, 25, 199, 41), 'jp': (127, 22, 217, 42), 'tw': (149, 23, 192, 44)}, color={'cn': (107, 114, 125), 'en': (150, 155, 163), 'jp': (64, 72, 87), 'tw': (107, 114, 125)}, button={'cn': (149, 23, 192, 44), 'en': (143, 25, 199, 41), 'jp': (127, 22, 217, 42), 'tw': (149, 23, 192, 44)}, file={'cn': './assets/cn/ui/SHOP_CHECK.png', 'en': './assets/en/ui/SHOP_CHECK.png', 'jp': './assets/jp/ui/SHOP_CHECK.png', 'tw': './assets/tw/ui/SHOP_CHECK.png'})
SHOP_GOTO_MUNITIONS = Button(area={'cn': (840, 560, 999, 600), 'en': (840, 560, 999, 600), 'jp': (836, 570, 964, 613), 'tw': (840, 560, 999, 600)}, color={'cn': (122, 87, 75), 'en': (122, 87, 75), 'jp': (118, 88, 83), 'tw': (122, 87, 75)}, button={'cn': (840, 560, 999, 600), 'en': (840, 560, 999, 600), 'jp': (836, 570, 964, 613), 'tw': (840, 560, 999, 600)}, file={'cn': './assets/cn/ui/SHOP_GOTO_MUNITIONS.png', 'en': './assets/en/ui/SHOP_GOTO_MUNITIONS.png', 'jp': './assets/jp/ui/SHOP_GOTO_MUNITIONS.png', 'tw': './assets/tw/ui/SHOP_GOTO_MUNITIONS.png'})
SHOP_GOTO_SUPPLY_PACK = Button(area={'cn': (1044, 321, 1094, 366), 'en': (1044, 321, 1094, 366), 'jp': (1044, 321, 1094, 366), 'tw': (883, 537, 929, 579)}, color={'cn': (198, 155, 150), 'en': (198, 155, 150), 'jp': (198, 155, 150), 'tw': (197, 131, 140)}, button={'cn': (902, 105, 1211, 490), 'en': (902, 105, 1211, 490), 'jp': (902, 105, 1211, 490), 'tw': (810, 353, 987, 638)}, file={'cn': './assets/cn/ui/SHOP_GOTO_SUPPLY_PACK.png', 'en': './assets/en/ui/SHOP_GOTO_SUPPLY_PACK.png', 'jp': './assets/jp/ui/SHOP_GOTO_SUPPLY_PACK.png', 'tw': './assets/tw/ui/SHOP_GOTO_SUPPLY_PACK.png'})
SP_CHECK = Button(area={'cn': (123, 63, 206, 109), 'en': (123, 63, 206, 109), 'jp': (125, 66, 205, 107), 'tw': (123, 63, 206, 109)}, color={'cn': (95, 110, 145), 'en': (95, 110, 145), 'jp': (78, 92, 127), 'tw': (95, 110, 145)}, button={'cn': (123, 63, 206, 109), 'en': (123, 63, 206, 109), 'jp': (125, 66, 205, 107), 'tw': (123, 63, 206, 109)}, file={'cn': './assets/cn/ui/SP_CHECK.png', 'en': './assets/en/ui/SP_CHECK.png', 'jp': './assets/jp/ui/SP_CHECK.png', 'tw': './assets/tw/ui/SP_CHECK.png'})
STORAGE_CHECK = Button(area={'cn': (120, 14, 175, 40), 'en': (123, 14, 209, 36), 'jp': (121, 13, 176, 41), 'tw': (120, 14, 175, 40)}, color={'cn': (137, 151, 188), 'en': (119, 133, 174), 'jp': (137, 156, 196), 'tw': (137, 151, 188)}, button={'cn': (120, 14, 175, 40), 'en': (123, 14, 209, 36), 'jp': (121, 13, 176, 41), 'tw': (120, 14, 175, 40)}, file={'cn': './assets/cn/ui/STORAGE_CHECK.png', 'en': './assets/en/ui/STORAGE_CHECK.png', 'jp': './assets/jp/ui/STORAGE_CHECK.png', 'tw': './assets/cn/ui/STORAGE_CHECK.png'})
SUPPLY_PACK_CHECK = Button(area={'cn': (31, 225, 103, 281), 'en': (31, 234, 103, 280), 'jp': (31, 225, 106, 282), 'tw': (121, 14, 230, 40)}, color={'cn': (89, 194, 255), 'en': (84, 191, 254), 'jp': (71, 186, 253), 'tw': (152, 168, 206)}, button={'cn': (31, 225, 103, 281), 'en': (31, 234, 103, 280), 'jp': (31, 225, 106, 282), 'tw': (121, 14, 230, 40)}, file={'cn': './assets/cn/ui/SUPPLY_PACK_CHECK.png', 'en': './assets/en/ui/SUPPLY_PACK_CHECK.png', 'jp': './assets/jp/ui/SUPPLY_PACK_CHECK.png', 'tw': './assets/tw/ui/SUPPLY_PACK_CHECK.png'})
SUPPLY_PACK_CHECK = Button(area={'cn': (31, 225, 103, 281), 'en': (31, 234, 103, 280), 'jp': (31, 225, 106, 282), 'tw': (31, 229, 103, 285)}, color={'cn': (89, 194, 255), 'en': (84, 191, 254), 'jp': (71, 186, 253), 'tw': (80, 190, 255)}, button={'cn': (31, 225, 103, 281), 'en': (31, 234, 103, 280), 'jp': (31, 225, 106, 282), 'tw': (31, 229, 103, 285)}, file={'cn': './assets/cn/ui/SUPPLY_PACK_CHECK.png', 'en': './assets/en/ui/SUPPLY_PACK_CHECK.png', 'jp': './assets/jp/ui/SUPPLY_PACK_CHECK.png', 'tw': './assets/tw/ui/SUPPLY_PACK_CHECK.png'})
TACTICAL_CHECK = Button(area={'cn': (122, 14, 231, 38), 'en': (119, 17, 302, 36), 'jp': (122, 12, 232, 37), 'tw': (122, 15, 230, 39)}, color={'cn': (145, 161, 200), 'en': (110, 124, 164), 'jp': (155, 171, 209), 'tw': (158, 174, 212)}, button={'cn': (122, 14, 231, 38), 'en': (119, 17, 302, 36), 'jp': (122, 12, 232, 37), 'tw': (122, 15, 230, 39)}, file={'cn': './assets/cn/ui/TACTICAL_CHECK.png', 'en': './assets/en/ui/TACTICAL_CHECK.png', 'jp': './assets/jp/ui/TACTICAL_CHECK.png', 'tw': './assets/tw/ui/TACTICAL_CHECK.png'})
WAR_ARCHIVES_CHECK = Button(area={'cn': (95, 41, 114, 70), 'en': (95, 41, 114, 70), 'jp': (95, 41, 114, 70), 'tw': (95, 41, 114, 70)}, color={'cn': (137, 177, 208), 'en': (137, 177, 208), 'jp': (137, 177, 208), 'tw': (137, 177, 208)}, button={'cn': (95, 41, 114, 70), 'en': (95, 41, 114, 70), 'jp': (95, 41, 114, 70), 'tw': (95, 41, 114, 70)}, file={'cn': './assets/cn/ui/WAR_ARCHIVES_CHECK.png', 'en': './assets/en/ui/WAR_ARCHIVES_CHECK.png', 'jp': './assets/jp/ui/WAR_ARCHIVES_CHECK.png', 'tw': './assets/tw/ui/WAR_ARCHIVES_CHECK.png'})
WAR_ARCHIVES_GOTO_CAMPAIGN_MENU = Button(area={'cn': (95, 41, 114, 70), 'en': (95, 41, 114, 70), 'jp': (95, 41, 114, 70), 'tw': (95, 41, 114, 70)}, color={'cn': (137, 177, 208), 'en': (137, 177, 208), 'jp': (137, 177, 208), 'tw': (137, 177, 208)}, button={'cn': (14, 312, 69, 467), 'en': (14, 312, 69, 467), 'jp': (14, 312, 69, 467), 'tw': (14, 312, 69, 467)}, file={'cn': './assets/cn/ui/WAR_ARCHIVES_GOTO_CAMPAIGN_MENU.png', 'en': './assets/en/ui/WAR_ARCHIVES_GOTO_CAMPAIGN_MENU.png', 'jp': './assets/jp/ui/WAR_ARCHIVES_GOTO_CAMPAIGN_MENU.png', 'tw': './assets/tw/ui/WAR_ARCHIVES_GOTO_CAMPAIGN_MENU.png'})