终端窗口可调大小(默认 1200×900)与布局放宽;mod 设置:界面、剧情、难度
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
fa8f416545
commit
861acac240
26 files changed
+302
-45
No files matched your search
@@ -114,7 +114,7 @@ namespace Decentralized.Domain
|
||||
/// <summary>下单实付(信用点):托管 = 订单价 + 托管费;提前放款 = 订单价打折。</summary>
|
||||
public static int Pay(int price, PayMode m) => m == PayMode.Escrow ? price + EscrowFee(price) : (int)Math.Round(price * (1 - Tuning.BmAdvanceDiscount));
|
||||
|
||||
public double RugChance => Math.Min(Tuning.BmRugMax, Tuning.BmRugBase + Held / 10000.0 * Tuning.BmRugPerTenK);
|
||||
public double RugChance => Scales.R(Math.Min(Tuning.BmRugMax, Tuning.BmRugBase + Held / 10000.0 * Tuning.BmRugPerTenK));
|
||||
|
||||
/// <summary>每周必有的"矿工路线"商家类型(从中抽 2 家),其余按全部类型抽。</summary>
|
||||
private static readonly MerchantType[] Core = { MerchantType.GpuNew, MerchantType.GpuUsed, MerchantType.Rigs, MerchantType.Modules };
|
||||
@@ -232,7 +232,7 @@ namespace Decentralized.Domain
|
||||
if (scam && rng.Chance(Tuning.BmForumScamHint)) Forum.Add("scam:" + s.Name);
|
||||
}
|
||||
for (int i = 0; i < Sellers.Count; i++) Catalog.AddRange(MerchantGoods(i, Sellers[i], day, rep, rng, value));
|
||||
if (RugChance > Tuning.BmRugBase * Tuning.BmForumRugFactor) Forum.Add("rug");
|
||||
if (RugChance > Scales.R(Tuning.BmRugBase * Tuning.BmForumRugFactor)) Forum.Add("rug");
|
||||
}
|
||||
|
||||
/// <summary>目录里全部货按订单价算的总值(信用点),用来核对每周周转量。</summary>
|
||||
|
||||
@@ -165,7 +165,7 @@ namespace Decentralized.Domain
|
||||
{
|
||||
if (playerHash <= 0) return 0;
|
||||
double total = NpcHash * Availability + playerHash;
|
||||
return Reward * playerHash / total * (1 - Tuning.PoolFee);
|
||||
return Reward * playerHash / total * (1 - Tuning.PoolFee) * Scales.Mining;
|
||||
}
|
||||
|
||||
public enum EraStep { None, Warn, Start }
|
||||
|
||||
@@ -81,7 +81,7 @@ namespace Decentralized.Domain
|
||||
var results = new List<MixResult>();
|
||||
foreach (var d in Pending.ToList())
|
||||
{
|
||||
if (rng.Chance(Math.Min(1, Tuning.MixerRugChance * StoryMods.Current.MixerRug)))
|
||||
if (rng.Chance(Scales.R(Tuning.MixerRugChance * StoryMods.Current.MixerRug)))
|
||||
{
|
||||
Pending.Remove(d);
|
||||
results.Add(new MixResult { Rugged = true, Asset = d.Asset, Amount = d.Amount });
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
using System;
|
||||
|
||||
namespace Decentralized.Domain
|
||||
{
|
||||
/// <summary>mod 设置里的倍率(全局,不随存档)。接入层读设置后写进来;领域层在对应概率和产出处乘上。</summary>
|
||||
public static class Scales
|
||||
{
|
||||
/// <summary>风险倍率:骗局、跑路、钱包投毒、地址劫持、钓鱼的发生概率。</summary>
|
||||
public static double Risk = 1;
|
||||
/// <summary>挖矿产出倍率:玩家矿机拿到的区块奖励。</summary>
|
||||
public static double Mining = 1;
|
||||
|
||||
/// <summary>概率乘风险倍率,封顶 1。</summary>
|
||||
public static double R(double chance) => Math.Min(1, chance * Risk);
|
||||
|
||||
/// <summary>设置里的倍率档位(“×1.5”)。</summary>
|
||||
public static readonly string[] Choices = { "×0.5", "×1", "×1.5", "×2" };
|
||||
public const string Default = "×1";
|
||||
|
||||
public static double Parse(string s)
|
||||
{
|
||||
if (s != null && s.StartsWith("×") && double.TryParse(s.Substring(1), System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out var v) && v >= 0) return v;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -75,7 +75,7 @@ namespace Decentralized.Domain
|
||||
/// <summary>新空投。钓鱼的名字常是正规名字的仿冒(一个字符不同),要求对一种币无上限授权,奖励看起来更高。</summary>
|
||||
public Airdrop NewAirdrop(int day, Rng rng, string[] assets)
|
||||
{
|
||||
bool scam = rng.Chance(Tuning.AirdropScam);
|
||||
bool scam = rng.Chance(Scales.R(Tuning.AirdropScam));
|
||||
string name = AirdropNames[rng.Range(0, AirdropNames.Length - 1)];
|
||||
if (scam && rng.Chance(0.6)) name = Typo(name, rng);
|
||||
string asset = assets[rng.Range(0, assets.Length - 1)];
|
||||
@@ -183,7 +183,7 @@ namespace Decentralized.Domain
|
||||
}
|
||||
foreach (var p in Pools.Where(x => !x.Closed).ToList())
|
||||
{
|
||||
if (p.Scam && p.Total > 0 && day > p.OpenDay && rng.Chance(Tuning.YieldRugNightly))
|
||||
if (p.Scam && p.Total > 0 && day > p.OpenDay && rng.Chance(Scales.R(Tuning.YieldRugNightly)))
|
||||
{
|
||||
foreach (var kv in p.Deposits) evs.Add(new ScamEvent { Kind = "rug", Name = p.Name, Wallet = kv.Key, Asset = Assets.CRC, Amount = kv.Value });
|
||||
foreach (var q in p.Pending) evs.Add(new ScamEvent { Kind = "rug", Name = p.Name, Wallet = q.Wallet, Asset = Assets.CRC, Amount = q.Amount });
|
||||
|
||||
@@ -24,7 +24,7 @@ namespace Decentralized.Domain
|
||||
/// <summary>今天来的贩子的类型:骗子越往后越多。</summary>
|
||||
public static DealerKind Kind(int day, Rng rng)
|
||||
{
|
||||
double scam = Math.Min(Tuning.UsedScamMax, Tuning.UsedScamBase + day * Tuning.UsedScamPerDay);
|
||||
double scam = Scales.R(Math.Min(Tuning.UsedScamMax, Tuning.UsedScamBase + day * Tuning.UsedScamPerDay));
|
||||
double r = rng.NextDouble();
|
||||
return r < scam ? DealerKind.Scammer : r < scam + Tuning.UsedMiddlemanShare ? DealerKind.Middleman : DealerKind.Honest;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user