From 72a6bbed22144bfe3b1c6c70c77e2babbb941ca6 Mon Sep 17 00:00:00 2001 From: Mister_Nebula <41904486+misternebula@users.noreply.github.com> Date: Fri, 26 Feb 2021 14:19:42 +0000 Subject: [PATCH] add entangle lock patch --- QSB/QSB.csproj | 1 + QSB/QuantumSync/Patches/QuantumPatches.cs | 9 +++++++++ QSB/QuantumSync/QuantumManager.cs | 5 +++++ QSB/QuantumSync/WorldObjects/QSBQuantumMoon.cs | 12 ++++++++++++ 4 files changed, 27 insertions(+) create mode 100644 QSB/QuantumSync/WorldObjects/QSBQuantumMoon.cs diff --git a/QSB/QSB.csproj b/QSB/QSB.csproj index 1f51dc31..6b20588d 100644 --- a/QSB/QSB.csproj +++ b/QSB/QSB.csproj @@ -170,6 +170,7 @@ + diff --git a/QSB/QuantumSync/Patches/QuantumPatches.cs b/QSB/QuantumSync/Patches/QuantumPatches.cs index 374ac1df..b48d2753 100644 --- a/QSB/QuantumSync/Patches/QuantumPatches.cs +++ b/QSB/QuantumSync/Patches/QuantumPatches.cs @@ -29,6 +29,7 @@ namespace QSB.QuantumSync.Patches QSBCore.Helper.HarmonyHelper.AddPrefix("OnEntry", typeof(QuantumPatches), nameof(Shrine_OnEntry)); QSBCore.Helper.HarmonyHelper.AddPrefix("OnExit", typeof(QuantumPatches), nameof(Shrine_OnExit)); QSBCore.Helper.HarmonyHelper.AddPrefix("CheckPlayerFogProximity", typeof(QuantumPatches), nameof(Moon_CheckPlayerFogProximity)); + QSBCore.Helper.HarmonyHelper.AddPrefix("IsLockedByPlayerContact", typeof(QuantumPatches), nameof(Object_IsLockedByPlayerContact)); } public override void DoUnpatches() @@ -43,6 +44,14 @@ namespace QSB.QuantumSync.Patches QSBCore.Helper.HarmonyHelper.Unpatch("OnEntry"); QSBCore.Helper.HarmonyHelper.Unpatch("OnExit"); QSBCore.Helper.HarmonyHelper.Unpatch("CheckPlayerFogProximity"); + QSBCore.Helper.HarmonyHelper.Unpatch("IsLockedByPlayerContact"); + } + + public static bool Object_IsLockedByPlayerContact(ref bool __result, QuantumObject __instance) + { + var playersEntangled = QuantumManager.GetEntangledPlayers(__instance); + __result = playersEntangled.Count() != 0 && __instance.IsIlluminated(); + return false; } public static bool Socketed_ChangeQuantumState( diff --git a/QSB/QuantumSync/QuantumManager.cs b/QSB/QuantumSync/QuantumManager.cs index a6c1e70c..c1dbf5d4 100644 --- a/QSB/QuantumSync/QuantumManager.cs +++ b/QSB/QuantumSync/QuantumManager.cs @@ -32,6 +32,7 @@ namespace QSB.QuantumSync QSBWorldSync.Init(); QSBWorldSync.Init(); QSBWorldSync.Init(); + QSBWorldSync.Init(); if (scene == OWScene.SolarSystem) { Shrine = Resources.FindObjectsOfTypeAll().First(); @@ -105,6 +106,10 @@ namespace QSB.QuantumSync { worldObj = QSBWorldSync.GetWorldObject((QuantumShuffleObject)unityObject); } + else if (unityObject.GetType() == typeof(QuantumMoon)) + { + worldObj = QSBWorldSync.GetWorldObject((QuantumMoon)unityObject); + } else { DebugLog.ToConsole($"Warning - couldn't work out type of QuantumObject {unityObject.name}.", MessageType.Warning); diff --git a/QSB/QuantumSync/WorldObjects/QSBQuantumMoon.cs b/QSB/QuantumSync/WorldObjects/QSBQuantumMoon.cs new file mode 100644 index 00000000..74ec448d --- /dev/null +++ b/QSB/QuantumSync/WorldObjects/QSBQuantumMoon.cs @@ -0,0 +1,12 @@ +namespace QSB.QuantumSync.WorldObjects +{ + class QSBQuantumMoon : QSBQuantumObject + { + public override void Init(QuantumMoon moonObject, int id) + { + ObjectId = id; + AttachedObject = moonObject; + ControllingPlayer = 1u; + } + } +}