mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-03-12 13:13:32 +00:00
start of disconnect remake
This commit is contained in:
parent
75ca997a05
commit
d1f28bf2df
@ -43,7 +43,6 @@ namespace QSB.Animation
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
_netAnim.enabled = false;
|
||||
if (_playerController == null)
|
||||
{
|
||||
return;
|
||||
|
@ -21,7 +21,6 @@
|
||||
|
||||
public static string QSBPlayerDeath = "QSBPlayerDeath";
|
||||
public static string QSBPlayerJoin = "QSBPlayerJoin";
|
||||
public static string QSBPlayerLeave = "QSBPlayerLeave";
|
||||
public static string QSBPlayerReady = "QSBPlayerReady";
|
||||
public static string QSBSectorChange = "QSBSectorChange";
|
||||
public static string QSBPlayerStatesRequest = "QSBPlayerStatesRequest";
|
||||
|
@ -13,7 +13,6 @@
|
||||
ProbeLauncherActiveChange,
|
||||
SuitActiveChange,
|
||||
PlayerJoin,
|
||||
PlayerLeave,
|
||||
PlayerDeath,
|
||||
PlayerSectorChange,
|
||||
PlayerReady,
|
||||
|
@ -34,7 +34,6 @@ namespace QSB.EventsCore
|
||||
new PlayerProbeLauncherEvent(),
|
||||
new PlayerProbeEvent(),
|
||||
new PlayerSectorEvent(),
|
||||
new PlayerLeaveEvent(),
|
||||
new PlayerDeathEvent(),
|
||||
new PlayerStatesRequestEvent(),
|
||||
new ElevatorEvent(),
|
||||
|
@ -45,7 +45,6 @@ namespace QSB.Instruments
|
||||
{
|
||||
return;
|
||||
}
|
||||
DebugLog.DebugWrite($"OnDestroy {PlayerId}");
|
||||
QSBInputManager.ChertTaunt -= () => StartInstrument(AnimationType.Chert);
|
||||
QSBInputManager.EskerTaunt -= () => StartInstrument(AnimationType.Esker);
|
||||
QSBInputManager.FeldsparTaunt -= () => StartInstrument(AnimationType.Feldspar);
|
||||
|
@ -1,6 +1,4 @@
|
||||
using OWML.Common;
|
||||
using QSB.EventsCore;
|
||||
using QSB.Utility;
|
||||
using QSB.EventsCore;
|
||||
using QuantumUNET;
|
||||
using QuantumUNET.Components;
|
||||
using QuantumUNET.Messages;
|
||||
@ -35,8 +33,8 @@ namespace QSB.Messaging
|
||||
{
|
||||
if (QSBNetworkServer.handlers.Keys.Contains(_eventType))
|
||||
{
|
||||
DebugLog.ToConsole($"Warning - NetworkServer already contains a handler for EventType {BaseEventType}", MessageType.Warning);
|
||||
QSBNetworkServer.handlers.Remove(_eventType);
|
||||
QSBNetworkManagerUNET.singleton.client.handlers.Remove(_eventType);
|
||||
}
|
||||
QSBNetworkServer.RegisterHandler(_eventType, OnServerReceiveMessageHandler);
|
||||
QSBNetworkManagerUNET.singleton.client.RegisterHandler(_eventType, OnClientReceiveMessageHandler);
|
||||
|
@ -1,32 +0,0 @@
|
||||
using OWML.Common;
|
||||
using QSB.EventsCore;
|
||||
using QSB.Utility;
|
||||
using System.Linq;
|
||||
|
||||
namespace QSB.Player.Events
|
||||
{
|
||||
public class PlayerLeaveEvent : QSBEvent<PlayerLeaveMessage>
|
||||
{
|
||||
public override EventType Type => EventType.PlayerLeave;
|
||||
|
||||
public override void SetupListener() => GlobalMessenger<uint, uint[]>.AddListener(EventNames.QSBPlayerLeave, Handler);
|
||||
public override void CloseListener() => GlobalMessenger<uint, uint[]>.RemoveListener(EventNames.QSBPlayerLeave, Handler);
|
||||
|
||||
private void Handler(uint playerId, uint[] netIds) => SendEvent(CreateMessage(playerId, netIds));
|
||||
|
||||
private PlayerLeaveMessage CreateMessage(uint playerId, uint[] netIds) => new PlayerLeaveMessage
|
||||
{
|
||||
AboutId = playerId,
|
||||
NetIds = netIds
|
||||
};
|
||||
|
||||
public override void OnReceiveRemote(bool server, PlayerLeaveMessage message)
|
||||
{
|
||||
var playerName = QSBPlayerManager.GetPlayer(message.AboutId).Name;
|
||||
DebugLog.ToAll($"{playerName} disconnected.", MessageType.Info);
|
||||
QSBPlayerManager.GetPlayer(message.AboutId).HudMarker?.Remove();
|
||||
QSBPlayerManager.RemovePlayer(message.AboutId);
|
||||
message.NetIds.ToList().ForEach(netId => QSBNetworkManager.Instance.CleanupNetworkBehaviour(netId));
|
||||
}
|
||||
}
|
||||
}
|
@ -1,24 +0,0 @@
|
||||
using QSB.Messaging;
|
||||
using QuantumUNET;
|
||||
using System;
|
||||
using System.Linq;
|
||||
|
||||
namespace QSB.Player.Events
|
||||
{
|
||||
public class PlayerLeaveMessage : PlayerMessage
|
||||
{
|
||||
public uint[] NetIds { get; set; }
|
||||
|
||||
public override void Deserialize(QSBNetworkReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
NetIds = reader.ReadString().Split(',').Select(x => Convert.ToUInt32(x)).ToArray();
|
||||
}
|
||||
|
||||
public override void Serialize(QSBNetworkWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(string.Join(",", NetIds.Select(x => x.ToString()).ToArray()));
|
||||
}
|
||||
}
|
||||
}
|
@ -171,7 +171,6 @@
|
||||
<Compile Include="TimeSync\WakeUpPatches.cs" />
|
||||
<Compile Include="Tools\Events\PlayerFlashlightEvent.cs" />
|
||||
<Compile Include="Player\Events\PlayerJoinEvent.cs" />
|
||||
<Compile Include="Player\Events\PlayerLeaveEvent.cs" />
|
||||
<Compile Include="Tools\Events\PlayerProbeEvent.cs" />
|
||||
<Compile Include="Player\Events\PlayerReadyEvent.cs" />
|
||||
<Compile Include="TransformSync\NomaiOrbTransformSync.cs" />
|
||||
@ -182,7 +181,6 @@
|
||||
<Compile Include="GeyserSync\Events\GeyserEvent.cs" />
|
||||
<Compile Include="GeyserSync\GeyserManager.cs" />
|
||||
<Compile Include="GeyserSync\QSBGeyser.cs" />
|
||||
<Compile Include="Player\Events\PlayerLeaveMessage.cs" />
|
||||
<Compile Include="Tools\Events\PlayerProbeLauncherEvent.cs" />
|
||||
<Compile Include="Tools\Events\PlayerSignalscopeEvent.cs" />
|
||||
<Compile Include="Tools\Events\PlayerTranslatorEvent.cs" />
|
||||
|
@ -218,10 +218,6 @@ namespace QSB
|
||||
QSBEventManager.Reset();
|
||||
QSBPlayerManager.PlayerList.ForEach(player => player.HudMarker?.Remove());
|
||||
|
||||
foreach (var player in QSBPlayerManager.PlayerList)
|
||||
{
|
||||
QSBPlayerManager.GetPlayerNetIds(player).ForEach(CleanupNetworkBehaviour);
|
||||
}
|
||||
QSBPlayerManager.RemoveAllPlayers();
|
||||
|
||||
QSBWorldSync.RemoveWorldObjects<QSBOrbSlot>();
|
||||
@ -236,10 +232,8 @@ namespace QSB
|
||||
|
||||
public override void OnServerDisconnect(QSBNetworkConnection connection) // Called on the server when any client disconnects
|
||||
{
|
||||
base.OnServerDisconnect(connection);
|
||||
DebugLog.DebugWrite("OnServerDisconnect", MessageType.Info);
|
||||
var player = connection.GetPlayer();
|
||||
var netIds = connection.ClientOwnedObjects.Select(x => x.Value).ToArray();
|
||||
GlobalMessenger<uint, uint[]>.FireEvent(EventNames.QSBPlayerLeave, player.PlayerId, netIds);
|
||||
|
||||
foreach (var item in QSBWorldSync.OrbSyncList)
|
||||
{
|
||||
@ -250,8 +244,7 @@ namespace QSB
|
||||
}
|
||||
}
|
||||
|
||||
player.HudMarker?.Remove();
|
||||
CleanupConnection(connection);
|
||||
QSBPlayerManager.PlayerList.ForEach(player => player.HudMarker?.Remove());
|
||||
}
|
||||
|
||||
public override void OnStopServer()
|
||||
@ -263,7 +256,6 @@ namespace QSB
|
||||
QSBEventManager.Reset();
|
||||
DebugLog.ToConsole("[S] Server stopped!", MessageType.Info);
|
||||
QSBPlayerManager.PlayerList.ForEach(player => player.HudMarker?.Remove());
|
||||
QSBNetworkServer.connections.ToList().ForEach(CleanupConnection);
|
||||
|
||||
QSBWorldSync.RemoveWorldObjects<QSBOrbSlot>();
|
||||
QSBWorldSync.RemoveWorldObjects<QSBElevator>();
|
||||
@ -272,52 +264,5 @@ namespace QSB
|
||||
|
||||
base.OnStopServer();
|
||||
}
|
||||
|
||||
private void CleanupConnection(QSBNetworkConnection connection)
|
||||
{
|
||||
var player = connection.GetPlayer();
|
||||
DebugLog.ToConsole($"{player.Name} disconnected.", MessageType.Info);
|
||||
QSBPlayerManager.RemovePlayer(player.PlayerId);
|
||||
|
||||
var netIds = connection.ClientOwnedObjects?.Select(x => x.Value).ToList();
|
||||
netIds.ForEach(CleanupNetworkBehaviour);
|
||||
}
|
||||
|
||||
public void CleanupNetworkBehaviour(uint netId)
|
||||
{
|
||||
DebugLog.DebugWrite($"Cleaning up netId {netId}");
|
||||
// Multiple networkbehaviours can use the same networkidentity (same netId), so get all of them
|
||||
var networkBehaviours = FindObjectsOfType<QSBNetworkBehaviour>()
|
||||
.Where(x => x != null && x.NetId.Value == netId);
|
||||
foreach (var networkBehaviour in networkBehaviours)
|
||||
{
|
||||
var transformSync = networkBehaviour.GetComponent<TransformSync.TransformSync>();
|
||||
|
||||
if (transformSync != null)
|
||||
{
|
||||
DebugLog.DebugWrite($" * Removing TransformSync from syncobjects");
|
||||
QSBPlayerManager.PlayerSyncObjects.Remove(transformSync);
|
||||
if (transformSync.SyncedTransform != null && netId != QSBPlayerManager.LocalPlayerId && !networkBehaviour.HasAuthority)
|
||||
{
|
||||
DebugLog.DebugWrite($" * Destroying {transformSync.SyncedTransform.gameObject.name}");
|
||||
Destroy(transformSync.SyncedTransform.gameObject);
|
||||
}
|
||||
}
|
||||
|
||||
var animationSync = networkBehaviour.GetComponent<AnimationSync>();
|
||||
|
||||
if (animationSync != null)
|
||||
{
|
||||
DebugLog.DebugWrite($" * Removing AnimationSync from syncobjects");
|
||||
QSBPlayerManager.PlayerSyncObjects.Remove(animationSync);
|
||||
}
|
||||
|
||||
if (!networkBehaviour.HasAuthority)
|
||||
{
|
||||
DebugLog.DebugWrite($" * Destroying {networkBehaviour.gameObject.name}");
|
||||
Destroy(networkBehaviour.gameObject);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -32,6 +32,10 @@ namespace QSB.TransformSync
|
||||
protected virtual void OnDestroy()
|
||||
{
|
||||
QSBPlayerManager.PlayerSyncObjects.Remove(this);
|
||||
if (!HasAuthority && SyncedTransform != null)
|
||||
{
|
||||
Destroy(SyncedTransform.gameObject);
|
||||
}
|
||||
QSBSceneManager.OnSceneLoaded -= OnSceneLoaded;
|
||||
}
|
||||
|
||||
@ -43,6 +47,7 @@ namespace QSB.TransformSync
|
||||
protected void Init()
|
||||
{
|
||||
SyncedTransform = HasAuthority ? InitLocalTransform() : InitRemoteTransform();
|
||||
SetReferenceSector(QSBSectorManager.Instance.GetClosestSector(SyncedTransform));
|
||||
_isInitialized = true;
|
||||
_isVisible = true;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user