ModernUO/Projects/UOContent/Multis/HouseDeed.cs
Kamron Batman 771cb50919
fix: Converts houses/deeds to serialization generator (#2288)
### Summary
* Converts HouseDeeds to serialization generator
* Converts Houses to serialization generator
* Converts ContestHouses to serialization generator
2025-12-04 21:26:39 -08:00

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;
}
}
}
}
}