Skip to content

Commit 23aa716

Browse files
committed
Added fix to other server-only NetworkBehaviors
1 parent 53e3477 commit 23aa716

File tree

9 files changed

+137
-60
lines changed

9 files changed

+137
-60
lines changed

Assets/BossRoom/Scripts/Server/Game/Character/ServerCharacter.cs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,13 +61,16 @@ public bool IsNpc
6161
private void Awake()
6262
{
6363
m_ActionPlayer = new ActionPlayer(this);
64+
// Disable this NetworkBehavior until it is spawned. This prevents unwanted behavior when this is loaded before being spawned, such as during client synchronization
65+
enabled = false;
6466
}
6567

6668
public override void OnNetworkSpawn()
6769
{
68-
if (!IsServer) { enabled = false; }
69-
else
70+
// Should only be enabled on server
71+
if (IsServer)
7072
{
73+
enabled = true;
7174
NetState.DoActionEventServer += OnActionPlayRequest;
7275
NetState.ReceivedClientInput += OnClientMoveRequest;
7376
NetState.OnStopChargingUpServer += OnStoppedChargingUp;
@@ -103,6 +106,11 @@ public override void OnNetworkDespawn()
103106
m_DamageReceiver.damageReceived -= ReceiveHP;
104107
m_DamageReceiver.collisionEntered -= CollisionEntered;
105108
}
109+
if (IsServer)
110+
{
111+
// Disable server components when despawning
112+
enabled = false;
113+
}
106114
}
107115

108116
/// <summary>

Assets/BossRoom/Scripts/Server/Game/Character/ServerCharacterMovement.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public class ServerCharacterMovement : NetworkBehaviour
4747
private void Awake()
4848
{
4949
m_NavigationSystem = GameObject.FindGameObjectWithTag(NavigationSystem.NavigationSystemTag).GetComponent<NavigationSystem>();
50-
// disable this NetworkBehavior until it is spawned
50+
// Disable this NetworkBehavior until it is spawned. This prevents unwanted behavior when this is loaded before being spawned, such as during client synchronization
5151
enabled = false;
5252
}
5353

Assets/BossRoom/Scripts/Server/Game/Entity/RaiseEventOnLifeChange.cs

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,31 @@ public class RaiseEventOnLifeChange : NetworkBehaviour
1919
[SerializeField]
2020
LifeState m_RaiseCondition;
2121

22+
void Awake()
23+
{
24+
// Disable this NetworkBehavior until it is spawned. This prevents unwanted behavior when this is loaded before being spawned, such as during client synchronization
25+
enabled = false;
26+
}
27+
2228
public override void OnNetworkSpawn()
2329
{
24-
if (!IsServer)
30+
if (IsServer)
2531
{
26-
enabled = false;
27-
return;
28-
}
32+
enabled = true;
2933

30-
Assert.IsNotNull(m_NetworkLifeState, "NetworkLifeState has not been set!");
34+
Assert.IsNotNull(m_NetworkLifeState, "NetworkLifeState has not been set!");
3135

32-
m_NetworkLifeState.LifeState.OnValueChanged += LifeStateChanged;
36+
m_NetworkLifeState.LifeState.OnValueChanged += LifeStateChanged;
37+
}
3338
}
3439

3540
public override void OnNetworkDespawn()
3641
{
37-
m_NetworkLifeState.LifeState.OnValueChanged -= LifeStateChanged;
42+
if (IsServer)
43+
{
44+
enabled = false;
45+
m_NetworkLifeState.LifeState.OnValueChanged -= LifeStateChanged;
46+
}
3847
}
3948

4049
void LifeStateChanged(LifeState previousValue, LifeState newValue)

Assets/BossRoom/Scripts/Server/Game/Entity/ServerBreakableLogic.cs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,23 +30,30 @@ public class ServerBreakableLogic : NetworkBehaviour, IDamageable
3030
private void Awake()
3131
{
3232
m_State = GetComponent<NetworkBreakableState>();
33+
// Disable this NetworkBehavior until it is spawned. This prevents unwanted behavior when this is loaded before being spawned, such as during client synchronization
34+
enabled = false;
3335
}
3436

3537
public override void OnNetworkSpawn()
3638
{
37-
if (!IsServer)
38-
{
39-
enabled = false;
40-
}
41-
else
39+
if (IsServer)
4240
{
41+
enabled = true;
4342
if (m_MaxHealth && m_NetworkHealthState)
4443
{
4544
m_NetworkHealthState.HitPoints.Value = m_MaxHealth.Value;
4645
}
4746
}
4847
}
4948

49+
public override void OnNetworkDespawn()
50+
{
51+
if (IsServer)
52+
{
53+
enabled = false;
54+
}
55+
}
56+
5057
public void ReceiveHP(ServerCharacter inflicter, int HP)
5158
{
5259
if (HP < 0)

Assets/BossRoom/Scripts/Server/Game/Entity/ServerEnemyPortal.cs

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -41,33 +41,38 @@ private void Awake()
4141
{
4242
m_WaveSpawner = GetComponent<ServerWaveSpawner>();
4343
m_State = GetComponent<NetworkBreakableState>();
44+
// Disable this NetworkBehavior until it is spawned. This prevents unwanted behavior when this is loaded before being spawned, such as during client synchronization
45+
enabled = false;
4446
}
4547

4648
public override void OnNetworkSpawn()
4749
{
48-
if (!IsServer)
50+
if (IsServer)
4951
{
50-
enabled = false;
51-
return;
52-
}
52+
enabled = true;
5353

54-
foreach (var breakable in m_BreakableElements)
55-
{
56-
breakable.IsBroken.OnValueChanged += OnBreakableBroken;
57-
}
54+
foreach (var breakable in m_BreakableElements)
55+
{
56+
breakable.IsBroken.OnValueChanged += OnBreakableBroken;
57+
}
5858

59-
MaintainState();
59+
MaintainState();
60+
}
6061
}
6162

6263
public override void OnNetworkDespawn()
6364
{
64-
if (m_CoroDormant != null)
65-
StopCoroutine(m_CoroDormant);
66-
67-
foreach (var breakable in m_BreakableElements)
65+
if (IsServer)
6866
{
69-
if (breakable)
70-
breakable.IsBroken.OnValueChanged -= OnBreakableBroken;
67+
enabled = false;
68+
if (m_CoroDormant != null)
69+
StopCoroutine(m_CoroDormant);
70+
71+
foreach (var breakable in m_BreakableElements)
72+
{
73+
if (breakable)
74+
breakable.IsBroken.OnValueChanged -= OnBreakableBroken;
75+
}
7176
}
7277
}
7378

Assets/BossRoom/Scripts/Server/Game/Entity/ServerProjectileLogic.cs

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System;
12
using System.Collections.Generic;
23
using System.IO;
34
using Unity.Netcode;
@@ -56,6 +57,12 @@ public class ServerProjectileLogic : NetworkBehaviour
5657
/// </summary>
5758
private bool m_IsDead;
5859

60+
void Awake()
61+
{
62+
// Disable this NetworkBehavior until it is spawned. This prevents unwanted behavior when this is loaded before being spawned, such as during client synchronization
63+
enabled = false;
64+
}
65+
5966
/// <summary>
6067
/// Set everything up based on provided projectile information.
6168
/// (Note that this is called before OnNetworkSpawn(), so don't try to do any network stuff here.)
@@ -68,21 +75,29 @@ public void Initialize(ulong creatorsNetworkObjectId, in ActionDescription.Proje
6875

6976
public override void OnNetworkSpawn()
7077
{
71-
if (!IsServer)
78+
if (IsServer)
7279
{
73-
enabled = false;
74-
return;
75-
}
76-
m_Started = true;
80+
enabled = true;
81+
82+
m_Started = true;
7783

78-
m_HitTargets = new List<GameObject>();
79-
m_IsDead = false;
84+
m_HitTargets = new List<GameObject>();
85+
m_IsDead = false;
8086

81-
m_DestroyAtSec = Time.fixedTime + (m_ProjectileInfo.Range / m_ProjectileInfo.Speed_m_s);
87+
m_DestroyAtSec = Time.fixedTime + (m_ProjectileInfo.Range / m_ProjectileInfo.Speed_m_s);
8288

83-
m_CollisionMask = LayerMask.GetMask(new[] { "NPCs", "Default", "Ground" });
84-
m_BlockerMask = LayerMask.GetMask(new[] { "Default", "Ground" });
85-
m_NPCLayer = LayerMask.NameToLayer("NPCs");
89+
m_CollisionMask = LayerMask.GetMask(new[] {"NPCs", "Default", "Ground"});
90+
m_BlockerMask = LayerMask.GetMask(new[] {"Default", "Ground"});
91+
m_NPCLayer = LayerMask.NameToLayer("NPCs");
92+
}
93+
}
94+
95+
public override void OnNetworkDespawn()
96+
{
97+
if (IsServer)
98+
{
99+
enabled = false;
100+
}
86101
}
87102

88103
private void FixedUpdate()

Assets/BossRoom/Scripts/Server/Game/Entity/ServerWaveSpawner.cs

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -95,20 +95,22 @@ public class ServerWaveSpawner : NetworkBehaviour
9595
void Awake()
9696
{
9797
m_Transform = transform;
98+
// Disable this NetworkBehavior until it is spawned. This prevents unwanted behavior when this is loaded before being spawned, such as during client synchronization
99+
enabled = false;
98100
}
99101

100102
public override void OnNetworkSpawn()
101103
{
102-
if (!IsServer)
104+
if (IsServer)
103105
{
104-
enabled = false;
105-
return;
106-
}
107-
m_Hit = new RaycastHit[1];
108-
m_IsStarted = true;
109-
if (m_IsSpawnerEnabled)
110-
{
111-
StartWaveSpawning();
106+
enabled = true;
107+
108+
m_Hit = new RaycastHit[1];
109+
m_IsStarted = true;
110+
if (m_IsSpawnerEnabled)
111+
{
112+
StartWaveSpawning();
113+
}
112114
}
113115
}
114116

@@ -150,7 +152,11 @@ void StopWaveSpawning()
150152

151153
public override void OnNetworkDespawn()
152154
{
153-
StopWaveSpawning();
155+
if (IsServer)
156+
{
157+
enabled = false;
158+
StopWaveSpawning();
159+
}
154160
}
155161

156162
/// <summary>

Assets/BossRoom/Scripts/Server/ServerFloorSwitch.cs

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,19 +29,33 @@ public class ServerFloorSwitch : NetworkBehaviour
2929

3030
void Awake()
3131
{
32-
m_Collider.isTrigger = true;
32+
// Disable this NetworkBehavior until it is spawned. This prevents unwanted behavior when this is loaded before being spawned, such as during client synchronization
33+
enabled = false;
34+
m_Collider.enabled = false;
3335
}
3436

3537
public override void OnNetworkSpawn()
3638
{
37-
if (!IsServer)
39+
if (IsServer)
3840
{
39-
enabled = false;
41+
enabled = true;
42+
m_Collider.enabled = true;
43+
m_Collider.isTrigger = true;
44+
45+
FloorSwitchStateChanged(false, m_FloorSwitchState.IsSwitchedOn.Value);
46+
47+
m_FloorSwitchState.IsSwitchedOn.OnValueChanged += FloorSwitchStateChanged;
4048
}
49+
}
4150

42-
FloorSwitchStateChanged(false, m_FloorSwitchState.IsSwitchedOn.Value);
51+
public override void OnNetworkDespawn()
52+
{
53+
if (IsServer)
54+
{
55+
enabled = false;
4356

44-
m_FloorSwitchState.IsSwitchedOn.OnValueChanged += FloorSwitchStateChanged;
57+
m_FloorSwitchState.IsSwitchedOn.OnValueChanged -= FloorSwitchStateChanged;
58+
}
4559
}
4660

4761
void OnTriggerEnter(Collider other)

Assets/BossRoom/Scripts/Server/ServerSwitchedDoor.cs

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public class ServerSwitchedDoor : NetworkBehaviour
2828

2929
void Awake()
3030
{
31-
// don't let Update() run until after OnNetworkSpawn()
31+
// Disable this NetworkBehavior until it is spawned. This prevents unwanted behavior when this is loaded before being spawned, such as during client synchronization
3232
enabled = false;
3333

3434
if (m_SwitchesThatOpenThisDoor.Length == 0)
@@ -37,11 +37,24 @@ void Awake()
3737

3838
public override void OnNetworkSpawn()
3939
{
40-
enabled = IsServer;
40+
if (IsServer)
41+
{
42+
enabled = true;
43+
44+
DoorStateChanged(false, m_NetworkDoorState.IsOpen.Value);
45+
46+
m_NetworkDoorState.IsOpen.OnValueChanged += DoorStateChanged;
47+
}
48+
}
4149

42-
DoorStateChanged(false, m_NetworkDoorState.IsOpen.Value);
50+
public override void OnNetworkDespawn()
51+
{
52+
if (IsServer)
53+
{
54+
enabled = false;
4355

44-
m_NetworkDoorState.IsOpen.OnValueChanged += DoorStateChanged;
56+
m_NetworkDoorState.IsOpen.OnValueChanged -= DoorStateChanged;
57+
}
4558
}
4659

4760
void Update()

0 commit comments

Comments
 (0)