Stage 7.3: NPC scams (wicks, phishing airdrops, rug pools, fake support, forged transfers)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ZHU MINCHAOandClaude Opus 5.5 committed 2026-11-04 08:28:43 +08:00
1 parent 4279d48374
commit 6c5db17758
13 files changed
+691 -11

No files matched your search

+26
View File
@@ -23,6 +23,31 @@ namespace Decentralized.Domain
public double OpenPrice = Tuning.PscStartPrice;
/// <summary>玩家自己的现货大单把价格推高(正)或压低(负)的对数幅度,每晚随价格回归一起衰减。操纵检出和预测盘用它估"没有玩家时的价格"。</summary>
public double PlayerPush;
/// <summary>今天的插针(对数幅度,0 = 没有)和当晚回去的比例(0 = 真跌真涨)。</summary>
public double Wick, WickBack;
/// <summary>夜间结算开始时:插针按比例回去(结算、预测盘读的是回去后的价格)。</summary>
public void UndoWick(int day)
{
if (Wick == 0) return;
Main.SetPrice(Price * Math.Exp(-Wick * WickBack), Tuning.PoolDepth(day));
Wick = 0; WickBack = 0;
}
/// <summary>
/// 插针:开门后价格瞬间被打到一边(大户扫强平、砸盘吸筹),大部分当晚回去,一部分是真的。
/// 标记价用开门前的价格和收盘价平均,强平只吃一半。返回幅度(0 = 今天没有)。
/// </summary>
public double TryWick(Rng rng, int day)
{
Wick = 0; WickBack = 0;
if (!rng.Chance(Tuning.WickChance)) return 0;
double size = rng.Range(Tuning.WickMin, Tuning.WickMax) * (rng.Chance(0.5) ? 1 : -1);
Wick = size;
WickBack = rng.Chance(Tuning.WickReal) ? 0 : rng.Range(Tuning.WickRevertMin, Tuning.WickRevertMax);
Main.SetPrice(Price * Math.Exp(size), Tuning.PoolDepth(day));
return size;
}
public double NeutralPrice => Price * Math.Exp(-PlayerPush);
/// <summary>被查概率:推价幅度(绝对值)超过 ManipFree 后随幅度升高。</summary>
public static double ManipChance(double push)
@@ -113,6 +138,7 @@ namespace Decentralized.Domain
/// </summary>
public void Night(ICollection<MarketEvent> active, Rng rng, int day, Func<string, double> stablePrice)
{
if (Wick != 0) { Main.SetPrice(Price * Math.Exp(-Wick * WickBack), Tuning.PoolDepth(day)); Wick = 0; WickBack = 0; }
PlayerPush *= 1 - Tuning.Revert;
Sentiment *= Math.Exp(Tuning.SentimentKappa * -Math.Log(Sentiment) + rng.Gauss() * Tuning.SentimentVol);
double anchor = Anchor(active);