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);
        }
Example #2
0
 static void Prefix(ref Shop.PurchaseType purchaseType)
 {
     try {
         purchaseType = Shop.PurchaseType.Special;
     }
     catch (Exception e) {
         Logger.LogError(e);
     }
 }
Example #3
0
            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);
            }
Example #4
0
        // 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);
        }