Stage 6.3: RatDigg ASIC miners, miner dealers on the black market, miner era event
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
b249747855
commit
7d13ae2fe8
18 files changed
+395
-19
No files matched your search
@@ -152,6 +152,10 @@ namespace Decentralized.Domain
|
||||
public sealed class Network
|
||||
{
|
||||
public double NpcHash = Tuning.NpcHash0;
|
||||
/// <summary>NPC 矿工每 H 的耗电(kJ):矿机时代到来后减半,他们能挖得更久,全网算力均衡点升高。</summary>
|
||||
public double NpcKj = Tuning.NpcKjPerH;
|
||||
public int EraDay = -1, EraWarnDay = -1;
|
||||
public bool EraWarned, EraDone;
|
||||
public double Reward = Tuning.BlockReward;
|
||||
/// <summary>停电、动荡等事件对 NPC 算力的可用比例。</summary>
|
||||
public double Availability = 1.0;
|
||||
@@ -164,6 +168,25 @@ namespace Decentralized.Domain
|
||||
return Reward * playerHash / total * (1 - Tuning.PoolFee);
|
||||
}
|
||||
|
||||
public enum EraStep { None, Warn, Start }
|
||||
|
||||
/// <summary>
|
||||
/// "矿机时代":第一次调用时在 EraMin–EraMax 天之间随机定一天(至少留出预兆的天数),提前 4–7 天预兆,到点 NPC 耗电效率翻倍,永久。
|
||||
/// 返回今晚发生的一步(预兆 / 开始)。
|
||||
/// </summary>
|
||||
public EraStep EraNight(int day, Rng rng)
|
||||
{
|
||||
if (EraDone) return EraStep.None;
|
||||
if (EraDay < 0)
|
||||
{
|
||||
EraDay = Math.Max(day + Tuning.EraWarnMax + 1, rng.Range(Tuning.EraMin, Tuning.EraMax));
|
||||
EraWarnDay = EraDay - rng.Range(Tuning.EraWarnMin, Tuning.EraWarnMax);
|
||||
}
|
||||
if (day >= EraDay) { NpcKj *= Tuning.EraKjMult; EraDone = true; return EraStep.Start; }
|
||||
if (!EraWarned && day >= EraWarnDay) { EraWarned = true; return EraStep.Warn; }
|
||||
return EraStep.None;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 夜间:第 HalvingDays 天的倍数时减半;NPC 矿工按"每 H 收益 / 电费"与目标比的偏离扩张或关机,每晚最多 ±5%。
|
||||
/// </summary>
|
||||
@@ -172,7 +195,7 @@ namespace Decentralized.Domain
|
||||
if (day > 0 && day % Tuning.HalvingDays == 0) Reward /= 2;
|
||||
double total = NpcHash * Availability + playerHash;
|
||||
double perH = Reward * price / total;
|
||||
double ratio = perH / (Tuning.NpcKjPerH * Tuning.ElecPrice);
|
||||
double ratio = perH / (NpcKj * Tuning.ElecPrice);
|
||||
double adj = Math.Max(-Tuning.NpcAdj, Math.Min(Tuning.NpcAdj, Tuning.NpcAdj * (ratio / Tuning.NpcTargetRatio - 1)));
|
||||
NpcHash *= 1 + adj;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user