feat: Adds Mobile.Murderer virtual property, consolidates kill-threshold checks (#2355)

## Summary

- Adds `public virtual bool Murderer => Kills >= 5` property to `Mobile`, replacing ~30 scattered `Kills >= 5` / `Kills < 5` magic-number checks across the codebase
- `BaseCreature` overrides `Murderer` to also return `true` when `AlwaysMurderer` is set
- Updates `Corpse` serialization to v15, storing `_murderer` as a `bool` field (migrated from `int Kills >= 5` in earlier versions)
This commit is contained in:
Jack 2026-03-07 05:36:41 +13:00 • committed by GitHub
parent 192f092ee7
commit 6745cf2075
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
31 changed files with 200 additions and 43 deletions

View file

@ -311,7 +311,7 @@ namespace Server.Misc
var actual = Notoriety.CanBeAttacked;
if (target.Kills >= 5 || body.IsMonster && IsSummoned(creature) || creature.AlwaysMurderer ||
if (target.Murderer || body.IsMonster && IsSummoned(creature) ||
creature.IsAnimatedDead)
{
actual = Notoriety.Murderer;
@ -335,7 +335,7 @@ namespace Server.Misc
return Notoriety.Innocent;
}
if (target.Kills >= 5 || body.IsMonster)
if (target.Murderer || body.IsMonster)
{
return Notoriety.Murderer;
}
@ -438,7 +438,7 @@ namespace Server.Misc
}
}
if (target.Kills >= 5 ||
if (target.Murderer ||
target.Body.IsMonster && IsSummoned(bcTarg) && target is not BaseFamiliar && target is not ArcaneFey &&
target is not Golem || bcTarg?.IsAnimatedDead == true)
{