Example #1
0
        /// <summary>
        /// Handle set owner messages on the host.
        /// </summary>
        public static void SetOwnerHandler(Network.Messages.ObjectSyncMessage msg, ObjectSyncComponent osc, Steamworks.CSteamID sender)
        {
            NetPlayer player = NetManager.Instance.GetPlayer(sender);

            // No one owns the object, accept ownership request.
            if (osc.Owner == null || osc.Owner == player)
            {
                osc.Owner = player;
                osc.OwnerSetToRemote(NetManager.Instance.GetPlayer(sender));
                SendSyncResponse(player, msg.objectID, true);

                // Send updated ownership info to other clients.
                Network.Messages.ObjectSyncMessage msgBroadcast = new Network.Messages.ObjectSyncMessage();
                msgBroadcast.objectID      = msg.objectID;
                msgBroadcast.OwnerPlayerID = NetManager.Instance.GetPlayerIDBySteamID(sender);
                msgBroadcast.SyncType      = (int)SyncTypes.SetOwner;
                NetManager.Instance.BroadcastMessage(msgBroadcast, Steamworks.EP2PSend.k_EP2PSendReliable);
            }
            // Someone else owns the object, deny ownership request.
            else
            {
                SendSyncResponse(player, msg.objectID, false);
            }
        }