示例#1
0
        public static Parcel CreateParcel(int value, bool placeholder)
        {
            Parcel parcel = new Parcel()
            {
                Name  = string.Concat("Items worth ", value, " GP"),
                Value = value
            };

            if (!placeholder)
            {
                parcel.Details = Treasure.RandomMundaneItem(value);
            }
            return(parcel);
        }
示例#2
0
        public static string RandomMundaneItem(int value)
        {
            List <string> strs = Treasure.create_from_gp(value);
            string        str  = "";

            foreach (string str1 in strs)
            {
                if (str != "")
                {
                    str = string.Concat(str, "; ");
                }
                str = string.Concat(str, str1);
            }
            return(str);
        }
示例#3
0
        private static List <string> create_from_gp(int gp)
        {
            int           i;
            int           _value = 0;
            int           num    = 0;
            List <string> strs   = new List <string>();

            if (Session.Random.Next() % 4 != 0)
            {
                for (i = gp; i != 0; i = i - _value * num)
                {
                    _value = Treasure.get_value(i);
                    if (_value == 0)
                    {
                        break;
                    }
                    num = i / _value;
                    string str = Treasure.random_item_type(num != 1, true);
                    if (num != 1)
                    {
                        object[] objArray = new object[] { num, " ", str, " (worth ", _value, " GP each)" };
                        strs.Add(string.Concat(objArray));
                    }
                    else
                    {
                        string   str1      = (TextHelper.StartsWithVowel(str) ? "an" : "a");
                        object[] objArray1 = new object[] { str1, " ", str, " (worth ", _value, " GP)" };
                        strs.Add(string.Concat(objArray1));
                    }
                }
                if (i != 0)
                {
                    strs.Add(Treasure.coins(i));
                }
            }
            else
            {
                strs.Add(Treasure.coins(gp));
            }
            for (int j = 0; j != strs.Count; j++)
            {
                strs[j] = TextHelper.Capitalise(strs[j], false);
            }
            return(strs);
        }
示例#4
0
        private static Parcel get_magic_item(int level, bool placeholder)
        {
            int num = Math.Min(30, level);

            if (placeholder)
            {
                return(new Parcel(Treasure.get_placeholder_item(level)));
            }
            MagicItem magicItem = Treasure.RandomMagicItem(num);

            if (magicItem != null)
            {
                return(new Parcel(magicItem));
            }
            Parcel parcel = new Parcel()
            {
                Details = string.Concat("Random magic item (level ", num, ")")
            };

            return(parcel);
        }
示例#5
0
        public static List <Parcel> CreateParcelSet(int level, int size, bool placeholder_items)
        {
            List <Parcel> parcels = new List <Parcel>();

            switch (size)
            {
            case 1:
            {
                parcels.Add(Treasure.get_magic_item(level + 2, placeholder_items));
                break;
            }

            case 2:
            {
                parcels.Add(Treasure.get_magic_item(level + 2, placeholder_items));
                break;
            }

            case 3:
            {
                parcels.Add(Treasure.get_magic_item(level + 4, placeholder_items));
                parcels.Add(Treasure.get_magic_item(level + 2, placeholder_items));
                break;
            }

            case 4:
            {
                parcels.Add(Treasure.get_magic_item(level + 4, placeholder_items));
                parcels.Add(Treasure.get_magic_item(level + 3, placeholder_items));
                parcels.Add(Treasure.get_magic_item(level + 1, placeholder_items));
                break;
            }

            case 5:
            {
                parcels.Add(Treasure.get_magic_item(level + 4, placeholder_items));
                parcels.Add(Treasure.get_magic_item(level + 3, placeholder_items));
                parcels.Add(Treasure.get_magic_item(level + 2, placeholder_items));
                parcels.Add(Treasure.get_magic_item(level + 1, placeholder_items));
                break;
            }

            case 6:
            {
                parcels.Add(Treasure.get_magic_item(level + 4, placeholder_items));
                parcels.Add(Treasure.get_magic_item(level + 3, placeholder_items));
                parcels.Add(Treasure.get_magic_item(level + 2, placeholder_items));
                parcels.Add(Treasure.get_magic_item(level + 2, placeholder_items));
                parcels.Add(Treasure.get_magic_item(level + 1, placeholder_items));
                break;
            }

            case 7:
            {
                parcels.Add(Treasure.get_magic_item(level + 4, placeholder_items));
                parcels.Add(Treasure.get_magic_item(level + 3, placeholder_items));
                parcels.Add(Treasure.get_magic_item(level + 2, placeholder_items));
                parcels.Add(Treasure.get_magic_item(level + 2, placeholder_items));
                parcels.Add(Treasure.get_magic_item(level + 1, placeholder_items));
                parcels.Add(Treasure.get_magic_item(level + 1, placeholder_items));
                break;
            }

            case 8:
            {
                parcels.Add(Treasure.get_magic_item(level + 4, placeholder_items));
                parcels.Add(Treasure.get_magic_item(level + 3, placeholder_items));
                parcels.Add(Treasure.get_magic_item(level + 3, placeholder_items));
                parcels.Add(Treasure.get_magic_item(level + 2, placeholder_items));
                parcels.Add(Treasure.get_magic_item(level + 2, placeholder_items));
                parcels.Add(Treasure.get_magic_item(level + 1, placeholder_items));
                parcels.Add(Treasure.get_magic_item(level + 1, placeholder_items));
                break;
            }
            }
            List <int> gpValues = Treasure.get_gp_values(level);

            if (size == 1)
            {
                gpValues.RemoveAt(0);
            }
            foreach (int gpValue in gpValues)
            {
                parcels.Add(Treasure.CreateParcel(gpValue, placeholder_items));
            }
            return(parcels);
        }
示例#6
0
        public static PlotPoint AutoBuild(Map map, AutoBuildData data)
        {
            PlotPoint plotPoint = new PlotPoint(string.Concat(map.Name, " Delve"))
            {
                Details = "This delve was automatically generated.",
                Element = new MapElement(map.ID, Guid.Empty)
            };
            int           level   = data.Level;
            List <Parcel> parcels = Treasure.CreateParcelSet(data.Level, Session.Project.Party.Size, false);

            foreach (MapArea area in map.Areas)
            {
                PlotPoint _encounter = new PlotPoint(area.Name);
                switch (Session.Random.Next() % 8)
                {
                case 0:
                case 1:
                case 2:
                case 3:
                case 4:
                case 5:
                {
                    _encounter.Element = DelveBuilder.get_encounter(map, area, data);
                    break;
                }

                case 6:
                {
                    _encounter.Element = DelveBuilder.get_encounter(map, area, data);
                    break;
                }

                case 7:
                {
                    _encounter.Element = DelveBuilder.get_encounter(map, area, data);
                    break;
                }
                }
                int num = 0;
                switch (Session.Random.Next() % 8)
                {
                case 0:
                case 1:
                {
                    num = 0;
                    break;
                }

                case 2:
                case 3:
                case 4:
                case 5:
                case 6:
                {
                    num = 1;
                    break;
                }

                case 7:
                {
                    num = 2;
                    break;
                }
                }
                for (int i = 0; i != num; i++)
                {
                    if (parcels.Count == 0)
                    {
                        level   = Math.Min(30, level + 1);
                        parcels = Treasure.CreateParcelSet(level, Session.Project.Party.Size, false);
                    }
                    int    num1 = Session.Random.Next() % parcels.Count;
                    Parcel item = parcels[num1];
                    parcels.RemoveAt(num1);
                    _encounter.Parcels.Add(item);
                }
                plotPoint.Subplot.Points.Add(_encounter);
            }
            return(plotPoint);
        }
示例#7
0
        public static PlotPoint AutoBuild(Map map, AutoBuildData data)
        {
            PlotPoint pp = new PlotPoint(map.Name + " Delve");

            pp.Details = "This delve was automatically generated.";
            pp.Element = new MapElement(map.ID, Guid.Empty);

            int           parcel_level = data.Level;
            List <Parcel> parcels      = Treasure.CreateParcelSet(data.Level, Session.Project.Party.Size, false);

            foreach (MapArea ma in map.Areas)
            {
                PlotPoint point = new PlotPoint(ma.Name);

                switch (Session.Random.Next() % 8)
                {
                case 0:
                case 1:
                case 2:
                case 3:
                case 4:
                case 5:
                    // Encounter
                    point.Element = get_encounter(map, ma, data);
                    break;

                case 6:
                    // Trap
                    point.Element = get_encounter(map, ma, data);
                    break;

                case 7:
                    // Skill challenge
                    point.Element = get_encounter(map, ma, data);
                    break;
                }

                // Treasure parcels
                int parcel_count = 0;
                switch (Session.Random.Next() % 8)
                {
                case 0:
                case 1:
                    // No parcels
                    parcel_count = 0;
                    break;

                case 2:
                case 3:
                case 4:
                case 5:
                case 6:
                    // One parcel
                    parcel_count = 1;
                    break;

                case 7:
                    // Two parcels
                    parcel_count = 2;
                    break;
                }

                for (int n = 0; n != parcel_count; ++n)
                {
                    if (parcels.Count == 0)
                    {
                        // Generate a new list of parcels of the next level
                        parcel_level = Math.Min(30, parcel_level + 1);
                        parcels      = Treasure.CreateParcelSet(parcel_level, Session.Project.Party.Size, false);
                    }

                    int    index = Session.Random.Next() % parcels.Count;
                    Parcel p     = parcels[index];
                    parcels.RemoveAt(index);

                    point.Parcels.Add(p);
                }

                pp.Subplot.Points.Add(point);
            }

            return(pp);
        }