fix: Converts ethics system to generic entity persistence (#1824)

### Summary

Converts ethics system to entity persistence and removes the persistence item.


### TODO

1. The enable/disable toggle doesn't propagate to all code that does Ethics checks (notoriety, pvp, etc).
2. We need commands to remove them from an ethic.
This commit is contained in:
Kamron Batman 2024-06-16 10:26:09 -07:00 • committed by GitHub
parent f87c8f73ab
commit 20596e52fa
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
36 changed files with 1327 additions and 1338 deletions

View file

@ -1,40 +1,44 @@
using ModernUO.Serialization;
using Server.Factions;
namespace Server.Ethics.Hero
namespace Server.Ethics.Hero;
[SerializationGenerator(0, false)]
public sealed partial class HeroEthic : Ethic
{
public sealed class HeroEthic : Ethic
public override EthicDefinition Definition => new(
0x482,
"Hero",
"(Hero)",
"I will defend the virtues",
[
new HolySense(),
new HolyItem(),
new SummonFamiliar(),
new HolyBlade(),
new Bless(),
new HolyShield(),
new HolySteed(),
new HolyWord()
]
);
public HeroEthic()
{
public HeroEthic()
if (!RegisterEthic(this))
{
m_Definition = new EthicDefinition(
0x482,
"Hero",
"(Hero)",
"I will defend the virtues",
new Power[]
{
new HolySense(),
new HolyItem(),
new SummonFamiliar(),
new HolyBlade(),
new Bless(),
new HolyShield(),
new HolySteed(),
new HolyWord()
}
);
Delete();
}
}
public override bool IsEligible(Mobile mob)
public override bool IsEligible(Mobile mob) => mob.Kills < 5 && Faction.Find(mob) is TrueBritannians or CouncilOfMages;
[AfterDeserialization]
private void AfterDeserialization()
{
if (!RegisterEthic(this))
{
if (mob.Kills >= 5)
{
return false;
}
var fac = Faction.Find(mob);
return fac is TrueBritannians or CouncilOfMages;
Delete();
}
}
}