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. ///