diff --git a/QSB/Animation/AnimationSync.cs b/QSB/Animation/AnimationSync.cs index fc8ffec4..46ed8b1d 100644 --- a/QSB/Animation/AnimationSync.cs +++ b/QSB/Animation/AnimationSync.cs @@ -127,7 +127,8 @@ namespace QSB.Animation { var message = new AnimTriggerMessage { - SenderId = netId.Value, + FromId = netId.Value, + AboutId = netId.Value, TriggerId = (short)trigger, Value = value }; @@ -148,7 +149,7 @@ namespace QSB.Animation private void OnClientReceiveMessage(AnimTriggerMessage message) { - var animationSync = PlayerRegistry.GetAnimationSync(message.SenderId); + var animationSync = PlayerRegistry.GetAnimationSync(message.AboutId); if (animationSync == null || animationSync == this) { return; diff --git a/QSB/Animation/PlayerSuitEvent.cs b/QSB/Animation/PlayerSuitEvent.cs index c345143c..0a803e53 100644 --- a/QSB/Animation/PlayerSuitEvent.cs +++ b/QSB/Animation/PlayerSuitEvent.cs @@ -24,13 +24,13 @@ namespace QSB.Animation private ToggleMessage CreateMessage(bool value) => new ToggleMessage { - SenderId = LocalPlayerId, + AboutId = LocalPlayerId, ToggleValue = value }; public override void OnReceiveRemote(ToggleMessage message) { - var player = PlayerRegistry.GetPlayer(message.SenderId); + var player = PlayerRegistry.GetPlayer(message.AboutId); player?.UpdateState(State.Suit, message.ToggleValue); } diff --git a/QSB/DeathSync/PlayerDeathEvent.cs b/QSB/DeathSync/PlayerDeathEvent.cs index ba6c9f50..2b2b906e 100644 --- a/QSB/DeathSync/PlayerDeathEvent.cs +++ b/QSB/DeathSync/PlayerDeathEvent.cs @@ -22,13 +22,13 @@ namespace QSB.DeathSync private PlayerDeathMessage CreateMessage(DeathType type) => new PlayerDeathMessage { - SenderId = LocalPlayerId, + AboutId = LocalPlayerId, DeathType = type }; public override void OnReceiveRemote(PlayerDeathMessage message) { - var playerName = PlayerRegistry.GetPlayer(message.SenderId).Name; + var playerName = PlayerRegistry.GetPlayer(message.AboutId).Name; var deathMessage = Necronomicon.GetPhrase(message.DeathType); DebugLog.ToAll(string.Format(deathMessage, playerName)); } diff --git a/QSB/ElevatorSync/ElevatorEvent.cs b/QSB/ElevatorSync/ElevatorEvent.cs index 5f626935..1cb5d9f5 100644 --- a/QSB/ElevatorSync/ElevatorEvent.cs +++ b/QSB/ElevatorSync/ElevatorEvent.cs @@ -22,7 +22,6 @@ namespace QSB.ElevatorSync private ElevatorMessage CreateMessage(int id, ElevatorDirection direction) => new ElevatorMessage { - SenderId = PlayerRegistry.LocalPlayer.NetId, Direction = direction, ObjectId = id }; diff --git a/QSB/Events/EventList.cs b/QSB/Events/EventList.cs index 7d131496..09669c24 100644 --- a/QSB/Events/EventList.cs +++ b/QSB/Events/EventList.cs @@ -49,7 +49,6 @@ namespace QSB.Events Ready = false; foreach (var item in _eventList) { - DebugLog.ToConsole("Closing listener for " + item.GetType().Name); item.Invoke("CloseListener"); } _eventList = new List(); diff --git a/QSB/Events/PlayerJoinEvent.cs b/QSB/Events/PlayerJoinEvent.cs index d11424b4..566a84a3 100644 --- a/QSB/Events/PlayerJoinEvent.cs +++ b/QSB/Events/PlayerJoinEvent.cs @@ -15,27 +15,21 @@ namespace QSB.Events public override void CloseListener() { - DebugLog.ToConsole("Close listener for join event"); GlobalMessenger.RemoveListener(EventNames.QSBPlayerJoin, Handler); } - private void Handler(string name) => StartSendEvent(CreateMessage(name)); - - private void StartSendEvent(PlayerJoinMessage message) - { - DebugLog.ToConsole("Got fire event for player join, sending message"); - SendEvent(message); - } + private void Handler(string name) => SendEvent(CreateMessage(name)); private PlayerJoinMessage CreateMessage(string name) => new PlayerJoinMessage { - SenderId = PlayerTransformSync.LocalInstance.netId.Value, + FromId = PlayerTransformSync.LocalInstance.netId.Value, + AboutId = PlayerTransformSync.LocalInstance.netId.Value, PlayerName = name }; public override void OnReceiveRemote(PlayerJoinMessage message) { - var player = PlayerRegistry.CreatePlayer(message.SenderId); + var player = PlayerRegistry.CreatePlayer(message.AboutId); player.Name = message.PlayerName; var text = $"{player.Name} joined!"; DebugLog.ToAll(OWML.Common.MessageType.Info, text); @@ -43,7 +37,6 @@ namespace QSB.Events public override void OnReceiveLocal(PlayerJoinMessage message) { - DebugLog.ToConsole($"OnReceiveLocal player join event, from {message.SenderId}"); var player = PlayerRegistry.CreatePlayer(PlayerTransformSync.LocalInstance.netId.Value); player.Name = message.PlayerName; var text = $"Connected to server as {player.Name}."; diff --git a/QSB/Events/PlayerLeaveEvent.cs b/QSB/Events/PlayerLeaveEvent.cs index 1599deee..ed330469 100644 --- a/QSB/Events/PlayerLeaveEvent.cs +++ b/QSB/Events/PlayerLeaveEvent.cs @@ -24,23 +24,22 @@ namespace QSB.Events private PlayerLeaveMessage CreateMessage(uint id, uint[] objects) => new PlayerLeaveMessage { - SenderId = id, + FromId = LocalPlayerId, + AboutId = id, ObjectIds = objects }; public override void OnReceiveRemote(PlayerLeaveMessage message) { - var playerName = PlayerRegistry.GetPlayer(message.SenderId).Name; - DebugLog.ToAll(playerName, "disconnected."); - PlayerRegistry.RemovePlayer(message.SenderId); + var playerName = PlayerRegistry.GetPlayer(message.AboutId).Name; + DebugLog.ToConsole($"{playerName} disconnected.", OWML.Common.MessageType.Info); + PlayerRegistry.RemovePlayer(message.AboutId); foreach (var objectId in message.ObjectIds) { DestroyObject(objectId); } } - public override void OnReceiveLocal(PlayerLeaveMessage message) => OnReceiveRemote(message); - private void DestroyObject(uint objectId) { var component = Object.FindObjectsOfType() @@ -50,9 +49,14 @@ namespace QSB.Events return; } var transformSync = component.GetComponent(); + if (transformSync != null) { - Object.Destroy(transformSync.SyncedTransform.gameObject); + PlayerRegistry.TransformSyncs.Remove(transformSync); + if (transformSync.SyncedTransform != null) + { + Object.Destroy(transformSync.SyncedTransform.gameObject); + } } Object.Destroy(component.gameObject); } diff --git a/QSB/Events/PlayerReadyEvent.cs b/QSB/Events/PlayerReadyEvent.cs index c8702c74..4c253320 100644 --- a/QSB/Events/PlayerReadyEvent.cs +++ b/QSB/Events/PlayerReadyEvent.cs @@ -14,7 +14,6 @@ namespace QSB.Events public override void CloseListener() { - DebugLog.ToConsole("Close listener for ready event"); GlobalMessenger.RemoveListener(EventNames.QSBPlayerReady, Handler); } @@ -22,13 +21,14 @@ namespace QSB.Events private ToggleMessage CreateMessage(bool ready) => new ToggleMessage { - SenderId = LocalPlayerId, + FromId = LocalPlayerId, + AboutId = LocalPlayerId, ToggleValue = ready }; public override void OnServerReceive(ToggleMessage message) { - PlayerRegistry.GetPlayer(message.SenderId).IsReady = message.ToggleValue; + PlayerRegistry.GetPlayer(message.AboutId).IsReady = message.ToggleValue; PlayerState.LocalInstance.Send(); } } diff --git a/QSB/Events/PlayerState.cs b/QSB/Events/PlayerState.cs index ab30b21f..ac6490b2 100644 --- a/QSB/Events/PlayerState.cs +++ b/QSB/Events/PlayerState.cs @@ -21,11 +21,11 @@ namespace QSB.Events private void OnClientReceiveMessage(PlayerStateMessage message) { - if (message.SenderId == PlayerTransformSync.LocalInstance.netId.Value) + if (message.FromId == PlayerTransformSync.LocalInstance.netId.Value) { return; } - UnityHelper.Instance.RunWhen(() => PlayerRegistry.GetTransformSync(message.SenderId) != null, + UnityHelper.Instance.RunWhen(() => PlayerRegistry.GetTransformSync(message.AboutId) != null, () => PlayerRegistry.HandleFullStateMessage(message)); } @@ -35,7 +35,8 @@ namespace QSB.Events { var message = new PlayerStateMessage { - SenderId = player.NetId, + FromId = PlayerRegistry.LocalPlayerId, + AboutId = player.NetId, PlayerName = player.Name, PlayerReady = player.IsReady, PlayerState = player.State diff --git a/QSB/Events/PlayerStatesRequestEvent.cs b/QSB/Events/PlayerStatesRequestEvent.cs index a871c3bc..5450c83a 100644 --- a/QSB/Events/PlayerStatesRequestEvent.cs +++ b/QSB/Events/PlayerStatesRequestEvent.cs @@ -22,7 +22,7 @@ namespace QSB.Events private PlayerMessage CreateMessage() => new PlayerMessage { - SenderId = PlayerTransformSync.LocalInstance.netId.Value + FromId = PlayerTransformSync.LocalInstance.netId.Value }; public override void OnServerReceive(PlayerMessage message) diff --git a/QSB/Events/QSBEvent.cs b/QSB/Events/QSBEvent.cs index b2873739..2cea526e 100644 --- a/QSB/Events/QSBEvent.cs +++ b/QSB/Events/QSBEvent.cs @@ -1,6 +1,7 @@ using QSB.Messaging; using QSB.TransformSync; using QSB.Utility; +using UnityEngine.Networking; namespace QSB.Events { @@ -55,26 +56,22 @@ namespace QSB.Events /// public virtual void OnServerReceive(T message) { - DebugLog.ToConsole("server get message"); _eventHandler.SendToAll(message); } public void SendEvent(T message) { - DebugLog.ToConsole("Starting wait to send event..."); UnityHelper.Instance.RunWhen(() => PlayerTransformSync.LocalInstance != null, () => Send(message)); } private void Send(T message) { - DebugLog.ToConsole("sending event!"); _eventHandler.SendToServer(message); } private void OnClientReceive(T message) { - DebugLog.ToConsole("Got event!"); - if (PlayerRegistry.IsBelongingToLocalPlayer(message.SenderId)) + if (PlayerRegistry.IsBelongingToLocalPlayer(message.FromId)) { OnReceiveLocal(message); return; diff --git a/QSB/GeyserSync/GeyserEvent.cs b/QSB/GeyserSync/GeyserEvent.cs index ca12cf9b..c860e8c9 100644 --- a/QSB/GeyserSync/GeyserEvent.cs +++ b/QSB/GeyserSync/GeyserEvent.cs @@ -22,7 +22,7 @@ namespace QSB.GeyserSync private GeyserMessage CreateMessage(int id, bool state) => new GeyserMessage { - SenderId = PlayerRegistry.LocalPlayer.NetId, + FromId = PlayerRegistry.LocalPlayer.NetId, ObjectId = id, State = state }; diff --git a/QSB/Messaging/MessageHandler.cs b/QSB/Messaging/MessageHandler.cs index 29291239..6f99956c 100644 --- a/QSB/Messaging/MessageHandler.cs +++ b/QSB/Messaging/MessageHandler.cs @@ -27,7 +27,6 @@ namespace QSB.Messaging private void Init() { - DebugLog.ToConsole($"Registering handler on server id {NetworkServer.serverHostId}"); NetworkServer.RegisterHandler((short)_messageType, OnServerReceiveMessageHandler); NetworkManager.singleton.client.RegisterHandler((short)_messageType, OnClientReceiveMessageHandler); } diff --git a/QSB/Messaging/PlayerMessage.cs b/QSB/Messaging/PlayerMessage.cs index b4b4b36a..e709fec5 100644 --- a/QSB/Messaging/PlayerMessage.cs +++ b/QSB/Messaging/PlayerMessage.cs @@ -4,16 +4,19 @@ namespace QSB.Messaging { public class PlayerMessage : MessageBase { - public uint SenderId { get; set; } + public uint FromId { get; set; } + public uint AboutId { get; set; } public override void Deserialize(NetworkReader reader) { - SenderId = reader.ReadUInt32(); + FromId = reader.ReadUInt32(); + AboutId = reader.ReadUInt32(); } public override void Serialize(NetworkWriter writer) { - writer.Write(SenderId); + writer.Write(FromId); + writer.Write(AboutId); } } } diff --git a/QSB/PlayerRegistry.cs b/QSB/PlayerRegistry.cs index 702263d8..0fb03e2e 100644 --- a/QSB/PlayerRegistry.cs +++ b/QSB/PlayerRegistry.cs @@ -3,6 +3,7 @@ using System.Linq; using QSB.TransformSync; using QSB.Animation; using QSB.Messaging; +using QSB.Utility; namespace QSB { @@ -39,12 +40,13 @@ namespace QSB public static void RemovePlayer(uint id) { + DebugLog.ToConsole($"Removing player {id}"); PlayerList.Remove(GetPlayer(id)); } public static void HandleFullStateMessage(PlayerStateMessage message) { - var player = GetPlayer(message.SenderId) ?? CreatePlayer(message.SenderId); + var player = GetPlayer(message.AboutId) ?? CreatePlayer(message.AboutId); player.Name = message.PlayerName; player.IsReady = message.PlayerReady; player.State = message.PlayerState; @@ -57,11 +59,21 @@ namespace QSB public static TransformSync.TransformSync GetTransformSync(uint id) { + DebugLog.ToConsole($"Getting transform sync for id {id}"); + foreach (var item in TransformSyncs) + { + DebugLog.ToConsole($"{item.GetType().Name} : {item.netId.Value}"); + } + if (TransformSyncs.FirstOrDefault(x => x != null && x.netId.Value == id) == default(TransformSync.TransformSync)) + { + DebugLog.ToConsole($"* Couldn't find transformsync for id {id}!", OWML.Common.MessageType.Warning); + } return TransformSyncs.FirstOrDefault(x => x != null && x.netId.Value == id); } public static bool IsBelongingToLocalPlayer(uint id) { + DebugLog.ToConsole($"LocalPlayerId : {LocalPlayerId}"); return id == LocalPlayerId || GetTransformSync(id).PlayerId == LocalPlayerId; } diff --git a/QSB/QSB.cs b/QSB/QSB.cs index 60e62d71..9366b0bc 100644 --- a/QSB/QSB.cs +++ b/QSB/QSB.cs @@ -14,6 +14,8 @@ namespace QSB public static IModHelper Helper; public static string DefaultServerIP; public static bool DebugMode; + public static AssetBundle NetworkAssetBundle; + private static GameObject GameObject; private void Awake() { @@ -23,6 +25,10 @@ namespace QSB private void Start() { Helper = ModHelper; + GameObject = gameObject; + + NetworkAssetBundle = Helper.Assets.LoadBundle("assets/network"); + QSB.Helper.HarmonyHelper.EmptyMethod("Update"); gameObject.AddComponent(); gameObject.AddComponent(); diff --git a/QSB/QSBNetworkManager.cs b/QSB/QSBNetworkManager.cs index 68fa3a4a..d9b3790f 100644 --- a/QSB/QSBNetworkManager.cs +++ b/QSB/QSBNetworkManager.cs @@ -11,6 +11,7 @@ using QSB.Utility; using UnityEngine; using UnityEngine.Events; using UnityEngine.Networking; +using UnityEngine.UI; namespace QSB { @@ -54,7 +55,7 @@ namespace QSB private void Awake() { - _assetBundle = QSB.Helper.Assets.LoadBundle("assets/network"); + _assetBundle = QSB.NetworkAssetBundle; playerPrefab = _assetBundle.LoadAsset("assets/networkplayer.prefab"); playerPrefab.AddComponent(); @@ -99,12 +100,11 @@ namespace QSB connectionConfig.AddChannel(QosType.Unreliable); channels.Add(QosType.Reliable); channels.Add(QosType.Unreliable); - - QSB.Helper.HarmonyHelper.EmptyMethod("Update"); } public override void OnServerAddPlayer(NetworkConnection connection, short playerControllerId) // Called on the server when a client joins { + DebugLog.ToConsole("On server add player " + playerControllerId); base.OnServerAddPlayer(connection, playerControllerId); // These have to be in a constant order (for now, until I get a better netId getting system...) @@ -117,7 +117,6 @@ namespace QSB public override void OnClientConnect(NetworkConnection connection) // Called on the client when connecting to a server { - DebugLog.ToConsole("OnClientConnect (connected to server)"); base.OnClientConnect(connection); gameObject.AddComponent(); @@ -138,13 +137,8 @@ namespace QSB UnityHelper.Instance.RunWhen(() => PlayerTransformSync.LocalInstance != null, EventList.Init); - UnityHelper.Instance.RunWhen(() => EventList.Ready, () => FireJoinEvent()); - } - - private void FireJoinEvent() - { - DebugLog.ToConsole("Firing join event!"); - GlobalMessenger.FireEvent(EventNames.QSBPlayerJoin, _playerName); + UnityHelper.Instance.RunWhen(() => EventList.Ready, + () => GlobalMessenger.FireEvent(EventNames.QSBPlayerJoin, _playerName)); } public override void OnStopClient() // Called on the client when closing connection @@ -165,13 +159,62 @@ namespace QSB var playerId = connection.playerControllers[0].gameObject.GetComponent().netId.Value; var objectIds = connection.clientOwnedObjects.Select(x => x.Value).ToArray(); GlobalMessenger.FireEvent(EventNames.QSBPlayerLeave, playerId, objectIds); - - base.OnServerDisconnect(connection); + CleanupConnection(connection); } public override void OnStopServer() { - NetworkServer.Reset(); + DebugLog.ToConsole("Server stopped!", OWML.Common.MessageType.Info); + foreach (var connection in NetworkServer.connections) + { + CleanupConnection(connection); + } + base.OnStopServer(); + } + + public override void OnClientDisconnect(NetworkConnection conn) + { + DebugLog.ToConsole("Disconnected from server.", OWML.Common.MessageType.Info); + foreach (var connection in NetworkServer.connections.Where(x => x != conn)) + { + CleanupConnection(connection); + } + base.OnClientDisconnect(conn); + } + + private void CleanupConnection(NetworkConnection connection) + { + var playerId = connection.playerControllers[0].gameObject.GetComponent().netId.Value; + var objectIds = connection.clientOwnedObjects.Select(x => x.Value).ToArray(); + + var playerName = PlayerRegistry.GetPlayer(playerId).Name; + DebugLog.ToConsole($"{playerName} disconnected.", OWML.Common.MessageType.Info); + PlayerRegistry.RemovePlayer(playerId); + foreach (var objectId in objectIds) + { + DestroyObject(objectId); + } + } + + private void DestroyObject(uint objectId) + { + var component = FindObjectsOfType() + .FirstOrDefault(x => x.netId.Value == objectId); + if (component == null) + { + return; + } + var transformSync = component.GetComponent(); + + if (transformSync != null) + { + PlayerRegistry.TransformSyncs.Remove(transformSync); + if (transformSync.SyncedTransform != null) + { + Destroy(transformSync.SyncedTransform.gameObject); + } + } + Destroy(component.gameObject); } private void OnGUI() diff --git a/QSB/TimeSync/ServerTimeEvent.cs b/QSB/TimeSync/ServerTimeEvent.cs index ffff0ad2..038555c6 100644 --- a/QSB/TimeSync/ServerTimeEvent.cs +++ b/QSB/TimeSync/ServerTimeEvent.cs @@ -21,7 +21,7 @@ namespace QSB.TimeSync private ServerTimeMessage CreateMessage(float time, int count) => new ServerTimeMessage { - SenderId = PlayerRegistry.LocalPlayer.NetId, + FromId = PlayerRegistry.LocalPlayer.NetId, ServerTime = time, LoopCount = count }; diff --git a/QSB/Tools/PlayerFlashlightEvent.cs b/QSB/Tools/PlayerFlashlightEvent.cs index 2dc21441..71d25b1d 100644 --- a/QSB/Tools/PlayerFlashlightEvent.cs +++ b/QSB/Tools/PlayerFlashlightEvent.cs @@ -24,13 +24,14 @@ namespace QSB.Tools private ToggleMessage CreateMessage(bool value) => new ToggleMessage { - SenderId = LocalPlayerId, + FromId = LocalPlayerId, + AboutId = LocalPlayerId, ToggleValue = value }; public override void OnReceiveRemote(ToggleMessage message) { - var player = PlayerRegistry.GetPlayer(message.SenderId); + var player = PlayerRegistry.GetPlayer(message.AboutId); player?.UpdateState(State.Flashlight, message.ToggleValue); if (!QSBSceneManager.IsInUniverse) { diff --git a/QSB/Tools/PlayerProbeEvent.cs b/QSB/Tools/PlayerProbeEvent.cs index 0a6f9a4e..3ffaa036 100644 --- a/QSB/Tools/PlayerProbeEvent.cs +++ b/QSB/Tools/PlayerProbeEvent.cs @@ -24,13 +24,14 @@ namespace QSB.Tools private ToggleMessage CreateMessage(bool value) => new ToggleMessage { - SenderId = LocalPlayerId, + FromId = LocalPlayerId, + AboutId = LocalPlayerId, ToggleValue = value }; public override void OnReceiveRemote(ToggleMessage message) { - var player = PlayerRegistry.GetPlayer(message.SenderId); + var player = PlayerRegistry.GetPlayer(message.AboutId); player.UpdateState(State.ProbeActive, message.ToggleValue); player.Probe.SetState(message.ToggleValue); } diff --git a/QSB/Tools/PlayerProbeLauncherEvent.cs b/QSB/Tools/PlayerProbeLauncherEvent.cs index f2364421..ffe606b1 100644 --- a/QSB/Tools/PlayerProbeLauncherEvent.cs +++ b/QSB/Tools/PlayerProbeLauncherEvent.cs @@ -24,13 +24,14 @@ namespace QSB.Tools private ToggleMessage CreateMessage(bool value) => new ToggleMessage { - SenderId = LocalPlayerId, + FromId = LocalPlayerId, + AboutId = LocalPlayerId, ToggleValue = value }; public override void OnReceiveRemote(ToggleMessage message) { - var player = PlayerRegistry.GetPlayer(message.SenderId); + var player = PlayerRegistry.GetPlayer(message.AboutId); player?.UpdateState(State.ProbeLauncher, message.ToggleValue); if (!QSBSceneManager.IsInUniverse) { diff --git a/QSB/Tools/PlayerSignalscopeEvent.cs b/QSB/Tools/PlayerSignalscopeEvent.cs index 7b66c1a5..263d28ee 100644 --- a/QSB/Tools/PlayerSignalscopeEvent.cs +++ b/QSB/Tools/PlayerSignalscopeEvent.cs @@ -24,13 +24,14 @@ namespace QSB.Tools private ToggleMessage CreateMessage(bool value) => new ToggleMessage { - SenderId = LocalPlayerId, + FromId = LocalPlayerId, + AboutId = LocalPlayerId, ToggleValue = value }; public override void OnReceiveRemote(ToggleMessage message) { - var player = PlayerRegistry.GetPlayer(message.SenderId); + var player = PlayerRegistry.GetPlayer(message.AboutId); player?.UpdateState(State.Signalscope, message.ToggleValue); if (!QSBSceneManager.IsInUniverse) { diff --git a/QSB/Tools/PlayerTranslatorEvent.cs b/QSB/Tools/PlayerTranslatorEvent.cs index a30f570c..de5de210 100644 --- a/QSB/Tools/PlayerTranslatorEvent.cs +++ b/QSB/Tools/PlayerTranslatorEvent.cs @@ -24,13 +24,14 @@ namespace QSB.Tools private ToggleMessage CreateMessage(bool value) => new ToggleMessage { - SenderId = LocalPlayerId, + FromId = LocalPlayerId, + AboutId = LocalPlayerId, ToggleValue = value }; public override void OnReceiveRemote(ToggleMessage message) { - var player = PlayerRegistry.GetPlayer(message.SenderId); + var player = PlayerRegistry.GetPlayer(message.AboutId); player?.UpdateState(State.Translator, message.ToggleValue); if (!QSBSceneManager.IsInUniverse) { diff --git a/QSB/TransformSync/PlayerSectorEvent.cs b/QSB/TransformSync/PlayerSectorEvent.cs index 06516af0..6cdb4f7c 100644 --- a/QSB/TransformSync/PlayerSectorEvent.cs +++ b/QSB/TransformSync/PlayerSectorEvent.cs @@ -23,7 +23,8 @@ namespace QSB.TransformSync private WorldObjectMessage CreateMessage(uint netId, QSBSector sector) => new WorldObjectMessage { - SenderId = netId, + FromId = LocalPlayerId, + AboutId = netId, ObjectId = sector.ObjectId }; @@ -41,7 +42,7 @@ namespace QSB.TransformSync return; } - var transformSync = PlayerRegistry.GetTransformSync(message.SenderId); + var transformSync = PlayerRegistry.GetTransformSync(message.AboutId); //DebugLog.ToConsole($"{transformSync.GetType().Name} of ID {message.SenderId} set to {sector.Name}"); UnityHelper.Instance.RunWhen(() => transformSync.SyncedTransform != null, () => transformSync.SetReferenceSector(sector)); diff --git a/QSB/TransformSync/PlayerTransformSync.cs b/QSB/TransformSync/PlayerTransformSync.cs index 2a5970de..e1f9d0c2 100644 --- a/QSB/TransformSync/PlayerTransformSync.cs +++ b/QSB/TransformSync/PlayerTransformSync.cs @@ -1,4 +1,5 @@ using QSB.Animation; +using QSB.Utility; using UnityEngine; namespace QSB.TransformSync @@ -9,11 +10,19 @@ namespace QSB.TransformSync static PlayerTransformSync() { + DebugLog.ToConsole("constructor of playertransformsync"); AnimControllerPatch.Init(); } + public override void OnNetworkDestroy() + { + DebugLog.ToConsole("PlayerTransformSync on network destroy"); + base.OnNetworkDestroy(); + } + public override void OnStartLocalPlayer() { + DebugLog.ToConsole("onstartlocalplayer of playertransformsync, id of " + PlayerId); LocalInstance = this; } diff --git a/QSB/TransformSync/TransformSync.cs b/QSB/TransformSync/TransformSync.cs index 35d3bdd3..c9609564 100644 --- a/QSB/TransformSync/TransformSync.cs +++ b/QSB/TransformSync/TransformSync.cs @@ -22,6 +22,7 @@ namespace QSB.TransformSync protected virtual void Awake() { + DebugLog.ToConsole($"Adding {GetType().Name} of id {netId.Value} to transformsync list."); PlayerRegistry.TransformSyncs.Add(this); DontDestroyOnLoad(gameObject); QSBSceneManager.OnSceneLoaded += OnSceneLoaded;