diff --git a/EXILED/Exiled.API/Features/Map.cs b/EXILED/Exiled.API/Features/Map.cs
index b9788edb6..c4feacd0c 100644
--- a/EXILED/Exiled.API/Features/Map.cs
+++ b/EXILED/Exiled.API/Features/Map.cs
@@ -18,10 +18,10 @@ namespace Exiled.API.Features
using Decals;
using Enums;
using Exiled.API.Extensions;
- using Exiled.API.Features.Hazards;
using Exiled.API.Features.Items.Keycards;
using Exiled.API.Features.Pickups;
- using Exiled.API.Features.Toys;
+
+ using Interactables.Interobjects;
using InventorySystem;
using InventorySystem.Items.Pickups;
using InventorySystem.Items.ThrowableProjectiles;
@@ -195,6 +195,96 @@ public static void ShowHint(string message, float duration = 3f)
player.ShowHint(message, duration);
}
+ ///
+ /// Show the Round Summary screen globally for all players.
+ ///
+ /// The statistics at the beginning of the round.
+ /// The statistics to be displayed as the final result.
+ /// The team to be declared as the winner .
+ /// The number of Class-D personnel shown as escaped.
+ /// The number of Scientists shown as escaped.
+ /// The total number of kills by SCPs to be displayed.
+ /// The time in seconds displayed as the next round time.
+ /// The total elapsed duration of the round in seconds.
+ /// true if the RoundSummary singleton was found and the RPC was sent; otherwise, false.
+ public static bool ShowRoundSummary(RoundSummary.SumInfo_ClassList initialStats, RoundSummary.SumInfo_ClassList finalStats, RoundSummary.LeadingTeam leadingTeam, int escapedClassDCount, int escapedScientistCount, int totalScpKills, int nextRoundTime, int totalRoundDuration)
+ {
+ if (!RoundSummary._singletonSet)
+ return false;
+
+ RoundSummary.singleton.RpcShowRoundSummary(initialStats, finalStats, leadingTeam, escapedClassDCount, escapedScientistCount, totalScpKills, nextRoundTime, totalRoundDuration);
+ return true;
+ }
+
+ ///
+ /// Hides the Round Summary screen for all players.
+ ///
+ /// true if the RoundSummary singleton was found and the RPC was sent; otherwise, false.
+ public static bool HideRoundSummary()
+ {
+ if (!RoundSummary._singletonSet)
+ return false;
+
+ RoundSummary.singleton.RpcHideRoundSummary();
+ return true;
+ }
+
+ ///
+ /// Triggers the end-of-round screen dimming effect (fade to black) globally for all players.
+ ///
+ /// true if the RoundSummary singleton is active; otherwise, false.
+ public static bool DimScreens()
+ {
+ if (!RoundSummary._singletonSet)
+ return false;
+
+ RoundSummary.singleton.RpcDimScreen();
+ return true;
+ }
+
+ ///
+ /// Reverses the screen dimming effect, restoring normal visibility globally for all players.
+ ///
+ /// true if the RoundSummary singleton is active; otherwise, false.
+ public static bool UndimScreens()
+ {
+ if (!RoundSummary._singletonSet)
+ return false;
+
+ RoundSummary.singleton.RpcUndimScreen();
+ return true;
+ }
+
+ ///
+ /// Triggers the Alpha Warhead atmospheric effect (orange fog/tint) globally for all players.
+ ///
+ /// If set to true, idk what is this maybe achivement.
+ /// true if the AlphaWarheadController is set; otherwise, false.
+ public static bool WarheadExplosionEffect(bool achieve = false)
+ {
+ if (!AlphaWarheadController.SingletonSet)
+ return false;
+
+ AlphaWarheadController.Singleton.RpcShake(achieve);
+ return true;
+ }
+
+ ///
+ /// Plays the elevator squish sound effect at the specified position for all players.
+ ///
+ /// The world position where the sound will be played.
+ /// true if an ElevatorSquish instance was found; otherwise, false.
+ public static bool PlaySquishSound(Vector3 position)
+ {
+ ElevatorSquish squishInstance = Object.FindFirstObjectByType();
+
+ if (squishInstance == null)
+ return false;
+
+ squishInstance.PlaySquishSound(position);
+ return true;
+ }
+
///
/// Clears all players' broadcasts.
///
diff --git a/EXILED/Exiled.API/Features/Player.cs b/EXILED/Exiled.API/Features/Player.cs
index d8399527b..d91e703c0 100644
--- a/EXILED/Exiled.API/Features/Player.cs
+++ b/EXILED/Exiled.API/Features/Player.cs
@@ -3181,6 +3181,96 @@ public void ShowHint(Hint hint)
ShowHint(hint.Content, hint.Duration);
}
+ ///
+ /// Displays a simulated Round Summary screen to this specific player.
+ ///
+ /// The statistics at the beginning of the round.
+ /// The statistics to be displayed as the final result.
+ /// The team to be declared as the winner .
+ /// The number of Class-D personnel shown as escaped.
+ /// The number of Scientists shown as escaped.
+ /// The total number of kills by SCPs to be displayed.
+ /// The time in seconds displayed as the next round time.
+ /// The total elapsed duration of the round in seconds.
+ /// true if the RoundSummary singleton was found and the RPC was sent; otherwise, false.
+ public bool ShowRoundSummary(RoundSummary.SumInfo_ClassList initialStats, RoundSummary.SumInfo_ClassList finalStats, RoundSummary.LeadingTeam leadingTeam, int escapedClassDCount, int escapedScientistCount, int totalScpKills, int nextRoundTime, int totalRoundDuration)
+ {
+ if (!RoundSummary._singletonSet)
+ return false;
+
+ MirrorExtensions.SendFakeTargetRpc(this, RoundSummary.singleton.netIdentity, typeof(RoundSummary), nameof(RoundSummary.RpcShowRoundSummary), initialStats, finalStats, leadingTeam, escapedClassDCount, escapedScientistCount, totalScpKills, nextRoundTime, totalRoundDuration);
+ return true;
+ }
+
+ ///
+ /// Hides the Round Summary screen for this specific player.
+ ///
+ /// true if the RoundSummary singleton was found and the RPC was sent; otherwise, false.
+ public bool HideRoundSummary()
+ {
+ if (!RoundSummary._singletonSet)
+ return false;
+
+ MirrorExtensions.SendFakeTargetRpc(this, RoundSummary.singleton.netIdentity, typeof(RoundSummary), nameof(RoundSummary.RpcHideRoundSummary));
+ return true;
+ }
+
+ ///
+ /// Simulates the end-of-round screen dimming effect (fade to black) for this player only.
+ ///
+ /// true if the RoundSummary singleton is active and the RPC was sent; otherwise, false.
+ public bool DimScreen()
+ {
+ if (!RoundSummary._singletonSet)
+ return false;
+
+ MirrorExtensions.SendFakeTargetRpc(this, RoundSummary.singleton.netIdentity, typeof(RoundSummary), nameof(RoundSummary.RpcDimScreen));
+ return true;
+ }
+
+ ///
+ /// Reverses the screen dimming effect, restoring normal visibility for this player.
+ ///
+ /// true if the RoundSummary singleton is active and the RPC was sent; otherwise, false.
+ public bool UndimScreen()
+ {
+ if (!RoundSummary._singletonSet)
+ return false;
+
+ MirrorExtensions.SendFakeTargetRpc(this, RoundSummary.singleton.netIdentity, typeof(RoundSummary), nameof(RoundSummary.RpcUndimScreen));
+ return true;
+ }
+
+ ///
+ /// Simulates the Alpha Warhead atmospheric effect (orange fog/tint) for this player.
+ ///
+ /// If set to true, idk what is this maybe achivement.
+ /// true if the AlphaWarheadController is set; otherwise, false.
+ public bool SendWarheadExplosionEffect(bool achieve = false)
+ {
+ if (!AlphaWarheadController.SingletonSet)
+ return false;
+
+ MirrorExtensions.SendFakeTargetRpc(this, AlphaWarheadController.Singleton.netIdentity, typeof(AlphaWarheadController), nameof(AlphaWarheadController.RpcShake), achieve);
+ return true;
+ }
+
+ ///
+ /// Plays the elevator squish sound effect for this player at the specified position.
+ ///
+ /// The world position where the sound will be played.
+ /// true if an ElevatorSquish instance was found; otherwise, false.
+ public bool PlaySquishSound(Vector3 position)
+ {
+ ElevatorSquish squishInstance = UnityEngine.Object.FindFirstObjectByType();
+
+ if (squishInstance == null)
+ return false;
+
+ MirrorExtensions.SendFakeTargetRpc(this, squishInstance.netIdentity, typeof(ElevatorSquish), nameof(ElevatorSquish.PlaySquishSound), position);
+ return true;
+ }
+
///
/// Messages the given to the player.
///