@@ -693,8 +693,8 @@ public ScpSpawnPreferences.SpawnPreferences ScpPreferences
693693 /// </summary>
694694 public Vector3 Scale
695695 {
696- get => ReferenceHub . transform . localScale ;
697- set => SetScale ( value , List ) ;
696+ get => Role is FpcRole fpcRole ? fpcRole . FirstPersonController . FpcModule . Motor . ScaleController . Scale : Vector3 . one ;
697+ set => SetScale ( value ) ;
698698 }
699699
700700 /// <summary>
@@ -2064,18 +2064,52 @@ public void Disconnect(string reason = null) =>
20642064 /// Sets the scale of a player on the server side.
20652065 /// </summary>
20662066 /// <param name="scale">The scale to set.</param>
2067- /// <param name="viewers">Who should see the updated scale.</param>
2068- public void SetScale ( Vector3 scale , IEnumerable < Player > viewers )
2067+ public void SetScale ( Vector3 scale )
20692068 {
2070- if ( scale == Scale )
2071- return ;
2069+ try
2070+ {
2071+ if ( Role is not FpcRole fpcRole )
2072+ {
2073+ Log . Error ( $ "{ nameof ( SetScale ) } error: { nameof ( Role ) } { Role } is not a { nameof ( FpcRole ) } , cannot set scale.") ;
2074+ return ;
2075+ }
20722076
2077+ fpcRole . FirstPersonController . FpcModule . Motor . ScaleController . Scale = scale ;
2078+ }
2079+ catch ( Exception exception )
2080+ {
2081+ Log . Error ( $ "{ nameof ( SetScale ) } error: { exception } ") ;
2082+ }
2083+ }
2084+
2085+ /// <summary>
2086+ /// Sets the scale of a player on the server side.
2087+ /// </summary>
2088+ /// <param name="scale">The scale to set.</param>
2089+ /// <param name="viewers">Who should see the updated scale.</param>
2090+ public void SetScale ( Vector3 scale , IEnumerable < Player > viewers ) => SetScale ( scale , viewers . Select ( p => p . ReferenceHub ) ) ;
2091+
2092+ /// <summary>
2093+ /// Sets the scale of a player on the server side.
2094+ /// </summary>
2095+ /// <param name="scale">The scale to set.</param>
2096+ /// <param name="viewers">Who should see the updated scale.</param>
2097+ public void SetScale ( Vector3 scale , IEnumerable < ReferenceHub > viewers )
2098+ {
20732099 try
20742100 {
2075- ReferenceHub . transform . localScale = scale ;
2101+ if ( Role is not FpcRole fpcRole )
2102+ {
2103+ Log . Error ( $ "{ nameof ( SetScale ) } error: { nameof ( Role ) } { Role } is not a { nameof ( FpcRole ) } , cannot set scale.") ;
2104+ return ;
2105+ }
2106+
2107+ if ( fpcRole . FirstPersonController . FpcModule . Motor . ScaleController . Scale == scale )
2108+ return ;
20762109
2077- foreach ( Player target in viewers )
2078- Server . SendSpawnMessage ? . Invoke ( null , new object [ ] { NetworkIdentity , target . Connection } ) ;
2110+ fpcRole . FirstPersonController . FpcModule . Motor . ScaleController . _scale = scale ;
2111+ ReferenceHub . transform . localScale = scale ;
2112+ new SyncedScaleMessages . ScaleMessage ( scale , ReferenceHub ) . SendToHubsConditionally ( h => viewers . Contains ( h ) ) ;
20792113 }
20802114 catch ( Exception exception )
20812115 {
@@ -2088,22 +2122,28 @@ public void SetScale(Vector3 scale, IEnumerable<Player> viewers)
20882122 /// </summary>
20892123 /// <param name="fakeScale">The scale to set to.</param>
20902124 /// <param name="viewers">Who should see the fake scale.</param>
2091- public void SetFakeScale ( Vector3 fakeScale , IEnumerable < Player > viewers )
2092- {
2093- Vector3 currentScale = Scale ;
2125+ public void SetFakeScale ( Vector3 fakeScale , IEnumerable < Player > viewers ) => SetFakeScale ( fakeScale , viewers . Select ( p => p . ReferenceHub ) ) ;
20942126
2127+ /// <summary>
2128+ /// Sets the scale of the player for other players.
2129+ /// </summary>
2130+ /// <param name="fakeScale">The scale to set to.</param>
2131+ /// <param name="viewers">Who should see the fake scale.</param>
2132+ public void SetFakeScale ( Vector3 fakeScale , IEnumerable < ReferenceHub > viewers )
2133+ {
20952134 try
20962135 {
2097- ReferenceHub . transform . localScale = fakeScale ;
2098-
2099- foreach ( Player target in viewers )
2100- Server . SendSpawnMessage . Invoke ( null , new object [ ] { NetworkIdentity , target . Connection } ) ;
2136+ if ( Role is not FpcRole fpcRole )
2137+ {
2138+ Log . Error ( $ "{ nameof ( SetFakeScale ) } error: { nameof ( Role ) } { Role } is not a { nameof ( FpcRole ) } , cannot set fake scale.") ;
2139+ return ;
2140+ }
21012141
2102- ReferenceHub . transform . localScale = currentScale ;
2142+ new SyncedScaleMessages . ScaleMessage ( fakeScale , ReferenceHub ) . SendToHubsConditionally ( h => viewers . Contains ( h ) ) ;
21032143 }
2104- catch ( Exception ex )
2144+ catch ( Exception exception )
21052145 {
2106- Log . Error ( $ "{ nameof ( SetFakeScale ) } : { ex } ") ;
2146+ Log . Error ( $ "{ nameof ( SetFakeScale ) } error : { exception } ") ;
21072147 }
21082148 }
21092149
0 commit comments