public static int GetPrice(this Shop shop, ShopDefItem item, Shop.PurchaseType purchaseType, Shop.ShopType shopType) { var price = UIControler.GetPrice(item); //Control.LogDebug(DInfo.Price, $"get_price for {item.ID}: {price}"); return(price); }
static void Prefix(ref Shop.PurchaseType purchaseType) { try { purchaseType = Shop.PurchaseType.Special; } catch (Exception e) { Logger.LogError(e); } }
public static bool Prefix(Shop __instance, ref int __result, ShopDefItem item, Shop.PurchaseType purchaseType, Shop.ShopType shopType) { DescriptionDef itemDescription = __instance.GetItemDescription(item); if (itemDescription == null) { Debug.LogError("Error :: Shop.GetPrice() GetItemDescription on: " + item.ID + " returned a NULL"); __result = 0; return(false); } var this_system = Traverse.Create(__instance).Field("system").GetValue <StarSystem>(); float num = (float)itemDescription.Cost; float shop = this_system.Discount.Shop; if (num <= 0) { __result = Mathf.RoundToInt(num); return(false); } if (purchaseType != Shop.PurchaseType.Normal) { num *= item.DiscountModifier; } int num2 = Mathf.RoundToInt(num + (num * shop)); float num3; var this_shop = Traverse.Create(__instance).Field("Sim").GetValue <SimGameState>(); if (shopType != Shop.ShopType.Faction) { if (shopType != Shop.ShopType.BlackMarket) { num3 = this_shop.GetReputationShopAdjustment(this_system.Def.OwnerValue) * num; } else { num3 = this_shop.GetReputationShopAdjustment(FactionEnumeration.GetAuriganPiratesFactionValue()) * num; } } else { num3 = this_shop.GetReputationShopAdjustment(this_system.Def.FactionShopOwnerValue) * num; } __result = Mathf.CeilToInt(Mathf.Clamp((float)num2 + num3, 0f, 1E+09f)); return(false); }
// 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); }