From 92ab39ed6918a9ae879b9d71a27f0d48c59e25f9 Mon Sep 17 00:00:00 2001 From: Aaro Varis Date: Mon, 10 Mar 2025 18:01:18 +0200 Subject: [PATCH] probs broke everything --- BoneSync/BoneSync.csproj | 1 + .../Networking/Messages/SceneChangeMessage.cs | 74 +++++++++++++++++++ BoneSync/Networking/PacketTypes.cs | 1 + BoneSync/Patching/SceneManagerPatches.cs | 4 +- .../Sync/Components/SyncableProperties.cs | 3 + BoneSync/Sync/SceneSync.cs | 18 +++++ 6 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 BoneSync/Networking/Messages/SceneChangeMessage.cs diff --git a/BoneSync/BoneSync.csproj b/BoneSync/BoneSync.csproj index a6e520a..e352645 100644 --- a/BoneSync/BoneSync.csproj +++ b/BoneSync/BoneSync.csproj @@ -96,6 +96,7 @@ + diff --git a/BoneSync/Networking/Messages/SceneChangeMessage.cs b/BoneSync/Networking/Messages/SceneChangeMessage.cs new file mode 100644 index 0000000..60249bf --- /dev/null +++ b/BoneSync/Networking/Messages/SceneChangeMessage.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using BoneSync.Sync; +using MelonLoader; +using StressLevelZero.Utilities; + +namespace BoneSync.Networking.Messages +{ + public enum sceneChangeType + { + FromIndex, + FromName, + CustomMap, + } + public struct SceneChangeInfo + { + public sceneChangeType sceneChangeType; + public string sceneName; + public byte sceneIndex; + } + [PacketType(PacketType.SceneChange), PacketReliability(PacketReliability.Reliable), AlwaysExecute] + internal class SceneChangeMessage : NetworkMessage + { + private SceneChangeInfo _sceneChangeInfo; + public SceneChangeInfo sceneChangeInfo => _sceneChangeInfo; + + public SceneChangeMessage(SceneChangeInfo sceneChangeInfo) + { + _sceneChangeInfo = sceneChangeInfo; + byteEncoder.WriteByte((byte)_sceneChangeInfo.sceneChangeType); + switch (_sceneChangeInfo.sceneChangeType) + { + case sceneChangeType.FromIndex: + byteEncoder.WriteByte(_sceneChangeInfo.sceneIndex); + break; + case sceneChangeType.FromName: + byteEncoder.WriteString(_sceneChangeInfo.sceneName); + break; + case sceneChangeType.CustomMap: + byteEncoder.WriteString(_sceneChangeInfo.sceneName); + break; + } + } + + public SceneChangeMessage(Packet packet) + { + byteEncoder.SetBytes(packet.Data); + _sceneChangeInfo = new SceneChangeInfo(); + _sceneChangeInfo.sceneChangeType = (sceneChangeType)byteEncoder.ReadByte(); + switch (_sceneChangeInfo.sceneChangeType) + { + case sceneChangeType.FromIndex: + _sceneChangeInfo.sceneIndex = byteEncoder.ReadByte(); + break; + case sceneChangeType.FromName: + _sceneChangeInfo.sceneName = byteEncoder.ReadString(); + break; + case sceneChangeType.CustomMap: + _sceneChangeInfo.sceneName = byteEncoder.ReadString(); + break; + } + + } + + public override void Execute() + { + MelonLogger.Msg("SceneChangeMessage: " + _sceneChangeInfo.sceneName + " " + _sceneChangeInfo.sceneIndex); + BoneworksSceneManager.LoadScene(_sceneChangeInfo.sceneIndex); + } + } +} diff --git a/BoneSync/Networking/PacketTypes.cs b/BoneSync/Networking/PacketTypes.cs index 2ae2fb3..10b1946 100644 --- a/BoneSync/Networking/PacketTypes.cs +++ b/BoneSync/Networking/PacketTypes.cs @@ -21,5 +21,6 @@ namespace BoneSync.Networking SimpleObjectEventSync = 10, PlugSync = 11, AISync = 12, + SceneChange = 13, } } diff --git a/BoneSync/Patching/SceneManagerPatches.cs b/BoneSync/Patching/SceneManagerPatches.cs index c90c4e8..3efbb97 100644 --- a/BoneSync/Patching/SceneManagerPatches.cs +++ b/BoneSync/Patching/SceneManagerPatches.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using BoneSync.Sync; using HarmonyLib; using MelonLoader; using StressLevelZero.Utilities; @@ -13,13 +14,14 @@ namespace BoneSync.Patching internal class SceneManagerPatches { [HarmonyPatch(nameof(BoneworksSceneManager.LoadScene)), HarmonyPostfix] - private static void LoadScenePrefix(BoneworksSceneManager __instance, int sceneBuildIndex) + private static void LoadScenePrefix(int sceneBuildIndex) { MelonLogger.Msg("LoadScenePrefix: " + sceneBuildIndex); if (!BoneSync.IsConnected) return; if (BoneSync.lobby.IsHost) { MelonLogger.Msg("Host is loading scene, sending message to clients..."); + SceneSync.SendSceneSyncMessage(sceneBuildIndex); } } } diff --git a/BoneSync/Sync/Components/SyncableProperties.cs b/BoneSync/Sync/Components/SyncableProperties.cs index a428d0c..118f16c 100644 --- a/BoneSync/Sync/Components/SyncableProperties.cs +++ b/BoneSync/Sync/Components/SyncableProperties.cs @@ -36,6 +36,7 @@ namespace BoneSync.Sync.Components private void _SendAttributeSync() { _SendMagazineData(); + _lastAttributeSyncTime = Time.realtimeSinceStartup; } public void ApplyMagazineData(MagazineSyncData magazineSyncData) { @@ -46,6 +47,8 @@ namespace BoneSync.Sync.Components magazine.magazineData.cartridgeType = magazineData.cartridgeType; magazine.magazineData.weight = magazineData.weight; magazine.magazineData.platform = magazineData.platform; + //magazine.CheckBulletArt(); + //magazine.ShowBulletArt(); } public MagazineSyncData GetMagazineData() diff --git a/BoneSync/Sync/SceneSync.cs b/BoneSync/Sync/SceneSync.cs index 7bc544d..6673359 100644 --- a/BoneSync/Sync/SceneSync.cs +++ b/BoneSync/Sync/SceneSync.cs @@ -1,4 +1,5 @@ using BoneSync.Data; +using BoneSync.Networking.Messages; using BoneSync.Sync.Components; using MelonLoader; using StressLevelZero.Interaction; @@ -88,5 +89,22 @@ namespace BoneSync.Sync scenes.Add(SceneManager.GetSceneByBuildIndex(i)); } } + + public static void SendSceneSyncMessage(int index) + { + if (!BoneSync.IsConnected) return; + if (BoneSync.lobby.IsHost) + { + MelonLogger.Msg("Host is loading scene, sending message to clients..."); + SceneChangeInfo info = new SceneChangeInfo() + { + sceneName = scenes[index].name, + sceneChangeType = sceneChangeType.FromIndex, + sceneIndex = (byte)index + }; + SceneChangeMessage message = new SceneChangeMessage(info); + message.Broadcast(); + } + } } }