From 8bff63d0dd89e74047125651d387f50cf5f7c288 Mon Sep 17 00:00:00 2001 From: RuaBQ <39193080+RuaBQ@users.noreply.github.com> Date: Wed, 16 Sep 2020 16:55:11 +0800 Subject: [PATCH] rename file --- alas.py | 6 +- assets/cn/decomposition/BOX_COMBINE.png | Bin 0 -> 10829 bytes assets/cn/decomposition/CHOOSE_UPGRADE.png | Bin 0 -> 9511 bytes assets/cn/decomposition/GOTO_EQUIPMENT.png | Bin 0 -> 11241 bytes assets/cn/decomposition/SELECT_SORT.png | Bin 0 -> 12008 bytes assets/cn/template/TEMPLATE_UPGRADE.png | Bin 636 -> 0 bytes .../cn/template/TEMPLATE_WEAPON_UPGRADE.png | Bin 0 -> 1200 bytes module/decomposition/assets.py | 14 --- module/decomposition/decomposition.py | 63 ----------- module/recycle/assets.py | 18 ++++ .../{decomposition => recycle}/box_detect.py | 26 +++-- module/recycle/recycle.py | 99 ++++++++++++++++++ module/{decomposition => recycle}/test.py | 2 +- module/{decomposition => recycle}/test0.png | Bin module/{decomposition => recycle}/test1.png | Bin module/{decomposition => recycle}/test10.png | Bin module/{decomposition => recycle}/test2.png | Bin module/{decomposition => recycle}/test3.png | Bin module/{decomposition => recycle}/test4.png | Bin module/{decomposition => recycle}/test5.png | Bin module/{decomposition => recycle}/test6.png | Bin module/{decomposition => recycle}/test7.png | Bin module/{decomposition => recycle}/test8.png | Bin module/{decomposition => recycle}/test9.png | Bin module/template/assets.py | 2 +- 25 files changed, 142 insertions(+), 88 deletions(-) create mode 100644 assets/cn/decomposition/BOX_COMBINE.png create mode 100644 assets/cn/decomposition/CHOOSE_UPGRADE.png create mode 100644 assets/cn/decomposition/GOTO_EQUIPMENT.png create mode 100644 assets/cn/decomposition/SELECT_SORT.png delete mode 100644 assets/cn/template/TEMPLATE_UPGRADE.png create mode 100644 assets/cn/template/TEMPLATE_WEAPON_UPGRADE.png delete mode 100644 module/decomposition/assets.py delete mode 100644 module/decomposition/decomposition.py create mode 100644 module/recycle/assets.py rename module/{decomposition => recycle}/box_detect.py (94%) create mode 100644 module/recycle/recycle.py rename module/{decomposition => recycle}/test.py (99%) rename module/{decomposition => recycle}/test0.png (100%) rename module/{decomposition => recycle}/test1.png (100%) rename module/{decomposition => recycle}/test10.png (100%) rename module/{decomposition => recycle}/test2.png (100%) rename module/{decomposition => recycle}/test3.png (100%) rename module/{decomposition => recycle}/test4.png (100%) rename module/{decomposition => recycle}/test5.png (100%) rename module/{decomposition => recycle}/test6.png (100%) rename module/{decomposition => recycle}/test7.png (100%) rename module/{decomposition => recycle}/test8.png (100%) rename module/{decomposition => recycle}/test9.png (100%) diff --git a/alas.py b/alas.py index 9fbf32143..5c7f4205b 100644 --- a/alas.py +++ b/alas.py @@ -189,9 +189,9 @@ class AzurLaneAutoScript: az.retire_ships(amount=2000) def auto_box(self): - from module.decomposition.decomposition import Decomposition - az = Decomposition(self.config, device=self.device) - az.Decomps() + from module.recycle.recycle import Recycle + az = Recycle(self.config, device=self.device) + az.run() self.reward_when_finished() # alas = AzurLaneAutoScript() diff --git a/assets/cn/decomposition/BOX_COMBINE.png b/assets/cn/decomposition/BOX_COMBINE.png new file mode 100644 index 0000000000000000000000000000000000000000..8cd150c083944a4cfb54390c41a2d38f9dd30e37 GIT binary patch literal 10829 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 literal 0 HcmV?d00001 diff --git a/assets/cn/decomposition/GOTO_EQUIPMENT.png b/assets/cn/decomposition/GOTO_EQUIPMENT.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f41bb38d931f3b5f0e04f5b3c0b1e9a915db08 GIT binary patch literal 11241 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 TH&4jB&+2IBY+H9B@c#b+Wz%2Q literal 0 HcmV?d00001 diff --git a/assets/cn/decomposition/SELECT_SORT.png b/assets/cn/decomposition/SELECT_SORT.png new file mode 100644 index 0000000000000000000000000000000000000000..48943ea3bbfbe8bb6f2844c4ccc811d06c5405e1 GIT binary patch literal 12008 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 literal 0 HcmV?d00001 diff --git a/assets/cn/template/TEMPLATE_UPGRADE.png b/assets/cn/template/TEMPLATE_UPGRADE.png deleted file mode 100644 index 7cbfaf52622dc537d15480fe5fc3a13588c9e6c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 636 zcmV-?0)zdDP)<#s)!x#A4>`C97Z4v^Y-&gsDIka3^5jSa^1zP>QRLcwS@`XGC6buI03>K$ zzCH5qU%+*qF;Bn(V8)%z1K6_5HDQRoK0m^0q?_QY`n`=N4UE<6>%3!p|M4?&OAa?g z1%{@_(kd8ZV68=KLO8x8Ajn_% z6A6}iiL6rr%)q*2SZ|Q$-ocVD0VJY^Y|dT$w_v`CFl=A~VCes$xu_{Z(8nCcB6QBc zxqHNpn)CN8?~F*mdv_pUKf%T{xoe+?ma}0K;BgjzNWNNN4Fec!`zu;$#x!B8+Q% z>QHY4Jd{nrsuQk&ZBpgjQ5Fp@%||QJ+i6Eix#wS|d~sMS_)_izF4safX)u9u5!P(S zZ>jpdOIv$VO6)*CUPz{TYnfH#@e+~8#1o5alOlGM50+I98zHGukQI@(eQMpU0tfI6 zyhpCaVpviq;;-B#v_kTzvGi?9o20aTp(8(B(Xtag_E7X|NXlm_>2ATx^9nqD{epjy W#PIkb*@?dZ00009WI5LVYaAGzt_IQwaiEz{JeT#=^o5H3DcG1G6HFkfCEB zYhvNVg&UQO4t@}J3SQ(K)VS&5!;k-OG4L=09VrM@XU||Zu}#2v+c)lA@^iEOMCHw2 zEL=aiTz&4a!L=((}=&mulegGtEso;?{A#)@l~bP#Qfviwn!X3u|9H7 zSejOtNQ94plb`IT4U^w2ej=2qDfQHx*Ds~fG$3Hr6rW&*4q3I83d{E0-+7*q+p(m1 zu8FAxSK#qe2L5wHm#D~0eYpCeeMeqF%#NpfZqM2HEM@vrKJ%F#YYvy}O{)4QF>#~q zrajA#T#-KD>AZbjVd8`hu2vJgG}ifW9orK8chN%j&dIvmQC^uPzs&YuE4i{+yh27= z_txXpS7uFmC&9p%&CVBT;aRc$^zj{?_OV-<)w#`!Zn^5NnDk;@SLdp5-H=PWHQujM zea95|*nVrCe%dXUBdv--VjQLgK{2vN0(S47^Wa)$tJ%(C)k$i9LN-b?SA>Yas@VPT z|AhlN%w-E7-|3Coo^mHpdiINtdO6Cb-A~_K7WwhpaEaoxMUPp}wy_$YJ}xB``MQ#+ zC4%!0f(ecdxE;AEfol$1FK*^HKJxUjM&cgR zx~0;GbLaVaUC%f^aZ;t@(%xkr<^IWnvNiE%wS^;7WtARYE<4+(I$=Vr>*bhbmJO+E zo4WW!W%})6J`}827*fyn*V10@gC5t!fc(n}eH}CR9{wqDh$&ekk$>`>M{0t<1s}Ox zT6cbn{l)mVhELPXu*sHIebg%4hG7l@*=*$Q8FbvscOFsD^@&_lkPM;G3p4bJm17ifJcK zoscT0$1^=fkiCzqVdceF%2z%ywv;~C`_GX0T{~-q*Ntnt9r=sSn))_x;ynKML87#o T$L#DWoPR?2cPd}A|9=wzaG%01 literal 0 HcmV?d00001 diff --git a/module/decomposition/assets.py b/module/decomposition/assets.py deleted file mode 100644 index 8d743431a..000000000 --- a/module/decomposition/assets.py +++ /dev/null @@ -1,14 +0,0 @@ -from module.base.button import Button -from module.base.template import Template - -# This file was automatically generated by dev_tools.button_extract. -# Don't modify it manually. - -BOX_USE10_1 = Button(area={'cn': (683, 477, 855, 532), 'en': (683, 477, 855, 532), 'jp': (683, 477, 855, 532)}, color={'cn': (108, 153, 210), 'en': (108, 153, 210), 'jp': (108, 153, 210)}, button={'cn': (683, 477, 855, 532), 'en': (683, 477, 855, 532), 'jp': (683, 477, 855, 532)}, file={'cn': './assets/cn/decomposition/BOX_USE10_1.png', 'en': './assets/cn/decomposition/BOX_USE10_1.png', 'jp': './assets/cn/decomposition/BOX_USE10_1.png'}) -BOX_USE10_2 = Button(area={'cn': (748, 477, 920, 532), 'en': (748, 477, 920, 532), 'jp': (748, 477, 920, 532)}, color={'cn': (107, 153, 209), 'en': (107, 153, 209), 'jp': (107, 153, 209)}, button={'cn': (748, 477, 920, 532), 'en': (748, 477, 920, 532), 'jp': (748, 477, 920, 532)}, file={'cn': './assets/cn/decomposition/BOX_USE10_2.png', 'en': './assets/cn/decomposition/BOX_USE10_2.png', 'jp': './assets/cn/decomposition/BOX_USE10_2.png'}) -INFORM_BOX = Button(area={'cn': (340, 198, 941, 261), 'en': (340, 198, 941, 261), 'jp': (340, 198, 941, 261)}, color={'cn': (114, 125, 169), 'en': (114, 125, 169), 'jp': (114, 125, 169)}, button={'cn': (340, 198, 941, 261), 'en': (340, 198, 941, 261), 'jp': (340, 198, 941, 261)}, file={'cn': './assets/cn/decomposition/INFORM_BOX.png', 'en': './assets/cn/decomposition/INFORM_BOX.png', 'jp': './assets/cn/decomposition/INFORM_BOX.png'}) -INFORM_FULL = Button(area={'cn': (346, 169, 933, 230), 'en': (346, 169, 933, 230), 'jp': (346, 169, 933, 230)}, color={'cn': (110, 122, 166), 'en': (110, 122, 166), 'jp': (110, 122, 166)}, button={'cn': (346, 169, 933, 230), 'en': (346, 169, 933, 230), 'jp': (346, 169, 933, 230)}, file={'cn': './assets/cn/decomposition/INFORM_FULL.png', 'en': './assets/cn/decomposition/INFORM_FULL.png', 'jp': './assets/cn/decomposition/INFORM_FULL.png'}) -MATERIAL = Button(area={'cn': (1105, 651, 1259, 703), 'en': (1105, 651, 1259, 703), 'jp': (1105, 651, 1259, 703)}, color={'cn': (169, 133, 78), 'en': (169, 133, 78), 'jp': (169, 133, 78)}, button={'cn': (1105, 651, 1259, 703), 'en': (1105, 651, 1259, 703), 'jp': (1105, 651, 1259, 703)}, file={'cn': './assets/cn/decomposition/MATERIAL.png', 'en': './assets/cn/decomposition/MATERIAL.png', 'jp': './assets/cn/decomposition/MATERIAL.png'}) -STORAGE_AREA = Button(area={'cn': (126, 57, 1232, 650), 'en': (126, 57, 1232, 650), 'jp': (126, 57, 1232, 650)}, color={'cn': (255, 255, 255), 'en': (255, 255, 255), 'jp': (255, 255, 255)}, button={'cn': (126, 57, 1232, 650), 'en': (126, 57, 1232, 650), 'jp': (126, 57, 1232, 650)}, file={'cn': './assets/cn/decomposition/STORAGE_AREA.png', 'en': './assets/cn/decomposition/STORAGE_AREA.png', 'jp': './assets/cn/decomposition/STORAGE_AREA.png'}) -STORAGE_CHECK = Button(area={'cn': (1225, 16, 1257, 45), 'en': (1225, 16, 1257, 45), 'jp': (1225, 16, 1257, 45)}, color={'cn': (108, 124, 151), 'en': (108, 124, 151), 'jp': (108, 124, 151)}, button={'cn': (1225, 16, 1257, 45), 'en': (1225, 16, 1257, 45), 'jp': (1225, 16, 1257, 45)}, file={'cn': './assets/cn/decomposition/STORAGE_CHECK.png', 'en': './assets/cn/decomposition/STORAGE_CHECK.png', 'jp': './assets/cn/decomposition/STORAGE_CHECK.png'}) -STORAGE_OPEN = Button(area={'cn': (328, 667, 484, 713), 'en': (328, 667, 484, 713), 'jp': (328, 667, 484, 713)}, color={'cn': (93, 111, 143), 'en': (93, 111, 143), 'jp': (93, 111, 143)}, button={'cn': (328, 667, 484, 713), 'en': (328, 667, 484, 713), 'jp': (328, 667, 484, 713)}, file={'cn': './assets/cn/decomposition/STORAGE_OPEN.png', 'en': './assets/cn/decomposition/STORAGE_OPEN.png', 'jp': './assets/cn/decomposition/STORAGE_OPEN.png'}) diff --git a/module/decomposition/decomposition.py b/module/decomposition/decomposition.py deleted file mode 100644 index 35441edda..000000000 --- a/module/decomposition/decomposition.py +++ /dev/null @@ -1,63 +0,0 @@ -import time - -from PIL import ImageChops - -from module.config.config import AzurLaneConfig -from module.decomposition.assets import * -from module.decomposition.box_detect import box_detect -from module.handler.info_handler import InfoHandler -from module.logger import logger -from module.base.utils import * -from module.base.button import Button - - -SWIPE_DISTANCE = 250 -SWIPE_RANDOM_RANGE = (-40, -20, 40, 20) - - -class Decomposition(InfoHandler): - - def _view_swipe(self, distance=SWIPE_DISTANCE): - - new = self.device.screenshot() - self.ensure_no_info_bar(timeout=3) - - self.device.swipe(vector=(0, -distance), box=STORAGE_AREA.area, random_range=SWIPE_RANDOM_RANGE, - padding=0, duration=(0.1, 0.12), name='STORAGE_SWIPE') - time.sleep(2) - - new, old = self.device.screenshot(), new - diff = ImageChops.difference(new, old) - if diff.getbbox(): - - logger.info('reach the buttom') - return False - - return True - - def Decomps(self): - # self.storageEnter() - - # self._view_swipe(250) - - detect = box_detect(AzurLaneConfig) - self.image = self.device.screenshot() - - boxArea = detect.detectBoxArea(self.image) - if boxArea: - for grid in boxArea: - self.useBox(grid) - self.device.screenshot() - if INFORM_FULL.match(self.device.screenshoot()): - - - def useBox(self, area): - self.device.click(Button(area, get_color(self.image, area), area)) - self.wait_until_appear(INFORM_BOX) - self.device.click(BOX_USE10_1) - - def storageEnter(self): - self.device.click(STORAGE_OPEN) - self.wait_until_appear(STORAGE_CHECK) - self.device.click(MATERIAL) - diff --git a/module/recycle/assets.py b/module/recycle/assets.py new file mode 100644 index 000000000..0717a1ec6 --- /dev/null +++ b/module/recycle/assets.py @@ -0,0 +1,18 @@ +from module.base.button import Button +from module.base.template import Template + +# This file was automatically generated by dev_tools.button_extract. +# Don't modify it manually. + +BOX_COMBINE = Button(area={'cn': (358, 476, 532, 534), 'en': (358, 476, 532, 534), 'jp': (358, 476, 532, 534)}, color={'cn': (93, 143, 205), 'en': (93, 143, 205), 'jp': (93, 143, 205)}, button={'cn': (358, 476, 532, 534), 'en': (358, 476, 532, 534), 'jp': (358, 476, 532, 534)}, file={'cn': './assets/cn/recycle/BOX_COMBINE.png', 'en': './assets/cn/recycle/BOX_COMBINE.png', 'jp': './assets/cn/recycle/BOX_COMBINE.png'}) +BOX_USE10_1 = Button(area={'cn': (683, 477, 855, 532), 'en': (683, 477, 855, 532), 'jp': (683, 477, 855, 532)}, color={'cn': (108, 153, 210), 'en': (108, 153, 210), 'jp': (108, 153, 210)}, button={'cn': (683, 477, 855, 532), 'en': (683, 477, 855, 532), 'jp': (683, 477, 855, 532)}, file={'cn': './assets/cn/recycle/BOX_USE10_1.png', 'en': './assets/cn/recycle/BOX_USE10_1.png', 'jp': './assets/cn/recycle/BOX_USE10_1.png'}) +BOX_USE10_2 = Button(area={'cn': (748, 477, 920, 532), 'en': (748, 477, 920, 532), 'jp': (748, 477, 920, 532)}, color={'cn': (107, 153, 209), 'en': (107, 153, 209), 'jp': (107, 153, 209)}, button={'cn': (748, 477, 920, 532), 'en': (748, 477, 920, 532), 'jp': (748, 477, 920, 532)}, file={'cn': './assets/cn/recycle/BOX_USE10_2.png', 'en': './assets/cn/recycle/BOX_USE10_2.png', 'jp': './assets/cn/recycle/BOX_USE10_2.png'}) +CHOOSE_UPGRADE = Button(area={'cn': (1037, 135, 1183, 176), 'en': (1037, 135, 1183, 176), 'jp': (1037, 135, 1183, 176)}, color={'cn': (56, 65, 90), 'en': (56, 65, 90), 'jp': (56, 65, 90)}, button={'cn': (1037, 135, 1183, 176), 'en': (1037, 135, 1183, 176), 'jp': (1037, 135, 1183, 176)}, file={'cn': './assets/cn/recycle/CHOOSE_UPGRADE.png', 'en': './assets/cn/recycle/CHOOSE_UPGRADE.png', 'jp': './assets/cn/recycle/CHOOSE_UPGRADE.png'}) +GOTO_EQUIPMENT = Button(area={'cn': (403, 481, 577, 541), 'en': (403, 481, 577, 541), 'jp': (403, 481, 577, 541)}, color={'cn': (98, 146, 205), 'en': (98, 146, 205), 'jp': (98, 146, 205)}, button={'cn': (403, 481, 577, 541), 'en': (403, 481, 577, 541), 'jp': (403, 481, 577, 541)}, file={'cn': './assets/cn/recycle/GOTO_EQUIPMENT.png', 'en': './assets/cn/recycle/GOTO_EQUIPMENT.png', 'jp': './assets/cn/recycle/GOTO_EQUIPMENT.png'}) +INFORM_BOX = Button(area={'cn': (340, 198, 941, 261), 'en': (340, 198, 941, 261), 'jp': (340, 198, 941, 261)}, color={'cn': (114, 125, 169), 'en': (114, 125, 169), 'jp': (114, 125, 169)}, button={'cn': (340, 198, 941, 261), 'en': (340, 198, 941, 261), 'jp': (340, 198, 941, 261)}, file={'cn': './assets/cn/recycle/INFORM_BOX.png', 'en': './assets/cn/recycle/INFORM_BOX.png', 'jp': './assets/cn/recycle/INFORM_BOX.png'}) +INFORM_FULL = Button(area={'cn': (346, 169, 933, 230), 'en': (346, 169, 933, 230), 'jp': (346, 169, 933, 230)}, color={'cn': (110, 122, 166), 'en': (110, 122, 166), 'jp': (110, 122, 166)}, button={'cn': (346, 169, 933, 230), 'en': (346, 169, 933, 230), 'jp': (346, 169, 933, 230)}, file={'cn': './assets/cn/recycle/INFORM_FULL.png', 'en': './assets/cn/recycle/INFORM_FULL.png', 'jp': './assets/cn/recycle/INFORM_FULL.png'}) +MATERIAL = Button(area={'cn': (1105, 651, 1259, 703), 'en': (1105, 651, 1259, 703), 'jp': (1105, 651, 1259, 703)}, color={'cn': (169, 133, 78), 'en': (169, 133, 78), 'jp': (169, 133, 78)}, button={'cn': (1105, 651, 1259, 703), 'en': (1105, 651, 1259, 703), 'jp': (1105, 651, 1259, 703)}, file={'cn': './assets/cn/recycle/MATERIAL.png', 'en': './assets/cn/recycle/MATERIAL.png', 'jp': './assets/cn/recycle/MATERIAL.png'}) +SELECT_SORT = Button(area={'cn': (1036, 4, 1184, 48), 'en': (1036, 4, 1184, 48), 'jp': (1036, 4, 1184, 48)}, color={'cn': (84, 99, 139), 'en': (84, 99, 139), 'jp': (84, 99, 139)}, button={'cn': (1036, 4, 1184, 48), 'en': (1036, 4, 1184, 48), 'jp': (1036, 4, 1184, 48)}, file={'cn': './assets/cn/recycle/SELECT_SORT.png', 'en': './assets/cn/recycle/SELECT_SORT.png', 'jp': './assets/cn/recycle/SELECT_SORT.png'}) +STORAGE_AREA = Button(area={'cn': (126, 57, 1232, 650), 'en': (126, 57, 1232, 650), 'jp': (126, 57, 1232, 650)}, color={'cn': (255, 255, 255), 'en': (255, 255, 255), 'jp': (255, 255, 255)}, button={'cn': (126, 57, 1232, 650), 'en': (126, 57, 1232, 650), 'jp': (126, 57, 1232, 650)}, file={'cn': './assets/cn/recycle/STORAGE_AREA.png', 'en': './assets/cn/recycle/STORAGE_AREA.png', 'jp': './assets/cn/recycle/STORAGE_AREA.png'}) +STORAGE_CHECK = Button(area={'cn': (1225, 16, 1257, 45), 'en': (1225, 16, 1257, 45), 'jp': (1225, 16, 1257, 45)}, color={'cn': (108, 124, 151), 'en': (108, 124, 151), 'jp': (108, 124, 151)}, button={'cn': (1225, 16, 1257, 45), 'en': (1225, 16, 1257, 45), 'jp': (1225, 16, 1257, 45)}, file={'cn': './assets/cn/recycle/STORAGE_CHECK.png', 'en': './assets/cn/recycle/STORAGE_CHECK.png', 'jp': './assets/cn/recycle/STORAGE_CHECK.png'}) +STORAGE_OPEN = Button(area={'cn': (328, 667, 484, 713), 'en': (328, 667, 484, 713), 'jp': (328, 667, 484, 713)}, color={'cn': (93, 111, 143), 'en': (93, 111, 143), 'jp': (93, 111, 143)}, button={'cn': (328, 667, 484, 713), 'en': (328, 667, 484, 713), 'jp': (328, 667, 484, 713)}, file={'cn': './assets/cn/recycle/STORAGE_OPEN.png', 'en': './assets/cn/recycle/STORAGE_OPEN.png', 'jp': './assets/cn/recycle/STORAGE_OPEN.png'}) diff --git a/module/decomposition/box_detect.py b/module/recycle/box_detect.py similarity index 94% rename from module/decomposition/box_detect.py rename to module/recycle/box_detect.py index f42b69bbc..4bcf855d3 100644 --- a/module/decomposition/box_detect.py +++ b/module/recycle/box_detect.py @@ -14,6 +14,8 @@ from module.base.utils import * from module.config.config import AzurLaneConfig from module.map_detection.utils import * from module.template.assets import * +from module.logger import logger + DETECTING_AREA = (0, 0, 1280, 720) @@ -162,7 +164,6 @@ class box_detect: y2 = int(y0 - 10000 * a) + expend draw.line([x1, y1, x2, y2], 'white') - def load(self): image = self.image image = np.array(image) @@ -264,21 +265,34 @@ class box_detect: areaList.append(i) continue - if boxList['T1'] and self.Predict_Box_T2(i): + if boxList['T2'] and self.Predict_Box_T2(i): areaList.append(i) continue - if boxList['T1'] and self.Predict_Box_T3(i): + if boxList['T3'] and self.Predict_Box_T3(i): areaList.append(i) continue return areaList + def detectWeaponArea(self, image): + self.image = image + self.load() + self.DivideGrid() + + areaList = [] + for i in self.grid: + if not self.Predict_Weapon_Upgrade(i): + areaList.append(i) + + return areaList + def Predict_Weapon_Upgrade(self, area): + image = self.crop(area=area) - - return TEMPLATE_BOX_T1.match(image, similarity=0.9) - + + # logger.info(TEMPLATE_WEAPON_UPGRADE.match_result(image)) + return TEMPLATE_BOX_T1.match(image, similarity=0.45) def Predict_Box_T1(self, area): diff --git a/module/recycle/recycle.py b/module/recycle/recycle.py new file mode 100644 index 000000000..c497b005a --- /dev/null +++ b/module/recycle/recycle.py @@ -0,0 +1,99 @@ +import time + +from PIL import ImageChops +import numpy as np + +from module.base.button import Button +from module.base.utils import * +from module.config.config import AzurLaneConfig +from module.recycle.assets import * +from module.recycle.box_detect import box_detect +from module.handler.info_handler import InfoHandler +from module.logger import logger +from module.statistics.item import AmountOcr + +SWIPE_DISTANCE = 250 +SWIPE_RANDOM_RANGE = (-40, -20, 40, 20) + +AMOUNT_OCR = AmountOcr([], threshold=64, name='Amount_ocr') +AMOUNT_AREA = (90, 72, 120, 120) + +class Recycleandler): + + def __init__(self, config, device=None): + super().__init__(config, device=device) + self.detect = box_detect(AzurLaneConfig) + self.amount_ocr = AMOUNT_OCR + self.amount_area = AMOUNT_AREA + + + + def _view_swipe(self, distance=SWIPE_DISTANCE): + + new = self.device.screenshot() + self.ensure_no_info_bar(timeout=3) + + self.device.swipe(vector=(0, -distance), box=STORAGE_AREA.area, random_range=SWIPE_RANDOM_RANGE, + padding=0, duration=(0.1, 0.12), name='STORAGE_SWIPE') + time.sleep(2) + + new, old = self.device.screenshot(), new + diff = ImageChops.difference(new, old) + if diff.getbbox(): + + logger.info('reach the buttom') + return False + + return True + + def run(self): + # self.storageEnter() + + # self._view_swipe(250) + + + # self.destroy() + self.image = self.device.screenshot() + image = np.array(self.image) + logger.info(image.shape) + boxArea = self.detect.detectBoxArea(self.image) + if boxArea: + for grid in boxArea: + # logger.info(grid) + # amount = crop(image, area=np.rint(grid).astype(int)) + # amount = crop(amount, area=self.amount_area) + # amount = self.amount_ocr.ocr(amount, direct_ocr=True) + # logger.info(amount) + self.useBox(grid) + self.device.screenshot() + if INFORM_FULL.match(self.device.screenshot()): + logger.info("the storage is full, goto decomopose equipments") + + def destroy(self): + self.wait_until_appear_then_click(GOTO_EQUIPMENT) + self.wait_until_appear_then_click(SELECT_SORT) + self.wait_until_appear_then_click(CHOOSE_UPGRADE) + + time.sleep(1) + + self.image = self.device.screenshot() + equipArea = self.detect.detectWeaponArea(self.image) + while equipArea: + for area in equipArea: + self.device.click(Button(area, get_color(self.image, area), area)) + self.device.sleep((0.1, 0.15)) + equipArea = self.detect.detectWeaponArea(self.image) + + + def useBox(self, area): + self.device.click(Button(area, get_color(self.image, area), area)) + self.wait_until_appear(INFORM_BOX) + if BOX_COMBINE.match(self.device.screenshot()) > 0.7: + self.device.click(BOX_USE10_2) + else: + self.device.click(BOX_USE10_1) + + def storageEnter(self): + self.device.click(STORAGE_OPEN) + self.wait_until_appear(STORAGE_CHECK) + self.device.click(MATERIAL) diff --git a/module/decomposition/test.py b/module/recycle/test.py similarity index 99% rename from module/decomposition/test.py rename to module/recycle/test.py index 5cdb5278a..62f2d1729 100644 --- a/module/decomposition/test.py +++ b/module/recycle/test.py @@ -343,7 +343,7 @@ class test: if __name__ == "__main__": - t = test(AzurLaneConfig, r"module\decomposition\test3.png") + t = test(AzurLaneConfig, r"module\recycle\test3.png") t.test() diff --git a/module/decomposition/test0.png b/module/recycle/test0.png similarity index 100% rename from module/decomposition/test0.png rename to module/recycle/test0.png diff --git a/module/decomposition/test1.png b/module/recycle/test1.png similarity index 100% rename from module/decomposition/test1.png rename to module/recycle/test1.png diff --git a/module/decomposition/test10.png b/module/recycle/test10.png similarity index 100% rename from module/decomposition/test10.png rename to module/recycle/test10.png diff --git a/module/decomposition/test2.png b/module/recycle/test2.png similarity index 100% rename from module/decomposition/test2.png rename to module/recycle/test2.png diff --git a/module/decomposition/test3.png b/module/recycle/test3.png similarity index 100% rename from module/decomposition/test3.png rename to module/recycle/test3.png diff --git a/module/decomposition/test4.png b/module/recycle/test4.png similarity index 100% rename from module/decomposition/test4.png rename to module/recycle/test4.png diff --git a/module/decomposition/test5.png b/module/recycle/test5.png similarity index 100% rename from module/decomposition/test5.png rename to module/recycle/test5.png diff --git a/module/decomposition/test6.png b/module/recycle/test6.png similarity index 100% rename from module/decomposition/test6.png rename to module/recycle/test6.png diff --git a/module/decomposition/test7.png b/module/recycle/test7.png similarity index 100% rename from module/decomposition/test7.png rename to module/recycle/test7.png diff --git a/module/decomposition/test8.png b/module/recycle/test8.png similarity index 100% rename from module/decomposition/test8.png rename to module/recycle/test8.png diff --git a/module/decomposition/test9.png b/module/recycle/test9.png similarity index 100% rename from module/decomposition/test9.png rename to module/recycle/test9.png diff --git a/module/template/assets.py b/module/template/assets.py index bbef15933..c6576cd03 100644 --- a/module/template/assets.py +++ b/module/template/assets.py @@ -59,4 +59,4 @@ TEMPLATE_SIREN_Z19 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Z TEMPLATE_SIREN_Z2 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Z2.png', 'en': './assets/en/template/TEMPLATE_SIREN_Z2.png', 'jp': './assets/jp/template/TEMPLATE_SIREN_Z2.png'}) TEMPLATE_STAGE_CLEAR = Template(file={'cn': './assets/cn/template/TEMPLATE_STAGE_CLEAR.png', 'en': './assets/en/template/TEMPLATE_STAGE_CLEAR.png', 'jp': './assets/jp/template/TEMPLATE_STAGE_CLEAR.png'}) TEMPLATE_STAGE_PERCENT = Template(file={'cn': './assets/cn/template/TEMPLATE_STAGE_PERCENT.png', 'en': './assets/en/template/TEMPLATE_STAGE_PERCENT.png', 'jp': './assets/jp/template/TEMPLATE_STAGE_PERCENT.png'}) -TEMPLATE_UPGRADE = Template(file={'cn': './assets/cn/template/TEMPLATE_UPGRADE.png', 'en': './assets/cn/template/TEMPLATE_UPGRADE.png', 'jp': './assets/cn/template/TEMPLATE_UPGRADE.png'}) +TEMPLATE_WEAPON_UPGRADE = Template(file={'cn': './assets/cn/template/TEMPLATE_WEAPON_UPGRADE.png', 'en': './assets/cn/template/TEMPLATE_WEAPON_UPGRADE.png', 'jp': './assets/cn/template/TEMPLATE_WEAPON_UPGRADE.png'})