Exemplo n.º 1
0
        private void GenerateStageDecoration()
        {
            if (Winners != null)
            {
                Winners.Clear();
            }

            if (PointTable != null)
            {
                PointTable.Clear();
            }

            if (RewardBag != null)
            {
                RewardBag.Delete();
                RewardBag = null;
            }

            var map      = Siege.SiegeShard ? Map.Felucca : Map.Trammel;
            int treeType = 1;

            switch (CurrentCity)
            {
            case City.Trinsic: treeType = 2; break;

            case City.Britain:
            case City.NewMagincia: treeType = 3; break;

            case City.Minoc: treeType = 4; break;
            }

            if (TownTree != null)
            {
                TownTree.Delete();
            }

            TownTree = new TownTree(treeType);
            TownTree.MoveToWorld(_CityLocations[Stage], map);

            if (Elf == null)
            {
                Elf = new FestivalElf();
            }

            var p = new Point3D(TownTree.X + Utility.RandomMinMax(-1, 1), TownTree.Y + Utility.RandomMinMax(-1, 1), TownTree.Z);

            Elf.MoveToWorld(p, map);
            Elf.Home      = p;
            Elf.RangeHome = 5;
        }
Exemplo n.º 2
0
        private void SetupClaimPeriod()
        {
            var     map = Siege.SiegeShard ? Map.Felucca : Map.Trammel;
            Point3D p   = TownTree.Location;

            RewardBag = new SantasGiftBag();
            RewardBag.MoveToWorld(new Point3D(p.X, p.Y + 2, p.Z), map);

            if (PointTable.Count > 0)
            {
                Winners = new Dictionary <PlayerMobile, bool>();

                if (TownTree.Stage == TreeStage.Five)
                {
                    foreach (var pm in PointTable.Keys)
                    {
                        Winners[pm] = false;
                    }
                }
                else
                {
                    double perc;

                    switch (TownTree.Stage)
                    {
                    default: perc = 0.1; break;

                    case TreeStage.Three: perc = .25; break;

                    case TreeStage.Four: perc = .5; break;
                    }

                    int count = (int)Math.Max(1, (double)PointTable.Count * perc);

                    for (int i = 0; i < count; i++)
                    {
                        DoRaffle();
                    }
                }
            }

            PointTable.Clear();

            var tree = TownTree;

            if (tree != null)
            {
                for (int i = 0; i < 30; i++)
                {
                    Point3D spawnPoint;

                    var temp = new Point3D(Utility.RandomMinMax(tree.X - 5, tree.X + 5), Utility.RandomMinMax(tree.Y - 5, tree.Y + 5), tree.Z);

                    IPooledEnumerable eable = map.GetItemsInRange(temp, 0);
                    var spawnZ = temp.Z;

                    foreach (var comp in eable.OfType <AddonComponent>().Where(c => c.ItemID >= 0x46A2 && c.ItemID < 0x46A7))
                    {
                        spawnZ = Math.Max(spawnZ, comp.Z + 5);
                    }

                    eable.Free();

                    if (spawnZ != TownTree.Z)
                    {
                        spawnPoint   = temp;
                        spawnPoint.Z = spawnZ;
                    }
                    else
                    {
                        Spells.SpellHelper.AdjustField(ref temp, map, 20, false);

                        spawnPoint = temp;
                    }

                    var component = new AddonComponent(Utility.Random(0x46A2, 6))
                    {
                        Hue = Utility.RandomMinMax(1, 500)
                    };

                    tree.AddComponent(component, tree.X - spawnPoint.X, tree.Y - spawnPoint.Y, tree.Z - spawnPoint.Z);
                }
            }
        }