Upd: event 20201126 rerun
BIN
assets/cn/campaign/EVENT_20201126_ENTRANCE_TEMP.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
assets/cn/campaign/EVENT_20201126_PT_ICON.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
assets/cn/campaign/EVENT_20260417_PT_ICON.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
assets/shop/os/METARedBookT1_2.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
assets/shop/os/OrdnanceTestingReportT3_6.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
assets/shop/os/RepairPackFull2_2.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
assets/shop/os/RepairPackFull_2.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
assets/shop/os/TuningSampleOffence_4.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
@@ -289,3 +289,4 @@ To add a new event, add a new row in here, and run `python -m module.config.conf
|
||||
| 20260402 | event 20260326 cn | The Vagabond’s Recruitment Plan | - | - | - | 漫遊者招募計劃 |
|
||||
| 20260416 | event 20220915 cn | Violet Tempest Blooming Lycoris | - | - | - | 復刻紫絳槿嵐 |
|
||||
| 20260417 | event 20260417 cn | Vacation Lane – Beachside Brilliance | 假日航线闪耀海滨 | Vacation Lane – Beachside Brilliance | バケーションレーン・きらめく砂浜 | - |
|
||||
| 20260417 | event 20201126 cn | Vacation Lane Rerun | 复刻假日航线 | Vacation Lane Rerun | バケーションレーン(復刻) | - |
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
from module.base.button import Button
|
||||
from module.campaign.assets import EVENT_20201126_ENTRANCE_TEMP, EVENT_20201126_PT_ICON
|
||||
from module.campaign.campaign_base import CampaignBase as CampaignBase_
|
||||
from module.exception import CampaignNameError
|
||||
from module.logger import logger
|
||||
from module.ui.page import page_campaign_menu, page_event, page_main_white
|
||||
|
||||
EVENT_ANIMATION = Button(area=(49, 229, 119, 400), color=(118, 215, 240), button=(49, 229, 119, 400),
|
||||
name='EVENT_ANIMATION')
|
||||
@@ -16,6 +18,19 @@ class CampaignBase(CampaignBase_):
|
||||
Mode switch is meaningless.
|
||||
"""
|
||||
|
||||
def ui_goto_event(self):
|
||||
if self.appear(EVENT_20201126_PT_ICON, offset=(20, 20)) and self.ui_page_appear(page_event):
|
||||
logger.info('Already at EVENT_20201126')
|
||||
return True
|
||||
self.ui_ensure(page_campaign_menu)
|
||||
if self.is_event_entrance_available():
|
||||
self.ui_ensure(page_main_white)
|
||||
self.ui_click(EVENT_20201126_ENTRANCE_TEMP,
|
||||
check_button=EVENT_20201126_PT_ICON,
|
||||
appear_button=EVENT_20201126_ENTRANCE_TEMP)
|
||||
return True
|
||||
|
||||
|
||||
@staticmethod
|
||||
def _campaign_separate_name(name):
|
||||
"""
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from module.base.utils import get_color, red_overlay_transparency
|
||||
from module.campaign.campaign_base import CampaignBase as CampaignBase_
|
||||
from module.handler.assets import MAP_ENEMY_SEARCHING
|
||||
from module.map.assets import SWITCH_OVER
|
||||
from module.ui.page import page_event
|
||||
|
||||
|
||||
class CampaignBase(CampaignBase_):
|
||||
@@ -12,3 +12,9 @@ class CampaignBase(CampaignBase_):
|
||||
return red_overlay_transparency(
|
||||
MAP_ENEMY_SEARCHING.color, get_color(self.device.image, MAP_ENEMY_SEARCHING.area)
|
||||
) > self.MAP_ENEMY_SEARCHING_OVERLAY_TRANSPARENCY_THRESHOLD
|
||||
|
||||
def handle_exp_info(self):
|
||||
# Random background hits EXP_INFO_B
|
||||
if self.ui_page_appear(page_event):
|
||||
return False
|
||||
return super().handle_exp_info()
|
||||
|
||||
@@ -1,12 +1,23 @@
|
||||
from module.base.button import Button
|
||||
from module.campaign.assets import EVENT_20260417_PT_ICON
|
||||
from module.campaign.campaign_base import CampaignBase as CampaignBase_
|
||||
from module.logger import logger
|
||||
from module.ui.page import page_campaign_menu, page_event
|
||||
|
||||
EVENT_ANIMATION = Button(area=(49, 229, 119, 400), color=(118, 215, 240), button=(49, 229, 119, 400),
|
||||
name='EVENT_ANIMATION')
|
||||
|
||||
|
||||
class CampaignBase(CampaignBase_):
|
||||
def ui_goto_event(self):
|
||||
if self.appear(EVENT_20260417_PT_ICON, offset=(20, 20)) and self.ui_page_appear(page_event):
|
||||
logger.info('Already at EVENT_20260417')
|
||||
return True
|
||||
self.ui_ensure(page_campaign_menu)
|
||||
if self.is_event_entrance_available():
|
||||
self.ui_goto(page_event)
|
||||
return True
|
||||
|
||||
@staticmethod
|
||||
def _campaign_ocr_result_process(result):
|
||||
result = CampaignBase_._campaign_ocr_result_process(result)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from module.base.utils import get_color, red_overlay_transparency
|
||||
from ..campaign_war_archives.campaign_base import CampaignBase as CampaignBase_
|
||||
from module.handler.assets import MAP_ENEMY_SEARCHING
|
||||
from module.map.assets import SWITCH_OVER
|
||||
from module.ui.page import page_event
|
||||
from ..campaign_war_archives.campaign_base import CampaignBase as CampaignBase_
|
||||
|
||||
|
||||
class CampaignBase(CampaignBase_):
|
||||
@@ -12,3 +12,9 @@ class CampaignBase(CampaignBase_):
|
||||
return red_overlay_transparency(
|
||||
MAP_ENEMY_SEARCHING.color, get_color(self.device.image, MAP_ENEMY_SEARCHING.area)
|
||||
) > self.MAP_ENEMY_SEARCHING_OVERLAY_TRANSPARENCY_THRESHOLD
|
||||
|
||||
def handle_exp_info(self):
|
||||
# Random background hits EXP_INFO_B
|
||||
if self.ui_page_appear(page_event):
|
||||
return False
|
||||
return super().handle_exp_info()
|
||||
|
||||
@@ -71,7 +71,10 @@ class GitManager(DeployConfig):
|
||||
@property
|
||||
def goc_client(self):
|
||||
client = GitOverCdnClient(
|
||||
url='https://vip.123pan.cn/1818706573/pack/LmeSzinc_AzurLaneAutoScript_master',
|
||||
url=[
|
||||
'https://vip.123pan.cn/1818706573/pack/LmeSzinc_AzurLaneAutoScript_master',
|
||||
'https://1818706573.v.123yx.com/1818706573/pack/LmeSzinc_AzurLaneAutoScript_master',
|
||||
],
|
||||
folder=self.root_filepath,
|
||||
source='origin',
|
||||
branch='master',
|
||||
@@ -102,4 +105,4 @@ class GitManager(DeployConfig):
|
||||
|
||||
if __name__ == '__main__':
|
||||
self = GitManager()
|
||||
self.goc_client.get_status()
|
||||
self.goc_client.get_status()
|
||||
|
||||
@@ -52,10 +52,14 @@ class GitOverCdnClient:
|
||||
def __init__(self, url, folder, source='origin', branch='master', git='git'):
|
||||
"""
|
||||
Args:
|
||||
url: http://127.0.0.1:22251/pack/LmeSzinc_AzurLaneAutoScript_master/
|
||||
url (str | list[str]): http://127.0.0.1:22251/pack/LmeSzinc_AzurLaneAutoScript_master/
|
||||
folder: D:/AzurLaneAutoScript
|
||||
"""
|
||||
self.url = url.strip('/')
|
||||
if isinstance(url, str):
|
||||
self.urls = [url.strip('/')]
|
||||
else:
|
||||
self.urls = [u.strip('/') for u in url]
|
||||
self.url = self.urls[0]
|
||||
self.folder = folder.replace('\\', '/')
|
||||
self.source = source
|
||||
self.branch = branch
|
||||
@@ -100,29 +104,31 @@ class GitOverCdnClient:
|
||||
|
||||
@cached_property
|
||||
def latest_commit(self) -> str:
|
||||
try:
|
||||
for url_base in self.urls:
|
||||
self.url = url_base
|
||||
url = self.urlpath('/latest.json')
|
||||
self.logger.info(f'Fetch url: {url}')
|
||||
resp = self.session.get(url, timeout=3)
|
||||
except Exception as e:
|
||||
self.logger.error(f'Failed to get remote commit: {e}')
|
||||
return ''
|
||||
|
||||
if resp.status_code == 200:
|
||||
try:
|
||||
info = json.loads(resp.text)
|
||||
commit = info['commit']
|
||||
self.logger.attr('LatestCommit', commit)
|
||||
return commit
|
||||
except json.JSONDecodeError:
|
||||
self.logger.error(f'Failed to get remote commit, response is not a json: {resp.text}')
|
||||
return ''
|
||||
except KeyError:
|
||||
self.logger.error(f'Failed to get remote commit, key "commit" is not found: {resp.text}')
|
||||
return ''
|
||||
else:
|
||||
self.logger.error(f'Failed to get remote commit, status={resp.status_code}, text={resp.text}')
|
||||
return ''
|
||||
resp = self.session.get(url, timeout=3)
|
||||
except Exception as e:
|
||||
self.logger.error(f'Failed to get remote commit: {e}')
|
||||
continue
|
||||
|
||||
if resp.status_code == 200:
|
||||
try:
|
||||
info = json.loads(resp.text)
|
||||
commit = info['commit']
|
||||
self.logger.attr('LatestCommit', commit)
|
||||
return commit
|
||||
except json.JSONDecodeError:
|
||||
self.logger.error(f'Failed to get remote commit, response is not a json: {resp.text}')
|
||||
except KeyError:
|
||||
self.logger.error(f'Failed to get remote commit, key "commit" is not found: {resp.text}')
|
||||
else:
|
||||
self.logger.error(f'Failed to get remote commit, status={resp.status_code}, text={resp.text}')
|
||||
|
||||
self.url = self.urls[0]
|
||||
return ''
|
||||
|
||||
def download_pack(self):
|
||||
try:
|
||||
|
||||
@@ -11,10 +11,13 @@ CHAPTER_20241219_SP = Button(area={'cn': (17, 372, 34, 388), 'en': (17, 372, 34,
|
||||
CHAPTER_NEXT = Button(area={'cn': (1216, 362, 1232, 388), 'en': (1216, 362, 1232, 388), 'jp': (1216, 362, 1232, 388), 'tw': (1216, 362, 1232, 388)}, color={'cn': (121, 150, 198), 'en': (121, 150, 198), 'jp': (121, 150, 198), 'tw': (121, 150, 198)}, button={'cn': (1216, 362, 1232, 388), 'en': (1216, 362, 1232, 388), 'jp': (1216, 362, 1232, 388), 'tw': (1216, 362, 1232, 388)}, file={'cn': './assets/cn/campaign/CHAPTER_NEXT.png', 'en': './assets/en/campaign/CHAPTER_NEXT.png', 'jp': './assets/jp/campaign/CHAPTER_NEXT.png', 'tw': './assets/tw/campaign/CHAPTER_NEXT.png'})
|
||||
CHAPTER_PREV = Button(area={'cn': (42, 360, 58, 387), 'en': (42, 360, 58, 387), 'jp': (42, 360, 58, 387), 'tw': (42, 360, 58, 387)}, color={'cn': (105, 133, 169), 'en': (105, 133, 169), 'jp': (105, 133, 169), 'tw': (105, 133, 169)}, button={'cn': (42, 360, 58, 387), 'en': (42, 360, 58, 387), 'jp': (42, 360, 58, 387), 'tw': (42, 360, 58, 387)}, file={'cn': './assets/cn/campaign/CHAPTER_PREV.png', 'en': './assets/en/campaign/CHAPTER_PREV.png', 'jp': './assets/jp/campaign/CHAPTER_PREV.png', 'tw': './assets/tw/campaign/CHAPTER_PREV.png'})
|
||||
COMMISSION_NOTICE_AT_CAMPAIGN = Button(area={'cn': (1077, 637, 1083, 643), 'en': (1077, 637, 1083, 643), 'jp': (1077, 637, 1083, 643), 'tw': (1077, 637, 1083, 643)}, color={'cn': (172, 72, 49), 'en': (172, 72, 49), 'jp': (172, 72, 49), 'tw': (172, 72, 49)}, button={'cn': (1077, 637, 1083, 643), 'en': (1077, 637, 1083, 643), 'jp': (1077, 637, 1083, 643), 'tw': (1077, 637, 1083, 643)}, file={'cn': './assets/cn/campaign/COMMISSION_NOTICE_AT_CAMPAIGN.png', 'en': './assets/en/campaign/COMMISSION_NOTICE_AT_CAMPAIGN.png', 'jp': './assets/jp/campaign/COMMISSION_NOTICE_AT_CAMPAIGN.png', 'tw': './assets/tw/campaign/COMMISSION_NOTICE_AT_CAMPAIGN.png'})
|
||||
EVENT_20201126_ENTRANCE_TEMP = Button(area={'cn': (1023, 368, 1100, 407), 'en': (1023, 368, 1100, 407), 'jp': (1023, 368, 1100, 407), 'tw': (1023, 368, 1100, 407)}, color={'cn': (160, 208, 243), 'en': (160, 208, 243), 'jp': (160, 208, 243), 'tw': (160, 208, 243)}, button={'cn': (1023, 368, 1100, 407), 'en': (1023, 368, 1100, 407), 'jp': (1023, 368, 1100, 407), 'tw': (1023, 368, 1100, 407)}, file={'cn': './assets/cn/campaign/EVENT_20201126_ENTRANCE_TEMP.png', 'en': './assets/cn/campaign/EVENT_20201126_ENTRANCE_TEMP.png', 'jp': './assets/cn/campaign/EVENT_20201126_ENTRANCE_TEMP.png', 'tw': './assets/cn/campaign/EVENT_20201126_ENTRANCE_TEMP.png'})
|
||||
EVENT_20201126_PT_ICON = Button(area={'cn': (1108, 102, 1133, 127), 'en': (1108, 102, 1133, 127), 'jp': (1108, 102, 1133, 127), 'tw': (1108, 102, 1133, 127)}, color={'cn': (231, 121, 159), 'en': (231, 121, 159), 'jp': (231, 121, 159), 'tw': (231, 121, 159)}, button={'cn': (1108, 102, 1133, 127), 'en': (1108, 102, 1133, 127), 'jp': (1108, 102, 1133, 127), 'tw': (1108, 102, 1133, 127)}, file={'cn': './assets/cn/campaign/EVENT_20201126_PT_ICON.png', 'en': './assets/cn/campaign/EVENT_20201126_PT_ICON.png', 'jp': './assets/cn/campaign/EVENT_20201126_PT_ICON.png', 'tw': './assets/cn/campaign/EVENT_20201126_PT_ICON.png'})
|
||||
EVENT_20221124_ENTRANCE = Button(area={'cn': (1037, 162, 1077, 195), 'en': (1037, 162, 1077, 195), 'jp': (1037, 162, 1077, 195), 'tw': (1037, 162, 1077, 195)}, color={'cn': (207, 168, 148), 'en': (207, 168, 148), 'jp': (207, 168, 148), 'tw': (207, 168, 148)}, button={'cn': (1037, 162, 1077, 195), 'en': (1037, 162, 1077, 195), 'jp': (1037, 162, 1077, 195), 'tw': (1037, 162, 1077, 195)}, file={'cn': './assets/cn/campaign/EVENT_20221124_ENTRANCE.png', 'en': './assets/cn/campaign/EVENT_20221124_ENTRANCE.png', 'jp': './assets/cn/campaign/EVENT_20221124_ENTRANCE.png', 'tw': './assets/cn/campaign/EVENT_20221124_ENTRANCE.png'})
|
||||
EVENT_20221124_PT_ICON = Button(area={'cn': (1106, 109, 1135, 130), 'en': (1071, 109, 1101, 129), 'jp': (1106, 109, 1135, 130), 'tw': (1106, 109, 1135, 130)}, color={'cn': (151, 116, 139), 'en': (152, 115, 138), 'jp': (151, 116, 139), 'tw': (151, 116, 139)}, button={'cn': (1106, 109, 1135, 130), 'en': (1071, 109, 1101, 129), 'jp': (1106, 109, 1135, 130), 'tw': (1106, 109, 1135, 130)}, file={'cn': './assets/cn/campaign/EVENT_20221124_PT_ICON.png', 'en': './assets/en/campaign/EVENT_20221124_PT_ICON.png', 'jp': './assets/cn/campaign/EVENT_20221124_PT_ICON.png', 'tw': './assets/cn/campaign/EVENT_20221124_PT_ICON.png'})
|
||||
EVENT_20230817_STORY = Button(area={'cn': (610, 320, 670, 380), 'en': (610, 320, 670, 380), 'jp': (610, 320, 670, 380), 'tw': (610, 320, 670, 380)}, color={'cn': (183, 180, 190), 'en': (183, 180, 190), 'jp': (183, 180, 190), 'tw': (183, 180, 190)}, button={'cn': (610, 320, 670, 380), 'en': (610, 320, 670, 380), 'jp': (610, 320, 670, 380), 'tw': (610, 320, 670, 380)}, file={'cn': './assets/cn/campaign/EVENT_20230817_STORY.png', 'en': './assets/en/campaign/EVENT_20230817_STORY.png', 'jp': './assets/jp/campaign/EVENT_20230817_STORY.png', 'tw': './assets/tw/campaign/EVENT_20230817_STORY.png'})
|
||||
EVENT_20250724_PT_ICON = Button(area={'cn': (1102, 106, 1139, 121), 'en': (1067, 108, 1104, 123), 'jp': (1102, 106, 1139, 121), 'tw': (1102, 106, 1139, 121)}, color={'cn': (95, 103, 93), 'en': (97, 101, 94), 'jp': (95, 103, 93), 'tw': (95, 103, 93)}, button={'cn': (1102, 106, 1139, 121), 'en': (1067, 108, 1104, 123), 'jp': (1102, 106, 1139, 121), 'tw': (1102, 106, 1139, 121)}, file={'cn': './assets/cn/campaign/EVENT_20250724_PT_ICON.png', 'en': './assets/en/campaign/EVENT_20250724_PT_ICON.png', 'jp': './assets/cn/campaign/EVENT_20250724_PT_ICON.png', 'tw': './assets/cn/campaign/EVENT_20250724_PT_ICON.png'})
|
||||
EVENT_20260417_PT_ICON = Button(area={'cn': (1110, 106, 1133, 130), 'en': (1110, 106, 1133, 130), 'jp': (1110, 106, 1133, 130), 'tw': (1110, 106, 1133, 130)}, color={'cn': (119, 177, 213), 'en': (119, 177, 213), 'jp': (119, 177, 213), 'tw': (119, 177, 213)}, button={'cn': (1110, 106, 1133, 130), 'en': (1110, 106, 1133, 130), 'jp': (1110, 106, 1133, 130), 'tw': (1110, 106, 1133, 130)}, file={'cn': './assets/cn/campaign/EVENT_20260417_PT_ICON.png', 'en': './assets/cn/campaign/EVENT_20260417_PT_ICON.png', 'jp': './assets/cn/campaign/EVENT_20260417_PT_ICON.png', 'tw': './assets/cn/campaign/EVENT_20260417_PT_ICON.png'})
|
||||
OCR_COIN = 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/campaign/OCR_COIN.png', 'en': './assets/en/campaign/OCR_COIN.png', 'jp': './assets/jp/campaign/OCR_COIN.png', 'tw': './assets/tw/campaign/OCR_COIN.png'})
|
||||
OCR_COIN_LIMIT = Button(area={'cn': (807, 0, 944, 19), 'en': (807, 0, 944, 19), 'jp': (807, 0, 944, 19), 'tw': (807, 0, 944, 19)}, color={'cn': (206, 206, 206), 'en': (206, 206, 206), 'jp': (206, 206, 206), 'tw': (206, 206, 206)}, button={'cn': (807, 0, 944, 19), 'en': (807, 0, 944, 19), 'jp': (807, 0, 944, 19), 'tw': (807, 0, 944, 19)}, file={'cn': './assets/cn/campaign/OCR_COIN_LIMIT.png', 'en': './assets/en/campaign/OCR_COIN_LIMIT.png', 'jp': './assets/jp/campaign/OCR_COIN_LIMIT.png', 'tw': './assets/tw/campaign/OCR_COIN_LIMIT.png'})
|
||||
OCR_EVENT_PT = Button(area={'cn': (1196, 109, 1280, 131), 'en': (1190, 109, 1280, 129), 'jp': (1196, 109, 1280, 131), 'tw': (1196, 109, 1280, 131)}, color={'cn': (121, 110, 59), 'en': (88, 78, 51), 'jp': (121, 110, 59), 'tw': (121, 110, 59)}, button={'cn': (1196, 109, 1280, 131), 'en': (1190, 109, 1280, 129), 'jp': (1196, 109, 1280, 131), 'tw': (1196, 109, 1280, 131)}, file={'cn': './assets/cn/campaign/OCR_EVENT_PT.png', 'en': './assets/en/campaign/OCR_EVENT_PT.png', 'jp': './assets/jp/campaign/OCR_EVENT_PT.png', 'tw': './assets/tw/campaign/OCR_EVENT_PT.png'})
|
||||
|
||||
@@ -177,6 +177,7 @@ class CampaignRun(CampaignEvent, ShopStatus):
|
||||
logger.info(f'Stage name {name} is from campaign_main')
|
||||
folder = 'campaign_main'
|
||||
else:
|
||||
folder = self.config.cross_get('GemsFarming.Campaign.Event')
|
||||
if folder is not None:
|
||||
logger.info(f'Stage name {name} is from event {folder}')
|
||||
else:
|
||||
|
||||
@@ -1967,23 +1967,27 @@
|
||||
"type": "select",
|
||||
"value": "campaign_main",
|
||||
"option": [
|
||||
"event_20201126_cn",
|
||||
"event_20220915_cn",
|
||||
"event_20260417_cn"
|
||||
],
|
||||
"display": "hide",
|
||||
"option_cn": [
|
||||
"event_20201126_cn",
|
||||
"event_20260417_cn"
|
||||
],
|
||||
"option_en": [
|
||||
"event_20201126_cn",
|
||||
"event_20260417_cn"
|
||||
],
|
||||
"option_jp": [
|
||||
"event_20201126_cn",
|
||||
"event_20260417_cn"
|
||||
],
|
||||
"option_tw": [
|
||||
"event_20220915_cn"
|
||||
],
|
||||
"option_bold": [
|
||||
"event_20201126_cn",
|
||||
"event_20220915_cn",
|
||||
"event_20260417_cn"
|
||||
]
|
||||
@@ -2385,25 +2389,30 @@
|
||||
"value": "12-4"
|
||||
},
|
||||
"Event": {
|
||||
"type": "state",
|
||||
"type": "select",
|
||||
"value": "campaign_main",
|
||||
"option": [
|
||||
"event_20201126_cn",
|
||||
"event_20220915_cn",
|
||||
"event_20260417_cn"
|
||||
],
|
||||
"option_cn": [
|
||||
"event_20201126_cn",
|
||||
"event_20260417_cn"
|
||||
],
|
||||
"option_en": [
|
||||
"event_20201126_cn",
|
||||
"event_20260417_cn"
|
||||
],
|
||||
"option_jp": [
|
||||
"event_20201126_cn",
|
||||
"event_20260417_cn"
|
||||
],
|
||||
"option_tw": [
|
||||
"event_20220915_cn"
|
||||
],
|
||||
"option_bold": [
|
||||
"event_20201126_cn",
|
||||
"event_20220915_cn",
|
||||
"event_20260417_cn"
|
||||
]
|
||||
@@ -2799,25 +2808,30 @@
|
||||
"value": "12-4"
|
||||
},
|
||||
"Event": {
|
||||
"type": "state",
|
||||
"type": "select",
|
||||
"value": "campaign_main",
|
||||
"option": [
|
||||
"event_20201126_cn",
|
||||
"event_20220915_cn",
|
||||
"event_20260417_cn"
|
||||
],
|
||||
"option_cn": [
|
||||
"event_20201126_cn",
|
||||
"event_20260417_cn"
|
||||
],
|
||||
"option_en": [
|
||||
"event_20201126_cn",
|
||||
"event_20260417_cn"
|
||||
],
|
||||
"option_jp": [
|
||||
"event_20201126_cn",
|
||||
"event_20260417_cn"
|
||||
],
|
||||
"option_tw": [
|
||||
"event_20220915_cn"
|
||||
],
|
||||
"option_bold": [
|
||||
"event_20201126_cn",
|
||||
"event_20220915_cn",
|
||||
"event_20260417_cn"
|
||||
]
|
||||
@@ -3230,7 +3244,7 @@
|
||||
"display": "hide"
|
||||
},
|
||||
"Event": {
|
||||
"type": "state",
|
||||
"type": "select",
|
||||
"value": "campaign_main",
|
||||
"option": [
|
||||
"raid_20260212"
|
||||
@@ -4606,25 +4620,30 @@
|
||||
"display": "hide"
|
||||
},
|
||||
"Event": {
|
||||
"type": "state",
|
||||
"type": "select",
|
||||
"value": "campaign_main",
|
||||
"option": [
|
||||
"event_20201126_cn",
|
||||
"event_20220915_cn",
|
||||
"event_20260417_cn"
|
||||
],
|
||||
"option_cn": [
|
||||
"event_20201126_cn",
|
||||
"event_20260417_cn"
|
||||
],
|
||||
"option_en": [
|
||||
"event_20201126_cn",
|
||||
"event_20260417_cn"
|
||||
],
|
||||
"option_jp": [
|
||||
"event_20201126_cn",
|
||||
"event_20260417_cn"
|
||||
],
|
||||
"option_tw": [
|
||||
"event_20220915_cn"
|
||||
],
|
||||
"option_bold": [
|
||||
"event_20201126_cn",
|
||||
"event_20220915_cn",
|
||||
"event_20260417_cn"
|
||||
]
|
||||
@@ -5038,25 +5057,30 @@
|
||||
"display": "hide"
|
||||
},
|
||||
"Event": {
|
||||
"type": "state",
|
||||
"type": "select",
|
||||
"value": "campaign_main",
|
||||
"option": [
|
||||
"event_20201126_cn",
|
||||
"event_20220915_cn",
|
||||
"event_20260417_cn"
|
||||
],
|
||||
"option_cn": [
|
||||
"event_20201126_cn",
|
||||
"event_20260417_cn"
|
||||
],
|
||||
"option_en": [
|
||||
"event_20201126_cn",
|
||||
"event_20260417_cn"
|
||||
],
|
||||
"option_jp": [
|
||||
"event_20201126_cn",
|
||||
"event_20260417_cn"
|
||||
],
|
||||
"option_tw": [
|
||||
"event_20220915_cn"
|
||||
],
|
||||
"option_bold": [
|
||||
"event_20201126_cn",
|
||||
"event_20220915_cn",
|
||||
"event_20260417_cn"
|
||||
]
|
||||
@@ -5470,25 +5494,30 @@
|
||||
"display": "hide"
|
||||
},
|
||||
"Event": {
|
||||
"type": "state",
|
||||
"type": "select",
|
||||
"value": "campaign_main",
|
||||
"option": [
|
||||
"event_20201126_cn",
|
||||
"event_20220915_cn",
|
||||
"event_20260417_cn"
|
||||
],
|
||||
"option_cn": [
|
||||
"event_20201126_cn",
|
||||
"event_20260417_cn"
|
||||
],
|
||||
"option_en": [
|
||||
"event_20201126_cn",
|
||||
"event_20260417_cn"
|
||||
],
|
||||
"option_jp": [
|
||||
"event_20201126_cn",
|
||||
"event_20260417_cn"
|
||||
],
|
||||
"option_tw": [
|
||||
"event_20220915_cn"
|
||||
],
|
||||
"option_bold": [
|
||||
"event_20201126_cn",
|
||||
"event_20220915_cn",
|
||||
"event_20260417_cn"
|
||||
]
|
||||
@@ -5902,25 +5931,30 @@
|
||||
"display": "hide"
|
||||
},
|
||||
"Event": {
|
||||
"type": "state",
|
||||
"type": "select",
|
||||
"value": "campaign_main",
|
||||
"option": [
|
||||
"event_20201126_cn",
|
||||
"event_20220915_cn",
|
||||
"event_20260417_cn"
|
||||
],
|
||||
"option_cn": [
|
||||
"event_20201126_cn",
|
||||
"event_20260417_cn"
|
||||
],
|
||||
"option_en": [
|
||||
"event_20201126_cn",
|
||||
"event_20260417_cn"
|
||||
],
|
||||
"option_jp": [
|
||||
"event_20201126_cn",
|
||||
"event_20260417_cn"
|
||||
],
|
||||
"option_tw": [
|
||||
"event_20220915_cn"
|
||||
],
|
||||
"option_bold": [
|
||||
"event_20201126_cn",
|
||||
"event_20220915_cn",
|
||||
"event_20260417_cn"
|
||||
]
|
||||
@@ -6324,25 +6358,30 @@
|
||||
"display": "hide"
|
||||
},
|
||||
"Event": {
|
||||
"type": "state",
|
||||
"type": "select",
|
||||
"value": "campaign_main",
|
||||
"option": [
|
||||
"event_20201126_cn",
|
||||
"event_20220915_cn",
|
||||
"event_20260417_cn"
|
||||
],
|
||||
"option_cn": [
|
||||
"event_20201126_cn",
|
||||
"event_20260417_cn"
|
||||
],
|
||||
"option_en": [
|
||||
"event_20201126_cn",
|
||||
"event_20260417_cn"
|
||||
],
|
||||
"option_jp": [
|
||||
"event_20201126_cn",
|
||||
"event_20260417_cn"
|
||||
],
|
||||
"option_tw": [
|
||||
"event_20220915_cn"
|
||||
],
|
||||
"option_bold": [
|
||||
"event_20201126_cn",
|
||||
"event_20220915_cn",
|
||||
"event_20260417_cn"
|
||||
]
|
||||
@@ -6753,7 +6792,7 @@
|
||||
"display": "hide"
|
||||
},
|
||||
"Event": {
|
||||
"type": "state",
|
||||
"type": "select",
|
||||
"value": "campaign_main",
|
||||
"option": [
|
||||
"raid_20260212"
|
||||
@@ -6995,7 +7034,7 @@
|
||||
"display": "hide"
|
||||
},
|
||||
"Event": {
|
||||
"type": "state",
|
||||
"type": "select",
|
||||
"value": "campaign_main",
|
||||
"option": [
|
||||
"coalition_20260122"
|
||||
|
||||
@@ -28,8 +28,6 @@ Main3:
|
||||
Event: campaign_main
|
||||
GemsFarming:
|
||||
Campaign:
|
||||
Event:
|
||||
value: campaign_main
|
||||
Mode: normal
|
||||
UseClearMode: true
|
||||
UseFleetLock: true
|
||||
@@ -57,14 +55,10 @@ GemsFarming:
|
||||
Event:
|
||||
Campaign:
|
||||
Mode: normal
|
||||
Event:
|
||||
type: state
|
||||
AmbushEvade: true
|
||||
Event2:
|
||||
Campaign:
|
||||
Mode: normal
|
||||
Event:
|
||||
type: state
|
||||
AmbushEvade: true
|
||||
EventA:
|
||||
Scheduler:
|
||||
@@ -73,8 +67,6 @@ EventA:
|
||||
ServerUpdate: 00:00
|
||||
Campaign:
|
||||
Name: dynamic
|
||||
Event:
|
||||
type: state
|
||||
Mode: normal
|
||||
Use2xBook: false
|
||||
AmbushEvade: true
|
||||
@@ -92,8 +84,6 @@ EventB:
|
||||
ServerUpdate: 00:00
|
||||
Campaign:
|
||||
Name: dynamic
|
||||
Event:
|
||||
type: state
|
||||
Mode: normal
|
||||
Use2xBook: false
|
||||
AmbushEvade: true
|
||||
@@ -111,8 +101,6 @@ EventC:
|
||||
ServerUpdate: 00:00
|
||||
Campaign:
|
||||
Name: dynamic
|
||||
Event:
|
||||
type: state
|
||||
Mode: normal
|
||||
Use2xBook: false
|
||||
AmbushEvade: true
|
||||
@@ -130,8 +118,6 @@ EventD:
|
||||
ServerUpdate: 00:00
|
||||
Campaign:
|
||||
Name: dynamic
|
||||
Event:
|
||||
type: state
|
||||
Mode: normal
|
||||
Use2xBook: false
|
||||
AmbushEvade: true
|
||||
@@ -149,8 +135,6 @@ EventSp:
|
||||
ServerUpdate: 00:00
|
||||
Campaign:
|
||||
Name: sp
|
||||
Event:
|
||||
type: state
|
||||
Mode: normal
|
||||
Use2xBook: false
|
||||
AmbushEvade: true
|
||||
@@ -166,8 +150,6 @@ EventSp:
|
||||
Raid:
|
||||
Campaign:
|
||||
Name: dynamic
|
||||
Event:
|
||||
type: state
|
||||
Mode: normal
|
||||
UseClearMode: true
|
||||
UseFleetLock: true
|
||||
@@ -212,8 +194,6 @@ RaidDaily:
|
||||
ServerUpdate: 00:00
|
||||
Campaign:
|
||||
Name: dynamic
|
||||
Event:
|
||||
type: state
|
||||
Mode: normal
|
||||
UseClearMode: true
|
||||
UseFleetLock: true
|
||||
@@ -245,8 +225,6 @@ Coalition:
|
||||
FailureInterval: 30
|
||||
ServerUpdate: 00:00
|
||||
Campaign:
|
||||
Event:
|
||||
type: state
|
||||
Name: dynamic
|
||||
Event:
|
||||
type: state
|
||||
@@ -279,8 +257,6 @@ CoalitionSp:
|
||||
ServerUpdate: 00:00
|
||||
Campaign:
|
||||
Name: sp
|
||||
Event:
|
||||
type: state
|
||||
Mode: normal
|
||||
UseClearMode: true
|
||||
UseFleetLock: true
|
||||
|
||||
@@ -657,17 +657,24 @@ class ConfigUpdater:
|
||||
if not is_template:
|
||||
for task in EVENTS + GEMS_FARMINGS + RAIDS + COALITIONS:
|
||||
opts = deep_get(self.args, keys=f'{task}.Campaign.Event.option_{server}', default=[])
|
||||
if not deep_get(new, keys=f'{task}.Campaign.Event', default='campaign_main') in opts:
|
||||
if opts and not deep_get(new, keys=f'{task}.Campaign.Event', default='campaign_main') in opts:
|
||||
deep_set(new,
|
||||
keys=f'{task}.Campaign.Event',
|
||||
value=opts[0])
|
||||
|
||||
for task in ['GemsFarming']:
|
||||
opts = deep_get(self.args, keys=f'{task}.Campaign.Event.option_{server}', default=[])
|
||||
if opts and deep_get(new, keys=f'{task}.Campaign.Event', default='campaign_main') not in opts:
|
||||
deep_set(new,
|
||||
keys=f'{task}.Campaign.Event',
|
||||
value=opts[0])
|
||||
# War archive does not allow campaign_main
|
||||
for task in WAR_ARCHIVES:
|
||||
if deep_get(new, keys=f'{task}.Campaign.Event', default='campaign_main') == 'campaign_main':
|
||||
opts = deep_get(self.args, keys=f'{task}.Campaign.Event.option_{server}', default=[])
|
||||
if opts and deep_get(new, keys=f'{task}.Campaign.Event', default='campaign_main') == 'campaign_main':
|
||||
deep_set(new,
|
||||
keys=f'{task}.Campaign.Event',
|
||||
value=deep_get(self.args, f'{task}.Campaign.Event.option_{server}')[0])
|
||||
value=opts[0])
|
||||
|
||||
# Events does not allow default stage 12-4
|
||||
def default_stage(t, stage):
|
||||
|
||||
@@ -736,7 +736,7 @@
|
||||
"event_20201002_en": "Counterattack Within the Fjord",
|
||||
"event_20201012_cn": "Sundered Blue Rerun",
|
||||
"event_20201029_cn": "Universe in Unison",
|
||||
"event_20201126_cn": "Vacation Lane",
|
||||
"event_20201126_cn": "Vacation Lane Rerun",
|
||||
"event_20201229_cn": "Inverted Orthant Rerun",
|
||||
"event_20210121_cn": "Empyreal Tragicomedy Rerun",
|
||||
"event_20210225_cn": "Khorovod of Dawns Rime Rerun",
|
||||
|
||||
@@ -736,7 +736,7 @@
|
||||
"event_20201002_en": "Counterattack Within the Fjord",
|
||||
"event_20201012_cn": "奔る彩帆の青(復刻)",
|
||||
"event_20201029_cn": "激唱のユニバース",
|
||||
"event_20201126_cn": "バケーションレーン",
|
||||
"event_20201126_cn": "バケーションレーン(復刻)",
|
||||
"event_20201229_cn": "虚畳なりし限象(復刻)",
|
||||
"event_20210121_cn": "悲歎せし焔海の詩(復刻)",
|
||||
"event_20210225_cn": "暁射す氷華の嵐(復刻)",
|
||||
|
||||
@@ -736,7 +736,7 @@
|
||||
"event_20201002_en": "Counterattack Within the Fjord",
|
||||
"event_20201012_cn": "复刻划破海空之翼",
|
||||
"event_20201029_cn": "激唱的UNIVERSE",
|
||||
"event_20201126_cn": "假日航线",
|
||||
"event_20201126_cn": "复刻假日航线",
|
||||
"event_20201229_cn": "复刻负象限作战",
|
||||
"event_20210121_cn": "复刻神圣的悲喜剧",
|
||||
"event_20210225_cn": "复刻破晓冰华",
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
from typing import List
|
||||
|
||||
from module.base.button import ButtonGrid
|
||||
from module.base.decorator import cached_property
|
||||
from module.base.template import Template
|
||||
@@ -6,9 +7,9 @@ from module.logger import logger
|
||||
from module.map_detection.utils import Points
|
||||
from module.os_handler.map_event import MapEventHandler
|
||||
from module.os_handler.os_status import OSStatus
|
||||
from module.os_shop.item import OSShopItem as Item, OSShopItemGrid as ItemGrid
|
||||
from module.os_shop.selector import Selector
|
||||
from module.os_shop.ui import OSShopUI, OS_SHOP_SCROLL
|
||||
from module.os_shop.item import OSShopItem as Item, OSShopItemGrid as ItemGrid
|
||||
from module.statistics.utils import load_folder
|
||||
|
||||
|
||||
@@ -133,19 +134,21 @@ class PortShop(OSStatus, OSShopUI, Selector, MapEventHandler):
|
||||
|
||||
while True:
|
||||
pre_pos = self.pre_scroll(pre_pos, cur_pos)
|
||||
_items = self.os_shop_get_items(i, cur_pos)
|
||||
|
||||
for _ in range(2):
|
||||
_items = []
|
||||
for _ in range(3):
|
||||
_items = self.os_shop_get_items(i, cur_pos)
|
||||
if not len(_items) or any(not item.is_known_item() for item in _items):
|
||||
logger.warning('Empty OS shop or empty items, confirming')
|
||||
self.device.sleep((0.3, 0.5))
|
||||
self.device.screenshot()
|
||||
_items = self.os_shop_get_items(i, cur_pos)
|
||||
continue
|
||||
else:
|
||||
items += _items
|
||||
logger.info(f'Found {len(_items)} items in shop {i + 1} at pos {cur_pos:.2f}')
|
||||
break
|
||||
# always add items, even if last item list contains unknown items
|
||||
# so any known items can be scanned
|
||||
items += _items
|
||||
|
||||
if OS_SHOP_SCROLL.at_bottom(main=self):
|
||||
logger.info('OS shop reach bottom, stop')
|
||||
|
||||
@@ -340,6 +340,7 @@ class AlasGUI(Frame):
|
||||
@use_scope("groups")
|
||||
def set_group(self, group, arg_dict, config, task):
|
||||
group_name = group[0]
|
||||
server = to_server(deep_get(config, "Alas.Emulator.PackageName", "cn"))
|
||||
|
||||
output_list: List[Output] = []
|
||||
for arg, arg_dict in deep_iter(arg_dict, depth=1):
|
||||
@@ -371,11 +372,22 @@ class AlasGUI(Frame):
|
||||
output_kwargs["value"] = value
|
||||
# Options
|
||||
options = output_kwargs.pop("option", [])
|
||||
server = to_server(deep_get(config, 'Alas.Emulator.PackageName', 'cn'))
|
||||
available_events = deep_get(self.ALAS_ARGS, keys=f'{task}.{group_name}.{arg_name}.option_{server}')
|
||||
if available_events is not None:
|
||||
options = [opt for opt in options if opt in available_events]
|
||||
server_options = output_kwargs.get(f"option_{server}")
|
||||
if output_kwargs["widget_type"] == "select" and isinstance(server_options, list) and server_options:
|
||||
options = server_options
|
||||
output_kwargs["options"] = options
|
||||
if (
|
||||
task == "GemsFarming"
|
||||
and group_name == "Campaign"
|
||||
and arg_name == "Event"
|
||||
and output_kwargs["widget_type"] == "select"
|
||||
and len(options) == 1
|
||||
):
|
||||
continue
|
||||
if output_kwargs["widget_type"] == "select" and len(options) == 1:
|
||||
only_option = options[0]
|
||||
if only_option in output_kwargs.get("option_bold", []):
|
||||
output_kwargs["widget_type"] = "state"
|
||||
# Options label
|
||||
options_label = []
|
||||
for opt in options:
|
||||
|
||||