Exemple #1
0
        /**
         * <summary>Generates a random string of the given type.</summary>
         *
         * <param name="type">The type of parameter to generate. See <see cref="HeadlineTokenType.Other"/>.</param>
         * <param name="rand">The RNG to use to generate this parameter.</param>
         * <returns>The parameter generated as a string.</returns>
         *
         * <seealso cref="HeadlineTokenType"/>
         * <seealso cref="HeadlineTokenSubtype"/>
         */
        private string GenerateOther(HeadlineTokenSubtype type, IHeadlineContentProvider rng)
        {
            switch (type)
            {
            case HeadlineTokenSubtype.Earthquake: return(rng.GetRandomEarthquake());

            case HeadlineTokenSubtype.Location: return(rng.GetRandomLocation());

            case HeadlineTokenSubtype.Fatalities: return(rng.GetRandomFatalities());

            default: return("Zuzu City");
            }
        }
Exemple #2
0
        /**
         * <summary>Generates a new event based on the headline template</summary>
         * <remarks>
         *  This method doesn't apply the event; it just generates it.
         * </remarks>
         *
         * <param name="rand">The RNG to use to generate this event. (Default: a brand new one)</param>
         * <returns>An event based on this template.</returns>
         */
        public EconEvent GenerateNewEvent(IHeadlineContentProvider rng)
        {
            StringBuilder builder      = new StringBuilder();
            int           affectedItem = -1;
            int           oldPrice     = 0;

            foreach (HeadlineToken token in this.headlineTemplate)
            {
                // Get the subtype:
                var subtype = HeadlineTemplate.GetSubType(token, rng);
                switch (token.type)
                {
                case HeadlineTokenType.Item:
                {
                    // Generate an item, whatever kind.
                    // If we haven't yet generated an item, select that to
                    // be the item affected by this event.
                    int item     = GenerateItem(subtype, rng);
                    var itemInfo = rng.GetItemInformation(item);
                    if (affectedItem == -1)
                    {
                        affectedItem = item;
                        oldPrice     = itemInfo.price;
                    }

                    builder.Append(itemInfo.name);
                    break;
                }

                case HeadlineTokenType.Other:
                {
                    builder.Append(GenerateOther(subtype, rng));
                    break;
                }

                case HeadlineTokenType.String:
                {
                    builder.Append(token.str);
                    break;
                }
                }
            }

            int percent = GeneratePercentChange(affectedItem, rng.GetRNG());

            return(new EconEvent(builder.ToString(), affectedItem, percent, oldPrice));
        }
Exemple #3
0
 /**
  * <summary>Returns the subtype of the token, randomly selecting one if necessary.</summary>
  *
  * <param name="token">The token whose subtype to get.</param>
  * <param name="rng">The RNG provider to use if necessary.</param>
  *
  * <returns>The subtype of the token.</returns>
  */
 private static HeadlineTokenSubtype GetSubType(HeadlineToken token, IHeadlineContentProvider rng)
 {
     if (token.subtypes == null || token.subtypes.Count == 0)
     {
         return(default(HeadlineTokenSubtype));
     }
     else if (token.subtypes.Count == 1)
     {
         return(token.subtypes[0]);
     }
     else
     {
         var rand  = rng.GetRNG();
         var index = rand.Next(token.subtypes.Count);
         return(token.subtypes[index]);
     }
 }
Exemple #4
0
        /**
         * <summary>Generates a random item of the given type.</summary>
         *
         * <param name="type">The type of item to generate. See <see cref="HeadlineTokenType.Item"/>.</param>
         * <param name="rand">The RNG to use to generate this item.</param>
         * <returns>The ID of the item generated.</returns>
         *
         * <seealso cref="HeadlineTokenType"/>
         * <seealso cref="HeadlineTokenSubtype"/>
         */
        private int GenerateItem(HeadlineTokenSubtype type, IHeadlineContentProvider rng)
        {
            switch (type)
            {
            case HeadlineTokenSubtype.Crop: return(rng.GetRandomCrop());

            case HeadlineTokenSubtype.Mineral: return(rng.GetRandomMineral());

            case HeadlineTokenSubtype.Foraged: return(rng.GetRandomForagedItem());

            case HeadlineTokenSubtype.RiverFish: return(rng.GetRandomRiverFish());

            case HeadlineTokenSubtype.OceanFish: return(rng.GetRandomOceanFish());

            case HeadlineTokenSubtype.Artisan: return(rng.GetRandomArtisanGood());

            case HeadlineTokenSubtype.Cooked: return(rng.GetRandomCookedItem());

            default: return(StardewValley.Object.stone);
            }
        }