1
0
mirror of https://gitee.com/sui-feng-cb/AzurLaneAutoScript1 synced 2026-04-20 09:34:39 +08:00
This commit is contained in:
2026-04-18 23:56:17 +08:00
66 changed files with 691 additions and 92 deletions

View File

@@ -1,13 +1,13 @@
import os
import traceback
import imageio
from PIL import ImageDraw
from module.base.decorator import cached_property
from module.base.resource import Resource
from module.base.utils import *
from module.config.server import VALID_SERVER
from module.logger import logger
class Button(Resource):
@@ -153,6 +153,7 @@ class Button(Resource):
if not self._match_init:
if self.is_gif:
self.image = []
import imageio
for image in imageio.mimread(self.file):
image = image[:, :, :3].copy() if len(image.shape) == 3 else image
image = crop(image, self.area)

View File

@@ -1,4 +1,5 @@
from module.base.timer import Timer
from module.base.utils import area_offset
from module.campaign.assets import *
from module.campaign.campaign_event import CampaignEvent
from module.campaign.campaign_ocr import CampaignOcr
@@ -29,7 +30,7 @@ MODE_SWITCH_2.add_state('ex', SWITCH_2_EX)
MODE_SWITCH_20241219 = ModeSwitch('Mode_switch_20241219', is_selector=True, offset=(30, 30))
MODE_SWITCH_20241219.add_state('combat', SWITCH_20241219_COMBAT)
MODE_SWITCH_20241219.add_state('story', SWITCH_20241219_STORY)
ASIDE_SWITCH_20241219 = ModeSwitch('Aside_switch_20241219', is_selector=True, offset=(30, 30))
ASIDE_SWITCH_20241219 = ModeSwitch('Aside_switch_20241219', is_selector=True, offset=(20, 20))
ASIDE_SWITCH_20241219.add_state('part1', CHAPTER_20241219_PART1)
ASIDE_SWITCH_20241219.add_state('part2', CHAPTER_20241219_PART2)
ASIDE_SWITCH_20241219.add_state('sp', CHAPTER_20241219_SP)
@@ -321,6 +322,33 @@ class CampaignUI(MapOperation, CampaignEvent, CampaignOcr):
self.campaign_ensure_aside_20241219('sp')
self.campaign_ensure_chapter(chapter)
return True
if self.config.MAP_CHAPTER_SWITCH_20241219_SPEX:
if self._campaign_name_is_hard(f'{chapter}{stage}'):
self.config.override(Campaign_Mode='hard')
# normal, sp, ex
try:
ASIDE_SWITCH_20241219.offset = area_offset((-20, -20, 20, 20), (0, -37))
if chapter in ['sp', 't', 'ht']:
self.ui_goto_event()
self.campaign_ensure_mode_20241219('combat')
# normal is on the position of part2
self.campaign_ensure_aside_20241219('part2')
self.campaign_ensure_chapter(chapter)
return True
if chapter in ['ex_sp']:
self.ui_goto_event()
self.campaign_ensure_mode_20241219('combat')
self.campaign_ensure_aside_20241219('sp')
self.campaign_ensure_chapter(chapter)
return True
if chapter in ['ex_sp']:
self.ui_goto_event()
self.campaign_ensure_mode_20241219('combat')
self.campaign_ensure_aside_20241219('sp')
self.campaign_ensure_chapter(chapter)
return True
finally:
ASIDE_SWITCH_20241219.offset = (20, 20)
return False
def campaign_set_chapter(self, name, mode='normal'):

View File

@@ -336,6 +336,9 @@ class CampaignRun(CampaignEvent, ShopStatus):
logger.info(
'In event_20240912_cn, MapAchievement=threat_safe_without_3_stars fallback to 100_percent_clear')
self.config.override(StopCondition_MapAchievement='100_percent_clear')
if folder == 'event_20260417_cn':
if name in ['vsp', ]:
name = 'sp'
return name, folder
def can_use_auto_search_continue(self):

View File

@@ -16,8 +16,8 @@ from module.handler.info_handler import InfoHandler
from module.logger import logger
from module.map.map_grids import SelectedGrids
from module.retire.assets import DOCK_CHECK
from module.ui.assets import BACK_ARROW, COMMISSION_CHECK, REWARD_GOTO_COMMISSION
from module.ui.page import page_reward, page_commission
from module.ui.assets import BACK_ARROW, REWARD_GOTO_COMMISSION
from module.ui.page import page_commission, page_reward
from module.ui.scroll import Scroll
from module.ui.switch import Switch
from module.ui.ui import UI
@@ -523,8 +523,9 @@ class RewardCommission(UI, InfoHandler):
for button in [EXP_INFO_S_REWARD, GET_ITEMS_1, GET_ITEMS_2, GET_ITEMS_3]:
if self.appear(button, interval=1):
self.ensure_no_info_bar(timeout=1)
drop.add(self.device.image)
if drop:
self.ensure_no_info_bar(timeout=1)
drop.add(self.device.image)
REWARD_SAVE_CLICK.name = button.name
self.device.click(REWARD_SAVE_CLICK)

View File

@@ -1967,23 +1967,25 @@
"type": "select",
"value": "campaign_main",
"option": [
"event_20260326_cn"
"event_20220915_cn",
"event_20260417_cn"
],
"display": "hide",
"option_cn": [
"event_20260326_cn"
"event_20260417_cn"
],
"option_en": [
"event_20260326_cn"
"event_20260417_cn"
],
"option_jp": [
"event_20260326_cn"
"event_20260417_cn"
],
"option_tw": [
"event_20260326_cn"
"event_20220915_cn"
],
"option_bold": [
"event_20260326_cn"
"event_20220915_cn",
"event_20260417_cn"
]
},
"Mode": {
@@ -2386,22 +2388,24 @@
"type": "state",
"value": "campaign_main",
"option": [
"event_20260326_cn"
"event_20220915_cn",
"event_20260417_cn"
],
"option_cn": [
"event_20260326_cn"
"event_20260417_cn"
],
"option_en": [
"event_20260326_cn"
"event_20260417_cn"
],
"option_jp": [
"event_20260326_cn"
"event_20260417_cn"
],
"option_tw": [
"event_20260326_cn"
"event_20220915_cn"
],
"option_bold": [
"event_20260326_cn"
"event_20220915_cn",
"event_20260417_cn"
]
},
"Mode": {
@@ -2798,22 +2802,24 @@
"type": "state",
"value": "campaign_main",
"option": [
"event_20260326_cn"
"event_20220915_cn",
"event_20260417_cn"
],
"option_cn": [
"event_20260326_cn"
"event_20260417_cn"
],
"option_en": [
"event_20260326_cn"
"event_20260417_cn"
],
"option_jp": [
"event_20260326_cn"
"event_20260417_cn"
],
"option_tw": [
"event_20260326_cn"
"event_20220915_cn"
],
"option_bold": [
"event_20260326_cn"
"event_20220915_cn",
"event_20260417_cn"
]
},
"Mode": {
@@ -4603,22 +4609,24 @@
"type": "state",
"value": "campaign_main",
"option": [
"event_20260326_cn"
"event_20220915_cn",
"event_20260417_cn"
],
"option_cn": [
"event_20260326_cn"
"event_20260417_cn"
],
"option_en": [
"event_20260326_cn"
"event_20260417_cn"
],
"option_jp": [
"event_20260326_cn"
"event_20260417_cn"
],
"option_tw": [
"event_20260326_cn"
"event_20220915_cn"
],
"option_bold": [
"event_20260326_cn"
"event_20220915_cn",
"event_20260417_cn"
]
},
"Mode": {
@@ -5033,22 +5041,24 @@
"type": "state",
"value": "campaign_main",
"option": [
"event_20260326_cn"
"event_20220915_cn",
"event_20260417_cn"
],
"option_cn": [
"event_20260326_cn"
"event_20260417_cn"
],
"option_en": [
"event_20260326_cn"
"event_20260417_cn"
],
"option_jp": [
"event_20260326_cn"
"event_20260417_cn"
],
"option_tw": [
"event_20260326_cn"
"event_20220915_cn"
],
"option_bold": [
"event_20260326_cn"
"event_20220915_cn",
"event_20260417_cn"
]
},
"Mode": {
@@ -5463,22 +5473,24 @@
"type": "state",
"value": "campaign_main",
"option": [
"event_20260326_cn"
"event_20220915_cn",
"event_20260417_cn"
],
"option_cn": [
"event_20260326_cn"
"event_20260417_cn"
],
"option_en": [
"event_20260326_cn"
"event_20260417_cn"
],
"option_jp": [
"event_20260326_cn"
"event_20260417_cn"
],
"option_tw": [
"event_20260326_cn"
"event_20220915_cn"
],
"option_bold": [
"event_20260326_cn"
"event_20220915_cn",
"event_20260417_cn"
]
},
"Mode": {
@@ -5893,22 +5905,24 @@
"type": "state",
"value": "campaign_main",
"option": [
"event_20260326_cn"
"event_20220915_cn",
"event_20260417_cn"
],
"option_cn": [
"event_20260326_cn"
"event_20260417_cn"
],
"option_en": [
"event_20260326_cn"
"event_20260417_cn"
],
"option_jp": [
"event_20260326_cn"
"event_20260417_cn"
],
"option_tw": [
"event_20260326_cn"
"event_20220915_cn"
],
"option_bold": [
"event_20260326_cn"
"event_20220915_cn",
"event_20260417_cn"
]
},
"Mode": {
@@ -6313,22 +6327,24 @@
"type": "state",
"value": "campaign_main",
"option": [
"event_20260326_cn"
"event_20220915_cn",
"event_20260417_cn"
],
"option_cn": [
"event_20260326_cn"
"event_20260417_cn"
],
"option_en": [
"event_20260326_cn"
"event_20260417_cn"
],
"option_jp": [
"event_20260326_cn"
"event_20260417_cn"
],
"option_tw": [
"event_20260326_cn"
"event_20220915_cn"
],
"option_bold": [
"event_20260326_cn"
"event_20220915_cn",
"event_20260417_cn"
]
},
"Mode": {

View File

@@ -121,6 +121,7 @@ class ManualConfig:
# Events from 20240725 to 20241219 introduced new chapter switches
MAP_CHAPTER_SWITCH_20241219 = False
MAP_CHAPTER_SWITCH_20241219_SP = False
MAP_CHAPTER_SWITCH_20241219_SPEX = False
# Since event_20241219_cn chapter B unlocks event startup
# which means chapter AB are continuous
STAGE_INCREASE_AB = False

View File

@@ -799,6 +799,7 @@
"event_20251218_cn": "A Note Through the Firmament",
"event_20260226_cn": "Springtide Inn Online",
"event_20260326_cn": "The Vagabonds Recruitment Plan",
"event_20260417_cn": "Vacation Lane Beachside Brilliance",
"raid_20200624": "Air Raid Drills with Essex Rerun",
"raid_20210708": "Cross Wave rerun",
"raid_20220127": "Mystery Investigation",

View File

@@ -799,6 +799,7 @@
"event_20251218_cn": "天穹に響く音謡",
"event_20260226_cn": "春色旅籠Online",
"event_20260326_cn": "ワンダラー募集計画",
"event_20260417_cn": "バケーションレーン・きらめく砂浜",
"raid_20200624": "特別演習超空強襲波(復刻)",
"raid_20210708": "交錯する新たな波 (復刻)",
"raid_20220127": "秘密事件調査",

View File

@@ -799,6 +799,7 @@
"event_20251218_cn": "响彻于天穹之音",
"event_20260226_cn": "春满客栈Online",
"event_20260326_cn": "漫游者招募计划",
"event_20260417_cn": "假日航线闪耀海滨",
"raid_20200624": "复刻特别演习埃塞克斯级",
"raid_20210708": "复刻穿越彼方的水线",
"raid_20220127": "演习神秘事件调查",

View File

@@ -768,7 +768,7 @@
"event_20220526_cn": "泠誓光庭",
"event_20220728_cn": "復刻雄鷹的敘事歌",
"event_20220818_cn": "遠匯點作戰",
"event_20220915_cn": "紫絳槿嵐",
"event_20220915_cn": "復刻紫絳槿嵐",
"event_20221124_cn": "復刻鍊金術士與秘密遺跡群島",
"event_20221222_cn": "定向折疊",
"event_20230223_cn": "湮燼塵墟",
@@ -799,6 +799,7 @@
"event_20251218_cn": "響徹於天穹之音",
"event_20260226_cn": "春滿客棧Online",
"event_20260326_cn": "漫遊者招募計劃",
"event_20260417_cn": "Vacation Lane Beachside Brilliance",
"raid_20200624": "特別演習埃塞克斯級(復刻)",
"raid_20210708": "復刻穿越彼方的水線",
"raid_20220127": "演習神秘事件調查",

View File

@@ -8,7 +8,7 @@ from uiautomator2.xpath import XPath, XPathSelector
import module.config.server as server
from module.base.timer import Timer
from module.base.utils import color_similarity_2d, crop, random_rectangle_point, rgb2luma
from module.base.utils import color_similarity_2d, crop
from module.exception import GameNotRunningError, GameTooManyClickError, EmulatorNetworkError
from module.handler.assets import *
from module.logger import logger
@@ -109,26 +109,29 @@ class LoginHandler(UI):
if not self._user_agreement_timer.reached():
return False
confirm = self.image_color_button(
right = self.image_color_button(
area=(640, 360, 1280, 720), color=(78, 189, 234),
color_threshold=245, encourage=25, name='AGREEMENT_CONFIRM')
if confirm is None:
if right is None:
return False
scroll = self.image_color_button(
area=(640, 0, 1280, 720), color=(182, 189, 202),
color_threshold=245, encourage=5, name='AGREEMENT_SCROLL'
)
if scroll is not None:
# 2026.04.17 No scroll anymore, just bare swipe before clicking confirm
# if having blue button at right half of screen, but missing in left, it's a confirm button
# if having both, it's a blue button at middle confirming login
left = self.image_color_button(
area=(0, 360, 640, 720), color=(78, 189, 234),
color_threshold=245, encourage=25, name='AGREEMENT_CONFIRM')
if left is None:
# User agreement
p1 = random_rectangle_point(scroll.button)
p2 = random_rectangle_point(scroll.move((0, 350)).button)
self.device.swipe(p1, p2, name='AGREEMENT_SCROLL')
self.device.click(confirm)
# just somewhere at the middle
box = (350, 230, 920, 430)
self.device.swipe_vector((0, -150), box, name='AGREEMENT_SCROLL')
self.device.swipe_vector((0, -150), box, name='AGREEMENT_SCROLL')
self.device.click(right)
self._user_agreement_timer.reset()
return True
else:
# User login
self.device.click(confirm)
self.device.click(right)
self._user_agreement_timer.reset()
return True

View File

@@ -41,6 +41,13 @@ class MetaDigitCounter(DigitCounter):
if re.match(r'^[0123]3$', result):
result = f'{result[0]}/{result[1]}'
# 1/40/1400 -> 140/1400
for suffix in ['/1400', '/200']:
if result.endswith(suffix):
point = result[:-len(suffix)]
point = point.replace('/', '')
result = point + suffix
return result

View File

@@ -358,12 +358,13 @@ class RewardResearch(ResearchSelector, ResearchQueue, StorageHandler):
total = 0
with self.stat.new(
genre='research', method=self.config.DropRecord_ResearchRecord
) as record:
) as drop:
# Take screenshots of project list
record.add(self.device.image)
drop.add(self.device.image)
end_confirm = Timer(1, count=3)
item_confirm = Timer(1.5, count=5)
item_interval = Timer(0.2, count=0)
record_button = None
while 1:
if skip_first_screenshot:
@@ -380,31 +381,42 @@ class RewardResearch(ResearchSelector, ResearchQueue, StorageHandler):
end_confirm.reset()
# Get items
appear_button = self.get_items()
if appear_button is not None:
if appear_button == record_button:
if item_confirm.reached():
# Record drops and close get items
self.drop_record(drop=record)
self.device.click(GET_ITEMS_RESEARCH_SAVE)
if drop:
# record item drop
appear_button = self.get_items()
if appear_button is not None:
if appear_button == record_button:
if item_confirm.reached():
# Record drops and close get items
self.drop_record(drop=drop)
self.device.click(GET_ITEMS_RESEARCH_SAVE)
item_confirm.reset()
record_button = None
total += 1
continue
else:
logger.info(f'{appear_button} appeared')
record_button = appear_button
item_confirm.reset()
record_button = None
else:
item_confirm.reset()
record_button = None
else:
# no drop saving, just click it
if item_interval.reached():
appear_button = self.get_items()
if appear_button is not None:
self.device.click(GET_ITEMS_RESEARCH_SAVE)
item_interval.reset()
total += 1
continue
else:
logger.info(f'{appear_button} appeared')
record_button = appear_button
item_confirm.reset()
else:
item_confirm.reset()
record_button = None
# Claim rewards
if self.appear_then_click(QUEUE_CLAIM_REWARD, offset=None, interval=5):
continue
if total <= 0:
record.clear()
drop.clear()
logger.info(f'Received rewards from {total} projects')
return total

View File

@@ -54,6 +54,7 @@ TEMPLATE_SIREN_Amity = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN
TEMPLATE_SIREN_Arethusa = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Arethusa.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Arethusa.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Arethusa.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Arethusa.gif'})
TEMPLATE_SIREN_Arizona = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Arizona.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Arizona.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Arizona.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Arizona.gif'})
TEMPLATE_SIREN_ArkRoyal = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_ArkRoyal.gif', 'en': './assets/en/template/TEMPLATE_SIREN_ArkRoyal.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_ArkRoyal.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_ArkRoyal.gif'})
TEMPLATE_SIREN_ArkRoyalG = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_ArkRoyalG.gif', 'en': './assets/en/template/TEMPLATE_SIREN_ArkRoyalG.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_ArkRoyalG.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_ArkRoyalG.gif'})
TEMPLATE_SIREN_Asanagi = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Asanagi.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Asanagi.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Asanagi.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Asanagi.gif'})
TEMPLATE_SIREN_Atlanta = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Atlanta.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Atlanta.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Atlanta.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Atlanta.gif'})
TEMPLATE_SIREN_August = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_August.gif', 'en': './assets/en/template/TEMPLATE_SIREN_August.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_August.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_August.gif'})
@@ -69,6 +70,7 @@ TEMPLATE_SIREN_Bellona = Template(file={'cn': './assets/cn/template/TEMPLATE_SIR
TEMPLATE_SIREN_BlackDragonBoss01 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_BlackDragonBoss01.gif', 'en': './assets/en/template/TEMPLATE_SIREN_BlackDragonBoss01.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_BlackDragonBoss01.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_BlackDragonBoss01.gif'})
TEMPLATE_SIREN_BlackDragonBoss02 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_BlackDragonBoss02.gif', 'en': './assets/en/template/TEMPLATE_SIREN_BlackDragonBoss02.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_BlackDragonBoss02.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_BlackDragonBoss02.gif'})
TEMPLATE_SIREN_BolzanoAlter = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_BolzanoAlter.gif', 'en': './assets/en/template/TEMPLATE_SIREN_BolzanoAlter.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_BolzanoAlter.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_BolzanoAlter.gif'})
TEMPLATE_SIREN_Bremerton = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Bremerton.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Bremerton.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Bremerton.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Bremerton.gif'})
TEMPLATE_SIREN_CA = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_CA.gif', 'en': './assets/en/template/TEMPLATE_SIREN_CA.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_CA.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_CA.gif'})
TEMPLATE_SIREN_CAalchemist = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_CAalchemist.gif', 'en': './assets/en/template/TEMPLATE_SIREN_CAalchemist.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_CAalchemist.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_CAalchemist.gif'})
TEMPLATE_SIREN_CAalchemist2 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_CAalchemist2.gif', 'en': './assets/en/template/TEMPLATE_SIREN_CAalchemist2.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_CAalchemist2.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_CAalchemist2.gif'})
@@ -88,6 +90,7 @@ TEMPLATE_SIREN_CVpurple = Template(file={'cn': './assets/cn/template/TEMPLATE_SI
TEMPLATE_SIREN_Carabiniere = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Carabiniere.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Carabiniere.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Carabiniere.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Carabiniere.gif'})
TEMPLATE_SIREN_CesareAlter = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_CesareAlter.gif', 'en': './assets/en/template/TEMPLATE_SIREN_CesareAlter.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_CesareAlter.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_CesareAlter.gif'})
TEMPLATE_SIREN_Champagne = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Champagne.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Champagne.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Champagne.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Champagne.gif'})
TEMPLATE_SIREN_Cheshire = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Cheshire.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Cheshire.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Cheshire.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Cheshire.gif'})
TEMPLATE_SIREN_ChihayaKisaragi = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_ChihayaKisaragi.gif', 'en': './assets/en/template/TEMPLATE_SIREN_ChihayaKisaragi.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_ChihayaKisaragi.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_ChihayaKisaragi.gif'})
TEMPLATE_SIREN_Chitose = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Chitose.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Chitose.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Chitose.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Chitose.gif'})
TEMPLATE_SIREN_Chiyoda = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Chiyoda.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Chiyoda.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Chiyoda.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Chiyoda.gif'})
@@ -113,6 +116,7 @@ TEMPLATE_SIREN_ELpurple = Template(file={'cn': './assets/cn/template/TEMPLATE_SI
TEMPLATE_SIREN_Elizabeth3 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Elizabeth3.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Elizabeth3.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Elizabeth3.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Elizabeth3.gif'})
TEMPLATE_SIREN_Formidable = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Formidable.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Formidable.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Formidable.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Formidable.gif'})
TEMPLATE_SIREN_Fox = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Fox.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Fox.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Fox.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Fox.gif'})
TEMPLATE_SIREN_FuShunG = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_FuShunG.gif', 'en': './assets/en/template/TEMPLATE_SIREN_FuShunG.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_FuShunG.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_FuShunG.gif'})
TEMPLATE_SIREN_Gascogne = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Gascogne.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Gascogne.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Gascogne.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Gascogne.gif'})
TEMPLATE_SIREN_GascogneIdol = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_GascogneIdol.gif', 'en': './assets/en/template/TEMPLATE_SIREN_GascogneIdol.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_GascogneIdol.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_GascogneIdol.gif'})
TEMPLATE_SIREN_Gloucester = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Gloucester.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Gloucester.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Gloucester.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Gloucester.gif'})
@@ -164,6 +168,7 @@ TEMPLATE_SIREN_LeMars_ghost = Template(file={'cn': './assets/cn/template/TEMPLAT
TEMPLATE_SIREN_Leipzig = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Leipzig.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Leipzig.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Leipzig.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Leipzig.gif'})
TEMPLATE_SIREN_Leipzig_g = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Leipzig_g.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Leipzig_g.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Leipzig_g.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Leipzig_g.gif'})
TEMPLATE_SIREN_Lexington = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Lexington.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Lexington.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Lexington.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Lexington.gif'})
TEMPLATE_SIREN_Lexington2 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Lexington2.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Lexington2.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Lexington2.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Lexington2.gif'})
TEMPLATE_SIREN_Littorio = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Littorio.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Littorio.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Littorio.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Littorio.gif'})
TEMPLATE_SIREN_Lover = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Lover.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Lover.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Lover.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Lover.gif'})
TEMPLATE_SIREN_Magdeburg = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Magdeburg.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Magdeburg.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Magdeburg.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Magdeburg.gif'})
@@ -176,6 +181,7 @@ TEMPLATE_SIREN_MisakiDOA = Template(file={'cn': './assets/cn/template/TEMPLATE_S
TEMPLATE_SIREN_Miyuki = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Miyuki.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Miyuki.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Miyuki.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Miyuki.gif'})
TEMPLATE_SIREN_Nagato = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Nagato.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Nagato.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Nagato.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Nagato.gif'})
TEMPLATE_SIREN_NagisaDOA = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_NagisaDOA.gif', 'en': './assets/en/template/TEMPLATE_SIREN_NagisaDOA.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_NagisaDOA.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_NagisaDOA.gif'})
TEMPLATE_SIREN_Nakhimov = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Nakhimov.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Nakhimov.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Nakhimov.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Nakhimov.gif'})
TEMPLATE_SIREN_Nelson = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Nelson.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Nelson.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Nelson.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Nelson.gif'})
TEMPLATE_SIREN_Neptune_ghost = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Neptune_ghost.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Neptune_ghost.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Neptune_ghost.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Neptune_ghost.gif'})
TEMPLATE_SIREN_Northampton = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Northampton.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Northampton.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Northampton.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Northampton.gif'})
@@ -189,6 +195,7 @@ TEMPLATE_SIREN_PrinceOfWales = Template(file={'cn': './assets/cn/template/TEMPLA
TEMPLATE_SIREN_PrinzAdalbert = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_PrinzAdalbert.gif', 'en': './assets/en/template/TEMPLATE_SIREN_PrinzAdalbert.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_PrinzAdalbert.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_PrinzAdalbert.gif'})
TEMPLATE_SIREN_PrinzEugen = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_PrinzEugen.gif', 'en': './assets/en/template/TEMPLATE_SIREN_PrinzEugen.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_PrinzEugen.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_PrinzEugen.gif'})
TEMPLATE_SIREN_PrinzHeinrich = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_PrinzHeinrich.gif', 'en': './assets/en/template/TEMPLATE_SIREN_PrinzHeinrich.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_PrinzHeinrich.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_PrinzHeinrich.gif'})
TEMPLATE_SIREN_Raffaello = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Raffaello.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Raffaello.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Raffaello.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Raffaello.gif'})
TEMPLATE_SIREN_Renown = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Renown.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Renown.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Renown.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Renown.gif'})
TEMPLATE_SIREN_Revenge = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Revenge.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Revenge.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Revenge.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Revenge.gif'})
TEMPLATE_SIREN_Rodney = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Rodney.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Rodney.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Rodney.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Rodney.gif'})
@@ -252,6 +259,7 @@ TEMPLATE_SIREN_Weser = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN
TEMPLATE_SIREN_Wichita = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Wichita.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Wichita.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Wichita.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Wichita.gif'})
TEMPLATE_SIREN_Yamashiro = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Yamashiro.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Yamashiro.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Yamashiro.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Yamashiro.gif'})
TEMPLATE_SIREN_York = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_York.gif', 'en': './assets/en/template/TEMPLATE_SIREN_York.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_York.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_York.gif'})
TEMPLATE_SIREN_Yorktown2 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Yorktown2.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Yorktown2.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Yorktown2.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Yorktown2.gif'})
TEMPLATE_SIREN_Yuudachi = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Yuudachi.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Yuudachi.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Yuudachi.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Yuudachi.gif'})
TEMPLATE_SIREN_Z18 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Z18.png', 'en': './assets/en/template/TEMPLATE_SIREN_Z18.png', 'jp': './assets/jp/template/TEMPLATE_SIREN_Z18.png', 'tw': './assets/tw/template/TEMPLATE_SIREN_Z18.png'})
TEMPLATE_SIREN_Z19 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Z19.png', 'en': './assets/en/template/TEMPLATE_SIREN_Z19.png', 'jp': './assets/jp/template/TEMPLATE_SIREN_Z19.png', 'tw': './assets/tw/template/TEMPLATE_SIREN_Z19.png'})

View File

@@ -29,7 +29,7 @@ class Switch:
"""
self.name = name
self.is_selector = is_selector
self.offset = offset
self._offset = offset
self.state_list = []
self.set_unknown_timer = Timer(5, count=10)
self.set_click_timer = Timer(1, count=2)
@@ -49,9 +49,19 @@ class Switch:
'state': state,
'check_button': check_button,
'click_button': click_button if click_button is not None else check_button,
'offset': offset if offset else self.offset
'offset': offset if offset else self._offset
})
@property
def offset(self):
return self._offset
@offset.setter
def offset(self, value):
self._offset = value
for data in self.state_list:
data['offset'] = value
def appear(self, main):
"""
Args: