Mag sync epicly working
This commit is contained in:
@@ -14,7 +14,6 @@ using static MelonLoader.MelonLogger;
|
|||||||
namespace BoneSync.Patching
|
namespace BoneSync.Patching
|
||||||
{
|
{
|
||||||
|
|
||||||
[HarmonyPatch(typeof(AlignPlug))]
|
|
||||||
public static class AlignPlugPatches
|
public static class AlignPlugPatches
|
||||||
{
|
{
|
||||||
public static void OnPlugSocketChange(AlignPlug plug, Socket socket)
|
public static void OnPlugSocketChange(AlignPlug plug, Socket socket)
|
||||||
@@ -40,19 +39,22 @@ namespace BoneSync.Patching
|
|||||||
if (!socketSyncable)
|
if (!socketSyncable)
|
||||||
{
|
{
|
||||||
MelonLogger.Warning("SocketSyncable not found");
|
MelonLogger.Warning("SocketSyncable not found");
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
socketSyncable.FindAndUpdateComponents();
|
||||||
}
|
}
|
||||||
|
|
||||||
plugSyncable.FindAndUpdateComponents();
|
|
||||||
|
|
||||||
if (socketSyncable && socketSyncable.isOwner && !plugSyncable.isOwner)
|
if (socketSyncable != null && socketSyncable.isOwner && !plugSyncable.isOwner)
|
||||||
{
|
{
|
||||||
plugSyncable.TryBecomeOwner(true); // forcefully take ownership of the plug
|
plugSyncable.TryBecomeOwner(true); // forcefully take ownership of the plug
|
||||||
}
|
}
|
||||||
|
|
||||||
byte plugId = plugSyncable.GetPlugId(plug);
|
byte plugId = plugSyncable.GetPlugId(plug);
|
||||||
byte socketId = socketSyncable ? socketSyncable.GetSocketId(socket) : byte.MaxValue;
|
byte socketId = socketSyncable != null ? socketSyncable.GetSocketId(socket) : byte.MaxValue;
|
||||||
|
|
||||||
MelonLogger.Msg("AlignPlug state: " + plug.transform.GetPath() + " Socket: " + socket.transform.GetPath() + " Plug ID: " + plugId + " Socket ID: " + socketId);
|
MelonLogger.Msg("AlignPlug state:" + plug.transform.GetPath() + " Socket:" + socket?.transform?.GetPath() + " PlugID:" + plugId + " SocketID:" + socketId);
|
||||||
|
|
||||||
if (!plugSyncable.isOwner) return;
|
if (!plugSyncable.isOwner) return;
|
||||||
|
|
||||||
@@ -60,7 +62,7 @@ namespace BoneSync.Patching
|
|||||||
{
|
{
|
||||||
plugSyncId = plugSyncable.GetSyncId(),
|
plugSyncId = plugSyncable.GetSyncId(),
|
||||||
plugIndex = plugId,
|
plugIndex = plugId,
|
||||||
socketSyncId = socketSyncable ? socketSyncable.GetSyncId() : ushort.MinValue,
|
socketSyncId = socketSyncable != null ? socketSyncable.GetSyncId() : ushort.MinValue,
|
||||||
socketIndex = socketId
|
socketIndex = socketId
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -41,8 +41,20 @@ namespace BoneSync.Sync.Components
|
|||||||
public static bool SafeInsert(this AlignPlug plug, Socket socket)
|
public static bool SafeInsert(this AlignPlug plug, Socket socket)
|
||||||
{
|
{
|
||||||
if (!socket) return false;
|
if (!socket) return false;
|
||||||
if (socket.LockedPlug) return false;
|
Plug lockedPlug = socket.LockedPlug;
|
||||||
if (plug.GetSocket() && plug._lastSocket != socket)
|
if (lockedPlug && lockedPlug != plug)
|
||||||
|
{
|
||||||
|
AlignPlug alignPlug = lockedPlug.GetComponent<AlignPlug>();
|
||||||
|
if (alignPlug)
|
||||||
|
{
|
||||||
|
alignPlug.ForceEject();
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (plug.GetSocket() != socket)
|
||||||
{
|
{
|
||||||
plug.ForceEject();
|
plug.ForceEject();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -128,8 +128,10 @@ namespace BoneSync.Sync
|
|||||||
Syncable subSyncable = subSyncables[i];
|
Syncable subSyncable = subSyncables[i];
|
||||||
if (subSyncable == syncable) continue;
|
if (subSyncable == syncable) continue;
|
||||||
bool isRegistered = subSyncable.Registered;
|
bool isRegistered = subSyncable.Registered;
|
||||||
MelonLogger.Msg("Discarding subSyncable: " + subSyncable.transform.GetPath() + " registered:" + isRegistered);
|
bool isPlugged = subSyncable.IsPlugged();
|
||||||
if (isRegistered) continue;
|
|
||||||
|
MelonLogger.Msg("Discarding subSyncable: " + subSyncable.transform.GetPath() + " registered:" + isRegistered + " plugged:" + isPlugged);
|
||||||
|
if (isRegistered || isPlugged) continue;
|
||||||
subSyncable.DiscardSyncableImmediate(true, false);
|
subSyncable.DiscardSyncableImmediate(true, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user