Fold scattered constants into Tuning
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
81b42ac2d3
commit
b28a03f565
8 files changed
+25
-14
No files matched your search
+1
-1
@@ -10,7 +10,7 @@
|
||||
- 低档次的卡也会被冒充:新增废片芯片 RX10(不上架,只作假卡背后的真实芯片)。
|
||||
- 型号档次与实物不符(供电口、风扇数)的卡,摆给顾客时必被看穿并扣信誉(原来 50%),堵住用标签机把低档卡改成高档型号转卖的漏洞。
|
||||
- 显卡型号改名:Probidia RZX → RTX,PMD RZ → RX(RTX 60/70/80/90,RX 70/80/800/900);贴图重新生成。旧存档里的旧型号物品不再识别。
|
||||
- 买家看穿率、信誉扣减封顶收进 `Tuning.cs`。
|
||||
- 散落的常量收进 `Tuning.cs`:买家看穿率与信誉封顶、杰克逊博士上货、二手贩子来访 / 种类 / 加价 / 假卡 / 隐瞒、显卡价值下限、非主交易对套利与深度。型号表、成色折价、外观阈值是数据表,仍留在原文件。
|
||||
- 单元测试 8909 项通过;游戏内只验证了模组正常载入,没有跑到新的假卡、减半随机和币付款溢价的实际画面。
|
||||
|
||||
### 第二阶段(进行中)
|
||||
|
||||
@@ -135,7 +135,7 @@ namespace Decentralized.Domain
|
||||
var c = Claim.Truth(u);
|
||||
if (kind == DealerKind.Honest) return c;
|
||||
c.Model = u.Model;
|
||||
double hide = kind == DealerKind.Scammer ? 1.0 : 0.7;
|
||||
double hide = kind == DealerKind.Scammer ? 1.0 : Tuning.UsedMiddlemanHide;
|
||||
foreach (int r in new[] { RowFan, RowFingers, RowBracket, RowPrint, RowSerial, RowSeal })
|
||||
if (rng.Chance(hide)) c = c.With(r, 0);
|
||||
return c;
|
||||
|
||||
@@ -105,7 +105,7 @@ namespace Decentralized.Domain
|
||||
public static long Of(string model, double health)
|
||||
{
|
||||
var spec = Hardware.Specs[model];
|
||||
double f = 0.25 + 0.75 * Math.Max(0, Math.Min(100, health)) / 100.0;
|
||||
double f = Tuning.CardValueFloor + (1 - Tuning.CardValueFloor) * Math.Max(0, Math.Min(100, health)) / 100.0;
|
||||
return Math.Max(1, (long)Math.Round(spec.Price * f));
|
||||
}
|
||||
|
||||
|
||||
@@ -13,8 +13,8 @@ namespace Decentralized.Domain
|
||||
public static readonly string[] Advanced = { "RTX70", "RX80", "RTX80", "RX800" };
|
||||
public static readonly string[] Flagship = { "RTX90", "RX900" };
|
||||
|
||||
public const int AdvancedFromDay = 10, FlagshipFromDay = 30, SpecialFlagshipFromDay = 20;
|
||||
public const double RigRestockChance = 0.30, AdvancedChance = 0.60, AdvancedSecondChance = 0.30, FlagshipChance = 0.25;
|
||||
public const int AdvancedFromDay = Tuning.DealerAdvancedFromDay, FlagshipFromDay = Tuning.DealerFlagshipFromDay, SpecialFlagshipFromDay = Tuning.DealerSpecialFlagshipFromDay;
|
||||
public const double RigRestockChance = Tuning.DealerRigRestock, AdvancedChance = Tuning.DealerAdvanced, AdvancedSecondChance = Tuning.DealerAdvancedSecond, FlagshipChance = Tuning.DealerFlagship;
|
||||
|
||||
public static List<string> Stock(int day, bool ownsRig, bool specialStock, Rng rng)
|
||||
{
|
||||
|
||||
@@ -22,8 +22,8 @@ namespace Decentralized.Domain
|
||||
/// <summary>开门时的参考价,夜间用它和收盘价算当日均价(合约的标记价)。</summary>
|
||||
public double OpenPrice = Tuning.PscStartPrice;
|
||||
|
||||
public const double ArbRate = 0.5; // 非主交易对每晚被拉回参考价的比例
|
||||
public const double SideDepthShare = 0.3; // 非主交易对的深度占主交易对的比例
|
||||
public const double ArbRate = Tuning.SideArbRate; // 非主交易对每晚被拉回参考价的比例
|
||||
public const double SideDepthShare = Tuning.SideDepthShare; // 非主交易对的深度占主交易对的比例
|
||||
|
||||
public static Market CreateDefault(int day)
|
||||
{
|
||||
|
||||
@@ -71,6 +71,18 @@ namespace Decentralized.Domain
|
||||
/// <summary>顾客验货:说法里每一项隐瞒被看穿的概率;型号档次不符(供电口、风扇数一眼可见)必被看穿;一次看穿最多扣的信誉。</summary>
|
||||
public const double CustomerSpotChance = 0.50, CustomerSpotTierMismatch = 1.0;
|
||||
public const int RepLossMax = 25;
|
||||
/// <summary>杰克逊博士上货:进阶 / 旗舰货的起始天(有特殊进货渠道时旗舰第 20 天起),矿架补货、进阶货(及第二件)、旗舰货的概率。</summary>
|
||||
public const int DealerAdvancedFromDay = 10, DealerFlagshipFromDay = 30, DealerSpecialFlagshipFromDay = 20;
|
||||
public const double DealerRigRestock = 0.30, DealerAdvanced = 0.60, DealerAdvancedSecond = 0.30, DealerFlagship = 0.25;
|
||||
/// <summary>二手贩子:每天来访概率与最早来访日;骗子占比 = 基础 + 每天增量,封顶;中间商占比;中间商加价;中间商 / 骗子夹带假卡的比例;
|
||||
/// 中间商把每项问题说成没问题的概率(骗子全说)。</summary>
|
||||
public const double UsedVisitChance = 0.05, UsedScamBase = 0.10, UsedScamPerDay = 0.004, UsedScamMax = 0.30, UsedMiddlemanShare = 0.30;
|
||||
public const double UsedMiddlemanMarkup = 0.08, UsedFakeMiddleman = 0.10, UsedFakeScammer = 0.45, UsedMiddlemanHide = 0.70;
|
||||
public const int UsedFirstDay = 3;
|
||||
/// <summary>显卡价值 = 型号定价 ×(下限 + (1 − 下限) × 健康度)。</summary>
|
||||
public const double CardValueFloor = 0.25;
|
||||
/// <summary>非主交易对每晚被拉回参考价的比例,及其深度占主交易对的比例。</summary>
|
||||
public const double SideArbRate = 0.5, SideDepthShare = 0.3;
|
||||
/// <summary>单个金融违规事件记入的罪证上限。</summary>
|
||||
public const double CrimeEventCap = 400;
|
||||
|
||||
|
||||
@@ -18,15 +18,15 @@ namespace Decentralized.Domain
|
||||
|
||||
public static class UsedDealers
|
||||
{
|
||||
public const double MiddlemanMarkup = 0.08;
|
||||
public const double FakeShareMiddleman = 0.10, FakeShareScammer = 0.45;
|
||||
public const double MiddlemanMarkup = Tuning.UsedMiddlemanMarkup;
|
||||
public const double FakeShareMiddleman = Tuning.UsedFakeMiddleman, FakeShareScammer = Tuning.UsedFakeScammer;
|
||||
|
||||
/// <summary>今天来的贩子的类型:骗子越往后越多。</summary>
|
||||
public static DealerKind Kind(int day, Rng rng)
|
||||
{
|
||||
double scam = Math.Min(0.30, 0.10 + day * 0.004);
|
||||
double scam = Math.Min(Tuning.UsedScamMax, Tuning.UsedScamBase + day * Tuning.UsedScamPerDay);
|
||||
double r = rng.NextDouble();
|
||||
return r < scam ? DealerKind.Scammer : r < scam + 0.30 ? DealerKind.Middleman : DealerKind.Honest;
|
||||
return r < scam ? DealerKind.Scammer : r < scam + Tuning.UsedMiddlemanShare ? DealerKind.Middleman : DealerKind.Honest;
|
||||
}
|
||||
|
||||
/// <summary>能出现在二手市场上的型号:按天数放开,旗舰第 30 天起。</summary>
|
||||
|
||||
@@ -12,8 +12,7 @@ namespace Decentralized
|
||||
public static class UsedDealerClient
|
||||
{
|
||||
public const string Appraisal = "pd_gpu_appraisal";
|
||||
private const double VisitChance = 0.05;
|
||||
private static int lastVisitDay = -1;
|
||||
private static int lastVisitDay = -1;
|
||||
|
||||
public static void Subscribe()
|
||||
{
|
||||
@@ -55,7 +54,7 @@ namespace Decentralized
|
||||
Log.Guard("二手贩子", () =>
|
||||
{
|
||||
int day = StoreStation.GetDayCounter();
|
||||
if (day < 3 || day == lastVisitDay || !Session.Data.Rng.Chance(VisitChance)) return;
|
||||
if (day < Tuning.UsedFirstDay || day == lastVisitDay || !Session.Data.Rng.Chance(Tuning.UsedVisitChance)) return;
|
||||
lastVisitDay = day;
|
||||
manager.AddClient(Create(UsedDealers.Kind(day, Session.Data.Rng)));
|
||||
});
|
||||
|
||||
Reference in new issue
Block a user