Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 54 additions & 0 deletions EXILED/Exiled.API/Features/Respawn.cs
Original file line number Diff line number Diff line change
Expand Up @@ -388,10 +388,62 @@ public static void ForceWave(SpawnableWaveBase spawnableWaveBase)
WaveManager.Spawn(spawnableWaveBase);
}

/// <summary>
/// Forcefully pauses or resumes the timer of a time-based respawn wave for the specified faction.
/// </summary>
/// <param name="spawnableFaction">The faction associated with the respawn wave.</param>
/// <param name="isForcePause">True to pause the wave timer, false to resume it.</param>
public static void ForcePauseWave(SpawnableFaction spawnableFaction, bool isForcePause = true)
{
if (TryGetWaveBase(spawnableFaction, out SpawnableWaveBase spawnableWaveBase))
{
if (spawnableWaveBase is TimeBasedWave timeBasedWave)
{
timeBasedWave.Timer.IsForcefullyPaused = isForcePause;
}
}
}

/// <summary>
/// Forcefully pauses or resumes all time-based respawn waves by controlling their timers.
/// </summary>
/// <param name="isForcePause">
/// If true, all time-based waves will be paused. If false, their timers will resume.
/// </param>
/// <remarks>
/// Unlike ClearWaves, this does not remove waves from the system, it only controls their timer state.
/// </remarks>
public static void ForcePauseWaves(bool isForcePause = true)
{
foreach (SpawnableWaveBase wave in WaveManager.Waves)
{
if (wave is TimeBasedWave timeBasedWave)
{
timeBasedWave.Timer.IsForcefullyPaused = isForcePause;
}
}
}

/// <summary>
/// Pauses the specified list of respawn waves by iterating through each wave
/// and pausing it using the <see cref="PauseWave(SpawnableFaction)"/> method.
/// </summary>
/// <param name="spawnableFactions">
/// A list of <see cref="SpawnableFaction"/> instances representing the waves to pause.
/// </param>
public static void ForcePauseWaves(List<SpawnableFaction> spawnableFactions)
{
foreach (SpawnableFaction spawnableFaction in spawnableFactions)
{
ForcePauseWave(spawnableFaction);
}
}

/// <summary>
/// Pauses a specific respawn wave by removing it from the active wave list and adding it to the paused wave list.
/// </summary>
/// <param name="spawnableFaction">The <see cref="SpawnableFaction"/> representing the wave to pause.</param>
[Obsolete("Use ForcePauseWave instead. PauseWave breaks wave systems after game update.")]
public static void PauseWave(SpawnableFaction spawnableFaction)
{
if (TryGetWaveBase(spawnableFaction, out SpawnableWaveBase spawnableWaveBase))
Expand All @@ -412,6 +464,7 @@ public static void PauseWave(SpawnableFaction spawnableFaction)
/// Pauses respawn waves by removing them from <see cref="WaveManager.Waves">WaveManager.Waves</see> and storing them in <see cref="PausedWaves"/>.
/// </summary>
/// <!--Beryl said this should work fine but it requires testing-->
[Obsolete("Use ForcePauseWaves instead. PauseWaves breaks wave systems after game update.")]
public static void PauseWaves()
{
PausedWaves.Clear();
Expand All @@ -426,6 +479,7 @@ public static void PauseWaves()
/// <param name="spawnableFactions">
/// A list of <see cref="SpawnableFaction"/> instances representing the waves to pause.
/// </param>
[Obsolete("Use ForcePauseWaves instead. PauseWaves breaks wave systems after game update.")]
public static void PauseWaves(List<SpawnableFaction> spawnableFactions)
{
foreach (SpawnableFaction spawnableFaction in spawnableFactions)
Expand Down
Loading