diff --git a/assets/cn/research/DURATION_REMAIN.png b/assets/cn/research/DURATION_REMAIN.png new file mode 100644 index 000000000..1784be13d Binary files /dev/null and b/assets/cn/research/DURATION_REMAIN.png differ diff --git a/assets/en/research/DURATION_REMAIN.png b/assets/en/research/DURATION_REMAIN.png new file mode 100644 index 000000000..1784be13d Binary files /dev/null and b/assets/en/research/DURATION_REMAIN.png differ diff --git a/assets/jp/research/DURATION_REMAIN.png b/assets/jp/research/DURATION_REMAIN.png new file mode 100644 index 000000000..1784be13d Binary files /dev/null and b/assets/jp/research/DURATION_REMAIN.png differ diff --git a/assets/tw/research/DURATION_REMAIN.png b/assets/tw/research/DURATION_REMAIN.png new file mode 100644 index 000000000..1784be13d Binary files /dev/null and b/assets/tw/research/DURATION_REMAIN.png differ diff --git a/module/research/assets.py b/module/research/assets.py index 76d5682d7..48aa68986 100644 --- a/module/research/assets.py +++ b/module/research/assets.py @@ -18,6 +18,7 @@ DETAIL_GENRE_T = Button(area={'cn': (323, 110, 418, 133), 'en': (323, 110, 418, DETAIL_ITEMS_ODD = Button(area={'cn': (408, 447, 422, 525), 'en': (408, 447, 422, 525), 'jp': (408, 447, 422, 525), 'tw': (408, 447, 422, 525)}, color={'cn': (145, 169, 164), 'en': (145, 169, 164), 'jp': (145, 169, 164), 'tw': (145, 169, 164)}, button={'cn': (408, 447, 422, 525), 'en': (408, 447, 422, 525), 'jp': (408, 447, 422, 525), 'tw': (408, 447, 422, 525)}, file={'cn': './assets/cn/research/DETAIL_ITEMS_ODD.png', 'en': './assets/en/research/DETAIL_ITEMS_ODD.png', 'jp': './assets/jp/research/DETAIL_ITEMS_ODD.png', 'tw': './assets/tw/research/DETAIL_ITEMS_ODD.png'}) DETAIL_NEXT = Button(area={'cn': (1236, 347, 1257, 374), 'en': (1236, 347, 1257, 374), 'jp': (1236, 347, 1257, 374), 'tw': (1236, 347, 1257, 374)}, color={'cn': (98, 148, 165), 'en': (98, 148, 165), 'jp': (98, 148, 165), 'tw': (98, 148, 165)}, button={'cn': (1236, 347, 1257, 374), 'en': (1236, 347, 1257, 374), 'jp': (1236, 347, 1257, 374), 'tw': (1236, 347, 1257, 374)}, file={'cn': './assets/cn/research/DETAIL_NEXT.png', 'en': './assets/en/research/DETAIL_NEXT.png', 'jp': './assets/jp/research/DETAIL_NEXT.png', 'tw': './assets/tw/research/DETAIL_NEXT.png'}) DURATION_DETAIL = Button(area={'cn': (788, 274, 913, 319), 'en': (788, 274, 913, 319), 'jp': (788, 274, 913, 319), 'tw': (788, 274, 913, 319)}, color={'cn': (102, 112, 132), 'en': (102, 112, 132), 'jp': (102, 112, 132), 'tw': (102, 112, 132)}, button={'cn': (788, 274, 913, 319), 'en': (788, 274, 913, 319), 'jp': (788, 274, 913, 319), 'tw': (788, 274, 913, 319)}, file={'cn': './assets/cn/research/DURATION_DETAIL.png', 'en': './assets/en/research/DURATION_DETAIL.png', 'jp': './assets/jp/research/DURATION_DETAIL.png', 'tw': './assets/tw/research/DURATION_DETAIL.png'}) +DURATION_REMAIN = Button(area={'cn': (622, 579, 732, 613), 'en': (622, 579, 732, 613), 'jp': (622, 579, 732, 613), 'tw': (622, 579, 732, 613)}, color={'cn': (188, 211, 239), 'en': (188, 211, 239), 'jp': (188, 211, 239), 'tw': (188, 211, 239)}, button={'cn': (622, 579, 732, 613), 'en': (622, 579, 732, 613), 'jp': (622, 579, 732, 613), 'tw': (622, 579, 732, 613)}, file={'cn': './assets/cn/research/DURATION_REMAIN.png', 'en': './assets/en/research/DURATION_REMAIN.png', 'jp': './assets/jp/research/DURATION_REMAIN.png', 'tw': './assets/tw/research/DURATION_REMAIN.png'}) ENTRANCE_1 = Button(area={'cn': (52, 186, 198, 375), 'en': (52, 186, 198, 375), 'jp': (52, 186, 198, 375), 'tw': (52, 186, 198, 375)}, color={'cn': (110, 162, 216), 'en': (110, 162, 216), 'jp': (110, 162, 216), 'tw': (110, 162, 216)}, button={'cn': (52, 186, 198, 375), 'en': (52, 186, 198, 375), 'jp': (52, 186, 198, 375), 'tw': (52, 186, 198, 375)}, file={'cn': './assets/cn/research/ENTRANCE_1.png', 'en': './assets/en/research/ENTRANCE_1.png', 'jp': './assets/jp/research/ENTRANCE_1.png', 'tw': './assets/tw/research/ENTRANCE_1.png'}) ENTRANCE_2 = Button(area={'cn': (296, 157, 465, 376), 'en': (296, 157, 465, 376), 'jp': (296, 157, 465, 376), 'tw': (296, 157, 465, 376)}, color={'cn': (110, 162, 216), 'en': (110, 162, 216), 'jp': (110, 162, 216), 'tw': (110, 162, 216)}, button={'cn': (296, 157, 465, 376), 'en': (296, 157, 465, 376), 'jp': (296, 157, 465, 376), 'tw': (296, 157, 465, 376)}, file={'cn': './assets/cn/research/ENTRANCE_2.png', 'en': './assets/en/research/ENTRANCE_2.png', 'jp': './assets/jp/research/ENTRANCE_2.png', 'tw': './assets/tw/research/ENTRANCE_2.png'}) ENTRANCE_3 = Button(area={'cn': (542, 130, 730, 378), 'en': (542, 130, 730, 378), 'jp': (542, 130, 730, 378), 'tw': (542, 130, 730, 378)}, color={'cn': (224, 190, 135), 'en': (224, 190, 135), 'jp': (224, 190, 135), 'tw': (224, 190, 135)}, button={'cn': (542, 130, 730, 378), 'en': (542, 130, 730, 378), 'jp': (542, 130, 730, 378), 'tw': (542, 130, 730, 378)}, file={'cn': './assets/cn/research/ENTRANCE_3.png', 'en': './assets/en/research/ENTRANCE_3.png', 'jp': './assets/jp/research/ENTRANCE_3.png', 'tw': './assets/tw/research/ENTRANCE_3.png'}) diff --git a/module/research/research.py b/module/research/research.py index 114aa9f85..b3351df6e 100644 --- a/module/research/research.py +++ b/module/research/research.py @@ -1,5 +1,6 @@ import numpy as np +from module.base.decorator import Config from module.base.timer import Timer from module.base.utils import rgb2gray from module.combat.assets import GET_ITEMS_1, GET_ITEMS_2, GET_ITEMS_3 @@ -321,6 +322,38 @@ class RewardResearch(ResearchSelector): return True + @Config.when(SERVER='jp') + def research_get_remain(self): + """ + Get remain duration of current project (the one in the middle). + + Returns: + float: research project remain time if success + None: if failed + + Pages: + in: page_research, stable. + out: page_research, stable. + """ + ocr = Duration(DURATION_REMAIN, letter=(255, 255, 255), threshold=64, name='DURATION_REMAIN') + + logger.hr('Research get remain') + + self.interval_clear(MAIN_GOTO_CAMPAIGN) + self.ui_ensure_research() + + remain = ocr.ocr(self.device.image) + logger.info(f'Research project remain: {remain}') + + seconds = remain.total_seconds() + if seconds >= 0: + research_duration_remain = seconds / 3600 + return research_duration_remain + else: + logger.warning(f'Invalid research duration: {seconds} ') + return None + + @Config.when(SERVER=None) def research_get_remain(self): """ Get remain duration of current project from page_reward.