From f5cfb2c215765471c27aa3961a6dc853e7ea6d77 Mon Sep 17 00:00:00 2001 From: 0O0o0oOoO00 <11174151+0O0o0oOoO00@users.noreply.github.com> Date: Sun, 14 Sep 2025 19:25:40 +0800 Subject: [PATCH] add: migrate dashboard update logic --- assets/cn/campaign/my_OCR_COIN_LIMIT.png | Bin 0 -> 6816 bytes module/campaign/campaign_status.py | 62 +++++++++++++++++++++++ module/campaign/my_assets.py | 1 + module/coalition/coalition.py | 7 +++ module/config/config.py | 5 ++ module/gacha/gacha_reward.py | 13 +++++ module/os_handler/action_point.py | 14 +++++ module/os_handler/os_status.py | 12 +++++ module/raid/raid.py | 8 ++- module/shop/shop_status.py | 38 ++++++++++++++ 10 files changed, 159 insertions(+), 1 deletion(-) create mode 100644 assets/cn/campaign/my_OCR_COIN_LIMIT.png diff --git a/assets/cn/campaign/my_OCR_COIN_LIMIT.png b/assets/cn/campaign/my_OCR_COIN_LIMIT.png new file mode 100644 index 0000000000000000000000000000000000000000..7c9e29b7888733932743b49de3b62b848cacb8f0 GIT binary patch literal 6816 zcmeI0`%{xw8pjWyMQpiPToDAJ>$Zvtj<5ufOS~XxMcmmspj?7B+e8eIK!{0z7z!%m z2%+vwQJaLUuwpF)iXh>dfZ!k^2^2_xkP9Fe2_|4jLT+SV+Wlq!g8d~wJ?DMT%z4lG zJm2SX-n)N`i*elUu^j;5c=k-x-vQVP4Q+?EeF7N)MG_By2l{N(iHju02T54%#qY!g z(3{PXMu=!c!G6LmP-HK#FA`IdZ2&O!_#@UXxYni1xD@Ue1qvMfh$HlQ z(6%v4{1gD(tZAjkxu(e8SxMd)=!6;j_@bL;jc5$ZGdC}6gehB)1mg#eMZ`kh)Yi2t z+mweMPe2u%rVpYTC(>b%F+Sx~2BP`N;W&BM zE7$#T%Z8j7n&)Mnb`n#cA+~76*wpZx#UaCsBRo^K7}H1dN>afIOQS-rULSgsuj})s zCaXCieSAT-Rihj!_*OLW@$V<1QlQ?t*r$7joSYq^n{~;2Ug*QQ5A* zmt26Gb10@xoz$3G`p~#oRdypq#8+HO>6t9?rkYj_t2!A~HmOq!;3`A%J?K>yrdQ^v z7Nt@@kf#_(7}$ukaREU73H=9xc6ovwOrC#)_BY;feZ9-x$#YygIb0RP`LldW+d@TN z=AkZTNY>0x@ZMM>W%ZStNTA|bHpc9n!+%vgoYNe7q`1roBW5b}8)l=ZOeZ1Aj%oeG zk53ghGczIwGB}dv%~j%4sb-BZ>q4adU8(stFv0f$TL3t>2H3vDnsLt^#Oar}2N0V1 zpE>SNIPce2XKQ+jo$Gb6|1v^;7YX+N`+QV;ybN+_{I%r58BNP?+g^6YE{mJ=OcPT9 z)r?Azxmz`d{CA$%sMt9pI|@Vd9N&9t*-nF(<#ZTPN-SHlQHsCHrQ~_~m`r z%8AeWwE;&n>w|29nc?K@1P1*8iOpxhd5BXug74@ctjY;OWXwQciuOS8AusRWRa&>RUrM!@HM6MQd2>G|G zXRvtgFtL~UGb}6fq#Tm&bH(D|@fLE`5AJ>;_gBXfQYAr8hy-63KBneegL1q9DbjR% zli%HED?%uSCSD}4WZU`x&~-kb3J~K~na{ezSn#!>Qwn;{+XgyuD|wL<=&L+;D}`fM0NxGBk_Qe2l1^s_?#sH>^&bCRICKh-GLjsPnweXh&re zSzSg}wF>8QQ90AGaH)H!%{uyzLwC;`NO_VbWVO#Eq1S5x}JCSgyN z3biH;_!B8}Z?@ltTd)K->r{|b_WS0F2AihbhdFIKhoq$0(iCh<==IEKdw&e5gH@aO zi|upzXWu++uAC`ZZZ99s!#m<>-_h}hiMElsYl{^lcZj*B)jkdr**xdpg^v(K8f(vN zTREck=0PD=um?Lcd8;8z)q$t%modxJI$TFkDZH^K^zUP*k`SBf=0tCeOQ+wzrCzvO zh@YzcBBZR*0tG<36sc?qtNPRpPYYdGI!H82($tUgvg{1{vB+b}RHo{RP#$fEDlp?+DJPo(0xWUjlz{r!5R+MoZz#W z46KRK3c*?;t$l*ESvvmE+A%_1v=xFC!XNi3s}ihAuqwfNTZS5BD+DWq|HChXi|qIs ai(NhK$3BgJ&KbxB;OyzRsJfF^3jYH#Q+_1? literal 0 HcmV?d00001 diff --git a/module/campaign/campaign_status.py b/module/campaign/campaign_status.py index 45e8179fc..1e6c5207e 100644 --- a/module/campaign/campaign_status.py +++ b/module/campaign/campaign_status.py @@ -149,3 +149,65 @@ class CampaignStatus(UI): return True else: return False + + +from module.campaign.my_assets import * + + +class CampaignStatus(CampaignStatus): + def get_event_pt(self): + result = super().get_event_pt() + self.config.log_res.Pt = result + return result + + 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 + if server.server != 'jp': + ocr = Digit(_button, name=name, letter=(247, 247, 247), threshold=128) + else: + ocr = Digit(_button, name=name, letter=(201, 201, 201), 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_coin(self, skip_first_screenshot=True, update=False): + """ + Returns: + int: Coin amount + """ + amount = 0 + limit = 0 + timeout = Timer(1, count=2).start() + while 1: + if skip_first_screenshot: + skip_first_screenshot = False + else: + self.device.screenshot() + + if timeout.reached(): + logger.warning('Get coin timeout') + break + + amount = self._get_num(OCR_COIN, 'OCR_COIN') + limit = self._get_num(my_OCR_COIN_LIMIT, 'OCR_COIN_LIMIT') + + if amount >= 100: + break + self.config.log_res.Coin = { + 'Value': amount, + 'Limit': limit + } + if update: + self.config.update() + + return amount diff --git a/module/campaign/my_assets.py b/module/campaign/my_assets.py index a613e38d2..55831f1b3 100644 --- a/module/campaign/my_assets.py +++ b/module/campaign/my_assets.py @@ -13,3 +13,4 @@ my_FLEET_ENTER_HARD_1 = Button(area={'cn': (705, 158, 788, 241), 'en': (705, 158 my_FLEET_ENTER_HARD_1_3 = Button(area={'cn': (910, 176, 994, 260), 'en': (910, 176, 994, 260), 'jp': (910, 176, 994, 260), 'tw': (910, 176, 994, 260)}, color={'cn': (47, 59, 73), 'en': (47, 59, 73), 'jp': (47, 59, 73), 'tw': (47, 59, 73)}, button={'cn': (910, 176, 994, 260), 'en': (910, 176, 994, 260), 'jp': (910, 176, 994, 260), 'tw': (910, 176, 994, 260)}, file={'cn': './assets/cn/campaign/my_FLEET_ENTER_HARD_1_3.png', 'en': './assets/cn/campaign/my_FLEET_ENTER_HARD_1_3.png', 'jp': './assets/cn/campaign/my_FLEET_ENTER_HARD_1_3.png', 'tw': './assets/cn/campaign/my_FLEET_ENTER_HARD_1_3.png'}) my_FLEET_ENTER_HARD_2 = Button(area={'cn': (705, 291, 788, 374), 'en': (705, 291, 788, 374), 'jp': (705, 291, 788, 374), 'tw': (705, 291, 788, 374)}, color={'cn': (169, 182, 200), 'en': (169, 182, 200), 'jp': (169, 182, 200), 'tw': (169, 182, 200)}, button={'cn': (705, 291, 788, 374), 'en': (705, 291, 788, 374), 'jp': (705, 291, 788, 374), 'tw': (705, 291, 788, 374)}, file={'cn': './assets/cn/campaign/my_FLEET_ENTER_HARD_2.png', 'en': './assets/cn/campaign/my_FLEET_ENTER_HARD_2.png', 'jp': './assets/cn/campaign/my_FLEET_ENTER_HARD_2.png', 'tw': './assets/cn/campaign/my_FLEET_ENTER_HARD_2.png'}) my_FLEET_ENTER_HARD_2_3 = Button(area={'cn': (910, 288, 996, 374), 'en': (910, 288, 996, 374), 'jp': (910, 288, 996, 374), 'tw': (910, 288, 996, 374)}, color={'cn': (52, 56, 64), 'en': (52, 56, 64), 'jp': (52, 56, 64), 'tw': (52, 56, 64)}, button={'cn': (910, 288, 996, 374), 'en': (910, 288, 996, 374), 'jp': (910, 288, 996, 374), 'tw': (910, 288, 996, 374)}, file={'cn': './assets/cn/campaign/my_FLEET_ENTER_HARD_2_3.png', 'en': './assets/cn/campaign/my_FLEET_ENTER_HARD_2_3.png', 'jp': './assets/cn/campaign/my_FLEET_ENTER_HARD_2_3.png', 'tw': './assets/cn/campaign/my_FLEET_ENTER_HARD_2_3.png'}) +my_OCR_COIN_LIMIT = Button(area={'cn': (807, 0, 944, 19), 'en': (807, 0, 944, 19), 'jp': (807, 0, 944, 19), 'tw': (807, 0, 944, 19)}, color={'cn': (206, 206, 206), 'en': (206, 206, 206), 'jp': (206, 206, 206), 'tw': (206, 206, 206)}, button={'cn': (807, 0, 944, 19), 'en': (807, 0, 944, 19), 'jp': (807, 0, 944, 19), 'tw': (807, 0, 944, 19)}, file={'cn': './assets/cn/campaign/my_OCR_COIN_LIMIT.png', 'en': './assets/cn/campaign/my_OCR_COIN_LIMIT.png', 'jp': './assets/cn/campaign/my_OCR_COIN_LIMIT.png', 'tw': './assets/cn/campaign/my_OCR_COIN_LIMIT.png'}) diff --git a/module/coalition/coalition.py b/module/coalition/coalition.py index cb22befbe..f1684bd55 100644 --- a/module/coalition/coalition.py +++ b/module/coalition/coalition.py @@ -177,3 +177,10 @@ class Coalition(CoalitionCombat, CampaignEvent): # Scheduler if self.config.task_switched(): self.config.task_stop() + + +class Coalition(Coalition): + def get_event_pt(self): + pt = super().get_event_pt() + self.config.log_res.Pt = pt + return pt diff --git a/module/config/config.py b/module/config/config.py index e6e4fc57d..320d2ce45 100644 --- a/module/config/config.py +++ b/module/config/config.py @@ -794,6 +794,7 @@ class MultiSetWrapper: from module.config.full_config import AzurLaneFullConfig from module.scheduler_watcher import AzurLaneSchedulerWatcher +from module.log_res.log_res import LogRes class AzurLaneConfig(AzurLaneConfig): @@ -807,3 +808,7 @@ class AzurLaneConfig(AzurLaneConfig): @property def full_config(self): return AzurLaneFullConfig(self) + + @property + def log_res(self): + return LogRes(self) diff --git a/module/gacha/gacha_reward.py b/module/gacha/gacha_reward.py index 41c1af129..d083d8caf 100644 --- a/module/gacha/gacha_reward.py +++ b/module/gacha/gacha_reward.py @@ -349,3 +349,16 @@ class RewardGacha(GachaUI, Retirement): """ self.gacha_run() self.config.task_delay(server_update=True) + + +class RewardGacha(RewardGacha): + def gacha_calculate(self, *args, **kwargs): + result = super().gacha_calculate(*args, **kwargs) + self.config.log_res.Cube = self.build_cube_count + self.config.update() + return result + + def gacha_goto_pool(self, target_pool): + self.config.log_res.Cube = self.build_cube_count + self.config.update() + return super().gacha_goto_pool(target_pool) \ No newline at end of file diff --git a/module/os_handler/action_point.py b/module/os_handler/action_point.py index d21b96782..c3151cb1a 100644 --- a/module/os_handler/action_point.py +++ b/module/os_handler/action_point.py @@ -531,3 +531,17 @@ class ActionPointHandler(UI, MapEventHandler): self.device.screenshot() return enough + + +class ActionPointHandler(ActionPointHandler): + def action_point_update(self): + ret = super().action_point_update() + + self.config.log_res.Oil = self._action_point_box[0] + self.config.log_res.ActionPoint = { + 'Value': self._action_point_current, + 'Total': self._action_point_total + } + self.config.update() + + return ret diff --git a/module/os_handler/os_status.py b/module/os_handler/os_status.py index d0ad00f3a..ee83de7ad 100644 --- a/module/os_handler/os_status.py +++ b/module/os_handler/os_status.py @@ -94,3 +94,15 @@ class OSStatus(UI): self._shop_yellow_coins = self.get_yellow_coins() self._shop_purple_coins = self.get_purple_coins() logger.info(f'Yellow coins: {self._shop_yellow_coins}, purple coins: {self._shop_purple_coins}') + + +class OSStatus(OSStatus): + def get_yellow_coins(self, *args, **kwargs): + result = super().get_yellow_coins(*args, **kwargs) + self.config.log_res.YellowCoin = result + return result + + def get_purple_coins(self, *args, **kwargs): + result = super().get_purple_coins(*args, **kwargs) + self.config.log_res.PurpleCoin = result + return result diff --git a/module/raid/raid.py b/module/raid/raid.py index a7be35ae7..9e30daa51 100644 --- a/module/raid/raid.py +++ b/module/raid/raid.py @@ -400,4 +400,10 @@ class Raid(Raid): def combat_preparation(self, *args, **kwargs): from module.gg_handler.gg_handler import GGHandler GGHandler(config=self.config, device=self.device).power_limit('Raid') - super().combat_preparation(*args, **kwargs) \ No newline at end of file + super().combat_preparation(*args, **kwargs) + + def get_event_pt(self, *args, **kwargs): + result = super().get_event_pt(*args, **kwargs) + if result != 0: + self.config.log_res.Pt = result + return result \ No newline at end of file diff --git a/module/shop/shop_status.py b/module/shop/shop_status.py index a26d068f0..4d1ae414c 100644 --- a/module/shop/shop_status.py +++ b/module/shop/shop_status.py @@ -105,3 +105,41 @@ class ShopStatus(UI): """ amount = OCR_SHOP_VOUCHER.ocr(self.device.image) return amount + + +class ShopStatus(ShopStatus): + def status_get_gold_coins(self, *args, **kwargs): + result = super().status_get_gold_coins(*args, **kwargs) + self.config.log_res.Coin = result + self.config.update() + return result + + def status_get_gems(self, *args, **kwargs): + result = super().status_get_gems(*args, **kwargs) + self.config.log_res.Gem = result + self.config.update() + return result + + def status_get_medal(self, *args, **kwargs): + result = super().status_get_medal(*args, **kwargs) + self.config.log_res.Medal = result + self.config.update() + return result + + def status_get_merit(self, *args, **kwargs): + result = super().status_get_merit(*args, **kwargs) + self.config.log_res.Merit = result + self.config.update() + return result + + def status_get_guild_coins(self, *args, **kwargs): + result = super().status_get_guild_coins(*args, **kwargs) + self.config.log_res.GuildCoin = result + self.config.update() + return result + + def status_get_core(self, *args, **kwargs): + result = super().status_get_core(*args, **kwargs) + self.config.log_res.Core = result + self.config.update() + return result