Exemplo n.º 1
0
        public static DynamicGameAssets.PackData.FruitTreePackData ConvertFruitTree(this JsonAssets.Data.FruitTreeData data, string packId, Dictionary <string, Dictionary <string, string> > i18n, List <DynamicGameAssets.PackData.FruitTreePackData> fruitTrees, List <DynamicGameAssets.PackData.ObjectPackData> objs, List <DynamicGameAssets.PackData.ShopEntryPackData> shops)
        {
            var item = new DynamicGameAssets.PackData.FruitTreePackData();

            item.ExtensionData.Add("JsonAssetsName", JToken.FromObject(data.Name));
            item.ID      = data.Name + " Tree";
            item.Texture = Path.Combine("assets", "fruit-trees", item.ID + ".png");
            var productObj = objs.FirstOrDefault(o => o.ID == data.Product.ToString());

            item.Product = new List <DynamicGameAssets.Weighted <DynamicGameAssets.ItemAbstraction> >(new DynamicGameAssets.Weighted <DynamicGameAssets.ItemAbstraction>[]
            {
                new DynamicGameAssets.Weighted <DynamicGameAssets.ItemAbstraction>(1, new DynamicGameAssets.ItemAbstraction()
                {
                    Value = productObj != null ? $"{packId}/{productObj.ID}" : data.Product.ToString(),
                    Type  = productObj != null ? DynamicGameAssets.ItemAbstraction.ItemType.DGAItem : DynamicGameAssets.ItemAbstraction.ItemType.VanillaObject
                })
            });
            var dynFields = new List <DynamicGameAssets.PackData.DynamicFieldData>();

            {
                var dynField = new DynamicGameAssets.PackData.DynamicFieldData();
                dynField.Conditions.Add("Season", data.Season);
                dynField.Fields.Add("CanGrowNow", JToken.FromObject(true));
                dynFields.Add(dynField);
            }
            item.DynamicFields = dynFields.ToArray();

            fruitTrees.Add(item);

            var saplingItem = new DynamicGameAssets.PackData.ObjectPackData();

            i18n.AddI18n("en", $"object.{data.SaplingName}.name", data.SaplingName);
            i18n.AddI18n("en", $"object.{data.SaplingName}.description", data.SaplingDescription);
            saplingItem.ID       = data.SaplingName;
            saplingItem.Texture  = Path.Combine("assets", "objects", item.ID + "_sapling.png");
            saplingItem.Category = DynamicGameAssets.PackData.ObjectPackData.VanillaCategory.Seeds;
            saplingItem.Plants   = $"{packId}/{item.ID}";
            foreach (var loc in data.SaplingNameLocalization)
            {
                i18n.AddI18n(loc.Key, $"object.{data.SaplingName}.name", loc.Value);
            }
            foreach (var loc in data.SaplingDescriptionLocalization)
            {
                i18n.AddI18n(loc.Key, $"object.{data.SaplingName}.description", loc.Value);
            }
            objs.Add(saplingItem);

            data.SaplingPurchaseRequirements.Add("z " + data.Season);
            ConversionExtensions.DoShopEntry(shops, packId, data.SaplingName, new JsonAssets.PurchaseData()
            {
                PurchasePrice        = data.SaplingPurchasePrice,
                PurchaseFrom         = data.SaplingPurchaseFrom,
                PurchaseRequirements = data.SaplingPurchaseRequirements,
            });
            foreach (var entry in data.SaplingAdditionalPurchaseData)
            {
                ConversionExtensions.DoShopEntry(shops, packId, data.SaplingName, entry);
            }

            return(item);
        }
Exemplo n.º 2
0
        public static DynamicGameAssets.PackData.CropPackData ConvertCrop(this JsonAssets.Data.CropData data, string packId, Dictionary <string, Dictionary <string, string> > i18n, List <DynamicGameAssets.PackData.CropPackData> crops, List <DynamicGameAssets.PackData.ObjectPackData> objs, List <DynamicGameAssets.PackData.ShopEntryPackData> shops)
        {
            var item = new DynamicGameAssets.PackData.CropPackData();

            item.ExtensionData.Add("JsonAssetsName", JToken.FromObject(data.Name));
            item.ID = data.Name + " Crop";
            switch (data.CropType)
            {
            case JsonAssets.Data.CropType.Normal: item.Type = DynamicGameAssets.PackData.CropPackData.CropType.Normal; break;

            case JsonAssets.Data.CropType.IndoorsOnly: item.Type = DynamicGameAssets.PackData.CropPackData.CropType.Indoors; break;

            case JsonAssets.Data.CropType.Paddy: item.Type = DynamicGameAssets.PackData.CropPackData.CropType.Paddy; break;
            }
            item.Colors = (data.Colors?.Count ?? 0) > 0 ? new List <Color>(data.Colors) : null;

            for (int i = 0; i <= data.Phases.Count; ++i)
            {
                var    phase       = new DynamicGameAssets.PackData.CropPackData.PhaseData();
                string texPathBase = Path.Combine("assets", "crops", item.ID + ".png");
                phase.TextureChoices = i == 0 ? (new string[] { $"{texPathBase}:0", $"{texPathBase}:1" }) : (new string[] { $"{texPathBase}:{i + 1}" });
                phase.Trellis        = data.TrellisCrop;
                if (i < data.Phases.Count)
                {
                    phase.Length = data.Phases[i];
                }
                if (i == data.Phases.Count)
                {
                    if ((item.Colors?.Count ?? 0) > 0)
                    {
                        phase.TextureColorChoices = new string[] { $"{texPathBase}:{i + 2}" }
                    }
                    ;

                    phase.Scythable = data.HarvestWithScythe;
                    if (data.RegrowthPhase != -1)
                    {
                        Log.Warn("Regrowth phase adjusted for " + data.Name + "; see documentation for details.");
                        phase.HarvestedNewPhase = data.Phases.Count - 2;
                    }

                    var productObj      = objs.FirstOrDefault(o => o.ID == data.Product.ToString());
                    int productObjPrice = 0;
                    if (productObj != null)
                    {
                        productObjPrice = productObj.SellPrice.HasValue ? productObj.SellPrice.Value : 0;
                    }
                    else
                    {
                        if (data.Product is long id)
                        {
                            productObjPrice = int.Parse(Game1.objectInformation[(int)id].Split('/')[StardewValley.Object.objectInfoPriceIndex]);
                        }
                        else
                        {
                            foreach (var entry in Game1.objectInformation)
                            {
                                string[] split = entry.Value.Split('/');
                                if (split[StardewValley.Object.objectInfoNameIndex] == (string)data.Product)
                                {
                                    productObjPrice = int.Parse(split[StardewValley.Object.objectInfoPriceIndex]);
                                    break;
                                }
                            }
                        }
                    }

                    phase.HarvestedExperience = (int)Math.Round(16 * Math.Log(0.018 * productObjPrice + 1, Math.E));
                    var drop = new DynamicGameAssets.PackData.CropPackData.HarvestedDropData()
                    {
                        Item = new List <DynamicGameAssets.Weighted <DynamicGameAssets.ItemAbstraction> >(new DynamicGameAssets.Weighted <DynamicGameAssets.ItemAbstraction>[]
                        {
                            new DynamicGameAssets.Weighted <DynamicGameAssets.ItemAbstraction>(1, new DynamicGameAssets.ItemAbstraction()
                            {
                                Value = productObj != null ? $"{packId}/{productObj.ID}" : data.Product.ToString(),
                                Type  = productObj != null ? DynamicGameAssets.ItemAbstraction.ItemType.DGAItem : (item.Colors != null ? DynamicGameAssets.ItemAbstraction.ItemType.VanillaObjectColored : DynamicGameAssets.ItemAbstraction.ItemType.VanillaObject)
                            })
                        }),
                        MininumHarvestedQuantity = data.Bonus?.MinimumPerHarvest ?? 1,
                        MaximumHarvestedQuantity = data.Bonus?.MaximumPerHarvest ?? 1,
                        ExtraQuantityChance      = (double)(data.Bonus?.ExtraChance ?? 0),
                    };
                    phase.HarvestedDrops.Add(drop);
                }
                item.Phases.Add(phase);
            }

            var dynFields = new List <DynamicGameAssets.PackData.DynamicFieldData>();

            {
                var dynField = new DynamicGameAssets.PackData.DynamicFieldData();
                dynField.Conditions.Add("Season", string.Join(", ", data.Seasons));
                dynField.Fields.Add("CanGrowNow", JToken.FromObject(true));
                dynFields.Add(dynField);
            }
            if ((data.Bonus?.MaxIncreasePerFarmLevel ?? 0) > 0)
            {
                for (int i = 1; i <= 10; ++i)
                {
                    var dynField = new DynamicGameAssets.PackData.DynamicFieldData();
                    dynField.Conditions.Add("SkillLevel:Farming", i.ToString());
                    dynField.Fields.Add($"Phases[{item.Phases.Count - 1}].HarvestedDrops[0].MaximumHarvestedQuantity",
                                        JToken.FromObject(item.Phases[item.Phases.Count - 1].HarvestedDrops[0].MaximumHarvestedQuantity + data.Bonus.MaxIncreasePerFarmLevel * i));
                    dynFields.Add(dynField);
                }
            }
            item.DynamicFields = dynFields.ToArray();

            crops.Add(item);

            var seedsItem = new DynamicGameAssets.PackData.ObjectPackData();

            i18n.AddI18n("en", $"object.{data.SeedName}.name", data.SeedName);
            i18n.AddI18n("en", $"object.{data.SeedName}.description", data.SeedDescription);
            seedsItem.ID        = data.SeedName;
            seedsItem.Texture   = Path.Combine("assets", "objects", item.ID + "_seeds.png");
            seedsItem.Category  = DynamicGameAssets.PackData.ObjectPackData.VanillaCategory.Seeds;
            seedsItem.SellPrice = data.SeedSellPrice == -1 ? null : data.SeedSellPrice;
            seedsItem.Plants    = $"{packId}/{item.ID}";
            foreach (var loc in data.SeedNameLocalization)
            {
                i18n.AddI18n(loc.Key, $"object.{data.SeedName}.name", loc.Value);
            }
            foreach (var loc in data.SeedDescriptionLocalization)
            {
                i18n.AddI18n(loc.Key, $"object.{data.SeedName}.description", loc.Value);
            }
            objs.Add(seedsItem);

            data.SeedPurchaseRequirements.Add("z " + string.Join(" ", data.Seasons));
            ConversionExtensions.DoShopEntry(shops, packId, data.SeedName, new JsonAssets.PurchaseData()
            {
                PurchasePrice        = data.SeedPurchasePrice,
                PurchaseFrom         = data.SeedPurchaseFrom,
                PurchaseRequirements = data.SeedPurchaseRequirements,
            });
            foreach (var entry in data.SeedAdditionalPurchaseData)
            {
                ConversionExtensions.DoShopEntry(shops, packId, data.SeedName, entry);
            }

            return(item);
        }