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));