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