683 lines
31 KiB
C#
683 lines
31 KiB
C#
using Server;
|
|
using Server.Gumps;
|
|
using Server.Multis;
|
|
using Server.Network;
|
|
using Server.Regions;
|
|
using Server.Targeting;
|
|
using System;
|
|
|
|
namespace Server.Items
|
|
{
|
|
public enum DecorateCommand
|
|
{
|
|
None,
|
|
Secure,
|
|
Lockdown,
|
|
Release,
|
|
Turn,
|
|
Up,
|
|
Down,
|
|
North,
|
|
East,
|
|
South,
|
|
West,
|
|
Close
|
|
}
|
|
|
|
public class InteriorDecorator : Item
|
|
{
|
|
private DecorateCommand m_Command;
|
|
|
|
[Constructable]
|
|
public InteriorDecorator() : base( 0x1EBA )
|
|
{
|
|
Name = "Homeowner Tools";
|
|
Weight = 1.0;
|
|
}
|
|
|
|
public InteriorDecorator(Serial serial): base(serial)
|
|
{
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public DecorateCommand Command
|
|
{
|
|
get { return m_Command; }
|
|
set
|
|
{
|
|
m_Command = value;
|
|
InvalidateProperties();
|
|
}
|
|
}
|
|
|
|
public static bool InHouse(Mobile from)
|
|
{
|
|
BaseHouse house = BaseHouse.FindHouseAt(from);
|
|
|
|
return (house != null && house.IsFriend(from));
|
|
}
|
|
|
|
public static bool CheckUse(InteriorDecorator tool, Mobile from)
|
|
{
|
|
if (!InHouse(from))
|
|
from.SendLocalizedMessage(502092); // You must be in your house to do this.
|
|
else
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
writer.Write((int)0); // version
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
int version = reader.ReadInt();
|
|
}
|
|
|
|
public override void OnDoubleClick(Mobile from)
|
|
{
|
|
if (from.FindGump(typeof(InternalGump)) == null)
|
|
from.SendGump(new InternalGump(from, this));
|
|
|
|
if (m_Command != DecorateCommand.None)
|
|
from.Target = new InternalTarget(this);
|
|
}
|
|
|
|
private class InternalGump : Gump
|
|
{
|
|
private readonly InteriorDecorator m_Decorator;
|
|
|
|
public InternalGump(Mobile from, InteriorDecorator decorator)
|
|
: base(150, 50)
|
|
{
|
|
m_Decorator = decorator;
|
|
|
|
|
|
AddBackground(0, 0, 170, 559 , 2600);
|
|
|
|
AddPage(0);
|
|
|
|
AddButton(40, 45, (decorator.Command == DecorateCommand.Secure ? 2154 : 2152), 2154, 1, GumpButtonType.Reply, 0);
|
|
AddLabel(80, 50, 0, @"Secure"); //secure
|
|
|
|
AddButton(40, 85, (decorator.Command == DecorateCommand.Lockdown ? 2154 : 2152), 2154, 2, GumpButtonType.Reply, 0);
|
|
AddLabel(80, 90, 0, @"Lockdown"); // lockdown
|
|
|
|
AddButton(40, 125, (decorator.Command == DecorateCommand.Release ? 2154 : 2152), 2154, 3, GumpButtonType.Reply, 0);
|
|
AddLabel(80, 130, 0, @"Release"); // release
|
|
|
|
AddButton(40, 165, (decorator.Command == DecorateCommand.Turn ? 2154 : 2152), 2154, 4, GumpButtonType.Reply, 0);
|
|
AddLabel(80, 170, 0, @"Turn"); // Turn
|
|
|
|
AddButton(40, 205, (decorator.Command == DecorateCommand.Up ? 2154 : 2152), 2154, 5, GumpButtonType.Reply, 0);
|
|
AddLabel(80, 210, 0, @"Up"); // Up
|
|
|
|
AddButton(40, 245, (decorator.Command == DecorateCommand.Down ? 2154 : 2152), 2154, 6, GumpButtonType.Reply, 0);
|
|
AddLabel(80, 250, 0, @"Down"); // Down
|
|
|
|
AddButton(40, 285, (decorator.Command == DecorateCommand.North ? 2154 : 2152), 2154, 7, GumpButtonType.Reply, 0);
|
|
AddLabel(80, 290, 0, @"North"); // North
|
|
|
|
AddButton(40, 325, (decorator.Command == DecorateCommand.East ? 2154 : 2152), 2154, 8, GumpButtonType.Reply, 0);
|
|
AddLabel(80, 330, 0, @"East"); // East
|
|
|
|
AddButton(40, 365, (decorator.Command == DecorateCommand.South ? 2154 : 2152), 2154, 9, GumpButtonType.Reply, 0);
|
|
AddLabel(80, 370, 0, @"South"); // South
|
|
|
|
AddButton(40, 405, (decorator.Command == DecorateCommand.West ? 2154 : 2152), 2154, 10, GumpButtonType.Reply, 0);
|
|
AddLabel(80, 410, 0, @"West"); // West
|
|
|
|
AddButton(40, 485, (decorator.Command == DecorateCommand.Close ? 2472 : 2472), 2154, 13, GumpButtonType.Reply, 0);
|
|
AddLabel(80, 490, 0, @"Close"); // close
|
|
|
|
AddHtmlLocalized(0, 0, 0, 0, 4, false, false);
|
|
}
|
|
|
|
public override void OnResponse(NetState sender, RelayInfo info)
|
|
{
|
|
DecorateCommand command = DecorateCommand.None;
|
|
Mobile m = sender.Mobile;
|
|
|
|
int cliloc = 0;
|
|
string c_String = null;
|
|
|
|
switch (info.ButtonID)
|
|
{
|
|
case 1://secure
|
|
c_String = "Select an object to secure."; // Select an object to secure.
|
|
command = DecorateCommand.Secure;
|
|
break;
|
|
case 2://lockdown
|
|
c_String = "Select an object to lock down."; // Select an object to lock down.
|
|
command = DecorateCommand.Lockdown;
|
|
break;
|
|
case 3://release
|
|
c_String = "Select an object to release."; // Select an object to release.
|
|
command = DecorateCommand.Release;
|
|
break;
|
|
case 4://turn
|
|
cliloc = 1073404; // Select an object to turn.
|
|
command = DecorateCommand.Turn;
|
|
break;
|
|
case 5://up
|
|
cliloc = 1073405; // Select an object to increase its height.
|
|
command = DecorateCommand.Up;
|
|
break;
|
|
case 6://down
|
|
cliloc = 1073406; // Select an object to lower its height.
|
|
command = DecorateCommand.Down;
|
|
break;
|
|
case 7://north
|
|
c_String = "Select an object to move north."; // Select an object to move north.
|
|
command = DecorateCommand.North;
|
|
break;
|
|
case 8://east
|
|
c_String = "Select an object to move east."; // Select an object to move east.
|
|
command = DecorateCommand.East;
|
|
break;
|
|
case 9://south
|
|
c_String = "Select an object to move south."; // Select an object to move south.
|
|
command = DecorateCommand.South;
|
|
break;
|
|
case 10://west
|
|
c_String = "Select an object to move west."; // Select an object to move west.
|
|
command = DecorateCommand.West;
|
|
break;
|
|
case 12://Close
|
|
c_String = "Close"; // Close
|
|
command = DecorateCommand.Close;
|
|
break;
|
|
}
|
|
|
|
if (command != DecorateCommand.None & command != DecorateCommand.Close)
|
|
{
|
|
m_Decorator.Command = command;
|
|
m.SendGump(new InternalGump(m, m_Decorator));
|
|
|
|
if (cliloc != 0)
|
|
m.SendLocalizedMessage(cliloc);
|
|
if (c_String != null)
|
|
m.SendMessage(c_String);
|
|
|
|
m.Target = new InternalTarget(m_Decorator);
|
|
}
|
|
else
|
|
{
|
|
Target.Cancel(m);
|
|
}
|
|
}
|
|
}
|
|
|
|
private class InternalTarget : Target
|
|
{
|
|
private readonly InteriorDecorator m_Decorator;
|
|
|
|
public InternalTarget(InteriorDecorator decorator)
|
|
: base(-1, false, TargetFlags.None)
|
|
{
|
|
CheckLOS = false;
|
|
|
|
m_Decorator = decorator;
|
|
}
|
|
|
|
protected override void OnTargetNotAccessible(Mobile from, object targeted)
|
|
{
|
|
OnTarget(from, targeted);
|
|
}
|
|
|
|
protected override void OnTarget(Mobile from, object targeted)
|
|
{
|
|
if (targeted is Item && CheckUse(m_Decorator, from))
|
|
{
|
|
BaseHouse house = BaseHouse.FindHouseAt(from);
|
|
Item item = (Item)targeted;
|
|
|
|
bool isDecorableComponent = false;
|
|
|
|
if (item is AddonComponent || item is AddonContainerComponent || item is BaseAddonContainer)
|
|
{
|
|
object addon = null;
|
|
int count = 0;
|
|
|
|
if (item is AddonComponent)
|
|
{
|
|
AddonComponent component = (AddonComponent)item;
|
|
count = component.Addon.Components.Count;
|
|
addon = component.Addon;
|
|
}
|
|
else if (item is AddonContainerComponent)
|
|
{
|
|
AddonContainerComponent component = (AddonContainerComponent)item;
|
|
count = component.Addon.Components.Count;
|
|
addon = component.Addon;
|
|
}
|
|
else if (item is BaseAddonContainer)
|
|
{
|
|
BaseAddonContainer container = (BaseAddonContainer)item;
|
|
count = container.Components.Count;
|
|
addon = container;
|
|
}
|
|
|
|
if (m_Decorator.Command == DecorateCommand.Turn)
|
|
{
|
|
FlipableAddonAttribute[] attributes = (FlipableAddonAttribute[])addon.GetType().GetCustomAttributes(typeof(FlipableAddonAttribute), false);
|
|
|
|
if (attributes.Length > 0)
|
|
isDecorableComponent = true;
|
|
}
|
|
}
|
|
|
|
bool moveAddon = false;
|
|
|
|
if ( item is AddonComponent && ( m_Decorator.Command == DecorateCommand.North || m_Decorator.Command == DecorateCommand.South || m_Decorator.Command == DecorateCommand.East || m_Decorator.Command == DecorateCommand.West ) )
|
|
moveAddon = true;
|
|
|
|
if (house == null || !house.IsFriend(from))
|
|
{
|
|
from.SendLocalizedMessage(502092); // You must be in your house to do
|
|
}
|
|
else if (item.Parent != null || !house.IsInside(item))
|
|
{
|
|
from.SendLocalizedMessage(1042270); // That is not in your house.
|
|
}
|
|
else if (!house.IsLockedDown(item) && !house.IsSecure(item) && !isDecorableComponent && !(item is BaseAddonDeed) && !moveAddon )
|
|
{
|
|
if (item is AddonComponent && m_Decorator.Command == DecorateCommand.Turn)
|
|
from.SendLocalizedMessage(1042273); // You cannot turn that.
|
|
else if (item is AddonComponent && m_Decorator.Command == DecorateCommand.Up)
|
|
from.SendLocalizedMessage(1042274); // You cannot raise it up any higher.
|
|
else if (item is AddonComponent && m_Decorator.Command == DecorateCommand.Down)
|
|
from.SendLocalizedMessage(1042275); // You cannot lower it down any further.
|
|
else if (m_Decorator.Command == DecorateCommand.Secure)
|
|
Secure(item, from);
|
|
else if (m_Decorator.Command == DecorateCommand.Lockdown)
|
|
Lockdown(item, from);
|
|
else
|
|
from.SendMessage("That is not locked down or secured.");
|
|
}
|
|
else if (item is VendorRentalContract)
|
|
{
|
|
from.SendLocalizedMessage(1062491); // You cannot use the house decorator on that object.
|
|
}
|
|
else
|
|
{
|
|
switch (m_Decorator.Command)
|
|
{
|
|
case DecorateCommand.None:
|
|
None(item, from);
|
|
break;
|
|
case DecorateCommand.Secure:
|
|
Secure(item, from);
|
|
break;
|
|
case DecorateCommand.Lockdown:
|
|
Lockdown(item, from);
|
|
break;
|
|
case DecorateCommand.Release:
|
|
Release(item, from);
|
|
break;
|
|
case DecorateCommand.Turn:
|
|
Turn(item, from);
|
|
break;
|
|
case DecorateCommand.Up:
|
|
Up(item, from);
|
|
break;
|
|
case DecorateCommand.Down:
|
|
Down(item, from);
|
|
break;
|
|
case DecorateCommand.North:
|
|
North(item, from);
|
|
break;
|
|
case DecorateCommand.East:
|
|
East(item, from);
|
|
break;
|
|
case DecorateCommand.South:
|
|
South(item, from);
|
|
break;
|
|
case DecorateCommand.West:
|
|
West(item, from);
|
|
break;
|
|
case DecorateCommand.Close:
|
|
Close(item, from);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
from.Target = new InternalTarget(m_Decorator);
|
|
}
|
|
|
|
protected override void OnTargetCancel(Mobile from, TargetCancelType cancelType)
|
|
{
|
|
if (cancelType == TargetCancelType.Canceled)
|
|
from.CloseGump(typeof(InteriorDecorator.InternalGump));
|
|
}
|
|
|
|
private static void None(Item item, Mobile from)
|
|
{
|
|
}
|
|
|
|
private static void Secure(Item item, Mobile from)
|
|
{
|
|
BaseHouse house = BaseHouse.FindHouseAt(from);
|
|
if (house.IsLockedDown(item))
|
|
from.SendMessage("That is already locked down.");
|
|
else if (house.IsSecure(item))
|
|
from.SendMessage("That is already secured.");
|
|
else if (house.IsFriend(from)&&!house.IsCoOwner(from))
|
|
{ from.SendMessage("Only Owners and CoOwners are allowed to secure things in a house.");
|
|
return;
|
|
}
|
|
else
|
|
house.AddSecure(from, item);
|
|
}
|
|
|
|
private static void Lockdown(Item item, Mobile from)
|
|
{
|
|
BaseHouse house = BaseHouse.FindHouseAt(from);
|
|
if (house.IsLockedDown(item))
|
|
from.SendMessage("That is already locked down.");
|
|
else if (house.IsSecure(item))
|
|
from.SendMessage("That is already secured.");
|
|
else
|
|
house.LockDown(from, item, true);
|
|
}
|
|
|
|
private static void Release(Item item, Mobile from)
|
|
{
|
|
BaseHouse house = BaseHouse.FindHouseAt(from);
|
|
if (!house.IsLockedDown(item) && !house.IsSecure(item) && (item.Movable))
|
|
from.SendMessage("That is not locked down or secured.");
|
|
else
|
|
house.Release(from, item);
|
|
}
|
|
|
|
private static void Turn(Item item, Mobile from)
|
|
{
|
|
FlipableAttribute[] attributes = (FlipableAttribute[])item.GetType().GetCustomAttributes(typeof(FlipableAttribute), false);
|
|
|
|
Item deed = null;
|
|
|
|
if ( item is AnvilEastDeed ){ deed = new AnvilSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
else if ( item is AnvilSouthDeed ){ deed = new AnvilEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
|
|
else if ( item is BrownBearRugEastDeed ){ deed = new BrownBearRugSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
else if ( item is BrownBearRugSouthDeed ){ deed = new BrownBearRugEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
|
|
else if ( item is PolarBearRugEastDeed ){ deed = new PolarBearRugSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
else if ( item is PolarBearRugSouthDeed ){ deed = new PolarBearRugEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
|
|
else if ( item is DartBoardEastDeed ){ deed = new DartBoardSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
else if ( item is DartBoardSouthDeed ){ deed = new DartBoardEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
|
|
else if ( item is FlourMillEastDeed ){ deed = new FlourMillSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
else if ( item is FlourMillSouthDeed ){ deed = new FlourMillEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
|
|
else if ( item is LightFlowerTapestryEastDeed ){ deed = new LightFlowerTapestrySouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
else if ( item is LightFlowerTapestrySouthDeed ){ deed = new LightFlowerTapestryEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
|
|
else if ( item is DarkFlowerTapestryEastDeed ){ deed = new DarkFlowerTapestrySouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
else if ( item is DarkFlowerTapestrySouthDeed ){ deed = new DarkFlowerTapestryEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
|
|
else if ( item is GrayBrickFireplaceEastDeed ){ deed = new GrayBrickFireplaceSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
else if ( item is GrayBrickFireplaceSouthDeed ){ deed = new GrayBrickFireplaceEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
|
|
else if ( item is LargeBedEastDeed ){ deed = new LargeBedSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
else if ( item is LargeBedSouthDeed ){ deed = new LargeBedEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
|
|
else if ( item is LadderSouthAddonDeed ){ deed = new LadderEastAddonDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
else if ( item is LadderEastAddonDeed ){ deed = new LadderSouthAddonDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
|
|
else if ( item is LargeForgeEastDeed ){ deed = new LargeForgeSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
else if ( item is LargeForgeSouthDeed ){ deed = new LargeForgeEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
|
|
else if ( item is LargeStoneTableEastDeed ){ deed = new LargeStoneTableSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
else if ( item is LargeStoneTableSouthDeed ){ deed = new LargeStoneTableEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
|
|
else if ( item is LoomEastDeed ){ deed = new LoomSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
else if ( item is LoomSouthDeed ){ deed = new LoomEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
|
|
else if ( item is MediumStoneTableEastDeed ){ deed = new MediumStoneTableSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
else if ( item is MediumStoneTableSouthDeed ){ deed = new MediumStoneTableEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
|
|
else if ( item is PickpocketDipEastDeed ){ deed = new PickpocketDipSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
else if ( item is PickpocketDipSouthDeed ){ deed = new PickpocketDipEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
|
|
else if ( item is SandstoneFireplaceEastDeed ){ deed = new SandstoneFireplaceSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
else if ( item is SandstoneFireplaceSouthDeed ){ deed = new SandstoneFireplaceEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
|
|
else if ( item is SmallBedEastDeed ){ deed = new SmallBedSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
else if ( item is SmallBedSouthDeed ){ deed = new SmallBedEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
|
|
else if ( item is SpinningwheelEastDeed ){ deed = new SpinningwheelSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
else if ( item is SpinningwheelSouthDeed ){ deed = new SpinningwheelEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
|
|
else if ( item is StoneFireplaceEastDeed ){ deed = new StoneFireplaceSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
else if ( item is StoneFireplaceSouthDeed ){ deed = new StoneFireplaceEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
|
|
else if ( item is StoneOvenEastDeed ){ deed = new StoneOvenSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
else if ( item is StoneOvenSouthDeed ){ deed = new StoneOvenEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
|
|
else if ( item is SmallStretchedHideEastDeed ){ deed = new SmallStretchedHideSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
else if ( item is SmallStretchedHideSouthDeed ){ deed = new SmallStretchedHideEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
|
|
else if ( item is MediumStretchedHideEastDeed ){ deed = new MediumStretchedHideSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
else if ( item is MediumStretchedHideSouthDeed ){ deed = new MediumStretchedHideEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
|
|
else if ( item is TrainingDummyEastDeed ){ deed = new TrainingDummySouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
else if ( item is TrainingDummySouthDeed ){ deed = new TrainingDummyEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
|
|
else if ( item is WaterTroughEastDeed ){ deed = new WaterTroughSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
else if ( item is WaterTroughSouthDeed ){ deed = new WaterTroughEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); }
|
|
|
|
else if ( item is MyTentEastAddonDeed )
|
|
{
|
|
MyTentEastAddonDeed tent = (MyTentEastAddonDeed)item;
|
|
deed = new MyTentSouthAddonDeed();
|
|
MyTentSouthAddonDeed hut = (MyTentSouthAddonDeed)deed;
|
|
deed.Hue = item.Hue;
|
|
hut.TentColor = tent.TentColor;
|
|
deed.MoveToWorld(item.Location, item.Map);
|
|
item.Delete();
|
|
}
|
|
else if ( item is MyTentSouthAddonDeed )
|
|
{
|
|
MyTentSouthAddonDeed tent = (MyTentSouthAddonDeed)item;
|
|
deed = new MyTentEastAddonDeed();
|
|
MyTentEastAddonDeed hut = (MyTentEastAddonDeed)deed;
|
|
deed.Hue = item.Hue;
|
|
hut.TentColor = tent.TentColor;
|
|
deed.MoveToWorld(item.Location, item.Map);
|
|
item.Delete();
|
|
}
|
|
|
|
if (attributes.Length > 0)
|
|
attributes[0].Flip(item);
|
|
else if ( item.ItemID != FlipID( item.ItemID ) )
|
|
item.ItemID = FlipID( item.ItemID );
|
|
else
|
|
from.SendLocalizedMessage(1042273); // You cannot turn that.
|
|
}
|
|
|
|
private static void Up(Item item, Mobile from)
|
|
{
|
|
int floorZ = GetFloorZ(item);
|
|
|
|
if (floorZ > int.MinValue && item.Z < (floorZ + 14)) // Confirmed : no height checks here
|
|
item.Location = new Point3D(item.Location, item.Z + 1);
|
|
else
|
|
from.SendLocalizedMessage(1042274); // You cannot raise it up any higher.
|
|
}
|
|
|
|
private static void Down(Item item, Mobile from)
|
|
{
|
|
int floorZ = GetFloorZ(item);
|
|
|
|
if (floorZ > int.MinValue && item.Z > GetFloorZ(item))
|
|
item.Location = new Point3D(item.Location, item.Z - 1);
|
|
else
|
|
from.SendLocalizedMessage(1042275); // You cannot lower it down any further.
|
|
}
|
|
|
|
private static void North(Item item, Mobile from)
|
|
{
|
|
BaseHouse house = BaseHouse.FindHouseAt(item);
|
|
|
|
Point3D ourLoc = item.GetWorldLocation();
|
|
Point3D goingLoc = new Point3D(ourLoc.X, ourLoc.Y -2, ourLoc.Z);
|
|
|
|
if (house.IsInside(goingLoc, ourLoc.Z))
|
|
item.Y = (item.Y -1);
|
|
else
|
|
from.SendMessage("You cannot move it to the north any further.");
|
|
|
|
}
|
|
|
|
private static void East(Item item, Mobile from)
|
|
{
|
|
BaseHouse house = BaseHouse.FindHouseAt(item);
|
|
|
|
Point3D ourLoc = item.GetWorldLocation();
|
|
Point3D goingLoc = new Point3D(ourLoc.X +1, ourLoc.Y, ourLoc.Z);
|
|
|
|
if (house.IsInside(goingLoc, ourLoc.Z))
|
|
item.X = (item.X +1);
|
|
else
|
|
from.SendMessage("You cannot move it to the east any further.");
|
|
|
|
}
|
|
|
|
private static void South(Item item, Mobile from)
|
|
{
|
|
BaseHouse house = BaseHouse.FindHouseAt(item);
|
|
|
|
Point3D ourLoc = item.GetWorldLocation();
|
|
Point3D goingLoc = new Point3D(ourLoc.X, ourLoc.Y +1, ourLoc.Z);
|
|
|
|
if (house.IsInside(goingLoc, ourLoc.Z))
|
|
item.Y = (item.Y +1);
|
|
else
|
|
from.SendMessage("You cannot move it to the south any further.");
|
|
}
|
|
|
|
private static void West(Item item, Mobile from)
|
|
{
|
|
BaseHouse house = BaseHouse.FindHouseAt(item);
|
|
|
|
Point3D ourLoc = item.GetWorldLocation();
|
|
Point3D goingLoc = new Point3D(ourLoc.X -2, ourLoc.Y, ourLoc.Z);
|
|
|
|
if (house.IsInside(goingLoc, ourLoc.Z))
|
|
item.X = (item.X -1);
|
|
else
|
|
from.SendMessage("You cannot move it to the west any further.");
|
|
}
|
|
|
|
private static void Close(Item item, Mobile from)
|
|
{
|
|
from.CloseGump(typeof(InteriorDecorator.InternalGump));
|
|
Target.Cancel(from);
|
|
}
|
|
|
|
private static void Command(Item item, Mobile from)
|
|
{
|
|
}
|
|
|
|
private static int GetFloorZ(Item item)
|
|
{
|
|
Map map = item.Map;
|
|
|
|
if (map == null)
|
|
return int.MinValue;
|
|
|
|
StaticTile[] tiles = map.Tiles.GetStaticTiles(item.X, item.Y, true);
|
|
|
|
int z = int.MinValue;
|
|
|
|
for (int i = 0; i < tiles.Length; ++i)
|
|
{
|
|
StaticTile tile = tiles[i];
|
|
ItemData id = TileData.ItemTable[tile.ID & 0x3FFF];
|
|
|
|
int top = tile.Z; // Confirmed : no height checks here
|
|
|
|
if (id.Surface && !id.Impassable && top > z && top <= item.Z)
|
|
z = top;
|
|
}
|
|
|
|
if (z == int.MinValue)
|
|
z = map.Tiles.GetLandTile(item.X, item.Y).Z;
|
|
|
|
return z;
|
|
}
|
|
|
|
public static int FlipID( int id )
|
|
{
|
|
if ( id == 8356 ){ id = 8357; }
|
|
else if ( id == 8358 ){ id = 8359; }
|
|
else if ( id == 8360 ){ id = 8361; }
|
|
else if ( id == 8362 ){ id = 8363; }
|
|
else if ( id == 8364 ){ id = 8365; }
|
|
else if ( id == 8366 ){ id = 8367; }
|
|
else if ( id == 8368 ){ id = 8369; }
|
|
else if ( id == 8370 ){ id = 8371; }
|
|
else if ( id == 8372 ){ id = 8373; }
|
|
else if ( id == 8374 ){ id = 8375; }
|
|
else if ( id == 8376 ){ id = 8377; }
|
|
else if ( id == 8378 ){ id = 8379; }
|
|
else if ( id == 8380 ){ id = 8381; }
|
|
else if ( id == 8382 ){ id = 8383; }
|
|
else if ( id == 8384 ){ id = 8385; }
|
|
else if ( id == 8386 ){ id = 8387; }
|
|
else if ( id == 8388 ){ id = 8389; }
|
|
else if ( id == 8390 ){ id = 8391; }
|
|
else if ( id == 8392 ){ id = 8393; }
|
|
else if ( id == 8394 ){ id = 8395; }
|
|
else if ( id == 8396 ){ id = 8397; }
|
|
else if ( id == 0xC0F ){ id = 0xC2C; }
|
|
else if ( id == 0xE9F ){ id = 0xEC8; }
|
|
else if ( id == 0xEA0 ){ id = 0xEA9; }
|
|
else if ( id == 0xEA1 ){ id = 0xEA2; }
|
|
else if ( id == 0xEA3 ){ id = 0xEA4; }
|
|
else if ( id == 0xEA5 ){ id = 0x121C; }
|
|
else if ( id == 0xEA7 ){ id = 0x1229; }
|
|
else if ( id == 0xEA8 ){ id = 0x1236; }
|
|
else if ( id == 8357 ){ id = 8356; }
|
|
else if ( id == 8359 ){ id = 8358; }
|
|
else if ( id == 8361 ){ id = 8360; }
|
|
else if ( id == 8363 ){ id = 8362; }
|
|
else if ( id == 8365 ){ id = 8364; }
|
|
else if ( id == 8367 ){ id = 8366; }
|
|
else if ( id == 8369 ){ id = 8368; }
|
|
else if ( id == 8371 ){ id = 8370; }
|
|
else if ( id == 8373 ){ id = 8372; }
|
|
else if ( id == 8375 ){ id = 8374; }
|
|
else if ( id == 8377 ){ id = 8376; }
|
|
else if ( id == 8379 ){ id = 8378; }
|
|
else if ( id == 8381 ){ id = 8380; }
|
|
else if ( id == 8383 ){ id = 8382; }
|
|
else if ( id == 8385 ){ id = 8384; }
|
|
else if ( id == 8387 ){ id = 8386; }
|
|
else if ( id == 8389 ){ id = 8388; }
|
|
else if ( id == 8391 ){ id = 8390; }
|
|
else if ( id == 8393 ){ id = 8392; }
|
|
else if ( id == 8395 ){ id = 8394; }
|
|
else if ( id == 8397 ){ id = 8396; }
|
|
else if ( id == 0xC2C ){ id = 0xC0F; }
|
|
else if ( id == 0xEC8 ){ id = 0xE9F; }
|
|
else if ( id == 0xEA9 ){ id = 0xEA0; }
|
|
else if ( id == 0xEA2 ){ id = 0xEA1; }
|
|
else if ( id == 0xEA4 ){ id = 0xEA3; }
|
|
else if ( id == 0x121C ){ id = 0xEA5; }
|
|
else if ( id == 0x1229 ){ id = 0xEA7; }
|
|
else if ( id == 0x1236 ){ id = 0xEA8; }
|
|
|
|
return id;
|
|
}
|
|
}
|
|
}
|
|
}
|