From e7460244228dc0946b59ddb86f976687637cfd80 Mon Sep 17 00:00:00 2001 From: ZHU MINCHAO <48154958+MinchaoZhu@users.noreply.github.com> Date: Thu, 5 Nov 2026 16:50:40 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A6=96=E9=A1=B5=E5=8A=A0=E6=8C=96=E7=9F=BF?= =?UTF-8?q?=E3=80=81=E7=81=B0=E7=BD=91=E3=80=81=E9=92=B1=E5=8C=85=E5=85=A5?= =?UTF-8?q?=E5=8F=A3=E5=8D=A1=E7=89=87=E5=92=8C=E5=9B=BE=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 5.5 --- CHANGELOG.md | 1 + .../ModFiles/Localization/de.csv | 6 ++- .../ModFiles/Localization/en.csv | 6 ++- .../ModFiles/Localization/es.csv | 6 ++- .../ModFiles/Localization/fr.csv | 6 ++- .../ModFiles/Localization/ja.csv | 6 ++- .../ModFiles/Localization/pl.csv | 6 ++- .../ModFiles/Localization/ru.csv | 6 ++- .../ModFiles/Localization/zh.csv | 6 ++- .../ModFiles/Textures/Items/ui_gray.png | Bin 0 -> 278 bytes .../ModFiles/Textures/Items/ui_mining.png | Bin 0 -> 274 bytes .../ModFiles/Textures/Items/ui_wallets.png | Bin 0 -> 186 bytes src/Decentralized/TerminalWindow.cs | 37 ++++++++++++------ 13 files changed, 67 insertions(+), 19 deletions(-) create mode 100644 src/Decentralized/ModFiles/Textures/Items/ui_gray.png create mode 100644 src/Decentralized/ModFiles/Textures/Items/ui_mining.png create mode 100644 src/Decentralized/ModFiles/Textures/Items/ui_wallets.png diff --git a/CHANGELOG.md b/CHANGELOG.md index 425a389..3a3b54d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## 未发布 - 终端页签重新分组:一级页签为首页、银行、Poinbase、Web3、挖矿、灰网、钱包。挖矿(原 Web3 的挖矿页)提到一级;混币器和商店合成“灰网”(解锁了任一项才出现,两项都解锁时里面再分两页);浏览器挪进钱包页,和钱包列表并成两个子页;Web3 页剩交易、质押、空投、预测、理财。 +- 首页入口卡片增加挖矿、灰网(解锁后出现)、钱包,各有图标(32×32 像素图 ui_mining、ui_gray、ui_wallets);超过四张分两行,卡片和图标缩小。Web3 卡片的说明改为“去中心化交易与质押”。 - “连接钱包”挪到终端顶栏右端,所有页都能连接或断开;没有连接时,Web3、灰网页仍显示提示。 - 手册、混币器和商店的解锁说明按新位置改写(8 种语言),术语表加“灰网”。 diff --git a/src/Decentralized/ModFiles/Localization/de.csv b/src/Decentralized/ModFiles/Localization/de.csv index 2e0649b..d265786 100644 --- a/src/Decentralized/ModFiles/Localization/de.csv +++ b/src/Decentralized/ModFiles/Localization/de.csv @@ -126,7 +126,6 @@ entry.poinbase,Poinbase entry.poinbase.l1,Regulierte Börse entry.poinbase.l2,PSC {0} Credits entry.web3,Web3 -entry.web3.l1,Wallet und dezentraler Handel entry.web3.l2,Ca. {0} Credits entry.help,Hilfe entry.help.l1,Web3-Handbuch @@ -941,3 +940,8 @@ predict.clue.subsidy,Reserve {0}%; bei 0 folgt sicher eine Warnung air.noapprove,keine Token-Freigabe tab.gray,Graunetz wallets.sub.list,Wallet-Liste +entry.web3.l1,Dezentraler Handel und Erträge +entry.mining.l1,Rig-Status und nächtliche Erträge +entry.gray.l1,Mixer und Shop +entry.wallets.l1,Hardware-Wallets und Explorer +entry.wallets.l2,Wallets {0} / {1} diff --git a/src/Decentralized/ModFiles/Localization/en.csv b/src/Decentralized/ModFiles/Localization/en.csv index 86b5d34..40acf3b 100644 --- a/src/Decentralized/ModFiles/Localization/en.csv +++ b/src/Decentralized/ModFiles/Localization/en.csv @@ -126,7 +126,6 @@ entry.poinbase,Poinbase entry.poinbase.l1,Compliant exchange entry.poinbase.l2,PSC {0} credits entry.web3,Web3 -entry.web3.l1,Wallet and decentralised trading entry.web3.l2,About {0} credits entry.help,Help entry.help.l1,Web3 handbook @@ -941,3 +940,8 @@ predict.clue.subsidy,Reserve {0}%; empty forces a warning air.noapprove,no token allowance tab.gray,Gray Net wallets.sub.list,Wallet list +entry.web3.l1,Decentralised trading and yield +entry.mining.l1,Rig status and nightly payouts +entry.gray.l1,Mixer and shop +entry.wallets.l1,Hardware wallets and Explorer +entry.wallets.l2,Wallets {0} / {1} diff --git a/src/Decentralized/ModFiles/Localization/es.csv b/src/Decentralized/ModFiles/Localization/es.csv index 6d645c4..2c98b15 100644 --- a/src/Decentralized/ModFiles/Localization/es.csv +++ b/src/Decentralized/ModFiles/Localization/es.csv @@ -126,7 +126,6 @@ entry.poinbase,Poinbase entry.poinbase.l1,Exchange regulado entry.poinbase.l2,PSC {0} créditos entry.web3,Web3 -entry.web3.l1,Billetera y comercio descentralizado entry.web3.l2,Aprox. {0} créditos entry.help,Ayuda entry.help.l1,Manual de Web3 @@ -941,3 +940,8 @@ predict.clue.subsidy,"Reserva al {0}%; a cero, la advertencia es segura" air.noapprove,sin permiso sobre tokens tab.gray,Red gris wallets.sub.list,Lista +entry.web3.l1,Comercio descentralizado y rendimiento +entry.mining.l1,Estado de los equipos y ganancias nocturnas +entry.gray.l1,Mezclador y tienda +entry.wallets.l1,Billeteras de hardware y explorador +entry.wallets.l2,Billeteras {0} / {1} diff --git a/src/Decentralized/ModFiles/Localization/fr.csv b/src/Decentralized/ModFiles/Localization/fr.csv index 74a4460..bfb310c 100644 --- a/src/Decentralized/ModFiles/Localization/fr.csv +++ b/src/Decentralized/ModFiles/Localization/fr.csv @@ -126,7 +126,6 @@ entry.poinbase,Poinbase entry.poinbase.l1,Bourse conforme entry.poinbase.l2,PSC {0} crédits entry.web3,Web3 -entry.web3.l1,Portefeuille et trading décentralisé entry.web3.l2,Environ {0} crédits entry.help,Aide entry.help.l1,Manuel Web3 @@ -941,3 +940,8 @@ predict.clue.subsidy,"Réserve à {0} % ; à zéro, l'alerte est certaine" air.noapprove,aucune autorisation de jetons tab.gray,Réseau gris wallets.sub.list,Liste +entry.web3.l1,Trading décentralisé et rendement +entry.mining.l1,État des machines et gains nocturnes +entry.gray.l1,Mixeur et boutique +entry.wallets.l1,Portefeuilles matériels et explorateur +entry.wallets.l2,Portefeuilles {0} / {1} diff --git a/src/Decentralized/ModFiles/Localization/ja.csv b/src/Decentralized/ModFiles/Localization/ja.csv index a51a19d..3e2cde4 100644 --- a/src/Decentralized/ModFiles/Localization/ja.csv +++ b/src/Decentralized/ModFiles/Localization/ja.csv @@ -126,7 +126,6 @@ entry.poinbase,Poinbase entry.poinbase.l1,規制準拠取引所 entry.poinbase.l2,PSC {0}クレジット entry.web3,Web3 -entry.web3.l1,ウォレットと分散型取引 entry.web3.l2,約{0}クレジット entry.help,ヘルプ entry.help.l1,Web3ハンドブック @@ -941,3 +940,8 @@ predict.clue.subsidy,準備金残量 {0}%。ゼロになれば必ず警告が出 air.noapprove,トークン許可なし tab.gray,グレーネット wallets.sub.list,一覧 +entry.web3.l1,分散型取引と運用 +entry.mining.l1,採掘機の状態と夜間収益 +entry.gray.l1,ミキサーとショップ +entry.wallets.l1,ハードウェアウォレットとエクスプローラー +entry.wallets.l2,ウォレット {0} / {1} diff --git a/src/Decentralized/ModFiles/Localization/pl.csv b/src/Decentralized/ModFiles/Localization/pl.csv index 8829f93..77cea4a 100644 --- a/src/Decentralized/ModFiles/Localization/pl.csv +++ b/src/Decentralized/ModFiles/Localization/pl.csv @@ -126,7 +126,6 @@ entry.poinbase,Poinbase entry.poinbase.l1,Giełda regulowana entry.poinbase.l2,PSC: {0} kredytów entry.web3,Web3 -entry.web3.l1,Portfel i handel zdecentralizowany entry.web3.l2,Ok. {0} kredytów entry.help,Pomoc entry.help.l1,Podręcznik Web3 @@ -941,3 +940,8 @@ predict.clue.subsidy,Rezerwa: {0}%; przy zerze ostrzeżenie jest pewne air.noapprove,bez zgody na tokeny tab.gray,Szara sieć wallets.sub.list,Lista +entry.web3.l1,Handel zdecentralizowany i zyski +entry.mining.l1,Stan koparek i nocne zyski +entry.gray.l1,Mikser i sklep +entry.wallets.l1,Portfele sprzętowe i eksplorator +entry.wallets.l2,Portfele {0} / {1} diff --git a/src/Decentralized/ModFiles/Localization/ru.csv b/src/Decentralized/ModFiles/Localization/ru.csv index 43acb4a..504ab27 100644 --- a/src/Decentralized/ModFiles/Localization/ru.csv +++ b/src/Decentralized/ModFiles/Localization/ru.csv @@ -126,7 +126,6 @@ entry.poinbase,Poinbase entry.poinbase.l1,Регулируемая биржа entry.poinbase.l2,PSC {0} кредитов entry.web3,Web3 -entry.web3.l1,Кошелёк и децентрализованная торговля entry.web3.l2,Около {0} кредитов entry.help,Справка entry.help.l1,Руководство по Web3 @@ -941,3 +940,8 @@ predict.clue.subsidy,Резерв {0}%; при нуле предупрежден air.noapprove,без доступа к токенам tab.gray,Серая сеть wallets.sub.list,Список +entry.web3.l1,Децентрализованная торговля и доходность +entry.mining.l1,Состояние ферм и ночной доход +entry.gray.l1,Миксер и магазин +entry.wallets.l1,Аппаратные кошельки и обозреватель +entry.wallets.l2,Кошельки {0} / {1} diff --git a/src/Decentralized/ModFiles/Localization/zh.csv b/src/Decentralized/ModFiles/Localization/zh.csv index 9b161c2..af8455b 100644 --- a/src/Decentralized/ModFiles/Localization/zh.csv +++ b/src/Decentralized/ModFiles/Localization/zh.csv @@ -125,7 +125,6 @@ entry.poinbase,"Poinbase" entry.poinbase.l1,"合规交易所" entry.poinbase.l2,"PSC {0} 信用点" entry.web3,"Web3" -entry.web3.l1,"钱包与去中心化交易" entry.web3.l2,"约 {0} 信用点" entry.help,帮助 entry.help.l1,Web3 手册 @@ -940,3 +939,8 @@ predict.clue.subsidy,储备余量 {0}%,归零必预警 air.noapprove,不要代币额度 tab.gray,灰网 wallets.sub.list,钱包列表 +entry.web3.l1,去中心化交易与质押 +entry.mining.l1,矿机状态与夜间收益 +entry.gray.l1,混币器与商店 +entry.wallets.l1,硬件钱包与浏览器 +entry.wallets.l2,钱包 {0} / {1} diff --git a/src/Decentralized/ModFiles/Textures/Items/ui_gray.png b/src/Decentralized/ModFiles/Textures/Items/ui_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..a8bd4d2fb1c8860fabd84e8134adc7cd53e54051 GIT binary patch literal 278 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJyPhtNAr*6y6C_xjMKiQ!{&7EE zvUNwYmpI$9oz4zz>m#;{^lY?bxT$Eeb(PEqhg0U3Bu>4#rXjv(ufNc`=_ zcqBHRx!~mFCk#$@J;iU2Yw-&$_i9p6dpA+{@NL`euT aFkDHW^Wx0{OJSf#89ZJ6T-G@yGywo717zd? literal 0 HcmV?d00001 diff --git a/src/Decentralized/ModFiles/Textures/Items/ui_mining.png b/src/Decentralized/ModFiles/Textures/Items/ui_mining.png new file mode 100644 index 0000000000000000000000000000000000000000..3dbaba10b307cb993ee08cb24b58e1c0ff7921a5 GIT binary patch literal 274 zcmV+t0qy>YP)0NC|06qu zT9{-9bWG_2v#Eu#r2)KA0CE7eF}nFAI{;hI5@Q)IwFIL8U2%Ly1_q`?Ezu4@HxQ%- zm%*f}CFlTT1JMmb=EH)SShZw10NEm3;>4;Y*#R&gz_JrIaZ=O{y$~3%G%(<~U{I6; zbS(*KSr-fq2hgfLfDJRC17rta3l*AKjLkA+F<1+R8W^tw@Hq;mnNpf;2hb%7M!|>% Y0H(T>t<807*qoM6N<$g3}RXO#lD@ literal 0 HcmV?d00001 diff --git a/src/Decentralized/ModFiles/Textures/Items/ui_wallets.png b/src/Decentralized/ModFiles/Textures/Items/ui_wallets.png new file mode 100644 index 0000000000000000000000000000000000000000..516cedd8dbfa8cf0beb46e3c23661cdc78c5990a GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJMo$;Vkcv6U2@48E$9|367s z75VPbGiR}7UCIf33Rl0I6dvfV{@roNq}ZXxjm?i|(~rYHMGWL-DmKUnDQmO5c-6qj z-^i%T&bCKIMuhKx*pZeWA>|BJO3Fv%;}i{Mu{pdEeLZbaghPk@9;XBo-kxQRjQ-5Z jml=7O@0v<~V_;aGA9yma_}71+V;DSL{an^LB{Ts5V+B7y literal 0 HcmV?d00001 diff --git a/src/Decentralized/TerminalWindow.cs b/src/Decentralized/TerminalWindow.cs index 7a0c489..cddfa27 100644 --- a/src/Decentralized/TerminalWindow.cs +++ b/src/Decentralized/TerminalWindow.cs @@ -95,16 +95,17 @@ namespace Decentralized if (CustomUIManager.Instance != null && CustomUIManager.Instance.IsOpen(Id)) Open(); } - private static void Entry(CustomUIBuilder b, string icon, string name, string line1, string line2, Page target) => - Entry(b, icon, name, line1, line2, L.T("home.enter"), () => Go(target)); + private static void Entry(CustomUIBuilder b, string icon, string name, string line1, string line2, Page target, bool compact, int perRow) => + Entry(b, icon, name, line1, line2, L.T("home.enter"), () => Go(target), compact, perRow); - private static void Entry(CustomUIBuilder b, string icon, string name, string line1, string line2, string button, Action onEnter) + private static void Entry(CustomUIBuilder b, string icon, string name, string line1, string line2, string button, Action onEnter, bool compact, int perRow) { - b.BeginPanel((ScreenW - 80f) / 4f, 250f + (ScreenH - 578f) * 0.25f, TextAnchor.UpperCenter, 10f, 6f); + float h = compact ? Mathf.Clamp((ScreenH - 190f) / 2f, 180f, 270f) : 250f + (ScreenH - 578f) * 0.25f, pic = compact ? 64f : 96f; + b.BeginPanel((ScreenW - 80f) / perRow, h, TextAnchor.UpperCenter, 10f, compact ? 4f : 6f); var cardImg = b.Last.image; cardImg.sprite = MachineryStyle.White; cardImg.color = PledgerSkin.RowNormal; - b.AddImage(ModInfo.Id + ":" + icon, 96f, 96f); + b.AddImage(ModInfo.Id + ":" + icon, pic, pic); b.AddHeader(name); b.AddLabel(line1); if (line2 != null) b.AddLabel(line2, "entry_l2_dim"); @@ -119,12 +120,26 @@ namespace Decentralized double chain = d.ChainValue(Session.Price); b.AddLabel(L.T("home.summary", PlayerStore.Instance.playerCash, Fmt.Credits(chain))); b.AddSpace(6f); - b.BeginRow(8f, TextAnchor.UpperCenter); - Entry(b, "ui_bank", L.T("entry.bank"), L.T("entry.bank.l1"), L.T("entry.bank.l2", PlayerStore.Instance.playerCash), Page.Bank); - Entry(b, "ui_poinbase", L.T("entry.poinbase"), L.T("entry.poinbase.l1"), null, Page.Poinbase); - Entry(b, "ui_web3", L.T("entry.web3"), L.T("entry.web3.l1"), L.T("entry.web3.l2", Fmt.Credits(chain)), Page.Web3); - Entry(b, "ui_help", L.T("entry.help"), L.T("entry.help.l1"), null, L.T("home.open"), HandbookWindow.Open); - b.End(); + var cards = new List> + { + (two, n) => Entry(b, "ui_bank", L.T("entry.bank"), L.T("entry.bank.l1"), L.T("entry.bank.l2", PlayerStore.Instance.playerCash), Page.Bank, two, n), + (two, n) => Entry(b, "ui_poinbase", L.T("entry.poinbase"), L.T("entry.poinbase.l1"), null, Page.Poinbase, two, n), + (two, n) => Entry(b, "ui_web3", L.T("entry.web3"), L.T("entry.web3.l1"), L.T("entry.web3.l2", Fmt.Credits(chain)), Page.Web3, two, n), + (two, n) => Entry(b, "ui_mining", L.T("tab.mining"), L.T("entry.mining.l1"), null, Page.Mining, two, n), + }; + if (GrayAvailable) cards.Add((two, n) => Entry(b, "ui_gray", L.T("tab.gray"), L.T("entry.gray.l1"), null, Page.Gray, two, n)); + cards.Add((two, n) => Entry(b, "ui_wallets", L.T("tab.wallets"), L.T("entry.wallets.l1"), L.T("entry.wallets.l2", d.Wallets.Count, Tuning.WalletMax), Page.Wallets, two, n)); + cards.Add((two, n) => Entry(b, "ui_help", L.T("entry.help"), L.T("entry.help.l1"), null, L.T("home.open"), HandbookWindow.Open, two, n)); + // 一行四张;多于四张时分两行(每行尽量均分),卡片和图标相应缩小 + bool twoRows = cards.Count > 4; + int first = twoRows ? (cards.Count + 1) / 2 : cards.Count; + for (int i = 0; i < cards.Count; i += first) + { + b.BeginRow(8f, TextAnchor.UpperCenter); + for (int j = i; j < Math.Min(cards.Count, i + first); j++) cards[j](twoRows, first); + b.End(); + if (twoRows && i == 0) b.AddSpace(8f); + } b.AddSpace(8f); b.AddSeparator(); var r = d.LastNight;