Beispiel #1
0
            protected override void OnTarget(Mobile from, object targeted)
            {
                if (m_Seed.Deleted)
                {
                    return;
                }

                if (!m_Seed.IsChildOf(from.Backpack))
                {
                    from.SendLocalizedMessage(1042664);                       // You must have the object in your backpack to use it.
                    return;
                }

                if (targeted is PlantItem)
                {
                    PlantItem plant = (PlantItem)targeted;

                    plant.PlantSeed(from, m_Seed);
                }
                else if (targeted is Server.Items.GardenAddonComponent)
                {
                    Server.Items.GardenAddonComponent addon = (Server.Items.GardenAddonComponent)targeted;

                    if (addon.Plant != null)
                    {
                        from.SendLocalizedMessage(1150367); // This plot already has a plant!
                    }
                    else
                    {
                        Server.Multis.BaseHouse house = Server.Multis.BaseHouse.FindHouseAt(addon);

                        if (house != null)
                        {
                            int fertileDirt = from.Backpack == null ? 0 : from.Backpack.GetAmount(typeof(FertileDirt), false);

                            if (fertileDirt > 0)
                            {
                                from.SendGump(new FertileDirtGump(m_Seed, fertileDirt, addon));
                            }
                            else
                            {
                                RaisedGardenPlantItem dirt = new RaisedGardenPlantItem();
                                dirt.MoveToWorld(new Point3D(addon.X, addon.Y, addon.Z + 5), addon.Map);

                                dirt.PlantSeed(from, m_Seed);
                                addon.Plant    = dirt;
                                dirt.Component = addon;
                            }
                        }
                    }
                }
                else if (targeted is Item)
                {
                    ((Item)targeted).LabelTo(from, 1061919); // You must use a seed on a bowl of dirt!
                }
                else
                {
                    from.SendLocalizedMessage(1061919); // You must use a seed on a bowl of dirt!
                }
            }
        private void Replace()
        {
            Container c = this.Parent as Container;

            if (c != null)
            {
                var deed = new ArcaneBookShelfDeedSouth();
                c.DropItem(deed);
            }
            else if (this.Parent == null)
            {
                Server.Multis.BaseHouse house = Server.Multis.BaseHouse.FindHouseAt(this);

                var deed = new ArcaneBookShelfDeedSouth();
                deed.MoveToWorld(this.Location, this.Map);

                deed.IsLockedDown = IsLockedDown;
                deed.IsSecure     = IsSecure;
                deed.Movable      = Movable;

                if (house != null && house.LockDowns.ContainsKey(this))
                {
                    house.LockDowns.Remove(this);
                    house.LockDowns.Add(deed, house.Owner);
                }
                else if (house != null && house.IsSecure(this))
                {
                    house.ReleaseSecure(house.Owner, this);
                    house.AddSecure(house.Owner, deed);
                }
            }

            Delete();
        }
        private void Replace()
        {
            Container c = Parent as Container;

            if (c != null)
            {
                ElvenDresserDeedEast deed = new ElvenDresserDeedEast();
                c.DropItem(deed);
            }
            else if (Parent == null)
            {
                Server.Multis.BaseHouse house = Server.Multis.BaseHouse.FindHouseAt(this);

                ElvenDresserDeedEast deed = new ElvenDresserDeedEast();
                deed.MoveToWorld(Location, Map);

                deed.IsLockedDown = IsLockedDown;
                deed.IsSecure     = IsSecure;
                deed.Movable      = Movable;

                if (house != null && house.LockDowns.ContainsKey(this))
                {
                    house.LockDowns.Remove(this);
                    house.LockDowns.Add(deed, house.Owner);
                }
                else if (house != null && house.IsSecure(this))
                {
                    house.ReleaseSecure(house.Owner, this);
                    house.AddSecure(house.Owner, deed);
                }
            }

            Delete();
        }
Beispiel #4
0
        private void Replace()
        {
            Container c = this.Parent as Container;

            if (c != null)
            {
                var deed = new ElvenDresserDeedSouth();
                c.DropItem(deed);
            }
            else if (this.Parent == null)
            {
                Server.Multis.BaseHouse house = Server.Multis.BaseHouse.FindHouseAt(this);

                var deed = new ElvenDresserDeedSouth();
                deed.MoveToWorld(this.Location, this.Map);

                deed.IsLockedDown = IsLockedDown;
                deed.IsSecure     = IsSecure;
                deed.Movable      = Movable;

                if (house != null && house.LockDowns.Contains(this))
                {
                    house.LockDowns.Remove(this);
                    house.LockDowns.Add(deed);
                }
                else if (house != null && house.Secures.Contains(this))
                {
                    house.Secures.Remove(this);
                    house.Secures.Add(deed);
                }
            }

            Delete();
        }
Beispiel #5
0
        public static void Replace(Item item1, Item item2)
        {
            Timer.DelayCall <Item, Item>(TimeSpan.FromSeconds(1), (oldItem, newItem) =>
            {
                var parent = oldItem.Parent;

                if (parent == null)
                {
                    Server.Multis.BaseHouse house = Server.Multis.BaseHouse.FindHouseAt(oldItem);

                    newItem.MoveToWorld(oldItem.Location, oldItem.Map);

                    newItem.IsLockedDown = oldItem.IsLockedDown;
                    newItem.IsSecure     = oldItem.IsSecure;
                    newItem.Movable      = oldItem.Movable;

                    if (house != null && house.LockDowns.ContainsKey(oldItem))
                    {
                        house.LockDowns.Remove(oldItem);
                        house.LockDowns.Add(newItem, house.Owner);
                    }
                    else if (house != null && house.IsSecure(oldItem))
                    {
                        house.ReleaseSecure(house.Owner, oldItem);
                        house.AddSecure(house.Owner, newItem);
                    }

                    oldItem.Delete();
                }
                else
                {
                    newItem.Movable = oldItem.Movable;

                    if (parent is Container)
                    {
                        oldItem.Delete();
                        ((Container)parent).DropItem(newItem);
                    }
                    else if (parent is Mobile)
                    {
                        oldItem.Delete();
                        ((Mobile)parent).AddItem(newItem);
                    }
                    else
                    {
                        newItem.Delete();
                        oldItem.Delete();

                        Console.WriteLine("Item replacement failed: {0}", newItem.GetType());
                    }
                }
            }, item1, item2);
        }
        private void Replace()
        {
            Server.Multis.BaseHouse house = Server.Multis.BaseHouse.FindHouseAt(this);

            if (house != null)
            {
                Point3D p   = this.Location;
                Map     map = this.Map;

                house.Addons.Remove(this);
                Delete();

                var addon = new ArcaneBookShelfAddonEast();
                addon.MoveToWorld(new Point3D(p.X, p.Y + 1, p.Z), map);
                house.Addons[addon] = house.Owner;
            }
        }
Beispiel #7
0
        private void Replace()
        {
            Server.Multis.BaseHouse house = Server.Multis.BaseHouse.FindHouseAt(this);

            if (house != null)
            {
                Point3D p   = this.Location;
                Map     map = this.Map;

                house.Addons.Remove(this);
                Delete();

                var addon = new ElvenDresserAddonSouth();
                addon.MoveToWorld(new Point3D(p.X + 1, p.Y, p.Z), map);
                house.Addons.Add(addon);
            }
        }
        private void Replace()
        {
            Server.Multis.BaseHouse house = Server.Multis.BaseHouse.FindHouseAt(this);

            if (house != null)
            {
                Point3D p   = this.Location;
                Map     map = this.Map;

                house.Addons.Remove(this);
                Delete();

                var addon = new ArcaneBookShelfAddonSouth();
                addon.MoveToWorld(p, map);
                house.Addons.Add(addon);
            }
        }
        private void Replace()
        {
            Server.Multis.BaseHouse house = Server.Multis.BaseHouse.FindHouseAt(this);

            if (house != null)
            {
                Point3D p   = Location;
                Map     map = Map;

                house.Addons.Remove(this);
                Delete();

                ElvenDresserAddonEast addon = new ElvenDresserAddonEast();
                addon.MoveToWorld(p, map);
                house.Addons[addon] = house.Owner;
            }
        }
Beispiel #10
0
        public override void OnResponse(NetState sender, RelayInfo info)
        {
            Mobile from = sender.Mobile;

            if (info.ButtonID >= 1)
            {
                BaseAddon addon = new CarpetAddon(info.ButtonID - 1, m_Width, m_Height);

                Server.Spells.SpellHelper.GetSurfaceTop(ref m_P3D);

                Server.Multis.BaseHouse house = null;
                AddonFitResult          res   = addon.CouldFit(m_P3D, m_Map, from, ref house);

                if (res == AddonFitResult.Valid || from.AccessLevel >= AccessLevel.GameMaster)
                {
                    addon.MoveToWorld(new Point3D(m_P3D), m_Map);
                }
                else if (res == AddonFitResult.Blocked)
                {
                    from.SendLocalizedMessage(500269);                       // You cannot build that there.
                }
                else if (res == AddonFitResult.NotInHouse)
                {
                    from.SendLocalizedMessage(500274);                       // You can only place this in a house that you own!
                }
                else if (res == AddonFitResult.DoorsNotClosed)
                {
                    from.SendMessage("You must close all house doors before placing this.");
                }

                if (res == AddonFitResult.Valid || from.AccessLevel >= AccessLevel.GameMaster)
                {
                    m_Deed.Delete();

                    if (house != null)
                    {
                        house.Addons.Add(addon);
                    }
                }
                else
                {
                    addon.Delete();
                }
            }
        }
        public static int Announce(out int PlayerQuestsAnnounced)
        {
            PlayerQuestsAnnounced = 0;
            //LogHelper Logger = new LogHelper("PlayerQuest.log", false);
            int count = 0;

            try
            {
                int       msgndx       = 0;
                ArrayList ToDelete     = new ArrayList();
                ArrayList ParentMobile = new ArrayList();

                // clear any messages currently on the TC
                PlayerQuestManager.ClearAllMessages();

                // find expired
                foreach (object o in PlayerQuestManager.Deeds)
                {
                    if (o is PlayerQuestDeed == false)
                    {
                        continue;
                    }
                    PlayerQuestDeed pqd = o as PlayerQuestDeed;

                    if (pqd.Deleted == true)
                    {
                        ToDelete.Add(pqd);
                    }
                    else
                    {
                        object root = pqd.RootParent;
                        //bool exclude = false;
                        count++;

                        // don't announce an expired quest
                        if (pqd.Expired == true)
                        {
                            continue;
                        }

                        // don't announce if in a locked down container in a house
                        if (root is BaseContainer && Server.Multis.BaseHouse.FindHouseAt(pqd) != null)
                        {
                            BaseContainer bc = root as BaseContainer;
                            if (bc.IsLockedDown == true || bc.IsSecure == true)
                            {
                                continue;
                            }
                        }

                        // don't announce if locked down or secure
                        if (pqd.IsLockedDown == true || pqd.IsSecure == true)
                        {
                            continue;
                        }

                        // don't announce if on the internal map
                        if (pqd.Map == Map.Internal || root is Mobile && (root as Mobile).Map == Map.Internal)
                        {
                            continue;
                        }

                        // don't announce if in bankbox
                        if (root is Mobile && pqd.IsChildOf((root as Mobile).BankBox))
                        {
                            continue;
                        }

                        // only announce 1 ticket per mobile or container
                        // (15 tickets on a mob, or in a chest should generate 1 announcement)
                        if (root != null)
                        {
                            if (ParentMobile.Contains(root))
                            {
                                continue;
                            }
                        }

                        // only public houses
                        Server.Multis.BaseHouse house = null;
                        if (root is Item)
                        {
                            house = Server.Multis.BaseHouse.FindHouseAt(root as Item);
                        }
                        if (root is Mobile)
                        {
                            house = Server.Multis.BaseHouse.FindHouseAt(root as Mobile);
                        }
                        if (house != null && house.Public == false)
                        {
                            continue;
                        }

                        ///////////////////////////////////////////////////////
                        // okay announce it !
                        // record the parent
                        if (root != null)
                        {
                            ParentMobile.Add(root);
                        }

                        // format the message
                        string[] lines = new string[2];
                        if (root is Mobile)
                        {
                            Mobile mob = root as Mobile;
                            lines[0] = String.Format(
                                "{0} was last seen near {1}. {2} is not to be trusted.",
                                mob.Name,
                                BaseOverland.DescribeLocation(mob),
                                mob.Female == true ? "She" : "He");

                            lines[1] = String.Format(
                                "Do what you will with {0}, but get that quest ticket {1} carries.",
                                mob.Female == true ? "her" : "him",
                                mob.Female == true ? "she" : "he");
                        }
                        else
                        {
                            lines[0] = String.Format(
                                "A quest ticket was last seen near {0}",
                                BaseOverland.DescribeLocation(root == null ? pqd : root as Item));

                            lines[1] = String.Format(
                                "It may be of significant value, but be careful!");
                        }

                        // queue it
                        PlayerQuestManager.SetMessage(lines, msgndx++);

                        // count it
                        PlayerQuestsAnnounced++;
                    }

                    // record the expiring quest chest
                    //Logger.Log(LogType.Item, bc, "Player Quest prize being deleted because the quest has expired.");
                }

                // cleanup
                for (int i = 0; i < ToDelete.Count; i++)
                {
                    PlayerQuestDeed pqd = ToDelete[i] as PlayerQuestDeed;
                    if (pqd != null)
                    {
                        PlayerQuestManager.Deeds.Remove(pqd);
                    }
                }
            }
            catch (Exception e)
            {
                LogHelper.LogException(e);
                Console.WriteLine("Exception while running PlayerQuestManager.Announce() job");
                Console.WriteLine(e);
            }
            finally
            {
                //Logger.Finish();
            }

            return(count);
        }
Beispiel #12
0
        private static void EventSink_DeleteRequest(DeleteRequestEventArgs e)
        {
            NetState state = e.State;
            int      index = e.Index;

            Account acct = state.Account as Account;

            if (acct == null)
            {
                state.Dispose();
            }
            else if (index < 0 || index >= 5)
            {
                state.Send(new DeleteResult(DeleteResultType.BadRequest));
                state.Send(new CharacterListUpdate(acct));
            }
            else
            {
                Mobile m = acct[index];

                if (m == null)
                {
                    state.Send(new DeleteResult(DeleteResultType.CharNotExist));
                    state.Send(new CharacterListUpdate(acct));
                }
                else if (m.NetState != null)
                {
                    state.Send(new DeleteResult(DeleteResultType.CharBeingPlayed));
                    state.Send(new CharacterListUpdate(acct));
                }
                else if (RestrictDeletion && DateTime.Now < (m.CreationTime + DeleteDelay))
                {
                    state.Send(new DeleteResult(DeleteResultType.CharTooYoung));
                    state.Send(new CharacterListUpdate(acct));
                }
                else
                {
                    bool bDelete = true;

                    if (m is Server.Mobiles.PlayerMobile)
                    {
                        Server.Mobiles.PlayerMobile  pm     = (Server.Mobiles.PlayerMobile)m;
                        System.Collections.ArrayList houses = Multis.BaseHouse.GetHouses(pm);
                        if (houses.Count > 0)
                        {
                            if (acct.Count > 1)
                            {
                                Mobile newOwner = null;
                                //find a non-deleted, non-null character on the account
                                for (int i = 0; i < acct.Count; i++)
                                {
                                    if (index != i)
                                    {
                                        if (acct[i] != null)
                                        {
                                            if (!acct[i].Deleted)
                                            {
                                                newOwner = acct[i];
                                            }
                                        }
                                    }
                                }

                                if (newOwner == null)                                 //sanity check, should never happen
                                {
                                    System.Console.WriteLine("Sanity check failed: newOwner == null!");
                                    bDelete = false;
                                    state.Send(new DeleteResult(DeleteResultType.BadRequest));
                                }
                                else
                                {
                                    for (int i = 0; i < houses.Count; ++i)
                                    {
                                        if (houses[i] is Server.Multis.BaseHouse)
                                        {
                                            Server.Multis.BaseHouse house = (Server.Multis.BaseHouse)houses[i];
                                            if (house != null)
                                            {
                                                if (house.Owner == m)                                                 //another sanity check - house.Owner should always be m at this point!
                                                {
                                                    //swap to new owner
                                                    house.Owner = newOwner;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                            else
                            {
                                //If account only has one character, then refuse to delete the houseowner
                                bDelete = false;
                                state.Send(new DeleteResult(DeleteResultType.BadRequest));
                            }
                        }
                    }

                    if (bDelete)
                    {
                        Console.WriteLine("Client: {0}: Deleting character {1} (name:{3}) (0x{2:X})", state, index, m.Serial.Value, m.Name);
                        m.Delete();
                    }

                    state.Send(new CharacterListUpdate(acct));
                }
            }
        }
Beispiel #13
0
        public override bool CanPostGreeting(Server.Multis.BaseHouse house, Mobile m)
        {
            var sys = CitySystem;

            return(sys != null && (m.AccessLevel >= AccessLevel.GameMaster || sys.Governor == m));
        }