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 { } } }
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. } }
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. } }
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. } }
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. } }
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. } }
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. } }
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. } }
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. } }
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. } }
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. } }
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. } }
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. } }