public void UpdateDisplayName(
     string newName,
     VendingMachine.SellOrderContainer sellOrderContainer)
 {
     this.displayName  = newName;
     this.toolTip.Text = this.displayName;
     if (this.isInStock && sellOrderContainer != null && (sellOrderContainer.sellOrders != null && ((List <VendingMachine.SellOrder>)sellOrderContainer.sellOrders).Count > 0))
     {
         this.toolTip.Text += "\n";
         using (List <VendingMachine.SellOrder> .Enumerator enumerator = ((List <VendingMachine.SellOrder>)sellOrderContainer.sellOrders).GetEnumerator())
         {
             while (enumerator.MoveNext())
             {
                 VendingMachine.SellOrder current = enumerator.Current;
                 if (current.inStock > 0)
                 {
                     string  str1     = ItemManager.FindItemDefinition((int)current.itemToSellID).displayName.translated + (current.itemToSellIsBP != null ? " (BP)" : "");
                     string  str2     = ItemManager.FindItemDefinition((int)current.currencyID).displayName.translated + (current.currencyIsBP != null ? " (BP)" : "");
                     Tooltip toolTip1 = this.toolTip;
                     toolTip1.Text = toolTip1.Text + "\n" + (object)(int)current.itemToSellAmount + " " + str1 + " | " + (object)(int)current.currencyAmountPerItem + " " + str2;
                     Tooltip toolTip2 = this.toolTip;
                     toolTip2.Text = toolTip2.Text + " (" + (object)(int)current.inStock + " Left)";
                 }
             }
         }
     }
     ((Behaviour)this.toolTip).set_enabled(this.toolTip.Text != "");
 }
 public override void Save(BaseNetworkable.SaveInfo info)
 {
     base.Save(info);
     info.msg.vendingMachine = (__Null) new VendingMachine();
     ((VendingMachine)info.msg.vendingMachine).shopName = (__Null)this.markerShopName;
     if (!Object.op_Inequality((Object)this.server_vendingMachine, (Object)null))
     {
         return;
     }
     ((VendingMachine)info.msg.vendingMachine).sellOrderContainer = (__Null) new VendingMachine.SellOrderContainer();
     ((VendingMachine.SellOrderContainer)((VendingMachine)info.msg.vendingMachine).sellOrderContainer).ShouldPool = (__Null)0;
     ((VendingMachine.SellOrderContainer)((VendingMachine)info.msg.vendingMachine).sellOrderContainer).sellOrders = (__Null) new List <VendingMachine.SellOrder>();
     using (List <VendingMachine.SellOrder> .Enumerator enumerator = ((List <VendingMachine.SellOrder>) this.server_vendingMachine.sellOrders.sellOrders).GetEnumerator())
     {
         while (enumerator.MoveNext())
         {
             VendingMachine.SellOrder current    = enumerator.Current;
             VendingMachine.SellOrder sellOrder1 = new VendingMachine.SellOrder();
             sellOrder1.ShouldPool = (__Null)0;
             VendingMachine.SellOrder sellOrder2 = sellOrder1;
             current.CopyTo(sellOrder2);
             ((List <VendingMachine.SellOrder>)((VendingMachine.SellOrderContainer)((VendingMachine)info.msg.vendingMachine).sellOrderContainer).sellOrders).Add(sellOrder1);
         }
     }
 }
Beispiel #3
0
    public void AddSellOrder(
        int itemToSellID,
        int itemToSellAmount,
        int currencyToUseID,
        int currencyAmount,
        byte bpState)
    {
        ItemDefinition itemDefinition1 = ItemManager.FindItemDefinition(itemToSellID);
        ItemDefinition itemDefinition2 = ItemManager.FindItemDefinition(currencyToUseID);

        if (Object.op_Equality((Object)itemDefinition1, (Object)null) || Object.op_Equality((Object)itemDefinition2, (Object)null))
        {
            return;
        }
        currencyAmount   = Mathf.Clamp(currencyAmount, 1, 10000);
        itemToSellAmount = Mathf.Clamp(itemToSellAmount, 1, itemDefinition1.stackable);
        VendingMachine.SellOrder sellOrder = new VendingMachine.SellOrder();
        sellOrder.ShouldPool            = (__Null)0;
        sellOrder.itemToSellID          = (__Null)itemToSellID;
        sellOrder.itemToSellAmount      = (__Null)itemToSellAmount;
        sellOrder.currencyID            = (__Null)currencyToUseID;
        sellOrder.currencyAmountPerItem = (__Null)currencyAmount;
        sellOrder.currencyIsBP          = bpState == (byte)3 ? (__Null)1 : (__Null)(bpState == (byte)2 ? 1 : 0);
        sellOrder.itemToSellIsBP        = bpState == (byte)3 ? (__Null)1 : (__Null)(bpState == (byte)1 ? 1 : 0);
        Interface.CallHook("OnAddVendingOffer", (object)this, (object)sellOrder);
        ((List <VendingMachine.SellOrder>) this.sellOrders.sellOrders).Add(sellOrder);
        this.RefreshSellOrderStockLevel(itemDefinition1);
        this.UpdateMapMarker();
        this.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);
    }
Beispiel #4
0
 public void RefreshSellOrderStockLevel(ItemDefinition itemDef = null)
 {
     using (List <VendingMachine.SellOrder> .Enumerator enumerator = ((List <VendingMachine.SellOrder>) this.sellOrders.sellOrders).GetEnumerator())
     {
         while (enumerator.MoveNext())
         {
             VendingMachine.SellOrder so = enumerator.Current;
             if (Object.op_Equality((Object)itemDef, (Object)null) || itemDef.itemid == so.itemToSellID)
             {
                 if (so.itemToSellIsBP != null)
                 {
                     List <Item> list = this.inventory.FindItemsByItemID(this.blueprintBaseDef.itemid).Where <Item>((Func <Item, bool>)(x => x.blueprintTarget == so.itemToSellID)).ToList <Item>();
                     so.inStock = list == null || list.Count <Item>() < 0 ? (__Null)0 : (__Null)(list.Sum <Item>((Func <Item, int>)(x => x.amount)) / so.itemToSellAmount);
                 }
                 else
                 {
                     List <Item> itemsByItemId = this.inventory.FindItemsByItemID((int)so.itemToSellID);
                     so.inStock = itemsByItemId == null || itemsByItemId.Count < 0 ? (__Null)0 : (__Null)(itemsByItemId.Sum <Item>((Func <Item, int>)(x => x.amount)) / so.itemToSellAmount);
                 }
             }
         }
     }
 }
Beispiel #5
0
    public bool DoTransaction(BasePlayer buyer, int sellOrderId, int numberOfTransactions = 1)
    {
        if (sellOrderId < 0 || sellOrderId > ((List <VendingMachine.SellOrder>) this.sellOrders.sellOrders).Count || (double)Vector3.Distance(((Component)buyer).get_transform().get_position(), ((Component)this).get_transform().get_position()) > 4.0)
        {
            return(false);
        }
        object obj1 = Interface.CallHook("OnVendingTransaction", (object)this, (object)buyer, (object)sellOrderId, (object)numberOfTransactions);

        if (obj1 is bool)
        {
            return((bool)obj1);
        }
        VendingMachine.SellOrder sellOrder = ((List <VendingMachine.SellOrder>) this.sellOrders.sellOrders)[sellOrderId];
        List <Item> source1 = this.inventory.FindItemsByItemID((int)sellOrder.itemToSellID);

        if (sellOrder.itemToSellIsBP != null)
        {
            source1 = this.inventory.FindItemsByItemID(this.blueprintBaseDef.itemid).Where <Item>((Func <Item, bool>)(x => x.blueprintTarget == sellOrder.itemToSellID)).ToList <Item>();
        }
        if (source1 == null || source1.Count == 0)
        {
            return(false);
        }
        numberOfTransactions = Mathf.Clamp(numberOfTransactions, 1, source1[0].hasCondition ? 1 : 1000000);
        int num1 = sellOrder.itemToSellAmount * numberOfTransactions;
        int num2 = source1.Sum <Item>((Func <Item, int>)(x => x.amount));

        if (num1 > num2)
        {
            return(false);
        }
        List <Item> source2 = buyer.inventory.FindItemIDs((int)sellOrder.currencyID);

        if (sellOrder.currencyIsBP != null)
        {
            source2 = buyer.inventory.FindItemIDs(this.blueprintBaseDef.itemid).Where <Item>((Func <Item, bool>)(x => x.blueprintTarget == sellOrder.currencyID)).ToList <Item>();
        }
        List <Item> list = source2.Where <Item>((Func <Item, bool>)(x =>
        {
            if (!x.hasCondition)
            {
                return(true);
            }
            if ((double)x.conditionNormalized >= 0.5)
            {
                return((double)x.maxConditionNormalized > 0.5);
            }
            return(false);
        })).ToList <Item>();

        if (list.Count == 0)
        {
            return(false);
        }
        int num3 = list.Sum <Item>((Func <Item, int>)(x => x.amount));
        int num4 = sellOrder.currencyAmountPerItem * numberOfTransactions;
        int num5 = num4;

        if (num3 < num5)
        {
            return(false);
        }
        this.transactionActive = true;
        int num6 = 0;

        foreach (Item obj2 in list)
        {
            int split_Amount = Mathf.Min(num4 - num6, obj2.amount);
            this.TakeCurrencyItem(obj2.amount > split_Amount ? obj2.SplitItem(split_Amount) : obj2);
            num6 += split_Amount;
            if (num6 >= num4)
            {
                break;
            }
        }
        int num7 = 0;

        foreach (Item obj2 in source1)
        {
            int  split_Amount = num1 - num7;
            Item soldItem     = obj2.amount > split_Amount?obj2.SplitItem(split_Amount) : obj2;

            if (soldItem == null)
            {
                Debug.LogError((object)"Vending machine error, contact developers!");
            }
            else
            {
                num7 += soldItem.amount;
                this.GiveSoldItem(soldItem, buyer);
            }
            if (num7 >= num1)
            {
                break;
            }
        }
        this.UpdateEmptyFlag();
        this.transactionActive = false;
        return(true);
    }