ModernUO/Projects/UOContent/Multis/HousePlacementTarget.cs
2025-12-27 16:47:28 -08:00

51 lines
1.6 KiB
C#

using Server.Regions;
using Server.Targeting;
namespace Server.Multis.Deeds;
public class HousePlacementTarget : MultiTarget
{
private readonly HouseDeed _deed;
public HousePlacementTarget(HouseDeed deed) : base(deed.MultiID, deed.Offset) => _deed = deed;
protected override void OnTarget(Mobile from, object o)
{
if (o is not IPoint3D ip)
{
return;
}
var p = ip switch
{
Item item => item.GetWorldTop(),
Mobile m => m.Location,
_ => new Point3D(ip)
};
var reg = Region.Find(p, from.Map);
if (from.AccessLevel >= AccessLevel.GameMaster || reg.AllowHousing(from, p))
{
_deed.OnPlacement(from, p);
}
else if (reg.IsPartOf<TempNoHousingRegion>())
{
// Lord British has decreed a 'no build' period, thus you cannot build this house at this time.
from.SendLocalizedMessage(501270);
}
else if (reg.IsPartOf<TreasureRegion>() || reg.IsPartOf<HouseRegion>())
{
// 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);
}
else if (reg.IsPartOf<HouseRaffleRegion>())
{
from.SendLocalizedMessage(1150493); // You must have a deed for this plot of land in order to build here.
}
else
{
from.SendLocalizedMessage(501265); // Housing can not be created in this area.
}
}
}