From 2d40df81bd1eb527caedd887b8076c6edccc6e7b Mon Sep 17 00:00:00 2001 From: ZHU MINCHAO <48154958+MinchaoZhu@users.noreply.github.com> Date: Wed, 4 Nov 2026 11:18:45 +0800 Subject: [PATCH] ui: Web3 shop rename, merchant info header, shopping cart with floating button and two-column checkout Co-Authored-By: Claude Sonnet 5.5 --- CHANGELOG.md | 6 + .../ModFiles/Localization/en.csv | 34 +- .../ModFiles/Localization/zh.csv | 34 +- src/Decentralized/Session.cs | 1 + src/Decentralized/TerminalWindow.cs | 309 ++++++++++++++++-- 5 files changed, 346 insertions(+), 38 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d774e95..d40eeba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,12 @@ ### 第九阶段:剧情与收尾 +- Web3 商店改版(`ui-trial` 分支): + - "Web3 黑市"改名"Web3 商店"(页签、升级项、提示;黑市声望是游戏派系,名字不变)。 + - 点左栏卖家后,右栏最前面是商家信息:名称与地址、成交数、好评、到货天数、收的币、是否接受提前放款;平台是"立即到货"和收的币。 + - 购物车:货架上的"购买"改成加入购物车(同一件再点数量 +1,封顶库存);商店页右下角悬浮购物车按钮("购物车 N",点开进结算页,结算后清零;读档清空)。 + - 结算页两栏:左边购物车详情(按商家分组,每行 -、数量、+、删除,接受提前放款的商家可选托管 / 提前放款,合计);右边付款:统一结算(选钱包里的一种币,一次合约签名,商家不收这种币的部分按 8% 滑点自动换币)或逐家付款(每家选它收的币、生成账单、在钱包里转账)。 + - 游戏内验证:平台加两件、再加一家商家的货,购物车 3 件;结算页两栏显示正常,选 CRA 时提示"其中 62 信用点需换币";统一结算签名一次后日志"自动换币:66.96 CRA → 0.6212 PSC",两家的货都成交,购物车清零。没验证:逐家付款(生成账单)、部分失败的消息、英文界面、卖货页的付款面板。 - 黑市买货页重排(`ui-trial` 分支):左栏是卖家列表(平台和各商家,选中行反色,商家写类型和缩写地址),右栏是 3 列货架;币种和数量不再摆在货架上方。点"购买"后右栏换成付款面板:数量(库存内 ×1 / ×5 / ×10)、付款方式(商家接受提前放款时才有)、合计、付款币种(该商家收的币)和"生成账单";下面是自动换币——钱包里别的币(够付)按 8% 滑点换成商家收的币,一次合约签名完成(`BmAutoSwapSlip`);没有够用的币时写明。上架费、改价费、一键上架同样在付款面板里选币(平台收 PSC、CRT、CRA)。各类商家收的币:硬件技术类 PSC / CRT,违禁和个人卖家 CRT / 匿名币,农业养殖水务酿酒 PSC / CRA(`Merchants.Accepts`,界面里限制,域层下单不限)。游戏内验证:平台买一件商品,CRC 自动换币 224.64 CRC → 2.0842 PSC(208 信用点等值)后成交,货进储藏区;直接生成账单显示收款地址和金额;商家货架切换和付款面板正常。没有验证:卖货页改价、一键上架的付款面板、英文界面、数量选择(库存只有 1 件)。 - 钱包页按钮:操作键放到数据格右边的纸面上(和顶栏页签同样的黑色触控键,不再压在污点字段上);选中行只反色数据格;状态"已连接"靠右。 - 新手期调整:低端显卡算力提高——RTX 60 1.0 → 1.8 H、RX 70 0.8 → 1.4 H(价格、耗电不变)。开局送的一矿架一卡,第 1–7 天日均净收入 14 → 33(电网电价),第 15–30 天 6 → 18;再买满 4 张同款卡的矿架 33 → 82/天,每加一张约 10 天回本(原来 24 天)。每张卡每千瓦时的产出仍低于中高端,一个矿架只有 4 个槽位,满槽 4×RTX60 约 7 H,4×RTX70 是 20 H,中后期自然要换更高档次。ops `research/starter` 有各档位的逐段结果。 diff --git a/src/Decentralized/ModFiles/Localization/en.csv b/src/Decentralized/ModFiles/Localization/en.csv index de727b3..52de99b 100644 --- a/src/Decentralized/ModFiles/Localization/en.csv +++ b/src/Decentralized/ModFiles/Localization/en.csv @@ -201,10 +201,10 @@ nightlog.crt_freeze,The black market handed over addresses during the crackdown: nightlog.thaw,Frozen {0} {1} thawed. news.crtfreeze.title,Black market freezes some CRT addresses for the crackdown news.crtfreeze.desc,"Word is the black market gave security a list of CRT addresses in exchange for being left alone. Holders with low standing are likelier to be frozen." -black.upgrade.title,Web3 Black Market -black.upgrade.desc,"Unlocks the black market in the Web3 page: the black-market faction's on-chain arm. Weekly shelves of contraband, occasionally high-tech goods and GPUs (at a markup); buy spot, or order and wait for a courier. Coin only (PSC, CRT, CRA, Ponero), tainted coin accepted. Needs black-market standing; offline during crackdowns." -black.offline,The black market's on-chain entrance is offline during the crackdown. -black.closed,"You need black-market standing of {0} before anyone lets you in (currently {1})." +black.upgrade.title,Web3 Shop +black.upgrade.desc,"Unlocks the shop in the Web3 page: the black-market faction's on-chain arm. Weekly shelves of contraband, occasionally high-tech goods and GPUs (at a markup); buy spot, or order and wait for a courier. Coin only (PSC, CRT, CRA, Ponero), tainted coin accepted. Needs black-market standing; offline during crackdowns." +black.offline,The shop's on-chain entrance is offline during the crackdown. +black.closed,"You need black-market standing of {0} to enter the shop (currently {1})." black.sub.buy,Buy black.shop.h,Spot counter black.rep,"Black-market standing {0}" @@ -223,7 +223,7 @@ black.desk.go,Swap black.desk.fail,Swap failed: balance, limit or amount is wrong. black.sub.orders,Orders black.rugged,"The platform is down; nobody will reopen for {0} more days." -black.seller,"{0}, {1} trades, {2}%" +black.seller,"{1} trades, {2}% positive" black.orders.h,Order catalog black.order,Order black.mode.Escrow,Escrow @@ -255,7 +255,7 @@ courier.line1.1,"Delivery's here." courier.line1.2,"Package for you." courier.line2.1,"Don't tell me what's inside. I don't want to know." courier.line2.2,"Dropped it here. I'm gone." -web3.sub.black,Black market +web3.sub.black,Shop black.stock,"{0} left" black.price,"{0} credits" black.noadvance,No advance release @@ -266,7 +266,7 @@ black.kind.Contraband.3,Contraband (high) black.kind.Tech,High-tech (markup) nightlog.bm.ready,"Black market: {0} arrived; a courier will come by once you open." item.web3guide.name,Web3 Handbook -item.web3guide.desc,"Bank: depositing turns credits into CRC in your Poinbase account; withdrawing turns CRC back into credits and goes through compliance screening, which looks at the Poinbase account's taint. Trading: buys are paid in the quote coin, sells in the traded coin. Mixer: pick a coin, amount and rounds; each round takes a fee and lowers taint, rounds equal days of waiting, and the coins come back to the same address; the more you deposit, the worse the cleaning. Hardware wallets: on-chain coins sit in PLEDGER hardware wallets, each with its own balances and taint; open and connect them on the terminal's Wallets page. The Web3 page's trading, black market and mixer use the connected wallet, and coin-paying customers and mining rewards go into it too. Payments (black market, mixer, Ponero desk, listing fees) start as an invoice on the terminal; type the payee address on the wallet and hold ✓ to sign. The last two characters of an address are a checksum, so a one-character typo is usually caught; once in a while it happens to be valid and the coins go to an address nobody uses. DEX swaps also need a signature on the wallet. RatDigg miners (M1 / M2 / M3) are standalone machines with far more hash than a card and a lower power draw per hash; they need a battery, take modules and use no rig slots. Only the black market's miner dealers sell them, gated by black-market standing (M1 40, M2 60, M3 80), sometimes second-hand. When one burns out, repair it by putting electronic components in its repair slot in order; it comes back 20 health lower. Somewhere between day 50 and day 90 a "miner era" arrives, announced in the paper a few days earlier: the big farms halve their power costs, network hash climbs, GPU miners are diluted and low-end cards barely earn, while miners still do fine. Perps: the Perps tab on Poinbase uses your account CRC as margin, up to 5× on PSC and 3× on SPARK, one position per product, never long and short at once. Fills are worse than the quote (more so for bigger orders, like the spot pool) and opening and closing both cost a fee. Liquidation is checked only overnight against the day's average price: equity under 10% of notional wipes the margin. There is also a nightly funding payment; when the price is above its 7-day average, longs pay shorts. If a liquidation loses more than the margin, the insurance fund covers the gap; when it runs dry (a SPARK collapse can do that) winning positions are auto-deleveraged and give up half their profit; anything beyond that becomes your debt. Debt grows 2% a day, is repaid first from CRC in the account every night, blocks new positions and cash-outs, and after seven days items in your shop are seized to cover it; whatever is still short is written off and the perp account is banned for 30 days. Poinbase is a custodial account and can withdraw straight to the connected wallet; depositing from a wallet means sending to Poinbase's deposit address, which takes only CRC and PSC. More hardware wallets are sold by Dr. Jackson; drag one onto the trading terminal to add it, up to 5. The black market has cheaper ones. A wallet you no longer want can be destroyed on the Wallets page once its coins are moved out. Transfers pay a fee: slow, normal or fast, and gas prices rise and fall over roughly a week; when the network is congested fees rise and slow transactions may be dropped from the mempool. Check the full address before sending. Staking: CRA staked in the Revolution pool earns a daily rate that compounds into the stake; withdrawing means requesting first and waiting four days, with no interest while waiting and no way to take it early. The pool pays from a subsidy fund; when it runs low the rate is cut and word of big holders pulling out may spread. Treat that as a warning: once it collapses CRA is worthless within three days and four days of unlocking is too slow. The balance token SPARK can be minted and burned against CRA at the going price (with a fee); its price swings hard and crashes with the collapse. Staking, minting and burning are contract calls and need a signature on the wallet. Black market: coin only, no CRC, 30% above normal channels, with extra markup on high-tech goods and GPUs; the coin you pay leaves its share of taint with the seller and the goods carry no stolen tag; GPUs may be fake, inspect them yourself. Orders are cheaper than spot but take days and may be intercepted; merchants sell by type at their own price factor, 5+ items get 5% off and 10+ get 10% off, and a bulk merchant appears at random with the lowest prices but six days of waiting; escrow costs 5%, is released on delivery and refunded if the seller runs; advance release takes another 10% off, but a scammer keeps the money and only sellers with 30+ trades accept; the platform itself can rug, be taken over by enforcement, or a seller can be arrested, after which your orders get traced and crime logged; forum rumors can be warnings. An intercepted parcel sometimes turns into enforcement at your door: signing logs the crime on the spot and seizes the goods, refusing only costs the payment. Selling: on the black market's Sell tab, list contraband, high-tech goods and GPUs from storage at 0.6x to 1.8x the reference price. The higher the multiplier, the slower the sale (below 0.9x about a day, 1.0x about two, 1.8x about fourteen), and the likelier and larger the taint on the payout, which also grows with how much you sold in the last 7 days; at most 10 listings at a time, 5% listing fee, repricing a listing costs 2% and the sale speed follows the new multiplier, 8% commission, payout held 3 days before reaching your wallet; a fake card may be spotted and returned, hurting your rating; if the platform rugs, listed goods and unreleased payouts are gone. Anonymous-coin swap (Web3 trade page, needs black-market standing): Ponero is a privacy coin and swapping in wipes the taint on that value; 6% fee each way with a daily limit; coin swapped out of Ponero has no origin and cash-out screening gets stricter. Prediction markets (Web3 Predict page, from game day 8): each market is a yes/no question about things the game itself rolls or schedules: a news event appearing, a faction operation starting, tomorrow's water purity, the PSC price. A market is open until its window starts and settles on the night of the window's last day. Buy Yes or No with CRC from your on-chain wallet (a contract call: sign on the wallet; the position belongs to the signing wallet); the price is the market's implied probability and rises as you buy; each winning share pays 1 credit; 2% fee on each trade; each market has a position limit. Winnings inherit the taint ratio of the stake. Rumor slips and faction perks can tell you ahead of time that something will happen; betting Yes on such a market is an insider bet. A large insider position has a 50% chance of being caught at settlement or when sold at a profit: stake and profit are confiscated and half the profit goes on record as fraud. If game data is missing for the window (for example you skipped the nightly settlement), the market is void and the stake is refunded. Prices react to news: each night every open market moves halfway toward the fair probability given public information, plus some noise; so whoever reads the paper, a rumor slip or a faction perk first can buy ahead and sell after the move instead of waiting for settlement. The clue list in a market panel shows what you know about it: schedules, cooldowns, the halving day, recent gas values, the CRA subsidy pool level, ASIC-era announcements. Patterns you can work out: faction operations are triggered by hidden power values at thresholds (for example a crackdown needs security >= 20 and black market >= 40, and drops security by 20); gas runs on a seven-day cycle; the price anchor ramps up the week before a halving; scheduled crackdowns and blackouts move the anchor but the market price does not reflect them ahead of time; the faster the subsidy drains (the more is staked) the earlier CRA warns; the PSC price market can be moved by your own big orders. The intel broker (needs enough black-market standing) sells a situation brief (the five power values and what each faction can launch now, in CRT) and three grades of insider tip (only for faction operations and the ASIC era, which are already decided; about 60 / 80 / 95% accurate; priced by market size; one in ten is fake and says the opposite of the truth); betting the tipped side counts as an insider bet. Market size grows with the day and a wrong bet loses the whole stake, so do not put everything on one market. Manipulation checks: your big Poinbase spot orders push the price away from where it would be without you (the push decays nightly with the price reversion; the market clue shows it). Once the push exceeds 2%, if you profit from the price (a PSC price market won in the direction you pushed, or a perp closed at a profit in that direction) you may be caught: the bigger the push the likelier (about 40% at 5%, 70% at 10%, capped at 95%). When caught, the prediction stake and winnings are confiscated entirely, perp profit is seized, half the profit goes on record as fraud, the perp account is frozen for 3 days, and the paper reports the investigation. Short-then-dump is not a sure thing: perp slippage on both sides and the spot round trip often cost more than the short earns. High-yield scheme (Yield page, Issue; from game day 15, one per save): pick a daily rate (2%-10%), pay the marketing cost to launch (launching and rugging are contract calls signed on the wallet), and lower-level people deposit CRC by rate and lower-level standing; the higher the rate the faster they come. Each night interest is paid first from new deposits, then from the issuer wallet; if you cannot cover it there is a run and the scheme collapses; 3% of the pool is withdrawn each night, and the bigger the pool and the higher the rate the likelier a report, which also collapses it. On collapse the pool is confiscated. You can rug the pool any time (click twice to confirm): it goes to the issuer wallet fully tainted (launder it before cashing out). Rugging and collapse both put fraud on record and wipe your lower-level standing. The word-on-the-street line hints at the report risk. Scams: wicks - some mornings the price is slammed 15-30% up or down at open; most of it reverts that night, but about a third is real; the perp mark price only takes half, so do not panic-sell into a wick. Airdrops (Web3 Airdrops page) - claiming needs a signature; check the approval first: real airdrops need no approval or a small one of a few dozen; an unlimited approval, or one far larger than the reward, is phishing, often under a lookalike name (0 for o, 1 for l), and a night or two later that coin is taken from the wallet. Approvals are listed on the right of the Airdrops page and can be revoked with a signature, after which nothing can be taken. Third-party yield pools (Yield page, Deposit) - 1-3% a day; you can see the reserve, whether there is a timelock and an audit, but not whether it is a scam: the higher the rate the likelier a rug, a timelock and an audit make it less likely; an honest pool closes and returns principal when its reserve cannot pay interest, a scam pool can vanish any night. Timelocked pools take two days to withdraw. Fake support - someone at the counter claiming to be Poinbase support asks you to move CRC to a ""safe address"": Poinbase never visits and never asks you to transfer. Forged transfers - a coin-paying customer who opens with ""already sent, here's the screenshot, hand it over"" never pays; honest ones say it takes a moment to confirm on chain. Charts: the Poinbase spot page and the Web3 trade page can switch between daily candles of every coin (the perp page shows the current product, predictions show PSC), green up and red down; the yellow line is the 7-day average (perp funding uses it); the bars below are volume (grey the market, cyan you: spot, DEX, mint/burn, Ponero swaps and perp opens/closes all count). The bigger the move the more the market trades; wicks leave long shadows. Story links: choices in the game's storylines change this market; the paper reports them the next day and the market takes a few days to react. Serpico's evidence to the Revolution: the CRA subsidy is topped up, the spiral chance halves for 30 days and SPARK rises 20% over five nights; to the black market: CRT depeg and sell-out chances halve; to Security: for 30 days cash-out screening, mixer sanctions and manipulation and insider checks are stricter. Eleanor leaks the drive: the CRC custodian write-down chance doubles and SPARK rises 15%; returns it: the CRC depeg chance halves. Officer Lun arrested: stricter cash-out screening and manipulation and insider checks for 14 days. Mixer operator Tumbler (after unlocking the mixer, from day 30): he visits a few times and finally asks you to hide a key drive. Hide it and give it back: mixer fees halve and the anonymity set grows, plus a gift; but the drive is contraband and goes on your record if a search turns it up meanwhile. Report him: a bounty and Security standing, and the mixer shuts down for good (coins inside come back). Sell it to the black market: a sum of CRT (half tainted) and black-market standing, after which mixer fees rise and the chance of a rug goes up. Withdrawal screening (the screen shows neither the allowance nor the hit chance; the rules are these): withdrawing CRC from Poinbase for credits is judged against the current rent - a single withdrawal above 5x rent, or 7-day totals above 15x rent, raises the chance of being checked in proportion to the excess; once taint is at least 10% of the amount the chance gains 'ratio x 1.5'; coin recently returned by the mixer or from a flagged wallet adds 30%; the chance caps at 90%. On a hit: taint under 30% is light - the tainted part is confiscated and no crime is recorded; 30% or more is heavy - the tainted part is confiscated and the taint amount is recorded as fencing. With no hit the full amount arrives. Withdrawals cost 0.2% and gains above cost are taxed 8%. Splitting into small amounts, spreading over days and washing first all lower the chance, but nothing tells you the allowance or the odds; estimate them yourself. Before destroying a wallet move the coins out yourself, and withdraw positions and deposits first: whatever is left goes with the wallet. Black market purchases: pick a seller on the left, the shelf is on the right, and after 'Buy' the payment panel sets quantity, payment method and coin. Each kind of seller takes different coins: hardware and tech take PSC and CRT; arms, drugs, chemicals, documents, luxury and personal sellers take CRT and the anonymous coin; farming, husbandry, water and brewing take PSC and CRA; platform spot takes PSC, CRT and CRA. If you lack a coin the seller takes you can use the built-in auto-convert: it swaps from another coin in the wallet at an 8% slippage and signs once; or swap on the DEX yourself first, with far less slippage but an extra step. Listing fees pick a coin at payment time too." +item.web3guide.desc,"Bank: depositing turns credits into CRC in your Poinbase account; withdrawing turns CRC back into credits and goes through compliance screening, which looks at the Poinbase account's taint. Trading: buys are paid in the quote coin, sells in the traded coin. Mixer: pick a coin, amount and rounds; each round takes a fee and lowers taint, rounds equal days of waiting, and the coins come back to the same address; the more you deposit, the worse the cleaning. Hardware wallets: on-chain coins sit in PLEDGER hardware wallets, each with its own balances and taint; open and connect them on the terminal's Wallets page. The Web3 page's trading, black market and mixer use the connected wallet, and coin-paying customers and mining rewards go into it too. Payments (black market, mixer, Ponero desk, listing fees) start as an invoice on the terminal; type the payee address on the wallet and hold ✓ to sign. The last two characters of an address are a checksum, so a one-character typo is usually caught; once in a while it happens to be valid and the coins go to an address nobody uses. DEX swaps also need a signature on the wallet. RatDigg miners (M1 / M2 / M3) are standalone machines with far more hash than a card and a lower power draw per hash; they need a battery, take modules and use no rig slots. Only the black market's miner dealers sell them, gated by black-market standing (M1 40, M2 60, M3 80), sometimes second-hand. When one burns out, repair it by putting electronic components in its repair slot in order; it comes back 20 health lower. Somewhere between day 50 and day 90 a "miner era" arrives, announced in the paper a few days earlier: the big farms halve their power costs, network hash climbs, GPU miners are diluted and low-end cards barely earn, while miners still do fine. Perps: the Perps tab on Poinbase uses your account CRC as margin, up to 5× on PSC and 3× on SPARK, one position per product, never long and short at once. Fills are worse than the quote (more so for bigger orders, like the spot pool) and opening and closing both cost a fee. Liquidation is checked only overnight against the day's average price: equity under 10% of notional wipes the margin. There is also a nightly funding payment; when the price is above its 7-day average, longs pay shorts. If a liquidation loses more than the margin, the insurance fund covers the gap; when it runs dry (a SPARK collapse can do that) winning positions are auto-deleveraged and give up half their profit; anything beyond that becomes your debt. Debt grows 2% a day, is repaid first from CRC in the account every night, blocks new positions and cash-outs, and after seven days items in your shop are seized to cover it; whatever is still short is written off and the perp account is banned for 30 days. Poinbase is a custodial account and can withdraw straight to the connected wallet; depositing from a wallet means sending to Poinbase's deposit address, which takes only CRC and PSC. More hardware wallets are sold by Dr. Jackson; drag one onto the trading terminal to add it, up to 5. The black market has cheaper ones. A wallet you no longer want can be destroyed on the Wallets page once its coins are moved out. Transfers pay a fee: slow, normal or fast, and gas prices rise and fall over roughly a week; when the network is congested fees rise and slow transactions may be dropped from the mempool. Check the full address before sending. Staking: CRA staked in the Revolution pool earns a daily rate that compounds into the stake; withdrawing means requesting first and waiting four days, with no interest while waiting and no way to take it early. The pool pays from a subsidy fund; when it runs low the rate is cut and word of big holders pulling out may spread. Treat that as a warning: once it collapses CRA is worthless within three days and four days of unlocking is too slow. The balance token SPARK can be minted and burned against CRA at the going price (with a fee); its price swings hard and crashes with the collapse. Staking, minting and burning are contract calls and need a signature on the wallet. Black market: coin only, no CRC, 30% above normal channels, with extra markup on high-tech goods and GPUs; the coin you pay leaves its share of taint with the seller and the goods carry no stolen tag; GPUs may be fake, inspect them yourself. Orders are cheaper than spot but take days and may be intercepted; merchants sell by type at their own price factor, 5+ items get 5% off and 10+ get 10% off, and a bulk merchant appears at random with the lowest prices but six days of waiting; escrow costs 5%, is released on delivery and refunded if the seller runs; advance release takes another 10% off, but a scammer keeps the money and only sellers with 30+ trades accept; the platform itself can rug, be taken over by enforcement, or a seller can be arrested, after which your orders get traced and crime logged; forum rumors can be warnings. An intercepted parcel sometimes turns into enforcement at your door: signing logs the crime on the spot and seizes the goods, refusing only costs the payment. Selling: on the black market's Sell tab, list contraband, high-tech goods and GPUs from storage at 0.6x to 1.8x the reference price. The higher the multiplier, the slower the sale (below 0.9x about a day, 1.0x about two, 1.8x about fourteen), and the likelier and larger the taint on the payout, which also grows with how much you sold in the last 7 days; at most 10 listings at a time, 5% listing fee, repricing a listing costs 2% and the sale speed follows the new multiplier, 8% commission, payout held 3 days before reaching your wallet; a fake card may be spotted and returned, hurting your rating; if the platform rugs, listed goods and unreleased payouts are gone. Anonymous-coin swap (Web3 trade page, needs black-market standing): Ponero is a privacy coin and swapping in wipes the taint on that value; 6% fee each way with a daily limit; coin swapped out of Ponero has no origin and cash-out screening gets stricter. Prediction markets (Web3 Predict page, from game day 8): each market is a yes/no question about things the game itself rolls or schedules: a news event appearing, a faction operation starting, tomorrow's water purity, the PSC price. A market is open until its window starts and settles on the night of the window's last day. Buy Yes or No with CRC from your on-chain wallet (a contract call: sign on the wallet; the position belongs to the signing wallet); the price is the market's implied probability and rises as you buy; each winning share pays 1 credit; 2% fee on each trade; each market has a position limit. Winnings inherit the taint ratio of the stake. Rumor slips and faction perks can tell you ahead of time that something will happen; betting Yes on such a market is an insider bet. A large insider position has a 50% chance of being caught at settlement or when sold at a profit: stake and profit are confiscated and half the profit goes on record as fraud. If game data is missing for the window (for example you skipped the nightly settlement), the market is void and the stake is refunded. Prices react to news: each night every open market moves halfway toward the fair probability given public information, plus some noise; so whoever reads the paper, a rumor slip or a faction perk first can buy ahead and sell after the move instead of waiting for settlement. The clue list in a market panel shows what you know about it: schedules, cooldowns, the halving day, recent gas values, the CRA subsidy pool level, ASIC-era announcements. Patterns you can work out: faction operations are triggered by hidden power values at thresholds (for example a crackdown needs security >= 20 and black market >= 40, and drops security by 20); gas runs on a seven-day cycle; the price anchor ramps up the week before a halving; scheduled crackdowns and blackouts move the anchor but the market price does not reflect them ahead of time; the faster the subsidy drains (the more is staked) the earlier CRA warns; the PSC price market can be moved by your own big orders. The intel broker (needs enough black-market standing) sells a situation brief (the five power values and what each faction can launch now, in CRT) and three grades of insider tip (only for faction operations and the ASIC era, which are already decided; about 60 / 80 / 95% accurate; priced by market size; one in ten is fake and says the opposite of the truth); betting the tipped side counts as an insider bet. Market size grows with the day and a wrong bet loses the whole stake, so do not put everything on one market. Manipulation checks: your big Poinbase spot orders push the price away from where it would be without you (the push decays nightly with the price reversion; the market clue shows it). Once the push exceeds 2%, if you profit from the price (a PSC price market won in the direction you pushed, or a perp closed at a profit in that direction) you may be caught: the bigger the push the likelier (about 40% at 5%, 70% at 10%, capped at 95%). When caught, the prediction stake and winnings are confiscated entirely, perp profit is seized, half the profit goes on record as fraud, the perp account is frozen for 3 days, and the paper reports the investigation. Short-then-dump is not a sure thing: perp slippage on both sides and the spot round trip often cost more than the short earns. High-yield scheme (Yield page, Issue; from game day 15, one per save): pick a daily rate (2%-10%), pay the marketing cost to launch (launching and rugging are contract calls signed on the wallet), and lower-level people deposit CRC by rate and lower-level standing; the higher the rate the faster they come. Each night interest is paid first from new deposits, then from the issuer wallet; if you cannot cover it there is a run and the scheme collapses; 3% of the pool is withdrawn each night, and the bigger the pool and the higher the rate the likelier a report, which also collapses it. On collapse the pool is confiscated. You can rug the pool any time (click twice to confirm): it goes to the issuer wallet fully tainted (launder it before cashing out). Rugging and collapse both put fraud on record and wipe your lower-level standing. The word-on-the-street line hints at the report risk. Scams: wicks - some mornings the price is slammed 15-30% up or down at open; most of it reverts that night, but about a third is real; the perp mark price only takes half, so do not panic-sell into a wick. Airdrops (Web3 Airdrops page) - claiming needs a signature; check the approval first: real airdrops need no approval or a small one of a few dozen; an unlimited approval, or one far larger than the reward, is phishing, often under a lookalike name (0 for o, 1 for l), and a night or two later that coin is taken from the wallet. Approvals are listed on the right of the Airdrops page and can be revoked with a signature, after which nothing can be taken. Third-party yield pools (Yield page, Deposit) - 1-3% a day; you can see the reserve, whether there is a timelock and an audit, but not whether it is a scam: the higher the rate the likelier a rug, a timelock and an audit make it less likely; an honest pool closes and returns principal when its reserve cannot pay interest, a scam pool can vanish any night. Timelocked pools take two days to withdraw. Fake support - someone at the counter claiming to be Poinbase support asks you to move CRC to a ""safe address"": Poinbase never visits and never asks you to transfer. Forged transfers - a coin-paying customer who opens with ""already sent, here's the screenshot, hand it over"" never pays; honest ones say it takes a moment to confirm on chain. Charts: the Poinbase spot page and the Web3 trade page can switch between daily candles of every coin (the perp page shows the current product, predictions show PSC), green up and red down; the yellow line is the 7-day average (perp funding uses it); the bars below are volume (grey the market, cyan you: spot, DEX, mint/burn, Ponero swaps and perp opens/closes all count). The bigger the move the more the market trades; wicks leave long shadows. Story links: choices in the game's storylines change this market; the paper reports them the next day and the market takes a few days to react. Serpico's evidence to the Revolution: the CRA subsidy is topped up, the spiral chance halves for 30 days and SPARK rises 20% over five nights; to the black market: CRT depeg and sell-out chances halve; to Security: for 30 days cash-out screening, mixer sanctions and manipulation and insider checks are stricter. Eleanor leaks the drive: the CRC custodian write-down chance doubles and SPARK rises 15%; returns it: the CRC depeg chance halves. Officer Lun arrested: stricter cash-out screening and manipulation and insider checks for 14 days. Mixer operator Tumbler (after unlocking the mixer, from day 30): he visits a few times and finally asks you to hide a key drive. Hide it and give it back: mixer fees halve and the anonymity set grows, plus a gift; but the drive is contraband and goes on your record if a search turns it up meanwhile. Report him: a bounty and Security standing, and the mixer shuts down for good (coins inside come back). Sell it to the black market: a sum of CRT (half tainted) and black-market standing, after which mixer fees rise and the chance of a rug goes up. Withdrawal screening (the screen shows neither the allowance nor the hit chance; the rules are these): withdrawing CRC from Poinbase for credits is judged against the current rent - a single withdrawal above 5x rent, or 7-day totals above 15x rent, raises the chance of being checked in proportion to the excess; once taint is at least 10% of the amount the chance gains 'ratio x 1.5'; coin recently returned by the mixer or from a flagged wallet adds 30%; the chance caps at 90%. On a hit: taint under 30% is light - the tainted part is confiscated and no crime is recorded; 30% or more is heavy - the tainted part is confiscated and the taint amount is recorded as fencing. With no hit the full amount arrives. Withdrawals cost 0.2% and gains above cost are taxed 8%. Splitting into small amounts, spreading over days and washing first all lower the chance, but nothing tells you the allowance or the odds; estimate them yourself. Before destroying a wallet move the coins out yourself, and withdraw positions and deposits first: whatever is left goes with the wallet. Black market purchases: pick a seller on the left, the shelf is on the right, and after 'Buy' the payment panel sets quantity, payment method and coin. Each kind of seller takes different coins: hardware and tech take PSC and CRT; arms, drugs, chemicals, documents, luxury and personal sellers take CRT and the anonymous coin; farming, husbandry, water and brewing take PSC and CRA; platform spot takes PSC, CRT and CRA. If you lack a coin the seller takes you can use the built-in auto-convert: it swaps from another coin in the wallet at an 8% slippage and signs once; or swap on the DEX yourself first, with far less slippage but an extra step. Listing fees pick a coin at payment time too. Shop cart: 'Buy' on a shelf adds to the cart; the floating cart at the bottom right shows the count and opens checkout. Checkout shows the cart on the left (grouped by seller, quantities adjustable, items removable, escrow or advance release for sellers that allow it) and payment on the right: pay all at once picks one coin and signs one contract call for every seller, converting at 8% slippage for the part whose seller does not take it; pay per seller picks a coin the seller takes for each, creates an invoice and you transfer from the wallet." courier.odd1,...Package is here. courier.odd2,"(His hand stays in his pocket.) Sign here." courier.sign,Sign @@ -605,7 +605,7 @@ predict.era,ASIC era predict.pos3,Avg {0} now {1} predict.pos4,Selling now returns {0} intel.h,Intel broker -intel.locked,Needs the Web3 black market and standing {0}. +intel.locked,Needs the Web3 shop and black-market standing {0}. intel.brief.buy,Buy situation brief ({0} CRT) intel.brief.none,No brief bought yet. intel.brief.day,Brief from day {0} @@ -796,3 +796,21 @@ bpay.swap.need,"Pay {0} {1}, includes {2}% slippage" bpay.swap.btn,Convert and pay bpay.swap.sum,"{0}: auto-convert, pay {2} {1}, swapped to {3} before ordering" bpay.back,Back +cart.fab,Cart {0} +cart.h,Cart +cart.empty,The cart is empty. +cart.added,Added to cart: {0} +cart.all,Pay all at once +cart.each,Pay per seller +cart.back,Back to shop +cart.nocoin,No usable coin in the wallet. +bpay.coin2,Pay with (coins in the wallet) +cart.swapped,"{0} to convert (includes {1}% slippage)" +cart.pay,Pay all (one signature) +cart.done,"Paid for {0} items." +cart.partial,"Paid for {0} items; {1} failed (stock or balance)." +cart.short,"{0}: not enough coin to convert; not paid." +cart.sum,"Shop cart {0} items, pay {2} {1} (with auto-convert)" +black.info.accepts,Takes: {0} +black.info.advance.yes,advance release accepted +black.info.advance.no,no advance release diff --git a/src/Decentralized/ModFiles/Localization/zh.csv b/src/Decentralized/ModFiles/Localization/zh.csv index 08ccf26..1efdc48 100644 --- a/src/Decentralized/ModFiles/Localization/zh.csv +++ b/src/Decentralized/ModFiles/Localization/zh.csv @@ -200,10 +200,10 @@ nightlog.crt_freeze,镇压期间黑市交出了一批地址:你的 {0} CRT 被 nightlog.thaw,冻结的 {0} {1} 已解冻。 news.crtfreeze.title,黑市配合镇压冻结部分 CRT 地址 news.crtfreeze.desc,"传闻黑市为换取放行,向安保交出了一批 CRT 地址。声望低的持有者更容易被冻结。" -black.upgrade.title,Web3 黑市 -black.upgrade.desc,"解锁 Web3 页里的黑市:黑市派系在链上的实体。货架上每周上一批违禁品,偶尔有高科技物品和显卡(要加价);可以直接买现货,也可以下订单等快递员上门。只收币(PSC、CRT、CRA、Ponero),脏币也收。需要黑市声望,镇压期间下线。" -black.offline,镇压期间,黑市的链上入口已经下线。 -black.closed,"黑市声望达到 {0} 才会有人带你进去(现在 {1})。" +black.upgrade.title,Web3 商店 +black.upgrade.desc,"解锁 Web3 页里的商店:黑市派系在链上的实体。货架上每周上一批违禁品,偶尔有高科技物品和显卡(要加价);可以直接买现货,也可以下订单等快递员上门。只收币(PSC、CRT、CRA、Ponero),脏币也收。需要黑市声望,镇压期间下线。" +black.offline,镇压期间,商店的链上入口已经下线。 +black.closed,"黑市声望达到 {0} 才能进入商店(现在 {1})。" black.sub.buy,买货 black.shop.h,现货柜台 black.rep,"黑市声望 {0}" @@ -222,7 +222,7 @@ black.desk.go,兑换 black.desk.fail,兑换失败:余额、额度或数量不对。 black.sub.orders,订单 black.rugged,"平台出事了,入口关闭,还要 {0} 天才会有人重新开张。" -black.seller,"{0},成交 {1},好评 {2}%" +black.seller,"成交 {1},好评 {2}%" black.orders.h,订单目录 black.order,下单 black.mode.Escrow,托管 @@ -254,7 +254,7 @@ courier.line1.1,"东西到了。" courier.line1.2,"有你的包裹。" courier.line2.1,"别问我里面是什么,我也不想知道。" courier.line2.2,"货放这儿了,我走了。" -web3.sub.black,黑市 +web3.sub.black,商店 black.stock,"剩 {0} 件" black.price,"{0} 信用点等值" black.noadvance,不接受提前放款 @@ -265,7 +265,7 @@ black.kind.Contraband.3,违禁品(高) black.kind.Tech,高科技物品(加价) nightlog.bm.ready,"黑市:{0} 到货,开店后会有快递员上门。" item.web3guide.name,Web3 手册 -item.web3guide.desc,"银行:存入把信用点换成 Poinbase 账户里的 CRC;提取把 CRC 换回信用点,要过合规审查,审查看 Poinbase 账户的污点。交易:买入按计价币的数量支付,卖出按所交易币的数量卖出。混币器:选币种、填数量和轮数,每轮扣手续费并降低污点,轮数即等待天数,到期提回同一个地址;存入越多,清洗越差。硬件钱包:链上的币放在 PLEDGER 硬件钱包里,每个钱包的余额和污点各算各的;在终端的钱包页打开、连接。Web3 页的交易、黑市、混币器用已连接的钱包,用币付款的顾客和挖矿收益也进它。付款(黑市、混币器、Ponero 兑换处、上架费)先在终端开账单,再在钱包里手输收款地址、按住 ✓ 签名;地址末尾两位是校验位,输错一位多半会被拦下,偶尔碰巧合法,币就转进了没人用的地址。DEX 兑换也要在钱包上签名。Poinbase 是托管账户,可以直接提到已连接的钱包;从钱包充值要转到 Poinbase 的充值地址,只收 CRC 和 PSC。更多硬件钱包向杰克逊博士购买,拖到交易终端上添加,最多 5 个;黑市上也有更便宜的。不要的钱包可以在钱包页销毁,要先把币转走。转账要付手续费,分慢、普通、快三档,gas 价格大约一周一个起落;网络拥堵时手续费变贵,慢档可能被挤出内存池。转账前核对完整地址。质押:把 CRA 质押进革命军质押池每天有日息,利息并入本金;取出要先申请,等四天才到账,等待期间没有利息,也不能提前拿。质押池靠补贴池付息,补贴池见底会降息,有时还会传出大户撤出的消息,那是预兆:一旦崩盘,三天内 CRA 就一文不值,四天的解锁期来不及。平衡代币 SPARK 可以和 CRA 按价格互相铸销(收手续费),价格波动很大,崩盘时会跟着暴跌。质押、铸销都是合约调用,要在钱包上签名。RatDigg 矿机(M1 / M2 / M3)是独立的机器,算力比显卡大得多、耗电更省,要放电池才挖,可以放模块,不占矿架槽位;只在黑市的矿机商那里有,要黑市声望(M1 40、M2 60、M3 80),偶尔有二手的。暴毙后要往修理槽里放电子元件按顺序修好,修好健康少 20。第 50 到 90 天之间会有一次"矿机时代",提前几天上报纸预告,之后大矿场的耗电成本砍半,全网算力涨上去,显卡矿工的收益被摊薄,低档显卡几乎不赚钱,矿机还行。永续合约:Poinbase 的"永续"页,用账户里的 CRC 当保证金,PSC 最高 5 倍、SPARK 最高 3 倍,一个品种只有一个仓位,不能同时多空。成交价比现价差一截(单越大差得越多,和现货池一样),开平仓还收手续费。强平只在夜里按当天均价检查,权益不到名义价值的 10% 就被强平,保证金没了;每晚还有资金费,价格比近 7 天均价高时多头付给空头。强平后亏光保证金还不够的缺口,先由保险基金垫,基金见底(SPARK 崩盘这类大行情会抽干它)后盈利的仓位会被自动减仓、少拿一半盈利,再不够就记成你的欠款:欠款每天涨 2%,账户里的 CRC 每晚先拿去还,没还清不能开仓、不能出金,七天不还就没收店里的物品抵债,抵不够的核销并拉黑永续账户 30 天。黑市:只收币,不收 CRC,价格比正常渠道贵 30%,高科技物品和显卡另有加价;付出去的币带着按比例的污点留在卖家那边,货不带赃物标签;显卡不保证真假,自己鉴定。订单比现货便宜,要等几天,路上可能被截获;商家按类型卖货,价格系数各不相同,一次订 5 件以上 95 折、10 件以上 9 折,大宗商家随机出现,价格最低但要等六天;托管多付 5% 托管费,收货后放款,卖家跑路时退款;提前放款再打九折,卖家若是骗子钱就没了,只有成交 30 单以上的卖家接受;平台自己也可能跑路,也可能被执法接管,或者卖家落网,之后你的订单会被追查、记罪证;论坛上的传闻可以当预兆。被截获的包裹有时会变成执法人员上门:签收当场记罪证并查封,拒签只损失货款。出售:在黑市的卖货页把储藏区里的违禁品、高科技物品和显卡上架,标价是参考价的 0.6 到 1.8 倍。倍率越高成交越慢(0.9 以下约一天,1.0 约两天,1.8 约十四天),货款带污点的可能性和比例也越高,近 7 天出售的量越大,污点越重;同时最多上架 10 件,上架收 5% 上架费,上架后可以改价(收 2% 改价费,标价按参考价重算,成交的快慢跟着新倍率走),成交扣 8% 抽成,货款托管 3 天后进钱包;卖假卡可能被买家看穿而退货,拉低好评;平台跑路时上架的货和未放款的货款都没了。匿名币兑换(Web3 交易页,要黑市声望):Ponero 是隐私币,兑入时这部分价值的污点被清除;兑入、兑出各收 6% 手续费,每天有额度;从 Ponero 兑出的币来路不明,出金审查会加重。 预测市场(Web3 预测页,游戏第 8 天起):每个盘口是一道是非题,只问游戏自己掷骰或排期的事:新闻事件出现、派系行动开始、明天的水纯度、PSC 价格。盘口开放到窗口开始前,窗口最后一天夜里结算;买「是」「否」用链上钱包的 CRC(合约调用,要在钱包上签名,持仓记在签名的钱包名下),价格就是市场认为的概率,买得越多越贵,押中每份兑付 1 信用点,买卖各收 2%。每个盘口有持仓上限。押中的钱继承押注资金的污点比例。传闻纸条、派系特权让你提前知道某件事会发生,在这类盘口押「是」算内幕单;内幕持仓太大,结算时或赚钱卖出时有一半概率被查,本金和收益全部没收,收益的一半记诈骗罪证。窗口里缺了游戏数据(例如那几天没睡觉结算),盘口作废退回本金。 价格会对消息作出反应:每晚盘口向当时公开信息下的合理概率靠拢一半,再加一点随机波动;所以先从报纸、传闻纸条、派系特权看到消息的人可以抢在前面买,涨价后卖出,不用等到结算。盘口面板的线索栏列出和这个盘口有关的已知信息:排期、冷却、减半日、gas 近几天的数值、CRA 补贴池水位、矿机时代预告。可以推演的规律:派系行动由隐藏的势力值按阈值触发(例如镇压要安保 ≥ 20 且黑市 ≥ 40,镇压后安保 −20);gas 七天一个周期;减半前一周价格锚逐日抬高;排期好的镇压和停电会压低或抬高锚,但盘口价格不会预先反映;补贴池消耗越快(质押越多)CRA 越早预警;PSC 价格盘的价格能被你自己的大单推动。情报贩子(黑市声望够了才有)卖局势简报(五个势力值和各派系现在能发起的行动,CRT)和三档内幕消息(只针对已经定下来的派系行动、矿机时代盘口,准确率约 60 / 80 / 95%,价格按盘口规模,一成是假情报,说的与真相相反);买了内幕消息再押同一边算内幕单。盘口规模随天数增长,押错本金全亏,别把钱都压在一个盘口上。 操纵检出:你在 Poinbase 现货上的大单会把价格推离没有你时的水平(推价幅度每晚随价格回归衰减,预测盘线索里能看到)。推价幅度超过 2% 后,如果你从价格里赚到钱——行情盘押中而且方向和你推价的方向一致,或者永续平仓盈利而且方向一致——有概率被查:幅度越大越容易(5% 约 4 成,10% 约 7 成,封顶 95%)。被查则预测盘的本金和收益全部没收、永续盈利没收,收益的一半记诈骗罪证,永续账户冻结 3 天,报纸报道调查。先空后砸不是稳赚:永续单边滑点和现货来回的价差往往比空头赚到的还多。 高息理财(理财页"发行",游戏第 15 天起,一个存档只能开一次):定一个日息(2%–10%),付宣传费开张(开张、卷走都是合约调用,要在钱包上签名),下层的人按日息和下层声望往池子里存 CRC,日息越高存得越快。每晚先用新存入的钱付利息,不够从发行钱包补,补不上就挤兑崩盘;池子每晚被取走 3%,池子越大、日息越高越容易被举报,被举报同样崩盘。崩盘时池子被没收。随时可以卷走池子(点两次确认):池子进发行钱包,污点全额(要洗了才好出金)。卷走和崩盘都记诈骗罪证,下层声望清零。风声一栏提示被举报的风险高低。 骗局:插针——有时开门后价格被瞬间打上去或砸下来 15–30%,多数当晚回去一大半,三成是真的;永续标记价只吃一半,别在插针里恐慌割肉。空投(Web3 空投页)——领取要签名,签之前看清授权范围:正规空投不要授权或只要几十的小额授权;要""无上限授权""或远超奖励的大额授权的,就是钓鱼,名字也常是仿冒(0 和 o、1 和 l),一两晚后会把这个钱包里那种币转走。授权列在空投页右边,可以签名撤销,撤销后就转不走了。第三方收益池(理财页"存钱")——日息 1–3%,看得到储备、有没有时间锁、有没有审计,看不到是不是骗局:日息越高越可能跑路,有时间锁、有审计的少一些;正规池储备付不起利息时退本金关闭,骗局池每晚都可能卷款跑路。有时间锁的池子取款要等两天。假客服——自称 Poinbase 客服上门,要你把 CRC 转到""安全地址"":Poinbase 不会上门,也不会要你转账。伪造转账——用币付款的顾客开口说""已经转了,给你看截图,快给货""的,币不会到账;正常顾客会说链上确认要一会儿。 行情图:Poinbase 现货页、Web3 交易页可以切换各个币的日 K(永续页是当前品种,预测页是 PSC),绿涨红跌,黄线是 7 日均线(永续资金费按它算),下方的柱子是成交量(灰色是市场,青色是你自己:现货、DEX、铸销、Ponero 兑换、永续开平仓都算)。价格波动越大市场成交越多;插针会留下长影线。 剧情联动:游戏里几条剧情线的选择会改变这里的市场,第二天报纸会登出来,市场要过几天才反应完。塞尔皮科的证据交给革命军:CRA 补贴池注资、30 天内螺旋概率减半、SPARK 五晚内涨 20%;交给黑市:CRT 脱锚和镇压时被出卖的概率减半;交给治安部:30 天内出金审查、混币器制裁、操纵和内幕查处都更严。埃莉诺泄露数据盘:CRC 托管银行减记的概率翻倍、SPARK 涨 15%;交回数据盘:CRC 脱锚概率减半。伦警官被捕:14 天内出金审查、操纵和内幕查处更严。 混币器运营者 Tumbler(解锁混币器、第 30 天起):他会上门几次,最后求你帮忙藏密钥盘。藏好、到时还给他:混币器手续费减半、匿名集变大,另有谢礼;但密钥盘是违禁品,期间被搜出来会记罪证。举报他:拿赏金和治安部声望,混币器永久关停(在途的照常提回)。卖给黑市:拿一笔 CRT(一半带污点)和黑市声望,之后混币器手续费上涨、跑路概率变大。 出金审查(界面不显示额度和命中概率,规则如下):从 Poinbase 提取 CRC 换回信用点时按当天房租判定——单笔超过 5 倍房租、近 7 天累计超过 15 倍房租,超出的部分按比例抬高被查概率;污点占这笔金额的比例达到 10% 起,概率另加「比例 × 1.5」;资金来自近期混币器提回或被标记的钱包,再加 30%;概率最高 90%。命中后:污点占比低于 30% 为轻度,没收污点部分,不记罪证;达到 30% 为重度,没收污点部分,并把污点额记为销赃罪证。没命中则全额到账。出金收 0.2% 手续费,超出成本的收益另征 8% 税。拆成小额、分几天提、先洗再提都能压低概率,但额度和概率不会提示,要自己估。销毁钱包前必须自己把币转出,持仓和存款也要先取出:留在里面的会随钱包一起没有。 黑市购买:左边选卖家,右边是货架,点"购买"后在付款面板里定数量、付款方式和币种。每类卖家收的币不同:硬件、技术类收 PSC 和 CRT,军火、药物、化学品、证件、奢侈品、个人卖家收 CRT 和匿名币,农业、养殖、水务、酿酒收 PSC 和 CRA,平台现货收 PSC、CRT、CRA。手里没有它收的币,可以用 Web3 内置的自动换币:从钱包里别的币换出,多付 8% 滑点,签名一次完成;也可以自己先去 DEX 换,滑点小得多,但要多一步。上架费同样在付款时选币。" +item.web3guide.desc,"银行:存入把信用点换成 Poinbase 账户里的 CRC;提取把 CRC 换回信用点,要过合规审查,审查看 Poinbase 账户的污点。交易:买入按计价币的数量支付,卖出按所交易币的数量卖出。混币器:选币种、填数量和轮数,每轮扣手续费并降低污点,轮数即等待天数,到期提回同一个地址;存入越多,清洗越差。硬件钱包:链上的币放在 PLEDGER 硬件钱包里,每个钱包的余额和污点各算各的;在终端的钱包页打开、连接。Web3 页的交易、黑市、混币器用已连接的钱包,用币付款的顾客和挖矿收益也进它。付款(黑市、混币器、Ponero 兑换处、上架费)先在终端开账单,再在钱包里手输收款地址、按住 ✓ 签名;地址末尾两位是校验位,输错一位多半会被拦下,偶尔碰巧合法,币就转进了没人用的地址。DEX 兑换也要在钱包上签名。Poinbase 是托管账户,可以直接提到已连接的钱包;从钱包充值要转到 Poinbase 的充值地址,只收 CRC 和 PSC。更多硬件钱包向杰克逊博士购买,拖到交易终端上添加,最多 5 个;黑市上也有更便宜的。不要的钱包可以在钱包页销毁,要先把币转走。转账要付手续费,分慢、普通、快三档,gas 价格大约一周一个起落;网络拥堵时手续费变贵,慢档可能被挤出内存池。转账前核对完整地址。质押:把 CRA 质押进革命军质押池每天有日息,利息并入本金;取出要先申请,等四天才到账,等待期间没有利息,也不能提前拿。质押池靠补贴池付息,补贴池见底会降息,有时还会传出大户撤出的消息,那是预兆:一旦崩盘,三天内 CRA 就一文不值,四天的解锁期来不及。平衡代币 SPARK 可以和 CRA 按价格互相铸销(收手续费),价格波动很大,崩盘时会跟着暴跌。质押、铸销都是合约调用,要在钱包上签名。RatDigg 矿机(M1 / M2 / M3)是独立的机器,算力比显卡大得多、耗电更省,要放电池才挖,可以放模块,不占矿架槽位;只在黑市的矿机商那里有,要黑市声望(M1 40、M2 60、M3 80),偶尔有二手的。暴毙后要往修理槽里放电子元件按顺序修好,修好健康少 20。第 50 到 90 天之间会有一次"矿机时代",提前几天上报纸预告,之后大矿场的耗电成本砍半,全网算力涨上去,显卡矿工的收益被摊薄,低档显卡几乎不赚钱,矿机还行。永续合约:Poinbase 的"永续"页,用账户里的 CRC 当保证金,PSC 最高 5 倍、SPARK 最高 3 倍,一个品种只有一个仓位,不能同时多空。成交价比现价差一截(单越大差得越多,和现货池一样),开平仓还收手续费。强平只在夜里按当天均价检查,权益不到名义价值的 10% 就被强平,保证金没了;每晚还有资金费,价格比近 7 天均价高时多头付给空头。强平后亏光保证金还不够的缺口,先由保险基金垫,基金见底(SPARK 崩盘这类大行情会抽干它)后盈利的仓位会被自动减仓、少拿一半盈利,再不够就记成你的欠款:欠款每天涨 2%,账户里的 CRC 每晚先拿去还,没还清不能开仓、不能出金,七天不还就没收店里的物品抵债,抵不够的核销并拉黑永续账户 30 天。黑市:只收币,不收 CRC,价格比正常渠道贵 30%,高科技物品和显卡另有加价;付出去的币带着按比例的污点留在卖家那边,货不带赃物标签;显卡不保证真假,自己鉴定。订单比现货便宜,要等几天,路上可能被截获;商家按类型卖货,价格系数各不相同,一次订 5 件以上 95 折、10 件以上 9 折,大宗商家随机出现,价格最低但要等六天;托管多付 5% 托管费,收货后放款,卖家跑路时退款;提前放款再打九折,卖家若是骗子钱就没了,只有成交 30 单以上的卖家接受;平台自己也可能跑路,也可能被执法接管,或者卖家落网,之后你的订单会被追查、记罪证;论坛上的传闻可以当预兆。被截获的包裹有时会变成执法人员上门:签收当场记罪证并查封,拒签只损失货款。出售:在黑市的卖货页把储藏区里的违禁品、高科技物品和显卡上架,标价是参考价的 0.6 到 1.8 倍。倍率越高成交越慢(0.9 以下约一天,1.0 约两天,1.8 约十四天),货款带污点的可能性和比例也越高,近 7 天出售的量越大,污点越重;同时最多上架 10 件,上架收 5% 上架费,上架后可以改价(收 2% 改价费,标价按参考价重算,成交的快慢跟着新倍率走),成交扣 8% 抽成,货款托管 3 天后进钱包;卖假卡可能被买家看穿而退货,拉低好评;平台跑路时上架的货和未放款的货款都没了。匿名币兑换(Web3 交易页,要黑市声望):Ponero 是隐私币,兑入时这部分价值的污点被清除;兑入、兑出各收 6% 手续费,每天有额度;从 Ponero 兑出的币来路不明,出金审查会加重。 预测市场(Web3 预测页,游戏第 8 天起):每个盘口是一道是非题,只问游戏自己掷骰或排期的事:新闻事件出现、派系行动开始、明天的水纯度、PSC 价格。盘口开放到窗口开始前,窗口最后一天夜里结算;买「是」「否」用链上钱包的 CRC(合约调用,要在钱包上签名,持仓记在签名的钱包名下),价格就是市场认为的概率,买得越多越贵,押中每份兑付 1 信用点,买卖各收 2%。每个盘口有持仓上限。押中的钱继承押注资金的污点比例。传闻纸条、派系特权让你提前知道某件事会发生,在这类盘口押「是」算内幕单;内幕持仓太大,结算时或赚钱卖出时有一半概率被查,本金和收益全部没收,收益的一半记诈骗罪证。窗口里缺了游戏数据(例如那几天没睡觉结算),盘口作废退回本金。 价格会对消息作出反应:每晚盘口向当时公开信息下的合理概率靠拢一半,再加一点随机波动;所以先从报纸、传闻纸条、派系特权看到消息的人可以抢在前面买,涨价后卖出,不用等到结算。盘口面板的线索栏列出和这个盘口有关的已知信息:排期、冷却、减半日、gas 近几天的数值、CRA 补贴池水位、矿机时代预告。可以推演的规律:派系行动由隐藏的势力值按阈值触发(例如镇压要安保 ≥ 20 且黑市 ≥ 40,镇压后安保 −20);gas 七天一个周期;减半前一周价格锚逐日抬高;排期好的镇压和停电会压低或抬高锚,但盘口价格不会预先反映;补贴池消耗越快(质押越多)CRA 越早预警;PSC 价格盘的价格能被你自己的大单推动。情报贩子(黑市声望够了才有)卖局势简报(五个势力值和各派系现在能发起的行动,CRT)和三档内幕消息(只针对已经定下来的派系行动、矿机时代盘口,准确率约 60 / 80 / 95%,价格按盘口规模,一成是假情报,说的与真相相反);买了内幕消息再押同一边算内幕单。盘口规模随天数增长,押错本金全亏,别把钱都压在一个盘口上。 操纵检出:你在 Poinbase 现货上的大单会把价格推离没有你时的水平(推价幅度每晚随价格回归衰减,预测盘线索里能看到)。推价幅度超过 2% 后,如果你从价格里赚到钱——行情盘押中而且方向和你推价的方向一致,或者永续平仓盈利而且方向一致——有概率被查:幅度越大越容易(5% 约 4 成,10% 约 7 成,封顶 95%)。被查则预测盘的本金和收益全部没收、永续盈利没收,收益的一半记诈骗罪证,永续账户冻结 3 天,报纸报道调查。先空后砸不是稳赚:永续单边滑点和现货来回的价差往往比空头赚到的还多。 高息理财(理财页"发行",游戏第 15 天起,一个存档只能开一次):定一个日息(2%–10%),付宣传费开张(开张、卷走都是合约调用,要在钱包上签名),下层的人按日息和下层声望往池子里存 CRC,日息越高存得越快。每晚先用新存入的钱付利息,不够从发行钱包补,补不上就挤兑崩盘;池子每晚被取走 3%,池子越大、日息越高越容易被举报,被举报同样崩盘。崩盘时池子被没收。随时可以卷走池子(点两次确认):池子进发行钱包,污点全额(要洗了才好出金)。卷走和崩盘都记诈骗罪证,下层声望清零。风声一栏提示被举报的风险高低。 骗局:插针——有时开门后价格被瞬间打上去或砸下来 15–30%,多数当晚回去一大半,三成是真的;永续标记价只吃一半,别在插针里恐慌割肉。空投(Web3 空投页)——领取要签名,签之前看清授权范围:正规空投不要授权或只要几十的小额授权;要""无上限授权""或远超奖励的大额授权的,就是钓鱼,名字也常是仿冒(0 和 o、1 和 l),一两晚后会把这个钱包里那种币转走。授权列在空投页右边,可以签名撤销,撤销后就转不走了。第三方收益池(理财页"存钱")——日息 1–3%,看得到储备、有没有时间锁、有没有审计,看不到是不是骗局:日息越高越可能跑路,有时间锁、有审计的少一些;正规池储备付不起利息时退本金关闭,骗局池每晚都可能卷款跑路。有时间锁的池子取款要等两天。假客服——自称 Poinbase 客服上门,要你把 CRC 转到""安全地址"":Poinbase 不会上门,也不会要你转账。伪造转账——用币付款的顾客开口说""已经转了,给你看截图,快给货""的,币不会到账;正常顾客会说链上确认要一会儿。 行情图:Poinbase 现货页、Web3 交易页可以切换各个币的日 K(永续页是当前品种,预测页是 PSC),绿涨红跌,黄线是 7 日均线(永续资金费按它算),下方的柱子是成交量(灰色是市场,青色是你自己:现货、DEX、铸销、Ponero 兑换、永续开平仓都算)。价格波动越大市场成交越多;插针会留下长影线。 剧情联动:游戏里几条剧情线的选择会改变这里的市场,第二天报纸会登出来,市场要过几天才反应完。塞尔皮科的证据交给革命军:CRA 补贴池注资、30 天内螺旋概率减半、SPARK 五晚内涨 20%;交给黑市:CRT 脱锚和镇压时被出卖的概率减半;交给治安部:30 天内出金审查、混币器制裁、操纵和内幕查处都更严。埃莉诺泄露数据盘:CRC 托管银行减记的概率翻倍、SPARK 涨 15%;交回数据盘:CRC 脱锚概率减半。伦警官被捕:14 天内出金审查、操纵和内幕查处更严。 混币器运营者 Tumbler(解锁混币器、第 30 天起):他会上门几次,最后求你帮忙藏密钥盘。藏好、到时还给他:混币器手续费减半、匿名集变大,另有谢礼;但密钥盘是违禁品,期间被搜出来会记罪证。举报他:拿赏金和治安部声望,混币器永久关停(在途的照常提回)。卖给黑市:拿一笔 CRT(一半带污点)和黑市声望,之后混币器手续费上涨、跑路概率变大。 出金审查(界面不显示额度和命中概率,规则如下):从 Poinbase 提取 CRC 换回信用点时按当天房租判定——单笔超过 5 倍房租、近 7 天累计超过 15 倍房租,超出的部分按比例抬高被查概率;污点占这笔金额的比例达到 10% 起,概率另加「比例 × 1.5」;资金来自近期混币器提回或被标记的钱包,再加 30%;概率最高 90%。命中后:污点占比低于 30% 为轻度,没收污点部分,不记罪证;达到 30% 为重度,没收污点部分,并把污点额记为销赃罪证。没命中则全额到账。出金收 0.2% 手续费,超出成本的收益另征 8% 税。拆成小额、分几天提、先洗再提都能压低概率,但额度和概率不会提示,要自己估。销毁钱包前必须自己把币转出,持仓和存款也要先取出:留在里面的会随钱包一起没有。 黑市购买:左边选卖家,右边是货架,点"购买"后在付款面板里定数量、付款方式和币种。每类卖家收的币不同:硬件、技术类收 PSC 和 CRT,军火、药物、化学品、证件、奢侈品、个人卖家收 CRT 和匿名币,农业、养殖、水务、酿酒收 PSC 和 CRA,平台现货收 PSC、CRT、CRA。手里没有它收的币,可以用 Web3 内置的自动换币:从钱包里别的币换出,多付 8% 滑点,签名一次完成;也可以自己先去 DEX 换,滑点小得多,但要多一步。上架费同样在付款时选币。 商店购物车:点货架上的"购买"是加入购物车,右下角的悬浮购物车显示件数,点开进结算页。结算页左边是购物车详情(按商家分组,可增减数量、删除,接受提前放款的商家可选托管或提前放款),右边是付款:统一结算选一种币、一次合约签名付清所有商家,商家不收这种币的部分自动按 8% 滑点换币;逐家付款则每家单独选它收的币、生成账单、在钱包里转账。" courier.odd1,……东西到了。 courier.odd2,"(他的手一直放在口袋里)在这儿签个字。" courier.sign,签收 @@ -604,7 +604,7 @@ predict.era,矿机时代 predict.pos3,均价 {0} 现价 {1} predict.pos4,当前卖出可得 {0} intel.h,情报贩子 -intel.locked,需要 Web3 黑市和声望 {0}。 +intel.locked,需要 Web3 商店和黑市声望 {0}。 intel.brief.buy,购买局势简报({0} CRT) intel.brief.none,尚未购买简报。 intel.brief.day,第 {0} 天的简报 @@ -795,3 +795,21 @@ bpay.swap.need,"付 {0} {1},含滑点 {2}%" bpay.swap.btn,自动换币并付款 bpay.swap.sum,"{0}:自动换币,付 {2} {1},换成 {3} 后下单" bpay.back,返回 +cart.fab,购物车 {0} +cart.h,购物车 +cart.empty,购物车是空的。 +cart.added,已加入购物车:{0} +cart.all,统一结算 +cart.each,逐家付款 +cart.back,返回商店 +cart.nocoin,钱包里没有可用的币。 +bpay.coin2,付款币种(钱包里的币) +cart.swapped,"其中 {0} 需换币(含 {1}% 滑点)" +cart.pay,统一结算(签名一次) +cart.done,"已结算 {0} 件。" +cart.partial,"已结算 {0} 件,{1} 件没成(库存或余额不足)。" +cart.short,"{0}:钱包里的币不够换,没有结算。" +cart.sum,"商店购物车 {0} 件,付 {2} {1}(含自动换币)" +black.info.accepts,收币:{0} +black.info.advance.yes,接受提前放款 +black.info.advance.no,不接受提前放款 diff --git a/src/Decentralized/Session.cs b/src/Decentralized/Session.cs index 0893be0..6c5cadd 100644 --- a/src/Decentralized/Session.cs +++ b/src/Decentralized/Session.cs @@ -120,6 +120,7 @@ namespace Decentralized { Data = null; WalletWindow.Reset(); + TerminalWindow.ClearCart(); try { string json = ModHelper.GetModData(ModInfo.Id, Key); diff --git a/src/Decentralized/TerminalWindow.cs b/src/Decentralized/TerminalWindow.cs index 1cdc1b4..89b5cf5 100644 --- a/src/Decentralized/TerminalWindow.cs +++ b/src/Decentralized/TerminalWindow.cs @@ -4,6 +4,7 @@ using System.Globalization; using System.Linq; using UnityEngine; using UnityEngine.UI; +using TMPro; using Decentralized.Domain; namespace Decentralized @@ -69,6 +70,7 @@ namespace Decentralized b.End(); var win = b.Show(); Log.Guard("交易终端外观", () => PledgerSkin.Apply(win, screen, bezel, paper, _picked, _clear, _rows)); + Log.Guard("购物车按钮", () => CartFab(win)); } private static void Go(Page p) { _page = p; _message = null; _edit = null; Open(); } @@ -1179,10 +1181,11 @@ namespace Decentralized { var tab = t; string name = L.T("black.sub." + t.ToString().ToLowerInvariant()); - PledgerSkin.Pick(b, name, tab == _blackTab, () => { _blackTab = tab; _message = null; _edit = null; _pay = null; Open(); }, _picked); + PledgerSkin.Pick(b, name, tab == _blackTab, () => { _blackTab = tab; _message = null; _edit = null; _pay = null; _checkout = false; Open(); }, _picked); } b.End(); if (d.Black.Closed(day)) { b.AddLabel(L.T("black.rugged", d.Black.ClosedUntil - day + 1), "black_rugged_note"); return; } + if (_checkout) { CheckoutPage(b, d); return; } if (_pay != null && _blackTab != BlackTab.Buy) { PayPanel(b); return; } if (_edit != null) { EditPage(b); return; } if (_blackTab == BlackTab.Orders) { OrdersPage(b, day); return; } @@ -1209,13 +1212,13 @@ namespace Decentralized for (int i = 0; i < names.Count; i++) { int idx = i - 1; - TableRow(b, SellerW, new[] { SellerW - 8f }, new[] { TextAnchor.MiddleLeft }, new[] { names[i] }, idx == _merchant, () => { _merchant = idx; _pay = null; _message = null; Open(); }); + TableRow(b, SellerW, new[] { SellerW - 8f }, new[] { TextAnchor.MiddleLeft }, new[] { names[i] }, idx == _merchant, () => { _merchant = idx; _message = null; Open(); }); } b.End(); b.BeginPanel(ShelfW, -1f, TextAnchor.UpperLeft, 0f, 4f); _clear.Add(b.Last.image); - if (_pay != null) PayPanel(b); - else if (platform) PlatformShelf(b, d); + ShopInfo(b, d, platform ? null : sellers[_merchant]); + if (platform) PlatformShelf(b, d); else MerchantShelf(b, d); b.End(); b.End(); @@ -1230,7 +1233,6 @@ namespace Decentralized private static void PlatformShelf(CustomUIBuilder b, SaveData d) { - b.AddLabel(L.T("black.platform.line"), "platform_line_dim"); if (d.Black.Offers.Count == 0) { b.AddLabel(L.T("black.empty"), "platform_empty_dim"); return; } Shelf(b, d.Black.Offers.Cast().ToList(), (c, g) => { @@ -1238,12 +1240,7 @@ namespace Decentralized GoodHead(c, g, L.T("black.stock", offer.Qty)); c.AddLabel(L.T("black.price", offer.Price)); c.AddFlexibleSpace(); - c.AddButton(L.T("black.buy"), () => OpenPay(new PayDraft - { - Title = ItemName(offer.Item), Address = d.Address("platform"), Accepted = Merchants.PlatformAccepts, MaxQty = offer.Qty, - Credits = (q, m) => offer.Price * q, - Execute = (asset, q, m, pw) => BuyOffer(offer, q, asset, pw), - })); + c.AddButton(L.T("black.buy"), () => AddToCart(-1, offer)); }, 3); } @@ -1458,6 +1455,273 @@ namespace Decentralized Open(); } + // ——— 购物车 ——— + + private sealed class CartLine { public int Seller; public BmGood Good; public int Qty; } + private static readonly List _cart = new List(); + private static bool _checkout, _ckEach; + private static string _ckCoin; + private static readonly Dictionary _ckMode = new Dictionary(); + private static readonly Dictionary _ckGroupCoin = new Dictionary(); + + /// 读档或换局时清空购物车(货架对象已经不是同一批了)。 + public static void ClearCart() { _cart.Clear(); _checkout = false; _ckMode.Clear(); _ckGroupCoin.Clear(); } + + private static int StockOf(BmGood g) => g is BmOffer o ? o.Qty : ((BmListing)g).Qty; + + /// 丢掉已经下架的货,数量压到库存以内。 + private static void CartValidate(SaveData d) + { + _cart.RemoveAll(l => l.Good is BmOffer o ? !d.Black.Offers.Contains(o) : !d.Black.Catalog.Contains((BmListing)l.Good) || l.Seller >= d.Black.Sellers.Count); + foreach (var l in _cart) l.Qty = Math.Max(1, Math.Min(l.Qty, StockOf(l.Good))); + } + + private static int CartCount() => _cart.Sum(l => l.Qty); + + private static void AddToCart(int seller, BmGood g) + { + var line = _cart.Find(l => l.Good == g); + if (line == null) _cart.Add(new CartLine { Seller = seller, Good = g, Qty = 1 }); + else line.Qty = Math.Min(StockOf(g), line.Qty + 1); + _message = L.T("cart.added", ItemName(g.Item)); + Open(); + } + + private static string[] AcceptsOf(SaveData d, int seller) => seller < 0 ? Merchants.PlatformAccepts : Merchants.Accepts(d.Black.Sellers[seller].Type); + private static string AddressOf(SaveData d, int seller) => seller < 0 ? d.Address("platform") : d.Black.Sellers[seller].Name; + private static string ShopName(SaveData d, int seller) => seller < 0 ? L.T("merchant.Platform") : MerchantLabel(d.Black.Sellers[seller], true); + private static PayMode ModeOf(SaveData d, int seller) => seller >= 0 && d.Black.Sellers[seller].Advance && _ckMode.TryGetValue(seller, out var m) ? m : PayMode.Escrow; + + private static double LineCredits(SaveData d, CartLine l) => + l.Good is BmOffer o ? o.Price * l.Qty : BlackMarket.Pay(BlackMarket.OrderTotal(((BmListing)l.Good).Price, l.Qty), ModeOf(d, l.Seller)); + + private static double GroupCredits(SaveData d, int seller) => _cart.Where(l => l.Seller == seller).Sum(l => LineCredits(d, l)); + + /// 悬浮购物车:商店页右下角一个常驻的小按钮,显示件数,点开进结算页。 + private static void CartFab(CustomUIWindow win) + { + if (win?.root == null) return; + var old = win.root.transform.Find("pd_cart_fab"); + bool show = _page == Page.Web3 && _web3Tab == Web3Tab.Black && !_checkout && WalletWindow.Pending == null && Unlock.BlackUnlocked; + if (!show) { if (old != null) UnityEngine.Object.Destroy(old.gameObject); return; } + if (old != null) UnityEngine.Object.DestroyImmediate(old.gameObject); + var go = new GameObject("pd_cart_fab", typeof(RectTransform), typeof(CanvasRenderer), typeof(Image), typeof(Button), typeof(LayoutElement)); + go.transform.SetParent(win.root.transform, false); + go.GetComponent().ignoreLayout = true; + var rt = (RectTransform)go.transform; + rt.anchorMin = rt.anchorMax = new Vector2(1f, 0f); + rt.pivot = new Vector2(1f, 0f); + rt.sizeDelta = new Vector2(132f, 36f); + rt.anchoredPosition = new Vector2(-34f, 34f); + var img = go.GetComponent(); + PledgerSkin.KeyShape(img, CartCount() > 0 ? PledgerSkin.Ink : PledgerSkin.Key); + var btn = go.GetComponent