Upd(Coalition):添加连战活动的舰队推荐和刷PT功能

This commit is contained in:
W1NDes 2025-06-27 02:27:20 +08:00
parent 474bdc3681
commit 37ba6f9965
15 changed files with 103 additions and 47 deletions

3
UPDATE.bat Normal file
View File

@ -0,0 +1,3 @@
git fetch --all
git merge upstream/master
pause

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

After

Width:  |  Height:  |  Size: 8.6 KiB

View File

@ -477,6 +477,13 @@
"GetNewShip": false,
"ReachLevel": 0
},
"EventPt": {
"EventPtSwitch": false,
"Event2MapName": "HT6",
"EventDailyAMapName": "T1>T2>T3>T4>T5>T6",
"EventDailySpMapName": "sp",
"EventDailyCD": "HT1>HT2>HT3>HT4>HT5>HT6"
},
"Emotion": {
"Mode": "calculate",
"Fleet1Value": 119,
@ -921,7 +928,7 @@
"Coalition": {
"UseRecommendFleet": true,
"Mode": "sp",
"Fleet": "single"
"Fleet": "multi"
},
"StopCondition": {
"OilLimit": 1000,

View File

@ -1,6 +1,6 @@
import os
import sys
sys.path.append(r'C:/Users/W1NDes/Documents/GitHub/M-AzurLaneAutoScript')
sys.path.append(r'C:/Users/W1NDe/Documents/GitHub/M-AzurLaneAutoScript')
import imageio
import numpy as np
from tqdm.contrib.concurrent import process_map

View File

@ -38,10 +38,6 @@ FROSTFALL_SWITCH_SINGLE = Button(area={'cn': (968, 449, 1098, 478), 'en': (968,
FROSTFALL_TC1 = Button(area={'cn': (304, 320, 330, 332), 'en': (304, 320, 330, 332), 'jp': (304, 320, 330, 332), 'tw': (304, 320, 330, 332)}, color={'cn': (204, 162, 254), 'en': (204, 162, 254), 'jp': (204, 162, 254), 'tw': (188, 137, 254)}, button={'cn': (304, 320, 330, 332), 'en': (304, 320, 330, 332), 'jp': (304, 320, 330, 332), 'tw': (304, 320, 330, 332)}, file={'cn': './assets/cn/coalition/FROSTFALL_TC1.png', 'en': './assets/en/coalition/FROSTFALL_TC1.png', 'jp': './assets/jp/coalition/FROSTFALL_TC1.png', 'tw': './assets/tw/coalition/FROSTFALL_TC1.png'})
FROSTFALL_TC2 = Button(area={'cn': (631, 160, 658, 173), 'en': (631, 160, 658, 173), 'jp': (631, 160, 658, 173), 'tw': (631, 160, 658, 173)}, color={'cn': (186, 136, 252), 'en': (186, 136, 252), 'jp': (186, 136, 252), 'tw': (186, 136, 252)}, button={'cn': (631, 160, 658, 173), 'en': (631, 160, 658, 173), 'jp': (631, 160, 658, 173), 'tw': (631, 160, 658, 173)}, file={'cn': './assets/cn/coalition/FROSTFALL_TC2.png', 'en': './assets/en/coalition/FROSTFALL_TC2.png', 'jp': './assets/jp/coalition/FROSTFALL_TC2.png', 'tw': './assets/tw/coalition/FROSTFALL_TC2.png'})
FROSTFALL_TC3 = Button(area={'cn': (810, 362, 835, 373), 'en': (810, 362, 835, 373), 'jp': (810, 362, 835, 373), 'tw': (810, 362, 835, 373)}, color={'cn': (197, 153, 255), 'en': (197, 153, 255), 'jp': (197, 153, 255), 'tw': (197, 153, 255)}, button={'cn': (810, 362, 835, 373), 'en': (810, 362, 835, 373), 'jp': (810, 362, 835, 373), 'tw': (810, 362, 835, 373)}, file={'cn': './assets/cn/coalition/FROSTFALL_TC3.png', 'en': './assets/en/coalition/FROSTFALL_TC3.png', 'jp': './assets/jp/coalition/FROSTFALL_TC3.png', 'tw': './assets/tw/coalition/FROSTFALL_TC3.png'})
SIDEBAR_TEAM_1 = Button(area={'cn': (90, 124, 152, 153), 'en': (90, 124, 152, 153), 'jp': (90, 124, 152, 153), 'tw': (90, 124, 152, 153)}, color={'cn': (50, 59, 67), 'en': (50, 59, 67), 'jp': (50, 59, 67), 'tw': (50, 59, 67)}, button={'cn': (90, 124, 152, 153), 'en': (90, 124, 152, 153), 'jp': (90, 124, 152, 153), 'tw': (90, 124, 152, 153)}, file={'cn': './assets/cn/coalition/SIDEBAR_TEAM_1.png', 'en': './assets/cn/coalition/SIDEBAR_TEAM_1.png', 'jp': './assets/cn/coalition/SIDEBAR_TEAM_1.png', 'tw': './assets/cn/coalition/SIDEBAR_TEAM_1.png'})
SIDEBAR_TEAM_2 = Button(area={'cn': (199, 126, 266, 155), 'en': (199, 126, 266, 155), 'jp': (199, 126, 266, 155), 'tw': (199, 126, 266, 155)}, color={'cn': (26, 34, 41), 'en': (26, 34, 41), 'jp': (26, 34, 41), 'tw': (26, 34, 41)}, button={'cn': (199, 126, 266, 155), 'en': (199, 126, 266, 155), 'jp': (199, 126, 266, 155), 'tw': (199, 126, 266, 155)}, file={'cn': './assets/cn/coalition/SIDEBAR_TEAM_2.png', 'en': './assets/cn/coalition/SIDEBAR_TEAM_2.png', 'jp': './assets/cn/coalition/SIDEBAR_TEAM_2.png', 'tw': './assets/cn/coalition/SIDEBAR_TEAM_2.png'})
SIDEBAR_TEAM_3 = Button(area={'cn': (310, 126, 378, 154), 'en': (310, 126, 378, 154), 'jp': (310, 126, 378, 154), 'tw': (310, 126, 378, 154)}, color={'cn': (29, 37, 44), 'en': (29, 37, 44), 'jp': (29, 37, 44), 'tw': (29, 37, 44)}, button={'cn': (310, 126, 378, 154), 'en': (310, 126, 378, 154), 'jp': (310, 126, 378, 154), 'tw': (310, 126, 378, 154)}, file={'cn': './assets/cn/coalition/SIDEBAR_TEAM_3.png', 'en': './assets/cn/coalition/SIDEBAR_TEAM_3.png', 'jp': './assets/cn/coalition/SIDEBAR_TEAM_3.png', 'tw': './assets/cn/coalition/SIDEBAR_TEAM_3.png'})
SIDEBAR_TEAM_4 = Button(area={'cn': (423, 126, 489, 155), 'en': (423, 126, 489, 155), 'jp': (423, 126, 489, 155), 'tw': (423, 126, 489, 155)}, color={'cn': (29, 36, 43), 'en': (29, 36, 43), 'jp': (29, 36, 43), 'tw': (29, 36, 43)}, button={'cn': (423, 126, 489, 155), 'en': (423, 126, 489, 155), 'jp': (423, 126, 489, 155), 'tw': (423, 126, 489, 155)}, file={'cn': './assets/cn/coalition/SIDEBAR_TEAM_4.png', 'en': './assets/cn/coalition/SIDEBAR_TEAM_4.png', 'jp': './assets/cn/coalition/SIDEBAR_TEAM_4.png', 'tw': './assets/cn/coalition/SIDEBAR_TEAM_4.png'})
NEONCITY_COALITION_CHECK = Button(area={'cn': (230, 36, 276, 82), 'en': (230, 36, 276, 82), 'jp': (230, 36, 276, 82), 'tw': (230, 36, 276, 82)}, color={'cn': (136, 139, 142), 'en': (136, 139, 142), 'jp': (136, 139, 142), 'tw': (136, 139, 142)}, button={'cn': (230, 36, 276, 82), 'en': (230, 36, 276, 82), 'jp': (230, 36, 276, 82), 'tw': (230, 36, 276, 82)}, file={'cn': './assets/cn/coalition/NEONCITY_COALITION_CHECK.png', 'en': './assets/cn/coalition/NEONCITY_COALITION_CHECK.png', 'jp': './assets/cn/coalition/NEONCITY_COALITION_CHECK.png', 'tw': './assets/cn/coalition/NEONCITY_COALITION_CHECK.png'})
NEONCITY_EASY = Button(area={'cn': (255, 252, 308, 270), 'en': (255, 252, 308, 270), 'jp': (255, 252, 308, 270), 'tw': (255, 252, 308, 270)}, color={'cn': (131, 132, 135), 'en': (131, 132, 135), 'jp': (131, 132, 135), 'tw': (131, 132, 135)}, button={'cn': (255, 252, 308, 270), 'en': (255, 252, 308, 270), 'jp': (255, 252, 308, 270), 'tw': (255, 252, 308, 270)}, file={'cn': './assets/cn/coalition/NEONCITY_EASY.png', 'en': './assets/cn/coalition/NEONCITY_EASY.png', 'jp': './assets/cn/coalition/NEONCITY_EASY.png', 'tw': './assets/cn/coalition/NEONCITY_EASY.png'})
NEONCITY_EX = Button(area={'cn': (655, 353, 708, 370), 'en': (655, 353, 708, 370), 'jp': (655, 353, 708, 370), 'tw': (655, 353, 708, 370)}, color={'cn': (151, 150, 151), 'en': (151, 150, 151), 'jp': (151, 150, 151), 'tw': (151, 150, 151)}, button={'cn': (655, 353, 708, 370), 'en': (655, 353, 708, 370), 'jp': (655, 353, 708, 370), 'tw': (655, 353, 708, 370)}, file={'cn': './assets/cn/coalition/NEONCITY_EX.png', 'en': './assets/cn/coalition/NEONCITY_EX.png', 'jp': './assets/cn/coalition/NEONCITY_EX.png', 'tw': './assets/cn/coalition/NEONCITY_EX.png'})
@ -54,3 +50,7 @@ NEONCITY_PT_OCR = Button(area={'cn': (1179, 166, 1251, 184), 'en': (1179, 166, 1
NEONCITY_SP = Button(area={'cn': (821, 168, 874, 186), 'en': (821, 168, 874, 186), 'jp': (821, 168, 874, 186), 'tw': (821, 168, 874, 186)}, color={'cn': (144, 143, 143), 'en': (144, 143, 143), 'jp': (144, 143, 143), 'tw': (144, 143, 143)}, button={'cn': (821, 168, 874, 186), 'en': (821, 168, 874, 186), 'jp': (821, 168, 874, 186), 'tw': (821, 168, 874, 186)}, file={'cn': './assets/cn/coalition/NEONCITY_SP.png', 'en': './assets/cn/coalition/NEONCITY_SP.png', 'jp': './assets/cn/coalition/NEONCITY_SP.png', 'tw': './assets/cn/coalition/NEONCITY_SP.png'})
NEONCITY_SWITCH_MULTI = Button(area={'cn': (1087, 458, 1217, 486), 'en': (1087, 458, 1217, 486), 'jp': (1087, 458, 1217, 486), 'tw': (1087, 458, 1217, 486)}, color={'cn': (233, 183, 63), 'en': (233, 183, 63), 'jp': (233, 183, 63), 'tw': (233, 183, 63)}, button={'cn': (1087, 458, 1217, 486), 'en': (1087, 458, 1217, 486), 'jp': (1087, 458, 1217, 486), 'tw': (1087, 458, 1217, 486)}, file={'cn': './assets/cn/coalition/NEONCITY_SWITCH_MULTI.png', 'en': './assets/cn/coalition/NEONCITY_SWITCH_MULTI.png', 'jp': './assets/cn/coalition/NEONCITY_SWITCH_MULTI.png', 'tw': './assets/cn/coalition/NEONCITY_SWITCH_MULTI.png'})
NEONCITY_SWITCH_SINGLE = Button(area={'cn': (940, 458, 1071, 486), 'en': (940, 458, 1071, 486), 'jp': (940, 458, 1071, 486), 'tw': (940, 458, 1071, 486)}, color={'cn': (230, 181, 62), 'en': (230, 181, 62), 'jp': (230, 181, 62), 'tw': (230, 181, 62)}, button={'cn': (940, 458, 1071, 486), 'en': (940, 458, 1071, 486), 'jp': (940, 458, 1071, 486), 'tw': (940, 458, 1071, 486)}, file={'cn': './assets/cn/coalition/NEONCITY_SWITCH_SINGLE.png', 'en': './assets/cn/coalition/NEONCITY_SWITCH_SINGLE.png', 'jp': './assets/cn/coalition/NEONCITY_SWITCH_SINGLE.png', 'tw': './assets/cn/coalition/NEONCITY_SWITCH_SINGLE.png'})
SIDEBAR_TEAM_1 = Button(area={'cn': (78, 141, 149, 188), 'en': (78, 141, 149, 188), 'jp': (78, 141, 149, 188), 'tw': (78, 141, 149, 188)}, color={'cn': (56, 57, 56), 'en': (56, 57, 56), 'jp': (56, 57, 56), 'tw': (56, 57, 56)}, button={'cn': (78, 141, 149, 188), 'en': (78, 141, 149, 188), 'jp': (78, 141, 149, 188), 'tw': (78, 141, 149, 188)}, file={'cn': './assets/cn/coalition/SIDEBAR_TEAM_1.png', 'en': './assets/cn/coalition/SIDEBAR_TEAM_1.png', 'jp': './assets/cn/coalition/SIDEBAR_TEAM_1.png', 'tw': './assets/cn/coalition/SIDEBAR_TEAM_1.png'})
SIDEBAR_TEAM_2 = Button(area={'cn': (208, 140, 308, 191), 'en': (208, 140, 308, 191), 'jp': (208, 140, 308, 191), 'tw': (208, 140, 308, 191)}, color={'cn': (53, 52, 50), 'en': (53, 52, 50), 'jp': (53, 52, 50), 'tw': (53, 52, 50)}, button={'cn': (208, 140, 308, 191), 'en': (208, 140, 308, 191), 'jp': (208, 140, 308, 191), 'tw': (208, 140, 308, 191)}, file={'cn': './assets/cn/coalition/SIDEBAR_TEAM_2.png', 'en': './assets/cn/coalition/SIDEBAR_TEAM_2.png', 'jp': './assets/cn/coalition/SIDEBAR_TEAM_2.png', 'tw': './assets/cn/coalition/SIDEBAR_TEAM_2.png'})
SIDEBAR_TEAM_3 = Button(area={'cn': (354, 150, 452, 181), 'en': (354, 150, 452, 181), 'jp': (354, 150, 452, 181), 'tw': (354, 150, 452, 181)}, color={'cn': (157, 160, 164), 'en': (157, 160, 164), 'jp': (157, 160, 164), 'tw': (157, 160, 164)}, button={'cn': (354, 150, 452, 181), 'en': (354, 150, 452, 181), 'jp': (354, 150, 452, 181), 'tw': (354, 150, 452, 181)}, file={'cn': './assets/cn/coalition/SIDEBAR_TEAM_3.png', 'en': './assets/cn/coalition/SIDEBAR_TEAM_3.png', 'jp': './assets/cn/coalition/SIDEBAR_TEAM_3.png', 'tw': './assets/cn/coalition/SIDEBAR_TEAM_3.png'})
SIDEBAR_TEAM_4 = Button(area={'cn': (507, 146, 595, 187), 'en': (507, 146, 595, 187), 'jp': (507, 146, 595, 187), 'tw': (507, 146, 595, 187)}, color={'cn': (57, 58, 57), 'en': (57, 58, 57), 'jp': (57, 58, 57), 'tw': (57, 58, 57)}, button={'cn': (507, 146, 595, 187), 'en': (507, 146, 595, 187), 'jp': (507, 146, 595, 187), 'tw': (507, 146, 595, 187)}, file={'cn': './assets/cn/coalition/SIDEBAR_TEAM_4.png', 'en': './assets/cn/coalition/SIDEBAR_TEAM_4.png', 'jp': './assets/cn/coalition/SIDEBAR_TEAM_4.png', 'tw': './assets/cn/coalition/SIDEBAR_TEAM_4.png'})

View File

@ -107,9 +107,9 @@ class Coalition(CoalitionCombat, CampaignEvent):
Coalition_Fleet='multi',
)
self.emotion.check_reduce(battle=self.coalition_get_battles(event, stage))
self.enter_map(event=event, stage=stage, mode=fleet)
if self.triggered_stop_condition(oil_check=True):
raise ScriptEnd
self.enter_map(event=event, stage=stage, mode=fleet)
self.coalition_combat()
@staticmethod
@ -183,7 +183,7 @@ class Coalition(CoalitionCombat, CampaignEvent):
self.config.Coalition_Mode = next_stage
event, mode, fleet = self.get_run_info(event, self.config.Coalition_Mode, fleet)
continue
elif self.config.StopCondition_EventSwitch:
elif self.config.EventPt_EventPtSwitch:
if not self.config.is_task_enabled('CoalitionSp'):
self.config.task_call('CoalitionSp')
continue

View File

@ -20,7 +20,7 @@ class TeamSwitch(Switch):
bool
"""
for data in self.state_list:
if main.image_color_count(data['check_button'], color=(222, 222, 222), threshold=221, count=100):
if main.image_color_count(data['check_button'], color=(191, 192, 198), threshold=221, count=100):
return True
return False
@ -34,7 +34,7 @@ class TeamSwitch(Switch):
str: state name or 'unknown'.
"""
for data in self.state_list:
if main.image_color_count(data['check_button'], color=(222, 222, 222), threshold=221, count=100):
if main.image_color_count(data['check_button'], color=(191, 192, 198), threshold=221, count=100):
return data['state']
return 'unknown'
@ -314,42 +314,49 @@ class CoalitionUI(Combat):
"This stage can only be farmed once a day, "
"but it's the second time that you are entering")
raise RequestHumanTakeover
# if self.appear(FLEET_NOT_PREPARED, offset=(20, 20)) and stage != 'sp':
# if self.config.Hospital_UseRecommendFleet:
# fleet_1 = FleetOperator(
# choose=COALITION_FLEET_1_CHOOSE, advice=FLEET_1_ADVICE, bar=FLEET_1_BAR, clear=FLEET_1_CLEAR,
# in_use=COALITION_FLEET_1_IN_USE, hard_satisfied=FLEET_1_HARD_SATIESFIED, main=self)
# logger.info('Recommend fleet')
# fleet_1.recommend()
# continue
# else:
# logger.critical('FLEET_NOT_PREPARED')
# logger.critical('Please prepare you fleets before running coalition battles')
# raise RequestHumanTakeover
# if self.appear(FLEET_NOT_PREPARED, offset=(20, 20)) and stage == 'sp':
# if self.config.Hospital_UseRecommendFleet:
# fleet_1 = FleetOperator(
# choose=COALITION_FLEET_1_CHOOSE, advice=FLEET_1_ADVICE, bar=FLEET_1_BAR, clear=FLEET_1_CLEAR,
# in_use=COALITION_FLEET_1_IN_USE, hard_satisfied=FLEET_1_HARD_SATIESFIED, main=self)
# if fleet_1.in_use():
# team_id += 1
# if team_id <= 4:
# self.TEAM_SIDEBAR.set(f'TEAM_{team_id}', main=self)
# continue
# else:
# fleet_1.recommend()
# continue
# # End
def handle_fleet_recommend(stage):
if self.config.Coalition_UseRecommendFleet:
fleet_i = FleetOperator(
choose=COALITION_FLEET_1_CHOOSE, advice=FLEET_1_ADVICE, bar=FLEET_1_BAR, clear=FLEET_1_CLEAR,
in_use=COALITION_FLEET_1_IN_USE, hard_satisfied=FLEET_1_HARD_SATIESFIED, main=self)
nonlocal team_id
if team_id < 5:
if stage in ['sp', 'ex']:
if fleet_i.in_use():
team_id += 1
if team_id <= 4:
self.TEAM_SIDEBAR.set(f'TEAM_{team_id}', main=self)
return 'continue'
else:
fleet_i.recommend()
return 'continue'
logger.info('Recommend fleet')
fleet_i.recommend()
return True
else:
return False
if self.appear(FLEET_NOT_PREPARED, offset=(20, 20)):
logger.critical('FLEET_NOT_PREPARED')
logger.critical('Please prepare you fleets before running coalition battles')
raise RequestHumanTakeover
result = handle_fleet_recommend(stage)
if result == 'continue':
continue
elif result == False:
logger.critical('FLEET_NOT_PREPARED')
logger.critical('Please prepare you fleets before running coalition battles')
raise RequestHumanTakeover
if self.appear(EMPTY_FLAGSHIP, offset=(20, 20)):
logger.critical('EMPTY_FLAGSHIP, Please prepare you fleets before running coalition battles')
raise RequestHumanTakeover
result = handle_fleet_recommend(stage)
if result == 'continue':
continue
elif result == False:
logger.critical('EMPTY_FLAGSHIP, Please prepare you fleets before running coalition battles')
raise RequestHumanTakeover
if self.appear(EMPTY_VANGUARD, offset=(20, 20)):
logger.critical('EMPTY_VANGUARD, Please prepare you fleets before running coalition battles')
raise RequestHumanTakeover
result = handle_fleet_recommend(stage)
if result == 'continue':
continue
elif result == False:
logger.critical('EMPTY_VANGUARD, Please prepare you fleets before running coalition battles')
raise RequestHumanTakeover
# End
if self.appear(BATTLE_PREPARATION, offset=(20, 20)):

View File

@ -2359,6 +2359,32 @@
"display": "hide"
}
},
"EventPt": {
"EventPtSwitch": {
"type": "checkbox",
"value": false
},
"Event2MapName": {
"type": "textarea",
"value": "HT6",
"display": "hide"
},
"EventDailyAMapName": {
"type": "textarea",
"value": "T1>T2>T3>T4>T5>T6",
"display": "hide"
},
"EventDailySpMapName": {
"type": "textarea",
"value": "sp",
"display": "hide"
},
"EventDailyCD": {
"type": "textarea",
"value": "HT1>HT2>HT3>HT4>HT5>HT6",
"display": "hide"
}
},
"Emotion": {
"Mode": {
"type": "select",
@ -4860,8 +4886,8 @@
"display": "hide"
},
"Fleet": {
"type": "select",
"value": "single",
"type": "state",
"value": "multi",
"option": [
"single",
"multi"

View File

@ -283,6 +283,15 @@ Coalition:
MapAchievement: non_stop
GetNewShip: false
ReachLevel: 0
EventPt:
Event2MapName:
value: HT6
EventDailyAMapName:
value: T1>T2>T3>T4>T5>T6
EventDailySpMapName:
value: sp
EventDailyCD:
value: HT1>HT2>HT3>HT4>HT5>HT6
Emotion:
Fleet2Value: 119
Fleet2Record: 2020-01-01 00:00:00
@ -307,6 +316,9 @@ CoalitionSp:
Coalition:
# CoalitionSp hard-codes Mode='sp'
Mode: sp
Fleet:
value: multi
type: state
StopCondition:
MapAchievement: non_stop
StageIncrease: false

View File

@ -77,6 +77,7 @@ Event:
- Campaign
- Coalition
- StopCondition
- EventPt
- Emotion
Event:
- Scheduler

View File

@ -1,5 +1,5 @@
import sys
sys.path.append(r'C:/Users/W1NDes/Documents/GitHub/M-AzurLaneAutoScript')
sys.path.append(r'C:/Users/W1NDe/Documents/GitHub/M-AzurLaneAutoScript')
import re
import typing as t
from copy import deepcopy

View File

@ -30,7 +30,7 @@ TAB_CHARACTER = Button(area={'cn': (263, 93, 409, 122), 'en': (263, 93, 409, 122
TAB_LOCATION = Button(area={'cn': (89, 93, 240, 121), 'en': (89, 93, 240, 121), 'jp': (89, 93, 240, 121), 'tw': (89, 93, 240, 121)}, color={'cn': (73, 108, 198), 'en': (73, 108, 198), 'jp': (73, 108, 198), 'tw': (73, 108, 198)}, button={'cn': (89, 93, 240, 121), 'en': (89, 93, 240, 121), 'jp': (89, 93, 240, 121), 'tw': (89, 93, 240, 121)}, file={'cn': './assets/cn/event_hospital/TAB_LOCATION.png', 'en': './assets/cn/event_hospital/TAB_LOCATION.png', 'jp': './assets/cn/event_hospital/TAB_LOCATION.png', 'tw': './assets/cn/event_hospital/TAB_LOCATION.png'})
TAB_RECORD = Button(area={'cn': (416, 93, 509, 121), 'en': (416, 93, 509, 121), 'jp': (416, 93, 509, 121), 'tw': (416, 93, 509, 121)}, color={'cn': (185, 177, 187), 'en': (185, 177, 187), 'jp': (185, 177, 187), 'tw': (185, 177, 187)}, button={'cn': (416, 93, 509, 121), 'en': (416, 93, 509, 121), 'jp': (416, 93, 509, 121), 'tw': (416, 93, 509, 121)}, file={'cn': './assets/cn/event_hospital/TAB_RECORD.png', 'en': './assets/cn/event_hospital/TAB_RECORD.png', 'jp': './assets/cn/event_hospital/TAB_RECORD.png', 'tw': './assets/cn/event_hospital/TAB_RECORD.png'})
TAB_SECRET = Button(area={'cn': (572, 95, 652, 119), 'en': (572, 95, 652, 119), 'jp': (572, 95, 652, 119), 'tw': (572, 95, 652, 119)}, color={'cn': (171, 166, 178), 'en': (171, 166, 178), 'jp': (171, 166, 178), 'tw': (171, 166, 178)}, button={'cn': (572, 95, 652, 119), 'en': (572, 95, 652, 119), 'jp': (572, 95, 652, 119), 'tw': (572, 95, 652, 119)}, file={'cn': './assets/cn/event_hospital/TAB_SECRET.png', 'en': './assets/cn/event_hospital/TAB_SECRET.png', 'jp': './assets/cn/event_hospital/TAB_SECRET.png', 'tw': './assets/cn/event_hospital/TAB_SECRET.png'})
TEMPLATE_INVEST = Template(file={'cn': './assets/cn/event_hospital/TEMPLATE_INVEST.png', 'en': './assets/en/event_hospital/TEMPLATE_INVEST.png', 'jp': './assets/jp/event_hospital/TEMPLATE_INVEST.png', 'tw': './assets/cn/event_hospital/TEMPLATE_INVEST.png'})
TEMPLATE_INVEST = Template(file={'cn': './assets/cn/event_hospital/TEMPLATE_INVEST.png', 'en': './assets/en/event_hospital/TEMPLATE_INVEST.png', 'jp': './assets/jp/event_hospital/TEMPLATE_INVEST.png', 'tw': './assets/tw/event_hospital/TEMPLATE_INVEST.png'})
TEMPLATE_INVEST2 = Template(file={'cn': './assets/cn/event_hospital/TEMPLATE_INVEST2.png', 'en': './assets/cn/event_hospital/TEMPLATE_INVEST2.png', 'jp': './assets/cn/event_hospital/TEMPLATE_INVEST2.png', 'tw': './assets/cn/event_hospital/TEMPLATE_INVEST2.png'})
TEMPLATE_REMAIN_CURRENT = Template(file={'cn': './assets/cn/event_hospital/TEMPLATE_REMAIN_CURRENT.png', 'en': './assets/en/event_hospital/TEMPLATE_REMAIN_CURRENT.png', 'jp': './assets/jp/event_hospital/TEMPLATE_REMAIN_CURRENT.png', 'tw': './assets/tw/event_hospital/TEMPLATE_REMAIN_CURRENT.png'})
TEMPLATE_REMAIN_TIMES = Template(file={'cn': './assets/cn/event_hospital/TEMPLATE_REMAIN_TIMES.png', 'en': './assets/en/event_hospital/TEMPLATE_REMAIN_TIMES.png', 'jp': './assets/jp/event_hospital/TEMPLATE_REMAIN_TIMES.png', 'tw': './assets/tw/event_hospital/TEMPLATE_REMAIN_TIMES.png'})