From ee1bf23b724662372e178acf7ff9bd6374d03a56 Mon Sep 17 00:00:00 2001 From: Wyatt88 Date: Wed, 6 May 2026 04:09:49 +0100 Subject: [PATCH] feat: add young_player_system feature flag to disable Young player system (#2445) Adds an opt-in 'youngPlayerSystem.enabled' server setting (default true) that, when set to false, disables the Young player system server-wide: - Account.Young and PlayerMobile.Young getters short-circuit to false. - New characters no longer receive Young status or a NewPlayerTicket. - All downstream Young checks (notoriety beneficial-action restriction, CheckYoungProtection, stealing penalties, YoungDeathTeleport, death-item movement, poison immunity, '(Young)' name suffix, CanLogout, renounce-young keyword/gump, BaseCreature.OnDeath fame penalty, OnLogin time-remaining message) become inert. Setters are intentionally left untouched so serialized account/player flags round-trip cleanly when the setting is later re-enabled. --- Projects/UOContent/Accounting/Account.cs | 3 ++- Projects/UOContent/Engines/FeatureFlags/ContentFeatureFlags.cs | 1 + Projects/UOContent/Engines/FeatureFlags/FeatureFlagManager.cs | 1 + Projects/UOContent/Mobiles/PlayerMobile.cs | 2 +- 4 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Projects/UOContent/Accounting/Account.cs b/Projects/UOContent/Accounting/Account.cs index 3770b5b88..d098dc101 100644 --- a/Projects/UOContent/Accounting/Account.cs +++ b/Projects/UOContent/Accounting/Account.cs @@ -10,6 +10,7 @@ using Server.Misc; using Server.Mobiles; using Server.Multis; using Server.Network; +using Server.Systems.FeatureFlags; namespace Server.Accounting; @@ -250,7 +251,7 @@ public partial class Account : IAccount, IComparable /// public bool Young { - get => !GetFlag(1); + get => ContentFeatureFlags.YoungPlayerSystem && !GetFlag(1); set { SetFlag(1, !value); diff --git a/Projects/UOContent/Engines/FeatureFlags/ContentFeatureFlags.cs b/Projects/UOContent/Engines/FeatureFlags/ContentFeatureFlags.cs index 70da09660..e6d940fbd 100644 --- a/Projects/UOContent/Engines/FeatureFlags/ContentFeatureFlags.cs +++ b/Projects/UOContent/Engines/FeatureFlags/ContentFeatureFlags.cs @@ -13,4 +13,5 @@ public static class ContentFeatureFlags public static bool BoatPlacement { get; set; } = true; public static bool BulkOrders { get; set; } = true; public static bool PassiveDetectHidden { get; set; } = true; + public static bool YoungPlayerSystem { get; set; } = true; } diff --git a/Projects/UOContent/Engines/FeatureFlags/FeatureFlagManager.cs b/Projects/UOContent/Engines/FeatureFlags/FeatureFlagManager.cs index 8b073b0cf..1c4bd4321 100644 --- a/Projects/UOContent/Engines/FeatureFlags/FeatureFlagManager.cs +++ b/Projects/UOContent/Engines/FeatureFlags/FeatureFlagManager.cs @@ -975,6 +975,7 @@ public static class FeatureFlagManager "boat_placement" => ContentFeatureFlags.BoatPlacement = enabled, "bulk_orders" => ContentFeatureFlags.BulkOrders = enabled, "passive_detect_hidden" => ContentFeatureFlags.PassiveDetectHidden = enabled, + "young_player_system" => ContentFeatureFlags.YoungPlayerSystem = enabled, }; } diff --git a/Projects/UOContent/Mobiles/PlayerMobile.cs b/Projects/UOContent/Mobiles/PlayerMobile.cs index bd83d1c71..d122b7acc 100644 --- a/Projects/UOContent/Mobiles/PlayerMobile.cs +++ b/Projects/UOContent/Mobiles/PlayerMobile.cs @@ -684,7 +684,7 @@ namespace Server.Mobiles [CommandProperty(AccessLevel.GameMaster)] public bool Young { - get => GetFlag(PlayerFlag.Young); + get => ContentFeatureFlags.YoungPlayerSystem && GetFlag(PlayerFlag.Young); set { SetFlag(PlayerFlag.Young, value);