### Summary * Converts HouseDeeds to serialization generator * Converts Houses to serialization generator * Converts ContestHouses to serialization generator
133 lines
4.6 KiB
C#
133 lines
4.6 KiB
C#
using ModernUO.Serialization;
|
|
|
|
namespace Server.Multis.Deeds;
|
|
|
|
[SerializationGenerator(0, false)]
|
|
public abstract partial class HouseDeed : Item
|
|
{
|
|
[SerializableField(0)]
|
|
[SerializedCommandProperty(AccessLevel.GameMaster)]
|
|
private Point3D _offset;
|
|
|
|
[SerializableField(1)]
|
|
[SerializedCommandProperty(AccessLevel.GameMaster)]
|
|
private int _multiID;
|
|
|
|
public HouseDeed(int id, Point3D offset) : base(0x14F0)
|
|
{
|
|
LootType = LootType.Newbied;
|
|
|
|
_multiID = id;
|
|
_offset = offset;
|
|
}
|
|
|
|
public virtual Direction HouseDirection => Direction.South;
|
|
|
|
public abstract Rectangle2D[] Area { get; }
|
|
|
|
public override double DefaultWeight => 1.0;
|
|
|
|
public override void OnDoubleClick(Mobile from)
|
|
{
|
|
if (!IsChildOf(from.Backpack))
|
|
{
|
|
from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
|
|
}
|
|
else if (from.AccessLevel < AccessLevel.GameMaster && BaseHouse.HasAccountHouse(from))
|
|
{
|
|
from.SendLocalizedMessage(501271); // You already own a house, you may not place another!
|
|
}
|
|
else
|
|
{
|
|
/* House placement cancellation could result in a
|
|
* 60 second delay in the return of your deed.
|
|
*/
|
|
from.SendLocalizedMessage(1010433);
|
|
|
|
from.Target = new HousePlacementTarget(this);
|
|
}
|
|
}
|
|
|
|
public abstract BaseHouse GetHouse(Mobile owner);
|
|
|
|
public void OnPlacement(Mobile from, Point3D p)
|
|
{
|
|
if (Deleted)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (!IsChildOf(from.Backpack))
|
|
{
|
|
from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
|
|
}
|
|
else if (from.AccessLevel < AccessLevel.GameMaster && BaseHouse.HasAccountHouse(from))
|
|
{
|
|
from.SendLocalizedMessage(501271); // You already own a house, you may not place another!
|
|
}
|
|
else
|
|
{
|
|
var center = new Point3D(p.X - Offset.X, p.Y - Offset.Y, p.Z - Offset.Z);
|
|
var res = HousePlacement.Check(from, MultiID, center, out var toMove, HouseDirection);
|
|
|
|
switch (res)
|
|
{
|
|
case HousePlacementResult.Valid:
|
|
{
|
|
var house = GetHouse(from);
|
|
house.MoveToWorld(center, from.Map);
|
|
Delete();
|
|
|
|
for (var i = 0; i < toMove.Count; ++i)
|
|
{
|
|
var o = toMove[i];
|
|
|
|
if (o is Mobile mobile)
|
|
{
|
|
mobile.Location = house.BanLocation;
|
|
}
|
|
else if (o is Item item)
|
|
{
|
|
item.Location = house.BanLocation;
|
|
}
|
|
}
|
|
|
|
break;
|
|
}
|
|
case HousePlacementResult.BadItem:
|
|
case HousePlacementResult.BadLand:
|
|
case HousePlacementResult.BadStatic:
|
|
case HousePlacementResult.BadRegionHidden:
|
|
{
|
|
// The house could not be created here. Either something is blocking the house, or the house would not be on valid terrain.
|
|
from.SendLocalizedMessage(1043287);
|
|
break;
|
|
}
|
|
case HousePlacementResult.NoSurface:
|
|
{
|
|
from.SendMessage(
|
|
"The house could not be created here. Part of the foundation would not be on any surface."
|
|
);
|
|
break;
|
|
}
|
|
case HousePlacementResult.BadRegion:
|
|
{
|
|
from.SendLocalizedMessage(501265); // Housing cannot be created in this area.
|
|
break;
|
|
}
|
|
case HousePlacementResult.BadRegionTemp:
|
|
{
|
|
// Lord British has decreed a 'no build' period, thus you cannot build this house at this time.
|
|
from.SendLocalizedMessage(501270);
|
|
break;
|
|
}
|
|
case HousePlacementResult.BadRegionRaffle:
|
|
{
|
|
// You must have a deed for this plot of land in order to build here.
|
|
from.SendLocalizedMessage(1150493);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|