Esempio n. 1
0
        public virtual void Flip(Mobile from, Item addon)
        {
            if (m_Directions != null && m_Directions.Length > 1)
            {
                try
                {
                    MethodInfo flipMethod = addon.GetType().GetMethod(m_MethodName, m_Params);

                    if (flipMethod != null)
                    {
                        int index = 0;

                        for (int i = 0; i < m_Directions.Length; i++)
                        {
                            if (addon.Direction == m_Directions[i])
                            {
                                index = i + 1;
                                break;
                            }
                        }

                        if (index >= m_Directions.Length)
                        {
                            index = 0;
                        }

                        ClearComponents(addon);

                        flipMethod.Invoke(addon, new object[2] {
                            from, m_Directions[index]
                        });

                        BaseHouse      house  = null;
                        AddonFitResult result = AddonFitResult.Valid;

                        addon.Map = Map.Internal;

                        if (addon is BaseAddon)
                        {
                            result = ((BaseAddon)addon).CouldFit(addon.Location, from.Map, from, ref house);
                        }
                        else if (addon is BaseAddonContainer)
                        {
                            result = ((BaseAddonContainer)addon).CouldFit(addon.Location, from.Map, from, ref house);
                        }

                        addon.Map = from.Map;

                        if (result != AddonFitResult.Valid)
                        {
                            if (index == 0)
                            {
                                index = m_Directions.Length - 1;
                            }
                            else
                            {
                                index -= 1;
                            }

                            ClearComponents(addon);

                            flipMethod.Invoke(addon, new object[2] {
                                from, m_Directions[index]
                            });

                            if (result == AddonFitResult.Blocked)
                            {
                                from.SendLocalizedMessage(500269); // You cannot build that there.
                            }
                            else if (result == AddonFitResult.NotInHouse)
                            {
                                from.SendLocalizedMessage(500274); // You can only place this in a house that you own!
                            }
                            else if (result == AddonFitResult.DoorsNotClosed)
                            {
                                from.SendMessage("You must close all house doors before placing this.");
                            }
                            else if (result == AddonFitResult.DoorTooClose)
                            {
                                from.SendLocalizedMessage(500271); // You cannot build near the door.
                            }
                            else if (result == AddonFitResult.NoWall)
                            {
                                from.SendLocalizedMessage(500268); // This object needs to be mounted on something.
                            }
                        }

                        addon.Direction = m_Directions[index];
                    }
                }
                catch
                {
                }
            }
        }
Esempio n. 2
0
        protected override void OnTarget(Mobile from, object targeted)
        {
            IPoint3D p   = targeted as IPoint3D;
            Map      map = from.Map;

            if (p == null || map == null || m_Maker == null || m_Maker.Deleted)
            {
                return;
            }

            if (m_Maker.IsChildOf(from.Backpack))
            {
                SpellHelper.GetSurfaceTop(ref p);
                BaseHouse house = null;
                Point3D   loc   = new Point3D(p);

                if (targeted is Item && !((Item)targeted).IsLockedDown && !((Item)targeted).IsSecure && !(targeted is AddonComponent))
                {
                    from.SendLocalizedMessage(1076191);                       // Statues can only be placed in houses.
                    return;
                }
                else if (from.IsBodyMod)
                {
                    from.SendLocalizedMessage(1073648);                       // You may only proceed while in your original state...
                    return;
                }

                AddonFitResult result = CouldFit(loc, map, from, ref house);

                if (result == AddonFitResult.Valid)
                {
                    CharacterStatue       statue = new CharacterStatue(from, m_Type);
                    CharacterStatuePlinth plinth = new CharacterStatuePlinth(statue);

                    house.Addons.Add(plinth);

                    if (m_Maker is IRewardItem)
                    {
                        statue.IsRewardItem = ((IRewardItem)m_Maker).IsRewardItem;
                    }

                    statue.Plinth = plinth;
                    plinth.MoveToWorld(loc, map);
                    statue.InvalidatePose();

                    from.CloseGump(typeof(CharacterStatueGump));
                    from.SendGump(new CharacterStatueGump(m_Maker, statue, from));
                }
                else if (result == AddonFitResult.Blocked)
                {
                    from.SendLocalizedMessage(500269);                       // You cannot build that there.
                }
                else if (result == AddonFitResult.NotInHouse)
                {
                    from.SendLocalizedMessage(1076192);                       // Statues can only be placed in houses where you are the owner or co-owner.
                }
                else if (result == AddonFitResult.DoorTooClose)
                {
                    from.SendLocalizedMessage(500271);                       // You cannot build near the door.
                }
            }
            else
            {
                from.SendLocalizedMessage(1042001);                   // That must be in your pack for you to use it.
            }
        }
        private static void BuildRugBox_Callback(Mobile from, Map map, Point3D start, Point3D end, object state)
        {
            BluePrintCarpetDeed m_Deed = state as BluePrintCarpetDeed;

            if (m_Deed.Deleted)
            {
                return;
            }

            if (m_Deed.IsChildOf(from.Backpack))
            {
                Rectangle2D rect = new Rectangle2D(start.X, start.Y, end.X - start.X + 1, end.Y - start.Y + 1);

                if (rect.Width < 3 || rect.Height < 3)
                {
                    from.SendMessage("The carpet is too small. It should be longer or wider than that.");
                    return;
                }

                BaseAddon addon = new BluePrintCarpetAddon(rect);

                BaseHouse house = null;

                AddonFitResult res = addon.CouldFit(start, map, from, ref house);

                if (res == AddonFitResult.Valid)
                {
                    addon.MoveToWorld(start, 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.");
                }
                else if (res == AddonFitResult.DoorTooClose)
                {
                    from.SendLocalizedMessage(500271);                       // You cannot build near the door.
                }
                if (res == AddonFitResult.Valid)
                {
                    m_Deed.Delete();

                    //if ( house != null )
                    //{
                    //foreach ( Server.Multis.BaseHouse h in house )
                    house.Addons.Add(addon);
                    //}
                }
                else
                {
                    addon.Delete();
                }
            }
            else
            {
                from.SendLocalizedMessage(1042001);                   // That must be in your pack for you to use it.
            }
        }
            protected override void OnTarget(Mobile from, object targeted)
            {
                IPoint3D p   = targeted as IPoint3D;
                Map      map = from.Map;

                if (p == null || map == null || m_Deed.Deleted)
                {
                    return;
                }

                if (m_Deed.IsChildOf(from.Backpack))
                {
                    BaseAddonContainer addon = m_Deed.Addon;
                    addon.Resource = m_Deed.Resource;

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

                    BaseHouse house = null;

                    AddonFitResult res = addon.CouldFit(p, map, from, ref house);

                    if (res == AddonFitResult.Valid)
                    {
                        addon.MoveToWorld(new Point3D(p), 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.");
                    }
                    else if (res == AddonFitResult.DoorTooClose)
                    {
                        from.SendLocalizedMessage(500271);                           // You cannot build near the door.
                    }
                    else if (res == AddonFitResult.NoWall)
                    {
                        from.SendLocalizedMessage(500268);                           // This object needs to be mounted on something.
                    }
                    if (res == AddonFitResult.Valid)
                    {
                        m_Deed.Delete();
                        house.Addons.Add(addon);
                        house.AddSecure(from, addon);
                    }
                    else
                    {
                        addon.Delete();
                    }
                }
                else
                {
                    from.SendLocalizedMessage(1042001);                       // That must be in your pack for you to use it.
                }
            }
Esempio n. 5
0
        public override void OnDoubleClick(Mobile from)
        {
            if (IsChildOf(from.Backpack))
            {
                from.BeginTarget(10, true, Server.Targeting.TargetFlags.None, (m, targeted) =>
                {
                    if (IsChildOf(from.Backpack))
                    {
                        IPoint3D p = targeted as IPoint3D;
                        Map map    = from.Map;

                        if (p == null || map == null || Deleted)
                        {
                            return;
                        }

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

                        BaseHouse house = null;
                        Item door;

                        if (this.Type < DoorType.LeftMetalDoor_S_In)
                        {
                            door = new CraftableStoneHouseDoor(this.Type, GetDoorFacing(this.Type));
                        }
                        else
                        {
                            door = new CraftableMetalHouseDoor(this.Type, GetDoorFacing(this.Type));
                        }

                        if (door is CraftableMetalHouseDoor)
                        {
                            ((CraftableMetalHouseDoor)door).Resource = _Resource;
                        }
                        else if (door is CraftableStoneHouseDoor)
                        {
                            ((CraftableStoneHouseDoor)door).Resource = _Resource;
                        }

                        AddonFitResult res = CouldFit(door, p, map, from, ref house);

                        switch (res)
                        {
                        case AddonFitResult.Valid:
                            PlaceDoor(door, p, map, house);
                            return;

                        case AddonFitResult.Blocked:
                            from.SendLocalizedMessage(500269);     // You cannot build that there.
                            break;

                        case AddonFitResult.NotInHouse:
                            from.SendLocalizedMessage(500274);     // You can only place this in a house that you own!
                            break;

                        case AddonFitResult.DoorsNotClosed:
                            from.SendMessage("You must close all house doors before placing this.");
                            break;

                        case AddonFitResult.DoorTooClose:
                            from.SendLocalizedMessage(500271);     // You cannot build near the door.
                            break;

                        case AddonFitResult.BadHouse:
                            from.SendLocalizedMessage(500269);     // You cannot build that there.
                            break;
                        }

                        door.Delete();
                    }
                    else
                    {
                        from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
                    }
                });
            }
            else
            {
                from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
            }
        }
Esempio n. 6
0
            protected override void OnTarget(Mobile from, object targeted)
            {
                IPoint3D p   = targeted as IPoint3D;
                Map      map = from.Map;

                if (p == null || map == null || m_Deed.Deleted)
                {
                    return;
                }

                if (m_Deed.IsChildOf(from.Backpack))
                {
                    BaseAddon addon = m_Deed.Addon;

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

                    BaseHouse   house   = null;
                    BaseGalleon galleon = CheckGalleonPlacement(from, addon, new Point3D(p), map);

                    AddonFitResult res = galleon != null ? AddonFitResult.Valid : addon.CouldFit(p, map, from, ref house);

                    if (res == AddonFitResult.Valid)
                    {
                        addon.Resource = m_Deed.Resource;

                        if (!m_Deed.ExcludeDeedHue)
                        {
                            if (addon.RetainDeedHue || (m_Deed.Hue != 0 && CraftResources.GetHue(m_Deed.Resource) != m_Deed.Hue))
                            {
                                addon.Hue = m_Deed.Hue;
                            }
                        }

                        addon.MoveToWorld(new Point3D(p), map);

                        if (house != null)
                        {
                            house.Addons[addon] = from;
                        }

                        if (galleon != null)
                        {
                            galleon.AddAddon(addon);
                        }

                        m_Deed.DeleteDeed();
                    }
                    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.DoorTooClose)
                    {
                        from.SendLocalizedMessage(500271); // You cannot build near the door.
                    }
                    else if (res == AddonFitResult.NoWall)
                    {
                        from.SendLocalizedMessage(500268); // This object needs to be mounted on something.
                    }
                    if (res != AddonFitResult.Valid)
                    {
                        addon.Delete();
                    }
                }
                else
                {
                    from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
                }
            }
Esempio n. 7
0
        public void Place(IPoint3D p, Map map, Mobile from)
        {
            if (p == null || map == null || this.Deleted)
            {
                return;
            }

            if (IsChildOf(from.Backpack))
            {
                BaseAddon addon = Addon;                 // this creates an instance, don't use Addon (capital A) more than once!

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

                ArrayList houses = null;

                AddonFitResult res = addon.CouldFit(addon.BlocksDoors, p, map, from, ref houses);

                if (res == AddonFitResult.Valid)
                {
                    addon.MoveToWorld(new Point3D(p), 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.");
                }
                else if (res == AddonFitResult.DoorTooClose)
                {
                    from.SendLocalizedMessage(500271);                     // You cannot build near the door.
                }
                if (res == AddonFitResult.Valid)
                {
                    Delete();

                    if (houses != null)
                    {
                        foreach (Server.Multis.BaseHouse h in houses)
                        {
                            h.Addons.Add(addon);
                            addon.OnPlaced(from, h);
                        }

                        from.SendGump(new ConfirmAddonPlacementGump(from, addon));
                    }
                }
                else
                {
                    addon.Delete();
                }
            }
            else
            {
                from.SendLocalizedMessage(1042001);                 // That must be in your pack for you to use it.
            }
        }
Esempio n. 8
0
        protected override void OnTarget(Mobile from, object targeted)
        {
            IPoint3D p   = targeted as IPoint3D;
            Map      map = from.Map;

            if (p == null || map == null || m_Deed == null || m_Deed.Deleted)
            {
                return;
            }

            if (m_Deed.IsChildOf(from.Backpack))
            {
                SpellHelper.GetSurfaceTop(ref p);
                BaseHouse house = null;
                Point3D   loc   = new Point3D(p);

                if (targeted is Item && !((Item)targeted).IsLockedDown && !((Item)targeted).IsSecure && !(targeted is AddonComponent))
                {
                    from.SendMessage("Grandfather clocks can only be placed in houses.");
                    return;
                }

                AddonFitResult result = CouldFit(loc, map, from, ref house);

                if (result == AddonFitResult.Valid || from.AccessLevel >= AccessLevel.GameMaster)
                {
                    BaseGrandfatherClock clock;

                    switch (m_Deed.ClockType)
                    {
                    default:
                    case GrandfatherClockType.Small: clock = new SmallGrandfatherClock(); break;

                    case GrandfatherClockType.Large: clock = new LargeGrandfatherClock(); break;

                    case GrandfatherClockType.White: clock = new WhiteGrandfatherClock(); break;
                    }

                    if (house != null)
                    {
                        house.Addons.Add(clock);
                    }

                    //if ( m_Deed is IRewardItem )
                    //	clock.IsRewardItem = ( (IRewardItem) m_Deed).IsRewardItem;

                    m_Deed.Delete();

                    clock.MoveToWorld(loc, map);
                }
                else if (result == AddonFitResult.Blocked)
                {
                    from.SendLocalizedMessage(500269);                       // You cannot build that there.
                }
                else if (result == AddonFitResult.NotInHouse)
                {
                    from.SendMessage("Grandfather clocks can only be placed in houses where you are the owner or co-owner");
                }
                else if (result == AddonFitResult.DoorTooClose)
                {
                    from.SendLocalizedMessage(500271);                       // You cannot build near the door.
                }
            }
            else
            {
                from.SendLocalizedMessage(1042001);                   // That must be in your pack for you to use it.
            }
        }
Esempio n. 9
0
            protected override void OnTarget(Mobile from, object targeted)
            {
                IPoint3D p   = targeted as IPoint3D;
                Map      map = from.Map;

                if (p == null || map == null || m_Deed.Deleted)
                {
                    return;
                }

                if (m_Deed.IsChildOf(from.Backpack))
                {
                    BaseAddonContainer addon = m_Deed.Addon;
                    addon.Resource = m_Deed.Resource;

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

                    BaseHouse house = null;

                    AddonFitResult res = addon.CouldFit(p, map, from, ref house);

                    bool isMaxSecureReached = false;
                    //Check if secure slot is already full
                    if (house != null)
                    {
                        if (!house.IsAosRules && house.SecureCount >= house.MaxSecures)
                        {
                            // The maximum number of secure items has been reached :
                            from.SendLocalizedMessage(1008142, true, house.MaxSecures.ToString());
                            isMaxSecureReached = true;
                        }
                        else if (house.IsAosRules ? !house.CheckAosLockdowns(1) : ((house.LockDownCount + 125) >= house.MaxLockDowns))
                        {
                            from.SendLocalizedMessage(1005379); // That would exceed the maximum lock down limit for this house
                            isMaxSecureReached = true;
                        }
                        else if (house.IsAosRules && !house.CheckAosStorage(addon.TotalItems))
                        {
                            from.SendLocalizedMessage(1061839); // This action would exceed the secure storage limit of the house.
                            isMaxSecureReached = true;
                        }
                    }

                    if (!isMaxSecureReached)
                    {
                        switch (res)
                        {
                        case AddonFitResult.Valid:
                            addon.MoveToWorld(new Point3D(p), map);
                            break;

                        case AddonFitResult.Blocked:
                            @from.SendLocalizedMessage(500269);     // You cannot build that there.
                            break;

                        case AddonFitResult.NotInHouse:
                            @from.SendLocalizedMessage(500274);     // You can only place this in a house that you own!
                            break;

                        case AddonFitResult.DoorsNotClosed:
                            @from.SendMessage("You must close all house doors before placing this.");
                            break;

                        case AddonFitResult.DoorTooClose:
                            @from.SendLocalizedMessage(500271);     // You cannot build near the door.
                            break;

                        case AddonFitResult.NoWall:
                            @from.SendLocalizedMessage(500268);     // This object needs to be mounted on something.
                            break;
                        }
                    }


                    if (res == AddonFitResult.Valid && house != null && !isMaxSecureReached)
                    {
                        m_Deed.Delete();
                        house.Addons.Add(addon);
                        house.AddSecure(from, addon);
                    }
                    else
                    {
                        addon.Delete();
                    }
                }
                else
                {
                    from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
                }
            }
Esempio n. 10
0
            protected override void OnTarget(Mobile from, object targeted)
            {
                IPoint3D p   = targeted as IPoint3D;
                Map      map = from.Map;

                if (p == null || map == null || Deed.Deleted)
                {
                    return;
                }

                AddonFitResult result = AddonFitResult.Valid;

                if (Deed.IsChildOf(from.Backpack))
                {
                    BaseHouse house = null;

                    if (!map.CanFit(p.X, p.Y, p.Z, 16, false, true, false))
                    {
                        result = AddonFitResult.Blocked;
                    }
                    else if (!BaseAddon.CheckHouse(from, new Point3D(p), map, 16, ref house))
                    {
                        result = AddonFitResult.NotInHouse;
                    }
                    else
                    {
                        bool east  = BaseAddon.IsWall(p.X - 1, p.Y, p.Z, map);
                        bool south = BaseAddon.IsWall(p.X, p.Y - 1, p.Z, map);

                        if (!south && !east)
                        {
                            result = AddonFitResult.NoWall;
                        }
                        else if (south && east)
                        {
                            from.SendGump(new AddonInterchangeableGump(from, Deed, p, map));
                        }
                        else
                        {
                            BaseAddon addon = Deed.DeployAddon(east, p, map);
                            house.Addons[addon] = from;

                            Deed.Delete();
                        }
                    }

                    switch (result)
                    {
                    default: break;

                    case AddonFitResult.Blocked: from.SendLocalizedMessage(500269); break;    // You cannot build that there.

                    case AddonFitResult.NotInHouse: from.SendLocalizedMessage(500274); break; // You can only place this in a house that you own!

                    case AddonFitResult.NoWall: from.SendLocalizedMessage(500268); break;     // This object needs to be mounted on something.
                    }
                }
                else
                {
                    from.SendLocalizedMessage(1042001);                       // That must be in your pack for you to use it.
                }
            }
Esempio n. 11
0
        protected override void OnTarget(Mobile from, object targeted)
        {
            var p   = targeted as IPoint3D;
            Map map = from.Map;

            if (p == null || map == null || m_Maker == null || m_Maker.Deleted)
            {
                return;
            }

            if (m_Maker.IsChildOf(from.Backpack))
            {
                SpellHelper.GetSurfaceTop(ref p);
                BaseHouse house = null;
                var       loc   = new Point3D(p);

                if (m_Maker is CharacterStatueDeed && !((CharacterStatueDeed)m_Maker).NoHouse ||
                    m_Maker is CharacterStatueMaker && !((CharacterStatueMaker)m_Maker).NoHouse)
                {
                    if (targeted is Item && !((Item)targeted).IsLockedDown && !((Item)targeted).IsSecure &&
                        !(targeted is AddonComponent))
                    {
                        from.SendLocalizedMessage(1076191); // Statues can only be placed in houses.
                        return;
                    }
                }
                if (@from.IsBodyMod)
                {
                    @from.SendLocalizedMessage(1073648); // You may only proceed while in your original state...
                    return;
                }

                AddonFitResult result = CouldFit(loc, map, from, ref house);

                if (result == AddonFitResult.Valid || m_Maker is CharacterStatueDeed && ((CharacterStatueDeed)m_Maker).NoHouse ||
                    m_Maker is CharacterStatueMaker && ((CharacterStatueMaker)m_Maker).NoHouse)
                {
                    var statue = new CharacterStatue(from, m_Type);
                    var plinth = new CharacterStatuePlinth(statue);

                    if (m_Maker is CharacterStatueDeed && !((CharacterStatueDeed)m_Maker).NoHouse ||
                        m_Maker is CharacterStatueMaker && !((CharacterStatueMaker)m_Maker).NoHouse)
                    {
                        house.Addons.Add(plinth);
                    }

                    if (m_Maker is IRewardItem)
                    {
                        statue.IsRewardItem = ((IRewardItem)m_Maker).IsRewardItem;
                    }

                    statue.Plinth = plinth;
                    plinth.MoveToWorld(loc, map);
                    statue.InvalidatePose();

                    /*
                     * TODO: Previously the maker wasn't deleted until after statue
                     * customization, leading to redeeding issues. Exact OSI behavior
                     * needs looking into.
                     */
                    m_Maker.Delete();
                    statue.Sculpt(from);

                    from.CloseGump(typeof(CharacterStatueGump));
                    from.SendGump(new CharacterStatueGump(m_Maker, statue, from));
                }
                else if (result == AddonFitResult.Blocked)
                {
                    from.SendLocalizedMessage(500269); // You cannot build that there.
                }
                else if (result == AddonFitResult.NotInHouse)
                {
                    from.SendLocalizedMessage(1076192);
                    // Statues can only be placed in houses where you are the owner or co-owner.
                }
                else if (result == AddonFitResult.DoorTooClose)
                {
                    from.SendLocalizedMessage(500271); // You cannot build near the door.
                }
            }
            else
            {
                from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
            }
        }
Esempio n. 12
0
            protected override void OnTarget(Mobile from, object targeted)
            {
                IPoint3D p   = targeted as IPoint3D;
                Map      map = from.Map;

                if (p == null || map == null || m_Deed.Deleted)
                {
                    return;
                }

                if (m_Deed.IsChildOf(from.Backpack))
                {
                    BaseAddon addon = m_Deed.Addon;

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

                    List <BaseHouse> houses = new List <BaseHouse>();

                    PlayerMobile pm      = (PlayerMobile)from;                //NEW Added for player city
                    bool         ismayor = false;
                    if (pm.City != null && pm.City.Mayor == pm && PlayerGovernmentSystem.IsAtCity(from))
                    {
                        ismayor = true;
                    }

                    AddonFitResult res = addon.CouldFit(p, map, from, ref houses);


                    if (res == AddonFitResult.Valid)
                    {
                        addon.MoveToWorld(new Point3D(p), map);
                    }
                    else if (ismayor)
                    {
                        CityManagementStone stone = pm.City;
                        addon.MoveToWorld(new Point3D(p), map);
                        stone.AddOns.Add(addon);
                    }
                    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.");
                    }
                    else if (res == AddonFitResult.DoorTooClose)
                    {
                        from.SendLocalizedMessage(500271);                           // You cannot build near the door.
                    }
                    else if (res == AddonFitResult.NoWall)
                    {
                        from.SendLocalizedMessage(500268);                           // This object needs to be mounted on something.
                    }
                    if (res == AddonFitResult.Valid)
                    {
                        m_Deed.Delete();

                        foreach (BaseHouse h in houses)
                        {
                            h.Addons.Add(addon);
                        }
                    }

                    else if (ismayor)
                    {
                        m_Deed.Delete();
                    }

                    else
                    {
                        addon.Delete();
                    }
                }
                else
                {
                    from.SendLocalizedMessage(1042001);                       // That must be in your pack for you to use it.
                }
            }
Esempio n. 13
0
            protected override void OnTarget(Mobile from, object targeted)
            {
                IPoint3D p   = targeted as IPoint3D;
                Map      map = from.Map;

                if (p == null || map == null || m_Deed.Deleted)
                {
                    return;
                }

                if (m_Deed.IsChildOf(from.Backpack))
                {
                    ParrotPerchAddon addon = m_Deed.Addon as ParrotPerchAddon;

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

                    ArrayList houses = null;

                    AddonFitResult res = addon.CouldFit(p, map, from, ref houses);

                    if (res == AddonFitResult.Valid)
                    {
                        addon.MoveToWorld(new Point3D(p), 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.");
                    }
                    else if (res == AddonFitResult.DoorTooClose)
                    {
                        from.SendLocalizedMessage(500271);                           // You cannot build near the door.
                    }
                    else if (res == AddonFitResult.NoWall)
                    {
                        from.SendLocalizedMessage(500268);                           // This object needs to be mounted on something.
                    }
                    if (res == AddonFitResult.Valid)
                    {
                        if (houses != null)
                        {
                            foreach (BaseHouse h in houses)
                            {
                                h.Addons.Add(addon);
                                addon.MyHouse = h;
                            }

                            if (m_Deed.m_ContainsParrot)
                            {
                                Parrot parrot = new Parrot(m_Deed.m_ParrotName, m_Deed.m_ParrotHue, m_Deed.m_ParrotBirthDate);

                                parrot.MoveToWorld(new Point3D(addon.Location.X, addon.Location.Y, addon.Location.Z + 11), addon.Map);

                                addon.Parrot = parrot;
                                parrot.Perch = addon;
                            }
                        }

                        m_Deed.Delete();
                    }
                    else
                    {
                        addon.Delete();
                    }
                }
                else
                {
                    from.SendLocalizedMessage(1042001);                       // That must be in your pack for you to use it.
                }
            }
Esempio n. 14
0
            protected override void OnTarget(Mobile from, object targeted)
            {
                IPoint3D p   = targeted as IPoint3D;
                Map      map = from.Map;

                if (p == null || map == null || m_Deed.Deleted)
                {
                    return;
                }

                if (m_Deed.IsChildOf(from.Backpack))
                {
                    BaseAddon addon = m_Deed.Addon;

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

                    ArrayList houses = null;

                    AddonFitResult res = addon.CouldFit(p, map, from, ref houses);

                    if (res == AddonFitResult.Valid)
                    {
                        addon.MoveToWorld(new Point3D(p), map);
                        if (from is TeiravonMobile)
                        {
                            TeiravonMobile player = (TeiravonMobile)from;

                            if (addon is BallistaEastAddon)
                            {
                                BallistaEastAddon m_ballista = (BallistaEastAddon)addon;
                                if (player.Backpack != null)
                                {
                                    DwarvenBallista wep = new DwarvenBallista();
                                    wep.Ballista = addon;
                                    player.AddToBackpack(wep);
                                    m_ballista.Controller = wep;
                                }
                            }

                            if (addon is OrcCombatBridgeAddon)
                            {
                                OrcCombatBridgeAddon bridge = (OrcCombatBridgeAddon)addon;
                                bridge.Z = player.Z;
                            }
                        }
                    }
                    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.");
                    }
                    else if (res == AddonFitResult.DoorTooClose)
                    {
                        from.SendLocalizedMessage(500271);                           // You cannot build near the door.
                    }
                    else if (res == AddonFitResult.NoWall)
                    {
                        from.SendLocalizedMessage(500268);                           // This object needs to be mounted on something.
                    }
                    if (res == AddonFitResult.Valid)
                    {
                        m_Deed.Delete();

                        if (houses != null)
                        {
                            foreach (Server.Multis.BaseHouse h in houses)
                            {
                                h.Addons.Add(addon);
                            }
                        }
                    }
                    else
                    {
                        addon.Delete();
                    }
                }
                else
                {
                    from.SendLocalizedMessage(1042001);                       // That must be in your pack for you to use it.
                }
            }
Esempio n. 15
0
            protected override void OnTarget(Mobile from, object targeted)
            {
                IPoint3D p   = targeted as IPoint3D;
                Map      map = from.Map;

                if (p == null || map == null || m_Deed.Deleted)
                {
                    return;
                }

                if (m_Deed.IsChildOf(from.Backpack))
                {
                    BaseAddon addon = m_Deed.Addon;

                    Spells.SpellHelper.GetSurfaceTop(ref p);

                    BaseHouse   house   = null;
                    BaseGalleon galleon = CheckGalleonPlacement(from, addon, new Point3D(p), map);

                    AddonFitResult res = galleon != null ? AddonFitResult.Valid : addon.CouldFit(p, map, from, ref house);

                    if (res == AddonFitResult.Valid)
                    {
                        addon.Resource = m_Deed.Resource;

                        if (!m_Deed.ExcludeDeedHue)
                        {
                            if (addon.RetainDeedHue || (m_Deed.Hue != 0 && CraftResources.GetHue(m_Deed.Resource) != m_Deed.Hue))
                            {
                                addon.Hue = m_Deed.Hue;
                            }
                        }

                        addon.MoveToWorld(new Point3D(p), map);

                        if (house != null)
                        {
                            house.Addons[addon] = from;
                        }

                        if (galleon != null)
                        {
                            galleon.AddAddon(addon);
                        }

                        m_Deed.DeleteDeed();
                    }
                    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.OwnerNotInHouse)
                    {
                        from.SendLocalizedMessage(1153770); // The deed is not in the same house as you.
                    }
                    else if (res == AddonFitResult.DoorTooClose)
                    {
                        from.SendLocalizedMessage(500271); // You cannot build near the door.
                    }
                    else if (res == AddonFitResult.NoWall)
                    {
                        from.SendLocalizedMessage(500268); // This object needs to be mounted on something.
                    }
                    else if (res == AddonFitResult.FoundationStairs)
                    {
                        from.SendLocalizedMessage(1071262); // You can't place the multi-tile addon at the entrance!
                    }
                    else if (res == AddonFitResult.InternalStairs)
                    {
                        from.SendLocalizedMessage(1152735); // The targeted location has at least one impassable tile adjacent to the structure.
                        from.SendLocalizedMessage(500277);  // Construction aborted. Please try again.
                    }

                    if (res != AddonFitResult.Valid)
                    {
                        addon.Delete();
                    }
                }
                else
                {
                    from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
                }
            }