Add: [CN, JP] island season specialities collect
4
alas.py
@@ -411,6 +411,10 @@ class AzurLaneAutoScript:
|
|||||||
from module.island.freebie import IslandFreebie
|
from module.island.freebie import IslandFreebie
|
||||||
IslandFreebie(config=self.config, device=self.device).run()
|
IslandFreebie(config=self.config, device=self.device).run()
|
||||||
|
|
||||||
|
def island_collect(self):
|
||||||
|
from module.island.collect import IslandCollect
|
||||||
|
IslandCollect(config=self.config, device=self.device).run()
|
||||||
|
|
||||||
def daemon(self):
|
def daemon(self):
|
||||||
from module.daemon.daemon import AzurLaneDaemon
|
from module.daemon.daemon import AzurLaneDaemon
|
||||||
AzurLaneDaemon(config=self.config, device=self.device, task="Daemon").run()
|
AzurLaneDaemon(config=self.config, device=self.device, task="Daemon").run()
|
||||||
|
|||||||
BIN
assets/cn/island/ISLAND_COLLECT_LOCATION_1.png
Normal file
|
After Width: | Height: | Size: 72 KiB |
BIN
assets/cn/island/ISLAND_COLLECT_LOCATION_2.png
Normal file
|
After Width: | Height: | Size: 60 KiB |
BIN
assets/cn/island/ISLAND_COLLECT_SELECT_CANCEL.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
assets/cn/island/ISLAND_COLLECT_SELECT_CONFIRM.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
assets/cn/island/ISLAND_COLLECT_SELECT_ENTER.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
assets/cn/island/ISLAND_COLLECT_START.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
assets/cn/island/ISLAND_COLLECT_START_UNAVAILABLE.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
assets/jp/island/ISLAND_COLLECT_SELECT_CANCEL.png
Normal file
|
After Width: | Height: | Size: 8.1 KiB |
BIN
assets/jp/island/ISLAND_COLLECT_SELECT_CONFIRM.png
Normal file
|
After Width: | Height: | Size: 8.7 KiB |
BIN
assets/jp/island/ISLAND_COLLECT_SELECT_ENTER.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
assets/jp/island/ISLAND_COLLECT_START.png
Normal file
|
After Width: | Height: | Size: 8.4 KiB |
BIN
assets/jp/island/ISLAND_COLLECT_START_UNAVAILABLE.png
Normal file
|
After Width: | Height: | Size: 8.1 KiB |
@@ -1932,6 +1932,19 @@
|
|||||||
"Storage": {}
|
"Storage": {}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"IslandCollect": {
|
||||||
|
"Scheduler": {
|
||||||
|
"Enable": false,
|
||||||
|
"NextRun": "2020-01-01 00:00:00",
|
||||||
|
"Command": "IslandCollect",
|
||||||
|
"SuccessInterval": 0,
|
||||||
|
"FailureInterval": 120,
|
||||||
|
"ServerUpdate": "03:00, 18:00"
|
||||||
|
},
|
||||||
|
"Storage": {
|
||||||
|
"Storage": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
"Daemon": {
|
"Daemon": {
|
||||||
"Daemon": {
|
"Daemon": {
|
||||||
"EnterMap": true
|
"EnterMap": true
|
||||||
|
|||||||
@@ -9370,6 +9370,51 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"IslandCollect": {
|
||||||
|
"Scheduler": {
|
||||||
|
"Enable": {
|
||||||
|
"type": "checkbox",
|
||||||
|
"value": false,
|
||||||
|
"option": [
|
||||||
|
true,
|
||||||
|
false
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"NextRun": {
|
||||||
|
"type": "datetime",
|
||||||
|
"value": "2020-01-01 00:00:00",
|
||||||
|
"validate": "datetime"
|
||||||
|
},
|
||||||
|
"Command": {
|
||||||
|
"type": "input",
|
||||||
|
"value": "IslandCollect",
|
||||||
|
"display": "hide"
|
||||||
|
},
|
||||||
|
"SuccessInterval": {
|
||||||
|
"type": "input",
|
||||||
|
"value": 0,
|
||||||
|
"display": "hide"
|
||||||
|
},
|
||||||
|
"FailureInterval": {
|
||||||
|
"type": "input",
|
||||||
|
"value": 120,
|
||||||
|
"display": "hide"
|
||||||
|
},
|
||||||
|
"ServerUpdate": {
|
||||||
|
"type": "input",
|
||||||
|
"value": "03:00, 18:00",
|
||||||
|
"display": "hide"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Storage": {
|
||||||
|
"Storage": {
|
||||||
|
"type": "storage",
|
||||||
|
"value": {},
|
||||||
|
"valuetype": "ignore",
|
||||||
|
"display": "disabled"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"Daemon": {
|
"Daemon": {
|
||||||
"Daemon": {
|
"Daemon": {
|
||||||
"EnterMap": {
|
"EnterMap": {
|
||||||
|
|||||||
@@ -99,7 +99,8 @@
|
|||||||
"menu": "collapse",
|
"menu": "collapse",
|
||||||
"page": "setting",
|
"page": "setting",
|
||||||
"tasks": [
|
"tasks": [
|
||||||
"IslandFreebie"
|
"IslandFreebie",
|
||||||
|
"IslandCollect"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"Tool": {
|
"Tool": {
|
||||||
|
|||||||
@@ -444,6 +444,12 @@ OpsiHazard1Leveling:
|
|||||||
OpsiFleet:
|
OpsiFleet:
|
||||||
Submarine: false
|
Submarine: false
|
||||||
|
|
||||||
|
# =================== Island ===================
|
||||||
|
|
||||||
|
IslandCollect:
|
||||||
|
Scheduler:
|
||||||
|
ServerUpdate: 03:00, 18:00
|
||||||
|
|
||||||
# ==================== Tool ====================
|
# ==================== Tool ====================
|
||||||
|
|
||||||
EventStory:
|
EventStory:
|
||||||
|
|||||||
@@ -333,6 +333,8 @@ Island:
|
|||||||
IslandFreebie:
|
IslandFreebie:
|
||||||
- Scheduler
|
- Scheduler
|
||||||
- IslandFreebie
|
- IslandFreebie
|
||||||
|
IslandCollect:
|
||||||
|
- Scheduler
|
||||||
|
|
||||||
# ==================== Tool ====================
|
# ==================== Tool ====================
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ class ManualConfig:
|
|||||||
> OpsiAshBeacon
|
> OpsiAshBeacon
|
||||||
> OpsiDaily > OpsiShop > OpsiVoucher
|
> OpsiDaily > OpsiShop > OpsiVoucher
|
||||||
> OpsiAbyssal > OpsiStronghold > OpsiObscure > OpsiArchive
|
> OpsiAbyssal > OpsiStronghold > OpsiObscure > OpsiArchive
|
||||||
> IslandFreebie
|
> IslandFreebie > IslandCollect
|
||||||
> Daily > Hard > OpsiAshBeacon > OpsiAshAssist > OpsiMonthBoss
|
> Daily > Hard > OpsiAshBeacon > OpsiAshAssist > OpsiMonthBoss
|
||||||
> Sos > EventSp > EventA > EventB > EventC > EventD
|
> Sos > EventSp > EventA > EventB > EventC > EventD
|
||||||
> RaidDaily > CoalitionSp > WarArchives > MaritimeEscort
|
> RaidDaily > CoalitionSp > WarArchives > MaritimeEscort
|
||||||
|
|||||||
@@ -258,6 +258,10 @@
|
|||||||
"name": "Daily Supplies",
|
"name": "Daily Supplies",
|
||||||
"help": ""
|
"help": ""
|
||||||
},
|
},
|
||||||
|
"IslandCollect": {
|
||||||
|
"name": "Daily Gathering",
|
||||||
|
"help": "Use management panel to gather season specialities and coal/wood.\nWill use multiple characters with least levels until stamina requirement is fulfilled."
|
||||||
|
},
|
||||||
"Daemon": {
|
"Daemon": {
|
||||||
"name": "Normal Semi-auto",
|
"name": "Normal Semi-auto",
|
||||||
"help": ""
|
"help": ""
|
||||||
|
|||||||
@@ -258,6 +258,10 @@
|
|||||||
"name": "デイリー補給",
|
"name": "デイリー補給",
|
||||||
"help": ""
|
"help": ""
|
||||||
},
|
},
|
||||||
|
"IslandCollect": {
|
||||||
|
"name": "デイリー採集",
|
||||||
|
"help": "管理パネルを使用して、季節の特産品や石炭/木材を収集します。\nスタミナ要件が満たされるまで、レベルの最も低い複数のキャラクターを使用します。"
|
||||||
|
},
|
||||||
"Daemon": {
|
"Daemon": {
|
||||||
"name": "半自動クリック",
|
"name": "半自動クリック",
|
||||||
"help": ""
|
"help": ""
|
||||||
|
|||||||
@@ -258,6 +258,10 @@
|
|||||||
"name": "每日补给",
|
"name": "每日补给",
|
||||||
"help": ""
|
"help": ""
|
||||||
},
|
},
|
||||||
|
"IslandCollect": {
|
||||||
|
"name": "每日采集",
|
||||||
|
"help": "使用管理面板采集季节特产和煤炭/自然之木。\n将使用多个等级最低的角色直到满足体力要求。"
|
||||||
|
},
|
||||||
"Daemon": {
|
"Daemon": {
|
||||||
"name": "半自动点击",
|
"name": "半自动点击",
|
||||||
"help": ""
|
"help": ""
|
||||||
|
|||||||
@@ -258,6 +258,10 @@
|
|||||||
"name": "每日補給",
|
"name": "每日補給",
|
||||||
"help": ""
|
"help": ""
|
||||||
},
|
},
|
||||||
|
"IslandCollect": {
|
||||||
|
"name": "每日採集",
|
||||||
|
"help": "使用管理面板採集季節特產和煤炭/自然之木。\n將使用多個等級最低的角色直到滿足體力要求。"
|
||||||
|
},
|
||||||
"Daemon": {
|
"Daemon": {
|
||||||
"name": "半自動點擊",
|
"name": "半自動點擊",
|
||||||
"help": ""
|
"help": ""
|
||||||
|
|||||||
@@ -5,6 +5,13 @@ from module.base.template import Template
|
|||||||
# Don't modify it manually.
|
# Don't modify it manually.
|
||||||
|
|
||||||
ISLAND_CLICK_SAFE_AREA = Button(area={'cn': (596, 687, 680, 720), 'en': (596, 687, 680, 720), 'jp': (596, 687, 680, 720), 'tw': (596, 687, 680, 720)}, color={'cn': (255, 255, 255), 'en': (255, 255, 255), 'jp': (255, 255, 255), 'tw': (255, 255, 255)}, button={'cn': (596, 687, 680, 720), 'en': (596, 687, 680, 720), 'jp': (596, 687, 680, 720), 'tw': (596, 687, 680, 720)}, file={'cn': './assets/cn/island/ISLAND_CLICK_SAFE_AREA.png', 'en': './assets/cn/island/ISLAND_CLICK_SAFE_AREA.png', 'jp': './assets/cn/island/ISLAND_CLICK_SAFE_AREA.png', 'tw': './assets/cn/island/ISLAND_CLICK_SAFE_AREA.png'})
|
ISLAND_CLICK_SAFE_AREA = Button(area={'cn': (596, 687, 680, 720), 'en': (596, 687, 680, 720), 'jp': (596, 687, 680, 720), 'tw': (596, 687, 680, 720)}, color={'cn': (255, 255, 255), 'en': (255, 255, 255), 'jp': (255, 255, 255), 'tw': (255, 255, 255)}, button={'cn': (596, 687, 680, 720), 'en': (596, 687, 680, 720), 'jp': (596, 687, 680, 720), 'tw': (596, 687, 680, 720)}, file={'cn': './assets/cn/island/ISLAND_CLICK_SAFE_AREA.png', 'en': './assets/cn/island/ISLAND_CLICK_SAFE_AREA.png', 'jp': './assets/cn/island/ISLAND_CLICK_SAFE_AREA.png', 'tw': './assets/cn/island/ISLAND_CLICK_SAFE_AREA.png'})
|
||||||
|
ISLAND_COLLECT_LOCATION_1 = Button(area={'cn': (431, 216, 608, 466), 'en': (431, 216, 608, 466), 'jp': (431, 216, 608, 466), 'tw': (431, 216, 608, 466)}, color={'cn': (156, 186, 138), 'en': (156, 186, 138), 'jp': (156, 186, 138), 'tw': (156, 186, 138)}, button={'cn': (431, 216, 608, 466), 'en': (431, 216, 608, 466), 'jp': (431, 216, 608, 466), 'tw': (431, 216, 608, 466)}, file={'cn': './assets/cn/island/ISLAND_COLLECT_LOCATION_1.png', 'en': './assets/cn/island/ISLAND_COLLECT_LOCATION_1.png', 'jp': './assets/cn/island/ISLAND_COLLECT_LOCATION_1.png', 'tw': './assets/cn/island/ISLAND_COLLECT_LOCATION_1.png'})
|
||||||
|
ISLAND_COLLECT_LOCATION_2 = Button(area={'cn': (672, 216, 849, 466), 'en': (672, 216, 849, 466), 'jp': (672, 216, 849, 466), 'tw': (672, 216, 849, 466)}, color={'cn': (174, 185, 184), 'en': (174, 185, 184), 'jp': (174, 185, 184), 'tw': (174, 185, 184)}, button={'cn': (672, 216, 849, 466), 'en': (672, 216, 849, 466), 'jp': (672, 216, 849, 466), 'tw': (672, 216, 849, 466)}, file={'cn': './assets/cn/island/ISLAND_COLLECT_LOCATION_2.png', 'en': './assets/cn/island/ISLAND_COLLECT_LOCATION_2.png', 'jp': './assets/cn/island/ISLAND_COLLECT_LOCATION_2.png', 'tw': './assets/cn/island/ISLAND_COLLECT_LOCATION_2.png'})
|
||||||
|
ISLAND_COLLECT_SELECT_CANCEL = Button(area={'cn': (476, 542, 529, 571), 'en': (476, 542, 529, 571), 'jp': (474, 543, 530, 571), 'tw': (476, 542, 529, 571)}, color={'cn': (202, 202, 201), 'en': (202, 202, 201), 'jp': (200, 200, 199), 'tw': (202, 202, 201)}, button={'cn': (476, 542, 529, 571), 'en': (476, 542, 529, 571), 'jp': (474, 543, 530, 571), 'tw': (476, 542, 529, 571)}, file={'cn': './assets/cn/island/ISLAND_COLLECT_SELECT_CANCEL.png', 'en': './assets/cn/island/ISLAND_COLLECT_SELECT_CANCEL.png', 'jp': './assets/jp/island/ISLAND_COLLECT_SELECT_CANCEL.png', 'tw': './assets/cn/island/ISLAND_COLLECT_SELECT_CANCEL.png'})
|
||||||
|
ISLAND_COLLECT_SELECT_CONFIRM = Button(area={'cn': (754, 542, 805, 570), 'en': (754, 542, 805, 570), 'jp': (749, 542, 812, 573), 'tw': (754, 542, 805, 570)}, color={'cn': (132, 214, 255), 'en': (132, 214, 255), 'jp': (104, 205, 255), 'tw': (132, 214, 255)}, button={'cn': (754, 542, 805, 570), 'en': (754, 542, 805, 570), 'jp': (749, 542, 812, 573), 'tw': (754, 542, 805, 570)}, file={'cn': './assets/cn/island/ISLAND_COLLECT_SELECT_CONFIRM.png', 'en': './assets/cn/island/ISLAND_COLLECT_SELECT_CONFIRM.png', 'jp': './assets/jp/island/ISLAND_COLLECT_SELECT_CONFIRM.png', 'tw': './assets/cn/island/ISLAND_COLLECT_SELECT_CONFIRM.png'})
|
||||||
|
ISLAND_COLLECT_SELECT_ENTER = Button(area={'cn': (898, 474, 1029, 499), 'en': (898, 474, 1029, 499), 'jp': (892, 473, 1035, 502), 'tw': (898, 474, 1029, 499)}, color={'cn': (129, 213, 254), 'en': (129, 213, 254), 'jp': (108, 206, 254), 'tw': (129, 213, 254)}, button={'cn': (898, 474, 1029, 499), 'en': (898, 474, 1029, 499), 'jp': (892, 473, 1035, 502), 'tw': (898, 474, 1029, 499)}, file={'cn': './assets/cn/island/ISLAND_COLLECT_SELECT_ENTER.png', 'en': './assets/cn/island/ISLAND_COLLECT_SELECT_ENTER.png', 'jp': './assets/jp/island/ISLAND_COLLECT_SELECT_ENTER.png', 'tw': './assets/cn/island/ISLAND_COLLECT_SELECT_ENTER.png'})
|
||||||
|
ISLAND_COLLECT_START = Button(area={'cn': (1020, 474, 1067, 499), 'en': (1020, 474, 1067, 499), 'jp': (1015, 473, 1072, 504), 'tw': (1020, 474, 1067, 499)}, color={'cn': (119, 209, 255), 'en': (119, 209, 255), 'jp': (93, 201, 255), 'tw': (119, 209, 255)}, button={'cn': (1020, 474, 1067, 499), 'en': (1020, 474, 1067, 499), 'jp': (1015, 473, 1072, 504), 'tw': (1020, 474, 1067, 499)}, file={'cn': './assets/cn/island/ISLAND_COLLECT_START.png', 'en': './assets/cn/island/ISLAND_COLLECT_START.png', 'jp': './assets/jp/island/ISLAND_COLLECT_START.png', 'tw': './assets/cn/island/ISLAND_COLLECT_START.png'})
|
||||||
|
ISLAND_COLLECT_START_UNAVAILABLE = Button(area={'cn': (1020, 474, 1067, 499), 'en': (1020, 474, 1067, 499), 'jp': (1016, 474, 1071, 503), 'tw': (1020, 474, 1067, 499)}, color={'cn': (208, 208, 207), 'en': (208, 208, 207), 'jp': (201, 201, 200), 'tw': (208, 208, 207)}, button={'cn': (1020, 474, 1067, 499), 'en': (1020, 474, 1067, 499), 'jp': (1016, 474, 1071, 503), 'tw': (1020, 474, 1067, 499)}, file={'cn': './assets/cn/island/ISLAND_COLLECT_START_UNAVAILABLE.png', 'en': './assets/cn/island/ISLAND_COLLECT_START_UNAVAILABLE.png', 'jp': './assets/jp/island/ISLAND_COLLECT_START_UNAVAILABLE.png', 'tw': './assets/cn/island/ISLAND_COLLECT_START_UNAVAILABLE.png'})
|
||||||
ISLAND_FREEBIE_AVAILABLE = Button(area={'cn': (23, 608, 102, 688), 'en': (23, 608, 102, 688), 'jp': (23, 608, 102, 688), 'tw': (23, 608, 102, 688)}, color={'cn': (129, 124, 97), 'en': (129, 124, 97), 'jp': (129, 124, 97), 'tw': (129, 124, 97)}, button={'cn': (37, 622, 87, 672), 'en': (37, 622, 87, 672), 'jp': (37, 622, 87, 672), 'tw': (37, 622, 87, 672)}, file={'cn': './assets/cn/island/ISLAND_FREEBIE_AVAILABLE.gif', 'en': './assets/cn/island/ISLAND_FREEBIE_AVAILABLE.gif', 'jp': './assets/cn/island/ISLAND_FREEBIE_AVAILABLE.gif', 'tw': './assets/cn/island/ISLAND_FREEBIE_AVAILABLE.gif'})
|
ISLAND_FREEBIE_AVAILABLE = Button(area={'cn': (23, 608, 102, 688), 'en': (23, 608, 102, 688), 'jp': (23, 608, 102, 688), 'tw': (23, 608, 102, 688)}, color={'cn': (129, 124, 97), 'en': (129, 124, 97), 'jp': (129, 124, 97), 'tw': (129, 124, 97)}, button={'cn': (37, 622, 87, 672), 'en': (37, 622, 87, 672), 'jp': (37, 622, 87, 672), 'tw': (37, 622, 87, 672)}, file={'cn': './assets/cn/island/ISLAND_FREEBIE_AVAILABLE.gif', 'en': './assets/cn/island/ISLAND_FREEBIE_AVAILABLE.gif', 'jp': './assets/cn/island/ISLAND_FREEBIE_AVAILABLE.gif', 'tw': './assets/cn/island/ISLAND_FREEBIE_AVAILABLE.gif'})
|
||||||
ISLAND_FREEBIE_CLAIM = Button(area={'cn': (894, 381, 980, 406), 'en': (894, 381, 980, 406), 'jp': (890, 381, 984, 405), 'tw': (894, 381, 980, 406)}, color={'cn': (211, 211, 209), 'en': (211, 211, 209), 'jp': (194, 195, 196), 'tw': (211, 211, 209)}, button={'cn': (894, 381, 980, 406), 'en': (894, 381, 980, 406), 'jp': (890, 381, 984, 405), 'tw': (894, 381, 980, 406)}, file={'cn': './assets/cn/island/ISLAND_FREEBIE_CLAIM.png', 'en': './assets/cn/island/ISLAND_FREEBIE_CLAIM.png', 'jp': './assets/jp/island/ISLAND_FREEBIE_CLAIM.png', 'tw': './assets/cn/island/ISLAND_FREEBIE_CLAIM.png'})
|
ISLAND_FREEBIE_CLAIM = Button(area={'cn': (894, 381, 980, 406), 'en': (894, 381, 980, 406), 'jp': (890, 381, 984, 405), 'tw': (894, 381, 980, 406)}, color={'cn': (211, 211, 209), 'en': (211, 211, 209), 'jp': (194, 195, 196), 'tw': (211, 211, 209)}, button={'cn': (894, 381, 980, 406), 'en': (894, 381, 980, 406), 'jp': (890, 381, 984, 405), 'tw': (894, 381, 980, 406)}, file={'cn': './assets/cn/island/ISLAND_FREEBIE_CLAIM.png', 'en': './assets/cn/island/ISLAND_FREEBIE_CLAIM.png', 'jp': './assets/jp/island/ISLAND_FREEBIE_CLAIM.png', 'tw': './assets/cn/island/ISLAND_FREEBIE_CLAIM.png'})
|
||||||
ISLAND_FREEBIE_COOLDOWN = Button(area={'cn': (871, 381, 1001, 406), 'en': (871, 381, 1001, 406), 'jp': (870, 380, 1003, 406), 'tw': (871, 381, 1001, 406)}, color={'cn': (215, 214, 213), 'en': (215, 214, 213), 'jp': (200, 202, 201), 'tw': (215, 214, 213)}, button={'cn': (871, 381, 1001, 406), 'en': (871, 381, 1001, 406), 'jp': (870, 380, 1003, 406), 'tw': (871, 381, 1001, 406)}, file={'cn': './assets/cn/island/ISLAND_FREEBIE_COOLDOWN.png', 'en': './assets/cn/island/ISLAND_FREEBIE_COOLDOWN.png', 'jp': './assets/jp/island/ISLAND_FREEBIE_COOLDOWN.png', 'tw': './assets/cn/island/ISLAND_FREEBIE_COOLDOWN.png'})
|
ISLAND_FREEBIE_COOLDOWN = Button(area={'cn': (871, 381, 1001, 406), 'en': (871, 381, 1001, 406), 'jp': (870, 380, 1003, 406), 'tw': (871, 381, 1001, 406)}, color={'cn': (215, 214, 213), 'en': (215, 214, 213), 'jp': (200, 202, 201), 'tw': (215, 214, 213)}, button={'cn': (871, 381, 1001, 406), 'en': (871, 381, 1001, 406), 'jp': (870, 380, 1003, 406), 'tw': (871, 381, 1001, 406)}, file={'cn': './assets/cn/island/ISLAND_FREEBIE_COOLDOWN.png', 'en': './assets/cn/island/ISLAND_FREEBIE_COOLDOWN.png', 'jp': './assets/jp/island/ISLAND_FREEBIE_COOLDOWN.png', 'tw': './assets/cn/island/ISLAND_FREEBIE_COOLDOWN.png'})
|
||||||
|
|||||||
139
module/island/collect.py
Normal file
@@ -0,0 +1,139 @@
|
|||||||
|
from module.base.button import ButtonGrid
|
||||||
|
from module.base.timer import Timer
|
||||||
|
from module.exception import GameStuckError
|
||||||
|
from module.island.assets import *
|
||||||
|
from module.island_handler.dock import IslandDock
|
||||||
|
from module.island_handler.dock_scanner import CharacterScanner
|
||||||
|
from module.logger import logger
|
||||||
|
from module.ui.page import page_island_manage, page_island_phone
|
||||||
|
|
||||||
|
ISLAND_COLLECT_WORKSLOT_GRID = ButtonGrid(
|
||||||
|
origin=(832, 227), delta=(95, 0), button_shape=(74, 74), grid_shape=(3, 1)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class IslandCollect(IslandDock):
|
||||||
|
def collect_location_unselected_buttons(self):
|
||||||
|
buttons = []
|
||||||
|
if not self.is_button_selected(ISLAND_COLLECT_LOCATION_1):
|
||||||
|
buttons.append(ISLAND_COLLECT_LOCATION_1)
|
||||||
|
if not self.is_button_selected(ISLAND_COLLECT_LOCATION_2):
|
||||||
|
buttons.append(ISLAND_COLLECT_LOCATION_2)
|
||||||
|
return buttons
|
||||||
|
|
||||||
|
def collect_available(self):
|
||||||
|
for _ in self.loop(timeout=10):
|
||||||
|
if self.appear_then_click(ISLAND_COLLECT_SELECT_ENTER, offset=(20, 20), interval=3):
|
||||||
|
continue
|
||||||
|
# End
|
||||||
|
if self.appear(ISLAND_COLLECT_SELECT_CONFIRM, offset=(20, 20)):
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
logger.warning('Cannot find collect enter button, collect may not be available')
|
||||||
|
return False
|
||||||
|
|
||||||
|
available = None
|
||||||
|
for _ in self.loop(skip_first=False, timeout=20):
|
||||||
|
# End
|
||||||
|
if self.handle_info_bar():
|
||||||
|
logger.warning('Info bar appears, nothing more to collect')
|
||||||
|
available = False
|
||||||
|
break
|
||||||
|
if self.match_template_color(ISLAND_COLLECT_START_UNAVAILABLE, offset=(20, 20)):
|
||||||
|
logger.info('has something to collect, continue')
|
||||||
|
available = True
|
||||||
|
break
|
||||||
|
|
||||||
|
if self.appear(ISLAND_COLLECT_SELECT_CONFIRM, offset=(20, 20)):
|
||||||
|
buttons = self.collect_location_unselected_buttons()
|
||||||
|
if not buttons:
|
||||||
|
self.device.click(ISLAND_COLLECT_SELECT_CONFIRM)
|
||||||
|
continue
|
||||||
|
for button in buttons:
|
||||||
|
self.device.click(button)
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
logger.warning('Cannot determine collect availability, possibly due to network issues')
|
||||||
|
available = False
|
||||||
|
|
||||||
|
if available:
|
||||||
|
return True
|
||||||
|
# Back to island manage page
|
||||||
|
for _ in self.loop(timeout=10):
|
||||||
|
if self.appear_then_click(ISLAND_COLLECT_SELECT_CANCEL, offset=(20, 20), interval=3):
|
||||||
|
continue
|
||||||
|
if self.ui_page_appear(page_island_manage, offset=(20, 20)):
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
logger.warning('Cannot return to island manage page, something may be wrong')
|
||||||
|
raise GameStuckError('Cannot return to island manage page, something may be wrong')
|
||||||
|
return False
|
||||||
|
|
||||||
|
def collect_execute(self):
|
||||||
|
for workslot, button in enumerate(ISLAND_COLLECT_WORKSLOT_GRID.buttons):
|
||||||
|
click_timer = Timer(1, count=3)
|
||||||
|
for _ in self.loop(timeout=10):
|
||||||
|
# End
|
||||||
|
if self.is_in_island_dock():
|
||||||
|
break
|
||||||
|
if click_timer.reached():
|
||||||
|
self.device.click(button)
|
||||||
|
click_timer.reset()
|
||||||
|
else:
|
||||||
|
logger.warning(f'Failed to click workslot button for workslot {workslot}')
|
||||||
|
return False
|
||||||
|
self.island_dock_sort_method_dsc_set(enable=False)
|
||||||
|
dock_grid = super().dock_grid
|
||||||
|
scanner = CharacterScanner(dock_grid, emotion=(80, 150), status='free')
|
||||||
|
scanner.disable('emotion_limit')
|
||||||
|
candidates = scanner.scan(self.device.image)
|
||||||
|
if not candidates:
|
||||||
|
logger.warning(f'No candidate found for workslot {workslot}, canceling collect')
|
||||||
|
self.island_dock_quit()
|
||||||
|
return False
|
||||||
|
button = candidates[0].button
|
||||||
|
self.island_dock_select_one(button)
|
||||||
|
self.island_dock_select_confirm(check_button=[ISLAND_COLLECT_START, ISLAND_COLLECT_START_UNAVAILABLE])
|
||||||
|
if self.match_template_color(ISLAND_COLLECT_START, offset=(20, 20)):
|
||||||
|
break
|
||||||
|
if not self.match_template_color(ISLAND_COLLECT_START, offset=(20, 20)):
|
||||||
|
logger.warning('Failed to start collect, something may be wrong')
|
||||||
|
return False
|
||||||
|
confirm_timer = Timer(3, count=5).start()
|
||||||
|
for _ in self.loop(timeout=10):
|
||||||
|
if self.handle_island_additional():
|
||||||
|
confirm_timer.reset()
|
||||||
|
continue
|
||||||
|
if self.match_template_color(ISLAND_COLLECT_START, offset=(20, 20)):
|
||||||
|
self.device.click(ISLAND_COLLECT_START)
|
||||||
|
confirm_timer.reset()
|
||||||
|
continue
|
||||||
|
|
||||||
|
# End
|
||||||
|
if self.appear(ISLAND_COLLECT_SELECT_ENTER, offset=(20, 20)):
|
||||||
|
if confirm_timer.reached():
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
logger.warning('Failed to start collect, something may be wrong')
|
||||||
|
return False
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
self.ui_ensure(page_island_manage)
|
||||||
|
self.island_manage_side_navbar_ensure(upper=3)
|
||||||
|
|
||||||
|
if self.collect_available():
|
||||||
|
success = self.collect_execute()
|
||||||
|
if success:
|
||||||
|
logger.info('Collect successfully')
|
||||||
|
self.config.task_delay(server_update=True)
|
||||||
|
else:
|
||||||
|
logger.warning('Failed to collect, will retry later')
|
||||||
|
self.config.task_delay(success=False)
|
||||||
|
else:
|
||||||
|
logger.info('Collect not available, possibly due to cooldown')
|
||||||
|
for _ in self.loop():
|
||||||
|
if self.appear_then_click(ISLAND_COLLECT_SELECT_CANCEL, offset=(20, 20), interval=3):
|
||||||
|
continue
|
||||||
|
if self.appear(ISLAND_COLLECT_SELECT_ENTER, offset=(20, 20)):
|
||||||
|
break
|
||||||
|
self.config.task_delay(server_update=True)
|
||||||