Merge pull request #3935 from LmeSzinc/dev

Add: Event Welcome to Little Academy (coalition_20240627)
This commit is contained in:
LmeSzinc 2024-06-28 03:04:20 +08:00 committed by GitHub
commit 58bfbe011d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
87 changed files with 661 additions and 199 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

View File

@ -197,4 +197,6 @@ To add a new event, add a new row in here, and run `python -m module.config.conf
| 20240521 | event 20240521 cn | Light of the Martyrium | 绽放于辉光之城 | Light of the Martyrium | 赫輝のマルティリウム | - |
| 20240523 | event 20230525 cn | Confluence of Nothingness | - | - | - | 空相交會點 |
| 20240613 | event 20201012 cn | Sundered Blue | - | - | - | 復刻劃破海空之翼 |
| 20240620 | event 20220428 cn | Rondo at Rainbow's End Rerun | 复刻虹彩的终幕曲 | Rondo at Rainbow's End Rerun | 吟ずる瑠璃の楽章(復刻) | - |
| 20240620 | event 20220428 cn | Rondo at Rainbow's End Rerun | 复刻虹彩的终幕曲 | Rondo at Rainbow's End Rerun | 吟ずる瑠璃の楽章(復刻) | - |
| 20240627 | event 20231026 cn | Tempesta and the Fountain of Youth | - | - | - | 飓風與青春之泉 |
| 20240627 | coalition 20240627 | Welcome to Little Academy | 欢迎来到童心学院 | Welcome to Little Academy | リトル学園へようこそ | - |

View File

@ -568,7 +568,7 @@
"ServerUpdate": "00:00"
},
"Campaign": {
"Name": "TC-3",
"Name": "dynamic",
"Event": "campaign_main",
"Mode": "normal",
"UseClearMode": true,
@ -578,6 +578,7 @@
"AmbushEvade": true
},
"Coalition": {
"Mode": "hard",
"Fleet": "single"
},
"StopCondition": {
@ -1148,6 +1149,7 @@
"AmbushEvade": true
},
"Coalition": {
"Mode": "hard",
"Fleet": "single"
},
"StopCondition": {

View File

@ -86,3 +86,14 @@ class AdbManager(DeployConfig):
initer._device.shell(["rm", "/data/local/tmp/minicap"])
initer._device.shell(["rm", "/data/local/tmp/minicap.so"])
if __name__ == '__main__':
import psutil
for c in psutil.net_connections():
# print(type(c.laddr), c.laddr, type(c.raddr), c.raddr)
try:
if c.laddr.port == 5038 or c.raddr.port == 5038:
print(c.status, c.pid)
except AttributeError:
continue

View File

@ -219,7 +219,7 @@ class AssetExtractor:
modules = [m for m in os.listdir(AzurLaneConfig.ASSETS_FOLDER + '/cn')
if os.path.isdir(os.path.join(AzurLaneConfig.ASSETS_FOLDER + '/cn', m))]
process_map(worker, modules)
process_map(worker, modules, max_workers=2)
if __name__ == '__main__':

View File

@ -38,7 +38,7 @@ class Config:
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.276, 0.974)
cfg = AzurLaneConfig('alas', task='Alas').merge(Config())
cfg = AzurLaneConfig('alas5', task='Alas').merge(Config())
cfg.DETECTION_BACKEND = 'perspective'
az = CampaignBase(cfg)
az.map = MAP
@ -165,4 +165,4 @@ if __name__ == '__main__':
-- -- -- -- -- --
After run, Result is ready to copy.
"""
sim = SwipeSimulate((420, 0)).run()
sim = SwipeSimulate((380, 0)).run()

View File

@ -1,6 +1,5 @@
import shutil
import numpy as np
from tqdm import tqdm
import module.config.server as server
@ -8,8 +7,8 @@ import module.config.server as server
server.server = 'cn' # Edit your server here.
from module.logger import logger
from module.statistics.battle_status import BattleStatusStatistics
from module.statistics.get_items import GetItemsStatistics
from module.statistics.image.battle_status import BattleStatusStatistics
from module.statistics.image.get_items import GetItemsStatistics
from module.statistics.utils import *
STATUS_ITEMS_INTERVAL = 10

View File

@ -304,15 +304,15 @@ class MapData:
# portal
self.portal = []
if self.map_id in MAP_EVENT_LIST:
for event_id in MAP_EVENT_LIST[self.map_id]['event_list'].values():
event = MAP_EVENT_TEMPLATE[event_id]
for effect in event['effect'].values():
if effect[0] == 'jump':
address = event['address']
address = location2node((address[1], address[0]))
target = location2node((effect[2], effect[1]))
self.portal.append((address, target))
# if self.map_id in MAP_EVENT_LIST:
# for event_id in MAP_EVENT_LIST[self.map_id]['event_list'].values():
# event = MAP_EVENT_TEMPLATE[event_id]
# for effect in event['effect'].values():
# if effect[0] == 'jump':
# address = event['address']
# address = location2node((address[1], address[0]))
# target = location2node((effect[2], effect[1]))
# self.portal.append((address, target))
# land_based
# land_based = {{6, 7, 1}, ...}
@ -676,8 +676,8 @@ Arguments:
adapted for war_archives usage
"""
FILE = '../AzurLaneLuaScripts'
FOLDER = './campaign/test'
KEYWORD = ''
FOLDER = './campaign/event_20240521_cn'
KEYWORD = '1810001'
SELECT = True
OVERWRITE = True
IS_WAR_ARCHIVES = False
@ -686,8 +686,8 @@ ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C'
LOADER = LuaLoader(FILE, server='CN')
DATA = LOADER.load('./sharecfgdata/chapter_template.lua')
DATA_LOOP = LOADER.load('./sharecfgdata/chapter_template_loop.lua')
MAP_EVENT_LIST = LOADER.load('./sharecfg/map_event_list.lua')
MAP_EVENT_TEMPLATE = LOADER.load('./sharecfg/map_event_template.lua')
# MAP_EVENT_LIST = LOADER.load('./sharecfg/map_event_list.lua')
# MAP_EVENT_TEMPLATE = LOADER.load('./sharecfg/map_event_template.lua')
EXPECTATION_DATA = LOADER.load('./sharecfgdata/expedition_data_template.lua')
ct = ChapterTemplate()

View File

@ -126,7 +126,7 @@ Arguments:
FILE: Path to repository, such as 'xxx/AzurLaneLuaScripts'
SAVE: File to save, 'module/os/map_data.py'
"""
FOLDER = ''
FOLDER = r'E:\ProgramData\Pycharm\AzurLaneLuaScripts'
SAVE = 'module/os/map_data.py'
LOADER = LuaLoader(FOLDER)

View File

@ -15,15 +15,28 @@ class Config:
"""
Paste the config of map file here
"""
pass
INTERNAL_LINES_FIND_PEAKS_PARAMETERS = {
'height': (80, 255 - 17),
'width': (0.9, 10),
'prominence': 10,
'distance': 35,
}
EDGE_LINES_FIND_PEAKS_PARAMETERS = {
'height': (255 - 17, 255),
'prominence': 10,
'distance': 50,
'wlen': 1000
}
HOMO_EDGE_COLOR_RANGE = (0, 17)
HOMO_EDGE_HOUGHLINES_THRESHOLD = 210
from module.os.config import OSConfig
cfg = AzurLaneConfig('alas').merge(OSConfig())
cfg = AzurLaneConfig('alas5').merge(Config())
# Folder to save temp images
folder = './screenshots/relative_crop'
# Put Screenshot here
file = ''
file = r'E:\ProgramData\Pycharm\StarRailCopilot\screenshots\dev_screenshots\2023-12-22_00-41-21-728648.png'
i = load_image(file)
grids = View(cfg)
@ -36,7 +49,7 @@ os.makedirs(folder, exist_ok=True)
for grid in grids:
# Find more relative_crop area in module/map/grid_predictor.py
# This one is for `predict_enemy_genre`
piece = rgb2gray(grid.relative_crop((-0.5, -1, 0.5, 0), shape=(60, 60)))
piece = rgb2gray(grid.relative_crop((-0, -0.2, 0.8, 0.2), shape=(40, 20)))
file = '%s_%s_%s.png' % (int(time.time()), grid.location[0], grid.location[1])
file = os.path.join(folder, file)

View File

@ -17,7 +17,19 @@ class Config:
"""
Paste the config of map file here
"""
pass
INTERNAL_LINES_FIND_PEAKS_PARAMETERS = {
'height': (80, 255 - 17),
'width': (0.9, 10),
'prominence': 10,
'distance': 35,
}
EDGE_LINES_FIND_PEAKS_PARAMETERS = {
'height': (255 - 17, 255),
'prominence': 10,
'distance': 50,
'wlen': 1000
}
HOMO_EDGE_COLOR_RANGE = (0, 17)
"""
@ -41,10 +53,11 @@ Arguments:
NAME: Siren name, images will save in <FOLDER>/<NAME>
NODE: Node in local map view, that you are going to crop.
"""
CONFIG = 'alas'
FOLDER = ''
NAME = 'Deutschland'
NODE = 'D5'
CONFIG = 'alas5'
FOLDER = r'E:\ProgramData\Pycharm\Azurlane-image\screenshot\record'
NAME = 'huiguangzhihe'
NODE = 'E5'
if __name__ == '__main__':
for folder in [FOLDER, os.path.join(FOLDER, NAME)]:

View File

@ -27,7 +27,7 @@ Arguments:
"""
# FOLDER = ''
# NAME = 'Deutschland'
AREA = (32, 32, 54, 52)
AREA = (25, 16, 37, 34)
THRESHOLD = 0.92
if __name__ == '__main__':

View File

@ -137,7 +137,7 @@ Arguments:
FILE: Path to AzurLaneData, '<your_folder>/AzurLaneData'
SAVE: File to save, 'module/research/project_data.py'
"""
FOLDER = ''
FOLDER = r'E:\ProgramData\Pycharm\AzurLaneLuaScripts'
SAVE = 'module/research/project_data.py'
TechnologyTemplate().write(SAVE)

View File

@ -20,7 +20,7 @@ class LuaLoader:
]
def __init__(self, folder, server='zh-CN'):
self.folder = folder
self.folder = os.path.abspath(folder)
self._server = ''
self.server = server

View File

@ -4,16 +4,32 @@ from module.base.template import Template
# This file was automatically generated by dev_tools/button_extract.py.
# Don't modify it manually.
ACADEMY_EASY = Button(area={'cn': (201, 290, 243, 311), 'en': (186, 294, 229, 311), 'jp': (201, 290, 243, 311), 'tw': (201, 290, 243, 311)}, color={'cn': (172, 141, 121), 'en': (178, 153, 137), 'jp': (172, 141, 121), 'tw': (172, 141, 121)}, button={'cn': (201, 290, 243, 311), 'en': (186, 294, 229, 311), 'jp': (201, 290, 243, 311), 'tw': (201, 290, 243, 311)}, file={'cn': './assets/cn/coalition/ACADEMY_EASY.png', 'en': './assets/en/coalition/ACADEMY_EASY.png', 'jp': './assets/cn/coalition/ACADEMY_EASY.png', 'tw': './assets/cn/coalition/ACADEMY_EASY.png'})
ACADEMY_EX = Button(area={'cn': (712, 178, 744, 196), 'en': (681, 179, 705, 193), 'jp': (712, 178, 744, 196), 'tw': (712, 178, 744, 196)}, color={'cn': (151, 200, 191), 'en': (177, 210, 200), 'jp': (151, 200, 191), 'tw': (151, 200, 191)}, button={'cn': (712, 178, 744, 196), 'en': (681, 179, 705, 193), 'jp': (712, 178, 744, 196), 'tw': (712, 178, 744, 196)}, file={'cn': './assets/cn/coalition/ACADEMY_EX.png', 'en': './assets/en/coalition/ACADEMY_EX.png', 'jp': './assets/cn/coalition/ACADEMY_EX.png', 'tw': './assets/cn/coalition/ACADEMY_EX.png'})
ACADEMY_HARD = Button(area={'cn': (956, 503, 1000, 524), 'en': (947, 506, 992, 520), 'jp': (956, 503, 1000, 524), 'tw': (956, 503, 1000, 524)}, color={'cn': (169, 137, 118), 'en': (168, 136, 117), 'jp': (169, 137, 118), 'tw': (169, 137, 118)}, button={'cn': (956, 503, 1000, 524), 'en': (947, 506, 992, 520), 'jp': (956, 503, 1000, 524), 'tw': (956, 503, 1000, 524)}, file={'cn': './assets/cn/coalition/ACADEMY_HARD.png', 'en': './assets/en/coalition/ACADEMY_HARD.png', 'jp': './assets/cn/coalition/ACADEMY_HARD.png', 'tw': './assets/cn/coalition/ACADEMY_HARD.png'})
ACADEMY_MODE_BATTLE = Button(area={'cn': (105, 654, 182, 675), 'en': (99, 656, 165, 672), 'jp': (105, 654, 182, 675), 'tw': (105, 654, 182, 675)}, color={'cn': (207, 169, 129), 'en': (207, 172, 137), 'jp': (207, 169, 129), 'tw': (207, 169, 129)}, button={'cn': (105, 654, 182, 675), 'en': (99, 656, 165, 672), 'jp': (105, 654, 182, 675), 'tw': (105, 654, 182, 675)}, file={'cn': './assets/cn/coalition/ACADEMY_MODE_BATTLE.png', 'en': './assets/en/coalition/ACADEMY_MODE_BATTLE.png', 'jp': './assets/cn/coalition/ACADEMY_MODE_BATTLE.png', 'tw': './assets/cn/coalition/ACADEMY_MODE_BATTLE.png'})
ACADEMY_MODE_STORY = Button(area={'cn': (224, 654, 302, 675), 'en': (238, 655, 288, 673), 'jp': (224, 654, 302, 675), 'tw': (224, 654, 302, 675)}, color={'cn': (210, 175, 139), 'en': (212, 175, 129), 'jp': (210, 175, 139), 'tw': (210, 175, 139)}, button={'cn': (224, 654, 302, 675), 'en': (238, 655, 288, 673), 'jp': (224, 654, 302, 675), 'tw': (224, 654, 302, 675)}, file={'cn': './assets/cn/coalition/ACADEMY_MODE_STORY.png', 'en': './assets/en/coalition/ACADEMY_MODE_STORY.png', 'jp': './assets/cn/coalition/ACADEMY_MODE_STORY.png', 'tw': './assets/cn/coalition/ACADEMY_MODE_STORY.png'})
ACADEMY_NORMAL = Button(area={'cn': (604, 411, 646, 433), 'en': (568, 416, 638, 430), 'jp': (604, 411, 646, 433), 'tw': (604, 411, 646, 433)}, color={'cn': (169, 137, 118), 'en': (168, 138, 120), 'jp': (169, 137, 118), 'tw': (169, 137, 118)}, button={'cn': (604, 411, 646, 433), 'en': (568, 416, 638, 430), 'jp': (604, 411, 646, 433), 'tw': (604, 411, 646, 433)}, file={'cn': './assets/cn/coalition/ACADEMY_NORMAL.png', 'en': './assets/en/coalition/ACADEMY_NORMAL.png', 'jp': './assets/cn/coalition/ACADEMY_NORMAL.png', 'tw': './assets/cn/coalition/ACADEMY_NORMAL.png'})
ACADEMY_PT_OCR = Button(area={'cn': (1125, 208, 1265, 225), 'en': (1125, 208, 1265, 225), 'jp': (1125, 208, 1265, 225), 'tw': (1125, 208, 1265, 225)}, color={'cn': (124, 105, 88), 'en': (124, 105, 88), 'jp': (124, 105, 88), 'tw': (124, 105, 88)}, button={'cn': (1125, 208, 1265, 225), 'en': (1125, 208, 1265, 225), 'jp': (1125, 208, 1265, 225), 'tw': (1125, 208, 1265, 225)}, file={'cn': './assets/cn/coalition/ACADEMY_PT_OCR.png', 'en': './assets/en/coalition/ACADEMY_PT_OCR.png', 'jp': './assets/jp/coalition/ACADEMY_PT_OCR.png', 'tw': './assets/tw/coalition/ACADEMY_PT_OCR.png'})
ACADEMY_SP = Button(area={'cn': (333, 580, 362, 597), 'en': (339, 582, 363, 596), 'jp': (333, 580, 362, 597), 'tw': (333, 580, 362, 597)}, color={'cn': (176, 146, 126), 'en': (164, 131, 113), 'jp': (176, 146, 126), 'tw': (176, 146, 126)}, button={'cn': (333, 580, 362, 597), 'en': (339, 582, 363, 596), 'jp': (333, 580, 362, 597), 'tw': (333, 580, 362, 597)}, file={'cn': './assets/cn/coalition/ACADEMY_SP.png', 'en': './assets/en/coalition/ACADEMY_SP.png', 'jp': './assets/cn/coalition/ACADEMY_SP.png', 'tw': './assets/cn/coalition/ACADEMY_SP.png'})
ACADEMY_SWITCH_MULTI = Button(area={'cn': (1088, 458, 1216, 486), 'en': (1089, 458, 1215, 486), 'jp': (1088, 458, 1216, 486), 'tw': (1088, 458, 1216, 486)}, color={'cn': (234, 184, 61), 'en': (200, 156, 54), 'jp': (234, 184, 61), 'tw': (234, 184, 61)}, button={'cn': (1088, 458, 1216, 486), 'en': (1089, 458, 1215, 486), 'jp': (1088, 458, 1216, 486), 'tw': (1088, 458, 1216, 486)}, file={'cn': './assets/cn/coalition/ACADEMY_SWITCH_MULTI.png', 'en': './assets/en/coalition/ACADEMY_SWITCH_MULTI.png', 'jp': './assets/cn/coalition/ACADEMY_SWITCH_MULTI.png', 'tw': './assets/cn/coalition/ACADEMY_SWITCH_MULTI.png'})
ACADEMY_SWITCH_SINGLE = Button(area={'cn': (941, 458, 1070, 486), 'en': (941, 458, 1070, 486), 'jp': (941, 458, 1070, 486), 'tw': (941, 458, 1070, 486)}, color={'cn': (232, 182, 60), 'en': (202, 158, 54), 'jp': (232, 182, 60), 'tw': (232, 182, 60)}, button={'cn': (941, 458, 1070, 486), 'en': (941, 458, 1070, 486), 'jp': (941, 458, 1070, 486), 'tw': (941, 458, 1070, 486)}, file={'cn': './assets/cn/coalition/ACADEMY_SWITCH_SINGLE.png', 'en': './assets/en/coalition/ACADEMY_SWITCH_SINGLE.png', 'jp': './assets/cn/coalition/ACADEMY_SWITCH_SINGLE.png', 'tw': './assets/cn/coalition/ACADEMY_SWITCH_SINGLE.png'})
ACEDEMY_FLEET_PREPARATION = Button(area={'cn': (1025, 537, 1132, 562), 'en': (1033, 538, 1125, 560), 'jp': (1025, 537, 1132, 562), 'tw': (1025, 537, 1132, 562)}, color={'cn': (106, 149, 226), 'en': (108, 151, 225), 'jp': (106, 149, 226), 'tw': (106, 149, 226)}, button={'cn': (1025, 537, 1132, 562), 'en': (1033, 538, 1125, 560), 'jp': (1025, 537, 1132, 562), 'tw': (1025, 537, 1132, 562)}, file={'cn': './assets/cn/coalition/ACEDEMY_FLEET_PREPARATION.png', 'en': './assets/en/coalition/ACEDEMY_FLEET_PREPARATION.png', 'jp': './assets/cn/coalition/ACEDEMY_FLEET_PREPARATION.png', 'tw': './assets/cn/coalition/ACEDEMY_FLEET_PREPARATION.png'})
COALITION_ACADEMY_BACK = Button(area={'cn': (44, 48, 62, 74), 'en': (44, 48, 62, 74), 'jp': (44, 48, 62, 74), 'tw': (44, 48, 62, 74)}, color={'cn': (162, 188, 194), 'en': (162, 188, 194), 'jp': (162, 188, 194), 'tw': (162, 188, 194)}, button={'cn': (44, 48, 62, 74), 'en': (44, 48, 62, 74), 'jp': (44, 48, 62, 74), 'tw': (44, 48, 62, 74)}, file={'cn': './assets/cn/coalition/COALITION_ACADEMY_BACK.png', 'en': './assets/en/coalition/COALITION_ACADEMY_BACK.png', 'jp': './assets/jp/coalition/COALITION_ACADEMY_BACK.png', 'tw': './assets/tw/coalition/COALITION_ACADEMY_BACK.png'})
COALITION_ACADEMY_CAMPAIGN_CHECK = Button(area={'cn': (131, 50, 168, 83), 'en': (123, 52, 176, 78), 'jp': (131, 50, 168, 83), 'tw': (131, 50, 168, 83)}, color={'cn': (165, 210, 212), 'en': (156, 197, 198), 'jp': (165, 210, 212), 'tw': (165, 210, 212)}, button={'cn': (131, 50, 168, 83), 'en': (123, 52, 176, 78), 'jp': (131, 50, 168, 83), 'tw': (131, 50, 168, 83)}, file={'cn': './assets/cn/coalition/COALITION_ACADEMY_CAMPAIGN_CHECK.png', 'en': './assets/en/coalition/COALITION_ACADEMY_CAMPAIGN_CHECK.png', 'jp': './assets/cn/coalition/COALITION_ACADEMY_CAMPAIGN_CHECK.png', 'tw': './assets/cn/coalition/COALITION_ACADEMY_CAMPAIGN_CHECK.png'})
COALITION_ACADEMY_GOTO_CAMPAIGN = Button(area={'cn': (1123, 615, 1159, 651), 'en': (1123, 615, 1159, 651), 'jp': (1123, 615, 1159, 651), 'tw': (1123, 615, 1159, 651)}, color={'cn': (160, 134, 93), 'en': (160, 134, 93), 'jp': (160, 134, 93), 'tw': (160, 134, 93)}, button={'cn': (1123, 615, 1159, 651), 'en': (1123, 615, 1159, 651), 'jp': (1123, 615, 1159, 651), 'tw': (1123, 615, 1159, 651)}, file={'cn': './assets/cn/coalition/COALITION_ACADEMY_GOTO_CAMPAIGN.png', 'en': './assets/en/coalition/COALITION_ACADEMY_GOTO_CAMPAIGN.png', 'jp': './assets/jp/coalition/COALITION_ACADEMY_GOTO_CAMPAIGN.png', 'tw': './assets/tw/coalition/COALITION_ACADEMY_GOTO_CAMPAIGN.png'})
COALITION_ACADEMY_HOME = Button(area={'cn': (1221, 48, 1244, 73), 'en': (1221, 48, 1244, 73), 'jp': (1221, 48, 1244, 73), 'tw': (1221, 48, 1244, 73)}, color={'cn': (182, 197, 203), 'en': (182, 197, 203), 'jp': (182, 197, 203), 'tw': (182, 197, 203)}, button={'cn': (1221, 48, 1244, 73), 'en': (1221, 48, 1244, 73), 'jp': (1221, 48, 1244, 73), 'tw': (1221, 48, 1244, 73)}, file={'cn': './assets/cn/coalition/COALITION_ACADEMY_HOME.png', 'en': './assets/en/coalition/COALITION_ACADEMY_HOME.png', 'jp': './assets/jp/coalition/COALITION_ACADEMY_HOME.png', 'tw': './assets/tw/coalition/COALITION_ACADEMY_HOME.png'})
COALITION_ACADEMY_MAIN_CHECK = Button(area={'cn': (132, 57, 163, 92), 'en': (164, 57, 221, 78), 'jp': (132, 57, 163, 92), 'tw': (132, 57, 163, 92)}, color={'cn': (143, 202, 205), 'en': (205, 189, 166), 'jp': (143, 202, 205), 'tw': (143, 202, 205)}, button={'cn': (132, 57, 163, 92), 'en': (164, 57, 221, 78), 'jp': (132, 57, 163, 92), 'tw': (132, 57, 163, 92)}, file={'cn': './assets/cn/coalition/COALITION_ACADEMY_MAIN_CHECK.png', 'en': './assets/en/coalition/COALITION_ACADEMY_MAIN_CHECK.png', 'jp': './assets/cn/coalition/COALITION_ACADEMY_MAIN_CHECK.png', 'tw': './assets/cn/coalition/COALITION_ACADEMY_MAIN_CHECK.png'})
COALITION_REWARD_CONFIRM = Button(area={'cn': (814, 611, 877, 637), 'en': (788, 612, 902, 634), 'jp': (814, 611, 876, 637), 'tw': (814, 611, 877, 637)}, color={'cn': (155, 186, 227), 'en': (162, 189, 226), 'jp': (143, 176, 219), 'tw': (150, 181, 221)}, button={'cn': (814, 611, 877, 637), 'en': (788, 612, 902, 634), 'jp': (814, 611, 876, 637), 'tw': (814, 611, 877, 637)}, file={'cn': './assets/cn/coalition/COALITION_REWARD_CONFIRM.png', 'en': './assets/en/coalition/COALITION_REWARD_CONFIRM.png', 'jp': './assets/jp/coalition/COALITION_REWARD_CONFIRM.png', 'tw': './assets/tw/coalition/COALITION_REWARD_CONFIRM.png'})
FLEET_NOT_PREPARED = Button(area={'cn': (1008, 310, 1110, 334), 'en': (1008, 310, 1110, 334), 'jp': (1008, 310, 1110, 334), 'tw': (1008, 310, 1110, 334)}, color={'cn': (106, 106, 112), 'en': (106, 106, 112), 'jp': (106, 106, 112), 'tw': (108, 107, 112)}, button={'cn': (1008, 310, 1110, 334), 'en': (1008, 310, 1110, 334), 'jp': (1008, 310, 1110, 334), 'tw': (1008, 310, 1110, 334)}, file={'cn': './assets/cn/coalition/FLEET_NOT_PREPARED.png', 'en': './assets/cn/coalition/FLEET_NOT_PREPARED.png', 'jp': './assets/cn/coalition/FLEET_NOT_PREPARED.png', 'tw': './assets/tw/coalition/FLEET_NOT_PREPARED.png'})
FLEET_PREPARATION = Button(area={'cn': (1057, 527, 1155, 548), 'en': (1114, 527, 1200, 545), 'jp': (1056, 525, 1157, 550), 'tw': (1057, 527, 1155, 548)}, color={'cn': (122, 146, 222), 'en': (106, 135, 228), 'jp': (115, 141, 222), 'tw': (110, 136, 224)}, button={'cn': (968, 511, 1245, 563), 'en': (968, 511, 1245, 563), 'jp': (968, 511, 1245, 563), 'tw': (968, 511, 1245, 563)}, file={'cn': './assets/cn/coalition/FLEET_PREPARATION.png', 'en': './assets/en/coalition/FLEET_PREPARATION.png', 'jp': './assets/jp/coalition/FLEET_PREPARATION.png', 'tw': './assets/tw/coalition/FLEET_PREPARATION.png'})
FLEET_SWITCH_MULTI = Button(area={'cn': (1106, 449, 1237, 478), 'en': (1106, 449, 1237, 478), 'jp': (1106, 449, 1237, 478), 'tw': (1106, 449, 1237, 478)}, color={'cn': (232, 175, 58), 'en': (197, 147, 49), 'jp': (220, 165, 55), 'tw': (225, 170, 59)}, button={'cn': (1106, 449, 1237, 478), 'en': (1106, 449, 1237, 478), 'jp': (1106, 449, 1237, 478), 'tw': (1106, 449, 1237, 478)}, file={'cn': './assets/cn/coalition/FLEET_SWITCH_MULTI.png', 'en': './assets/en/coalition/FLEET_SWITCH_MULTI.png', 'jp': './assets/jp/coalition/FLEET_SWITCH_MULTI.png', 'tw': './assets/tw/coalition/FLEET_SWITCH_MULTI.png'})
FLEET_SWITCH_SINGLE = Button(area={'cn': (968, 449, 1098, 478), 'en': (968, 449, 1098, 478), 'jp': (968, 449, 1098, 478), 'tw': (968, 449, 1098, 478)}, color={'cn': (230, 173, 57), 'en': (199, 148, 49), 'jp': (221, 166, 55), 'tw': (220, 166, 58)}, button={'cn': (968, 449, 1098, 478), 'en': (968, 449, 1098, 478), 'jp': (968, 449, 1098, 478), 'tw': (968, 449, 1098, 478)}, file={'cn': './assets/cn/coalition/FLEET_SWITCH_SINGLE.png', 'en': './assets/en/coalition/FLEET_SWITCH_SINGLE.png', 'jp': './assets/jp/coalition/FLEET_SWITCH_SINGLE.png', 'tw': './assets/tw/coalition/FLEET_SWITCH_SINGLE.png'})
FROSTFALL_EX = Button(area={'cn': (622, 372, 649, 384), 'en': (622, 372, 649, 384), 'jp': (622, 372, 649, 384), 'tw': (622, 372, 649, 384)}, color={'cn': (198, 152, 252), 'en': (198, 152, 252), 'jp': (198, 152, 252), 'tw': (182, 127, 252)}, button={'cn': (622, 372, 649, 384), 'en': (622, 372, 649, 384), 'jp': (622, 372, 649, 384), 'tw': (622, 372, 649, 384)}, file={'cn': './assets/cn/coalition/FROSTFALL_EX.png', 'en': './assets/en/coalition/FROSTFALL_EX.png', 'jp': './assets/jp/coalition/FROSTFALL_EX.png', 'tw': './assets/tw/coalition/FROSTFALL_EX.png'})
FROSTFALL_FLEET_PREPARATION = Button(area={'cn': (1057, 527, 1155, 548), 'en': (1057, 527, 1155, 548), 'jp': (1057, 527, 1155, 548), 'tw': (1057, 527, 1155, 548)}, color={'cn': (122, 146, 222), 'en': (122, 146, 222), 'jp': (122, 146, 222), 'tw': (122, 146, 222)}, button={'cn': (1057, 527, 1155, 548), 'en': (1057, 527, 1155, 548), 'jp': (1057, 527, 1155, 548), 'tw': (1057, 527, 1155, 548)}, file={'cn': './assets/cn/coalition/FROSTFALL_FLEET_PREPARATION.png', 'en': './assets/cn/coalition/FROSTFALL_FLEET_PREPARATION.png', 'jp': './assets/cn/coalition/FROSTFALL_FLEET_PREPARATION.png', 'tw': './assets/cn/coalition/FROSTFALL_FLEET_PREPARATION.png'})
FROSTFALL_MODE_BATTLE = Button(area={'cn': (71, 608, 137, 653), 'en': (71, 608, 137, 653), 'jp': (71, 608, 137, 653), 'tw': (71, 608, 137, 653)}, color={'cn': (63, 106, 122), 'en': (63, 106, 122), 'jp': (63, 106, 122), 'tw': (63, 106, 122)}, button={'cn': (71, 608, 137, 653), 'en': (71, 608, 137, 653), 'jp': (71, 608, 137, 653), 'tw': (71, 608, 137, 653)}, file={'cn': './assets/cn/coalition/FROSTFALL_MODE_BATTLE.png', 'en': './assets/cn/coalition/FROSTFALL_MODE_BATTLE.png', 'jp': './assets/cn/coalition/FROSTFALL_MODE_BATTLE.png', 'tw': './assets/cn/coalition/FROSTFALL_MODE_BATTLE.png'})
FROSTFALL_MODE_STORY = Button(area={'cn': (73, 610, 134, 652), 'en': (73, 610, 134, 652), 'jp': (73, 610, 134, 652), 'tw': (73, 610, 134, 652)}, color={'cn': (119, 44, 32), 'en': (119, 44, 32), 'jp': (119, 44, 32), 'tw': (119, 44, 32)}, button={'cn': (73, 610, 134, 652), 'en': (73, 610, 134, 652), 'jp': (73, 610, 134, 652), 'tw': (73, 610, 134, 652)}, file={'cn': './assets/cn/coalition/FROSTFALL_MODE_STORY.png', 'en': './assets/cn/coalition/FROSTFALL_MODE_STORY.png', 'jp': './assets/cn/coalition/FROSTFALL_MODE_STORY.png', 'tw': './assets/cn/coalition/FROSTFALL_MODE_STORY.png'})
FROSTFALL_OCR_PT = Button(area={'cn': (1181, 641, 1254, 663), 'en': (1181, 641, 1254, 663), 'jp': (1181, 641, 1254, 663), 'tw': (1181, 641, 1254, 663)}, color={'cn': (93, 100, 106), 'en': (93, 100, 106), 'jp': (93, 100, 106), 'tw': (93, 100, 106)}, button={'cn': (1181, 641, 1254, 663), 'en': (1181, 641, 1254, 663), 'jp': (1181, 641, 1254, 663), 'tw': (1181, 641, 1254, 663)}, file={'cn': './assets/cn/coalition/FROSTFALL_OCR_PT.png', 'en': './assets/en/coalition/FROSTFALL_OCR_PT.png', 'jp': './assets/jp/coalition/FROSTFALL_OCR_PT.png', 'tw': './assets/tw/coalition/FROSTFALL_OCR_PT.png'})
FROSTFALL_SP = Button(area={'cn': (631, 160, 658, 173), 'en': (631, 160, 658, 173), 'jp': (631, 160, 658, 173), 'tw': (505, 290, 532, 302)}, color={'cn': (194, 145, 252), 'en': (194, 145, 252), 'jp': (194, 145, 252), 'tw': (183, 128, 253)}, button={'cn': (631, 160, 658, 173), 'en': (631, 160, 658, 173), 'jp': (631, 160, 658, 173), 'tw': (505, 290, 532, 302)}, file={'cn': './assets/cn/coalition/FROSTFALL_SP.png', 'en': './assets/en/coalition/FROSTFALL_SP.png', 'jp': './assets/jp/coalition/FROSTFALL_SP.png', 'tw': './assets/tw/coalition/FROSTFALL_SP.png'})
FROSTFALL_SWITCH_MULTI = Button(area={'cn': (1106, 449, 1237, 478), 'en': (1106, 449, 1237, 478), 'jp': (1106, 449, 1237, 478), 'tw': (1106, 449, 1237, 478)}, color={'cn': (232, 175, 58), 'en': (232, 175, 58), 'jp': (232, 175, 58), 'tw': (232, 175, 58)}, button={'cn': (1106, 449, 1237, 478), 'en': (1106, 449, 1237, 478), 'jp': (1106, 449, 1237, 478), 'tw': (1106, 449, 1237, 478)}, file={'cn': './assets/cn/coalition/FROSTFALL_SWITCH_MULTI.png', 'en': './assets/cn/coalition/FROSTFALL_SWITCH_MULTI.png', 'jp': './assets/cn/coalition/FROSTFALL_SWITCH_MULTI.png', 'tw': './assets/cn/coalition/FROSTFALL_SWITCH_MULTI.png'})
FROSTFALL_SWITCH_SINGLE = Button(area={'cn': (968, 449, 1098, 478), 'en': (968, 449, 1098, 478), 'jp': (968, 449, 1098, 478), 'tw': (968, 449, 1098, 478)}, color={'cn': (230, 173, 57), 'en': (230, 173, 57), 'jp': (230, 173, 57), 'tw': (230, 173, 57)}, button={'cn': (968, 449, 1098, 478), 'en': (968, 449, 1098, 478), 'jp': (968, 449, 1098, 478), 'tw': (968, 449, 1098, 478)}, file={'cn': './assets/cn/coalition/FROSTFALL_SWITCH_SINGLE.png', 'en': './assets/cn/coalition/FROSTFALL_SWITCH_SINGLE.png', 'jp': './assets/cn/coalition/FROSTFALL_SWITCH_SINGLE.png', 'tw': './assets/cn/coalition/FROSTFALL_SWITCH_SINGLE.png'})
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': (810, 362, 835, 373), 'en': (810, 362, 835, 373), 'jp': (810, 362, 835, 373), 'tw': (631, 160, 658, 173)}, color={'cn': (214, 178, 254), 'en': (214, 178, 254), 'jp': (214, 178, 254), 'tw': (186, 136, 252)}, button={'cn': (810, 362, 835, 373), 'en': (810, 362, 835, 373), 'jp': (810, 362, 835, 373), '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': (505, 290, 532, 302), 'en': (505, 290, 532, 302), 'jp': (505, 290, 532, 302), 'tw': (810, 362, 835, 373)}, color={'cn': (210, 172, 252), 'en': (210, 172, 252), 'jp': (210, 172, 252), 'tw': (197, 153, 255)}, button={'cn': (505, 290, 532, 302), 'en': (505, 290, 532, 302), 'jp': (505, 290, 532, 302), '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'})
MODE_SWITCH_BATTLE = Button(area={'cn': (71, 608, 137, 653), 'en': (71, 608, 137, 653), 'jp': (71, 608, 137, 653), 'tw': (71, 608, 137, 653)}, color={'cn': (63, 106, 122), 'en': (63, 106, 122), 'jp': (63, 106, 122), 'tw': (63, 106, 122)}, button={'cn': (71, 608, 137, 653), 'en': (71, 608, 137, 653), 'jp': (71, 608, 137, 653), 'tw': (71, 608, 137, 653)}, file={'cn': './assets/cn/coalition/MODE_SWITCH_BATTLE.png', 'en': './assets/en/coalition/MODE_SWITCH_BATTLE.png', 'jp': './assets/jp/coalition/MODE_SWITCH_BATTLE.png', 'tw': './assets/tw/coalition/MODE_SWITCH_BATTLE.png'})
MODE_SWITCH_STORY = Button(area={'cn': (73, 610, 134, 652), 'en': (73, 610, 134, 652), 'jp': (73, 610, 134, 652), 'tw': (73, 610, 134, 652)}, color={'cn': (119, 44, 32), 'en': (119, 44, 32), 'jp': (119, 44, 32), 'tw': (119, 44, 32)}, button={'cn': (73, 610, 134, 652), 'en': (73, 610, 134, 652), 'jp': (73, 610, 134, 652), 'tw': (73, 610, 134, 652)}, file={'cn': './assets/cn/coalition/MODE_SWITCH_STORY.png', 'en': './assets/en/coalition/MODE_SWITCH_STORY.png', 'jp': './assets/jp/coalition/MODE_SWITCH_STORY.png', 'tw': './assets/tw/coalition/MODE_SWITCH_STORY.png'})

View File

@ -7,7 +7,20 @@ from module.exception import ScriptError, ScriptEnd
from module.logger import logger
from module.ocr.ocr import Digit
OCR_PT = Digit(FROSTFALL_OCR_PT, name='OCR_PT', letter=(198, 158, 82), threshold=128)
class AcademyPtOcr(Digit):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.alphabet += ':'
def after_process(self, result):
logger.attr(self.name, result)
try:
# 累计: 840
result = result.rsplit(':')[1]
except IndexError:
pass
return super().after_process(result)
class Coalition(CoalitionCombat, CampaignEvent):
@ -19,10 +32,19 @@ class Coalition(CoalitionCombat, CampaignEvent):
Returns:
int: PT amount, or 0 if unable to parse
"""
pt = OCR_PT.ocr(self.device.image)
event = self.config.Campaign_Event
if event == 'coalition_20230323':
ocr = Digit(FROSTFALL_OCR_PT, name='OCR_PT', letter=(198, 158, 82), threshold=128)
elif event == 'coalition_20240627':
ocr = AcademyPtOcr(ACADEMY_PT_OCR, name='OCR_PT', letter=(255, 255, 255), threshold=128)
else:
logger.error(f'ocr object is not defined in event {event}')
raise ScriptError
pt = ocr.ocr(self.device.image)
return pt
def triggered_stop_condition(self):
def triggered_stop_condition(self, oil_check=False, pt_check=False):
"""
Returns:
bool: If triggered a stop condition.
@ -34,14 +56,16 @@ class Coalition(CoalitionCombat, CampaignEvent):
self.config.Scheduler_Enable = False
return True
# Oil limit
if self.get_oil() < max(500, self.config.StopCondition_OilLimit):
logger.hr('Triggered stop condition: Oil limit')
self.config.task_delay(minute=(120, 240))
return True
if oil_check:
if self.get_oil() < max(500, self.config.StopCondition_OilLimit):
logger.hr('Triggered stop condition: Oil limit')
self.config.task_delay(minute=(120, 240))
return True
# Event limit
if self.event_pt_limit_triggered():
logger.hr('Triggered stop condition: Event PT limit')
return True
if pt_check:
if self.event_pt_limit_triggered():
logger.hr('Triggered stop condition: Event PT limit')
return True
# TaskBalancer
if self.run_count >= 1:
if self.config.TaskBalancer_Enable and self.triggered_task_balancer():
@ -76,9 +100,11 @@ class Coalition(CoalitionCombat, CampaignEvent):
self.config.override(
Coalition_Fleet='multi',
)
self.emotion.check_reduce(battle=self.coalition_get_battles(stage))
self.emotion.check_reduce(battle=self.coalition_get_battles(event, stage))
self.enter_map(stage=stage, fleet=fleet)
self.enter_map(event=event, stage=stage, mode=fleet)
if self.triggered_stop_condition(oil_check=True):
raise ScriptEnd
self.coalition_combat()
@staticmethod
@ -89,14 +115,14 @@ class Coalition(CoalitionCombat, CampaignEvent):
return event, stage
def run(self, name='', stage='', fleet='', total=0):
name = name if name else self.config.Campaign_Event
stage = stage if stage else self.config.Campaign_Name
def run(self, event='', mode='', fleet='', total=0):
event = event if event else self.config.Campaign_Event
mode = mode if mode else self.config.Coalition_Mode
fleet = fleet if fleet else self.config.Coalition_Fleet
if not name or not stage or not fleet:
raise ScriptError(f'RaidRun arguments unfilled. name={name}, stage={stage}, fleet={fleet}')
if not event or not mode or not fleet:
raise ScriptError(f'Coalition arguments unfilled. name={event}, mode={mode}, fleet={fleet}')
name, stage = self.handle_stage_name(name, stage)
event, mode = self.handle_stage_name(event, mode)
self.run_count = 0
self.run_limit = self.config.StopCondition_RunCount
while 1:
@ -107,7 +133,7 @@ class Coalition(CoalitionCombat, CampaignEvent):
self.config.task_stop()
# Log
logger.hr(f'{name}_{stage}', level=2)
logger.hr(f'{event}_{mode}', level=2)
if self.config.StopCondition_RunCount > 0:
logger.info(f'Count remain: {self.config.StopCondition_RunCount}')
else:
@ -117,17 +143,17 @@ class Coalition(CoalitionCombat, CampaignEvent):
self.device.stuck_record_clear()
self.device.click_record_clear()
self.ui_goto_coalition()
self.coalition_ensure_mode('battle')
self.coalition_ensure_mode(event, 'battle')
# End
if self.triggered_stop_condition():
if self.triggered_stop_condition(pt_check=True):
break
# Run
self.device.stuck_record_clear()
self.device.click_record_clear()
try:
self.coalition_execute_once(event=name, stage=stage, fleet=fleet)
self.coalition_execute_once(event=event, stage=mode, fleet=fleet)
except ScriptEnd as e:
logger.hr('Script end')
logger.info(str(e))
@ -138,7 +164,7 @@ class Coalition(CoalitionCombat, CampaignEvent):
if self.config.StopCondition_RunCount:
self.config.StopCondition_RunCount -= 1
# End
if self.triggered_stop_condition():
if self.triggered_stop_condition(pt_check=True):
break
# Scheduler
if self.config.task_switched():

View File

@ -5,7 +5,7 @@ from module.config.config import TaskEnd
class CoalitionSP(Coalition):
def run(self, *args, **kwargs):
try:
super().run(stage='sp', total=1)
super().run(mode='sp', total=1)
except TaskEnd:
# Catch task switch
pass

View File

@ -2,33 +2,38 @@ from module.base.timer import Timer
from module.coalition.assets import *
from module.combat.assets import BATTLE_PREPARATION
from module.combat.combat import Combat
from module.exception import CampaignNameError, RequestHumanTakeover
from module.exception import CampaignNameError, RequestHumanTakeover, ScriptError
from module.logger import logger
from module.ui.assets import COALITION_CHECK
from module.ui.page import page_coalition
from module.ui.switch import Switch
MODE_SWITCH = Switch('CoalitionMode', offset=(20, 20))
MODE_SWITCH.add_status('story', MODE_SWITCH_STORY)
MODE_SWITCH.add_status('battle', MODE_SWITCH_BATTLE)
FLEET_SWITCH = Switch('FleetMode', is_selector=True, offset=0) # No offset for color match
FLEET_SWITCH.add_status('single', FLEET_SWITCH_SINGLE)
FLEET_SWITCH.add_status('multi', FLEET_SWITCH_MULTI)
class CoalitionUI(Combat):
def in_coalition(self):
# The same as raid
return self.appear(COALITION_CHECK, offset=(20, 20))
return self.ui_page_appear(page_coalition, offset=(20, 20))
def coalition_ensure_mode(self, mode):
def coalition_ensure_mode(self, event, mode):
"""
Args:
event (str): Event name.
mode (str): 'story' or 'battle'
Pages:
in: in_coalition
"""
MODE_SWITCH = Switch('CoalitionMode', offset=(20, 20))
if event == 'coalition_20230323':
MODE_SWITCH.add_status('story', FROSTFALL_MODE_STORY)
MODE_SWITCH.add_status('battle', FROSTFALL_MODE_BATTLE)
elif event == 'coalition_20240627':
# Note that switch button are reversed
MODE_SWITCH.add_status('story', ACADEMY_MODE_BATTLE)
MODE_SWITCH.add_status('battle', ACADEMY_MODE_STORY)
else:
logger.error(f'MODE_SWITCH is not defined in event {event}')
raise ScriptError
if mode == 'story':
MODE_SWITCH.set('battle', main=self)
elif mode == 'battle':
@ -36,14 +41,26 @@ class CoalitionUI(Combat):
else:
logger.warning(f'Unknown coalition campaign mode: {mode}')
def coalition_ensure_fleet(self, mode):
def coalition_ensure_fleet(self, event, mode):
"""
Args:
event (str): Event name.
mode (str): 'single' or 'multi'
Pages:
in: FLEET_PREPARATION
"""
FLEET_SWITCH = Switch('FleetMode', is_selector=True, offset=0) # No offset for color match
if event == 'coalition_20230323':
FLEET_SWITCH.add_status('single', FROSTFALL_SWITCH_SINGLE)
FLEET_SWITCH.add_status('multi', FROSTFALL_SWITCH_MULTI)
elif event == 'coalition_20240627':
FLEET_SWITCH.add_status('single', ACADEMY_SWITCH_SINGLE)
FLEET_SWITCH.add_status('multi', ACADEMY_SWITCH_MULTI)
else:
logger.error(f'FLEET_SWITCH is not defined in event {event}')
raise ScriptError
if mode == 'single':
FLEET_SWITCH.set('single', main=self)
elif mode == 'multi':
@ -52,68 +69,119 @@ class CoalitionUI(Combat):
logger.warning(f'Unknown coalition fleet mode: {mode}')
@staticmethod
def coalition_get_entrance(stage):
def coalition_get_entrance(event, stage):
"""
Args:
event (str): Event name.
stage (str): Stage name.
Returns:
Button: Entrance button
"""
stage = stage.lower()
if stage == 'tc1':
return FROSTFALL_TC1
if stage == 'tc2':
return FROSTFALL_TC2
if stage == 'tc3':
return FROSTFALL_TC3
if stage == 'sp':
return FROSTFALL_SP
if stage == 'ex':
return FROSTFALL_EX
dic = {
('coalition_20230323', 'tc1'): FROSTFALL_TC1,
('coalition_20230323', 'tc2'): FROSTFALL_TC2,
('coalition_20230323', 'tc3'): FROSTFALL_TC3,
('coalition_20230323', 'sp'): FROSTFALL_SP,
('coalition_20230323', 'ex'): FROSTFALL_EX,
raise CampaignNameError
('coalition_20240627', 'easy'): ACADEMY_EASY,
('coalition_20240627', 'normal'): ACADEMY_NORMAL,
('coalition_20240627', 'hard'): ACADEMY_HARD,
('coalition_20240627', 'sp'): ACADEMY_SP,
('coalition_20240627', 'ex'): ACADEMY_EX,
}
stage = stage.lower()
try:
return dic[(event, stage)]
except KeyError as e:
logger.error(e)
raise CampaignNameError
@staticmethod
def coalition_get_battles(stage):
def coalition_get_battles(event, stage):
"""
Args:
event (str): Event name.
stage (str): Stage name.
Returns:
int: Number of battles
"""
if stage == 'tc1':
return 1
if stage == 'tc2':
return 2
if stage == 'tc3':
return 3
dic = {
('coalition_20230323', 'tc1'): 1,
('coalition_20230323', 'tc2'): 2,
('coalition_20230323', 'tc3'): 3,
('coalition_20230323', 'sp'): 1,
('coalition_20230323', 'ex'): 1,
return 1
def handle_fleet_preparation(self, stage, fleet):
('coalition_20240627', 'easy'): 1,
('coalition_20240627', 'normal'): 2,
('coalition_20240627', 'hard'): 3,
('coalition_20240627', 'sp'): 4,
('coalition_20240627', 'ex'): 5,
}
stage = stage.lower()
try:
return dic[(event, stage)]
except KeyError as e:
logger.error(e)
raise CampaignNameError
# No fleet switch in TC1
if stage in ['tc1', 'sp']:
return False
self.coalition_ensure_fleet(fleet)
return True
def enter_map(self, stage, fleet, skip_first_screenshot=True):
@staticmethod
def coalition_get_fleet_preparation(event):
"""
Args:
event (str): Event name.
Returns:
Button:
"""
if event == 'coalition_20230323':
return FROSTFALL_FLEET_PREPARATION
elif event == 'coalition_20240627':
return ACEDEMY_FLEET_PREPARATION
else:
logger.error(f'FLEET_PREPARATION is not defined in event {event}')
raise ScriptError
def handle_fleet_preparation(self, event, stage, mode):
"""
Args:
event (str): Event name.
stage (str): Stage name.
mode (str): 'single' or 'multi'
Returns:
bool: If success
"""
stage = stage.lower()
if event == 'coalition_20230323':
# No fleet switch in TC1
if stage in ['tc1', 'sp']:
return False
if event == 'coalition_20240627':
if stage in ['sp', 'ex']:
return False
self.coalition_ensure_fleet(event, mode)
return True
def enter_map(self, event, stage, mode, skip_first_screenshot=True):
"""
Args:
event (str): Event name such as 'coalition_20230323'
stage (str): Stage name such as 'TC3'
fleet (str): 'single' or 'multi'
mode (str): 'single' or 'multi'
skip_first_screenshot:
Pages:
in: in_coalition
out: BATTLE_PREPARATION
"""
button = self.coalition_get_entrance(stage)
button = self.coalition_get_entrance(event, stage)
fleet_preparation = self.coalition_get_fleet_preparation(event)
campaign_timer = Timer(5)
fleet_timer = Timer(5)
campaign_click = 0
@ -154,9 +222,9 @@ class CoalitionUI(Combat):
continue
# Fleet preparation
if fleet_timer.reached() and self.appear(FLEET_PREPARATION, offset=(20, 50)):
self.handle_fleet_preparation(stage, fleet)
self.device.click(FLEET_PREPARATION)
if fleet_timer.reached() and self.appear(fleet_preparation, offset=(20, 50)):
self.handle_fleet_preparation(event, stage, mode)
self.device.click(fleet_preparation)
fleet_click += 1
fleet_timer.reset()
campaign_timer.reset()

View File

@ -15,6 +15,7 @@ from module.retire.retirement import Retirement
from module.statistics.azurstats import DropImage
from module.template.assets import TEMPLATE_COMBAT_LOADING
from module.ui.assets import BACK_ARROW, MUNITIONS_CHECK
from module.ui.page import page_event
class Combat(Level, HPBalancer, Retirement, SubmarineCall, CombatAuto, CombatManual, AutoSearchHandler):

View File

@ -1706,13 +1706,13 @@
],
"display": "hide",
"option_bold": [
"event_20201012_cn",
"event_20220428_cn"
"event_20220428_cn",
"event_20231026_cn"
],
"cn": "event_20220428_cn",
"en": "event_20220428_cn",
"jp": "event_20220428_cn",
"tw": "event_20201012_cn"
"tw": "event_20231026_cn"
},
"Mode": {
"type": "select",
@ -2041,13 +2041,13 @@
"event_20240521_cn"
],
"option_bold": [
"event_20201012_cn",
"event_20220428_cn"
"event_20220428_cn",
"event_20231026_cn"
],
"cn": "event_20220428_cn",
"en": "event_20220428_cn",
"jp": "event_20220428_cn",
"tw": "event_20201012_cn"
"tw": "event_20231026_cn"
},
"Mode": {
"type": "select",
@ -2491,13 +2491,13 @@
"event_20240521_cn"
],
"option_bold": [
"event_20201012_cn",
"event_20220428_cn"
"event_20220428_cn",
"event_20231026_cn"
],
"cn": "event_20220428_cn",
"en": "event_20220428_cn",
"jp": "event_20220428_cn",
"tw": "event_20201012_cn"
"tw": "event_20231026_cn"
},
"Mode": {
"type": "select",
@ -3111,20 +3111,23 @@
"Campaign": {
"Name": {
"type": "input",
"value": "12-4"
"value": "dynamic",
"display": "hide"
},
"Event": {
"type": "state",
"value": "campaign_main",
"option": [
"coalition_20230323"
"coalition_20230323",
"coalition_20240627"
],
"option_bold": [
"coalition_20230323"
"coalition_20230323",
"coalition_20240627"
],
"cn": "coalition_20230323",
"en": "coalition_20230323",
"jp": "coalition_20230323",
"cn": "coalition_20240627",
"en": "coalition_20240627",
"jp": "coalition_20240627",
"tw": "coalition_20230323"
},
"Mode": {
@ -3163,6 +3166,16 @@
}
},
"Coalition": {
"Mode": {
"type": "select",
"value": "hard",
"option": [
"easy",
"normal",
"hard",
"ex"
]
},
"Fleet": {
"type": "select",
"value": "single",
@ -3887,13 +3900,13 @@
"event_20240521_cn"
],
"option_bold": [
"event_20201012_cn",
"event_20220428_cn"
"event_20220428_cn",
"event_20231026_cn"
],
"cn": "event_20220428_cn",
"en": "event_20220428_cn",
"jp": "event_20220428_cn",
"tw": "event_20201012_cn"
"tw": "event_20231026_cn"
},
"Mode": {
"type": "select",
@ -4354,13 +4367,13 @@
"event_20240521_cn"
],
"option_bold": [
"event_20201012_cn",
"event_20220428_cn"
"event_20220428_cn",
"event_20231026_cn"
],
"cn": "event_20220428_cn",
"en": "event_20220428_cn",
"jp": "event_20220428_cn",
"tw": "event_20201012_cn"
"tw": "event_20231026_cn"
},
"Mode": {
"type": "select",
@ -4821,13 +4834,13 @@
"event_20240521_cn"
],
"option_bold": [
"event_20201012_cn",
"event_20220428_cn"
"event_20220428_cn",
"event_20231026_cn"
],
"cn": "event_20220428_cn",
"en": "event_20220428_cn",
"jp": "event_20220428_cn",
"tw": "event_20201012_cn"
"tw": "event_20231026_cn"
},
"Mode": {
"type": "select",
@ -5288,13 +5301,13 @@
"event_20240521_cn"
],
"option_bold": [
"event_20201012_cn",
"event_20220428_cn"
"event_20220428_cn",
"event_20231026_cn"
],
"cn": "event_20220428_cn",
"en": "event_20220428_cn",
"jp": "event_20220428_cn",
"tw": "event_20201012_cn"
"tw": "event_20231026_cn"
},
"Mode": {
"type": "select",
@ -5745,13 +5758,13 @@
"event_20240521_cn"
],
"option_bold": [
"event_20201012_cn",
"event_20220428_cn"
"event_20220428_cn",
"event_20231026_cn"
],
"cn": "event_20220428_cn",
"en": "event_20220428_cn",
"jp": "event_20220428_cn",
"tw": "event_20201012_cn"
"tw": "event_20231026_cn"
},
"Mode": {
"type": "select",
@ -6370,14 +6383,16 @@
"type": "state",
"value": "campaign_main",
"option": [
"coalition_20230323"
"coalition_20230323",
"coalition_20240627"
],
"option_bold": [
"coalition_20230323"
"coalition_20230323",
"coalition_20240627"
],
"cn": "coalition_20230323",
"en": "coalition_20230323",
"jp": "coalition_20230323",
"cn": "coalition_20240627",
"en": "coalition_20240627",
"jp": "coalition_20240627",
"tw": "coalition_20230323"
},
"Mode": {
@ -6416,6 +6431,17 @@
}
},
"Coalition": {
"Mode": {
"type": "select",
"value": "hard",
"option": [
"easy",
"normal",
"hard",
"ex"
],
"display": "hide"
},
"Fleet": {
"type": "select",
"value": "single",

View File

@ -305,6 +305,9 @@ RaidDaily:
MaritimeEscort:
Enable: true
Coalition:
Mode:
value: hard
option: [ easy, normal, hard, ex ]
Fleet:
value: single
option: [ single, multi ]

View File

@ -215,6 +215,7 @@ Coalition:
Campaign:
Event:
type: state
Name: dynamic
Mode: normal
UseClearMode: true
UseFleetLock: true
@ -247,6 +248,9 @@ CoalitionSp:
UseAutoSearch: false
Use2xBook: false
AmbushEvade: true
Coalition:
# CoalitionSp hard-codes Mode='sp'
Mode: hard
StopCondition:
MapAchievement: non_stop
StageIncrease: false

View File

@ -178,6 +178,7 @@ class GeneratedConfig:
MaritimeEscort_Enable = True
# Group `Coalition`
Coalition_Mode = 'hard' # easy, normal, hard, ex
Coalition_Fleet = 'single' # single, multi
# Group `Commission`

View File

@ -79,7 +79,7 @@
"help": ""
},
"Coalition": {
"name": "Frostfall",
"name": "Little Academy",
"help": ""
},
"MaritimeEscort": {
@ -115,7 +115,7 @@
"help": ""
},
"CoalitionSp": {
"name": "Frostfall Daily SP",
"name": "Little Academy SP",
"help": ""
},
"Commission": {
@ -660,6 +660,7 @@
"help": "Automatically selects to the latest event",
"campaign_main": "campaign_main",
"coalition_20230323": "Frostfall",
"coalition_20240627": "Welcome to Little Academy",
"event_20200227_cn": "Northern Overture",
"event_20200312_cn": "The Solomon Ranger Rerun",
"event_20200326_cn": "Microlayer Medley",
@ -1257,6 +1258,14 @@
"name": "Event Settings",
"help": "Fleets must be prepared manually in game before running"
},
"Mode": {
"name": "Mode",
"help": "SP needs to use event daily SP to run",
"easy": "Easy",
"normal": "Normal",
"hard": "Hard",
"ex": "EX"
},
"Fleet": {
"name": "Fleet",
"help": "",

View File

@ -79,8 +79,8 @@
"help": ""
},
"Coalition": {
"name": "Task.Coalition.name",
"help": "Task.Coalition.help"
"name": "リトル学園",
"help": ""
},
"MaritimeEscort": {
"name": "Maritime Escort",
@ -660,6 +660,7 @@
"help": "Campaign.Event.help",
"campaign_main": "campaign_main",
"coalition_20230323": "星霜海嵐",
"coalition_20240627": "リトル学園へようこそ",
"event_20200227_cn": "凍絶の北海",
"event_20200312_cn": "南洋に靡く硝煙(復刻)",
"event_20200326_cn": "闇靄払う銀翼",
@ -1257,6 +1258,14 @@
"name": "Coalition._info.name",
"help": "Coalition._info.help"
},
"Mode": {
"name": "Coalition.Mode.name",
"help": "Coalition.Mode.help",
"easy": "easy",
"normal": "normal",
"hard": "hard",
"ex": "ex"
},
"Fleet": {
"name": "Coalition.Fleet.name",
"help": "Coalition.Fleet.help",

View File

@ -79,7 +79,7 @@
"help": ""
},
"Coalition": {
"name": "极地风暴",
"name": "童心学院",
"help": ""
},
"MaritimeEscort": {
@ -115,7 +115,7 @@
"help": ""
},
"CoalitionSp": {
"name": "极地风暴每日SP",
"name": "童心学院每日SP",
"help": ""
},
"Commission": {
@ -660,6 +660,7 @@
"help": "自动选择至最新的活动",
"campaign_main": "主线图",
"coalition_20230323": "极地风暴",
"coalition_20240627": "欢迎来到童心学院",
"event_20200227_cn": "北境序曲",
"event_20200312_cn": "复刻斯图尔特的硝烟",
"event_20200326_cn": "微层混合",
@ -1257,6 +1258,14 @@
"name": "活动设置",
"help": "出击前必须在游戏内手动配队"
},
"Mode": {
"name": "难度",
"help": "SP图需要使用活动每日SP运行",
"easy": "简单",
"normal": "普通",
"hard": "困难",
"ex": "EX"
},
"Fleet": {
"name": "出击队伍",
"help": "",

View File

@ -660,6 +660,7 @@
"help": "自動選擇至最新的活動圖",
"campaign_main": "主線圖",
"coalition_20230323": "極地風暴",
"coalition_20240627": "Welcome to Little Academy",
"event_20200227_cn": "Northern Overture",
"event_20200312_cn": "斯圖爾特的硝煙",
"event_20200326_cn": "Microlayer Medley",
@ -719,7 +720,7 @@
"event_20230803_cn": "奏響鳶尾之歌",
"event_20230817_cn": "愚者的天平",
"event_20230914_cn": "Effulgence Before Eclipse",
"event_20231026_cn": "Tempesta and the Fountain of Youth",
"event_20231026_cn": "飓風與青春之泉",
"event_20231123_cn": "蒼閃忍法帖",
"event_20231221_cn": "Light-Chasing Sea of Stars",
"event_20240229_cn": "Snowrealm Peregrination",
@ -1257,6 +1258,14 @@
"name": "活動設定",
"help": "出擊前必須在遊戲內手動配隊"
},
"Mode": {
"name": "難度",
"help": "SP圖需要使用活動每日SP運行",
"easy": "簡單",
"normal": "普通",
"hard": "困難",
"ex": "EX"
},
"Fleet": {
"name": "出擊隊伍",
"help": "",

View File

@ -67,7 +67,44 @@ def filepath_config(filename, mod_name='alas'):
def filepath_code():
return './module/config/config_generated.py'
def show_function_call():
"""
INFO 21:07:31.554 Function calls:
<string> L1 <module>
spawn.py L116 spawn_main()
spawn.py L129 _main()
process.py L314 _bootstrap()
process.py L108 run()
process_manager.py L149 run_process()
alas.py L285 loop()
alas.py L69 run()
src.py L55 rogue()
rogue.py L36 run()
rogue.py L18 rogue_once()
entry.py L335 rogue_world_enter()
path.py L193 rogue_path_select()
"""
import os
import traceback
stack = traceback.extract_stack()
func_list = []
for row in stack:
filename, line_number, function_name, _ = row
filename = os.path.basename(filename)
# /tasks/character/switch.py:64 character_update()
func_list.append([filename, str(line_number), function_name])
max_filename = max([len(row[0]) for row in func_list])
max_linenum = max([len(row[1]) for row in func_list]) + 1
def format_(file, line, func):
file = file.rjust(max_filename, " ")
line = f'L{line}'.rjust(max_linenum, " ")
if not func.startswith('<'):
func = f'{func}()'
return f'{file} {line} {func}'
func_list = [f'\n{format_(*row)}' for row in func_list]
print('Function calls:' + ''.join(func_list))
def read_file(file):
"""
Read a file, support both .yaml and .json format.

View File

@ -173,8 +173,8 @@ class Benchmark(DaemonBase, CampaignUI):
def get_test_methods(self) -> t.Tuple[t.Tuple[str], t.Tuple[str]]:
device = self.config.Benchmark_DeviceType
# device == 'emulator'
screenshot = ['ADB', 'ADB_nc', 'uiautomator2', 'aScreenCap', 'aScreenCap_nc', 'DroidCast', 'DroidCast_raw']
click = ['ADB', 'uiautomator2', 'minitouch']
screenshot = ['DroidCast_raw']
click = ['ADB', 'uiautomator2', 'minitouch', 'MaaTouch']
def remove(*args):
return [l for l in screenshot if l not in args]
@ -205,8 +205,8 @@ class Benchmark(DaemonBase, CampaignUI):
def run(self):
self.config.override(Emulator_ScreenshotMethod='ADB')
self.device.uninstall_minicap()
self.ui_goto_campaign()
self.campaign_set_chapter('7-2')
# self.ui_goto_campaign()
# self.campaign_set_chapter('7-2')
logger.attr('DeviceType', self.config.Benchmark_DeviceType)
logger.attr('TestScene', self.config.Benchmark_TestScene)

View File

@ -7,6 +7,7 @@ from module.map.map_operation import FLEET_PREPARATION, MAP_PREPARATION
class AzurLaneDaemon(DaemonBase, CampaignBase):
def run(self):
self.config.override(Emotion_Mode='ignore')
while 1:
self.device.screenshot()
@ -61,6 +62,8 @@ class AzurLaneDaemon(DaemonBase, CampaignBase):
# End
# No end condition, stop it manually.
if self.handle_popup_confirm():
continue
return True

View File

@ -14,6 +14,7 @@ from adbutils.errors import AdbError
from module.base.decorator import Config, cached_property, del_cached_property, run_once
from module.base.utils import ensure_time
from module.config.config import AzurLaneConfig
from module.config.server import VALID_CHANNEL_PACKAGE, VALID_PACKAGE, set_server
from module.device.connection_attr import ConnectionAttr
from module.device.method.utils import (PackageNotInstalled, RETRY_TRIES, get_serial_pair, handle_adb_error,
@ -1014,3 +1015,16 @@ class Connection(ConnectionAttr):
f'Multiple AzurLane packages found, auto package detection cannot decide which to choose, '
'please copy one of the available devices listed above to Alas.Emulator.PackageName')
raise RequestHumanTakeover
if __name__ == '__main__':
cfg = AzurLaneConfig('alas')
cfg.override(Emulator_Serial='127.0.0.1:16416')
self = Connection(cfg)
with self.adb_client.open as c:
list_cmd = f"framebuffer:"
c.send_command(list_cmd)
c.check_okay()
version = c.read_string_block()
print(version)

View File

@ -306,3 +306,12 @@ class Device(Screenshot, Control, AppControl):
super().app_stop()
self.stuck_record_clear()
self.click_record_clear()
if __name__ == '__main__':
self = Device('alas')
# self.maatouch_uninstall()
# self.maatouch_install()
# self.click_maatouch(300, 300)
# self.click_maatouch(300, 300)
# self.drag_maatouch((800, 300), (300, 300))
self.swipe_minitouch((300, 300), (800, 300))
self.swipe_minitouch((800, 300), (300, 300))

View File

@ -344,3 +344,12 @@ class DroidCast(Uiautomator2):
for proc in self._iter_droidcast_proc():
logger.info(f'Kill pid={proc.pid}')
self.adb_shell(['kill', '-s', 9, proc.pid])
if __name__ == '__main__':
self = DroidCast('alas')
# self.adb_shell(["rm", self.config.DROIDCAST_FILEPATH_REMOTE])
# self.droidcast_stop()
for _ in range(5):
self.image = self.screenshot_droidcast_raw()
from PIL import Image
Image.fromarray(self.image).show()

View File

@ -190,6 +190,6 @@ class SettingExtractor:
if __name__ == '__main__':
# Path to AzurLaneLuaScripts\CN
FOLDER = r''
FOLDER = r'E:\ProgramData\Pycharm\AzurLaneLuaScripts\CN'
ex = SettingExtractor()
ex.generate(FOLDER)

View File

@ -10,6 +10,12 @@ class GameSettingsGenerated:
# PlayerPrefs.GetInt("autoBotIsAcitve" .. slot6, 0)
autoBotIsAcitve = Field(formatter=int, default=0, regex='autoBotIsAcitve(.*)')
# /controller/command/stage/trackingcommand.lua
# PlayerPrefs.GetString("remaster_tip")
remaster_tip = Field(formatter=str, default='', regex='remaster_tip')
# PlayerPrefs.GetInt("chapter_autofight_flag_" .. uv0.id, 1)
chapter_autofight_flag = Field(formatter=int, default=1, regex='chapter_autofight_flag_(.*)')
# /gamecfg/activity/entrancedata.lua
# PlayerPrefs.GetString("permanent_time", "")
permanent_time = Field(formatter=str, default='', regex='permanent_time')
@ -94,6 +100,10 @@ class GameSettingsGenerated:
# PlayerPrefs.GetInt(AUTOFIGHT_DOWN_FRAME, 0)
pass # Unknown
# /mod/experiment/world/model/worldatlas.lua
# PlayerPrefs.GetInt(string.format("world_new_shop_unlock_count_in_port_%d_%d_%d", getProxy(PlayerProxy):getRawData().id, nowWorld().activateCount, slot1), -1)
world_new_shop_unlock_count_in_port__d__d__d = Field(formatter=int, default=0, regex='world_new_shop_unlock_count_in_port_%d_%d_%d')
# /mod/experiment/world/model/worldconst.lua
# PlayerPrefs.GetInt("world_help_progress")
world_help_progress = Field(formatter=int, default=0, regex='world_help_progress')
@ -123,12 +133,14 @@ class GameSettingsGenerated:
auto_switch_mode = Field(formatter=int, default=0, regex='auto_switch_mode')
# PlayerPrefs.GetString("auto_switch_difficult_safe", "only")
auto_switch_difficult_safe = Field(formatter=str, default='only', regex='auto_switch_difficult_safe')
# PlayerPrefs.GetInt("auto_switch_mode", 0)
pass # Duplicate
# PlayerPrefs.GetString("auto_switch_difficult_base", "all")
auto_switch_difficult_base = Field(formatter=str, default='all', regex='auto_switch_difficult_base')
# /mod/experiment/world/view/wsmapright.lua
# PlayerPrefs.GetInt("world_skip_precombat", 0)
# PlayerPrefs.GetString("auto_switch_difficult_safe", "only")
pass # Duplicate
# PlayerPrefs.GetString("auto_switch_difficult_treasure", "all")
auto_switch_difficult_treasure = Field(formatter=str, default='all', regex='auto_switch_difficult_treasure')
# /model/const/chapterconst.lua
# PlayerPrefs.GetInt("chapter_skip_battle")
@ -221,6 +233,10 @@ class GameSettingsGenerated:
SetScreenRatio = Field(formatter=float, default=0.0, regex='SetScreenRatio')
# PlayerPrefs.GetInt("story_autoplay_flag", 0)
story_autoplay_flag = Field(formatter=int, default=0, regex='story_autoplay_flag')
# PlayerPrefs.GetInt("ActBossTipLastTime", 0)
ActBossTipLastTime = Field(formatter=int, default=0, regex='ActBossTipLastTime')
# PlayerPrefs.GetInt("ActBossTip", 0)
ActBossTip = Field(formatter=int, default=0, regex='ActBossTip')
# PlayerPrefs.GetInt("collection_Help", 0)
collection_Help = Field(formatter=int, default=0, regex='collection_Help')
# PlayerPrefs.GetInt("main_scene_word_toggle", 1)
@ -251,6 +267,8 @@ class GameSettingsGenerated:
event_act_help1 = Field(formatter=int, default=0, regex='event_act_help1(.*)')
# PlayerPrefs.GetInt("story_speed_flag" .. ((not getProxy(PlayerProxy) or getProxy(PlayerProxy):getRawData().id) and 1), 0)
story_speed_flag = Field(formatter=int, default=0, regex='story_speed_flag(.*)')
# PlayerPrefs.GetInt("Painting_Download_Prefs", 0)
Painting_Download_Prefs = Field(formatter=int, default=0, regex='Painting_Download_Prefs')
# PlayerPrefs.GetInt("tipLimitSkinShopTime_", 0)
tipLimitSkinShopTime = Field(formatter=int, default=0, regex='tipLimitSkinShopTime_')
# PlayerPrefs.GetString("_WorldBossProgressTipFlag_", slot1[1] .. "&" .. slot1[1] + slot1[2])
@ -265,6 +283,18 @@ class GameSettingsGenerated:
IsTipNewTheme = Field(formatter=int, default=0, regex='(.*)IsTipNewTheme(.*)')
# PlayerPrefs.GetString(getProxy(PlayerProxy):getRawData().id .. "IsTipNewGenFurniture")
IsTipNewGenFurniture = Field(formatter=str, default='', regex='(.*)IsTipNewGenFurniture')
# PlayerPrefs.GetString("RandomFlagShipList" .. slot1:getRawData().id, "")
RandomFlagShipList = Field(formatter=str, default='', regex='RandomFlagShipList(.*)')
# PlayerPrefs.GetInt("RandomFlagShipTime" .. getProxy(PlayerProxy):getRawData().id, 0)
RandomFlagShipTime = Field(formatter=int, default=0, regex='RandomFlagShipTime(.*)')
# PlayerPrefs.GetInt("AutoBotCOFlag" .. getProxy(PlayerProxy):getRawData().id, 0)
AutoBotCOFlag = Field(formatter=int, default=0, regex='AutoBotCOFlag(.*)')
# PlayerPrefs.GetInt("WorkbenchDailyTip" .. getProxy(PlayerProxy):getRawData().id, 0)
WorkbenchDailyTip = Field(formatter=int, default=0, regex='WorkbenchDailyTip(.*)')
# PlayerPrefs.GetInt(BATTLERESULT_SKIP_DISPAY_PAINTING)
pass # Unknown
# PlayerPrefs.GetInt(BATTLERESULT_DISPAY_PAINTING, 0)
pass # Unknown
# /model/proxy/technologyproxy.lua
# PlayerPrefs.GetInt("technology_version")
@ -293,11 +323,13 @@ class GameSettingsGenerated:
# /model/vo/activity.lua
# PlayerPrefs.GetInt("ACTIVITY_TYPE_EVENT_" .. slot0.id .. "_" .. getProxy(PlayerProxy):getData().id)
ACTIVITY_TYPE_EVENT = Field(formatter=int, default=0, regex='ACTIVITY_TYPE_EVENT_(.*)_(.*)')
# PlayerPrefs.GetInt("DAY_TIP_" .. uv0.id .. "_" .. getProxy(PlayerProxy):getData().id .. "_" .. uv0:getDayIndex())
DAY_TIP = Field(formatter=int, default=0, regex='DAY_TIP_(.*)_(.*)_(.*)')
# /model/vo/chapter.lua
# PlayerPrefs.GetInt("chapter_quickPlay_flag_" .. slot0.id, 0)
chapter_quickPlay_flag = Field(formatter=int, default=0, regex='chapter_quickPlay_flag_(.*)')
# PlayerPrefs.GetInt(uv0.GetChapterLastFleetCacheKey(slot0), 0)
# PlayerPrefs.GetInt(Chapter.GetSPOperationItemCacheKey(slot0.id), 0)
pass # Unknown
# /model/vo/chapterfleet.lua
@ -313,6 +345,10 @@ class GameSettingsGenerated:
paint_hide_other_obj = Field(formatter=int, default=0, regex='paint_hide_other_obj_(.*)')
# PlayerPrefs.GetString("equipment_record" .. "_" .. slot1 .. "_" .. slot0.id)
equipment_record = Field(formatter=str, default='', regex='equipment_record_(.*)_(.*)')
# PlayerPrefs.GetString("spweapon_record" .. "_" .. slot1 .. "_" .. slot0.id, "")
spweapon_record = Field(formatter=str, default='', regex='spweapon_record_(.*)_(.*)')
# PlayerPrefs.GetInt("SHIP_NAME_COLOR", PLATFORM_CODE == PLATFORM_CH and 1 or 0)
SHIP_NAME_COLOR = Field(formatter=int, default=0, regex='SHIP_NAME_COLOR')
# /model/vo/guild/events/guildmission.lua
# PlayerPrefs.GetInt("guild_mission_formation_tip" .. slot0.configId, 0)
@ -322,17 +358,27 @@ class GameSettingsGenerated:
# PlayerPrefs.GetInt(slot0:prefKey())
pass # Unknown
# /model/vo/task/activitytask.lua
# PlayerPrefs.GetInt("ryza_task_" .. getProxy(PlayerProxy):getRawData().id .. "_" .. slot0.id)
ryza_task = Field(formatter=int, default=0, regex='ryza_task_(.*)_(.*)')
# PlayerPrefs.GetInt("ryza_task_" .. getProxy(PlayerProxy):getRawData().id .. "_" .. slot0.id)
pass # Duplicate
# /support/helpers/m02.lua
# PlayerPrefs.GetInt("paint_hide_other_obj_" .. slot1, 0)
pass # Duplicate
# PlayerPrefs.GetInt("paint_hide_other_obj_" .. slot1, 0)
pass # Duplicate
# PlayerPrefs.GetInt("paint_hide_other_obj_" .. slot1, 0)
pass # Duplicate
# /support/utils/hxset.lua
# PlayerPrefs.GetInt(uv0.codeModeKey)
pass # Unknown
# PlayerPrefs.GetInt("localization_use", 0)
localization_use = Field(formatter=int, default=0, regex='localization_use')
# PlayerPrefs.GetInt("localization_time_1_" .. getProxy(PlayerProxy):getData().id, 0)
localization_time_1 = Field(formatter=int, default=0, regex='localization_time_1_(.*)')
# PlayerPrefs.GetInt("localization_time_2_" .. slot2, 0)
localization_time_2 = Field(formatter=int, default=0, regex='localization_time_2_(.*)')
# /view/activity/activitymediator.lua
# PlayerPrefs.GetString("permanent_time", "")
@ -354,9 +400,33 @@ class GameSettingsGenerated:
# PlayerPrefs.GetInt(string.format("cursing_%d_task_week_%d", slot0.activity.id, slot5), 0)
cursing__d_task_week__d = Field(formatter=int, default=0, regex='cursing_%d_task_week_%d')
# /view/activity/refluxmediator.lua
# PlayerPrefs.GetInt(slot6.id .. "_" .. slot2.data2)
pass # Unknown
# /view/activity/ryzataskscene.lua
# PlayerPrefs.GetInt("ryza_task_help_" .. getProxy(PlayerProxy):getRawData().id)
ryza_task_help = Field(formatter=int, default=0, regex='ryza_task_help_(.*)')
# /view/activity/atelier/atelierbufflayer.lua
# PlayerPrefs.GetInt("first_enter_ryza_buff_" .. getProxy(PlayerProxy):getRawData().id, 0)
first_enter_ryza_buff = Field(formatter=int, default=0, regex='first_enter_ryza_buff_(.*)')
# /view/activity/atelier/ateliercompositescene.lua
# PlayerPrefs.GetInt("first_enter_ryza_atelier_" .. getProxy(PlayerProxy):getRawData().id, 0)
first_enter_ryza_atelier = Field(formatter=int, default=0, regex='first_enter_ryza_atelier_(.*)')
# /view/activity/backhills/anniversaryisland2023/anniversaryislandcomposite2023scene.lua
# PlayerPrefs.GetInt("workbench_show_composite_avaliable", 0)
workbench_show_composite_avaliable = Field(formatter=int, default=0, regex='workbench_show_composite_avaliable')
# /view/activity/backhills/anniversaryisland2023/anniversaryislandhotspringscene.lua
# PlayerPrefs.GetString("hotspring_ship_pos_2023", "")
hotspring_ship_pos_2023 = Field(formatter=str, default='', regex='hotspring_ship_pos_2023')
# /view/activity/backhills/newyearfestival/newyearhotspringscene.lua
# PlayerPrefs.GetString("hotspring_ship_pos", "")
hotspring_ship_pos = Field(formatter=str, default='', regex='hotspring_ship_pos')
# /view/activity/backhills/springfestival2023/fireworkpanellayer.lua
# PlayerPrefs.GetInt("fireworks_" .. slot0.playerId .. "_pos_" .. slot5)
fireworks = Field(formatter=int, default=0, regex='fireworks_(.*)_pos_(.*)')
# /view/activity/banaiactivity/blackwhitegridlayer.lua
# PlayerPrefs.GetString("BlackWhiteGridMapData-" .. slot1.id .. "-" .. slot0.player.id, "")
@ -364,6 +434,10 @@ class GameSettingsGenerated:
# PlayerPrefs.GetInt("BlackWhiteGridMapIndex-" .. slot0.player.id, 1)
BlackWhiteGridMapIndex = Field(formatter=int, default=1, regex='BlackWhiteGridMapIndex-(.*)')
# /view/activity/bossrush/bossrushfleetselectmediator.lua
# PlayerPrefs.GetInt("series_mode_flag" .. slot1.id, -1)
series_mode_flag = Field(formatter=int, default=-1, regex='series_mode_flag(.*)')
# /view/activity/decodegame/game/decodegameview.lua
# PlayerPrefs.GetInt("DecodeGameHelpBg" .. getProxy(PlayerProxy):getRawData().id .. slot1, 0)
DecodeGameHelpBg = Field(formatter=int, default=0, regex='DecodeGameHelpBg(.*)(.*)')
@ -388,6 +462,10 @@ class GameSettingsGenerated:
# PlayerPrefs.GetInt("SuperBurinPopUp_" .. getProxy(PlayerProxy):getRawData().id, 0)
SuperBurinPopUp = Field(formatter=int, default=0, regex='SuperBurinPopUp_(.*)')
# /view/activity/subpages/cardpuzzlepage.lua
# PlayerPrefs.GetInt("DAY_TIP_" .. slot0.activity.id .. "_" .. getProxy(PlayerProxy):getData().id .. "_" .. slot0.activity:getDayIndex())
pass # Duplicate
# /view/activity/subpages/collectioneventptpage.lua
# PlayerPrefs.GetInt("ACTIVITY_TYPE_EVENT_" .. slot0.activity.id .. "_" .. getProxy(PlayerProxy):getData().id)
pass # Duplicate
@ -428,6 +506,10 @@ class GameSettingsGenerated:
# PlayerPrefs.GetInt("wwf_todo_task_num_" .. getProxy(PlayerProxy):getData().id)
pass # Duplicate
# /view/activity/worldboss/activitybosstotalrewardpanel.lua
# PlayerPrefs.GetInt(AUTO_BATTLE_LABEL, 0)
pass # Unknown
# /view/activity/worldinpicture/worldinpicturescene.lua
# PlayerPrefs.GetString("WorldInPictureScene_1" .. getProxy(PlayerProxy):getRawData().id, "0#0")
WorldInPictureScene_1 = Field(formatter=str, default='0#0', regex='WorldInPictureScene_1(.*)')
@ -457,12 +539,18 @@ class GameSettingsGenerated:
chapter_submarine_ai_type = Field(formatter=int, default=0, regex='chapter_submarine_ai_type_(.*)')
# /view/battle/levelscene.lua
# PlayerPrefs.GetInt("ex_mapId")
# PlayerPrefs.GetInt("ex_mapId", 0)
ex_mapId = Field(formatter=int, default=0, regex='ex_mapId')
# PlayerPrefs.GetString("remaster_tip")
remaster_tip = Field(formatter=str, default='', regex='remaster_tip')
# PlayerPrefs.GetInt("chapter_autofight_flag_" .. uv2.id, 1)
chapter_autofight_flag = Field(formatter=int, default=1, regex='chapter_autofight_flag_(.*)')
# PlayerPrefs.GetInt("first_enter_ryza_buff_" .. getProxy(PlayerProxy):getRawData().id, 0)
pass # Duplicate
# /view/battle/battleresult/pages/newbattleresultdisplayawardpage.lua
# PlayerPrefs.GetInt(DISPLAY_SHIP_GET_EFFECT)
pass # Unknown
# /view/battle/battleresult/util/newbattleresultdataextender.lua
# PlayerPrefs.GetInt(AUTO_BATTLE_LABEL, 0)
pass # Unknown
# /view/collection/galleryconst.lua
# PlayerPrefs.GetInt(uv0.Set_BG_Func_Save_Tag .. getProxy(PlayerProxy):getRawData().id)
@ -484,12 +572,16 @@ class GameSettingsGenerated:
# PlayerPrefs.GetInt("Tec_Ship_Gift_Enter_Tag", 0)
Tec_Ship_Gift_Enter_Tag = Field(formatter=int, default=0, regex='Tec_Ship_Gift_Enter_Tag')
# /view/level/levelfleetview.lua
# /view/level/levelcontinuousoperationtotalrewardpanel.lua
# PlayerPrefs.GetInt("autoFight_firstUse_sp", 0)
autoFight_firstUse_sp = Field(formatter=int, default=0, regex='autoFight_firstUse_sp')
# /view/level/levelfleetview.lua
# PlayerPrefs.GetInt("autoFight_firstUse_sp", 0)
pass # Duplicate
# PlayerPrefs.GetInt(uv0, 1)
pass # Unknown
# PlayerPrefs.GetInt(uv0, 1)
# PlayerPrefs.GetInt(uv1, 1)
pass # Unknown
# PlayerPrefs.GetInt("lastFleetDuty_" .. (slot0.chapter.id or 0), 0)
lastFleetDuty = Field(formatter=int, default=0, regex='lastFleetDuty_(.*)')
@ -503,15 +595,13 @@ class GameSettingsGenerated:
pass # Unknown
# PlayerPrefs.GetInt(uv0, 1)
pass # Unknown
# PlayerPrefs.GetInt(Chapter.GetSPOperationItemCacheKey(slot0.chapter.id), 0)
pass # Unknown
# /view/level/levelinfoview.lua
# PlayerPrefs.GetInt("chapter_loop_flag_" .. slot1.id, -1)
chapter_loop_flag = Field(formatter=int, default=-1, regex='chapter_loop_flag_(.*)')
# PlayerPrefs.GetInt("chapter_autofight_flag_" .. slot1.id, 1)
pass # Duplicate
# PlayerPrefs.GetInt("chapter_quickPlay_flag_" .. slot1.id, 0)
# PlayerPrefs.GetInt("chapter_quickPlay_flag_" .. slot1.id, 1)
pass # Duplicate
# /view/level/leveloperationitempanel.lua
@ -534,18 +624,40 @@ class GameSettingsGenerated:
# PlayerPrefs.GetInt("help_displayed_on_" .. uv1.id, 0)
help_displayed_on = Field(formatter=int, default=0, regex='help_displayed_on_(.*)')
# /view/limitchallenge/limitchallengeconst.lua
# PlayerPrefs.GetInt(uv0.RedPointKey, 0)
pass # Unknown
# /view/login/loginscene.lua
# PlayerPrefs.GetString("op_ver", "")
op_ver = Field(formatter=str, default='', regex='op_ver')
# /view/main/mailmediator.lua
# PlayerPrefs.GetInt("help_research_package", 0)
help_research_package = Field(formatter=int, default=0, regex='help_research_package')
# /view/main/trainingcampscene.lua
# PlayerPrefs.GetInt("TrainCamp_Tec_Catchup_First_Tag", 0)
TrainCamp_Tec_Catchup_First_Tag = Field(formatter=int, default=0, regex='TrainCamp_Tec_Catchup_First_Tag')
# /view/main/skinshop/skinshopscene.lua
# PlayerPrefs.GetInt("skinShop#l2dPreViewToggle" .. getProxy(PlayerProxy):getRawData().id, 0)
skinShop#l2dPreViewToggle = Field(formatter=int, default=0, regex='skinShop#l2dPreViewToggle(.*)')
# /view/mediacollection/worldmediacollectionmemorygrouplayer.lua
# PlayerPrefs.GetInt("MEMORY_GROUP_NOTIFICATION" .. getProxy(PlayerProxy):getRawData().id .. " " .. slot3.id, 0)
pass # Duplicate
# PlayerPrefs.GetInt("MEMORY_GROUP_NOTIFICATION" .. slot2 .. " " .. slot7.id, 0)
pass # Duplicate
# /view/minigame/gameview/decodeminigameview.lua
# PlayerPrefs.GetInt("DecodeGameMapId", 1)
DecodeGameMapId = Field(formatter=int, default=1, regex='DecodeGameMapId')
# /view/minigame/gameview/gameroomqteview.lua
# PlayerPrefs.GetInt("QTEGameGuide", 0)
QTEGameGuide = Field(formatter=int, default=0, regex='QTEGameGuide')
# /view/minigame/gameview/musicgameview.lua
# PlayerPrefs.GetInt("musicgame_first_" .. getProxy(PlayerProxy):getData().id)
musicgame_first = Field(formatter=int, default=0, regex='musicgame_first_(.*)')
@ -554,7 +666,11 @@ class GameSettingsGenerated:
# /view/minigame/gameview/qtegameview.lua
# PlayerPrefs.GetInt("QTEGameGuide", 0)
QTEGameGuide = Field(formatter=int, default=0, regex='QTEGameGuide')
pass # Duplicate
# /view/minigame/gameview/ryzaminigameview.lua
# PlayerPrefs.GetInt("ryza_minigame_help", 0)
ryza_minigame_help = Field(formatter=int, default=0, regex='ryza_minigame_help')
# /view/minigame/gameview/volleyballgameview.lua
# PlayerPrefs.GetInt("volleyballgame_first_" .. getProxy(PlayerProxy):getData().id)
@ -578,6 +694,12 @@ class GameSettingsGenerated:
# PlayerPrefs.GetInt("ItemIconChange_" .. slot2.equipID, 0)
ItemIconChange = Field(formatter=int, default=0, regex='ItemIconChange_(.*)')
# /view/newmain/sequence/mainguidesequence.lua
# PlayerPrefs.GetInt("ryza_task_help_" .. getProxy(PlayerProxy):getRawData().id, 0)
pass # Duplicate
# PlayerPrefs.GetInt("first_enter_ryza_atelier_" .. getProxy(PlayerProxy):getRawData().id, 0)
pass # Duplicate
# /view/newmain/view/mainchatroomview.lua
# PlayerPrefs.GetInt(HIDE_CHAT_FLAG)
pass # Unknown
@ -590,6 +712,14 @@ class GameSettingsGenerated:
# PlayerPrefs.GetInt("paint_hide_other_obj_" .. slot0.painting.paintingName, 0)
pass # Duplicate
# /view/reflux/refluxscene.lua
# PlayerPrefs.GetInt(getProxy(PlayerProxy):getRawData().id .. "_" .. getProxy(RefluxProxy).returnTimestamp, 0)
pass # Unknown
# /view/reflux/refluxshopview.lua
# PlayerPrefs.GetInt("RefluxShop_Enter_Day", 0)
RefluxShop_Enter_Day = Field(formatter=int, default=0, regex='RefluxShop_Enter_Day')
# /view/setting/newsettingsscene.lua
# PlayerPrefs.GetFloat("firstIntoOtherPanel")
pass # Duplicate
@ -694,6 +824,10 @@ class GameSettingsGenerated:
# PlayerPrefs.GetInt("newserver_shop_first_" .. slot0.playerId)
pass # Duplicate
# /view/shops/skinshop/views/newskinshopmainview.lua
# PlayerPrefs.GetInt("skinShop#l2dPreViewToggle" .. getProxy(PlayerProxy):getRawData().id, 0)
pass # Duplicate
# /view/snapshot/snapshotscene.lua
# PlayerPrefs.GetInt("hadShowForVideoTip")
hadShowForVideoTip = Field(formatter=int, default=0, regex='hadShowForVideoTip')
@ -704,6 +838,10 @@ class GameSettingsGenerated:
# PlayerPrefs.GetInt("snapshotAgress")
snapshotAgress = Field(formatter=int, default=0, regex='snapshotAgress')
# /view/technology/selecttechnologymediator.lua
# PlayerPrefs.GetString("technology_day_mark", "")
technology_day_mark = Field(formatter=str, default='', regex='technology_day_mark')
# /view/technology/technologysettingslayer.lua
# PlayerPrefs.GetInt("isShowFinishCatchupVersion")
isShowFinishCatchupVersion = Field(formatter=int, default=0, regex='isShowFinishCatchupVersion')
@ -715,6 +853,12 @@ class GameSettingsGenerated:
pass # Duplicate
# PlayerPrefs.GetInt("world_sub_call_line", 0)
pass # Duplicate
# PlayerPrefs.GetInt("world_skip_precombat", 0)
pass # Duplicate
# PlayerPrefs.GetInt("auto_switch_mode", 0)
pass # Duplicate
# PlayerPrefs.GetInt("auto_switch_mode", 0)
pass # Duplicate
# PlayerPrefs.GetInt("auto_switch_mode", 0)
pass # Duplicate
@ -727,11 +871,7 @@ class GameSettingsGenerated:
auto_switch_wait_2 = Field(formatter=int, default=0, regex='auto_switch_wait_2')
# PlayerPrefs.GetInt("auto_switch_mode", 0)
pass # Duplicate
# PlayerPrefs.GetString(slot6, slot7)
# PlayerPrefs.GetString(slot4, slot5)
pass # Unknown
# PlayerPrefs.GetString(slot4, slot5)
pass # Unknown
# /view/world/worldmediacollection/worldmediacollectionmemorygrouplayer.lua
# PlayerPrefs.GetInt("MEMORY_GROUP_NOTIFICATION" .. getProxy(PlayerProxy):getRawData().id .. " " .. slot3.id, 0)
pass # Duplicate
# PlayerPrefs.GetInt("MEMORY_GROUP_NOTIFICATION" .. slot2 .. " " .. slot7.id, 0)
pass # Duplicate

View File

@ -67,7 +67,7 @@ MAP_WALK_OUT_OF_STEP = Button(area={'cn': (654, 312, 704, 335), 'en': (454, 314,
MAP_WALK_SPEEDUP = Button(area={'cn': (1025, 406, 1055, 436), 'en': (1025, 406, 1055, 436), 'jp': (1025, 406, 1055, 436), 'tw': (1025, 406, 1055, 436)}, color={'cn': (62, 97, 72), 'en': (62, 97, 72), 'jp': (62, 97, 72), 'tw': (62, 97, 72)}, button={'cn': (1025, 406, 1055, 436), 'en': (1025, 406, 1055, 436), 'jp': (1025, 406, 1055, 436), 'tw': (1025, 406, 1055, 436)}, file={'cn': './assets/cn/handler/MAP_WALK_SPEEDUP.png', 'en': './assets/en/handler/MAP_WALK_SPEEDUP.png', 'jp': './assets/jp/handler/MAP_WALK_SPEEDUP.png', 'tw': './assets/tw/handler/MAP_WALK_SPEEDUP.png'})
MISSION_POPUP_ACK = Button(area={'cn': (432, 493, 543, 533), 'en': (413, 489, 566, 532), 'jp': (410, 482, 574, 539), 'tw': (413, 489, 566, 532)}, color={'cn': (181, 182, 184), 'en': (169, 170, 172), 'jp': (162, 164, 167), 'tw': (169, 170, 172)}, button={'cn': (432, 493, 543, 533), 'en': (413, 489, 566, 532), 'jp': (410, 482, 574, 539), 'tw': (413, 489, 566, 532)}, file={'cn': './assets/cn/handler/MISSION_POPUP_ACK.png', 'en': './assets/en/handler/MISSION_POPUP_ACK.png', 'jp': './assets/jp/handler/MISSION_POPUP_ACK.png', 'tw': './assets/tw/handler/MISSION_POPUP_ACK.png'})
MISSION_POPUP_GO = Button(area={'cn': (719, 493, 861, 534), 'en': (716, 488, 869, 533), 'jp': (711, 482, 874, 539), 'tw': (716, 488, 869, 533)}, color={'cn': (125, 164, 214), 'en': (89, 138, 201), 'jp': (93, 142, 204), 'tw': (89, 138, 201)}, button={'cn': (719, 493, 861, 534), 'en': (716, 488, 869, 533), 'jp': (711, 482, 874, 539), 'tw': (716, 488, 869, 533)}, file={'cn': './assets/cn/handler/MISSION_POPUP_GO.png', 'en': './assets/en/handler/MISSION_POPUP_GO.png', 'jp': './assets/jp/handler/MISSION_POPUP_GO.png', 'tw': './assets/tw/handler/MISSION_POPUP_GO.png'})
MOB_MOVE_CANCEL = Button(area={'cn': (1162, 646, 1220, 674), 'en': (1162, 646, 1220, 674), 'jp': (1162, 644, 1222, 675), 'tw': (1162, 646, 1220, 674)}, color={'cn': (224, 176, 173), 'en': (224, 176, 173), 'jp': (207, 140, 136), 'tw': (224, 176, 173)}, button={'cn': (1162, 646, 1220, 674), 'en': (1162, 646, 1220, 674), 'jp': (1162, 644, 1222, 675), 'tw': (1162, 646, 1220, 674)}, file={'cn': './assets/cn/handler/MOB_MOVE_CANCEL.png', 'en': './assets/cn/handler/MOB_MOVE_CANCEL.png', 'jp': './assets/jp/handler/MOB_MOVE_CANCEL.png', 'tw': './assets/cn/handler/MOB_MOVE_CANCEL.png'})
MOB_MOVE_CANCEL = Button(area={'cn': (1162, 646, 1220, 674), 'en': (1162, 646, 1220, 674), 'jp': (1162, 644, 1222, 675), 'tw': (1164, 647, 1219, 673)}, color={'cn': (224, 176, 173), 'en': (224, 176, 173), 'jp': (207, 140, 136), 'tw': (230, 185, 181)}, button={'cn': (1162, 646, 1220, 674), 'en': (1162, 646, 1220, 674), 'jp': (1162, 644, 1222, 675), 'tw': (1164, 647, 1219, 673)}, file={'cn': './assets/cn/handler/MOB_MOVE_CANCEL.png', 'en': './assets/cn/handler/MOB_MOVE_CANCEL.png', 'jp': './assets/jp/handler/MOB_MOVE_CANCEL.png', 'tw': './assets/tw/handler/MOB_MOVE_CANCEL.png'})
MOB_MOVE_ENTER = Button(area={'cn': (1102, 504, 1157, 578), 'en': (1102, 504, 1157, 578), 'jp': (1102, 504, 1157, 578), 'tw': (1102, 504, 1157, 578)}, color={'cn': (122, 124, 131), 'en': (122, 124, 131), 'jp': (122, 124, 131), 'tw': (122, 124, 131)}, button={'cn': (1102, 504, 1157, 578), 'en': (1102, 504, 1157, 578), 'jp': (1102, 504, 1157, 578), 'tw': (1102, 504, 1157, 578)}, file={'cn': './assets/cn/handler/MOB_MOVE_ENTER.png', 'en': './assets/en/handler/MOB_MOVE_ENTER.png', 'jp': './assets/jp/handler/MOB_MOVE_ENTER.png', 'tw': './assets/tw/handler/MOB_MOVE_ENTER.png'})
MONTHLY_PASS_NOTICE = Button(area={'cn': (554, 505, 726, 561), 'en': (716, 488, 869, 533), 'jp': (554, 505, 726, 561), 'tw': (554, 505, 726, 561)}, color={'cn': (109, 153, 208), 'en': (89, 138, 201), 'jp': (109, 153, 208), 'tw': (109, 153, 208)}, button={'cn': (872, 152, 939, 196), 'en': (863, 173, 929, 217), 'jp': (872, 152, 939, 196), 'tw': (872, 152, 939, 196)}, file={'cn': './assets/cn/handler/MONTHLY_PASS_NOTICE.png', 'en': './assets/en/handler/MONTHLY_PASS_NOTICE.png', 'jp': './assets/cn/handler/MONTHLY_PASS_NOTICE.png', 'tw': './assets/cn/handler/MONTHLY_PASS_NOTICE.png'})
MYSTERY_ITEM = Button(area={'cn': (589, 294, 691, 427), 'en': (589, 294, 691, 427), 'jp': (589, 294, 691, 427), 'tw': (589, 294, 691, 427)}, color={'cn': (144, 127, 83), 'en': (144, 127, 83), 'jp': (144, 127, 83), 'tw': (144, 127, 83)}, button={'cn': (588, 478, 698, 496), 'en': (588, 478, 698, 496), 'jp': (588, 478, 698, 496), 'tw': (588, 478, 698, 496)}, file={'cn': './assets/cn/handler/MYSTERY_ITEM.png', 'en': './assets/en/handler/MYSTERY_ITEM.png', 'jp': './assets/jp/handler/MYSTERY_ITEM.png', 'tw': './assets/tw/handler/MYSTERY_ITEM.png'})

View File

@ -148,12 +148,19 @@ class MeowfficerCollect(MeowfficerBase):
Handle skip transitions; proceeds slowly
with caution to prevent unintentional actions
"""
def additional():
if self.appear(MEOWFFICER_TRAIN_EVALUATE, offset=(20, 20), interval=3):
self.device.click(MEOWFFICER_TRAIN_EVALUATE)
return True
return False
# Trigger lock popup appearance to initiate sequence
self.ui_click(MEOWFFICER_TRAIN_CLICK_SAFE_AREA,
appear_button=MEOWFFICER_GET_CHECK, check_button=MEOWFFICER_CONFIRM,
appear_button=MEOWFFICER_GET_CHECK, check_button=MEOWFFICER_CONFIRM, additional=additional,
offset=(40, 40), retry_wait=3, skip_first_screenshot=True)
self.ui_click(MEOWFFICER_CANCEL, check_button=self._meow_check_popup_exit,
self.ui_click(MEOWFFICER_CANCEL, check_button=self._meow_check_popup_exit, additional=additional,
offset=(40, 20), retry_wait=3, skip_first_screenshot=True)
self.device.click_record.pop()
self.device.click_record.pop()

View File

@ -872,7 +872,7 @@ class OperationSiren(OSMap):
if __name__ == '__main__':
self = OperationSiren('month_test', task='OpsiMonthBoss')
self = OperationSiren('alas', task='OpsiExplore')
from module.os.config import OSConfig
self.config = self.config.merge(OSConfig())
@ -880,5 +880,5 @@ if __name__ == '__main__':
self.device.screenshot()
self.os_init()
logger.hr("OS clear Month Boss", level=1)
self.clear_month_boss()
# logger.hr("OS clear Month Boss", level=1)
self.os_shop()

View File

@ -24,6 +24,7 @@ ENTRANCE_3 = Button(area={'cn': (540, 135, 732, 265), 'en': (540, 135, 732, 265)
ENTRANCE_4 = Button(area={'cn': (782, 159, 951, 275), 'en': (782, 159, 951, 275), 'jp': (782, 159, 951, 275), 'tw': (782, 159, 951, 275)}, color={'cn': (80, 153, 218), 'en': (80, 153, 218), 'jp': (80, 153, 218), 'tw': (80, 153, 218)}, button={'cn': (782, 159, 951, 275), 'en': (782, 159, 951, 275), 'jp': (782, 159, 951, 275), 'tw': (782, 159, 951, 275)}, file={'cn': './assets/cn/research/ENTRANCE_4.png', 'en': './assets/en/research/ENTRANCE_4.png', 'jp': './assets/jp/research/ENTRANCE_4.png', 'tw': './assets/tw/research/ENTRANCE_4.png'})
ENTRANCE_5 = Button(area={'cn': (1025, 186, 1169, 287), 'en': (1025, 186, 1169, 287), 'jp': (1025, 186, 1169, 287), 'tw': (1025, 186, 1169, 287)}, color={'cn': (80, 153, 218), 'en': (80, 153, 218), 'jp': (80, 153, 218), 'tw': (80, 153, 218)}, button={'cn': (1025, 186, 1169, 287), 'en': (1025, 186, 1169, 287), 'jp': (1025, 186, 1169, 287), 'tw': (1025, 186, 1169, 287)}, file={'cn': './assets/cn/research/ENTRANCE_5.png', 'en': './assets/en/research/ENTRANCE_5.png', 'jp': './assets/jp/research/ENTRANCE_5.png', 'tw': './assets/tw/research/ENTRANCE_5.png'})
GET_ITEMS_RESEARCH_SAVE = Button(area={'cn': (357, 643, 497, 701), 'en': (357, 643, 497, 701), 'jp': (357, 643, 497, 701), 'tw': (357, 643, 497, 701)}, color={'cn': (54, 65, 83), 'en': (54, 65, 83), 'jp': (54, 65, 83), 'tw': (54, 65, 83)}, button={'cn': (357, 643, 497, 701), 'en': (357, 643, 497, 701), 'jp': (357, 643, 497, 701), 'tw': (357, 643, 497, 701)}, file={'cn': './assets/cn/research/GET_ITEMS_RESEARCH_SAVE.png', 'en': './assets/en/research/GET_ITEMS_RESEARCH_SAVE.png', 'jp': './assets/jp/research/GET_ITEMS_RESEARCH_SAVE.png', 'tw': './assets/tw/research/GET_ITEMS_RESEARCH_SAVE.png'})
HAS_RESEARCH_QUEUE = Button(area={'cn': (44, 216, 64, 236), 'en': (44, 216, 64, 236), 'jp': (44, 216, 64, 236), 'tw': (44, 216, 64, 236)}, color={'cn': (50, 54, 82), 'en': (50, 54, 82), 'jp': (50, 54, 82), 'tw': (50, 54, 82)}, button={'cn': (44, 216, 64, 236), 'en': (44, 216, 64, 236), 'jp': (44, 216, 64, 236), 'tw': (44, 216, 64, 236)}, file={'cn': './assets/cn/research/HAS_RESEARCH_QUEUE.png', 'en': './assets/cn/research/HAS_RESEARCH_QUEUE.png', 'jp': './assets/cn/research/HAS_RESEARCH_QUEUE.png', 'tw': './assets/cn/research/HAS_RESEARCH_QUEUE.png'})
ITEMS_3_SWIPE = Button(area={'cn': (693, 219, 715, 503), 'en': (693, 219, 715, 503), 'jp': (693, 219, 715, 503), 'tw': (693, 219, 715, 503)}, color={'cn': (78, 70, 55), 'en': (78, 70, 55), 'jp': (78, 70, 55), 'tw': (78, 70, 55)}, button={'cn': (693, 219, 715, 503), 'en': (693, 219, 715, 503), 'jp': (693, 219, 715, 503), 'tw': (693, 219, 715, 503)}, file={'cn': './assets/cn/research/ITEMS_3_SWIPE.png', 'en': './assets/en/research/ITEMS_3_SWIPE.png', 'jp': './assets/jp/research/ITEMS_3_SWIPE.png', 'tw': './assets/tw/research/ITEMS_3_SWIPE.png'})
OCR_RESEARCH_1 = Button(area={'cn': (78, 277, 249, 330), 'en': (78, 277, 249, 330), 'jp': (78, 277, 249, 330), 'tw': (78, 277, 249, 330)}, color={'cn': (139, 160, 196), 'en': (139, 160, 196), 'jp': (139, 160, 196), 'tw': (139, 160, 196)}, button={'cn': (78, 277, 249, 330), 'en': (78, 277, 249, 330), 'jp': (78, 277, 249, 330), 'tw': (78, 277, 249, 330)}, file={'cn': './assets/cn/research/OCR_RESEARCH_1.png', 'en': './assets/en/research/OCR_RESEARCH_1.png', 'jp': './assets/jp/research/OCR_RESEARCH_1.png', 'tw': './assets/tw/research/OCR_RESEARCH_1.png'})
OCR_RESEARCH_2 = Button(area={'cn': (292, 263, 490, 325), 'en': (292, 263, 490, 325), 'jp': (292, 263, 490, 325), 'tw': (292, 263, 490, 325)}, color={'cn': (122, 153, 201), 'en': (122, 153, 201), 'jp': (122, 153, 201), 'tw': (122, 153, 201)}, button={'cn': (292, 263, 490, 325), 'en': (292, 263, 490, 325), 'jp': (292, 263, 490, 325), 'tw': (292, 263, 490, 325)}, file={'cn': './assets/cn/research/OCR_RESEARCH_2.png', 'en': './assets/en/research/OCR_RESEARCH_2.png', 'jp': './assets/jp/research/OCR_RESEARCH_2.png', 'tw': './assets/tw/research/OCR_RESEARCH_2.png'})
@ -32,7 +33,17 @@ OCR_RESEARCH_4 = Button(area={'cn': (752, 263, 950, 325), 'en': (752, 263, 950,
OCR_RESEARCH_5 = Button(area={'cn': (998, 276, 1169, 329), 'en': (998, 276, 1169, 329), 'jp': (998, 276, 1169, 329), 'tw': (998, 276, 1169, 329)}, color={'cn': (124, 156, 204), 'en': (124, 156, 204), 'jp': (124, 156, 204), 'tw': (124, 156, 204)}, button={'cn': (998, 276, 1169, 329), 'en': (998, 276, 1169, 329), 'jp': (998, 276, 1169, 329), 'tw': (998, 276, 1169, 329)}, file={'cn': './assets/cn/research/OCR_RESEARCH_5.png', 'en': './assets/en/research/OCR_RESEARCH_5.png', 'jp': './assets/jp/research/OCR_RESEARCH_5.png', 'tw': './assets/tw/research/OCR_RESEARCH_5.png'})
QUEUE_CHECK = Button(area={'cn': (118, 16, 227, 39), 'en': (117, 16, 215, 38), 'jp': (116, 14, 232, 42), 'tw': (118, 14, 227, 39)}, color={'cn': (149, 166, 205), 'en': (125, 139, 179), 'jp': (147, 163, 199), 'tw': (155, 171, 210)}, button={'cn': (118, 16, 227, 39), 'en': (117, 16, 215, 38), 'jp': (116, 14, 232, 42), 'tw': (118, 14, 227, 39)}, file={'cn': './assets/cn/research/QUEUE_CHECK.png', 'en': './assets/en/research/QUEUE_CHECK.png', 'jp': './assets/jp/research/QUEUE_CHECK.png', 'tw': './assets/tw/research/QUEUE_CHECK.png'})
QUEUE_CLAIM_REWARD = Button(area={'cn': (1230, 275, 1272, 420), 'en': (1225, 258, 1270, 448), 'jp': (1219, 254, 1279, 460), 'tw': (1219, 253, 1280, 460)}, color={'cn': (249, 182, 121), 'en': (249, 171, 97), 'jp': (249, 170, 97), 'tw': (249, 174, 102)}, button={'cn': (1230, 275, 1272, 420), 'en': (1225, 258, 1270, 448), 'jp': (1219, 254, 1279, 460), 'tw': (1219, 253, 1280, 460)}, file={'cn': './assets/cn/research/QUEUE_CLAIM_REWARD.png', 'en': './assets/en/research/QUEUE_CLAIM_REWARD.png', 'jp': './assets/jp/research/QUEUE_CLAIM_REWARD.png', 'tw': './assets/tw/research/QUEUE_CLAIM_REWARD.png'})
QUEUE_OCR_RESEARCH_1 = Button(area={'cn': (56, 280, 270, 346), 'en': (56, 280, 270, 346), 'jp': (56, 280, 270, 346), 'tw': (56, 280, 270, 346)}, color={'cn': (122, 154, 200), 'en': (122, 154, 200), 'jp': (122, 154, 200), 'tw': (122, 154, 200)}, button={'cn': (56, 280, 270, 346), 'en': (56, 280, 270, 346), 'jp': (56, 280, 270, 346), 'tw': (56, 280, 270, 346)}, file={'cn': './assets/cn/research/QUEUE_OCR_RESEARCH_1.png', 'en': './assets/cn/research/QUEUE_OCR_RESEARCH_1.png', 'jp': './assets/cn/research/QUEUE_OCR_RESEARCH_1.png', 'tw': './assets/cn/research/QUEUE_OCR_RESEARCH_1.png'})
QUEUE_OCR_RESEARCH_2 = Button(area={'cn': (283, 281, 497, 347), 'en': (283, 281, 497, 347), 'jp': (283, 281, 497, 347), 'tw': (283, 281, 497, 347)}, color={'cn': (202, 178, 142), 'en': (202, 178, 142), 'jp': (202, 178, 142), 'tw': (202, 178, 142)}, button={'cn': (283, 281, 497, 347), 'en': (283, 281, 497, 347), 'jp': (283, 281, 497, 347), 'tw': (283, 281, 497, 347)}, file={'cn': './assets/cn/research/QUEUE_OCR_RESEARCH_2.png', 'en': './assets/cn/research/QUEUE_OCR_RESEARCH_2.png', 'jp': './assets/cn/research/QUEUE_OCR_RESEARCH_2.png', 'tw': './assets/cn/research/QUEUE_OCR_RESEARCH_2.png'})
QUEUE_OCR_RESEARCH_3 = Button(area={'cn': (513, 280, 727, 346), 'en': (513, 280, 727, 346), 'jp': (513, 280, 727, 346), 'tw': (513, 280, 727, 346)}, color={'cn': (122, 155, 203), 'en': (122, 155, 203), 'jp': (122, 155, 203), 'tw': (122, 155, 203)}, button={'cn': (513, 280, 727, 346), 'en': (513, 280, 727, 346), 'jp': (513, 280, 727, 346), 'tw': (513, 280, 727, 346)}, file={'cn': './assets/cn/research/QUEUE_OCR_RESEARCH_3.png', 'en': './assets/cn/research/QUEUE_OCR_RESEARCH_3.png', 'jp': './assets/cn/research/QUEUE_OCR_RESEARCH_3.png', 'tw': './assets/cn/research/QUEUE_OCR_RESEARCH_3.png'})
QUEUE_OCR_RESEARCH_4 = Button(area={'cn': (739, 281, 953, 347), 'en': (739, 281, 953, 347), 'jp': (739, 281, 953, 347), 'tw': (739, 281, 953, 347)}, color={'cn': (202, 178, 143), 'en': (202, 178, 143), 'jp': (202, 178, 143), 'tw': (202, 178, 143)}, button={'cn': (739, 281, 953, 347), 'en': (739, 281, 953, 347), 'jp': (739, 281, 953, 347), 'tw': (739, 281, 953, 347)}, file={'cn': './assets/cn/research/QUEUE_OCR_RESEARCH_4.png', 'en': './assets/cn/research/QUEUE_OCR_RESEARCH_4.png', 'jp': './assets/cn/research/QUEUE_OCR_RESEARCH_4.png', 'tw': './assets/cn/research/QUEUE_OCR_RESEARCH_4.png'})
QUEUE_OCR_RESEARCH_5 = Button(area={'cn': (969, 280, 1183, 346), 'en': (969, 280, 1183, 346), 'jp': (969, 280, 1183, 346), 'tw': (969, 280, 1183, 346)}, color={'cn': (124, 156, 205), 'en': (124, 156, 205), 'jp': (124, 156, 205), 'tw': (124, 156, 205)}, button={'cn': (969, 280, 1183, 346), 'en': (969, 280, 1183, 346), 'jp': (969, 280, 1183, 346), 'tw': (969, 280, 1183, 346)}, file={'cn': './assets/cn/research/QUEUE_OCR_RESEARCH_5.png', 'en': './assets/cn/research/QUEUE_OCR_RESEARCH_5.png', 'jp': './assets/cn/research/QUEUE_OCR_RESEARCH_5.png', 'tw': './assets/cn/research/QUEUE_OCR_RESEARCH_5.png'})
QUEUE_REMAIN = Button(area={'cn': (156, 605, 272, 637), 'en': (151, 580, 278, 617), 'jp': (157, 605, 277, 636), 'tw': (165, 582, 275, 613)}, color={'cn': (193, 212, 240), 'en': (191, 210, 238), 'jp': (188, 208, 239), 'tw': (192, 211, 241)}, button={'cn': (156, 605, 272, 637), 'en': (151, 580, 278, 617), 'jp': (157, 605, 277, 636), 'tw': (165, 582, 275, 613)}, file={'cn': './assets/cn/research/QUEUE_REMAIN.png', 'en': './assets/en/research/QUEUE_REMAIN.png', 'jp': './assets/jp/research/QUEUE_REMAIN.png', 'tw': './assets/tw/research/QUEUE_REMAIN.png'})
QUEUE_SETIES_1 = Button(area={'cn': (66, 127, 99, 151), 'en': (66, 127, 99, 151), 'jp': (66, 127, 99, 151), 'tw': (66, 127, 99, 151)}, color={'cn': (196, 107, 90), 'en': (196, 107, 90), 'jp': (196, 107, 90), 'tw': (196, 107, 90)}, button={'cn': (66, 127, 99, 151), 'en': (66, 127, 99, 151), 'jp': (66, 127, 99, 151), 'tw': (66, 127, 99, 151)}, file={'cn': './assets/cn/research/QUEUE_SETIES_1.png', 'en': './assets/cn/research/QUEUE_SETIES_1.png', 'jp': './assets/cn/research/QUEUE_SETIES_1.png', 'tw': './assets/cn/research/QUEUE_SETIES_1.png'})
QUEUE_SETIES_2 = Button(area={'cn': (294, 127, 327, 151), 'en': (294, 127, 327, 151), 'jp': (294, 127, 327, 151), 'tw': (294, 127, 327, 151)}, color={'cn': (80, 98, 204), 'en': (80, 98, 204), 'jp': (80, 98, 204), 'tw': (80, 98, 204)}, button={'cn': (294, 127, 327, 151), 'en': (294, 127, 327, 151), 'jp': (294, 127, 327, 151), 'tw': (294, 127, 327, 151)}, file={'cn': './assets/cn/research/QUEUE_SETIES_2.png', 'en': './assets/cn/research/QUEUE_SETIES_2.png', 'jp': './assets/cn/research/QUEUE_SETIES_2.png', 'tw': './assets/cn/research/QUEUE_SETIES_2.png'})
QUEUE_SETIES_3 = Button(area={'cn': (523, 127, 556, 151), 'en': (523, 127, 556, 151), 'jp': (523, 127, 556, 151), 'tw': (523, 127, 556, 151)}, color={'cn': (200, 113, 98), 'en': (200, 113, 98), 'jp': (200, 113, 98), 'tw': (200, 113, 98)}, button={'cn': (523, 127, 556, 151), 'en': (523, 127, 556, 151), 'jp': (523, 127, 556, 151), 'tw': (523, 127, 556, 151)}, file={'cn': './assets/cn/research/QUEUE_SETIES_3.png', 'en': './assets/cn/research/QUEUE_SETIES_3.png', 'jp': './assets/cn/research/QUEUE_SETIES_3.png', 'tw': './assets/cn/research/QUEUE_SETIES_3.png'})
QUEUE_SETIES_4 = Button(area={'cn': (751, 127, 784, 151), 'en': (751, 127, 784, 151), 'jp': (751, 127, 784, 151), 'tw': (751, 127, 784, 151)}, color={'cn': (80, 101, 211), 'en': (80, 101, 211), 'jp': (80, 101, 211), 'tw': (80, 101, 211)}, button={'cn': (751, 127, 784, 151), 'en': (751, 127, 784, 151), 'jp': (751, 127, 784, 151), 'tw': (751, 127, 784, 151)}, file={'cn': './assets/cn/research/QUEUE_SETIES_4.png', 'en': './assets/cn/research/QUEUE_SETIES_4.png', 'jp': './assets/cn/research/QUEUE_SETIES_4.png', 'tw': './assets/cn/research/QUEUE_SETIES_4.png'})
QUEUE_SETIES_5 = Button(area={'cn': (979, 127, 1012, 151), 'en': (979, 127, 1012, 151), 'jp': (979, 127, 1012, 151), 'tw': (979, 127, 1012, 151)}, color={'cn': (200, 114, 100), 'en': (200, 114, 100), 'jp': (200, 114, 100), 'tw': (200, 114, 100)}, button={'cn': (979, 127, 1012, 151), 'en': (979, 127, 1012, 151), 'jp': (979, 127, 1012, 151), 'tw': (979, 127, 1012, 151)}, file={'cn': './assets/cn/research/QUEUE_SETIES_5.png', 'en': './assets/cn/research/QUEUE_SETIES_5.png', 'jp': './assets/cn/research/QUEUE_SETIES_5.png', 'tw': './assets/cn/research/QUEUE_SETIES_5.png'})
RESEARCH_COST_CHECKER = Button(area={'cn': (809, 365, 972, 386), 'en': (809, 365, 972, 386), 'jp': (809, 365, 972, 386), 'tw': (809, 365, 972, 386)}, color={'cn': (105, 114, 128), 'en': (105, 114, 128), 'jp': (105, 114, 128), 'tw': (105, 114, 128)}, button={'cn': (809, 365, 972, 386), 'en': (809, 365, 972, 386), 'jp': (809, 365, 972, 386), 'tw': (809, 365, 972, 386)}, file={'cn': './assets/cn/research/RESEARCH_COST_CHECKER.png', 'en': './assets/en/research/RESEARCH_COST_CHECKER.png', 'jp': './assets/jp/research/RESEARCH_COST_CHECKER.png', 'tw': './assets/tw/research/RESEARCH_COST_CHECKER.png'})
RESEARCH_DETAIL_QUIT = Button(area={'cn': (695, 656, 784, 707), 'en': (695, 656, 784, 707), 'jp': (695, 656, 784, 707), 'tw': (695, 656, 784, 707)}, color={'cn': (50, 57, 74), 'en': (50, 57, 74), 'jp': (50, 57, 74), 'tw': (50, 57, 74)}, button={'cn': (695, 656, 784, 707), 'en': (695, 656, 784, 707), 'jp': (695, 656, 784, 707), 'tw': (695, 656, 784, 707)}, file={'cn': './assets/cn/research/RESEARCH_DETAIL_QUIT.png', 'en': './assets/en/research/RESEARCH_DETAIL_QUIT.png', 'jp': './assets/jp/research/RESEARCH_DETAIL_QUIT.png', 'tw': './assets/tw/research/RESEARCH_DETAIL_QUIT.png'})
RESEARCH_FINISHED = Button(area={'cn': (384, 547, 502, 585), 'en': (382, 545, 504, 587), 'jp': (383, 546, 503, 586), 'tw': (384, 547, 502, 585)}, color={'cn': (233, 163, 69), 'en': (235, 174, 92), 'jp': (229, 159, 63), 'tw': (233, 163, 69)}, button={'cn': (384, 547, 502, 585), 'en': (382, 545, 504, 587), 'jp': (383, 546, 503, 586), 'tw': (384, 547, 502, 585)}, file={'cn': './assets/cn/research/RESEARCH_FINISHED.png', 'en': './assets/en/research/RESEARCH_FINISHED.png', 'jp': './assets/jp/research/RESEARCH_FINISHED.png', 'tw': './assets/tw/research/RESEARCH_FINISHED.png'})
@ -60,6 +71,7 @@ STATUS_3 = Button(area={'cn': (549, 598, 556, 605), 'en': (549, 598, 556, 605),
STATUS_4 = Button(area={'cn': (790, 570, 796, 576), 'en': (790, 570, 796, 576), 'jp': (790, 570, 796, 576), 'tw': (790, 570, 796, 576)}, color={'cn': (115, 166, 222), 'en': (115, 166, 222), 'jp': (115, 166, 222), 'tw': (115, 166, 222)}, button={'cn': (790, 570, 796, 576), 'en': (790, 570, 796, 576), 'jp': (790, 570, 796, 576), 'tw': (790, 570, 796, 576)}, file={'cn': './assets/cn/research/STATUS_4.png', 'en': './assets/en/research/STATUS_4.png', 'jp': './assets/jp/research/STATUS_4.png', 'tw': './assets/tw/research/STATUS_4.png'})
STATUS_5 = Button(area={'cn': (1031, 541, 1037, 547), 'en': (1031, 541, 1037, 547), 'jp': (1031, 541, 1037, 547), 'tw': (1031, 541, 1037, 547)}, color={'cn': (115, 166, 222), 'en': (115, 166, 222), 'jp': (115, 166, 222), 'tw': (115, 166, 222)}, button={'cn': (1031, 541, 1037, 547), 'en': (1031, 541, 1037, 547), 'jp': (1031, 541, 1037, 547), 'tw': (1031, 541, 1037, 547)}, file={'cn': './assets/cn/research/STATUS_5.png', 'en': './assets/en/research/STATUS_5.png', 'jp': './assets/jp/research/STATUS_5.png', 'tw': './assets/tw/research/STATUS_5.png'})
TEMPLATE_DETAIL = Template(file={'cn': './assets/cn/research/TEMPLATE_DETAIL.png', 'en': './assets/en/research/TEMPLATE_DETAIL.png', 'jp': './assets/jp/research/TEMPLATE_DETAIL.png', 'tw': './assets/tw/research/TEMPLATE_DETAIL.png'})
TEMPLATE_FINISHED = Template(file={'cn': './assets/cn/research/TEMPLATE_FINISHED.png', 'en': './assets/cn/research/TEMPLATE_FINISHED.png', 'jp': './assets/cn/research/TEMPLATE_FINISHED.png', 'tw': './assets/cn/research/TEMPLATE_FINISHED.png'})
TEMPLATE_RUNNING = Template(file={'cn': './assets/cn/research/TEMPLATE_RUNNING.png', 'en': './assets/en/research/TEMPLATE_RUNNING.png', 'jp': './assets/jp/research/TEMPLATE_RUNNING.png', 'tw': './assets/tw/research/TEMPLATE_RUNNING.png'})
TEMPLATE_S1 = Template(file={'cn': './assets/cn/research/TEMPLATE_S1.png', 'en': './assets/en/research/TEMPLATE_S1.png', 'jp': './assets/jp/research/TEMPLATE_S1.png', 'tw': './assets/tw/research/TEMPLATE_S1.png'})
TEMPLATE_S2 = Template(file={'cn': './assets/cn/research/TEMPLATE_S2.png', 'en': './assets/en/research/TEMPLATE_S2.png', 'jp': './assets/jp/research/TEMPLATE_S2.png', 'tw': './assets/tw/research/TEMPLATE_S2.png'})

View File

@ -7,3 +7,4 @@ from module.base.template import Template
CAMPAIGN_BONUS = Button(area={'cn': (404, 149, 439, 166), 'en': (406, 150, 477, 162), 'jp': (404, 150, 476, 167), 'tw': (404, 149, 439, 166)}, color={'cn': (188, 195, 207), 'en': (199, 204, 212), 'jp': (207, 211, 218), 'tw': (188, 195, 207)}, button={'cn': (404, 149, 439, 166), 'en': (406, 150, 477, 162), 'jp': (404, 150, 476, 167), 'tw': (404, 149, 439, 166)}, file={'cn': './assets/cn/statistics/CAMPAIGN_BONUS.png', 'en': './assets/en/statistics/CAMPAIGN_BONUS.png', 'jp': './assets/jp/statistics/CAMPAIGN_BONUS.png', 'tw': './assets/cn/statistics/CAMPAIGN_BONUS.png'})
ENEMY_NAME = Button(area={'cn': (781, 283, 965, 322), 'en': (781, 283, 965, 322), 'jp': (781, 283, 965, 322), 'tw': (781, 283, 965, 322)}, color={'cn': (92, 102, 119), 'en': (92, 102, 119), 'jp': (92, 102, 119), 'tw': (92, 102, 119)}, button={'cn': (781, 283, 965, 322), 'en': (781, 283, 965, 322), 'jp': (781, 283, 965, 322), 'tw': (781, 283, 965, 322)}, file={'cn': './assets/cn/statistics/ENEMY_NAME.png', 'en': './assets/en/statistics/ENEMY_NAME.png', 'jp': './assets/jp/statistics/ENEMY_NAME.png', 'tw': './assets/tw/statistics/ENEMY_NAME.png'})
GET_ITEMS_ODD = Button(area={'cn': (628, 294, 653, 397), 'en': (628, 294, 653, 397), 'jp': (628, 294, 653, 397), 'tw': (628, 294, 653, 397)}, color={'cn': (98, 103, 121), 'en': (98, 103, 121), 'jp': (98, 103, 121), 'tw': (98, 103, 121)}, button={'cn': (628, 294, 653, 397), 'en': (628, 294, 653, 397), 'jp': (628, 294, 653, 397), 'tw': (628, 294, 653, 397)}, file={'cn': './assets/cn/statistics/GET_ITEMS_ODD.png', 'en': './assets/en/statistics/GET_ITEMS_ODD.png', 'jp': './assets/jp/statistics/GET_ITEMS_ODD.png', 'tw': './assets/tw/statistics/GET_ITEMS_ODD.png'})
OPSI_REWARD = Button(area={'cn': (334, 149, 369, 165), 'en': (334, 149, 369, 165), 'jp': (334, 149, 369, 165), 'tw': (334, 149, 369, 165)}, color={'cn': (182, 193, 204), 'en': (182, 193, 204), 'jp': (182, 193, 204), 'tw': (182, 193, 204)}, button={'cn': (334, 149, 369, 165), 'en': (334, 149, 369, 165), 'jp': (334, 149, 369, 165), 'tw': (334, 149, 369, 165)}, file={'cn': './assets/cn/statistics/OPSI_REWARD.png', 'en': './assets/cn/statistics/OPSI_REWARD.png', 'jp': './assets/cn/statistics/OPSI_REWARD.png', 'tw': './assets/cn/statistics/OPSI_REWARD.png'})

View File

@ -1,5 +1,6 @@
import traceback
from module.coalition.assets import *
from module.ui.assets import *
from module.ui_white.assets import *
@ -125,10 +126,20 @@ page_sp.link(button=BACK_ARROW, destination=page_campaign)
page_campaign_menu.link(button=CAMPAIGN_MENU_GOTO_EVENT, destination=page_sp)
page_campaign.link(button=CAMPAIGN_GOTO_EVENT, destination=page_sp)
page_coalition = Page(COALITION_CHECK)
page_coalition.link(button=GOTO_MAIN, destination=page_main)
page_coalition.link(button=BACK_ARROW, destination=page_campaign)
# Coalition
# FROSTFALL
# page_coalition = Page(COALITION_CHECK)
# page_coalition.link(button=GOTO_MAIN, destination=page_main)
# page_coalition.link(button=BACK_ARROW, destination=page_campaign)
# page_campaign_menu.link(button=CAMPAIGN_MENU_GOTO_EVENT, destination=page_coalition)
# ACADEMY
page_coalition_menu = Page(COALITION_ACADEMY_MAIN_CHECK)
page_coalition_menu.link(button=COALITION_ACADEMY_HOME, destination=page_main)
page_coalition = Page(COALITION_ACADEMY_CAMPAIGN_CHECK)
page_coalition.link(button=COALITION_ACADEMY_HOME, destination=page_main)
page_coalition.link(button=COALITION_ACADEMY_BACK, destination=page_coalition_menu)
page_campaign_menu.link(button=CAMPAIGN_MENU_GOTO_EVENT, destination=page_coalition)
page_coalition_menu.link(button=COALITION_ACADEMY_GOTO_CAMPAIGN, destination=page_coalition)
# Operation Siren
page_os = Page(OS_CHECK)

View File

@ -1,7 +1,6 @@
from module.base.button import Button
from module.base.decorator import run_once
from module.base.timer import Timer
from module.coalition.assets import FLEET_PREPARATION as COALITION_FLEET_PREPARATION
from module.combat.assets import GET_ITEMS_1, GET_ITEMS_2, GET_SHIP
from module.exception import (GameNotRunningError, GamePageUnknownError,
RequestHumanTakeover)
@ -19,7 +18,7 @@ from module.ocr.ocr import Ocr
from module.os_handler.assets import (AUTO_SEARCH_REWARD, EXCHANGE_CHECK, RESET_FLEET_PREPARATION, RESET_TICKET_POPUP)
from module.raid.assets import *
from module.ui.assets import *
from module.ui.page import (Page, page_campaign, page_event, page_main, page_sp, page_main_white)
from module.ui.page import (Page, page_campaign, page_event, page_main, page_main_white, page_sp)
from module.ui_white.assets import *
@ -495,8 +494,7 @@ class UI(InfoHandler):
# Campaign preparation
if self.appear(MAP_PREPARATION, offset=(30, 30), interval=3) \
or self.appear(FLEET_PREPARATION, offset=(20, 50), interval=3) \
or self.appear(RAID_FLEET_PREPARATION, offset=(30, 30), interval=3) \
or self.appear(COALITION_FLEET_PREPARATION, offset=(30, 30), interval=3):
or self.appear(RAID_FLEET_PREPARATION, offset=(30, 30), interval=3):
self.device.click(MAP_PREPARATION_CANCEL)
return True
if self.appear_then_click(AUTO_SEARCH_MENU_EXIT, offset=(200, 30), interval=3):