From f5f473c0596322f804b1c295a48284b1820c528c Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Fri, 17 Dec 2021 22:19:23 -0800 Subject: [PATCH] ignore cancel drag and slot collision if we dont have authority --- QSB/OrbSync/Patches/OrbPatches.cs | 69 ++++++++++++++++--------------- QSB/QSBNetworkManager.cs | 20 ++++----- 2 files changed, 45 insertions(+), 44 deletions(-) diff --git a/QSB/OrbSync/Patches/OrbPatches.cs b/QSB/OrbSync/Patches/OrbPatches.cs index ff1bee8c..56171505 100644 --- a/QSB/OrbSync/Patches/OrbPatches.cs +++ b/QSB/OrbSync/Patches/OrbPatches.cs @@ -16,11 +16,11 @@ namespace QSB.OrbSync.Patches [HarmonyPatch(nameof(NomaiInterfaceOrb.StartDragFromPosition))] public static void StartDragFromPosition(NomaiInterfaceOrb __instance) { - if (!__instance._isBeingDragged) + if (!WorldObjectManager.AllObjectsReady) { return; } - if (!WorldObjectManager.AllObjectsReady) + if (!__instance._isBeingDragged) { return; } @@ -30,46 +30,23 @@ namespace QSB.OrbSync.Patches [HarmonyPrefix] [HarmonyPatch(nameof(NomaiInterfaceOrb.CancelDrag))] - public static void CancelDrag(NomaiInterfaceOrb __instance) + public static bool CancelDrag(NomaiInterfaceOrb __instance) { - if (!__instance._isBeingDragged) - { - return; - } if (!WorldObjectManager.AllObjectsReady) { - return; + return true; + } + if (!__instance._isBeingDragged) + { + return false; } var qsbOrb = QSBWorldSync.GetWorldFromUnity(__instance); if (!qsbOrb.TransformSync.HasAuthority) { - return; + return false; } QSBEventManager.FireEvent(EventNames.QSBOrbDrag, qsbOrb, false); - } - - [HarmonyPrefix] - [HarmonyPatch(nameof(NomaiInterfaceOrb.MoveTowardPosition))] - public static bool MoveTowardPosition(NomaiInterfaceOrb __instance) - { - if (!WorldObjectManager.AllObjectsReady) - { - return true; - } - var qsbOrb = QSBWorldSync.GetWorldFromUnity(__instance); - if (qsbOrb.TransformSync.HasAuthority) - { - return true; - } - - var pointVelocity = __instance._parentBody.GetPointVelocity(__instance._orbBody.GetPosition()); - __instance._orbBody.SetVelocity(pointVelocity); - if (!__instance._applyForcesWhileMoving) - { - __instance._forceApplier.SetApplyForces(false); - } - - return false; + return true; } [HarmonyPrefix] @@ -83,7 +60,7 @@ namespace QSB.OrbSync.Patches var qsbOrb = QSBWorldSync.GetWorldFromUnity(__instance); if (!qsbOrb.TransformSync.HasAuthority) { - return true; + return false; } if (__instance._occupiedSlot == null) @@ -117,5 +94,29 @@ namespace QSB.OrbSync.Patches return false; } + + [HarmonyPrefix] + [HarmonyPatch(nameof(NomaiInterfaceOrb.MoveTowardPosition))] + public static bool MoveTowardPosition(NomaiInterfaceOrb __instance) + { + if (!WorldObjectManager.AllObjectsReady) + { + return true; + } + var qsbOrb = QSBWorldSync.GetWorldFromUnity(__instance); + if (qsbOrb.TransformSync.HasAuthority) + { + return true; + } + + var pointVelocity = __instance._parentBody.GetPointVelocity(__instance._orbBody.GetPosition()); + __instance._orbBody.SetVelocity(pointVelocity); + if (!__instance._applyForcesWhileMoving) + { + __instance._forceApplier.SetApplyForces(false); + } + + return false; + } } } diff --git a/QSB/QSBNetworkManager.cs b/QSB/QSBNetworkManager.cs index 016cc820..58b22ae7 100644 --- a/QSB/QSBNetworkManager.cs +++ b/QSB/QSBNetworkManager.cs @@ -233,6 +233,16 @@ namespace QSB { DebugLog.DebugWrite("OnServerDisconnect", MessageType.Info); + // revert authority from ship + if (ShipTransformSync.LocalInstance) + { + var identity = ShipTransformSync.LocalInstance.NetIdentity; + if (identity.ClientAuthorityOwner == conn) + { + identity.SetAuthority(QSBPlayerManager.LocalPlayerId); + } + } + // stop dragging for the orbs this player was dragging foreach (var qsbOrb in QSBWorldSync.GetWorldObjects()) { @@ -249,16 +259,6 @@ namespace QSB } } - // revert authority from ship - if (ShipTransformSync.LocalInstance) - { - var identity = ShipTransformSync.LocalInstance.NetIdentity; - if (identity.ClientAuthorityOwner == conn) - { - identity.SetAuthority(QSBPlayerManager.LocalPlayerId); - } - } - AuthorityManager.OnDisconnect(conn.GetPlayerId()); base.OnServerDisconnect(conn);