Wallets: expected-days drain, copy/paste, three-column selectable balances, rename and destroy

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ZHU MINCHAOandClaude Opus 5.5 committed 2026-11-03 23:05:13 +08:00
1 parent 783f73989d
commit 2b781acd82
10 files changed
+178 -22

No files matched your search

+1 -1
View File
@@ -139,7 +139,7 @@ namespace Decentralized.Domain
/// <summary>硬件钱包:最多几个(含主钱包);杰克逊博士的售价与每次进货上架的概率;Web3 商城的价格范围、每周平台现货上架的概率与件数上限;商城货里被投毒的比例。</summary>
public const int WalletMax = 5, WalletJacksonPrice = 240, WalletMallMin = 150, WalletMallMax = 180, WalletMallQtyMax = 2;
public const double WalletJacksonChance = 0.5, WalletMallChance = 0.5, WalletPoisonShare = 0.2;
/// <summary>被投毒的钱包:币的总价值达到 DrainMin 起,每晚有概率被转空;价值越高越快:每晚概率从门槛处的 1 / SlowDays(平均 7 天)按价值线性升到 DrainFull 处的 1(当晚就转走)。</summary>
/// <summary>被投毒的钱包:币的总价值达到 DrainMin 起,每晚有概率被转空;价值越高越快:期望天数从门槛处的 SlowDays(7 天)按价值线性降到 DrainFull 处的 1 天,每晚概率 = 1 / 期望天数。</summary>
public const double WalletDrainMin = 3000, WalletDrainFull = 20000, WalletDrainSlowDays = 7;
/// <summary>主交易对(信用点一侧)的深度随天数增长。</summary>
+10 -6
View File
@@ -18,19 +18,23 @@ namespace Decentralized.Domain
public double Basis;
/// <summary>被执法标记。</summary>
public bool Flagged;
/// <summary>显示名(终端钱包页、硬件钱包标题)。</summary>
/// <summary>钱包编号("钱包 n"),添加时定下,销毁别的钱包也不变。</summary>
public string Name;
/// <summary>玩家起的名字;空时用默认名。</summary>
public string Label;
/// <summary>硬件钱包被动过手脚(供应链投毒):别人手里有助记词。玩家看不到。</summary>
public bool Poisoned;
/// <summary>被投毒的钱包今晚被转空的概率:总价值不到门槛时为 0,越多越高(1–7 天)。</summary>
public static double DrainChance(double value)
/// <summary>被投毒的钱包被转空前的期望天数:门槛处 7 天,按价值线性降到满额处 1 天;不到门槛不会被转。</summary>
public static double DrainDays(double value)
{
if (value < Tuning.WalletDrainMin) return 0;
double slow = 1 / Tuning.WalletDrainSlowDays, t = Math.Min(1, (value - Tuning.WalletDrainMin) / (Tuning.WalletDrainFull - Tuning.WalletDrainMin));
return slow + (1 - slow) * t;
double t = Math.Min(1, (value - Tuning.WalletDrainMin) / (Tuning.WalletDrainFull - Tuning.WalletDrainMin));
return Tuning.WalletDrainSlowDays - (Tuning.WalletDrainSlowDays - 1) * t;
}
/// <summary>被投毒的钱包今晚被转空的概率 = 1 / 期望天数(每晚独立掷一次)。</summary>
public static double DrainChance(double value) => value < Tuning.WalletDrainMin ? 0 : 1 / DrainDays(value);
/// <summary>转空:全部余额(含冻结的)连同污点、成本一起转走,返回转走的价值(信用点)。</summary>
public double Drain(Func<string, double> price)
{