Merge branch 'dev' into nh-stuff

This commit is contained in:
JohnCorby 2022-08-29 16:11:21 -07:00
commit 9ac5c41f70
29 changed files with 52 additions and 83 deletions

View File

@ -13,5 +13,5 @@ jobs:
- uses: actions/upload-artifact@v2
with:
name: QSB
name: Raicuparta.QuantumSpaceBuddies
path: .\QSB\Bin\Debug

View File

@ -1,6 +1,5 @@
using QSB.EchoesOfTheEye.DreamCandles.WorldObjects;
using QSB.Messaging;
using QSB.Patches;
namespace QSB.EchoesOfTheEye.DreamCandles.Messages;
@ -11,5 +10,5 @@ public class SetLitMessage : QSBWorldObjectMessage<QSBDreamCandle,
base((lit, playAudio, instant)) { }
public override void OnReceiveRemote() =>
QSBPatch.RemoteCall(() => WorldObject.AttachedObject.SetLit(Data.Lit, Data.PlayAudio, Data.Instant));
WorldObject.AttachedObject.SetLit(Data.Lit, Data.PlayAudio, Data.Instant);
}

View File

@ -1,6 +1,5 @@
using QSB.EchoesOfTheEye.DreamLantern.WorldObjects;
using QSB.Messaging;
using QSB.Patches;
namespace QSB.EchoesOfTheEye.DreamLantern.Messages;
@ -9,5 +8,5 @@ internal class SetConcealedMessage : QSBWorldObjectMessage<QSBDreamLantern, bool
public SetConcealedMessage(bool concealed) : base(concealed) { }
public override void OnReceiveRemote()
=> QSBPatch.RemoteCall(() => WorldObject.AttachedObject.SetConcealed(Data));
=> WorldObject.AttachedObject.SetConcealed(Data);
}

View File

@ -1,6 +1,5 @@
using QSB.EchoesOfTheEye.DreamLantern.WorldObjects;
using QSB.Messaging;
using QSB.Patches;
namespace QSB.EchoesOfTheEye.DreamLantern.Messages;
@ -9,5 +8,5 @@ internal class SetFocusMessage : QSBWorldObjectMessage<QSBDreamLantern, float>
public SetFocusMessage(float focus) : base(focus) { }
public override void OnReceiveRemote()
=> QSBPatch.RemoteCall(() => WorldObject.AttachedObject.SetFocus(Data));
=> WorldObject.AttachedObject.SetFocus(Data);
}

View File

@ -1,6 +1,5 @@
using QSB.EchoesOfTheEye.DreamLantern.WorldObjects;
using QSB.Messaging;
using QSB.Patches;
namespace QSB.EchoesOfTheEye.DreamLantern.Messages;
@ -9,5 +8,5 @@ internal class SetLitMessage : QSBWorldObjectMessage<QSBDreamLantern, bool>
public SetLitMessage(bool lit) : base(lit) { }
public override void OnReceiveRemote()
=> QSBPatch.RemoteCall(() => WorldObject.AttachedObject.SetLit(Data));
=> WorldObject.AttachedObject.SetLit(Data);
}

View File

@ -1,6 +1,5 @@
using QSB.EchoesOfTheEye.DreamLantern.WorldObjects;
using QSB.Messaging;
using QSB.Patches;
namespace QSB.EchoesOfTheEye.DreamLantern.Messages;
@ -9,5 +8,5 @@ internal class SetRangeMessage : QSBWorldObjectMessage<QSBDreamLantern, (float m
public SetRangeMessage(float minRange, float maxRange) : base((minRange, maxRange)) { }
public override void OnReceiveRemote()
=> QSBPatch.RemoteCall(() => WorldObject.AttachedObject.SetRange(Data.minRange, Data.maxRange));
=> WorldObject.AttachedObject.SetRange(Data.minRange, Data.maxRange);
}

View File

@ -126,6 +126,8 @@ internal class DreamLanternPatches : QSBPatch
}
// BUG: this breaks focus petals and concealer covers, since those act on the world model
/*
[HarmonyPrefix]
[HarmonyPatch(typeof(DreamLanternController), nameof(DreamLanternController.UpdateVisuals))]
public static bool UpdateVisuals(DreamLanternController __instance)
@ -219,4 +221,5 @@ internal class DreamLanternPatches : QSBPatch
__instance.ClearDirtyFlags();
return false;
}
*/
}

View File

@ -1,6 +1,5 @@
using QSB.EchoesOfTheEye.DreamObjectProjectors.WorldObject;
using QSB.Messaging;
using QSB.Patches;
namespace QSB.EchoesOfTheEye.DreamObjectProjectors.Messages;
@ -8,6 +7,5 @@ internal class ProjectorLitMessage : QSBWorldObjectMessage<QSBDreamObjectProject
{
public ProjectorLitMessage(bool lit) : base(lit) { }
public override void OnReceiveRemote()
=> QSBPatch.RemoteCall(() => WorldObject.AttachedObject.SetLit(Data));
public override void OnReceiveRemote() => WorldObject.AttachedObject.SetLit(Data);
}

View File

@ -1,6 +1,5 @@
using QSB.EchoesOfTheEye.DreamObjectProjectors.WorldObject;
using QSB.Messaging;
using QSB.Patches;
namespace QSB.EchoesOfTheEye.DreamRafts.Messages;
@ -9,6 +8,6 @@ public class RespawnRaftMessage : QSBWorldObjectMessage<QSBDreamObjectProjector>
public override void OnReceiveRemote()
{
var attachedObject = (DreamRaftProjector)WorldObject.AttachedObject;
QSBPatch.RemoteCall(attachedObject.RespawnRaft);
attachedObject.RespawnRaft();
}
}

View File

@ -1,5 +1,4 @@
using QSB.ItemSync.WorldObjects;
using QSB.Patches;
using QSB.WorldSync;
namespace QSB.EchoesOfTheEye.RaftSync.WorldObjects;
@ -8,6 +7,5 @@ public class QSBRaftDock : WorldObject<RaftDock>, IQSBDropTarget
{
IItemDropTarget IQSBDropTarget.AttachedObject => AttachedObject;
public void OnPressInteract() =>
QSBPatch.RemoteCall(AttachedObject.OnPressInteract);
public void OnPressInteract() => AttachedObject.OnPressInteract();
}

View File

@ -1,11 +1,9 @@
using QSB.EchoesOfTheEye.Sarcophagus.WorldObjects;
using QSB.Messaging;
using QSB.Patches;
namespace QSB.EchoesOfTheEye.Sarcophagus.Messages;
public class OpenMessage : QSBWorldObjectMessage<QSBSarcophagus>
{
public override void OnReceiveRemote() =>
QSBPatch.RemoteCall(WorldObject.AttachedObject.OnPressInteract);
public override void OnReceiveRemote() => WorldObject.AttachedObject.OnPressInteract();
}

View File

@ -1,10 +1,9 @@
using QSB.EchoesOfTheEye.SlideProjectors.WorldObjects;
using QSB.Messaging;
using QSB.Patches;
namespace QSB.EchoesOfTheEye.SlideProjectors.Messages;
internal class NextSlideMessage : QSBWorldObjectMessage<QSBSlideProjector>
{
public override void OnReceiveRemote() => QSBPatch.RemoteCall(WorldObject.AttachedObject.NextSlide);
public override void OnReceiveRemote() => WorldObject.AttachedObject.NextSlide();
}

View File

@ -1,10 +1,9 @@
using QSB.EchoesOfTheEye.SlideProjectors.WorldObjects;
using QSB.Messaging;
using QSB.Patches;
namespace QSB.EchoesOfTheEye.SlideProjectors.Messages;
internal class PreviousSlideMessage : QSBWorldObjectMessage<QSBSlideProjector>
{
public override void OnReceiveRemote() => QSBPatch.RemoteCall(WorldObject.AttachedObject.PreviousSlide);
public override void OnReceiveRemote() => WorldObject.AttachedObject.PreviousSlide();
}

View File

@ -43,7 +43,7 @@ public class QSBElevator : WorldObject<Elevator>
}
}
QSBPatch.RemoteCall(AttachedObject.StartLift);
AttachedObject.StartLift();
}
private void SetDirection(bool isGoingUp)

View File

@ -2,7 +2,6 @@
using QSB.ItemSync.Messages;
using QSB.ItemSync.WorldObjects.Sockets;
using QSB.Messaging;
using QSB.Patches;
using QSB.Player;
using QSB.SectorSync.WorldObjects;
using QSB.WorldSync;
@ -71,7 +70,7 @@ public class QSBItem<T> : WorldObject<T>, IQSBItem
if (_lastSocket != null)
{
QSBPatch.RemoteCall(() => _lastSocket.PlaceIntoSocket(this));
_lastSocket.PlaceIntoSocket(this);
}
else
{
@ -116,10 +115,10 @@ public class QSBItem<T> : WorldObject<T>, IQSBItem
public ItemType GetItemType() => AttachedObject.GetItemType();
public void PickUpItem(Transform holdTransform) =>
QSBPatch.RemoteCall(() => AttachedObject.PickUpItem(holdTransform));
AttachedObject.PickUpItem(holdTransform);
public void DropItem(Vector3 worldPosition, Vector3 worldNormal, Transform parent, Sector sector, IItemDropTarget customDropTarget) =>
QSBPatch.RemoteCall(() => AttachedObject.DropItem(worldPosition, worldNormal, parent, sector, customDropTarget));
AttachedObject.DropItem(worldPosition, worldNormal, parent, sector, customDropTarget);
public void OnCompleteUnsocket() => AttachedObject.OnCompleteUnsocket();
}

View File

@ -1,5 +1,4 @@
using QSB.ItemSync.WorldObjects.Items;
using QSB.Patches;
using QSB.WorldSync;
namespace QSB.ItemSync.WorldObjects.Sockets;
@ -14,8 +13,8 @@ internal class QSBItemSocket : WorldObject<OWItemSocket>
public bool IsSocketOccupied() => AttachedObject.IsSocketOccupied();
public void PlaceIntoSocket(IQSBItem item)
=> QSBPatch.RemoteCall(() => AttachedObject.PlaceIntoSocket((OWItem)item.AttachedObject));
=> AttachedObject.PlaceIntoSocket((OWItem)item.AttachedObject);
public void RemoveFromSocket()
=> QSBPatch.RemoteCall(AttachedObject.RemoveFromSocket);
}
=> AttachedObject.RemoveFromSocket();
}

View File

@ -2,6 +2,7 @@
using OWML.Common;
using QSB.ClientServerStateSync;
using QSB.ClientServerStateSync.Messages;
using QSB.Patches;
using QSB.Player;
using QSB.Player.Messages;
using QSB.Player.TransformSync;
@ -86,7 +87,9 @@ public static class QSBMessageManager
if (msg.From != QSBPlayerManager.LocalPlayerId)
{
QSBPatch.Remote = true;
msg.OnReceiveRemote();
QSBPatch.Remote = false;
}
else
{

View File

@ -1,5 +1,4 @@
using QSB.Messaging;
using QSB.Patches;
using QSB.WorldSync;
namespace QSB.ModelShip.Messages;
@ -11,7 +10,10 @@ internal class RespawnModelShipMessage : QSBMessage<bool>
public override void OnReceiveRemote()
{
var flightConsole = QSBWorldSync.GetUnityObject<RemoteFlightConsole>();
QSBPatch.RemoteCall(() => flightConsole.RespawnModelShip(Data));
if (Data) flightConsole._modelShipBody.GetComponent<OWAudioSource>().PlayOneShot(AudioType.TH_RetrieveModelShip);
flightConsole.RespawnModelShip(Data);
if (Data)
{
flightConsole._modelShipBody.GetComponent<OWAudioSource>().PlayOneShot(AudioType.TH_RetrieveModelShip);
}
}
}

View File

@ -1,7 +1,6 @@
using QSB.AuthoritySync;
using QSB.Messaging;
using QSB.ModelShip.TransformSync;
using QSB.Patches;
using QSB.Player;
using QSB.Player.TransformSync;
using QSB.Utility;
@ -75,6 +74,6 @@ internal class UseFlightConsoleMessage : QSBMessage<bool>
// Client messes up its position when they start flying it
// We can just recall it immediately so its in the right place.
var console = QSBWorldSync.GetUnityObject<RemoteFlightConsole>();
QSBPatch.RemoteCall(() => console.RespawnModelShip(false));
console.RespawnModelShip(false);
}
}

View File

@ -1,6 +1,4 @@
using HarmonyLib;
using QSB.Utility;
using System;
namespace QSB.Patches;
@ -12,30 +10,8 @@ public abstract class QSBPatch
public void DoPatches(Harmony instance) => instance.PatchAll(GetType());
#region remote calls
protected static bool Remote { get; private set; }
protected static object RemoteData { get; private set; }
public static void RemoteCall(Action call, object data = null)
{
Remote = true;
RemoteData = data;
nameof(QSBPatch).Try("doing remote call", call);
Remote = false;
RemoteData = null;
}
public static T RemoteCall<T>(Func<T> call, object data = null)
{
Remote = true;
RemoteData = data;
var t = default(T);
nameof(QSBPatch).Try("doing remote call", () => t = call());
Remote = false;
RemoteData = null;
return t;
}
#endregion
/// <summary>
/// this is true when a message is received remotely (OnReceiveRemote) or a player leaves (OnRemovePlayer)
/// </summary>
public static bool Remote;
}

View File

@ -1,5 +1,6 @@
using OWML.Common;
using QSB.Messaging;
using QSB.Patches;
using QSB.Player.Messages;
using QSB.PlayerBodySetup.Local;
using QSB.PlayerBodySetup.Remote;
@ -48,7 +49,9 @@ public class PlayerTransformSync : SectoredTransformSync
JoinLeaveSingularity.Create(Player, false);
// TODO : Maybe move this to a leave event...? Would ensure everything could finish up before removing the player
QSBPatch.Remote = true;
QSBPlayerManager.OnRemovePlayer?.Invoke(Player);
QSBPatch.Remote = false;
base.OnStopClient();
Player.HudMarker?.Remove();
QSBPlayerManager.PlayerList.Remove(Player);

View File

@ -3,7 +3,7 @@
<AssemblyTitle>Quantum Space Buddies</AssemblyTitle>
<Product>Quantum Space Buddies</Product>
<Description>Multiplayer mod for Outer Wilds</Description>
<OutputPath Condition="Exists('$(OwmlDir)')">$(OwmlDir)\Mods\QSB</OutputPath>
<OutputPath Condition="Exists('$(OwmlDir)')">$(OwmlDir)\Mods\Raicuparta.QuantumSpaceBuddies</OutputPath>
<NoWarn>CS1998;CS0649</NoWarn>
</PropertyGroup>

View File

@ -1,5 +1,4 @@
using QSB.Messaging;
using QSB.Patches;
using QSB.ShipSync.WorldObjects;
namespace QSB.ShipSync.Messages;
@ -7,5 +6,5 @@ namespace QSB.ShipSync.Messages;
internal class LegDetachMessage : QSBWorldObjectMessage<QSBShipDetachableLeg>
{
public override void OnReceiveRemote() =>
QSBPatch.RemoteCall(WorldObject.AttachedObject.Detach);
WorldObject.AttachedObject.Detach();
}

View File

@ -1,5 +1,4 @@
using QSB.Messaging;
using QSB.Patches;
using QSB.ShipSync.WorldObjects;
namespace QSB.ShipSync.Messages;
@ -7,5 +6,5 @@ namespace QSB.ShipSync.Messages;
internal class ModuleDetachMessage : QSBWorldObjectMessage<QSBShipDetachableModule>
{
public override void OnReceiveRemote() =>
QSBPatch.RemoteCall(WorldObject.AttachedObject.Detach);
WorldObject.AttachedObject.Detach();
}

View File

@ -1,5 +1,4 @@
using QSB.Messaging;
using QSB.Patches;
using QSB.ShipSync.WorldObjects;
namespace QSB.ShipSync.Messages;
@ -9,5 +8,5 @@ internal class ShipLightMessage : QSBWorldObjectMessage<QSBShipLight, bool>
public ShipLightMessage(bool on) : base(on) { }
public override void OnReceiveRemote() =>
QSBPatch.RemoteCall(() => WorldObject.AttachedObject.SetOn(Data));
WorldObject.AttachedObject.SetOn(Data);
}

View File

@ -1,5 +1,4 @@
using QSB.Messaging;
using QSB.Patches;
namespace QSB.TimeSync.Messages;
@ -9,5 +8,5 @@ namespace QSB.TimeSync.Messages;
public class SetSecondsRemainingMessage : QSBMessage<float>
{
public SetSecondsRemainingMessage(float secondsRemaining) : base(secondsRemaining) => To = 0;
public override void OnReceiveRemote() => QSBPatch.RemoteCall(() => TimeLoop.SetSecondsRemaining(Data));
public override void OnReceiveRemote() => TimeLoop.SetSecondsRemaining(Data);
}

View File

@ -5,7 +5,6 @@ using QSB.ClientServerStateSync.Messages;
using QSB.DeathSync;
using QSB.Inputs;
using QSB.Messaging;
using QSB.Patches;
using QSB.Player;
using QSB.Player.Messages;
using QSB.TimeSync.Messages;
@ -153,7 +152,7 @@ public class WakeUpSync : NetworkBehaviour
// prevents accidental supernova at start of loop
if (_serverLoopCount == PlayerData.LoadLoopCount())
{
QSBPatch.RemoteCall(() => TimeLoop.SetSecondsRemaining(secondsRemaining));
TimeLoop.SetSecondsRemaining(secondsRemaining);
}
}

View File

@ -3,7 +3,7 @@
"MainMenuHost": "OUVRIR AU MULTIJOUEUR",
"MainMenuConnect": "SE CONNECTER AU MULTIJOUEUR",
"PauseMenuDisconnect": "DÉCONNECTER",
"PauseMenuStopHosting": "ARRÊTEZ L'HÉBERGEMENT",
"PauseMenuStopHosting": "ARRÊTER L'HÉBERGEMENT",
"PublicIPAddress": "Adresse IP publique\n\n(CELA EFFACERA VOTRE PROGRESSION MULTIJOUEUR)",
"ProductUserID": "ID utilisateur\n\n(CELA EFFACERA VOTRE PROGRESSION MULTIJOUEUR)",
"Connect": "SE CONNECTER",
@ -28,7 +28,7 @@
"DLCMismatch": "Les états d'installation du DLC ne correspondent pas. (Client:{0}, Serveur:{1})",
"GameProgressLimit": "Le jeu a trop progressé.",
"AddonMismatch": "Non-concordance des addons. (Client:{0} addons, Serveur:{1} addons)",
"IncompatibleMod": "Utiliser un mod incompatible/non autorisé. Le premier mod trouvé était {0}",
"IncompatibleMod": "Tu utilises un mod incompatible/non autorisé. Le premier mod trouvé était {0}",
"PlayerJoinedTheGame": "{0} a rejoint!",
"PlayerWasKicked": "{0} a été expulsé.",
"KickedFromServer": "Tu as été expulsé du serveur. Raison : {0}",
@ -39,6 +39,11 @@
"TimeSyncWaitForAllToReady": "Attendez le début de la boucle...",
"TimeSyncWaitForAllToDie": "Attendez la fin de la boucle...",
"GalaxyMapEveryoneNotPresent": "Ce nest pas encore le moment. Tout le monde doit être ici pour continuer.",
"YouAreDead": "Tu es mort.",
"WaitingForRespawn": "Attendez que quelqu'un vouz ressuscité...",
"WaitingForAllToDie": "Attendez que {0} joueur(s) meurt/meurent...",
"AttachToShip": "S'attacher à la fusée",
"DetachFromShip": "Se détacher de la fusée",
"DeathMessages": {
"Default": [
"{0} est mort",

View File

@ -1,5 +1,4 @@
using QSB.Messaging;
using QSB.Patches;
namespace QSB.Utility.Messages;
@ -12,6 +11,6 @@ public class DebugTriggerSupernovaMessage : QSBMessage
PlayerData.SaveLoopCount(2);
TimeLoop.SetTimeLoopEnabled(true);
TimeLoop._isTimeFlowing = true;
QSBPatch.RemoteCall(() => TimeLoop.SetSecondsRemaining(0));
TimeLoop.SetSecondsRemaining(0);
}
}