Black market merchant shelves, bulk discount, bulk merchants, volume-driven taint, list-all
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
d35425933c
commit
d6b344f70b
11 files changed
+279
-60
No files matched your search
@@ -56,7 +56,7 @@ namespace Decentralized
|
||||
if (it == null || it.identifier == null) return null;
|
||||
if (Items.IsGpu(it)) return "gpu:" + Items.ToUnit(it).Model;
|
||||
string id = it.identifier;
|
||||
return BlackMarket.Pool.Any(x => x.Key == id) || BlackMarket.TechPool.Contains(id) ? id : null;
|
||||
return BlackMarket.Pool.Any(x => x.Key == id) || BlackMarket.PharmaPool.Any(x => x.Key == id) || BlackMarket.TechPool.Contains(id) ? id : null;
|
||||
}
|
||||
|
||||
public static System.Collections.Generic.List<GameItem> Sellable() =>
|
||||
@@ -81,7 +81,7 @@ namespace Decentralized
|
||||
if (force) d.Black.RefreshedDay = -999;
|
||||
if (!d.Black.Refresh(day, rep, d.Rng, Value)) return false;
|
||||
d.Black.RefreshOrders(day, rep, d.Rng, Value);
|
||||
Log.Info($"黑市刷新(第 {day} 天):现货 {d.Black.Offers.Count} 种,订单目录 {d.Black.Catalog.Count} 种,高科技 {d.Black.Offers.Count(o => o.Kind == GoodKind.Tech)},显卡 {d.Black.Offers.Count(o => o.Kind == GoodKind.Gpu)}");
|
||||
Log.Info($"黑市刷新(第 {day} 天):现货 {d.Black.Offers.Count} 种,商家 {d.Black.Sellers.Count} 家({string.Join("/", d.Black.Sellers.Select(x => x.Type))}),货架 {d.Black.Catalog.Count} 种共 {d.Black.CatalogValue:0} 信用点,高科技 {d.Black.Offers.Count(o => o.Kind == GoodKind.Tech)},显卡 {d.Black.Offers.Count(o => o.Kind == GoodKind.Gpu)}");
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -195,9 +195,9 @@ namespace Decentralized
|
||||
var d = Session.Data;
|
||||
foreach (var o in d.Black.Ready.Where(x => !x.Controlled).ToList())
|
||||
{
|
||||
Items.Give(Make(o.Item, o.Model, o.FakeOf, o.Health));
|
||||
for (int i = 0; i < o.Count; i++) Items.Give(Make(o.Item, o.Model, o.FakeOf, o.Health));
|
||||
d.Black.Deliver(o);
|
||||
Log.Info($"黑市快递:{o.Item}{(o.FakeOf != null ? "(假卡,真身 " + o.FakeOf + ")" : "")} 已放进储藏区");
|
||||
Log.Info($"黑市快递:{o.Item} ×{o.Count}{(o.FakeOf != null ? "(假卡,真身 " + o.FakeOf + ")" : "")} 已放进储藏区");
|
||||
}
|
||||
Session.Save();
|
||||
}
|
||||
|
||||
@@ -58,6 +58,19 @@ namespace Decentralized
|
||||
BlackDelivery.Restock(d, StoreStation.GetDayCounter(), true);
|
||||
Log.Info($"黑市:声望 {StoreReputation.GetBMReputation()},上架 {d.Black.Offers.Count} 种:{string.Join(", ", d.Black.Offers.Select(o => o.Item + "×" + o.Qty + "@" + o.Price))},解锁 {Unlock.BlackUnlocked}");
|
||||
}));
|
||||
ModHelper.AddDebugFunction(ModInfo.Id, ModInfo.Name, "Black market sample (test)", () => Log.Guard("黑市抽样(测试)", () =>
|
||||
{
|
||||
var d = Session.Data;
|
||||
int day = StoreStation.GetDayCounter();
|
||||
var vals = new System.Collections.Generic.List<double>();
|
||||
var tech = new System.Collections.Generic.List<double>();
|
||||
for (int i = 0; i < 60; i++)
|
||||
{
|
||||
BlackDelivery.Restock(d, day, true);
|
||||
vals.Add(d.Black.CatalogValue);
|
||||
}
|
||||
Log.Info($"黑市抽样:60 周货架总值 平均 {vals.Average():0},最小 {vals.Min():0},最大 {vals.Max():0}");
|
||||
}));
|
||||
ModHelper.AddDebugFunction(ModInfo.Id, ModInfo.Name, "Black market events (test)", () => Log.Guard("黑市事件(测试)", () =>
|
||||
{
|
||||
var d = Session.Data;
|
||||
@@ -68,7 +81,7 @@ namespace Decentralized
|
||||
var l = d.Black.Catalog.FirstOrDefault();
|
||||
if (l != null)
|
||||
{
|
||||
var o = d.Black.Place(l, PayMode.Escrow, w, Assets.CRT, day, Session.Price);
|
||||
var o = d.Black.Place(l, 1, PayMode.Escrow, w, Assets.CRT, day, Session.Price);
|
||||
if (o != null) { o.State = OrderState.Ready; o.Controlled = true; }
|
||||
}
|
||||
Log.Info($"黑市事件(测试):追查 300 今晚到期,假卡上架 8 件,受控订单 {d.Black.Orders.Count(x => x.Controlled)} 个");
|
||||
|
||||
@@ -224,12 +224,12 @@ black.desk.in,Into Ponero
|
||||
black.desk.out,Out of Ponero
|
||||
black.desk.go,Swap
|
||||
black.desk.fail,Swap failed: balance, limit or amount is wrong.
|
||||
black.sub.orders,Orders
|
||||
black.sub.orders,Merchants
|
||||
black.sub.mine,My orders & intel
|
||||
black.rugged,"The platform is down; nobody will reopen for {0} more days."
|
||||
black.seller,"{0}, {1} trades, {2}%"
|
||||
black.orders.h,Order catalog
|
||||
black.order,"Order ({0} days)"
|
||||
black.order,Order
|
||||
black.mode.Escrow,Escrow
|
||||
black.mode.Advance,Advance release
|
||||
black.ordered,"Ordered: {0}, due day {1}."
|
||||
@@ -270,7 +270,7 @@ black.kind.Contraband.3,Contraband (high)
|
||||
black.kind.Tech,High-tech (markup)
|
||||
nightlog.bm.ready,"Black market: {0} arrived; a courier will come by once you open."
|
||||
item.web3guide.name,Web3 Handbook
|
||||
item.web3guide.desc,"Bank: depositing turns credits into CRC; withdrawing turns CRC back into credits and goes through compliance screening. Trading: buys are paid in the quote coin, sells in the traded coin. Mixer: pick a coin, amount and rounds; each round takes a fee and lowers taint, rounds equal days of waiting, and the coins come back to the same address; the more you deposit, the worse the cleaning. Black market: coin only, no CRC, 30% above normal channels, with extra markup on high-tech goods and GPUs; the coin you pay leaves its share of taint with the seller and the goods carry no stolen tag; GPUs may be fake, inspect them yourself. Orders are cheaper than spot but take days and may be intercepted; escrow costs 5%, is released on delivery and refunded if the seller runs; advance release takes another 10% off, but a scammer keeps the money and only sellers with 30+ trades accept; the platform itself can rug, be taken over by enforcement, or a seller can be arrested, after which your orders get traced and crime logged; forum rumors can be warnings. An intercepted parcel sometimes turns into enforcement at your door: signing logs the crime on the spot and seizes the goods, refusing only costs the payment. Selling: on the black market's Sell page, list contraband, high-tech goods and GPUs from storage at 0.6x to 1.8x the reference price. The higher the multiplier, the slower the sale (below 0.9x about a day, 1.0x about two, 1.8x about fourteen), and the likelier and larger the taint on the payout; 5% listing fee, 8% commission, payout held 3 days before reaching your wallet; a fake card may be spotted and returned, hurting your rating; if the platform rugs, listed goods and unreleased payouts are gone. Ponero desk: Ponero is a privacy coin and swapping in wipes the taint on that value; 6% fee each way with a daily limit; coin swapped out of Ponero has no origin and cash-out screening gets stricter."
|
||||
item.web3guide.desc,"Bank: depositing turns credits into CRC; withdrawing turns CRC back into credits and goes through compliance screening. Trading: buys are paid in the quote coin, sells in the traded coin. Mixer: pick a coin, amount and rounds; each round takes a fee and lowers taint, rounds equal days of waiting, and the coins come back to the same address; the more you deposit, the worse the cleaning. Black market: coin only, no CRC, 30% above normal channels, with extra markup on high-tech goods and GPUs; the coin you pay leaves its share of taint with the seller and the goods carry no stolen tag; GPUs may be fake, inspect them yourself. Orders are cheaper than spot but take days and may be intercepted; merchants sell by type at their own price factor, 5+ items get 5% off and 10+ get 10% off, and a bulk merchant appears at random with the lowest prices but six days of waiting; escrow costs 5%, is released on delivery and refunded if the seller runs; advance release takes another 10% off, but a scammer keeps the money and only sellers with 30+ trades accept; the platform itself can rug, be taken over by enforcement, or a seller can be arrested, after which your orders get traced and crime logged; forum rumors can be warnings. An intercepted parcel sometimes turns into enforcement at your door: signing logs the crime on the spot and seizes the goods, refusing only costs the payment. Selling: on the black market's Sell page, list contraband, high-tech goods and GPUs from storage at 0.6x to 1.8x the reference price. The higher the multiplier, the slower the sale (below 0.9x about a day, 1.0x about two, 1.8x about fourteen), and the likelier and larger the taint on the payout, which also grows with how much you sold in the last 7 days; 5% listing fee, 8% commission, payout held 3 days before reaching your wallet; a fake card may be spotted and returned, hurting your rating; if the platform rugs, listed goods and unreleased payouts are gone. Ponero desk: Ponero is a privacy coin and swapping in wipes the taint on that value; 6% fee each way with a daily limit; coin swapped out of Ponero has no origin and cash-out screening gets stricter."
|
||||
courier.odd1,...Package is here.
|
||||
courier.odd2,"(His hand stays in his pocket.) Sign here."
|
||||
courier.sign,Sign
|
||||
@@ -308,3 +308,13 @@ black.sale.Lost,platform rugged, gone
|
||||
black.sale.Delisted,taken down
|
||||
black.sale.Delisted.fake,buyer spotted the fake and returned it
|
||||
black.kind.gpunew,GPU brand new
|
||||
merchant.GpuNew,New GPUs
|
||||
merchant.GpuUsed,Used GPUs
|
||||
merchant.Mods,Mods & tech
|
||||
merchant.Arms,Arms
|
||||
merchant.Docs,Keycards & chips
|
||||
merchant.Pharma,Pharma
|
||||
merchant.Bulk,Bulk
|
||||
black.days,"{0} days delivery"
|
||||
black.sell.all,List all
|
||||
black.sell.listedall,"Listed {0} items."
|
||||
|
@@ -223,12 +223,12 @@ black.desk.in,兑入 Ponero
|
||||
black.desk.out,兑出 Ponero
|
||||
black.desk.go,兑换
|
||||
black.desk.fail,兑换失败:余额、额度或数量不对。
|
||||
black.sub.orders,订单
|
||||
black.sub.orders,商家
|
||||
black.sub.mine,我的订单与情报
|
||||
black.rugged,"平台出事了,入口关闭,还要 {0} 天才会有人重新开张。"
|
||||
black.seller,"{0},成交 {1},好评 {2}%"
|
||||
black.orders.h,订单目录
|
||||
black.order,"下单({0} 天到)"
|
||||
black.order,下单
|
||||
black.mode.Escrow,托管
|
||||
black.mode.Advance,提前放款
|
||||
black.ordered,"已下单:{0},预计第 {1} 天到。"
|
||||
@@ -269,7 +269,7 @@ black.kind.Contraband.3,违禁品(高)
|
||||
black.kind.Tech,高科技物品(加价)
|
||||
nightlog.bm.ready,"黑市:{0} 到货,开店后会有快递员上门。"
|
||||
item.web3guide.name,Web3 手册
|
||||
item.web3guide.desc,"银行:存入把信用点换成 CRC;提取把 CRC 换回信用点,提取要过合规审查。交易:买入按计价币的数量支付,卖出按所交易币的数量卖出。混币器:选币种、填数量和轮数,每轮扣手续费并降低污点,轮数即等待天数,到期提回同一个地址;存入越多,清洗越差。黑市:只收币,不收 CRC,价格比正常渠道贵 30%,高科技物品和显卡另有加价;付出去的币带着按比例的污点留在卖家那边,货不带赃物标签;显卡不保证真假,自己鉴定。订单比现货便宜,要等几天,路上可能被截获;托管多付 5% 托管费,收货后放款,卖家跑路时退款;提前放款再打九折,卖家若是骗子钱就没了,只有成交 30 单以上的卖家接受;平台自己也可能跑路,也可能被执法接管,或者卖家落网,之后你的订单会被追查、记罪证;论坛上的传闻可以当预兆。被截获的包裹有时会变成执法人员上门:签收当场记罪证并查封,拒签只损失货款。出售:在黑市的出售页把储藏区里的违禁品、高科技物品和显卡上架,标价是参考价的 0.6 到 1.8 倍。倍率越高成交越慢(0.9 以下约一天,1.0 约两天,1.8 约十四天),货款带污点的可能性和比例也越高;上架收 5% 上架费,成交扣 8% 抽成,货款托管 3 天后进钱包;卖假卡可能被买家看穿而退货,拉低好评;平台跑路时上架的货和未放款的货款都没了。Ponero 兑换处:Ponero 是隐私币,兑入时这部分价值的污点被清除;兑入、兑出各收 6% 手续费,每天有额度;从 Ponero 兑出的币来路不明,出金审查会加重。"
|
||||
item.web3guide.desc,"银行:存入把信用点换成 CRC;提取把 CRC 换回信用点,提取要过合规审查。交易:买入按计价币的数量支付,卖出按所交易币的数量卖出。混币器:选币种、填数量和轮数,每轮扣手续费并降低污点,轮数即等待天数,到期提回同一个地址;存入越多,清洗越差。黑市:只收币,不收 CRC,价格比正常渠道贵 30%,高科技物品和显卡另有加价;付出去的币带着按比例的污点留在卖家那边,货不带赃物标签;显卡不保证真假,自己鉴定。订单比现货便宜,要等几天,路上可能被截获;商家按类型卖货,价格系数各不相同,一次订 5 件以上 95 折、10 件以上 9 折,大宗商家随机出现,价格最低但要等六天;托管多付 5% 托管费,收货后放款,卖家跑路时退款;提前放款再打九折,卖家若是骗子钱就没了,只有成交 30 单以上的卖家接受;平台自己也可能跑路,也可能被执法接管,或者卖家落网,之后你的订单会被追查、记罪证;论坛上的传闻可以当预兆。被截获的包裹有时会变成执法人员上门:签收当场记罪证并查封,拒签只损失货款。出售:在黑市的出售页把储藏区里的违禁品、高科技物品和显卡上架,标价是参考价的 0.6 到 1.8 倍。倍率越高成交越慢(0.9 以下约一天,1.0 约两天,1.8 约十四天),货款带污点的可能性和比例也越高,近 7 天出售的量越大,污点越重;上架收 5% 上架费,成交扣 8% 抽成,货款托管 3 天后进钱包;卖假卡可能被买家看穿而退货,拉低好评;平台跑路时上架的货和未放款的货款都没了。Ponero 兑换处:Ponero 是隐私币,兑入时这部分价值的污点被清除;兑入、兑出各收 6% 手续费,每天有额度;从 Ponero 兑出的币来路不明,出金审查会加重。"
|
||||
courier.odd1,……东西到了。
|
||||
courier.odd2,"(他的手一直放在口袋里)在这儿签个字。"
|
||||
courier.sign,签收
|
||||
@@ -307,3 +307,13 @@ black.sale.Lost,平台跑路,没了
|
||||
black.sale.Delisted,已撤下
|
||||
black.sale.Delisted.fake,买家看穿假卡退货
|
||||
black.kind.gpunew,显卡 全新
|
||||
merchant.GpuNew,全新矿卡
|
||||
merchant.GpuUsed,二手矿卡
|
||||
merchant.Mods,模组高科技
|
||||
merchant.Arms,军火
|
||||
merchant.Docs,证件芯片
|
||||
merchant.Pharma,药物
|
||||
merchant.Bulk,大宗
|
||||
black.days,"{0} 天到货"
|
||||
black.sell.all,全部上架
|
||||
black.sell.listedall,"已上架 {0} 件。"
|
||||
|
@@ -343,20 +343,7 @@ namespace Decentralized
|
||||
c.AddButton(L.T("black.buy"), () => BuyOffer(offer));
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
if (d.Black.Catalog.Count == 0) b.AddLabel(L.T("black.empty"));
|
||||
Shelf(b, d.Black.Catalog.Cast<BmGood>().ToList(), (c, g) =>
|
||||
{
|
||||
var listing = (BmListing)g;
|
||||
var seller = d.Black.Sellers[listing.Seller];
|
||||
GoodHead(c, g, L.T("black.seller", seller.Name, seller.Trades, seller.Rating));
|
||||
c.AddLabel(L.T("black.price", BlackMarket.Pay(listing.Price, _mode)));
|
||||
c.AddFlexibleSpace();
|
||||
bool ok = _mode == PayMode.Escrow || seller.Advance;
|
||||
c.AddButton(ok ? L.T("black.order", Tuning.BmDoorDays) : L.T("black.noadvance"), () => { if (ok) PlaceOrder(listing); });
|
||||
});
|
||||
}
|
||||
else MerchantShelf(b, d);
|
||||
}
|
||||
|
||||
private static double _sellMult = 1.0;
|
||||
@@ -375,6 +362,7 @@ namespace Decentralized
|
||||
}
|
||||
b.End();
|
||||
b.AddLabel(L.T("mixer.balance", _payAsset, Fmt.Num(d.Hot.Avail(_payAsset))) + " " + L.T("black.sell.rating", d.Black.Rating));
|
||||
b.AddButton(L.T("black.sell.all"), ListAll);
|
||||
b.AddSeparator();
|
||||
var items = BlackDelivery.Sellable();
|
||||
if (items.Count == 0) { b.AddLabel(L.T("black.sell.none")); return; }
|
||||
@@ -382,7 +370,7 @@ namespace Decentralized
|
||||
{
|
||||
string id = BlackDelivery.SellId(it);
|
||||
var kind = BlackDelivery.KindOf(id);
|
||||
var g = new BmGood { Item = id, Kind = kind, Level = kind == GoodKind.Contraband ? BlackMarket.Pool.First(x => x.Key == id).Value : 3 };
|
||||
var g = new BmGood { Item = id, Kind = kind, Level = kind == GoodKind.Contraband ? BlackMarket.Pool.Concat(BlackMarket.PharmaPool).First(x => x.Key == id).Value : 3 };
|
||||
if (kind == GoodKind.Gpu) g.Health = Items.ToUnit(it).Health;
|
||||
g.Price = BlackMarket.ListPriceOf(BlackDelivery.RefValue(it), _sellMult);
|
||||
return new { g, it };
|
||||
@@ -398,6 +386,25 @@ namespace Decentralized
|
||||
|
||||
private static readonly System.Collections.Generic.Dictionary<BmGood, GameItem> SellCards = new System.Collections.Generic.Dictionary<BmGood, GameItem>();
|
||||
|
||||
private static void ListAll()
|
||||
{
|
||||
var d = Session.Data;
|
||||
int n = 0;
|
||||
foreach (var it in BlackDelivery.Sellable())
|
||||
{
|
||||
string id = BlackDelivery.SellId(it);
|
||||
if (id == null) continue;
|
||||
var u = Items.IsGpu(it) ? Items.ToUnit(it) : null;
|
||||
var s = d.Black.List(id, u?.Model, u?.FakeOf, u?.Health ?? 0, BlackDelivery.RefValue(it), _sellMult, d.Hot, _payAsset, StoreStation.GetDayCounter(), Session.Price);
|
||||
if (s == null) break;
|
||||
it.Destroy();
|
||||
n++;
|
||||
}
|
||||
_message = L.T("black.sell.listedall", n);
|
||||
Session.Save();
|
||||
Open();
|
||||
}
|
||||
|
||||
private static void ListItem(GameItem it)
|
||||
{
|
||||
var d = Session.Data;
|
||||
@@ -412,6 +419,50 @@ namespace Decentralized
|
||||
Open();
|
||||
}
|
||||
|
||||
private static int _merchant;
|
||||
private static int _qty = 1;
|
||||
private static readonly int[] Qtys = { 1, 5, 10 };
|
||||
|
||||
/// <summary>商家货架:选一家商家,看它这周的货,选件数下单。</summary>
|
||||
private static void MerchantShelf(CustomUIBuilder b, SaveData d)
|
||||
{
|
||||
var sellers = d.Black.Sellers;
|
||||
if (sellers.Count == 0) { b.AddLabel(L.T("black.empty")); return; }
|
||||
if (_merchant >= sellers.Count) _merchant = 0;
|
||||
b.BeginRow();
|
||||
foreach (var m in Qtys)
|
||||
{
|
||||
int q = m;
|
||||
b.AddButton(q == _qty ? $"[×{q}]" : "×" + q, () => { _qty = q; Open(); });
|
||||
}
|
||||
b.End();
|
||||
for (int i = 0; i < sellers.Count; i += 3)
|
||||
{
|
||||
b.BeginRow();
|
||||
for (int k = i; k < Math.Min(sellers.Count, i + 3); k++)
|
||||
{
|
||||
int idx = k;
|
||||
string n = L.T("merchant." + sellers[k].Type) + " " + sellers[k].Name;
|
||||
b.AddButton(idx == _merchant ? $"[{n}]" : n, () => { _merchant = idx; Open(); });
|
||||
}
|
||||
b.End();
|
||||
}
|
||||
var seller = sellers[_merchant];
|
||||
b.AddLabel(L.T("black.seller", seller.Name, seller.Trades, seller.Rating) + " " + L.T("black.days", seller.Days));
|
||||
var goods = d.Black.Catalog.Where(l => l.Seller == _merchant).Cast<BmGood>().ToList();
|
||||
if (goods.Count == 0) { b.AddLabel(L.T("black.empty")); return; }
|
||||
Shelf(b, goods, (c, g) =>
|
||||
{
|
||||
var listing = (BmListing)g;
|
||||
int count = Math.Min(_qty, listing.Qty);
|
||||
GoodHead(c, g, L.T("black.stock", listing.Qty));
|
||||
c.AddLabel(L.T("black.price", BlackMarket.Pay(BlackMarket.OrderTotal(listing.Price, count), _mode)) + (count > 1 ? " ×" + count : ""));
|
||||
c.AddFlexibleSpace();
|
||||
bool ok = _mode == PayMode.Escrow || seller.Advance;
|
||||
c.AddButton(ok ? L.T("black.order") : L.T("black.noadvance"), () => { if (ok) PlaceOrder(listing, count); });
|
||||
});
|
||||
}
|
||||
|
||||
private const int ShelfCols = 4;
|
||||
private const float CardW = 172f, CardH = 268f;
|
||||
|
||||
@@ -455,12 +506,12 @@ namespace Decentralized
|
||||
Open();
|
||||
}
|
||||
|
||||
private static void PlaceOrder(BmListing l)
|
||||
private static void PlaceOrder(BmListing l, int count)
|
||||
{
|
||||
var d = Session.Data;
|
||||
var o = d.Black.Place(l, _mode, d.Hot, _payAsset, StoreStation.GetDayCounter(), Session.Price);
|
||||
var o = d.Black.Place(l, count, _mode, d.Hot, _payAsset, StoreStation.GetDayCounter(), Session.Price);
|
||||
if (o == null) { _message = L.T("msg.balance"); Open(); return; }
|
||||
_message = L.T("black.ordered", ItemName(o.Item), o.DueDay);
|
||||
_message = L.T("black.ordered", ItemName(o.Item) + (o.Count > 1 ? " ×" + o.Count : ""), o.DueDay);
|
||||
Session.Save();
|
||||
Open();
|
||||
}
|
||||
@@ -490,7 +541,7 @@ namespace Decentralized
|
||||
if (sale.State == SaleState.Listed) l.AddButton(L.T("black.sell.delist"), () => Delist(sale));
|
||||
}
|
||||
foreach (var o in d.Black.Orders.OrderByDescending(x => x.PlacedDay))
|
||||
l.AddLabel(L.T("black.mine.line", ItemName(o.Item), o.Seller, L.T("black.mode." + o.Mode), L.T("black.state." + o.State + (o.Why != null && o.State != OrderState.Done ? "." + o.Why : "")), o.DueDay));
|
||||
l.AddLabel(L.T("black.mine.line", ItemName(o.Item) + (o.Count > 1 ? " ×" + o.Count : ""), o.Seller, L.T("black.mode." + o.Mode), L.T("black.state." + o.State + (o.Why != null && o.State != OrderState.Done ? "." + o.Why : "")), o.DueDay));
|
||||
}, r =>
|
||||
{
|
||||
r.AddHeader(L.T("black.forum.h"));
|
||||
|
||||
Reference in new issue
Block a user