コード例 #1
0
 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);
     }
 }
コード例 #2
0
    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();
    }
コード例 #3
0
 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);
     }
 }
コード例 #4
0
 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);
     }
 }