// 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); }
private static void OnBuyItem(int num) { var selected = ShopHelper.selectedController; var shop_def = selected.shopDefItem; Control.LogDebug(DInfo.ShopActions, $"-- {num}x{shop_def.ID}"); if (selected == null) { Control.LogError("OnBuyItem null item, cancel"); return; } var id = selected.GetId(); if (!shop_def.IsInfinite && num > selected.quantity) { Control.LogDebug(DInfo.ShopActions, $"--- {num} > {selected.quantity}, adjucting"); num = selected.quantity; } if (BuyItem(shop_def, num)) { Control.LogDebug(DInfo.ShopActions, $"--- refresh shop"); if (!shop_def.IsInfinite) { if (num < selected.quantity) { Control.LogDebug(DInfo.ShopActions, $"---- {num} < {selected.quantity} - reducing"); selected.ModifyQuantity(-num); } else { Control.LogDebug(DInfo.ShopActions, $"--- {num} >= {selected.quantity} - removing"); selected.quantity = 1; ShopHelper.inventoryWidget.RemoveDataItem(selected); selected.Pool(); ShopHelper.selectedController = null; } } Control.LogDebug(DInfo.ShopActions, $"--- PlayVO"); if (ShopHelper.canPlayVO) { ShopHelper.canPlayVO = false; ShopItemType type = shop_def.Type; string text; if (type != ShopItemType.Weapon) { if (type == ShopItemType.Mech) { text = "store_newmechs"; } else { text = "store_newequipment"; } } else { text = "store_newweapons"; } if (!string.IsNullOrEmpty(text)) { AudioEventManager.PlayAudioEvent("audioeventdef_simgame_vo_barks", text, WwiseManager.GlobalAudioObject, null); } ShopScreen.StartCoroutine(PurchaseVOCooldown(5f)); } } ShopHelper.inventoryWidget.RefreshInventoryList(); ShopScreen.UpdateMoneySpot(); ShopScreen.RefreshAllMoneyListings(); if (shop_def.Type == ShopItemType.MechPart) { ShopScreen.OnItemSelected(ShopHelper.inventoryWidget.GetSelectedViewItem()); } ShopHelper.triggerIronManAutoSave = true; }