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;
+ }
+ }
+}