feat: Fixes beneficial notoriety checks and adds better young restrictions/messaging (#2000)

This commit is contained in:
Kamron Batman 2025-01-20 11:27:19 -08:00 • committed by GitHub
parent 64e32a817d
commit 84d9383294
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 78 additions and 96 deletions

View file

@ -44,15 +44,8 @@ namespace Server.Misc
return GuildStatus.Waring;
}
private static bool CheckBeneficialStatus(GuildStatus from, GuildStatus target)
{
if (from == GuildStatus.Waring || target == GuildStatus.Waring)
{
return false;
}
return true;
}
private static bool CheckBeneficialStatus(GuildStatus from, GuildStatus target) =>
from != GuildStatus.Waring && target != GuildStatus.Waring;
/*private static bool CheckHarmfulStatus( GuildStatus from, GuildStatus target )
{
@ -70,20 +63,16 @@ namespace Server.Misc
return true;
}
if (from.Region.IsPartOf<SafeZone>() || target.Region.IsPartOf<SafeZone>())
{
return false;
}
var bcFrom = from as BaseCreature;
var bcTarg = target as BaseCreature;
var pmFrom = from as PlayerMobile;
var pmTarg = target as PlayerMobile;
if (pmFrom == null && bcFrom?.Summoned == true)
{
pmFrom = bcFrom.SummonMaster as PlayerMobile;
}
if (pmTarg == null && bcTarg?.Summoned == true)
{
pmTarg = bcTarg.SummonMaster as PlayerMobile;
}
var pmFrom = (bcFrom?.GetMaster() ?? from) as PlayerMobile;
var pmTarg = (bcTarg?.GetMaster() ?? target) as PlayerMobile;
if (pmFrom != null && pmTarg != null)
{
@ -124,11 +113,6 @@ namespace Server.Misc
return false;
}
if (from.Region.IsPartOf<SafeZone>() || target.Region.IsPartOf<SafeZone>())
{
return false;
}
var map = from.Map;
var targetFaction = Faction.Find(target, true);
@ -143,7 +127,7 @@ namespace Server.Misc
return true; // In felucca, anything goes
}
if (!from.Player)
if (!from.Player && pmFrom?.AccessLevel != AccessLevel.Player)
{
return true; // NPCs have no restrictions
}
@ -153,9 +137,9 @@ namespace Server.Misc
return false; // Players cannot heal uncontrolled mobiles
}
if (pmFrom?.Young == true && pmTarg?.Young != true)
if (pmFrom?.Young == true && pmTarg?.Young == false)
{
return false; // Young players cannot perform beneficial actions towards older players
return false; // Young players cannot perform beneficial actions towards non-young players or pets
}
if (from.Guild is Guild fromGuild && target.Guild is Guild targetGuild &&
@ -175,20 +159,16 @@ namespace Server.Misc
return true;
}
if (from.Region.IsPartOf<SafeZone>() || target.Region.IsPartOf<SafeZone>())
{
return false;
}
var bcFrom = from as BaseCreature;
var pmFrom = from as PlayerMobile;
var pmTarg = target as PlayerMobile;
var bcTarg = target as BaseCreature;
if (pmFrom == null && bcFrom?.Summoned == true)
{
pmFrom = bcFrom.SummonMaster as PlayerMobile;
}
if (pmTarg == null && bcTarg?.Summoned == true)
{
pmTarg = bcTarg.SummonMaster as PlayerMobile;
}
var pmFrom = (bcFrom?.GetMaster() ?? from) as PlayerMobile;
var pmTarg = (bcTarg?.GetMaster() ?? target) as PlayerMobile;
if (pmFrom != null && pmTarg != null)
{
@ -224,11 +204,6 @@ namespace Server.Misc
return false;
}
if (from.Region.IsPartOf<SafeZone>() || target.Region.IsPartOf<SafeZone>())
{
return false;
}
var map = from.Map;
if ((map?.Rules & MapRules.HarmfulRestrictions) == 0)
@ -236,16 +211,11 @@ namespace Server.Misc
return true; // In felucca, anything goes
}
if (!from.Player && !(from is BaseCreature bc && bc.GetMaster() != null &&
bc.GetMaster().AccessLevel == AccessLevel.Player))
if (!from.Player && pmFrom?.AccessLevel != AccessLevel.Player)
{
if (!CheckAggressor(from.Aggressors, target) && !CheckAggressed(from.Aggressed, target) &&
pmTarg?.CheckYoungProtection(from) == true)
{
return false;
}
return true; // Uncontrolled NPCs are only restricted by the young system
// Uncontrolled NPCs are only restricted by the young system
return CheckAggressor(from.Aggressors, target) || CheckAggressed(from.Aggressed, target) ||
(target as PlayerMobile)?.CheckYoungProtection(from) != true;
}
var fromGuild = GetGuildFor(from.Guild as Guild, from);
@ -258,7 +228,7 @@ namespace Server.Misc
}
if (bcTarg?.Controlled == true
|| (bcTarg?.Summoned == true && bcTarg.SummonMaster != from && bcTarg.SummonMaster.Player))
|| bcTarg?.Summoned == true && bcTarg.SummonMaster != from && bcTarg.SummonMaster.Player)
{
return false; // Cannot harm other controlled mobiles from players
}
@ -278,23 +248,24 @@ namespace Server.Misc
public static Guild GetGuildFor(Guild def, Mobile m)
{
var g = def;
if (m is BaseCreature c && c.Controlled && c.ControlMaster != null)
if (m is not BaseCreature c || !c.Controlled || c.ControlMaster == null)
{
c.DisplayGuildTitle = false;
if (c.Map != Map.Internal && (Core.AOS || Guild.NewGuildSystem || c.ControlOrder is OrderType.Attack or OrderType.Guard))
{
g = (Guild)(c.Guild = c.ControlMaster.Guild);
}
else if (c.Map == Map.Internal || c.ControlMaster.Guild == null)
{
g = (Guild)(c.Guild = null);
}
return def;
}
return g;
c.DisplayGuildTitle = false;
if (c.Map != Map.Internal && (Core.AOS || Guild.NewGuildSystem || c.ControlOrder is OrderType.Attack or OrderType.Guard))
{
return (Guild)(c.Guild = c.ControlMaster.Guild);
}
if (c.Map == Map.Internal || c.ControlMaster.Guild == null)
{
return (Guild)(c.Guild = null);
}
return def;
}
public static int CorpseNotoriety(Mobile source, Corpse target)