Skip to content

Commit d2ab5db

Browse files
committed
Add OwnershipPermissions tests
1 parent 6f599b5 commit d2ab5db

File tree

3 files changed

+90
-33
lines changed

3 files changed

+90
-33
lines changed

com.unity.netcode.gameobjects/Runtime/Core/NetworkObject.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -657,7 +657,7 @@ public OwnershipRequestStatus RequestOwnership()
657657
}
658658

659659
// Exit early if it doesn't have the RequestRequired flag
660-
if (!IsOwnershipRequestRequired || IsOwnershipSessionOwner)
660+
if (!IsOwnershipRequestRequired)
661661
{
662662
return OwnershipRequestStatus.RequestRequiredNotSet;
663663
}
@@ -875,9 +875,13 @@ public bool SetOwnershipStatus(OwnershipStatus status, bool clearAndSet = false,
875875

876876
if (status.HasFlag(OwnershipStatus.SessionOwner))
877877
{
878-
879878
Ownership = OwnershipStatus.SessionOwner;
880879
}
880+
else if (Ownership.HasFlag(OwnershipStatus.SessionOwner))
881+
{
882+
NetworkLog.LogWarning("No other ownership statuses may be set while SessionOwner is set.");
883+
return false;
884+
}
881885
else
882886
{
883887
// Faster to just OR a None status than to check

com.unity.netcode.gameobjects/Runtime/Spawning/NetworkSpawnManager.cs

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -455,18 +455,20 @@ internal void ChangeOwnership(NetworkObject networkObject, ulong clientId, bool
455455

456456
if (NetworkManager.DistributedAuthorityMode)
457457
{
458-
// If are not authorized and this is not an approved ownership change, then check to see if we can change ownership
459-
if (!isAuthorized && !isRequestApproval)
458+
// Ensure we are not changing the ownership of an object marked as IsSessionOwner
459+
if (networkObject.IsOwnershipSessionOwner)
460460
{
461-
if (networkObject.IsOwnershipSessionOwner)
461+
if (NetworkManager.LogLevel <= LogLevel.Developer)
462462
{
463-
if (NetworkManager.LogLevel <= LogLevel.Developer)
464-
{
465-
NetworkLog.LogErrorServer($"[{networkObject.name}][Session Owner Only] You cannot change ownership of a {nameof(NetworkObject)} that has the {NetworkObject.OwnershipStatus.SessionOwner} flag set!");
466-
}
467-
networkObject.OnOwnershipPermissionsFailure?.Invoke(NetworkObject.OwnershipPermissionsFailureStatus.SessionOwnerOnly);
468-
return;
463+
NetworkLog.LogErrorServer($"[{networkObject.name}][Session Owner Only] You cannot change ownership of a {nameof(NetworkObject)} that has the {NetworkObject.OwnershipStatus.SessionOwner} flag set!");
469464
}
465+
networkObject.OnOwnershipPermissionsFailure?.Invoke(NetworkObject.OwnershipPermissionsFailureStatus.SessionOwnerOnly);
466+
return;
467+
}
468+
469+
// If are not authorized and this is not an approved ownership change, then check to see if we can change ownership
470+
if (!isAuthorized && !isRequestApproval)
471+
{
470472
if (networkObject.IsOwnershipLocked)
471473
{
472474
if (NetworkManager.LogLevel <= LogLevel.Developer)

0 commit comments

Comments
 (0)