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); } } }
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); }
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); } } } } }
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); }