Beispiel #1
0
        private void MovementEvent(SyncingDataEventArgs ev)
        {
            if (!IsSetup())
            {
                return;
            }
            if (ev.Player.UserId != BuilderPlayer.UserId)
            {
                return;
            }

            if (ev.Player.Inventory.curItem != ItemType.KeycardO5)
            {
                return;                                                    //Not O5, The Editor
            }
            if (TargetObject == null)
            {
                return;
            }

            ev.Player.Position = ev.Player.ReferenceHub.playerMovementSync.LastSafePosition;
            var oldVec = ev.Player.ReferenceHub.playerMovementSync.PlayerVelocity.Copy();

            ev.Player.ReferenceHub.playerMovementSync.PlayerVelocity = Vector3.zero;

            _syncThrottle++;
            if (_syncThrottle < 10)
            {
                return;
            }
            _syncThrottle = 0;


            var velo = oldVec.ClampToOne(3f);

            switch (ev.Player.MoveState)
            {
            case PlayerMovementState.Sneaking: {
                TargetObject.transform.rotation = Quaternion.Euler((velo * _mult) + TargetObject.transform.rotation.eulerAngles);
            } break;

            case PlayerMovementState.Walking: {
                TargetObject.transform.position += velo * _mult;
            } break;

            case PlayerMovementState.Sprinting: {
                TargetObject.transform.localScale += velo * _mult;
            } break;
            }

            Hint($"{TargetObject.name}\nPos: {TargetObject.transform.position}\nRot: {TargetObject.transform.rotation.eulerAngles}\nScl:{TargetObject.transform.localScale}\nVelo: {ev.Player.ReferenceHub.playerMovementSync.PlayerVelocity}\n{ev.Player.ReferenceHub.playerMovementSync.PlayerVelocity.ClampToOne(3f)}");

            if (velo.AnyNonZero())
            {
                TargetObject.NotifyPlayers();
            }
        }
Beispiel #2
0
        private static bool Prefix(AnimationController __instance, byte state, Vector2 v2)
        {
            if (!__instance._mSyncRateLimit.CanExecute(false))
            {
                return(false);
            }

            var ev = new SyncingDataEventArgs(API.Features.Player.Get(__instance.gameObject), v2, state);

            Player.OnSyncingData(ev);

            return(ev.IsAllowed);
        }
Beispiel #3
0
        private static bool Prefix(AnimationController __instance, byte state, Vector2 v2)
        {
            try
            {
                if (!__instance._mSyncRateLimit.CanExecute(false))
                {
                    return(false);
                }

                var ev = new SyncingDataEventArgs(API.Features.Player.Get(__instance.gameObject), v2, state);

                Player.OnSyncingData(ev);

                return(ev.IsAllowed);
            }
            catch (Exception e)
            {
                Exiled.API.Features.Log.Error($"Exiled.Events.Patches.Events.Player.SyncingData: {e}\n{e.StackTrace}");

                return(true);
            }
        }
Beispiel #4
0
 /// <summary>
 /// Invoked before syncing player's data.
 /// </summary>
 /// <param name="ev">The <see cref="SyncingDataEventArgs"/> instance.</param>
 public static void OnSyncingData(SyncingDataEventArgs ev) => SyncingData.InvokeSafely(ev);