diff --git a/EXILED/Exiled.API/Features/Player.cs b/EXILED/Exiled.API/Features/Player.cs
index 6c6c88702..a243b7f95 100644
--- a/EXILED/Exiled.API/Features/Player.cs
+++ b/EXILED/Exiled.API/Features/Player.cs
@@ -715,23 +715,7 @@ public ScpSpawnPreferences.SpawnPreferences ScpPreferences
public Vector3 Scale
{
get => ReferenceHub.transform.localScale;
- set
- {
- if (value == Scale)
- return;
-
- try
- {
- ReferenceHub.transform.localScale = value;
-
- foreach (Player target in List)
- Server.SendSpawnMessage?.Invoke(null, new object[] { NetworkIdentity, target.Connection });
- }
- catch (Exception exception)
- {
- Log.Error($"{nameof(Scale)} error: {exception}");
- }
- }
+ set => SetScale(value, List);
}
///
@@ -2070,6 +2054,56 @@ public void Disconnect(string reason = null) =>
///
public void ResetStamina() => Stamina = StaminaStat.MaxValue;
+ ///
+ /// Sets the scale of a player on the server side.
+ ///
+ /// The scale to set.
+ /// Who should see the updated scale.
+ public void SetScale(Vector3 scale, IEnumerable viewers)
+ {
+ if (scale == Scale)
+ return;
+
+ try
+ {
+ ReferenceHub.transform.localScale = scale;
+
+ foreach (Player target in viewers)
+ Server.SendSpawnMessage?.Invoke(null, new object[] { NetworkIdentity, target.Connection });
+ }
+ catch (Exception exception)
+ {
+ Log.Error($"{nameof(SetScale)} error: {exception}");
+ }
+ }
+
+ ///
+ /// Sets the scale of the player for other players.
+ ///
+ /// The scale to set to.
+ /// Who should see the fake scale.
+ public void SetFakeScale(Vector3 fakeScale, IEnumerable viewers)
+ {
+ Vector3 currentScale = Scale;
+
+ if (fakeScale == currentScale)
+ return;
+
+ try
+ {
+ ReferenceHub.transform.localScale = fakeScale;
+
+ foreach (Player target in viewers)
+ Server.SendSpawnMessage.Invoke(null, new object[] { NetworkIdentity, target.Connection });
+
+ ReferenceHub.transform.localScale = currentScale;
+ }
+ catch (Exception ex)
+ {
+ Log.Error($"{nameof(SetFakeScale)}: {ex}");
+ }
+ }
+
///
/// Gets a user's SCP preference.
///