public override void Load(LoadInfo info) { base.Load(info); if (info.msg.marketTerminal == null) { return; } _customerSteamId = info.msg.marketTerminal.customerSteamId; _customerName = info.msg.marketTerminal.customerName; _timeUntilCustomerExpiry = info.msg.marketTerminal.timeUntilExpiry; _marketplace = new EntityRef <Marketplace>(info.msg.marketTerminal.marketplaceId); if (pendingOrders == null) { pendingOrders = Facepunch.Pool.GetList <ProtoBuf.MarketTerminal.PendingOrder>(); } if (pendingOrders.Count > 0) { foreach (ProtoBuf.MarketTerminal.PendingOrder pendingOrder in pendingOrders) { ProtoBuf.MarketTerminal.PendingOrder obj = pendingOrder; Facepunch.Pool.Free(ref obj); } pendingOrders.Clear(); } foreach (ProtoBuf.MarketTerminal.PendingOrder order in info.msg.marketTerminal.orders) { ProtoBuf.MarketTerminal.PendingOrder item = order.Copy(); pendingOrders.Add(item); } }
private void RegisterOrder(BasePlayer player, VendingMachine vendingMachine) { if (pendingOrders == null) { pendingOrders = Facepunch.Pool.GetList <ProtoBuf.MarketTerminal.PendingOrder>(); } if (HasPendingOrderFor(vendingMachine.net.ID)) { return; } Marketplace entity; if (!_marketplace.TryGet(true, out entity)) { Debug.LogError("Marketplace is not set", this); return; } uint num = entity.SendDrone(player, this, vendingMachine); if (num == 0) { Debug.LogError("Failed to spawn delivery drone"); return; } ProtoBuf.MarketTerminal.PendingOrder pendingOrder = Facepunch.Pool.Get <ProtoBuf.MarketTerminal.PendingOrder>(); pendingOrder.vendingMachineId = vendingMachine.net.ID; pendingOrder.timeUntilExpiry = orderTimeout; pendingOrder.droneId = num; pendingOrders.Add(pendingOrder); CheckForExpiredOrders(); UpdateHasItems(false); SendNetworkUpdateImmediate(); }
private void CheckForExpiredOrders() { if (pendingOrders != null && pendingOrders.Count > 0) { bool flag = false; float?num = null; for (int i = 0; i < pendingOrders.Count; i++) { ProtoBuf.MarketTerminal.PendingOrder pendingOrder = pendingOrders[i]; if ((float)pendingOrder.timeUntilExpiry <= 0f) { DeliveryDrone entity; if (new EntityRef <DeliveryDrone>(pendingOrder.droneId).TryGet(true, out entity)) { Debug.LogError("Delivery timed out waiting for drone (too slow speed?)", this); entity.Kill(); } else { Debug.LogError("Delivery timed out waiting for drone, and the drone seems to have been destroyed?", this); } pendingOrders.RemoveAt(i); i--; flag = true; } else if (!num.HasValue || (float)pendingOrder.timeUntilExpiry < num.Value) { num = pendingOrder.timeUntilExpiry; } } if (flag) { UpdateHasItems(false); SendNetworkUpdate(); } if (num.HasValue) { Invoke(_checkForExpiredOrdersCached, num.Value); } } else { CancelInvoke(_checkForExpiredOrdersCached); } }
public override void Save(SaveInfo info) { base.Save(info); info.msg.marketTerminal = Facepunch.Pool.Get <ProtoBuf.MarketTerminal>(); info.msg.marketTerminal.customerSteamId = _customerSteamId; info.msg.marketTerminal.customerName = _customerName; info.msg.marketTerminal.timeUntilExpiry = _timeUntilCustomerExpiry; info.msg.marketTerminal.marketplaceId = _marketplace.uid; info.msg.marketTerminal.orders = Facepunch.Pool.GetList <ProtoBuf.MarketTerminal.PendingOrder>(); if (pendingOrders == null) { return; } foreach (ProtoBuf.MarketTerminal.PendingOrder pendingOrder in pendingOrders) { ProtoBuf.MarketTerminal.PendingOrder item = pendingOrder.Copy(); info.msg.marketTerminal.orders.Add(item); } }