Black market in Web3 page, shelf UI, no dead drop, tech and GPU goods; rules moved to Web3 handbook
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
6bc479f710
commit
e44a4439ed
12 files changed
+296
-245
No files matched your search
@@ -5,20 +5,18 @@ namespace Decentralized
|
||||
{
|
||||
/// <summary>
|
||||
/// Web3 黑市的货物进出:每周刷新现货与订单目录,夜间推进订单并写夜间日志,
|
||||
/// 上门(快递员当顾客上门)和死投(去垃圾场取货)把到货交给玩家。
|
||||
/// 上门(快递员当顾客上门)把到货交给玩家。
|
||||
/// </summary>
|
||||
public static class BlackDelivery
|
||||
{
|
||||
public static void Subscribe()
|
||||
{
|
||||
ModHook.OnGenerateCustomerNormal += OnGenerate;
|
||||
ModHook.OnAfterhourArriveLate += OnArrive;
|
||||
}
|
||||
|
||||
public static void Unsubscribe()
|
||||
{
|
||||
ModHook.OnGenerateCustomerNormal -= OnGenerate;
|
||||
ModHook.OnAfterhourArriveLate -= OnArrive;
|
||||
}
|
||||
|
||||
public static long Value(string id)
|
||||
@@ -30,9 +28,19 @@ namespace Decentralized
|
||||
return v;
|
||||
}
|
||||
|
||||
/// <summary>货架上的货对应的游戏物品 id:显卡是 "gpu:型号",对应本 mod 的显卡物品。</summary>
|
||||
public static string GameId(string id) => id.StartsWith("gpu:") ? Items.GpuId(id.Substring(4)) : id;
|
||||
|
||||
/// <summary>造出这件货:显卡按成色与(可能的)假卡真身造,不带卖家的说法;其余直接造。</summary>
|
||||
public static GameItem Make(string id, string model, string fakeOf, double health)
|
||||
{
|
||||
if (id.StartsWith("gpu:")) return Items.NewCard(model, health, fakeOf, Session.Data.Rng);
|
||||
return ModHelper.SpawnItem(id);
|
||||
}
|
||||
|
||||
public static string ItemName(string id)
|
||||
{
|
||||
var it = ModHelper.SpawnItem(id);
|
||||
var it = ModHelper.SpawnItem(GameId(id));
|
||||
if (it == null) return id;
|
||||
string n = it.name;
|
||||
it.Destroy();
|
||||
@@ -46,7 +54,7 @@ namespace Decentralized
|
||||
if (d.Black.Closed(day)) return false;
|
||||
if (force) d.Black.RefreshedDay = -999;
|
||||
if (!d.Black.Refresh(day, rep, d.Rng, Value)) return false;
|
||||
d.Black.RefreshOrders(rep, d.Rng, Value);
|
||||
d.Black.RefreshOrders(day, rep, d.Rng, Value);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -56,14 +64,13 @@ namespace Decentralized
|
||||
foreach (var e in d.Black.Night(day, crackdown, d.Hot, d.Rng))
|
||||
{
|
||||
string name = e.Order != null ? ItemName(e.Order.Item) : null;
|
||||
Log.Info($"黑市订单事件:{e.Kind} {e.Order?.Item} {e.Order?.Seller} {e.Order?.Mode}/{e.Order?.Delivery} 金额 {e.Amount:0}");
|
||||
Log.Info($"黑市订单事件:{e.Kind} {e.Order?.Item} {e.Order?.Seller} {e.Order?.Mode} 金额 {e.Amount:0}");
|
||||
switch (e.Kind)
|
||||
{
|
||||
case "ready": ps.AddNightLog(L.T("nightlog.bm.ready." + e.Order.Delivery, name), "99bb66"); break;
|
||||
case "ready": ps.AddNightLog(L.T("nightlog.bm.ready", name), "99bb66"); break;
|
||||
case "scam_refund": ps.AddNightLog(L.T("nightlog.bm.scam_refund", e.Order.Seller, name), "cc7755"); break;
|
||||
case "scam_loss": ps.AddNightLog(L.T("nightlog.bm.scam_loss", e.Order.Seller, name, Fmt.Num(e.Amount)), "cc7755"); break;
|
||||
case "intercept": ps.AddNightLog(L.T("nightlog.bm.intercept", name, Fmt.Num(e.Amount)), "cc7755"); break;
|
||||
case "theft": ps.AddNightLog(L.T("nightlog.bm.theft", name, Fmt.Num(e.Amount)), "cc7755"); break;
|
||||
case "rug": ps.AddNightLog(L.T("nightlog.bm.rug", name, Fmt.Num(e.Amount)), "cc7755"); break;
|
||||
case "reopen": ps.AddNightLog(L.T("nightlog.bm.reopen"), "99bb66"); break;
|
||||
}
|
||||
@@ -83,7 +90,7 @@ namespace Decentralized
|
||||
Log.Guard("黑市快递员", () =>
|
||||
{
|
||||
int day = StoreStation.GetDayCounter();
|
||||
if (day == courierDay || !Session.Data.Black.ReadyFor(Delivery.Door).Any()) return;
|
||||
if (day == courierDay || !Session.Data.Black.Ready.Any()) return;
|
||||
courierDay = day;
|
||||
manager.AddClient(CreateCourier());
|
||||
});
|
||||
@@ -110,33 +117,13 @@ namespace Decentralized
|
||||
private static void DeliverDoor()
|
||||
{
|
||||
var d = Session.Data;
|
||||
foreach (var o in d.Black.ReadyFor(Delivery.Door).ToList())
|
||||
foreach (var o in d.Black.Ready.ToList())
|
||||
{
|
||||
Items.Give(ModHelper.SpawnItem(o.Item));
|
||||
Items.Give(Make(o.Item, o.Model, o.FakeOf, o.Health));
|
||||
d.Black.Deliver(o);
|
||||
Log.Info($"黑市快递:{o.Item} 已放进储藏区");
|
||||
Log.Info($"黑市快递:{o.Item}{(o.FakeOf != null ? "(假卡,真身 " + o.FakeOf + ")" : "")} 已放进储藏区");
|
||||
}
|
||||
Session.Save();
|
||||
}
|
||||
|
||||
// ---- 死投:晚上去垃圾场,货在那里 ----
|
||||
private static void OnArrive(string locationId)
|
||||
{
|
||||
if (locationId != "dumping_ground" || Session.Data == null || !Unlock.BlackUnlocked) return;
|
||||
Log.Guard("黑市死投", () =>
|
||||
{
|
||||
var d = Session.Data;
|
||||
var list = d.Black.ReadyFor(Delivery.Drop).ToList();
|
||||
foreach (var o in list)
|
||||
{
|
||||
var item = ModHelper.SpawnItem(o.Item);
|
||||
GeneralHelper.SetItemOwned(item, true);
|
||||
GraphUtils.EmporiumTryAdd(EmporiumEntry.Instance.afterhourInventory, item);
|
||||
d.Black.Deliver(o);
|
||||
Log.Info($"黑市死投:{o.Item} 已放进外出背包");
|
||||
}
|
||||
if (list.Count > 0) { Session.Save(); }
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user