From 5f0b1d40fb62b00fb78edd1300004d921dc340c4 Mon Sep 17 00:00:00 2001 From: Aaro Varis Date: Thu, 6 Mar 2025 18:39:55 +0200 Subject: [PATCH] aaaaaa --- .../Messages/SimpleSyncableEventMessage.cs | 5 +-- BoneSync/Patching/GripPatches.cs | 10 ++++-- BoneSync/Patching/GunPatches.cs | 12 +++---- BoneSync/Patching/PlugPatches.cs | 4 +++ BoneSync/Sync/Components/SyncableBase.cs | 33 ++++++++++++------- BoneSync/Sync/Components/SyncablePhysics.cs | 30 ++++++++++++++--- BoneSync/Sync/Components/SyncablePlugs.cs | 1 + BoneSync/Sync/ObjectSync.cs | 12 ++++--- 8 files changed, 75 insertions(+), 32 deletions(-) diff --git a/BoneSync/Networking/Messages/SimpleSyncableEventMessage.cs b/BoneSync/Networking/Messages/SimpleSyncableEventMessage.cs index 386762f..93f6fbb 100644 --- a/BoneSync/Networking/Messages/SimpleSyncableEventMessage.cs +++ b/BoneSync/Networking/Messages/SimpleSyncableEventMessage.cs @@ -18,6 +18,7 @@ namespace BoneSync.Networking.Messages { public ushort syncId; public SimpleEventType eventType; + public byte index; //public object[] args; } [PacketType(PacketType.SimpleObjectEventSync)] @@ -29,6 +30,7 @@ namespace BoneSync.Networking.Messages eventData = simpleSyncableEvent; byteEncoder.WriteUShort(simpleSyncableEvent.syncId); byteEncoder.WriteByte((byte)simpleSyncableEvent.eventType); + byteEncoder.WriteByte(simpleSyncableEvent.index); } public SimpleSyncableEventMessage(Packet packet) @@ -36,6 +38,7 @@ namespace BoneSync.Networking.Messages byteEncoder.WriteBytes(packet.Data); eventData.syncId = byteEncoder.ReadUShort(); eventData.eventType = (SimpleEventType)byteEncoder.ReadByte(); + eventData.index = byteEncoder.ReadByte(); } public override void Execute() @@ -44,7 +47,5 @@ namespace BoneSync.Networking.Messages if (syncable == null) return; syncable.OnSimpleSyncableEvent(eventData); } - - } } diff --git a/BoneSync/Patching/GripPatches.cs b/BoneSync/Patching/GripPatches.cs index 3d6f23c..bfed632 100644 --- a/BoneSync/Patching/GripPatches.cs +++ b/BoneSync/Patching/GripPatches.cs @@ -27,10 +27,14 @@ namespace BoneSync.Patching MelonLogger.Msg("ForcePullGrip.OnFarHandHoverUpdate: " + __instance.name + " Hand: " + hand.name); - InteractableHost interactableHost = __instance.GetComponentInParent(); - if (interactableHost == null) return; + InteractableHost interactableHost = __instance?.grip?.host; + if (interactableHost == null) + { + MelonLogger.Error("InteractableHost is null for " + __instance.name); + return; + } Syncable syncable = ObjectSync.MakeOrGetSyncable(interactableHost); - + syncable?.RegisterSyncable(); } } diff --git a/BoneSync/Patching/GunPatches.cs b/BoneSync/Patching/GunPatches.cs index 51fd93a..af9e1b4 100644 --- a/BoneSync/Patching/GunPatches.cs +++ b/BoneSync/Patching/GunPatches.cs @@ -17,15 +17,15 @@ namespace BoneSync.Patching public class GunPatches { [HarmonyPatch(nameof(Gun.Fire)), HarmonyPrefix] - public static void FirePatch(Gun __instance) + public static bool FirePatch(Gun __instance) { - if (CallPatchedMethods.allowPatchedMethodCall) return; + if (CallPatchedMethods.allowPatchedMethodCall) return true; MelonLoader.MelonLogger.Msg("Gun fired: " + __instance.name); - if (!BoneSync.lobby.IsConnected()) return; + if (!BoneSync.lobby.IsConnected()) return true; Syncable syncable = ObjectSync.MakeOrGetSyncable(__instance.gameObject); - if (syncable == null) return; - if (!syncable.Registered) return; + if (syncable == null) return true; + if (!syncable.Registered) return true; if (syncable.isOwner) { @@ -42,7 +42,7 @@ namespace BoneSync.Patching gunSyncMessage.Broadcast(); } - return; + return true; } diff --git a/BoneSync/Patching/PlugPatches.cs b/BoneSync/Patching/PlugPatches.cs index 9657708..5e7c662 100644 --- a/BoneSync/Patching/PlugPatches.cs +++ b/BoneSync/Patching/PlugPatches.cs @@ -29,6 +29,8 @@ namespace BoneSync.Patching return; } + plugSyncable.FindAndUpdateComponents(); + if (!plugSyncable.Registered) { MelonLogger.Warning("PlugSyncable not registered"); @@ -40,6 +42,8 @@ namespace BoneSync.Patching MelonLogger.Warning("SocketSyncable not found"); } + plugSyncable.FindAndUpdateComponents(); + if (socketSyncable && socketSyncable.isOwner && !plugSyncable.isOwner) { plugSyncable.TryBecomeOwner(true); // forcefully take ownership of the plug diff --git a/BoneSync/Sync/Components/SyncableBase.cs b/BoneSync/Sync/Components/SyncableBase.cs index 2db12b1..d91b82e 100644 --- a/BoneSync/Sync/Components/SyncableBase.cs +++ b/BoneSync/Sync/Components/SyncableBase.cs @@ -145,10 +145,7 @@ namespace BoneSync.Sync.Components public bool CheckIfShouldAutoSync() { - if (transform.GetPath().StartsWith("/Pool Manager/")) - { - return false; - } + if (InPoolManagerTransform()) return false; if (poolee && poolee.pool) { return true; } @@ -197,10 +194,21 @@ namespace BoneSync.Sync.Components _attemptedRegister = false; SetKinematic(false); } + + private bool InPoolManagerTransform() + { + if (transform.GetPath().StartsWith("/Pool Manager/")) + { + return true; + } + return false; + } public bool CanBeSynced() { + if (spawnFragment) return false; // if has spawn fragment, don't sync - FindAndUpdateComponents(); + FindAndUpdateComponents(); + if (InPoolManagerTransform()) return false; if (rigidbodies.Length > 0) return true; return false; @@ -241,12 +249,6 @@ namespace BoneSync.Sync.Components MelonLogger.Msg("Discarding syncable: " + transform.GetPath() + " force:" + force + " registered:" + isRegistered + " despawn:" + despawn + " isPlugged:" + isPlugged + " canDiscard:" + canDiscard); //MelonLogger.Warning("Discarding registered syncable: " + transform.GetPath() + " force: " + force); - if (isPlugged) - { - MelonLogger.Warning("Trying to discard plugged syncable: " + transform.GetPath()); - } - - if (canDiscard) { _SendDiscard(true); // owner sends discard message @@ -255,7 +257,14 @@ namespace BoneSync.Sync.Components if (!canDiscard && !force) return; } - EjectAllPlugs(true); + try + { + EjectAllPlugs(true); + } + catch { + MelonLogger.Warning("Failed to eject plugs (should be fine)"); + } + if (gameObject) syncablesCache.Remove(gameObject); diff --git a/BoneSync/Sync/Components/SyncablePhysics.cs b/BoneSync/Sync/Components/SyncablePhysics.cs index 62d5dc4..838a851 100644 --- a/BoneSync/Sync/Components/SyncablePhysics.cs +++ b/BoneSync/Sync/Components/SyncablePhysics.cs @@ -52,9 +52,9 @@ namespace BoneSync.Sync.Components } return true; } - private void SetKinematic(bool kinematic) + + private void _SetKinematic(bool kinematic) { - if (!this) return; if (rigidbodies.Length == 0) return; foreach (Rigidbody rb in rigidbodies) { @@ -65,6 +65,17 @@ namespace BoneSync.Sync.Components catch { } // ignore null rigidbodies } } + private void SetKinematic(bool kinematic) + { + if (!this) return; + try + { + _SetKinematic(kinematic); + } + catch { + MelonLogger.Warning("Failed to set kinematic"); + } + } public ObjectSyncTransform[] GetObjectSyncTransforms() { @@ -99,7 +110,18 @@ namespace BoneSync.Sync.Components } } - private Rigidbody[] UpdateRigidbodyList() + private Syncable GetRigidbodySyncable(Rigidbody rigidbody) + { + if (rigidbody == null) return null; + return rigidbody.GetComponentInParent(); + } + + private bool RigidbodyBelongsToSyncable(Rigidbody rigidbody) + { + return GetRigidbodySyncable(rigidbody) == this; + } + + private Rigidbody[] GetRigidbodies() { if (interactableManager) { @@ -120,7 +142,7 @@ namespace BoneSync.Sync.Components private void UpdateTransformList() { // get non-null rigidbodies - Rigidbody[] rbs = UpdateRigidbodyList().Where(rb => rb != null).ToArray(); + Rigidbody[] rbs = GetRigidbodies().Where(rb => rb != null && RigidbodyBelongsToSyncable(rb)).ToArray(); rigidbodies = rbs; _transforms = rbs.Select(rb => rb.transform).ToArray(); } diff --git a/BoneSync/Sync/Components/SyncablePlugs.cs b/BoneSync/Sync/Components/SyncablePlugs.cs index 9a9ca20..aeb4257 100644 --- a/BoneSync/Sync/Components/SyncablePlugs.cs +++ b/BoneSync/Sync/Components/SyncablePlugs.cs @@ -57,6 +57,7 @@ namespace BoneSync.Sync.Components { foreach (AlignPlug plug in plugs) { + if (plug == null) continue; if (plug.GetSocket()) { if (force) diff --git a/BoneSync/Sync/ObjectSync.cs b/BoneSync/Sync/ObjectSync.cs index 6c7d3c4..7019960 100644 --- a/BoneSync/Sync/ObjectSync.cs +++ b/BoneSync/Sync/ObjectSync.cs @@ -122,13 +122,15 @@ namespace BoneSync.Sync // delete all sub syncables if (deleteSubSyncabled) { - Syncable[] subSyncables = gameObject.GetComponentsInChildren(); + Syncable[] subSyncables = gameObject.GetComponentsInChildren(true); for (int i = 0; i < subSyncables.Length; i++) { - if (subSyncables[i] != syncable) - { - subSyncables[i].DiscardSyncable(); - } + Syncable subSyncable = subSyncables[i]; + if (subSyncable == syncable) continue; + bool isRegistered = subSyncable.Registered; + MelonLogger.Msg("Discarding subSyncable: " + subSyncable.transform.GetPath() + " registered:" + isRegistered); + if (isRegistered) continue; + subSyncable.DiscardSyncableImmediate(true, false); } }