Skip to content

Commit a701622

Browse files
committed
resolving null refs
making sure we don't call OnClientDisconnect multiple times in ServerBossRoomState Cleaning up callbacks in ServerBossRoomState
1 parent 0d1df3e commit a701622

File tree

4 files changed

+23
-37
lines changed

4 files changed

+23
-37
lines changed

Assets/Scripts/Gameplay/GameState/ClientMainMenuState.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,11 @@ private void OnSignInFailed()
106106

107107
protected override void OnDestroy()
108108
{
109-
m_ProfileManager.onProfileChanged -= OnProfileChanged;
109+
if (m_ProfileManager != null)
110+
{
111+
m_ProfileManager.onProfileChanged -= OnProfileChanged;
112+
}
113+
110114
base.OnDestroy();
111115
}
112116

Assets/Scripts/Gameplay/GameState/ServerBossRoomState.cs

Lines changed: 12 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -72,51 +72,29 @@ void OnNetworkSpawn()
7272
return;
7373
}
7474

75-
NetworkManager.Singleton.SceneManager.OnLoadComplete += OnServerLoadComplete;
76-
NetworkManager.Singleton.SceneManager.OnUnloadComplete += OnServerUnloadComplete;
77-
}
78-
79-
void OnNetworkDespawn()
80-
{
81-
NetworkManager.Singleton.SceneManager.OnLoadComplete -= OnServerLoadComplete;
82-
NetworkManager.Singleton.SceneManager.OnUnloadComplete -= OnServerUnloadComplete;
83-
}
84-
85-
void OnServerLoadComplete(ulong clientId, string sceneName, LoadSceneMode loadSceneMode)
86-
{
87-
if (clientId != NetworkManager.ServerClientId)
88-
{
89-
return;
90-
}
91-
9275
// reset win state
9376
SetWinState(WinState.Invalid);
9477

95-
NetworkManager.Singleton.OnClientDisconnectCallback += OnClientDisconnect;
96-
NetworkManager.Singleton.SceneManager.OnLoadEventCompleted += OnLoadEventCompleted;
97-
NetworkManager.Singleton.SceneManager.OnSynchronizeComplete += OnSynchronizeComplete;
78+
NetworkManager.Singleton.OnClientDisconnectCallback += OnClientDisconnectCheckGameOver;
79+
NetworkManager.Singleton.SceneManager.OnLoadEventCompleted += OnLoadEventCompletedSpawnAllPlayers;
80+
NetworkManager.Singleton.SceneManager.OnSynchronizeComplete += OnSynchronizeCompleteForLateJoin;
9881

9982
SessionManager<SessionPlayerData>.Instance.OnSessionStarted();
10083
m_Subscription = m_LifeStateChangedEventMessageSubscriber.Subscribe(OnLifeStateChangedEventMessage);
10184
}
10285

103-
void OnServerUnloadComplete(ulong clientId, string sceneName)
86+
void OnNetworkDespawn()
10487
{
105-
if (clientId != NetworkManager.ServerClientId)
106-
{
107-
return;
108-
}
88+
NetworkManager.Singleton.OnClientDisconnectCallback -= OnClientDisconnectCheckGameOver;
89+
NetworkManager.Singleton.SceneManager.OnLoadEventCompleted -= OnLoadEventCompletedSpawnAllPlayers;
90+
NetworkManager.Singleton.SceneManager.OnSynchronizeComplete -= OnSynchronizeCompleteForLateJoin;
10991

110-
NetworkManager.Singleton.OnClientDisconnectCallback -= OnClientDisconnect;
111-
NetworkManager.Singleton.SceneManager.OnLoadEventCompleted -= OnLoadEventCompleted;
112-
NetworkManager.Singleton.SceneManager.OnSynchronizeComplete -= OnSynchronizeComplete;
92+
SessionManager<SessionPlayerData>.Instance.OnSessionEnded();
11393
m_Subscription?.Dispose();
11494
}
11595

11696
protected override void OnDestroy()
11797
{
118-
m_Subscription?.Dispose();
119-
12098
if (m_NetcodeHooks)
12199
{
122100
m_NetcodeHooks.OnNetworkSpawnHook -= OnNetworkSpawn;
@@ -126,7 +104,7 @@ protected override void OnDestroy()
126104
base.OnDestroy();
127105
}
128106

129-
void OnSynchronizeComplete(ulong clientId)
107+
void OnSynchronizeCompleteForLateJoin(ulong clientId)
130108
{
131109
if (InitialSpawnDone && !PlayerServerCharacter.GetPlayerServerCharacter(clientId))
132110
{
@@ -138,7 +116,7 @@ void OnSynchronizeComplete(ulong clientId)
138116
}
139117
}
140118

141-
void OnLoadEventCompleted(string sceneName, LoadSceneMode loadSceneMode, List<ulong> clientsCompleted, List<ulong> clientsTimedOut)
119+
void OnLoadEventCompletedSpawnAllPlayers(string sceneName, LoadSceneMode loadSceneMode, List<ulong> clientsCompleted, List<ulong> clientsTimedOut)
142120
{
143121
if (!InitialSpawnDone && loadSceneMode == LoadSceneMode.Single)
144122
{
@@ -150,8 +128,9 @@ void OnLoadEventCompleted(string sceneName, LoadSceneMode loadSceneMode, List<ul
150128
}
151129
}
152130

153-
void OnClientDisconnect(ulong clientId)
131+
void OnClientDisconnectCheckGameOver(ulong clientId)
154132
{
133+
//TODO exception in on client disconnect causes a bunch of bugs in NGO?
155134
if (clientId != NetworkManager.Singleton.LocalClientId)
156135
{
157136
// If a client disconnects, check for game over in case all other players are already down

Assets/Scripts/Gameplay/GameState/ServerCharSelectState.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,11 @@ protected override void Awake()
4646
protected override void OnDestroy()
4747
{
4848
base.OnDestroy();
49-
NetworkManager.Singleton.SceneManager.VerifySceneBeforeLoading -= DontSyncClientOnlyScenes;
49+
if (NetworkManager.Singleton != null && NetworkManager.Singleton.SceneManager != null)
50+
{
51+
NetworkManager.Singleton.SceneManager.VerifySceneBeforeLoading -= DontSyncClientOnlyScenes;
52+
}
53+
5054
if (m_NetcodeHooks)
5155
{
5256
m_NetcodeHooks.OnNetworkSpawnHook -= OnNetworkSpawn;

Assets/Scripts/Gameplay/GameState/ServerPostGameState.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,7 @@ void OnNetworkSpawn()
3131
}
3232
else
3333
{
34-
SessionManager<SessionPlayerData>.Instance.OnSessionEnded();
35-
34+
3635
if (DedicatedServerUtilities.IsServerBuildTarget)
3736
{
3837
IEnumerator WaitAndStartNewGame()

0 commit comments

Comments
 (0)