private static void OnSellItems(int num) { var selected = ShopHelper.selectedController; Control.LogDebug(DInfo.ShopActions, $"-- OnSellItems {num}x{selected.GetName()}"); var shop_def = selected.shopDefItem; if (selected.quantity < num) { num = selected.quantity; } if (num <= 0) { Control.LogDebug(DInfo.ShopActions, $"--- num<=0 return"); return; } int sold = SellItem(shop_def, num); if (sold > 0) { Control.LogDebug(DInfo.ShopActions, $"--- sold, process messages"); SimGamePurchaseMessage message = new SimGamePurchaseMessage(shop_def, shop_def.SellCost, SimGamePurchaseMessage.TransactionType.Sell); Control.State.Sim.MessageCenter.PublishMessage(message); selected.ModifyQuantity(-num); if (selected.quantity <= 0) { ShopHelper.inventoryWidget.RemoveDataItem(selected); selected.Pool(); ShopHelper.selectedController = null; } ShopHelper.inventoryWidget.RefreshInventoryList(); ShopScreen.UpdateMoneySpot(); ShopHelper.triggerIronManAutoSave = true; foreach (var s in Control.SaleShops) { if (s is IShopDescriptor sd && sd.CanUse) { if (s.OnSellItem(shop_def, sold)) { break; } } } } else { Control.LogDebug(DInfo.ShopActions, $"--- not sold"); } }
// Clone of SoldMultipleItems public void BuyMultipleItems(int quantityBought) { Mod.Log.Debug("BH:BMI entered."); //bool isNotStoreOrSalvage = shopIDO.GetItemType() != MechLabDraggableItemType.StorePart && // shopIDO.GetItemType() != MechLabDraggableItemType.SalvagePart; //if (simGameState.InMechLabStore() || !isNotStoreOrSalvage) { // Mod.Logger.Info($"BH:BMI - in the mech lab store, or the part isn't a store part or salvage (is {shopIDO.GetItemType()}). Aborting!"); // return; //} ShopDefItem toBuySDI = shopIDO.shopDefItem; // Look for the item in the store inventory Shop itemShop = shopIDO.GetShop(); List <ShopDefItem> activeInventory = itemShop.ActiveInventory; Shop.PurchaseType storePT = toBuySDI.IsInfinite ? Shop.PurchaseType.Normal : Shop.PurchaseType.Special; ShopDefItem storeSDI = activeInventory.Find((ShopDefItem cachedItem) => cachedItem.ID == toBuySDI.ID && cachedItem.Type == shopIDO.shopDefItem.Type); if (storeSDI == null) { Mod.Log.Info("BH:BMI - item not found in store inventory. Aborting!"); return; } // Check the price int itemPrice = itemShop.GetPrice(storeSDI, storePT, itemShop.ThisShopType); Mod.Log.Info($"BH:BMI - itemPrice:{itemPrice} for purchaseType:{storePT}"); int purchasePrice = itemPrice * quantityBought; if (purchasePrice > simGameState.Funds) { Mod.Log.Info($"BH:BMI - purchasePrice:{purchasePrice} (itemPrice:{itemPrice} x quantity:{quantityBought}) > funds: {simGameState.Funds}. Aborting!"); return; } // Check the quantity available if (storePT != Shop.PurchaseType.Normal) { if (storeSDI.Count < quantityBought) { Mod.Log.Info($"BH:BMI - store has quantity {storeSDI.Count} in inventory, but {quantityBought} was requested. Aborting!"); return; } storeSDI.Count -= quantityBought; if (storeSDI.Count < 1) { Mod.Log.Debug($"BH:BMI - Store count below 1, removing!"); activeInventory.Remove(storeSDI); } Mod.Log.Debug($"BH:BMI - Reduced store count by {quantityBought} to {storeSDI.Count}!"); } for (int i = 0; i < quantityBought; i++) { // Decrement the price simGameState.AddFunds(-itemPrice, null, true, true); simGameState.AddFromShopDefItem(storeSDI, false, itemPrice, SimGamePurchaseMessage.TransactionType.Purchase); Mod.Log.Debug($"BH:BMI - Reducing funds by -{itemPrice} and adding 1 of {storeSDI.ID}"); if (!toBuySDI.IsInfinite) { if (shopIDO.quantity > 1) { shopIDO.ModifyQuantity(-1); Mod.Log.Debug($"BH:BMI - reducing shop inventory by 1 to {shopIDO.quantity}"); } else { Mod.Log.Debug($"BH:BMI - shop inventory below 1, removing!"); inventoryWidget.RemoveDataItem(shopIDO); if (shopIDO != null) { shopIDO.Pool(); } shopIDO = null; } } } inventoryWidget.RefreshInventoryList(); Mod.Log.Debug("BH:BMI - Updating all money spots"); shopScreen.UpdateMoneySpot(); shopScreen.RefreshAllMoneyListings(); if (toBuySDI.Type == ShopItemType.MechPart) { shopScreen.OnItemSelected(inventoryWidget.GetSelectedViewItem()); } Mod.Log.Debug("BH:BMI - triggering iron man save"); Traverse ironManT = Traverse.Create(shopScreen).Field("triggerIronManAutoSave"); ironManT.SetValue(true); }