### Summary
- [X] Gets rid of the Dtos
- [X] Simplifies the json serializer registration
- [X] Adds a custom `RegionByName` JsonConverter that can look up other regions that have already been registered.
### BREAKING CHANGE
1. **Child regions must appear after their parents in the JSON file**
2. In the regions json file, _"Parent"_ can no longer be just a string. It must be an object that includes the map.
- ```json
"Parent": { "Name": "Britain", "Map": "Felucca" }
```
90 lines
2.5 KiB
C#
90 lines
2.5 KiB
C#
using System.Text.Json.Serialization;
|
|
using Server.Spells;
|
|
|
|
namespace Server.Regions;
|
|
|
|
public class JailRegion : BaseRegion
|
|
{
|
|
[JsonConstructor] // Don't include parent, since it is special
|
|
public JailRegion(string name, Map map, int priority, params Rectangle3D[] area) : base(name, map, priority, area)
|
|
{
|
|
}
|
|
|
|
public JailRegion(string name, Map map, Region parent, params Rectangle3D[] area)
|
|
: base(name, map, parent, area)
|
|
{
|
|
}
|
|
|
|
public JailRegion(string name, Map map, Region parent, int priority, params Rectangle3D[] area)
|
|
: base(name, map, parent, priority, area)
|
|
{
|
|
}
|
|
|
|
public override bool AllowGain(Mobile m, Skill skill, object obj) => m.AccessLevel > AccessLevel.Player;
|
|
|
|
public override bool AllowBeneficial(Mobile from, Mobile target)
|
|
{
|
|
if (from.AccessLevel == AccessLevel.Player)
|
|
{
|
|
from.SendMessage("You may not do that in jail.");
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public override bool AllowHarmful(Mobile from, Mobile target)
|
|
{
|
|
if (from.AccessLevel == AccessLevel.Player)
|
|
{
|
|
from.SendMessage("You may not do that in jail.");
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public override bool AllowHousing(Mobile from, Point3D p) => false;
|
|
|
|
public override void AlterLightLevel(Mobile m, ref int global, ref int personal)
|
|
{
|
|
global = LightCycle.JailLevel;
|
|
}
|
|
|
|
private static TextDefinition _jailBreakPlan = 1114345; // You'll need a better jailbreak plan than that!
|
|
|
|
public override bool CheckTravel(Mobile m, Point3D newLocation, TravelCheckType travelType, out TextDefinition message)
|
|
{
|
|
if (m?.AccessLevel == AccessLevel.Player)
|
|
{
|
|
message = _jailBreakPlan;
|
|
return false;
|
|
}
|
|
|
|
return base.CheckTravel(m, newLocation, travelType, out message);
|
|
}
|
|
|
|
public override bool OnBeginSpellCast(Mobile from, ISpell s)
|
|
{
|
|
if (from.AccessLevel == AccessLevel.Player)
|
|
{
|
|
from.SendLocalizedMessage(502629); // You cannot cast spells here.
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public override bool OnSkillUse(Mobile from, int Skill)
|
|
{
|
|
if (from.AccessLevel == AccessLevel.Player)
|
|
{
|
|
from.SendMessage("You may not use skills in jail.");
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public override bool OnCombatantChange(Mobile from, Mobile Old, Mobile New) => from.AccessLevel > AccessLevel.Player;
|
|
}
|