From 2ae0751aa721743f9928bc0ca8c06b712a6a2456 Mon Sep 17 00:00:00 2001 From: Mister_Nebula <41904486+misternebula@users.noreply.github.com> Date: Thu, 21 Oct 2021 17:21:54 +0100 Subject: [PATCH] stuff --- QSB/ClientServerStateSync/ServerStateManager.cs | 8 ++++++++ QSB/Menus/MenuManager.cs | 3 +++ QSB/OrbSync/OrbManager.cs | 9 +++++++-- QSB/Player/Events/PlayerJoinEvent.cs | 14 ++++++++++++-- QSB/Player/Events/PlayerJoinMessage.cs | 3 +++ QSB/Player/GamePlatform.cs | 9 +++++++++ QSB/Player/KickReason.cs | 3 ++- QSB/QSB.csproj | 1 + QSB/QSBCore.cs | 4 ++++ QSB/default-config.json | 2 +- 10 files changed, 50 insertions(+), 6 deletions(-) create mode 100644 QSB/Player/GamePlatform.cs diff --git a/QSB/ClientServerStateSync/ServerStateManager.cs b/QSB/ClientServerStateSync/ServerStateManager.cs index 12f7ed6e..42e93e1b 100644 --- a/QSB/ClientServerStateSync/ServerStateManager.cs +++ b/QSB/ClientServerStateSync/ServerStateManager.cs @@ -15,6 +15,7 @@ namespace QSB.ClientServerStateSync public delegate void ChangeStateEvent(ServerState newState); private ServerState _currentState; + private bool _blockNextCheck; private void Awake() => Instance = this; @@ -123,6 +124,12 @@ namespace QSB.ClientServerStateSync return; } + if (_blockNextCheck) + { + _blockNextCheck = false; + return; + } + if (_currentState == ServerState.WaitingForAllPlayersToReady) { if (QSBPlayerManager.PlayerList.All(x => x.State == ClientState.WaitingForOthersToReadyInSolarSystem) @@ -131,6 +138,7 @@ namespace QSB.ClientServerStateSync DebugLog.DebugWrite($"All ready!!"); QSBEventManager.FireEvent(EventNames.QSBStartLoop); QSBEventManager.FireEvent(EventNames.QSBServerState, ServerState.InSolarSystem); + _blockNextCheck = true; } } } diff --git a/QSB/Menus/MenuManager.cs b/QSB/Menus/MenuManager.cs index cccdfb0d..b2077ad5 100644 --- a/QSB/Menus/MenuManager.cs +++ b/QSB/Menus/MenuManager.cs @@ -183,6 +183,9 @@ namespace QSB.Menus case KickReason.GameVersionNotMatching: text = "Server refused connection as Outer Wilds version does not match."; break; + case KickReason.GamePlatformNotMatching: + text = "Server refused connection as Outer Wilds platform does not match. (Steam/Epic)"; + break; case KickReason.None: text = "Kicked from server. No reason given."; break; diff --git a/QSB/OrbSync/OrbManager.cs b/QSB/OrbSync/OrbManager.cs index f2c7767b..3e283563 100644 --- a/QSB/OrbSync/OrbManager.cs +++ b/QSB/OrbSync/OrbManager.cs @@ -4,6 +4,7 @@ using QSB.OrbSync.WorldObjects; using QSB.Utility; using QSB.WorldSync; using QuantumUNET; +using System.Collections.Generic; using System.Linq; using UnityEngine; @@ -11,6 +12,8 @@ namespace QSB.OrbSync { public class OrbManager : WorldObjectManager { + private List _orbs = new List(); + protected override void RebuildWorldObjects(OWScene scene) { QSBWorldSync.Init(); @@ -24,11 +27,13 @@ namespace QSB.OrbSync QSBWorldSync.OldOrbList = Resources.FindObjectsOfTypeAll().ToList(); if (QSBCore.IsHost) { - NomaiOrbTransformSync.OrbTransformSyncs.ForEach(x => QNetworkServer.Destroy(x.gameObject)); + _orbs.ForEach(x => QNetworkServer.Destroy(x)); + _orbs.Clear(); NomaiOrbTransformSync.OrbTransformSyncs.Clear(); foreach (var orb in QSBWorldSync.OldOrbList) { - Instantiate(QSBNetworkManager.Instance.OrbPrefab).SpawnWithServerAuthority(); + var newOrb = Instantiate(QSBNetworkManager.Instance.OrbPrefab); + newOrb.SpawnWithServerAuthority(); } } diff --git a/QSB/Player/Events/PlayerJoinEvent.cs b/QSB/Player/Events/PlayerJoinEvent.cs index b5d6ee1a..7a3f0149 100644 --- a/QSB/Player/Events/PlayerJoinEvent.cs +++ b/QSB/Player/Events/PlayerJoinEvent.cs @@ -18,7 +18,8 @@ namespace QSB.Player.Events AboutId = LocalPlayerId, PlayerName = name, QSBVersion = QSBCore.QSBVersion, - GameVersion = QSBCore.GameVersion + GameVersion = QSBCore.GameVersion, + Platform = QSBCore.Platform }; public override void OnReceiveRemote(bool server, PlayerJoinMessage message) @@ -45,10 +46,19 @@ namespace QSB.Player.Events return; } + if (message.Platform != QSBCore.Platform) + { + if (server) + { + DebugLog.ToConsole($"Error - Client {message.PlayerName} connecting with wrong game platform. (Client:{message.Platform}, Server:{QSBCore.Platform})", MessageType.Error); + QSBEventManager.FireEvent(EventNames.QSBPlayerKick, message.AboutId, KickReason.GamePlatformNotMatching); + } + } + var player = QSBPlayerManager.GetPlayer(message.AboutId); player.Name = message.PlayerName; DebugLog.ToAll($"{player.Name} joined!", MessageType.Info); - DebugLog.DebugWrite($"{player.Name} joined. id:{player.PlayerId}, qsbVersion:{message.QSBVersion}, gameVersion:{message.GameVersion}", MessageType.Info); + DebugLog.DebugWrite($"{player.Name} joined. id:{player.PlayerId}, qsbVersion:{message.QSBVersion}, gameVersion:{message.GameVersion}, platform:{message.Platform}", MessageType.Info); } public override void OnReceiveLocal(bool server, PlayerJoinMessage message) diff --git a/QSB/Player/Events/PlayerJoinMessage.cs b/QSB/Player/Events/PlayerJoinMessage.cs index 1dab8bda..a07f5f4d 100644 --- a/QSB/Player/Events/PlayerJoinMessage.cs +++ b/QSB/Player/Events/PlayerJoinMessage.cs @@ -8,6 +8,7 @@ namespace QSB.Player.Events public string PlayerName { get; set; } public string QSBVersion { get; set; } public string GameVersion { get; set; } + public GamePlatform Platform { get; set; } public override void Deserialize(QNetworkReader reader) { @@ -15,6 +16,7 @@ namespace QSB.Player.Events PlayerName = reader.ReadString(); QSBVersion = reader.ReadString(); GameVersion = reader.ReadString(); + Platform = (GamePlatform)reader.ReadInt32(); } public override void Serialize(QNetworkWriter writer) @@ -23,6 +25,7 @@ namespace QSB.Player.Events writer.Write(PlayerName); writer.Write(QSBVersion); writer.Write(GameVersion); + writer.Write((int)Platform); } } } \ No newline at end of file diff --git a/QSB/Player/GamePlatform.cs b/QSB/Player/GamePlatform.cs new file mode 100644 index 00000000..6aedb3f1 --- /dev/null +++ b/QSB/Player/GamePlatform.cs @@ -0,0 +1,9 @@ +namespace QSB.Player +{ + public enum GamePlatform + { + None, + Steam, + Epic + } +} diff --git a/QSB/Player/KickReason.cs b/QSB/Player/KickReason.cs index 4e911581..d02b4159 100644 --- a/QSB/Player/KickReason.cs +++ b/QSB/Player/KickReason.cs @@ -4,6 +4,7 @@ { None, QSBVersionNotMatching, - GameVersionNotMatching + GameVersionNotMatching, + GamePlatformNotMatching } } diff --git a/QSB/QSB.csproj b/QSB/QSB.csproj index c191550b..294f9217 100644 --- a/QSB/QSB.csproj +++ b/QSB/QSB.csproj @@ -109,6 +109,7 @@ + diff --git a/QSB/QSBCore.cs b/QSB/QSBCore.cs index 784c7f49..3b361975 100644 --- a/QSB/QSBCore.cs +++ b/QSB/QSBCore.cs @@ -26,6 +26,7 @@ using QSB.Utility; using QSB.WorldSync; using QuantumUNET; using QuantumUNET.Components; +using System.Linq; using UnityEngine; /* @@ -65,6 +66,9 @@ namespace QSB public static bool IsInMultiplayer => QNetworkManager.singleton.isNetworkActive; public static string QSBVersion => Helper.Manifest.Version; public static string GameVersion => Application.version; + public static GamePlatform Platform => typeof(Achievements).Assembly.GetTypes().Any(x => x.Name == "EpicEntitlementRetriever") + ? GamePlatform.Epic + : GamePlatform.Steam; public static IMenuAPI MenuApi { get; private set; } public void Awake() diff --git a/QSB/default-config.json b/QSB/default-config.json index fedee1d0..ffe88285 100644 --- a/QSB/default-config.json +++ b/QSB/default-config.json @@ -3,7 +3,7 @@ "settings": { "defaultServerIP": "localhost", "port": 7777, - "debugMode": true, + "debugMode": false, "showLinesInDebug": false } } \ No newline at end of file