Label bar in the magnifier tray: seller's claims per label, point out, edit with a labeler
Six labels (model, fan, contacts, bracket, back print, sticker). Dealers state claims (honest tell the truth, middlemen hide 70%, scammers hide everything and name the stamped model); the price follows claims until a label is pointed out, then follows the real state. Pointing at a fake's evidence exposes the model label too. A wrong accusation costs reputation. Owned cards can have claims edited freely with a labeler present; a buyer spots each hidden flaw with 35% chance, which exposes it and costs reputation. Dimensions are additive percent adjustments on the model price. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
f93dbc6eec
commit
b359a00789
9 files changed
+452
-174
No files matched your search
@@ -62,20 +62,9 @@ namespace Decentralized.Domain
|
||||
return new CardLook { Fan = D(0), Fingers = D(1), Bracket = D(2), Print = D(3), Sticker = D(4) };
|
||||
}
|
||||
|
||||
// 外观维度对应卡的真实状态:价格、损耗、暴毙概率都随之变化,所以看外观就是在估价
|
||||
private static readonly double[] FanValue = { 1.00, 0.96, 0.88 }, FanWear = { 1.00, 1.10, 1.30 }, FanDeath = { 1.00, 1.00, 1.20 };
|
||||
private static readonly double[] FingerValue = { 1.00, 0.96, 0.88 }, FingerDeath = { 1.00, 1.10, 1.30 };
|
||||
|
||||
/// <summary>外观对价值的折扣:风扇积灰 −4%、缺角 −12%;金手指发暗 −4%、氧化 −12%;挡板划痕 −2%;封条缺失(开过封)−6%。</summary>
|
||||
public double ValueFactor => ValueFactorOf(AllDims);
|
||||
|
||||
/// <summary>外观折扣的维度位:1 风扇、2 金手指、4 挡板划痕、8 封条缺失。</summary>
|
||||
public const int DimFan = 1, DimFingers = 2, DimScratch = 4, DimSeal = 8, AllDims = 15;
|
||||
|
||||
/// <summary>只计入 mask 里的维度的折扣:贩子报价时先装作这些问题都没有,玩家指出一项才扣一项。</summary>
|
||||
public double ValueFactorOf(int mask) =>
|
||||
((mask & DimFan) != 0 ? FanValue[Fan] : 1.0) * ((mask & DimFingers) != 0 ? FingerValue[Fingers] : 1.0)
|
||||
* ((mask & DimScratch) != 0 && Bracket == 1 ? 0.98 : 1.0) * ((mask & DimSeal) != 0 && Sticker == 2 ? 0.94 : 1.0);
|
||||
// 外观维度对应卡的真实状态:损耗、暴毙概率随之变化,价值走标签(见 CardLabels)
|
||||
private static readonly double[] FanWear = { 1.00, 1.10, 1.30 }, FanDeath = { 1.00, 1.00, 1.20 };
|
||||
private static readonly double[] FingerDeath = { 1.00, 1.10, 1.30 };
|
||||
|
||||
/// <summary>每晚损耗倍数:风扇积灰散热差 ×1.1,缺角 ×1.3。</summary>
|
||||
public double WearFactor => FanWear[Fan];
|
||||
@@ -131,22 +120,8 @@ namespace Decentralized.Domain
|
||||
return Math.Max(1, (long)Math.Round(spec.Price * f));
|
||||
}
|
||||
|
||||
/// <summary>真实价值(芯片型号 + 健康度 + 外观折扣)。</summary>
|
||||
public static long True(Unit u) => Math.Max(1, (long)Math.Round(Of(u.FakeOf ?? u.Model, u.Health) * u.Appearance.ValueFactor));
|
||||
|
||||
public const double ScamDiscount = 0.90;
|
||||
|
||||
/// <summary>
|
||||
/// 贩子的报价:装作成色没问题(外观折扣只计玩家已指出的维度),在此之上加价 markupPct%。
|
||||
/// 没拆穿的假卡按标称型号的价再打九折;拆穿之后按真实芯片算,和真卡一样。
|
||||
/// </summary>
|
||||
public static long Quote(Unit u, int markupPct, int pointedDims, bool exposed)
|
||||
{
|
||||
bool fakeHidden = u.FakeOf != null && !exposed;
|
||||
double v = Of(fakeHidden ? u.Model : (u.FakeOf ?? u.Model), u.Health) * u.Appearance.ValueFactorOf(pointedDims);
|
||||
v *= fakeHidden ? ScamDiscount : 1 + markupPct / 100.0;
|
||||
return Math.Max(1, (long)Math.Round(v));
|
||||
}
|
||||
/// <summary>真实价值:全部标签都按真实情况算。</summary>
|
||||
public static long True(Unit u) => CardLabels.Value(u, null, 0);
|
||||
|
||||
/// <summary>标称价:贩子报的价,按标称型号算;二手卡也折旧,但只按贩子"自称"的健康度。</summary>
|
||||
public static long Quoted(Unit u, double claimedHealth) => Of(u.Model, claimedHealth);
|
||||
|
||||
Reference in new issue
Block a user