From 264bf7199d805bd07dbdccc4345c672b19df9333 Mon Sep 17 00:00:00 2001 From: Tayrtahn Date: Fri, 12 Apr 2024 02:42:20 -0400 Subject: [PATCH] Allow advertisement timers to prewarm (#26900) Allow advertisement timers to prewarm. --- Content.Server/Advertise/Components/AdvertiseComponent.cs | 8 ++++++++ Content.Server/Advertise/EntitySystems/AdvertiseSystem.cs | 7 ++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/Content.Server/Advertise/Components/AdvertiseComponent.cs b/Content.Server/Advertise/Components/AdvertiseComponent.cs index 531b31031d..3d617e3a34 100644 --- a/Content.Server/Advertise/Components/AdvertiseComponent.cs +++ b/Content.Server/Advertise/Components/AdvertiseComponent.cs @@ -24,6 +24,14 @@ public sealed partial class AdvertiseComponent : Component [DataField] public int MaximumWait { get; private set; } = 10 * 60; + /// + /// If true, the delay before the first advertisement (at MapInit) will ignore + /// and instead be rolled between 0 and . This only applies to the initial delay; + /// will be respected after that. + /// + [DataField] + public bool Prewarm = true; + /// /// The identifier for the advertisements pack prototype. /// diff --git a/Content.Server/Advertise/EntitySystems/AdvertiseSystem.cs b/Content.Server/Advertise/EntitySystems/AdvertiseSystem.cs index 12eac72cfe..28fa01628f 100644 --- a/Content.Server/Advertise/EntitySystems/AdvertiseSystem.cs +++ b/Content.Server/Advertise/EntitySystems/AdvertiseSystem.cs @@ -37,13 +37,14 @@ public sealed class AdvertiseSystem : EntitySystem private void OnMapInit(EntityUid uid, AdvertiseComponent advert, MapInitEvent args) { - RandomizeNextAdvertTime(advert); + var prewarm = advert.Prewarm; + RandomizeNextAdvertTime(advert, prewarm); _nextCheckTime = MathHelper.Min(advert.NextAdvertisementTime, _nextCheckTime); } - private void RandomizeNextAdvertTime(AdvertiseComponent advert) + private void RandomizeNextAdvertTime(AdvertiseComponent advert, bool prewarm = false) { - var minDuration = Math.Max(1, advert.MinimumWait); + var minDuration = prewarm ? 0 : Math.Max(1, advert.MinimumWait); var maxDuration = Math.Max(minDuration, advert.MaximumWait); var waitDuration = TimeSpan.FromSeconds(_random.Next(minDuration, maxDuration)); -- 2.51.2