Beispiel #1
0
        public static bool CheckPlacement(Mobile from, Point3D p, int multiId, Point3D offset)
        {
            ArrayList            toMove;
            Point3D              center = new Point3D(p.X - offset.X, p.Y - offset.Y, p.Z - offset.Z);
            HousePlacementResult res    = HousePlacement.Check(from, multiId, center, out toMove);

            if (res == HousePlacementResult.Valid)
            {
                return(true);
            }
            else if (res == HousePlacementResult.BadItem || res == HousePlacementResult.BadLand || res == HousePlacementResult.BadStatic || res == HousePlacementResult.BadRegionHidden)
            {
                from.SendLocalizedMessage(1043287);                   // The house could not be created here.  Either something is blocking the house, or the house would not be on valid terrain.
                return(false);
            }
            else if (res == HousePlacementResult.NoSurface)
            {
                from.SendMessage("The house could not be created here.  Part of the foundation would not be on any surface.");
                return(false);
            }
            else if (res == HousePlacementResult.BadRegion)
            {
                from.SendLocalizedMessage(501265);                   // Housing cannot be created in this area.
                return(false);
            }
            else
            {
                return(false);
            }
        }
Beispiel #2
0
        private void PlacementWarning_Callback(Mobile from, bool okay, object state)
        {
            PreviewHouse prevHouse = (PreviewHouse)state;

            if (Deleted || !okay || !from.CheckAlive() || from.Backpack == null || from.Backpack.FindItemByType(typeof(HouseDeed)) == null)
            {
                prevHouse.Delete();
                return;
            }
            ;



            if (prevHouse.Deleted)
            {
                /* Too much time has passed and the test house you created has been deleted.
                 * Please try again!
                 */
                from.SendGump(new NoticeGump(1060637, 30720, 1060647, 32512, 320, 180, null, null));

                return;
            }

            Point3D center = prevHouse.Location;
            Map     map    = prevHouse.Map;

            prevHouse.Delete();

            ArrayList            toMove;
            HousePlacementResult res   = HousePlacement.Check(from, m_MultiID, center, out toMove);
            BaseHouse            house = GetHouse(from);

            house.MoveToWorld(center, from.Map);
            Delete();

            for (int i = 0; i < toMove.Count; ++i)
            {
                object o = toMove[i];

                if (o is Mobile)
                {
                    ((Mobile)o).Location = house.BanLocation;
                }
                else if (o is Item)
                {
                    ((Item)o).Location = house.BanLocation;
                }
            }
        }
Beispiel #3
0
        public void OnPlacement(Mobile from, Point3D p)
        {
            if (Deleted)
            {
                return;
            }

            if (!IsChildOf(from.Backpack))
            {
                from.SendLocalizedMessage(1042001);                   // That must be in your pack for you to use it.
            }
            else if (from.AccessLevel < AccessLevel.GameMaster && BaseHouse.HasAccountHouse(from))
            {
                from.SendLocalizedMessage(501271);                   // You already own a house, you may not place another!
            }
            else
            {
                ArrayList            toMove;
                Point3D              center = new Point3D(p.X - m_Offset.X, p.Y - m_Offset.Y, p.Z - m_Offset.Z);
                HousePlacementResult res    = HousePlacement.Check(from, m_MultiID, center, out toMove);

                switch (res)
                {
                case HousePlacementResult.Valid:
                {
                    BaseHouse house = GetHouse(from);
                    house.MoveToWorld(center, from.Map);
                    Delete();

                    for (int i = 0; i < toMove.Count; ++i)
                    {
                        object o = toMove[i];

                        if (o is Mobile)
                        {
                            ((Mobile)o).Location = house.BanLocation;
                        }
                        else if (o is Item)
                        {
                            ((Item)o).Location = house.BanLocation;
                        }
                    }

                    break;
                }

                case HousePlacementResult.BadItem:
                case HousePlacementResult.BadLand:
                case HousePlacementResult.BadStatic:
                case HousePlacementResult.BadRegionHidden:
                {
                    from.SendLocalizedMessage(1043287);                               // The house could not be created here.  Either something is blocking the house, or the house would not be on valid terrain.
                    break;
                }

                case HousePlacementResult.NoSurface:
                {
                    from.SendMessage("The house could not be created here.  Part of the foundation would not be on any surface.");
                    break;
                }

                case HousePlacementResult.BadRegion:
                {
                    from.SendLocalizedMessage(501265);                               // Housing cannot be created in this area.
                    break;
                }

                case HousePlacementResult.BadRegionTemp:
                {
                    from.SendLocalizedMessage(501270);     //Lord British has decreed a 'no build' period, thus you cannot build this house at this time.
                    break;
                }

                case HousePlacementResult.BadRegionRaffle:
                {
                    from.SendLocalizedMessage(1150493);     // You must have a deed for this plot of land in order to build here.
                    break;
                }
                }
            }
        }
Beispiel #4
0
        public bool Validate(Mobile from)
        {
            // original region "name" checks.
            if (from.Region.Name == "Cove" || from.Region.Name == "Britain" ||                //towns
                from.Region.Name == "Jhelom" || from.Region.Name == "Minoc" ||                //towns
                from.Region.Name == "Haven" || from.Region.Name == "Trinsic" ||               //towns
                from.Region.Name == "Vesper" || from.Region.Name == "Yew" ||                  //towns
                from.Region.Name == "Wind" || from.Region.Name == "Serpent's Hold" ||         //towns
                from.Region.Name == "Skara Brae" || from.Region.Name == "Nujel'm" ||          //towns
                from.Region.Name == "Moonglow" || from.Region.Name == "Magincia" ||           //towns
                from.Region.Name == "Delucia" || from.Region.Name == "Papua" ||               //towns
                from.Region.Name == "Buccaneer's Den" || from.Region.Name == "Ocllo" ||       //towns
                from.Region.Name == "Gargoyle City" || from.Region.Name == "Mistas" ||        //towns
                from.Region.Name == "Montor" || from.Region.Name == "Alexandretta's Bowl" ||  //towns
                from.Region.Name == "Lenmir Anfinmotas" || from.Region.Name == "Reg Volon" || //towns
                from.Region.Name == "Bet-Lem Reg" || from.Region.Name == "Lake Shire" ||      //towns
                from.Region.Name == "Ancient Citadel" || from.Region.Name == "Luna" ||        //towns
                from.Region.Name == "Umbra" ||                                                //towns

                from.Region.Name == "Moongates" ||

                from.Region.Name == "Covetous" || from.Region.Name == "Deceit" ||                   //dungeons
                from.Region.Name == "Despise" || from.Region.Name == "Destard" ||                   //dungeons
                from.Region.Name == "Hythloth" || from.Region.Name == "Shame" ||                    //dungeons
                from.Region.Name == "Wrong" || from.Region.Name == "Terathan Keep" ||               //dungeons
                from.Region.Name == "Fire" || from.Region.Name == "Ice" ||                          //dungeons
                from.Region.Name == "Rock Dungeon" || from.Region.Name == "Spider Cave" ||          //dungeons
                from.Region.Name == "Spectre Dungeon" || from.Region.Name == "Blood Dungeon" ||     //dungeons
                from.Region.Name == "Wisp Dungeon" || from.Region.Name == "Ankh Dungeon" ||         //dungeons
                from.Region.Name == "Exodus Dungeon" || from.Region.Name == "Sorcerer's Dungeon" || //dungeons
                from.Region.Name == "Ancient Lair" || from.Region.Name == "Doom" ||                 //dungeons

                from.Region.Name == "Britain Graveyard" || from.Region.Name == "Wrong Entrance" ||
                from.Region.Name == "Covetous Entrance" || from.Region.Name == "Despise Entrance" ||
                from.Region.Name == "Despise Passage" || from.Region.Name == "Jhelom Islands" ||
                from.Region.Name == "Haven Island" || from.Region.Name == "Crystal Cave Entrance" ||
                from.Region.Name == "Protected Island" || from.Region.Name == "Jail")
            {
                return(false);
            }



            if (from.Map == Map.Trammel)                // Retelling - no placement in "trammel"
            {
                return(false);
            }

            // house multis: 0x1404 is a narrow but wide lot
            // house multis: 0x1420  bigger overall, square shaped.

            ArrayList            toMove;
            HousePlacementResult res = HousePlacement.Check(from, 0x1404, from.Location, out toMove, false);

            if (res != HousePlacementResult.Valid)
            {
                return(false);
            }

            return(true);
        }
        public bool OnPlacement(Mobile from, Point3D p)
        {
            if (!from.CheckAlive())
            {
                return(false);
            }

            ArrayList            toMove;
            Point3D              center = new Point3D(p.X - m_Offset.X, p.Y - m_Offset.Y, p.Z - m_Offset.Z);
            HousePlacementResult res    = HousePlacement.Check(from, m_MultiID, center, out toMove);

            switch (res)
            {
            case HousePlacementResult.Valid:
            {
                if (from.AccessLevel < AccessLevel.GameMaster && BaseHouse.HasAccountHouse(from))
                {
                    from.SendLocalizedMessage(501271);                               // You already own a house, you may not place another!
                }
                else
                {
                    from.SendLocalizedMessage(1011576);                               // This is a valid location.

                    PreviewHouse prev = new PreviewHouse(m_MultiID);

                    MultiComponentList mcl = prev.Components;

                    Point3D banLoc = new Point3D(center.X + mcl.Min.X, center.Y + mcl.Max.Y + 1, center.Z);

                    for (int i = 0; i < mcl.List.Length; ++i)
                    {
                        MultiTileEntry entry = mcl.List[i];

                        int itemID = entry.m_ItemID & 0x3FFF;

                        if (itemID >= 0xBA3 && itemID <= 0xC0E)
                        {
                            banLoc = new Point3D(center.X + entry.m_OffsetX, center.Y + entry.m_OffsetY, center.Z);
                            break;
                        }
                    }

                    for (int i = 0; i < toMove.Count; ++i)
                    {
                        object o = toMove[i];

                        if (o is Mobile)
                        {
                            ((Mobile)o).Location = banLoc;
                        }
                        else if (o is Item)
                        {
                            ((Item)o).Location = banLoc;
                        }
                    }

                    prev.MoveToWorld(center, from.Map);

                    /* You are about to place a new house.
                     * Placing this house will condemn any and all of your other houses that you may have.
                     * All of your houses on all shards will be affected.
                     *
                     * In addition, you will not be able to place another house or have one transferred to you for one (1) real-life week.
                     *
                     * Once you accept these terms, these effects cannot be reversed.
                     * Re-deeding or transferring your new house will not uncondemn your other house(s) nor will the one week timer be removed.
                     *
                     * If you are absolutely certain you wish to proceed, click the button next to OKAY below.
                     * If you do not wish to trade for this house, click CANCEL.
                     */
                    from.SendGump(new WarningGump(1060635, 30720, 1049583, 32512, 420, 280, new WarningGumpCallback(PlacementWarning_Callback), prev));

                    return(true);
                }

                break;
            }

            case HousePlacementResult.BadItem:
            case HousePlacementResult.BadLand:
            case HousePlacementResult.BadStatic:
            case HousePlacementResult.BadRegionHidden:
            case HousePlacementResult.NoSurface:
            {
                from.SendLocalizedMessage(1043287);                           // The house could not be created here.  Either something is blocking the house, or the house would not be on valid terrain.
                break;
            }

            case HousePlacementResult.BadRegion:
            {
                from.SendLocalizedMessage(501265);                           // Housing cannot be created in this area.
                break;
            }
            }

            return(false);
        }
        public void PlacementWarning_Callback(Mobile from, bool okay, object state)
        {
            if (!from.CheckAlive())
            {
                return;
            }

            PreviewHouse prevHouse = (PreviewHouse)state;

            if (!okay)
            {
                prevHouse.Delete();
                return;
            }

            if (prevHouse.Deleted)
            {
                /* Too much time has passed and the test house you created has been deleted.
                 * Please try again!
                 */
                from.SendGump(new NoticeGump(1060637, 30720, 1060647, 32512, 320, 180, null, null));

                return;
            }

            Point3D center = prevHouse.Location;

            prevHouse.Delete();

            ArrayList toMove;
            //Point3D center = new Point3D( p.X - m_Offset.X, p.Y - m_Offset.Y, p.Z - m_Offset.Z );
            HousePlacementResult res = HousePlacement.Check(from, m_MultiID, center, out toMove);

            switch (res)
            {
            case HousePlacementResult.Valid:
            {
                if (from.AccessLevel < AccessLevel.GameMaster && BaseHouse.HasAccountHouse(from))
                {
                    from.SendLocalizedMessage(501271);                               // You already own a house, you may not place another!
                }
                else
                {
                    BaseHouse house = ConstructHouse(from);

                    if (house == null)
                    {
                        return;
                    }

                    house.Price = m_Cost;

                    if (Banker.Withdraw(from, m_Cost))
                    {
                        from.SendLocalizedMessage(1060398, m_Cost.ToString());                                   // ~1_AMOUNT~ gold has been withdrawn from your bank box.
                    }
                    else
                    {
                        house.RemoveKeys(from);
                        house.Delete();
                        from.SendLocalizedMessage(1060646);                                   // You do not have the funds available in your bank box to purchase this house.  Try placing a smaller house, or adding gold or checks to your bank box.
                        return;
                    }

                    house.MoveToWorld(center, from.Map);

                    for (int i = 0; i < toMove.Count; ++i)
                    {
                        object o = toMove[i];

                        if (o is Mobile)
                        {
                            ((Mobile)o).Location = house.BanLocation;
                        }
                        else if (o is Item)
                        {
                            ((Item)o).Location = house.BanLocation;
                        }
                    }
                }

                break;
            }

            case HousePlacementResult.BadItem:
            case HousePlacementResult.BadLand:
            case HousePlacementResult.BadStatic:
            case HousePlacementResult.BadRegionHidden:
            case HousePlacementResult.NoSurface:
            {
                from.SendLocalizedMessage(1043287);                           // The house could not be created here.  Either something is blocking the house, or the house would not be on valid terrain.
                break;
            }

            case HousePlacementResult.BadRegion:
            {
                from.SendLocalizedMessage(501265);                           // Housing cannot be created in this area.
                break;
            }
            }
        }
Beispiel #7
0
        // called by all house deeds but tents, they have their own implementation
        public virtual void OnPlacement(Mobile from, Point3D p)
        {
            if (Deleted)
            {
                return;
            }

            if (!IsChildOf(from.Backpack))
            {
                from.SendLocalizedMessage(1042001);                 // That must be in your pack for you to use it.
                return;
            }

            if (from.AccessLevel < AccessLevel.GameMaster && BaseHouse.HasAccountHouse(from))
            {
                // wea: modified to ignore *siege* tents

                int       i       = 0;
                ArrayList ahouses = new ArrayList();
                ahouses = BaseHouse.GetAccountHouses(from);

                if (ahouses != null)
                {
                    foreach (object o in ahouses)
                    {
                        if (!(o is SiegeTent))
                        {
                            i++;
                        }
                    }

                    if (i > 0)
                    {
                        from.SendLocalizedMessage(501271);                         // You already own a house or a regular tent, you may not place another!
                        return;
                    }
                }
            }

            ArrayList            toMove;
            Point3D              center = new Point3D(p.X - m_Offset.X, p.Y - m_Offset.Y, p.Z - m_Offset.Z);
            HousePlacementResult res    = HousePlacement.Check(from, m_MultiID, center, out toMove);

            switch (res)
            {
            case HousePlacementResult.Valid:
            {
                BaseHouse house = GetHouse(from);
                house.MoveToWorld(center, from.Map);
                Delete();

                for (int i = 0; i < toMove.Count; ++i)
                {
                    object o = toMove[i];

                    if (o is Tent)
                    {
                        (o as Tent).Annex(house);
                    }
                    else if (o is Mobile)
                    {
                        ((Mobile)o).Location = house.BanLocation;
                    }
                    else if (o is Item)
                    {
                        ((Item)o).Location = house.BanLocation;
                    }
                }

                break;
            }

            case HousePlacementResult.TentRegion:
            case HousePlacementResult.BadItem:
            case HousePlacementResult.BadLand:
            case HousePlacementResult.BadStatic:
            case HousePlacementResult.BadRegionHidden:
            {
                from.SendLocalizedMessage(1043287);                                 // The house could not be created here.  Either something is blocking the house, or the house would not be on valid terrain.
                break;
            }

            case HousePlacementResult.NoSurface:
            {
                from.SendMessage("The house could not be created here.  Part of the foundation would not be on any surface.");
                break;
            }

            case HousePlacementResult.BadRegion:
            {
                from.SendLocalizedMessage(501265);                                 // Housing cannot be created in this area.
                break;
            }

            case HousePlacementResult.BadRegionTownship:
            {
                from.SendMessage("You are not authorized to build in this township.");
                break;
            }
            }
        }
Beispiel #8
0
    // Override basic deed OnPlacement() so that tent specific text is used and a non tent multi id
    // based house placement check is performed

    // Also checks for account tents as opposed to houses

    public override void OnPlacement(Mobile from, Point3D p)
    {
        if (Deleted)
        {
            return;
        }

        if (!IsChildOf(from.Backpack))
        {
            from.SendLocalizedMessage(1042001);               // That must be in your pack for you to use it.
        }
        else if (from.AccessLevel < AccessLevel.GameMaster && HasAccountSiegeTent(from))
        {
            from.SendMessage("You already own a siege tent, you may not place another!");
        }
        else
        {
            ArrayList            toMove;
            Point3D              center = new Point3D(p.X - Offset.X, p.Y - Offset.Y, p.Z - Offset.Z);
            HousePlacementResult res    = HousePlacement.Check(from, 0x64, center, out toMove);

            switch (res)
            {
            case HousePlacementResult.Valid:
            {
                BaseHouse house = GetHouse(from);
                house.MoveToWorld(center, from.Map);
                house.Public = true;

                Delete();

                for (int i = 0; i < toMove.Count; ++i)
                {
                    object o = toMove[i];

                    if (o is Mobile)
                    {
                        ((Mobile)o).Location = house.BanLocation;
                    }
                    else if (o is Item)
                    {
                        ((Item)o).Location = house.BanLocation;
                    }
                }

                from.SendGump(new TentPlaceGump(from, house));
                break;
            }

            case HousePlacementResult.BadItem:
            case HousePlacementResult.BadLand:
            case HousePlacementResult.BadStatic:
            case HousePlacementResult.BadRegionHidden:
            {
                from.SendMessage("The siege tent could not be created here, Either something is blocking the house, or the house would not be on valid terrain.");
                break;
            }

            case HousePlacementResult.NoSurface:
            {
                from.SendMessage("The siege tent could not be created here.  Part of the foundation would not be on any surface.");
                break;
            }

            case HousePlacementResult.BadRegion:
            {
                from.SendMessage("Siege tents cannot be placed in this area.");
                break;
            }

            case HousePlacementResult.BadRegionTownship:
            {
                from.SendMessage("You are not authorized to build in this township.");
                break;
            }
            }
        }
    }
        public bool OnPlacement(Mobile from, Point3D p)
        {
            if (!from.CheckAlive())
            {
                return(false);
            }

            ArrayList            toMove;
            Point3D              center = new Point3D(p.X - m_Offset.X, p.Y - m_Offset.Y, p.Z - m_Offset.Z);
            HousePlacementResult res    = HousePlacement.Check(from, m_MultiID, center, out toMove);

            switch (res)
            {
            case HousePlacementResult.Valid:
            {
                from.SendLocalizedMessage(1011576);                           // This is a valid location.
                BaseHouse house = ConstructHouse(from);

                if (house == null)
                {
                    return(false);
                }

                house.Price = m_Cost;

                if (Banker.Withdraw(from, m_Cost))
                {
                    from.SendLocalizedMessage(1060398, m_Cost.ToString());                               // ~1_AMOUNT~ gold has been withdrawn from your bank box.
                }
                else
                {
                    house.RemoveKeys(from);
                    house.Delete();
                    from.SendLocalizedMessage(1060646);                               // You do not have the funds available in your bank box to purchase this house.  Try placing a smaller house, or adding gold or checks to your bank box.
                    return(false);
                }

                house.MoveToWorld(center, from.Map);

                for (int i = 0; i < toMove.Count; ++i)
                {
                    object o = toMove[i];

                    if (o is Mobile)
                    {
                        ((Mobile)o).Location = house.BanLocation;
                    }
                    else if (o is Item)
                    {
                        ((Item)o).Location = house.BanLocation;
                    }
                }


                return(true);
            }

            case HousePlacementResult.BadItem:
            case HousePlacementResult.BadLand:
            case HousePlacementResult.BadStatic:
            case HousePlacementResult.BadRegionHidden:
            case HousePlacementResult.NoSurface:
            {
                from.SendLocalizedMessage(1043287);                           // The house could not be created here.  Either something is blocking the house, or the house would not be on valid terrain.
                break;
            }

            case HousePlacementResult.BadRegion:
            {
                from.SendLocalizedMessage(501265);                           // Housing cannot be created in this area.
                break;
            }
            }

            return(false);
        }
Beispiel #10
0
        public void PlacementWarning_Callback(Mobile from, bool okay, object state)
        {
            if (!from.CheckAlive() || from.Backpack == null || from.Backpack.FindItemByType(typeof(HousePlacementTool)) == null)
            {
                return;
            }

            PreviewHouse prevHouse = (PreviewHouse)state;

            if (!okay)
            {
                prevHouse.Delete();
                return;
            }

            if (prevHouse.Deleted)
            {
                /* Too much time has passed and the test house you created has been deleted.
                 * Please try again!
                 */
                from.SendGump(new NoticeGump(1060637, 30720, 1060647, 32512, 320, 180, null, null));

                return;
            }

            Point3D center = prevHouse.Location;
            Map     map    = prevHouse.Map;

            prevHouse.Delete();

            //Point3D center = new Point3D( p.X - m_Offset.X, p.Y - m_Offset.Y, p.Z - m_Offset.Z );
            HousePlacementResult res = HousePlacement.Check(from, m_MultiID, center, out ArrayList toMove);

            switch (res)
            {
            case HousePlacementResult.Valid:
            {
                if (from.AccessLevel < AccessLevel.GameMaster && BaseHouse.HasReachedHouseLimit(from))
                {
                    from.SendLocalizedMessage(501271);                                     // You already own a house, you may not place another!
                }
                else
                {
                    BaseHouse house = ConstructHouse(from);

                    if (house == null)
                    {
                        return;
                    }

                    house.Price = m_Cost;

                    if (from.AccessLevel >= AccessLevel.GameMaster)
                    {
                        from.SendMessage("{0} gold would have been withdrawn from your bank if you were not a GM.", m_Cost.ToString());
                    }
                    else
                    {
                        if (Banker.Withdraw(from, m_Cost))
                        {
                            from.SendLocalizedMessage(1060398, m_Cost.ToString());                                             // ~1_AMOUNT~ gold has been withdrawn from your bank box.
                        }
                        else
                        {
                            house.RemoveKeys(from);
                            house.Delete();
                            from.SendLocalizedMessage(1060646);                                             // You do not have the funds available in your bank box to purchase this house.  Try placing a smaller house, or adding gold or checks to your bank box.
                            return;
                        }
                    }

                    house.MoveToWorld(center, from.Map);

                    for (int i = 0; i < toMove.Count; ++i)
                    {
                        object o = toMove[i];

                        if (o is Mobile)
                        {
                            ((Mobile)o).Location = house.BanLocation;
                        }
                        else if (o is Item)
                        {
                            ((Item)o).Location = house.BanLocation;
                        }
                    }
                }

                break;
            }

            case HousePlacementResult.BadItem:
            case HousePlacementResult.BadLand:
            case HousePlacementResult.BadStatic:
            case HousePlacementResult.BadRegionHidden:
            case HousePlacementResult.NoSurface:
            {
                from.SendLocalizedMessage(1043287);                                 // The house could not be created here.  Either something is blocking the house, or the house would not be on valid terrain.
                break;
            }

            case HousePlacementResult.BadRegion:
            {
                from.SendLocalizedMessage(501265);                                 // Housing cannot be created in this area.
                break;
            }

            case HousePlacementResult.BadRegionTemp:
            {
                from.SendLocalizedMessage(501270);                                 // Lord British has decreed a 'no build' period, thus you cannot build this house at this time.
                break;
            }

            case HousePlacementResult.BadRegionRaffle:
            {
                from.SendLocalizedMessage(1150493);                                 // You must have a deed for this plot of land in order to build here.
                break;
            }

            case HousePlacementResult.InvalidCastleKeep:
            {
                from.SendLocalizedMessage(1061122);                                 // Castles and keeps cannot be created here.
                break;
            }
            }
        }
Beispiel #11
0
        public void OnPlacement(Mobile from, Point3D p)
        {
            if (Deleted)
            {
                return;
            }

            if (!IsChildOf(from.Backpack))
            {
                from.SendAsciiMessage("That must be in your pack for you to use it.");
            }
            else if (from.AccessLevel < AccessLevel.GameMaster && BaseHouse.HasAccountHouse(from))
            {
                from.SendAsciiMessage("You already own a house, you may not place another!");
            }
            else
            {
                ArrayList            toMove;
                Point3D              center = new Point3D(p.X - m_Offset.X, p.Y - m_Offset.Y, p.Z - m_Offset.Z);
                HousePlacementResult res    = HousePlacement.Check(from, m_MultiID, center, out toMove);

                switch (res)
                {
                case HousePlacementResult.Valid:
                {
                    BaseHouse house = GetHouse(from);
                    house.MoveToWorld(center, from.Map);
                    Delete();

                    for (int i = 0; i < toMove.Count; ++i)
                    {
                        object o = toMove[i];

                        if (o is Mobile)
                        {
                            ((Mobile)o).Location = house.BanLocation;
                        }
                        else if (o is Item)
                        {
                            ((Item)o).Location = house.BanLocation;
                        }
                    }

                    break;
                }

                case HousePlacementResult.BadItem:
                case HousePlacementResult.BadLand:
                case HousePlacementResult.BadStatic:
                case HousePlacementResult.BadRegionHidden:
                {
                    from.SendAsciiMessage("The house could not be created here. Either something is blocking the house, or the house would not be on valid terrain.");
                    break;
                }

                case HousePlacementResult.NoSurface:
                {
                    from.SendAsciiMessage("The house could not be created here. Part of the foundation would not be on any surface.");
                    break;
                }

                case HousePlacementResult.BadRegion:
                {
                    from.SendAsciiMessage("Housing cannot be created in this area.");
                    break;
                }
                }
            }
        }
Beispiel #12
0
        public bool OnPlacement(Mobile from, Point3D p)
        {
            if (!from.CheckAlive() || from.Backpack == null || from.Backpack.FindItemByType(typeof(HousePlacementTool)) == null)
            {
                return(false);
            }

            ArrayList            toMove;
            Point3D              center = new Point3D(p.X - m_Offset.X, p.Y - m_Offset.Y, p.Z - m_Offset.Z);
            HousePlacementResult res    = HousePlacement.Check(from, m_MultiID, center, out toMove);

            switch (res)
            {
            case HousePlacementResult.Valid:
            {
                from.SendLocalizedMessage(1011576);         // This is a valid location.

                PreviewHouse prev = new PreviewHouse(m_MultiID);

                MultiComponentList mcl = prev.Components;

                Point3D banLoc = new Point3D(center.X + mcl.Min.X, center.Y + mcl.Max.Y + 1, center.Z);

                for (int i = 0; i < mcl.List.Length; ++i)
                {
                    MultiTileEntry entry = mcl.List[i];

                    int itemID = entry.m_ItemID;

                    if (itemID >= 0xBA3 && itemID <= 0xC0E)
                    {
                        banLoc = new Point3D(center.X + entry.m_OffsetX, center.Y + entry.m_OffsetY, center.Z);
                        break;
                    }
                }

                for (int i = 0; i < toMove.Count; ++i)
                {
                    object o = toMove[i];

                    if (o is Mobile)
                    {
                        ((Mobile)o).Location = banLoc;
                    }
                    else if (o is Item)
                    {
                        ((Item)o).Location = banLoc;
                    }
                }

                prev.MoveToWorld(center, from.Map);

                /* You are about to place a new house.
                 * Placing this house will condemn any and all of your other houses that you may have.
                 * All of your houses on all shards will be affected.
                 *
                 * In addition, you will not be able to place another house or have one transferred to you for one (1) real-life week.
                 *
                 * Once you accept these terms, these effects cannot be reversed.
                 * Re-deeding or transferring your new house will not uncondemn your other house(s) nor will the one week timer be removed.
                 *
                 * If you are absolutely certain you wish to proceed, click the button next to OKAY below.
                 * If you do not wish to trade for this house, click CANCEL.
                 */
                from.SendGump(new WarningGump(1060635, 30720, 1049583, 32512, 420, 280, new WarningGumpCallback(PlacementWarning_Callback), prev));

                return(true);
            }

            case HousePlacementResult.BadItem:
            case HousePlacementResult.BadLand:
            case HousePlacementResult.BadStatic:
            case HousePlacementResult.BadRegionHidden:
            case HousePlacementResult.NoSurface:
            {
                from.SendLocalizedMessage(1043287);         // The house could not be created here.  Either something is blocking the house, or the house would not be on valid terrain.
                break;
            }

            case HousePlacementResult.BadRegion:
            {
                from.SendLocalizedMessage(501265);         // Housing cannot be created in this area.
                break;
            }

            case HousePlacementResult.BadRegionTemp:
            {
                from.SendLocalizedMessage(501270);         //Lord British has decreed a 'no build' period, thus you cannot build this house at this time.
                break;
            }

            case HousePlacementResult.BadRegionRaffle:
            {
                from.SendLocalizedMessage(1150493);         // You must have a deed for this plot of land in order to build here.
                break;
            }

            case HousePlacementResult.InvalidCastleKeep:
            {
                from.SendLocalizedMessage(1061122);         // Castles and keeps cannot be created here.
                break;
            }

            case HousePlacementResult.NoQueenLoyalty:
            {
                from.SendLocalizedMessage(1113707, "10000");         // You must have at lease ~1_MIN~ loyalty to the Gargoyle Queen to place a house in Ter Mur.
                break;
            }
            }

            return(false);
        }
Beispiel #13
0
        public bool OnPlacement(Mobile from, HouseSurveyTool tool, Point3D p)
        {
            if (!from.CheckAlive() || from.Backpack == null || tool == null || tool.UsesRemaining == 0 || !tool.IsChildOf(from.Backpack))
            {
                return(false);
            }

            if (SurveyPreviewHouse.PreviewHouseList.Contains(from))
            {
                from.SendMessage("You are already previewing a potential house location.");
                return(false);
            }

            ArrayList            toMove;
            Point3D              center = new Point3D(p.X - m_Offset.X, p.Y - m_Offset.Y, p.Z - m_Offset.Z);
            HousePlacementResult res    = HousePlacement.Check(from, m_MultiID, center, out toMove);

            switch (res)
            {
            case HousePlacementResult.Valid:
            {
                from.SendMessage("This is valid terrain to place a house.");                           // This is a valid location.

                SurveyPreviewHouse prev = new SurveyPreviewHouse(m_MultiID, from);

                MultiComponentList mcl = prev.Components;

                prev.MoveToWorld(center, from.Map);

                string message = "You have found valid terrain to place a house.  This preview will stay visible for 20 seconds.<BR><BR>Press OKAY to stop previewing this house.";

                from.SendGump(new NoticeGump(1060635, 30720, message, 0xFFC000, 420, 280, new NoticeGumpCallback(SurveyNotice_Callback), prev));

                return(true);
            }

            case HousePlacementResult.BadItem:
            case HousePlacementResult.BadLand:
            case HousePlacementResult.BadStatic:
            case HousePlacementResult.BadRegionHidden:
            case HousePlacementResult.NoSurface:
            {
                from.SendLocalizedMessage(1043287);                           // The house could not be created here.  Either something is blocking the house, or the house would not be on valid terrain.
                break;
            }

            case HousePlacementResult.BadRegion:
            {
                from.SendLocalizedMessage(501265);                           // Housing cannot be created in this area.
                break;
            }

            case HousePlacementResult.BadRegionTemp:
            {
                from.SendLocalizedMessage(501270);                           //Lord British has decreed a 'no build' period, thus you cannot build this house at this time.
                break;
            }
            }

            return(false);
        }