From 327225e74d167ea702e27c2d373b80ea8ae2a64f Mon Sep 17 00:00:00 2001 From: LA_DI_DA <11174151+0O0o0oOoO00@users.noreply.github.com> Date: Fri, 19 Jul 2024 20:03:10 +0800 Subject: [PATCH] Add: show player info in dashboard commits: Adj: rename update player info function Fix: use play exp record to check time Add: show exp and level of player in dashboard --- assets/cn/ui/MAIN_GOTO_PLAYER.BUTTON.png | Bin 0 -> 7860 bytes assets/cn/ui/MAIN_GOTO_PLAYER.png | Bin 0 -> 2917 bytes assets/cn/ui/OCR_PLAYER_EXP.png | Bin 0 -> 6423 bytes assets/cn/ui/OCR_PLAYER_LEVEL.png | Bin 0 -> 5455 bytes .../MAIN_GOTO_PLAYER_WHITE.BUTTON.png | Bin 0 -> 9850 bytes assets/cn/ui_white/MAIN_GOTO_PLAYER_WHITE.png | Bin 0 -> 2835 bytes config/template.json | 11 +++++ module/config/argument/args.json | 36 ++++++++++++++ module/config/argument/argument.yaml | 15 +++++- module/config/argument/dashboard.yaml | 4 +- module/config/argument/gui.yaml | 2 + module/config/argument/override.yaml | 4 ++ module/config/config_generated.py | 11 +++++ module/config/i18n/en-US.json | 42 ++++++++++++++++ module/config/i18n/ja-JP.json | 42 ++++++++++++++++ module/config/i18n/zh-CN.json | 42 ++++++++++++++++ module/config/i18n/zh-TW.json | 42 ++++++++++++++++ module/ui/assets.py | 3 ++ module/ui/page.py | 5 ++ module/ui/ui.py | 45 +++++++++++++++++- module/ui_white/assets.py | 1 + 21 files changed, 300 insertions(+), 5 deletions(-) create mode 100644 assets/cn/ui/MAIN_GOTO_PLAYER.BUTTON.png create mode 100644 assets/cn/ui/MAIN_GOTO_PLAYER.png create mode 100644 assets/cn/ui/OCR_PLAYER_EXP.png create mode 100644 assets/cn/ui/OCR_PLAYER_LEVEL.png create mode 100644 assets/cn/ui_white/MAIN_GOTO_PLAYER_WHITE.BUTTON.png create mode 100644 assets/cn/ui_white/MAIN_GOTO_PLAYER_WHITE.png diff --git a/assets/cn/ui/MAIN_GOTO_PLAYER.BUTTON.png b/assets/cn/ui/MAIN_GOTO_PLAYER.BUTTON.png new file mode 100644 index 0000000000000000000000000000000000000000..9fea5fc653bcfc13c5917ccb78f575a10fedd044 GIT binary patch literal 7860 zcmeHL`Bzhiwx+kYa&M{fQb80DY`86xCQm>x5J_7TVi80pQ8C1#GFV9<0YVs(_VO$d z1eyX;A%tEKBA_5;9ulNX3WONKAS8fHfrLO9lMs^dj&H5I*82nATJIOnT4$Z}%h_k2 z@7w$P_C60TUqT=J)bvw5J-vh9T|oNj>3ss+{^iZz{sLUSw)Ff6xcoi(!Zo6vp26Yw z=SO-4jH7yb7Gd8ZzX?cStWHrMnlF(p*VAN|Q~Iub<#?o~$s2WzrEayOFxh2htYTWNvkGD%M@T z=k-@0&;O_6#jW^NS+rrw+6w4&vYNipyYc$AX2)?}w73ig6L3pVKad&Axg270Uq5tEMJ&Ilb?E3xO{#?I~86KuhE9gwI=P&A>>*piXNgzH0gWY3U zCKD0HdU`)LgwpNQJN`fcEDs+4Mwau_fB*~mn-9!d7)vRqh0eD5HOw8&ff2oDANw$H3L*$iI z$lT_DecU_OvVbR5`1qO!oSDf+jb?HyBZ^uR(%}u__o%IlMa-Xo!f38#KOXJHzl3WW z!#(EtHek$gPFwqxUB3m$k~#lkWNjABh(2?9ECsWAg${#+i&ujNql|=~C)67MN(8lV zM>*;RJiKL-Uph}@oj-5@h{#`!{-k-r915fZCS&1K4AM5F@H@*-UzdH;? z+W9~Et-%(9DP|B0iQQ%9bnp`GLd8SyB7Dkqet0Fz1Vp#$kP2dLdzi2CH%E;}YP46z z8!;i1P0zc=6u;a+#`48qwZh$N`TH+73pM`&uxsbaqV=+9%U}|H>&&gCi?CK_QlJrR zsWF{VNu!1Rkh4Da?P4dHr0lW!V6`n!p?hL_V(0innbnIs#h?8xv;; z>Mv(=qW^H;W+LQ<01oe>ZZ5TbjUE?YW8yoxEtzoaetTZj(!r--aQX;#89lV?H?%dV zY1J~Yqr1D;VT4#ZczCgA7)Ho42MNNi2aZ<0^ zv317f&7#O_Aa^s5Sk3MdMa7j2VX`8G`GxplF9QGov##J;{j-Gea&qA!jTX^H?yHE5 zrMEHKUfF^}&mKECEyQm+8T0QAjbB*$fw`Ep`l4po1Nj)dL|$eS>g#R<#TiNNno>uP z%s~iQ@QjUTnE_#++ynye8_Ht!m{1sQYs^&qe1W{!f~FIL0~a-4ytH5>?nHL7Fh1WTfYdVeX>ZJ#FVM{5oNz&I$yy%BmQeNgBYJu- z56VwH)k7~ZN(TU1!2RHYYr-SG@{6{pwF1|`3L5|3u;oZ@#pnDSSDQSj(ud+Pr;Od2`=(UK<{5>-b?#9 zdX2!z6+*CetVY@&05NZK%Dpco`5VP-4!$l`T7FmYOg)-Fbd4f7KK4Kktv2|;Tg|ah z=u?g+47m_dbB!bN$fZ}qmKx&bcf(;WT&LBl0osQ6AG~Wp(l+pDRnOMoW5J5axM@pmF}w2F9x^6s*u zH_EFZ<{I)w`bJ9(<`mPENqN^N$ApB0!0I(GwT2HNS<=dahkY=Ys3D*giIev(6>?*S zV5FAEURbkHe@|%p+4PcRcH4zJ-3h}B)!e#BTsc?lYQQsqzIyjMVUD>_qi{WXJV1}fbuHInQAIuYr3oCzxmhqcm- z0&Bb~yll%t5;YUy{oq~`k1FL*+ zrio9-5O@tjz!gGR0apTx67LiQJ;)$CWb<2Q6W}4*+R;i+^!^w>#swE{aUXEu=v3jx zr_osupK!rOf&&+TH9dl`2Ho}t&4-zSl$7NQfurNeRkXX8p=^BQ{9Ht?wJkU{dWV|R(6FnoBn_&d~t##t4wmzg&PZJF5nVX>z(72n4R-gf@>D|OJI!PYgf{0 z?AYK;KWLX=_8wM_({=acXnSjP5}*n;p$TCs*Qw{NXSJH%pOg^qwi|&v?I+AJ3vcuR z4S9D!c|`Wn8aVwZ=4e?65@d}wvrh|>hMaLlxa(wUdYVPMSTkVon|_l*pY&O8q2O)Z zPFVT{6vN%kT;%%n$Q~?|Sz|rr#5zlnE~wW>+Fuod%c{LFf>kT@77x8lm3o=#fSP%xTP&~aCM4WED?D#`DrmkxXp!Q{)_|(M5jPzW;epqiQUwY2IYc@K1;HGwW zr(>%r`yft2EybTx-9m#GJLgW2qOzRRolBw=PTG_Vp--@A980C7#C{*Uz_H@?NE)pV zpwk^t*I2H`i^H2I6z$T+(D^?jBxYi|TxmfkF?RYkP(~ z=`{Zx;<<$@eA*nHZcg5*?jpyNYhz6KJqw};l}5rh!Jgfby%z9_D*a6}J#58MRsHj< zO9!XjehZ1%yl09++F9lKdQ2aV0@;(EFF;(T>R$`KYJxSL#{LDfP=3r1cN~cvf|YPF zZkdYv#8SbM&vWgXBij9iE6k-|Xo`JK`C9M&#L&rZOxxUVfHYz1>okMCYHN3Ow9#qz znTH-`eHN~!7;|d;b1pfK3`0B3zh3?`0dBFx@JFtN#>|}HmG}9;bF6%bxUl)o%@e%M z*Rvi1uRe@BA>z)eq+xU~+e;W}bULaarz=NL9tq|(={MEAH;jbsAWN8Tds5x2)|9JJ zMMngki(UMxE06O1P3Xec7v}}xKgR_IvbVVu5C9vV+7=(*45jLB8-Y;j$3E_x5^PEW znM{tw#cEU)y5AF*`z#nPMc0!OwVlOo1%BxaBE5u`>o>EMUO_@Eu8*f6%CEP~ua3b$=VNFO!}_XX(26(#CI| z3)ovrdQgm8A)E_I4oY;yBsFT!}1 zi**!zl3@iV!N3I&aHzI}>AI`Wa^I`5q^daj@$nV_WzEyF*iV{&utKFjRgU%*hwQ!W zLjZ-)5IzoW`~#OmY-nzdy|~|LiMYO6WwAGMt8YyLJ$M9N+OD|2L;mJ0m@w2*I8^*J zKrwtXa=kpgo_kv(@o{%fjyZ}N^jDrh8QJ>v`+9W0%PPxs?Bcih<^iMma=4CPv-)rK zHYm7>LUv34waB{ktSsbl7&mzdcf2;4C+$3MU!{C@Wpr*hDz%TgRjYp}FjY4f;dBi5 zurkE1Cb^@sG(!N*wA4+cjr%;SNm<)SO$!R0F`FtcOx(FS6Dlp}3_Wwz!U@W&>HvXk zd(1LTDw@%*srqG_{JtG7d(9qe zUt*6-FR{s>g^~taLucDKOO}WYXgcV@0$${4Yiw&AnJiw| zJQdebDXqjpw@Yavlw$^?v;%*6yh2py=d~5fXrqD4LOk)RNOr0m8{*|VUQu0TQ$mIn zm{(kiD^eRozNzW$`hE!3nxL71bDWMo6E)V?{f|HFgr((wZMpXjJy#wen?8)$*3B_z zi<#$|H9GCgnFL7&tC%b%1-WbJ_frgN-9ky9;SlTRW|E$&CdJ?8rN0d zd-{7-m9ibhBl*+98r1&YbjSW9?S`jrEPv+Lxs|C-`HB(;A-Y_|u0k{tCqmPU%RzEk z8EJ$~$~7S*uGeTsH;Qk_sNwtDb^E((R?6z4t1}Z707~y#|LFQiCD+QV=4U6)&G7Bx z-PlFEX95 zvlry!4zx^0lfrU$5#1jKC*!K#6c8)yyT2*Nway}|@u<_qrSSt2n8`Wuc zc`4$zPz&MPqyKA57Y&xDDi3a+%pT(W2j(-JC0tR#b1D?jo=&?ZsDdm~q>=`)D1x#% zxiPQRg%0`d>}e_cZ_lIsj{ydI@_0yv68L5EXn-9k4NMgtz;8k}Bb?y7vg=f8USe$` z?`}hr=N;D5s0%FR zn)ebX`3ow01*%|i#mm{eX+QxyK$4=Q8FmMCLpE_=9%6^H`zj|xP?Lq*A0QoRE39u5 zQu}mDON*2Hc^_j=+b6Q$7WwS+e0QVdA+E8cSPW9xi@!B1zCW}7X9sroO;L|qys?XM zs!+k%*H=LI-yD~egK>7wy7j?qb1kyA?W}U{*Ty0+=9h52lY z8G9xY&ZIVNCQ-qn?h1OmH^N*2T{dztrj89B;ShcJ4I7>#1_lON z3bH%t5Hlr4WSoS@hGZfhkI1i|RGc!u+R{d=Uis_I_vSWnN&XSU4_QrJc=>MZ8*0qy z)^>$#vbNY&G2wHLB5lbzjg1stee07VTd3;_b1eDI(l*_w0{0bp)qrK8 zR)zaPQA+W!Tr{ko^-Mb?v5~$t@m*vPPI@pOj``esCffP>p0hWzyr*?Kn3d~S86R&7 z00LNA^d~AsTNYQR@=|&#c{;&-wnhbAEQck1PY{`Zs0ZfbpvvkssWRfC>IqfM&r(1uwC_Dl$I{>;95gcyxse(s%4WCvleR6xC><^ z+=Im&#AML~#mUm`34XLQT)|JX*v-S5F;iw8J9Ka9hQ}X-3Q4WB38!=#q=ZIu@SC*z zo1C_``K8#mmG)G6;j~Z3of>z|h6#9X3(?f|Z$t1CKXM4&wblh92OZZtvk|JK;^e!l zDs_SgzO!qc)+O*s`JNqFZYZMuV@FD(F>X0bOYvv+gPnYlCl#el#G=R6^S>?9-lk7@ z`&))gF)3T!w|)WA|8RUj-~$355cq(=2LwJK@Bx7j2>c%+ptDpXQZ8bj{P0i2SMS4q Nhq{EU{`TfS{~It0Ch-6O literal 0 HcmV?d00001 diff --git a/assets/cn/ui/MAIN_GOTO_PLAYER.png b/assets/cn/ui/MAIN_GOTO_PLAYER.png new file mode 100644 index 0000000000000000000000000000000000000000..150d9f3a2f57cbd5c11fbca4c2640084f6de2cda GIT binary patch literal 2917 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 bO$t4s*`M$~X8t8Rt2loK;aCZ~^2h%IF5uj< literal 0 HcmV?d00001 diff --git a/assets/cn/ui/OCR_PLAYER_LEVEL.png b/assets/cn/ui/OCR_PLAYER_LEVEL.png new file mode 100644 index 0000000000000000000000000000000000000000..8b2b253ef9c622bba5e27697ee3d397c9033735a GIT binary patch literal 5455 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 literal 0 HcmV?d00001 diff --git a/config/template.json b/config/template.json index 103f5575c..443075854 100644 --- a/config/template.json +++ b/config/template.json @@ -2638,6 +2638,17 @@ "Color": "^00AA00", "Record": "2020-01-01 00:00:00" }, + "PlayerLevel": { + "Value": 0, + "Color": "^FFAA33", + "Record": "2020-01-01 00:00:00" + }, + "PlayerExp": { + "Value": 0, + "Limit": 0, + "Color": "^FFAA33", + "Record": "2020-01-01 00:00:00" + }, "Storage": { "Storage": {} } diff --git a/module/config/argument/args.json b/module/config/argument/args.json index 332ac6bc9..aaea17552 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -13127,6 +13127,42 @@ "validate": "datetime" } }, + "PlayerLevel": { + "Value": { + "type": "input", + "value": 0 + }, + "Color": { + "type": "input", + "value": "^FFAA33", + "display": "hide" + }, + "Record": { + "type": "datetime", + "value": "2020-01-01 00:00:00", + "validate": "datetime" + } + }, + "PlayerExp": { + "Value": { + "type": "input", + "value": 0 + }, + "Limit": { + "type": "input", + "value": 0 + }, + "Color": { + "type": "input", + "value": "^FFAA33", + "display": "hide" + }, + "Record": { + "type": "datetime", + "value": "2020-01-01 00:00:00", + "validate": "datetime" + } + }, "Storage": { "Storage": { "type": "storage", diff --git a/module/config/argument/argument.yaml b/module/config/argument/argument.yaml index 916910e82..3d6e5ce0a 100644 --- a/module/config/argument/argument.yaml +++ b/module/config/argument/argument.yaml @@ -1069,8 +1069,19 @@ ResearchPercent: value: ^000000 display: hide Record: 2020-01-01 00:00:00 - - +PlayerLevel: + Value: 0 + Color: + value: ^000000 + display: hide + Record: 2020-01-01 00:00:00 +PlayerExp: + Value: 0 + Limit: 0 + Color: + value: ^000000 + display: hide + Record: 2020-01-01 00:00:00 # ==================== AutoRestart ==================== AutoRestart: diff --git a/module/config/argument/dashboard.yaml b/module/config/argument/dashboard.yaml index 65b62eaf8..0ea6f54fb 100644 --- a/module/config/argument/dashboard.yaml +++ b/module/config/argument/dashboard.yaml @@ -16,4 +16,6 @@ Dashboard: - Medal - Merit - GuildCoin - - ResearchPercent \ No newline at end of file + - ResearchPercent + - PlayerLevel + - PlayerExp \ No newline at end of file diff --git a/module/config/argument/gui.yaml b/module/config/argument/gui.yaml index e4c8fb0e9..894a3d616 100644 --- a/module/config/argument/gui.yaml +++ b/module/config/argument/gui.yaml @@ -72,6 +72,8 @@ Overview: Core: GuildCoin: ResearchPercent: + PlayerLevel: + PlayerExp: Log: Running: Pending: diff --git a/module/config/argument/override.yaml b/module/config/argument/override.yaml index 02f17dda7..6be3cfa5a 100644 --- a/module/config/argument/override.yaml +++ b/module/config/argument/override.yaml @@ -501,3 +501,7 @@ Dashboard: Color: ^AAAAAA ResearchPercent: Color: ^00AA00 + PlayerLevel: + Color: ^FFAA33 + PlayerExp: + Color: ^FFAA33 diff --git a/module/config/config_generated.py b/module/config/config_generated.py index 0f622f8a3..b4e559eb0 100644 --- a/module/config/config_generated.py +++ b/module/config/config_generated.py @@ -644,6 +644,17 @@ class GeneratedConfig: ResearchPercent_Color = '^000000' ResearchPercent_Record = datetime.datetime(2020, 1, 1, 0, 0) + # Group `PlayerLevel` + PlayerLevel_Value = 0 + PlayerLevel_Color = '^000000' + PlayerLevel_Record = datetime.datetime(2020, 1, 1, 0, 0) + + # Group `PlayerExp` + PlayerExp_Value = 0 + PlayerExp_Limit = 0 + PlayerExp_Color = '^000000' + PlayerExp_Record = datetime.datetime(2020, 1, 1, 0, 0) + # Group `AutoRestart` AutoRestart_Enabled = False AutoRestart_AttemptsToRestart = 114514 diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index d5ca5c6b0..121229bae 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -3567,6 +3567,46 @@ "help": "ResearchPercent.Record.help" } }, + "PlayerLevel": { + "_info": { + "name": "PlayerLevel._info.name", + "help": "PlayerLevel._info.help" + }, + "Value": { + "name": "PlayerLevel.Value.name", + "help": "PlayerLevel.Value.help" + }, + "Color": { + "name": "PlayerLevel.Color.name", + "help": "PlayerLevel.Color.help" + }, + "Record": { + "name": "PlayerLevel.Record.name", + "help": "PlayerLevel.Record.help" + } + }, + "PlayerExp": { + "_info": { + "name": "PlayerExp._info.name", + "help": "PlayerExp._info.help" + }, + "Value": { + "name": "PlayerExp.Value.name", + "help": "PlayerExp.Value.help" + }, + "Limit": { + "name": "PlayerExp.Limit.name", + "help": "PlayerExp.Limit.help" + }, + "Color": { + "name": "PlayerExp.Color.name", + "help": "PlayerExp.Color.help" + }, + "Record": { + "name": "PlayerExp.Record.name", + "help": "PlayerExp.Record.help" + } + }, "AutoRestart": { "_info": { "name": "AutoRestart._info.name", @@ -3689,6 +3729,8 @@ "Core": "Core Data", "GuildCoin": "Guild Coin", "ResearchPercent": "Gui.Overview.ResearchPercent", + "PlayerLevel": "Gui.Overview.PlayerLevel", + "PlayerExp": "Gui.Overview.PlayerExp", "Log": "Log", "Running": "Running", "Pending": "Pending", diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index dde90e76e..e61fc22ee 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -3567,6 +3567,46 @@ "help": "ResearchPercent.Record.help" } }, + "PlayerLevel": { + "_info": { + "name": "PlayerLevel._info.name", + "help": "PlayerLevel._info.help" + }, + "Value": { + "name": "PlayerLevel.Value.name", + "help": "PlayerLevel.Value.help" + }, + "Color": { + "name": "PlayerLevel.Color.name", + "help": "PlayerLevel.Color.help" + }, + "Record": { + "name": "PlayerLevel.Record.name", + "help": "PlayerLevel.Record.help" + } + }, + "PlayerExp": { + "_info": { + "name": "PlayerExp._info.name", + "help": "PlayerExp._info.help" + }, + "Value": { + "name": "PlayerExp.Value.name", + "help": "PlayerExp.Value.help" + }, + "Limit": { + "name": "PlayerExp.Limit.name", + "help": "PlayerExp.Limit.help" + }, + "Color": { + "name": "PlayerExp.Color.name", + "help": "PlayerExp.Color.help" + }, + "Record": { + "name": "PlayerExp.Record.name", + "help": "PlayerExp.Record.help" + } + }, "AutoRestart": { "_info": { "name": "AutoRestart._info.name", @@ -3689,6 +3729,8 @@ "Core": "Core Data", "GuildCoin": "Guild Coin", "ResearchPercent": "Gui.Overview.ResearchPercent", + "PlayerLevel": "Gui.Overview.PlayerLevel", + "PlayerExp": "Gui.Overview.PlayerExp", "Log": "ログ", "Running": "実行中", "Pending": "隊列中", diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index 0ed33f256..c1834ef1c 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -3567,6 +3567,46 @@ "help": "ResearchPercent.Record.help" } }, + "PlayerLevel": { + "_info": { + "name": "PlayerLevel._info.name", + "help": "PlayerLevel._info.help" + }, + "Value": { + "name": "PlayerLevel.Value.name", + "help": "PlayerLevel.Value.help" + }, + "Color": { + "name": "PlayerLevel.Color.name", + "help": "PlayerLevel.Color.help" + }, + "Record": { + "name": "PlayerLevel.Record.name", + "help": "PlayerLevel.Record.help" + } + }, + "PlayerExp": { + "_info": { + "name": "PlayerExp._info.name", + "help": "PlayerExp._info.help" + }, + "Value": { + "name": "PlayerExp.Value.name", + "help": "PlayerExp.Value.help" + }, + "Limit": { + "name": "PlayerExp.Limit.name", + "help": "PlayerExp.Limit.help" + }, + "Color": { + "name": "PlayerExp.Color.name", + "help": "PlayerExp.Color.help" + }, + "Record": { + "name": "PlayerExp.Record.name", + "help": "PlayerExp.Record.help" + } + }, "AutoRestart": { "_info": { "name": "自动重启", @@ -3689,6 +3729,8 @@ "Core": "核心数据", "GuildCoin": "舰队币", "ResearchPercent": "科研船进度", + "PlayerLevel": "指挥官等级", + "PlayerExp": "指挥官经验", "Log": "日志", "Running": "运行中", "Pending": "队列中", diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index 8fac771b5..09f86a268 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -3567,6 +3567,46 @@ "help": "ResearchPercent.Record.help" } }, + "PlayerLevel": { + "_info": { + "name": "PlayerLevel._info.name", + "help": "PlayerLevel._info.help" + }, + "Value": { + "name": "PlayerLevel.Value.name", + "help": "PlayerLevel.Value.help" + }, + "Color": { + "name": "PlayerLevel.Color.name", + "help": "PlayerLevel.Color.help" + }, + "Record": { + "name": "PlayerLevel.Record.name", + "help": "PlayerLevel.Record.help" + } + }, + "PlayerExp": { + "_info": { + "name": "PlayerExp._info.name", + "help": "PlayerExp._info.help" + }, + "Value": { + "name": "PlayerExp.Value.name", + "help": "PlayerExp.Value.help" + }, + "Limit": { + "name": "PlayerExp.Limit.name", + "help": "PlayerExp.Limit.help" + }, + "Color": { + "name": "PlayerExp.Color.name", + "help": "PlayerExp.Color.help" + }, + "Record": { + "name": "PlayerExp.Record.name", + "help": "PlayerExp.Record.help" + } + }, "AutoRestart": { "_info": { "name": "AutoRestart._info.name", @@ -3689,6 +3729,8 @@ "Core": "覈心數據", "GuildCoin": "艦隊幣", "ResearchPercent": "Gui.Overview.ResearchPercent", + "PlayerLevel": "Gui.Overview.PlayerLevel", + "PlayerExp": "Gui.Overview.PlayerExp", "Log": "日誌", "Running": "執行中", "Pending": "佇列中", diff --git a/module/ui/assets.py b/module/ui/assets.py index 5b02726e0..6f244ee79 100644 --- a/module/ui/assets.py +++ b/module/ui/assets.py @@ -52,6 +52,7 @@ MAIN_GOTO_EVENT_LIST = Button(area={'cn': (607, 141, 657, 191), 'en': (607, 141, MAIN_GOTO_FLEET = Button(area={'cn': (859, 372, 936, 410), 'en': (832, 378, 975, 404), 'jp': (736, 360, 985, 435), 'tw': (855, 371, 936, 411)}, color={'cn': (187, 216, 248), 'en': (183, 215, 247), 'jp': (107, 164, 233), 'tw': (180, 212, 248)}, button={'cn': (749, 364, 992, 430), 'en': (777, 365, 987, 423), 'jp': (736, 360, 985, 435), 'tw': (741, 364, 990, 435)}, file={'cn': './assets/cn/ui/MAIN_GOTO_FLEET.png', 'en': './assets/en/ui/MAIN_GOTO_FLEET.png', 'jp': './assets/jp/ui/MAIN_GOTO_FLEET.png', 'tw': './assets/tw/ui/MAIN_GOTO_FLEET.png'}) MAIN_GOTO_GUILD = Button(area={'cn': (1116, 666, 1241, 713), 'en': (1119, 667, 1267, 711), 'jp': (1127, 671, 1253, 709), 'tw': (1119, 667, 1267, 711)}, color={'cn': (81, 99, 133), 'en': (72, 89, 123), 'jp': (104, 128, 167), 'tw': (72, 89, 123)}, button={'cn': (1116, 666, 1241, 713), 'en': (1119, 667, 1267, 711), 'jp': (1127, 671, 1253, 709), 'tw': (1119, 667, 1267, 711)}, file={'cn': './assets/cn/ui/MAIN_GOTO_GUILD.png', 'en': './assets/en/ui/MAIN_GOTO_GUILD.png', 'jp': './assets/jp/ui/MAIN_GOTO_GUILD.png', 'tw': './assets/tw/ui/MAIN_GOTO_GUILD.png'}) MAIN_GOTO_MISSION = Button(area={'cn': (816, 666, 932, 713), 'en': (818, 667, 953, 712), 'jp': (805, 665, 955, 710), 'tw': (816, 666, 932, 713)}, color={'cn': (93, 110, 140), 'en': (91, 112, 150), 'jp': (85, 99, 131), 'tw': (93, 110, 140)}, button={'cn': (816, 666, 932, 713), 'en': (818, 667, 953, 712), 'jp': (805, 665, 955, 710), 'tw': (816, 666, 932, 713)}, file={'cn': './assets/cn/ui/MAIN_GOTO_MISSION.png', 'en': './assets/en/ui/MAIN_GOTO_MISSION.png', 'jp': './assets/jp/ui/MAIN_GOTO_MISSION.png', 'tw': './assets/tw/ui/MAIN_GOTO_MISSION.png'}) +MAIN_GOTO_PLAYER = Button(area={'cn': (23, 31, 28, 37), 'en': (23, 31, 28, 37), 'jp': (23, 31, 28, 37), 'tw': (23, 31, 28, 37)}, color={'cn': (56, 85, 130), 'en': (56, 85, 130), 'jp': (56, 85, 130), 'tw': (56, 85, 130)}, button={'cn': (26, 33, 88, 76), 'en': (26, 33, 88, 76), 'jp': (26, 33, 88, 76), 'tw': (26, 33, 88, 76)}, file={'cn': './assets/cn/ui/MAIN_GOTO_PLAYER.png', 'en': './assets/cn/ui/MAIN_GOTO_PLAYER.png', 'jp': './assets/cn/ui/MAIN_GOTO_PLAYER.png', 'tw': './assets/cn/ui/MAIN_GOTO_PLAYER.png'}) MAIN_GOTO_RAID = Button(area={'cn': (1029, 304, 1102, 342), 'en': (1027, 307, 1118, 333), 'jp': (1006, 288, 1155, 436), 'tw': (1026, 303, 1104, 344)}, color={'cn': (240, 213, 157), 'en': (243, 219, 165), 'jp': (216, 171, 100), 'tw': (240, 213, 162)}, button={'cn': (610, 264, 654, 305), 'en': (610, 264, 654, 305), 'jp': (606, 264, 653, 305), 'tw': (610, 264, 654, 305)}, file={'cn': './assets/cn/ui/MAIN_GOTO_RAID.png', 'en': './assets/en/ui/MAIN_GOTO_RAID.png', 'jp': './assets/jp/ui/MAIN_GOTO_RAID.png', 'tw': './assets/tw/ui/MAIN_GOTO_RAID.png'}) MAIN_GOTO_RESHMENU = Button(area={'cn': (1029, 304, 1102, 342), 'en': (1027, 307, 1118, 333), 'jp': (1006, 288, 1155, 436), 'tw': (1026, 303, 1104, 344)}, color={'cn': (240, 213, 157), 'en': (243, 219, 165), 'jp': (216, 171, 100), 'tw': (240, 213, 162)}, button={'cn': (644, 666, 798, 713), 'en': (645, 665, 796, 713), 'jp': (647, 670, 774, 710), 'tw': (644, 666, 798, 713)}, file={'cn': './assets/cn/ui/MAIN_GOTO_RESHMENU.png', 'en': './assets/en/ui/MAIN_GOTO_RESHMENU.png', 'jp': './assets/jp/ui/MAIN_GOTO_RESHMENU.png', 'tw': './assets/tw/ui/MAIN_GOTO_RESHMENU.png'}) MAIN_GOTO_REWARD = Button(area={'cn': (11, 139, 30, 189), 'en': (11, 139, 30, 189), 'jp': (11, 139, 30, 189), 'tw': (11, 139, 30, 189)}, color={'cn': (69, 81, 115), 'en': (69, 81, 115), 'jp': (69, 81, 115), 'tw': (69, 81, 115)}, button={'cn': (11, 139, 30, 189), 'en': (11, 139, 30, 189), 'jp': (11, 139, 30, 189), 'tw': (11, 139, 30, 189)}, file={'cn': './assets/cn/ui/MAIN_GOTO_REWARD.png', 'en': './assets/en/ui/MAIN_GOTO_REWARD.png', 'jp': './assets/jp/ui/MAIN_GOTO_REWARD.png', 'tw': './assets/tw/ui/MAIN_GOTO_REWARD.png'}) @@ -63,6 +64,8 @@ MEOWFFICER_INFO = Button(area={'cn': (1090, 603, 1241, 650), 'en': (1106, 616, 1 META_CHECK = Button(area={'cn': (120, 14, 209, 35), 'en': (148, 13, 265, 36), 'jp': (125, 11, 235, 39), 'tw': (120, 14, 209, 35)}, color={'cn': (159, 143, 144), 'en': (170, 156, 156), 'jp': (124, 105, 106), 'tw': (159, 143, 144)}, button={'cn': (120, 14, 209, 35), 'en': (148, 13, 265, 36), 'jp': (125, 11, 235, 39), 'tw': (120, 14, 209, 35)}, file={'cn': './assets/cn/ui/META_CHECK.png', 'en': './assets/en/ui/META_CHECK.png', 'jp': './assets/jp/ui/META_CHECK.png', 'tw': './assets/tw/ui/META_CHECK.png'}) MISSION_CHECK = Button(area={'cn': (120, 15, 173, 40), 'en': (123, 18, 221, 37), 'jp': (120, 14, 173, 40), 'tw': (119, 12, 176, 42)}, color={'cn': (141, 156, 194), 'en': (104, 117, 158), 'jp': (150, 165, 202), 'tw': (125, 139, 178)}, button={'cn': (120, 15, 173, 40), 'en': (123, 18, 221, 37), 'jp': (120, 14, 173, 40), 'tw': (119, 12, 176, 42)}, file={'cn': './assets/cn/ui/MISSION_CHECK.png', 'en': './assets/en/ui/MISSION_CHECK.png', 'jp': './assets/jp/ui/MISSION_CHECK.png', 'tw': './assets/tw/ui/MISSION_CHECK.png'}) MUNITIONS_CHECK = Button(area={'cn': (32, 621, 86, 647), 'en': (25, 622, 85, 644), 'jp': (23, 625, 80, 645), 'tw': (31, 619, 88, 649)}, color={'cn': (151, 147, 147), 'en': (174, 171, 171), 'jp': (99, 91, 91), 'tw': (127, 121, 121)}, button={'cn': (32, 621, 86, 647), 'en': (25, 622, 85, 644), 'jp': (23, 625, 80, 645), 'tw': (31, 619, 88, 649)}, file={'cn': './assets/cn/ui/MUNITIONS_CHECK.png', 'en': './assets/en/ui/MUNITIONS_CHECK.png', 'jp': './assets/jp/ui/MUNITIONS_CHECK.png', 'tw': './assets/tw/ui/MUNITIONS_CHECK.png'}) +OCR_PLAYER_EXP = Button(area={'cn': (1075, 162, 1266, 184), 'en': (1075, 162, 1266, 184), 'jp': (1075, 162, 1266, 184), 'tw': (1075, 162, 1266, 184)}, color={'cn': (110, 106, 124), 'en': (110, 106, 124), 'jp': (110, 106, 124), 'tw': (110, 106, 124)}, button={'cn': (1075, 162, 1266, 184), 'en': (1075, 162, 1266, 184), 'jp': (1075, 162, 1266, 184), 'tw': (1075, 162, 1266, 184)}, file={'cn': './assets/cn/ui/OCR_PLAYER_EXP.png', 'en': './assets/cn/ui/OCR_PLAYER_EXP.png', 'jp': './assets/cn/ui/OCR_PLAYER_EXP.png', 'tw': './assets/cn/ui/OCR_PLAYER_EXP.png'}) +OCR_PLAYER_LEVEL = Button(area={'cn': (1158, 125, 1269, 156), 'en': (1158, 125, 1269, 156), 'jp': (1158, 125, 1269, 156), 'tw': (1158, 125, 1269, 156)}, color={'cn': (108, 105, 125), 'en': (108, 105, 125), 'jp': (108, 105, 125), 'tw': (108, 105, 125)}, button={'cn': (1158, 125, 1269, 156), 'en': (1158, 125, 1269, 156), 'jp': (1158, 125, 1269, 156), 'tw': (1158, 125, 1269, 156)}, file={'cn': './assets/cn/ui/OCR_PLAYER_LEVEL.png', 'en': './assets/cn/ui/OCR_PLAYER_LEVEL.png', 'jp': './assets/cn/ui/OCR_PLAYER_LEVEL.png', 'tw': './assets/cn/ui/OCR_PLAYER_LEVEL.png'}) OS_CHECK = Button(area={'cn': (613, 17, 627, 34), 'en': (613, 17, 627, 34), 'jp': (613, 17, 627, 34), 'tw': (613, 17, 627, 34)}, color={'cn': (58, 117, 146), 'en': (58, 117, 146), 'jp': (58, 117, 146), 'tw': (58, 117, 146)}, button={'cn': (613, 17, 627, 34), 'en': (613, 17, 627, 34), 'jp': (613, 17, 627, 34), 'tw': (613, 17, 627, 34)}, file={'cn': './assets/cn/ui/OS_CHECK.png', 'en': './assets/en/ui/OS_CHECK.png', 'jp': './assets/jp/ui/OS_CHECK.png', 'tw': './assets/tw/ui/OS_CHECK.png'}) PLAYER_CHECK = Button(area={'cn': (28, 668, 139, 688), 'en': (11, 649, 157, 705), 'jp': (26, 668, 139, 689), 'tw': (28, 668, 139, 688)}, color={'cn': (237, 204, 127), 'en': (197, 156, 97), 'jp': (237, 205, 128), 'tw': (237, 204, 127)}, button={'cn': (28, 668, 139, 688), 'en': (11, 649, 157, 705), 'jp': (26, 668, 139, 689), 'tw': (28, 668, 139, 688)}, file={'cn': './assets/cn/ui/PLAYER_CHECK.png', 'en': './assets/en/ui/PLAYER_CHECK.png', 'jp': './assets/jp/ui/PLAYER_CHECK.png', 'tw': './assets/tw/ui/PLAYER_CHECK.png'}) RAID_CHECK = Button(area={'cn': (107, 13, 216, 38), 'en': (107, 15, 188, 34), 'jp': (107, 13, 217, 40), 'tw': (111, 9, 228, 42)}, color={'cn': (129, 131, 129), 'en': (85, 87, 85), 'jp': (127, 129, 127), 'tw': (132, 154, 140)}, button={'cn': (107, 13, 216, 38), 'en': (107, 15, 188, 34), 'jp': (107, 13, 217, 40), 'tw': (111, 9, 228, 42)}, file={'cn': './assets/cn/ui/RAID_CHECK.png', 'en': './assets/en/ui/RAID_CHECK.png', 'jp': './assets/jp/ui/RAID_CHECK.png', 'tw': './assets/tw/ui/RAID_CHECK.png'}) diff --git a/module/ui/page.py b/module/ui/page.py index c6dee5023..10440a7d7 100644 --- a/module/ui/page.py +++ b/module/ui/page.py @@ -303,3 +303,8 @@ page_main_white.link(button=MAIL_ENTER_WHITE, destination=page_mail) # Keep page_rpg_stage, so Raid can import page_rpg_stage = page_raid + +# Player +page_player = Page(PLAYER_CHECK) +page_main.link(button=MAIN_GOTO_PLAYER, destination=page_player) +page_main_white.link(button=MAIN_GOTO_PLAYER_WHITE, destination=page_player) diff --git a/module/ui/ui.py b/module/ui/ui.py index 345453b87..ff713b100 100644 --- a/module/ui/ui.py +++ b/module/ui/ui.py @@ -1,7 +1,10 @@ +from datetime import datetime, timedelta + from module.base.button import Button from module.base.decorator import run_once from module.base.timer import Timer from module.combat.assets import GET_ITEMS_1, GET_ITEMS_2, GET_SHIP +from module.config.utils import deep_get from module.exception import (GameNotRunningError, GamePageUnknownError, GameTooManyClickError) from module.exercise.assets import EXERCISE_PREPARATION @@ -10,6 +13,7 @@ from module.handler.assets import (AUTO_SEARCH_MENU_EXIT, BATTLE_PASS_NOTICE, GA LOGIN_ANNOUNCE_2, LOGIN_CHECK, LOGIN_RETURN_SIGN, MAINTENANCE_ANNOUNCE, MONTHLY_PASS_NOTICE) from module.handler.info_handler import InfoHandler +from module.log_res.log_res import LogRes from module.logger import logger from module.map.assets import (FLEET_PREPARATION, MAP_PREPARATION, MAP_PREPARATION_CANCEL, WITHDRAW) @@ -18,7 +22,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_main_white, page_sp) +from module.ui.page import (Page, page_campaign, page_event, page_main, page_main_white, page_sp, page_player) from module.ui_white.assets import * @@ -218,7 +222,44 @@ class UI(InfoHandler): logger.critical("Please switch to a supported page before starting Alas") raise GamePageUnknownError - def ui_goto(self, destination, offset=(30, 30), skip_first_screenshot=True): + def update_player_info(self): + self.ui_goto_old(page_player) + + img = self.device.screenshot() + + level_ocr = Ocr(buttons=OCR_PLAYER_LEVEL) + level_res = level_ocr.ocr(img) + exp_ocr = Ocr(buttons=OCR_PLAYER_EXP) + exp_res = exp_ocr.ocr(img) + + if isinstance(level_res, str): + level_str = level_res.replace(".", "").lower().replace("lv", "") + if level_str.isdigit(): + LogRes(config=self.config).PlayerLevel = { + "Value": int(level_str) + } + + if isinstance(exp_res, str): + exp_info = exp_res.split("/") + if len(exp_info) == 2: + curr_exp, exp_limit = exp_info[0], exp_info[1] + if curr_exp.isdigit() and exp_limit.isdigit(): + LogRes(config=self.config).PlayerExp = { + "Value": int(curr_exp), + "Limit": int(exp_limit) + } + + self.config.save(self.config.config_name) + + def ui_goto(self, destination, *args, **kwargs): + player_info_last_updated_time = deep_get(self.config.data, "Dashboard.PlayerExp.Record") + now = datetime.now() + if now >= player_info_last_updated_time + timedelta(hours=24): + self.update_player_info() + + self.ui_goto_old(destination, *args, **kwargs) + + def ui_goto_old(self, destination, offset=(30, 30), skip_first_screenshot=True): """ Args: destination (Page): diff --git a/module/ui_white/assets.py b/module/ui_white/assets.py index 5af6b7a4e..7561234e5 100644 --- a/module/ui_white/assets.py +++ b/module/ui_white/assets.py @@ -16,6 +16,7 @@ MAIN_GOTO_FLEET_WHITE = Button(area={'cn': (1025, 437, 1097, 579), 'en': (1024, MAIN_GOTO_GUILD_WHITE = Button(area={'cn': (1116, 656, 1261, 703), 'en': (1115, 657, 1262, 703), 'jp': (1115, 658, 1261, 703), 'tw': (1116, 657, 1261, 703)}, color={'cn': (213, 206, 209), 'en': (217, 215, 216), 'jp': (212, 209, 207), 'tw': (211, 207, 213)}, button={'cn': (1116, 656, 1261, 703), 'en': (1115, 657, 1262, 703), 'jp': (1115, 658, 1261, 703), 'tw': (1116, 657, 1261, 703)}, file={'cn': './assets/cn/ui_white/MAIN_GOTO_GUILD_WHITE.png', 'en': './assets/en/ui_white/MAIN_GOTO_GUILD_WHITE.png', 'jp': './assets/jp/ui_white/MAIN_GOTO_GUILD_WHITE.png', 'tw': './assets/tw/ui_white/MAIN_GOTO_GUILD_WHITE.png'}) MAIN_GOTO_MEMORIES_WHITE = Button(area={'cn': (1125, 546, 1195, 579), 'en': (1125, 546, 1195, 579), 'jp': (1125, 546, 1195, 579), 'tw': (1125, 546, 1195, 579)}, color={'cn': (255, 152, 191), 'en': (255, 152, 191), 'jp': (255, 152, 191), 'tw': (255, 152, 191)}, button={'cn': (1125, 546, 1195, 579), 'en': (1125, 546, 1195, 579), 'jp': (1125, 546, 1195, 579), 'tw': (1125, 546, 1195, 579)}, file={'cn': './assets/cn/ui_white/MAIN_GOTO_MEMORIES_WHITE.png', 'en': './assets/en/ui_white/MAIN_GOTO_MEMORIES_WHITE.png', 'jp': './assets/jp/ui_white/MAIN_GOTO_MEMORIES_WHITE.png', 'tw': './assets/tw/ui_white/MAIN_GOTO_MEMORIES_WHITE.png'}) MAIN_GOTO_MISSION_WHITE = Button(area={'cn': (802, 656, 949, 704), 'en': (803, 656, 948, 703), 'jp': (802, 657, 948, 703), 'tw': (803, 657, 948, 703)}, color={'cn': (219, 213, 214), 'en': (210, 207, 207), 'jp': (224, 216, 221), 'tw': (212, 211, 215)}, button={'cn': (802, 656, 949, 704), 'en': (803, 656, 948, 703), 'jp': (802, 657, 948, 703), 'tw': (803, 657, 948, 703)}, file={'cn': './assets/cn/ui_white/MAIN_GOTO_MISSION_WHITE.png', 'en': './assets/en/ui_white/MAIN_GOTO_MISSION_WHITE.png', 'jp': './assets/jp/ui_white/MAIN_GOTO_MISSION_WHITE.png', 'tw': './assets/tw/ui_white/MAIN_GOTO_MISSION_WHITE.png'}) +MAIN_GOTO_PLAYER_WHITE = Button(area={'cn': (15, 11, 75, 14), 'en': (15, 11, 75, 14), 'jp': (15, 11, 75, 14), 'tw': (15, 11, 75, 14)}, color={'cn': (254, 255, 255), 'en': (254, 255, 255), 'jp': (254, 255, 255), 'tw': (254, 255, 255)}, button={'cn': (12, 13, 78, 79), 'en': (12, 13, 78, 79), 'jp': (12, 13, 78, 79), 'tw': (12, 13, 78, 79)}, file={'cn': './assets/cn/ui_white/MAIN_GOTO_PLAYER_WHITE.png', 'en': './assets/cn/ui_white/MAIN_GOTO_PLAYER_WHITE.png', 'jp': './assets/cn/ui_white/MAIN_GOTO_PLAYER_WHITE.png', 'tw': './assets/cn/ui_white/MAIN_GOTO_PLAYER_WHITE.png'}) MAIN_GOTO_RESHMENU_WHITE = Button(area={'cn': (646, 656, 793, 703), 'en': (646, 656, 792, 703), 'jp': (646, 657, 792, 703), 'tw': (646, 656, 792, 703)}, color={'cn': (216, 213, 217), 'en': (224, 224, 225), 'jp': (225, 222, 227), 'tw': (220, 216, 225)}, button={'cn': (646, 656, 793, 703), 'en': (646, 656, 792, 703), 'jp': (646, 657, 792, 703), 'tw': (646, 656, 792, 703)}, file={'cn': './assets/cn/ui_white/MAIN_GOTO_RESHMENU_WHITE.png', 'en': './assets/en/ui_white/MAIN_GOTO_RESHMENU_WHITE.png', 'jp': './assets/jp/ui_white/MAIN_GOTO_RESHMENU_WHITE.png', 'tw': './assets/tw/ui_white/MAIN_GOTO_RESHMENU_WHITE.png'}) MAIN_GOTO_REWARD_WHITE = Button(area={'cn': (11, 209, 30, 259), 'en': (11, 216, 31, 253), 'jp': (10, 216, 30, 253), 'tw': (10, 216, 31, 253)}, color={'cn': (73, 84, 122), 'en': (105, 115, 162), 'jp': (79, 82, 108), 'tw': (90, 96, 128)}, button={'cn': (11, 209, 30, 259), 'en': (11, 216, 31, 253), 'jp': (10, 216, 30, 253), 'tw': (10, 216, 31, 253)}, file={'cn': './assets/cn/ui_white/MAIN_GOTO_REWARD_WHITE.png', 'en': './assets/en/ui_white/MAIN_GOTO_REWARD_WHITE.png', 'jp': './assets/jp/ui_white/MAIN_GOTO_REWARD_WHITE.png', 'tw': './assets/tw/ui_white/MAIN_GOTO_REWARD_WHITE.png'}) MAIN_GOTO_SHOP_WHITE = Button(area={'cn': (18, 656, 164, 703), 'en': (18, 656, 165, 703), 'jp': (19, 657, 165, 702), 'tw': (19, 657, 164, 702)}, color={'cn': (221, 214, 212), 'en': (232, 220, 204), 'jp': (231, 223, 218), 'tw': (232, 224, 222)}, button={'cn': (18, 656, 164, 703), 'en': (18, 656, 165, 703), 'jp': (19, 657, 165, 702), 'tw': (19, 657, 164, 702)}, file={'cn': './assets/cn/ui_white/MAIN_GOTO_SHOP_WHITE.png', 'en': './assets/en/ui_white/MAIN_GOTO_SHOP_WHITE.png', 'jp': './assets/jp/ui_white/MAIN_GOTO_SHOP_WHITE.png', 'tw': './assets/tw/ui_white/MAIN_GOTO_SHOP_WHITE.png'})