feat(Oilkeep): 添加石油平衡功能

- 实现每日领取储藏室石油的功能
This commit is contained in:
POLAR me 2024-12-26 04:23:59 +08:00
parent dcb7912e93
commit 628814c4b6
17 changed files with 299 additions and 7 deletions

View File

@ -297,7 +297,11 @@ class AzurLaneAutoScript:
def reward(self):
from module.reward.reward import Reward
Reward(config=self.config, device=self.device).run()
def oilkeep(self):
from module.oilkeep.oilkeep import Oilkeep
Oilkeep(config=self.config, device=self.device).run()
def shop_frequent(self):
from module.shop.shop_reward import RewardShop
RewardShop(config=self.config, device=self.device).run_frequent()

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

View File

@ -1687,6 +1687,22 @@
"Storage": {}
}
},
"Oilkeep": {
"Scheduler": {
"Enable": false,
"NextRun": "2020-01-01 00:00:00",
"Command": "Oilkeep",
"SuccessInterval": 30,
"FailureInterval": 30,
"ServerUpdate": "00:00, 6:00, 12:00, 18:00"
},
"Oilkeep": {
"OilkeepLevel": "8000"
},
"Storage": {
"Storage": {}
}
},
"Minigame": {
"Scheduler": {
"Enable": false,

View File

@ -17,8 +17,8 @@ OCR_COIN_LIMIT = Button(area={'cn': (807, 0, 944, 19), 'en': (807, 0, 944, 19),
OCR_EVENT_PT = Button(area={'cn': (1196, 109, 1280, 131), 'en': (1190, 109, 1280, 129), 'jp': (1196, 109, 1280, 131), 'tw': (1196, 109, 1280, 131)}, color={'cn': (121, 110, 59), 'en': (88, 78, 51), 'jp': (121, 110, 59), 'tw': (121, 110, 59)}, button={'cn': (1196, 109, 1280, 131), 'en': (1190, 109, 1280, 129), 'jp': (1196, 109, 1280, 131), 'tw': (1196, 109, 1280, 131)}, file={'cn': './assets/cn/campaign/OCR_EVENT_PT.png', 'en': './assets/en/campaign/OCR_EVENT_PT.png', 'jp': './assets/jp/campaign/OCR_EVENT_PT.png', 'tw': './assets/tw/campaign/OCR_EVENT_PT.png'})
OCR_GEM = Button(area={'cn': (1024, 23, 1137, 51), 'en': (1024, 23, 1137, 51), 'jp': (1024, 23, 1137, 51), 'tw': (1024, 23, 1137, 51)}, color={'cn': (102, 102, 100), 'en': (102, 102, 100), 'jp': (102, 102, 100), 'tw': (102, 102, 100)}, button={'cn': (1024, 23, 1137, 51), 'en': (1024, 23, 1137, 51), 'jp': (1024, 23, 1137, 51), 'tw': (1024, 23, 1137, 51)}, file={'cn': './assets/cn/campaign/OCR_GEM.png', 'en': './assets/cn/campaign/OCR_GEM.png', 'jp': './assets/cn/campaign/OCR_GEM.png', 'tw': './assets/cn/campaign/OCR_GEM.png'})
OCR_OIL = Button(area={'cn': (614, 23, 714, 51), 'en': (614, 23, 714, 51), 'jp': (614, 23, 714, 51), 'tw': (614, 23, 714, 51)}, color={'cn': (64, 65, 79), 'en': (64, 65, 79), 'jp': (64, 65, 79), 'tw': (64, 65, 79)}, button={'cn': (614, 23, 714, 51), 'en': (614, 23, 714, 51), 'jp': (614, 23, 714, 51), 'tw': (614, 23, 714, 51)}, file={'cn': './assets/cn/campaign/OCR_OIL.png', 'en': './assets/en/campaign/OCR_OIL.png', 'jp': './assets/jp/campaign/OCR_OIL.png', 'tw': './assets/tw/campaign/OCR_OIL.png'})
OCR_OIL_LIMIT = Button(area={'cn': (608, 0, 736, 19), 'en': (608, 0, 736, 19), 'jp': (608, 0, 736, 19), 'tw': (608, 0, 736, 19)}, color={'cn': (202, 202, 202), 'en': (202, 202, 202), 'jp': (202, 202, 202), 'tw': (202, 202, 202)}, button={'cn': (608, 0, 736, 19), 'en': (608, 0, 736, 19), 'jp': (608, 0, 736, 19), 'tw': (608, 0, 736, 19)}, file={'cn': './assets/cn/campaign/OCR_OIL_LIMIT.png', 'en': './assets/en/campaign/OCR_OIL_LIMIT.png', 'jp': './assets/jp/campaign/OCR_OIL_LIMIT.png', 'tw': './assets/tw/campaign/OCR_OIL_LIMIT.png'})
OCR_OIL_CHECK = Button(area={'cn': (573, 30, 592, 49), 'en': (573, 30, 592, 49), 'jp': (573, 30, 592, 49), 'tw': (573, 30, 592, 49)}, color={'cn': (82, 82, 82), 'en': (82, 82, 82), 'jp': (82, 82, 82), 'tw': (82, 82, 82)}, button={'cn': (573, 30, 592, 49), 'en': (573, 30, 592, 49), 'jp': (573, 30, 592, 49), 'tw': (573, 30, 592, 49)}, file={'cn': './assets/cn/campaign/OCR_OIL_CHECK.png', 'en': './assets/en/campaign/OCR_OIL_CHECK.png', 'jp': './assets/jp/campaign/OCR_OIL_CHECK.png', 'tw': './assets/tw/campaign/OCR_OIL_CHECK.png'})
OCR_OIL_LIMIT = Button(area={'cn': (608, 0, 736, 19), 'en': (608, 0, 736, 19), 'jp': (608, 0, 736, 19), 'tw': (608, 0, 736, 19)}, color={'cn': (202, 202, 202), 'en': (202, 202, 202), 'jp': (202, 202, 202), 'tw': (202, 202, 202)}, button={'cn': (608, 0, 736, 19), 'en': (608, 0, 736, 19), 'jp': (608, 0, 736, 19), 'tw': (608, 0, 736, 19)}, file={'cn': './assets/cn/campaign/OCR_OIL_LIMIT.png', 'en': './assets/en/campaign/OCR_OIL_LIMIT.png', 'jp': './assets/jp/campaign/OCR_OIL_LIMIT.png', 'tw': './assets/tw/campaign/OCR_OIL_LIMIT.png'})
SWITCH_1_HARD = Button(area={'cn': (82, 641, 148, 675), 'en': (87, 642, 148, 676), 'jp': (24, 645, 150, 697), 'tw': (82, 641, 148, 675)}, color={'cn': (233, 141, 128), 'en': (234, 139, 124), 'jp': (219, 116, 106), 'tw': (236, 159, 148)}, button={'cn': (82, 641, 148, 675), 'en': (87, 642, 148, 676), 'jp': (24, 645, 150, 697), 'tw': (82, 641, 148, 675)}, file={'cn': './assets/cn/campaign/SWITCH_1_HARD.png', 'en': './assets/en/campaign/SWITCH_1_HARD.png', 'jp': './assets/jp/campaign/SWITCH_1_HARD.png', 'tw': './assets/tw/campaign/SWITCH_1_HARD.png'})
SWITCH_1_NORMAL = Button(area={'cn': (80, 641, 148, 675), 'en': (79, 638, 147, 675), 'jp': (24, 644, 150, 697), 'tw': (79, 641, 148, 675)}, color={'cn': (157, 180, 227), 'en': (157, 180, 227), 'jp': (143, 169, 222), 'tw': (156, 179, 227)}, button={'cn': (80, 641, 148, 675), 'en': (79, 638, 147, 675), 'jp': (24, 644, 150, 697), 'tw': (79, 641, 148, 675)}, file={'cn': './assets/cn/campaign/SWITCH_1_NORMAL.png', 'en': './assets/en/campaign/SWITCH_1_NORMAL.png', 'jp': './assets/jp/campaign/SWITCH_1_NORMAL.png', 'tw': './assets/tw/campaign/SWITCH_1_NORMAL.png'})
SWITCH_20241219_COMBAT = Button(area={'cn': (39, 659, 71, 691), 'en': (39, 659, 71, 691), 'jp': (39, 659, 71, 691), 'tw': (39, 659, 71, 691)}, color={'cn': (133, 96, 49), 'en': (133, 96, 49), 'jp': (133, 96, 49), 'tw': (133, 96, 49)}, button={'cn': (39, 659, 71, 691), 'en': (39, 659, 71, 691), 'jp': (39, 659, 71, 691), 'tw': (39, 659, 71, 691)}, file={'cn': './assets/cn/campaign/SWITCH_20241219_COMBAT.png', 'en': './assets/cn/campaign/SWITCH_20241219_COMBAT.png', 'jp': './assets/cn/campaign/SWITCH_20241219_COMBAT.png', 'tw': './assets/cn/campaign/SWITCH_20241219_COMBAT.png'})

View File

@ -8877,6 +8877,57 @@
}
}
},
"Oilkeep": {
"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": "Oilkeep",
"display": "hide"
},
"SuccessInterval": {
"type": "input",
"value": 30,
"display": "hide"
},
"FailureInterval": {
"type": "input",
"value": 30,
"display": "hide"
},
"ServerUpdate": {
"type": "input",
"value": "00:00, 6:00, 12:00, 18:00",
"display": "hide"
}
},
"Oilkeep": {
"OilkeepLevel": {
"type": "input",
"value": "8000"
}
},
"Storage": {
"Storage": {
"type": "storage",
"value": {},
"valuetype": "ignore",
"display": "disabled"
}
}
},
"Minigame": {
"Scheduler": {
"Enable": {

View File

@ -628,6 +628,9 @@ SupplyPack:
option: [ 0, 1, 2, 3, 4, 5, 6 ]
Minigame:
Collect: false
Oilkeep:
OilkeepLevel: 8000
# ==================== Daily ====================
Daily:

View File

@ -55,7 +55,8 @@
"Dorm",
"Meowfficer",
"Guild",
"Reward"
"Reward",
"Oilkeep"
]
},
"DailyMission": {

View File

@ -226,6 +226,9 @@ Reward:
Reward:
- Scheduler
- Reward
Oilkeep:
- Scheduler
- Oilkeep
# ==================== DailyMission ====================

View File

@ -387,7 +387,10 @@ class GeneratedConfig:
# Group `SupplyPack`
SupplyPack_Collect = True
SupplyPack_DayOfWeek = 0 # 0, 1, 2, 3, 4, 5, 6
# Group `Oilkeep`
Oilkeep_OilkeepLevel = 8000
# Group `Minigame`
Minigame_Collect = False

View File

@ -15,7 +15,7 @@ class ManualConfig:
> Exercise
> Dorm > Meowfficer > Guild > Gacha
> Reward
> ShopFrequent > ShopOnce > Shipyard > Freebies > Minigame
> ShopFrequent > ShopOnce > Shipyard > Freebies > Oilkeep > Minigame
> OpsiExplore
> OpsiAshBeacon
> OpsiDaily > OpsiShop > OpsiVoucher

View File

@ -154,6 +154,10 @@
"name": "每日任务",
"help": ""
},
"Oilkeep": {
"name": "石油平衡",
"help": ""
},
"Hard": {
"name": "困难图",
"help": ""
@ -2349,6 +2353,16 @@
"6": "6"
}
},
"Oilkeep": {
"_info": {
"name": "石油平衡",
"help": "每天领取4次储藏室的石油以稳定石油量"
},
"OilkeepLevel": {
"name": "石油平衡值",
"help": "默认为8000,即石油量小于7900的时候会领取石油至7900"
}
},
"Hard": {
"_info": {
"name": "困难图",

View File

@ -45,7 +45,7 @@ INFO_BAR_AREA = Button(area={'cn': (200, 173, 1080, 348), 'en': (200, 173, 1080,
INFO_BAR_DETECT = Button(area={'cn': (194, 299, 1086, 348), 'en': (194, 299, 1086, 348), 'jp': (194, 299, 1086, 348), 'tw': (194, 299, 1086, 348)}, color={'cn': (48, 53, 65), 'en': (48, 53, 65), 'jp': (48, 53, 65), 'tw': (48, 53, 65)}, button={'cn': (194, 299, 1086, 348), 'en': (194, 299, 1086, 348), 'jp': (194, 299, 1086, 348), 'tw': (194, 299, 1086, 348)}, file={'cn': './assets/cn/handler/INFO_BAR_DETECT.png', 'en': './assets/en/handler/INFO_BAR_DETECT.png', 'jp': './assets/jp/handler/INFO_BAR_DETECT.png', 'tw': './assets/tw/handler/INFO_BAR_DETECT.png'})
IN_MAP = Button(area={'cn': (749, 654, 921, 707), 'en': (757, 654, 917, 699), 'jp': (748, 653, 919, 705), 'tw': (749, 654, 921, 707)}, color={'cn': (213, 124, 124), 'en': (215, 132, 132), 'jp': (212, 124, 124), 'tw': (213, 124, 124)}, button={'cn': (749, 654, 921, 707), 'en': (757, 654, 917, 699), 'jp': (748, 653, 919, 705), 'tw': (749, 654, 921, 707)}, file={'cn': './assets/cn/handler/IN_MAP.png', 'en': './assets/en/handler/IN_MAP.png', 'jp': './assets/jp/handler/IN_MAP.png', 'tw': './assets/tw/handler/IN_MAP.png'})
IN_STAGE = Button(area={'cn': (122, 16, 172, 39), 'en': (120, 18, 208, 40), 'jp': (121, 15, 174, 40), 'tw': (122, 16, 172, 39)}, color={'cn': (149, 167, 207), 'en': (104, 118, 157), 'jp': (151, 167, 205), 'tw': (149, 167, 207)}, button={'cn': (122, 16, 172, 39), 'en': (120, 18, 208, 40), 'jp': (121, 15, 174, 40), 'tw': (122, 16, 172, 39)}, file={'cn': './assets/cn/handler/IN_STAGE.png', 'en': './assets/en/handler/IN_STAGE.png', 'jp': './assets/jp/handler/IN_STAGE.png', 'tw': './assets/tw/handler/IN_STAGE.png'})
LOGIN_ANNOUNCE = Button(area={'cn': (1160, 45, 1227, 90), 'en': (1159, 44, 1228, 91), 'jp': (1160, 46, 1224, 86), 'tw': (1160, 45, 1227, 90)}, color={'cn': (174, 61, 56), 'en': (193, 79, 73), 'jp': (191, 79, 74), 'tw': (174, 61, 56)}, button={'cn': (1160, 61, 1190, 90), 'en': (1160, 61, 1190, 90), 'jp': (1160, 61, 1190, 90), 'tw': (1160, 61, 1190, 90)}, file={'cn': './assets/cn/handler/LOGIN_ANNOUNCE.png', 'en': './assets/en/handler/LOGIN_ANNOUNCE.png', 'jp': './assets/jp/handler/LOGIN_ANNOUNCE.png', 'tw': './assets/tw/handler/LOGIN_ANNOUNCE.png'})
LOGIN_ANNOUNCE = Button(area={'cn': (1192, 81, 1224, 113), 'en': (1159, 44, 1228, 91), 'jp': (1160, 46, 1224, 86), 'tw': (1160, 45, 1227, 90)}, color={'cn': (182, 196, 199), 'en': (193, 79, 73), 'jp': (191, 79, 74), 'tw': (174, 61, 56)}, button={'cn': (1192, 81, 1224, 113), 'en': (1160, 61, 1190, 90), 'jp': (1160, 61, 1190, 90), 'tw': (1160, 61, 1190, 90)}, file={'cn': './assets/cn/handler/LOGIN_ANNOUNCE.png', 'en': './assets/en/handler/LOGIN_ANNOUNCE.png', 'jp': './assets/jp/handler/LOGIN_ANNOUNCE.png', 'tw': './assets/tw/handler/LOGIN_ANNOUNCE.png'})
LOGIN_ANNOUNCE_2 = Button(area={'cn': (1193, 83, 1215, 105), 'en': (1193, 83, 1215, 105), 'jp': (1193, 83, 1215, 105), 'tw': (1193, 83, 1215, 105)}, color={'cn': (158, 170, 175), 'en': (158, 170, 175), 'jp': (158, 170, 175), 'tw': (158, 170, 175)}, button={'cn': (1171, 83, 1193, 105), 'en': (1171, 83, 1193, 105), 'jp': (1171, 83, 1193, 105), 'tw': (1171, 83, 1193, 105)}, file={'cn': './assets/cn/handler/LOGIN_ANNOUNCE_2.png', 'en': './assets/en/handler/LOGIN_ANNOUNCE_2.png', 'jp': './assets/jp/handler/LOGIN_ANNOUNCE_2.png', 'tw': './assets/tw/handler/LOGIN_ANNOUNCE_2.png'})
LOGIN_CHECK = Button(area={'cn': (1214, 653, 1268, 709), 'en': (1214, 653, 1268, 709), 'jp': (1214, 653, 1268, 709), 'tw': (1214, 653, 1268, 709)}, color={'cn': (203, 215, 230), 'en': (203, 215, 230), 'jp': (203, 215, 230), 'tw': (203, 215, 230)}, button={'cn': (416, 294, 534, 400), 'en': (1078, 591, 1168, 635), 'jp': (416, 294, 534, 400), 'tw': (416, 294, 534, 400)}, file={'cn': './assets/cn/handler/LOGIN_CHECK.png', 'en': './assets/en/handler/LOGIN_CHECK.png', 'jp': './assets/jp/handler/LOGIN_CHECK.png', 'tw': './assets/tw/handler/LOGIN_CHECK.png'})
LOGIN_GAME_UPDATE = Button(area={'cn': (700, 471, 873, 529), 'en': (726, 474, 850, 519), 'jp': (704, 475, 867, 525), 'tw': (706, 477, 866, 528)}, color={'cn': (238, 170, 78), 'en': (241, 169, 73), 'jp': (234, 167, 77), 'tw': (235, 169, 80)}, button={'cn': (700, 471, 873, 529), 'en': (726, 474, 850, 519), 'jp': (704, 475, 867, 525), 'tw': (706, 477, 866, 528)}, file={'cn': './assets/cn/handler/LOGIN_GAME_UPDATE.png', 'en': './assets/en/handler/LOGIN_GAME_UPDATE.png', 'jp': './assets/jp/handler/LOGIN_GAME_UPDATE.png', 'tw': './assets/tw/handler/LOGIN_GAME_UPDATE.png'})
@ -71,7 +71,6 @@ MOB_MOVE_CANCEL = Button(area={'cn': (1162, 646, 1220, 674), 'en': (1112, 646, 1
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'})
otherlogin = Button(area={'cn': (568, 333, 715, 356), 'en': (370, 340, 905, 354), 'jp': (472, 334, 640, 357), 'tw': (568, 333, 715, 356)}, color={'cn': (144, 149, 154), 'en': (180, 183, 186), 'jp': (151, 155, 159), 'tw': (144, 149, 154)}, button={'cn': (568, 333, 715, 356), 'en': (370, 340, 905, 354), 'jp': (472, 334, 640, 357), 'tw': (568, 333, 715, 356)}, file={'cn': './assets/cn/handler/otherlogin.png', 'en': './assets/en/handler/otherlogin.png', 'jp': './assets/jp/handler/otherlogin.png', 'tw': './assets/cn/handler/otherlogin.png'})
POPUP_CANCEL = Button(area={'cn': (453, 506, 525, 536), 'en': (407, 485, 574, 535), 'jp': (455, 515, 521, 546), 'tw': (454, 495, 525, 526)}, color={'cn': (196, 198, 199), 'en': (168, 169, 171), 'jp': (181, 183, 184), 'tw': (195, 196, 197)}, button={'cn': (453, 506, 525, 536), 'en': (407, 485, 574, 535), 'jp': (455, 515, 521, 546), 'tw': (454, 495, 525, 526)}, file={'cn': './assets/cn/handler/POPUP_CANCEL.png', 'en': './assets/en/handler/POPUP_CANCEL.gif', 'jp': './assets/jp/handler/POPUP_CANCEL.png', 'tw': './assets/tw/handler/POPUP_CANCEL.png'})
POPUP_CONFIRM = Button(area={'cn': (754, 502, 825, 532), 'en': (707, 487, 874, 537), 'jp': (754, 518, 826, 547), 'tw': (754, 495, 825, 525)}, color={'cn': (153, 183, 222), 'en': (105, 151, 207), 'jp': (139, 172, 215), 'tw': (147, 178, 218)}, button={'cn': (754, 502, 825, 532), 'en': (707, 487, 874, 537), 'jp': (754, 518, 826, 547), 'tw': (754, 495, 825, 525)}, file={'cn': './assets/cn/handler/POPUP_CONFIRM.png', 'en': './assets/en/handler/POPUP_CONFIRM.gif', 'jp': './assets/jp/handler/POPUP_CONFIRM.png', 'tw': './assets/tw/handler/POPUP_CONFIRM.png'})
STORY_CLOSE = Button(area={'cn': (1227, 28, 1252, 53), 'en': (1227, 28, 1252, 53), 'jp': (1227, 28, 1252, 53), 'tw': (1227, 28, 1252, 53)}, color={'cn': (87, 90, 104), 'en': (87, 90, 104), 'jp': (87, 90, 104), 'tw': (87, 90, 104)}, button={'cn': (1227, 28, 1252, 53), 'en': (1227, 28, 1252, 53), 'jp': (1227, 28, 1252, 53), 'tw': (1227, 28, 1252, 53)}, file={'cn': './assets/cn/handler/STORY_CLOSE.png', 'en': './assets/en/handler/STORY_CLOSE.png', 'jp': './assets/jp/handler/STORY_CLOSE.png', 'tw': './assets/tw/handler/STORY_CLOSE.png'})
@ -93,3 +92,4 @@ USER_AGREEMENT_CONFIRM = Button(area={'cn': (709, 526, 742, 542), 'en': (709, 52
USE_DATA_KEY = Button(area={'cn': (688, 316, 781, 338), 'en': (759, 323, 889, 342), 'jp': (627, 300, 743, 321), 'tw': (688, 316, 782, 338)}, color={'cn': (165, 154, 99), 'en': (170, 160, 94), 'jp': (127, 128, 116), 'tw': (159, 150, 97)}, button={'cn': (688, 316, 781, 338), 'en': (759, 323, 889, 342), 'jp': (627, 300, 743, 321), 'tw': (688, 316, 782, 338)}, file={'cn': './assets/cn/handler/USE_DATA_KEY.png', 'en': './assets/en/handler/USE_DATA_KEY.png', 'jp': './assets/jp/handler/USE_DATA_KEY.png', 'tw': './assets/tw/handler/USE_DATA_KEY.png'})
USE_DATA_KEY_NOTIFIED = Button(area={'cn': (770, 434, 793, 456), 'en': (820, 440, 837, 456), 'jp': (686, 430, 709, 456), 'tw': (782, 440, 799, 456)}, color={'cn': (41, 44, 49), 'en': (33, 40, 41), 'jp': (33, 44, 49), 'tw': (34, 40, 48)}, button={'cn': (770, 434, 793, 456), 'en': (820, 440, 837, 456), 'jp': (686, 430, 709, 456), 'tw': (782, 440, 799, 456)}, file={'cn': './assets/cn/handler/USE_DATA_KEY_NOTIFIED.png', 'en': './assets/en/handler/USE_DATA_KEY_NOTIFIED.png', 'jp': './assets/jp/handler/USE_DATA_KEY_NOTIFIED.png', 'tw': './assets/tw/handler/USE_DATA_KEY_NOTIFIED.png'})
VOTE_CANCEL = Button(area={'cn': (404, 483, 576, 539), 'en': (413, 489, 566, 532), 'jp': (407, 483, 577, 538), 'tw': (404, 483, 576, 539)}, color={'cn': (167, 169, 171), 'en': (169, 170, 172), 'jp': (163, 164, 166), 'tw': (167, 169, 171)}, button={'cn': (404, 483, 576, 539), 'en': (413, 489, 566, 532), 'jp': (407, 483, 577, 538), 'tw': (404, 483, 576, 539)}, file={'cn': './assets/cn/handler/VOTE_CANCEL.png', 'en': './assets/en/handler/VOTE_CANCEL.png', 'jp': './assets/jp/handler/VOTE_CANCEL.png', 'tw': './assets/cn/handler/VOTE_CANCEL.png'})
otherlogin = Button(area={'cn': (568, 333, 715, 356), 'en': (370, 340, 905, 354), 'jp': (472, 334, 640, 357), 'tw': (568, 333, 715, 356)}, color={'cn': (144, 149, 154), 'en': (180, 183, 186), 'jp': (151, 155, 159), 'tw': (144, 149, 154)}, button={'cn': (568, 333, 715, 356), 'en': (370, 340, 905, 354), 'jp': (472, 334, 640, 357), 'tw': (568, 333, 715, 356)}, file={'cn': './assets/cn/handler/otherlogin.png', 'en': './assets/en/handler/otherlogin.png', 'jp': './assets/jp/handler/otherlogin.png', 'tw': './assets/cn/handler/otherlogin.png'})

10
module/oilkeep/assets.py Normal file
View File

@ -0,0 +1,10 @@
from module.base.button import Button
from module.base.template import Template
# This file was automatically generated by dev_tools/button_extract.py.
# Don't modify it manually.
MAIL_OIL = Button(area={'cn': (21, 231, 112, 261), 'en': (21, 231, 112, 261), 'jp': (21, 231, 112, 261), 'tw': (21, 231, 112, 261)}, color={'cn': (77, 82, 99), 'en': (77, 82, 99), 'jp': (77, 82, 99), 'tw': (77, 82, 99)}, button={'cn': (21, 231, 112, 261), 'en': (21, 231, 112, 261), 'jp': (21, 231, 112, 261), 'tw': (21, 231, 112, 261)}, file={'cn': './assets/cn/oilkeep/MAIL_OIL.png', 'en': './assets/cn/oilkeep/MAIL_OIL.png', 'jp': './assets/cn/oilkeep/MAIL_OIL.png', 'tw': './assets/cn/oilkeep/MAIL_OIL.png'})
MAIL_OIL_ADD = Button(area={'cn': (542, 452, 591, 496), 'en': (542, 452, 591, 496), 'jp': (542, 452, 591, 496), 'tw': (542, 452, 591, 496)}, color={'cn': (68, 154, 196), 'en': (68, 154, 196), 'jp': (68, 154, 196), 'tw': (68, 154, 196)}, button={'cn': (542, 452, 591, 496), 'en': (542, 452, 591, 496), 'jp': (542, 452, 591, 496), 'tw': (542, 452, 591, 496)}, file={'cn': './assets/cn/oilkeep/MAIL_OIL_ADD.png', 'en': './assets/cn/oilkeep/MAIL_OIL_ADD.png', 'jp': './assets/cn/oilkeep/MAIL_OIL_ADD.png', 'tw': './assets/cn/oilkeep/MAIL_OIL_ADD.png'})
MAIL_OIL_GET = Button(area={'cn': (1029, 591, 1158, 652), 'en': (1029, 591, 1158, 652), 'jp': (1029, 591, 1158, 652), 'tw': (1029, 591, 1158, 652)}, color={'cn': (66, 171, 222), 'en': (66, 171, 222), 'jp': (66, 171, 222), 'tw': (66, 171, 222)}, button={'cn': (1029, 591, 1158, 652), 'en': (1029, 591, 1158, 652), 'jp': (1029, 591, 1158, 652), 'tw': (1029, 591, 1158, 652)}, file={'cn': './assets/cn/oilkeep/MAIL_OIL_GET.png', 'en': './assets/cn/oilkeep/MAIL_OIL_GET.png', 'jp': './assets/cn/oilkeep/MAIL_OIL_GET.png', 'tw': './assets/cn/oilkeep/MAIL_OIL_GET.png'})
MAIL_OIL_GET_ENSURE = Button(area={'cn': (732, 464, 800, 537), 'en': (732, 464, 800, 537), 'jp': (732, 464, 800, 537), 'tw': (732, 464, 800, 537)}, color={'cn': (108, 204, 251), 'en': (108, 204, 251), 'jp': (108, 204, 251), 'tw': (108, 204, 251)}, button={'cn': (732, 464, 800, 537), 'en': (732, 464, 800, 537), 'jp': (732, 464, 800, 537), 'tw': (732, 464, 800, 537)}, file={'cn': './assets/cn/oilkeep/MAIL_OIL_GET_ENSURE.png', 'en': './assets/cn/oilkeep/MAIL_OIL_GET_ENSURE.png', 'jp': './assets/cn/oilkeep/MAIL_OIL_GET_ENSURE.png', 'tw': './assets/cn/oilkeep/MAIL_OIL_GET_ENSURE.png'})

187
module/oilkeep/oilkeep.py Normal file
View File

@ -0,0 +1,187 @@
from module.logger import logger
from module.oilkeep.assets import *
from module.ui.ui import UI
from module.base.timer import Timer
from module.combat.assets import GET_ITEMS_1, GET_ITEMS_2
from module.freebies.assets import *
from module.logger import logger
from module.ui.page import GOTO_MAIN_WHITE, MAIN_GOTO_CAMPAIGN_WHITE, page_mail, page_main, page_main_white
from module.ui.ui import UI
from module.campaign.assets import OCR_OIL, OCR_OIL_LIMIT, OCR_OIL_CHECK
from module.log_res.log_res import LogRes
from module.base.utils import color_similar, get_color
from module.ocr.ocr import Digit
class Oilkeep(UI):
def _mail_enter_and_get_oil(self,oilLine,nowOil, skip_first_screenshot=True):
"""
Returns:
int: If having mails
Page:
in: page_main_white or MAIL_MANAGE
out: MAIL_BATCH_CLAIM
"""
logger.info('Mail enter')
self.interval_clear([
MAIL_MANAGE
])
timeout = Timer(0.6, count=1)
has_mail = False
mail_oil_add_count = 0
oil_add_need = 0
if nowOil < oilLine:
oil_add_need = (oilLine - nowOil) // 100
logger.info(f'Need oil add count: {oil_add_need} ')
while 1:
if skip_first_screenshot:
skip_first_screenshot = False
else:
self.device.screenshot()
# End
if self.appear(MAIL_BATCH_CLAIM, offset=(20, 20)):
logger.info('Mail entered')
return True
# if self.appear(MAIL_WHITE_EMPTY, offset=(20, 20)):
# logger.info('Mail empty')
# return False
# if not has_mail and self.appear(GOTO_MAIN_WHITE, offset=(20, 20)):
# timeout.start()
# if timeout.reached():
# logger.info('Mail empty, wait GOTO_MAIN_WHITE timeout')
# return False
# Click
if self.appear_then_click(MAIL_OIL, offset=(30, 30), interval=3):
logger.info('MAIL_OIL entered')
continue
if mail_oil_add_count <= oil_add_need-1 and self.appear_then_click(MAIL_OIL_ADD, offset=(30, 30), interval=3):
mail_oil_add_count += 1
logger.info('MAIL_OIL_ADD')
continue
if mail_oil_add_count >= oil_add_need:
if self.appear_then_click(MAIL_OIL_GET, offset=(30, 30), interval=3):
logger.info('MAIL_OIL_GET')
if self.appear_then_click(MAIL_OIL_GET_ENSURE, offset=(30, 30), interval=3):
logger.info('MAIL_OIL_GET_ENSURE')
break
if self.ui_main_appear_then_click(page_mail, offset=(30, 30), interval=3):
continue
return False
def _mail_quit(self, skip_first_screenshot=True):
"""
Page:
in: Any page in page_mail
out: page_main_white
"""
logger.info('Mail quit')
self.interval_clear([
MAIL_BATCH_CLAIM,
GOTO_MAIN_WHITE,
GET_ITEMS_1,
GET_ITEMS_2,
])
self.popup_interval_clear()
while 1:
if skip_first_screenshot:
skip_first_screenshot = False
else:
self.device.screenshot()
# End
if self.ui_page_appear(page_main):
logger.info('Mail quit to page_main')
break
# Click
if self.handle_popup_confirm('MAIL_QUIT'):
continue
if self.appear(MAIL_BATCH_CLAIM, offset=(30, 30), interval=3):
logger.info(f'{MAIL_BATCH_CLAIM} -> {MAIL_MANAGE}')
self.device.click(MAIL_MANAGE)
continue
if self.appear_then_click(GOTO_MAIN_WHITE, offset=(30, 30), interval=3):
continue
def _get_num(self, _button, name):
# Update offset
_ = self.appear(OCR_OIL_CHECK)
color = get_color(self.device.image, OCR_OIL_CHECK.button)
if color_similar(color, OCR_OIL_CHECK.color):
# Original color
ocr = Digit(_button, name=name, letter=(247, 247, 247), threshold=128)
elif color_similar(color, (59, 59, 64)):
# With black overlay
ocr = Digit(_button, name=name, letter=(165, 165, 165), threshold=128)
else:
logger.warning(f'Unexpected OCR_OIL_CHECK color')
ocr = Digit(_button, name=name, letter=(247, 247, 247), threshold=128)
return ocr.ocr(self.device.image)
def get_oil(self, skip_first_screenshot=True, update=False):
"""
Returns:
int: Oil amount
"""
_oil = {}
timeout = Timer(1, count=2).start()
while 1:
if skip_first_screenshot:
skip_first_screenshot = False
else:
self.device.screenshot()
if not self.appear(OCR_OIL_CHECK, offset=(10, 2)):
logger.info('No oil icon')
self.device.sleep(2)
if timeout.reached():
logger.warning('Get oil timeout')
break
_oil = {
'Value': self._get_num(OCR_OIL, 'OCR_OIL'),
'Limit': self._get_num(OCR_OIL_LIMIT, 'OCR_OIL_LIMIT')
}
if _oil['Value'] >= 100:
break
LogRes(self.config).Oil = _oil
if update:
self.config.update()
return _oil['Value']
def update_oil(self):
self.ui_ensure(page_main)
if self.appear_then_click(MAIN_GOTO_CAMPAIGN_WHITE, offset=(30, 30), interval=3):
logger.info('MAIN_GOTO_CAMPAIGN_WHITE')
oilOcr = self.get_oil()
logger.info(f'Oil now: {oilOcr}')
self.ui_ensure(page_main)
return oilOcr
def pageCheck(self):
self.ui_ensure(page_main)
if self.appear(page_main_white.check_button, offset=(30, 30)):
logger.info('pageCheck: At page_main_white')
return True
elif self.appear(page_main.check_button, offset=(5, 5)):
logger.warning('At page_main, cannot enter mail page from old UI')
return False
else:
logger.warning('Unknown page_main, cannot enter mail page')
return False
def run(self):
logger.hr('Oil Keep', level=1)
OilkeepLine = self.config.Oilkeep_OilkeepLevel
oilOcrNow = self.update_oil()
if self.pageCheck() is True and oilOcrNow != 0 and oilOcrNow < OilkeepLine -100:
self._mail_enter_and_get_oil(OilkeepLine, oilOcrNow)
self._mail_quit()
self.update_oil()
self.config.task_delay(server_update=True)