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(); } }
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); }
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); } }
/// <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);