diff --git a/CHANGELOG.md b/CHANGELOG.md index 89db048..949f37a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ ### 第二阶段(进行中) - 人脉网络里本 mod 单独一页"Web3":入口(400)和混币器(700,需先加入)都放在这页。 -- 混币器:终端多一页"混币器"(买了升级才出现)。选币种、数量、1–5 轮,存入后每轮扣 2% 手续费并降低污点(基准每轮 35%,存入越大清洗越差,匿名集 = 2 万信用点背景量 + 存入量),轮数即等待天数,到期提回同一个地址;提回后一周内出金审查按"来自混币器"加重。镇压事件开始时 50% 被制裁 5 天,期间提出的币地址被标记,并上报纸;每晚 0.4% 跑路。夜间日志写提回与污点变化。开发者模式 F9 有 `Tainted wallet (test)`。游戏内验证了解锁、页面、存入与污点带走;夜间提回只有单元测试(测试存档里无法正常过夜)。 +- 混币器:终端 Web3 页里多一个"混币器"子页(买了升级才出现,和"交易"并列)。选币种、数量、1–5 轮,存入后每轮扣 2% 手续费并降低污点(基准每轮 35%,存入越大清洗越差,匿名集 = 2 万信用点背景量 + 存入量),轮数即等待天数,到期提回同一个地址;提回后一周内出金审查按"来自混币器"加重。镇压事件开始时 50% 被制裁 5 天,期间提出的币地址被标记,并上报纸;每晚 0.4% 跑路。夜间日志写提回与污点变化。开发者模式 F9 有 `Tainted wallet (test)`。游戏内验证了解锁、页面、存入与污点带走;夜间提回只有单元测试(测试存档里无法正常过夜)。 - 用币付款的顾客:排队的买家里,上层付 CRC(12%)、黑市付 CRT(25%)、革命派付 CRA(25%)、下层付 PSC(10%)。成交时扣回信用点(现金不变),按当日币价换成币进热钱包,顾客当场说一句"成交,N CRT 已转入热钱包";赃物款项不记销赃,改成币带污点(货值 × 赃物热度%);夜间日志汇总当天用币结算的额度。开发者模式 F9 有测试入口(Coin buyer)。已在游戏里实测:成交后现金不变,四笔种子按币价记入 CRT,顾客对话显示。 diff --git a/src/Decentralized/ModFiles/Localization/en.csv b/src/Decentralized/ModFiles/Localization/en.csv index 7a3fa35..5b61a08 100644 --- a/src/Decentralized/ModFiles/Localization/en.csv +++ b/src/Decentralized/ModFiles/Localization/en.csv @@ -192,10 +192,11 @@ mixer.go,Deposit to mixer mixer.min,Deposits must be worth at least {0} credits. mixer.done,Deposited {0} {1}; back on day {2}. mixer.upgrade.title,Mixer -mixer.upgrade.desc,"Unlocks the Mixer page in the terminal: deposit tainted coins, get them back days later with less taint. Cash-outs of freshly mixed coins are screened harder; during crackdowns the mixer may be sanctioned and coins withdrawn meanwhile are flagged." +mixer.upgrade.desc,"Unlocks the mixer in the terminal's Web3 page: deposit tainted coins, get them back days later with less taint. Cash-outs of freshly mixed coins are screened harder; during crackdowns the mixer may be sanctioned and coins withdrawn meanwhile are flagged." news.sanction.title,Mixer put on sanctions list news.sanction.desc,"Security has sanctioned a batch of mixing services. Funds withdrawn from mixers in the next few days will be treated as suspicious." nightlog.mixer,Mixer returned {0} {1}; taint {2} -> {3}. nightlog.mixer_flag, (withdrawn during sanctions; address flagged) nightlog.mixer_rug,The mixer's operator ran off with it: {0} {1} never came back. -tab.mixer,Mixer +web3.sub.trade,Trade +web3.sub.mixer,Mixer diff --git a/src/Decentralized/ModFiles/Localization/zh.csv b/src/Decentralized/ModFiles/Localization/zh.csv index 76b2892..c7a1c6c 100644 --- a/src/Decentralized/ModFiles/Localization/zh.csv +++ b/src/Decentralized/ModFiles/Localization/zh.csv @@ -191,10 +191,11 @@ mixer.go,存入混币器 mixer.min,存入价值不得低于 {0} 信用点。 mixer.done,已存入 {0} {1},第 {2} 天提回。 mixer.upgrade.title,混币器 -mixer.upgrade.desc,"解锁终端里的混币器页:把带污点的币存进去,几天后提回,污点降低。出金审查对刚从混币器出来的币更严格;镇压期间混币器可能被制裁,期间提出的币会被标记。" +mixer.upgrade.desc,"解锁终端 Web3 页里的混币器:把带污点的币存进去,几天后提回,污点降低。出金审查对刚从混币器出来的币更严格;镇压期间混币器可能被制裁,期间提出的币会被标记。" news.sanction.title,混币器被列入制裁名单 news.sanction.desc,"安保部门宣布制裁一批混币服务。此后几天从混币器提出的资金将被视为可疑。" nightlog.mixer,混币器提回 {0} {1},污点 {2} → {3}。 nightlog.mixer_flag,(制裁期间提出,地址被标记) nightlog.mixer_rug,混币器的运营者卷款跑路了:{0} {1} 没有提回。 -tab.mixer,混币器 +web3.sub.trade,交易 +web3.sub.mixer,混币器 diff --git a/src/Decentralized/TerminalWindow.cs b/src/Decentralized/TerminalWindow.cs index cb15600..33644fd 100644 --- a/src/Decentralized/TerminalWindow.cs +++ b/src/Decentralized/TerminalWindow.cs @@ -13,7 +13,7 @@ namespace Decentralized public static class TerminalWindow { public const string Id = "pd_terminal"; - private enum Page { Home, Bank, Poinbase, Web3, Mixer, Report } + private enum Page { Home, Bank, Poinbase, Web3, Report } private static Page _page = Page.Home; private static string _amount = ""; @@ -28,7 +28,6 @@ namespace Decentralized b.BeginRow(); foreach (Page p in Enum.GetValues(typeof(Page))) { - if (p == Page.Mixer && !Unlock.MixerUnlocked) continue; var page = p; string name = L.T("tab." + p.ToString().ToLowerInvariant()); b.AddButton(page == _page ? $"[{name}]" : name, () => { _page = page; _message = null; Open(); }); @@ -42,7 +41,6 @@ namespace Decentralized case Page.Bank: BankPage(b); break; case Page.Poinbase: ExchangePage(b, Venue.Exchange); break; case Page.Web3: Web3Page(b); break; - case Page.Mixer: MixerPage(b); break; default: ReportPage(b); break; } b.End(); @@ -237,6 +235,14 @@ namespace Decentralized private static void Web3Page(CustomUIBuilder b) { var w = Session.Data.Hot; + if (Unlock.MixerUnlocked) + { + b.BeginRow(); + b.AddButton(_web3Mixer ? L.T("web3.sub.trade") : $"[{L.T("web3.sub.trade")}]", () => { _web3Mixer = false; _message = null; Open(); }); + b.AddButton(_web3Mixer ? $"[{L.T("web3.sub.mixer")}]" : L.T("web3.sub.mixer"), () => { _web3Mixer = true; _message = null; Open(); }); + b.End(); + if (_web3Mixer) { MixerPage(b); return; } + } Columns(b, l => { l.AddHeader(L.T("web3.wallet.h")); @@ -254,6 +260,7 @@ namespace Decentralized }); } + private static bool _web3Mixer; private static string _mixAsset = Assets.PSC; private static int _mixRounds = 2; private static readonly float[] MixW = { 70f, 100f, 100f, 80f };