private static void OnRefillFromBottle(MySyncCharacter syncObject, ref RefillFromBottleMsg message, MyNetworkClient sender)
 {
     if (syncObject.Entity == MySession.LocalCharacter)
     {
         syncObject.Entity.ShowRefillFromBottleNotification();
     }
 }
 private static void OnRefillFromBottle(MySyncCharacter syncObject, ref RefillFromBottleMsg message, MyNetworkClient sender)
 {
     if (syncObject.Entity == MySession.Static.LocalCharacter && syncObject.Entity.OxygenComponent != null)
     {
         syncObject.Entity.OxygenComponent.ShowRefillFromBottleNotification(message.GasId);
     }
 }
        private static void OnPlayerMessageRequest(MySyncCharacter sync, ref SendPlayerMessageMsg msg, MyNetworkClient sender)
        {
            //Ignore messages that have improper lengths
            if (msg.Text.Length == 0 || msg.Text.Length > MyChatConstants.MAX_CHAT_STRING_LENGTH)
            {
                return;
            }

            var receiverId = MySession.Static.Players.TryGetPlayerIdentity(new MyPlayer.PlayerId(msg.ReceiverSteamId));
            var senderId   = MySession.Static.Players.TryGetPlayerIdentity(new MyPlayer.PlayerId(msg.SenderSteamId));

            //TODO(AF) Check if message was already received

            if (receiverId != null && receiverId.Character != null && senderId != null && senderId.Character != null && MyAntennaSystem.CheckConnection(senderId, receiverId))
            {
                Sync.Layer.SendMessage(ref msg, msg.ReceiverSteamId, MyTransportMessageEnum.Success);
                Sync.Layer.SendMessage(ref msg, sender.SteamUserId, MyTransportMessageEnum.Success);

                //Save chat history on server for non-server players
                if (receiverId.Character != MySession.LocalCharacter)
                {
                    MyChatSystem.AddPlayerChatItem(receiverId.IdentityId, senderId.IdentityId, new MyPlayerChatItem(msg.Text, senderId.IdentityId, msg.Timestamp, true));
                }
                if (senderId.Character != MySession.LocalCharacter)
                {
                    MyChatSystem.AddPlayerChatItem(senderId.IdentityId, receiverId.IdentityId, new MyPlayerChatItem(msg.Text, senderId.IdentityId, msg.Timestamp, true));
                }
            }
        }
        private static void OnFlagsChanged(MySyncCharacter sync, ref ChangeFlagsMsg msg, MyNetworkClient sender)
        {
            if (MyFakes.CHARACTER_SERVER_SYNC)
            {
                var handler = sync.FlagsChanged;
                if (handler != null)
                {
                    handler(msg.EnableJetpack, msg.EnableDampeners, msg.EnableLights, msg.EnableIronsight, msg.EnableBroadcast);
                }

                if (Sync.IsServer)
                {
                    Sync.Layer.SendMessageToAll(ref msg);
                }
            }
            else
            if (sync.ResponsibleForUpdate(sender))
            {
                var handler = sync.FlagsChanged;
                if (handler != null)
                {
                    handler(msg.EnableJetpack, msg.EnableDampeners, msg.EnableLights, msg.EnableIronsight, msg.EnableBroadcast);
                }
            }
        }
        private static void OnGlobalMessageRequest(MySyncCharacter sync, ref SendGlobalMessageMsg msg, MyNetworkClient sender)
        {
            //Ignore messages that have improper lengths
            if (msg.Text.Length == 0 || msg.Text.Length > MyChatConstants.MAX_CHAT_STRING_LENGTH)
            {
                return;
            }

            var senderId   = MySession.Static.Players.TryGetPlayerIdentity(new MyPlayer.PlayerId(msg.SenderSteamId));
            var allPlayers = MySession.Static.Players.GetOnlinePlayers();

            foreach (var player in allPlayers)
            {
                var receiverId = player.Identity;
                if (receiverId != null && receiverId.Character != null && senderId != null && senderId.Character != null && MyAntennaSystem.CheckConnection(senderId, receiverId))
                {
                    Sync.Layer.SendMessage(ref msg, player.Id.SteamId, MyTransportMessageEnum.Success);

                    //Save chat history on server for non-server players
                    if (receiverId.Character != MySession.LocalCharacter)
                    {
                        MyChatSystem.AddGlobalChatItem(player.Identity.IdentityId, new MyGlobalChatItem(msg.Text, senderId.IdentityId));
                    }
                }
            }
        }
        private static void OnUpdateOxygen(MySyncCharacter syncObject, ref UpdateOxygenMsg message, MyNetworkClient sender)
        {
            if (syncObject.Entity.OxygenComponent == null)
            {
                return;
            }

            syncObject.Entity.OxygenComponent.SuitOxygenAmount = message.OxygenAmount;
        }
        private static void OnFactionMessageRequest(MySyncCharacter sync, ref SendNewFactionMessageMsg msg, MyNetworkClient sender)
        {
            //Ignore messages that have improper lengths
            if (msg.ChatItem.Text.Length == 0 || msg.ChatItem.Text.Length > MyChatConstants.MAX_CHAT_STRING_LENGTH)
            {
                return;
            }

            long currentSenderId = MyEntityIdentifier.ConstructId(MyEntityIdentifier.ID_OBJECT_TYPE.IDENTITY, msg.ChatItem.IdentityIdUniqueNumber);
            var  senderId        = MySession.Static.Players.TryGetIdentity(currentSenderId);

            var chatItem = new MyFactionChatItem();

            chatItem.Init(msg.ChatItem);

            //Find all members that can receive this messages
            m_tempValidIds.Clear();
            for (int i = 0; i < msg.ChatItem.PlayersToSendToUniqueNumber.Count; i++)
            {
                if (!msg.ChatItem.IsAlreadySentTo[i])
                {
                    long receiverIdentityId = MyEntityIdentifier.ConstructId(MyEntityIdentifier.ID_OBJECT_TYPE.IDENTITY, msg.ChatItem.PlayersToSendToUniqueNumber[i]);
                    var  receiverId         = MySession.Static.Players.TryGetIdentity(receiverIdentityId);
                    if (receiverId != null && receiverId.Character != null && MyAntennaSystem.CheckConnection(senderId, receiverId))
                    {
                        m_tempValidIds.Add(receiverIdentityId);
                    }
                }
            }

            //Set their sent flag to true, so that everyone knows they already got it (no need for confirm message)
            foreach (var id in m_tempValidIds)
            {
                chatItem.PlayersToSendTo[id] = true;
            }

            //Save the flags back in the message
            msg.ChatItem = chatItem.GetObjectBuilder();

            //Send success message back to all recepient members
            foreach (var id in m_tempValidIds)
            {
                MyPlayer.PlayerId receiverPlayerId;
                MySession.Static.Players.TryGetPlayerId(id, out receiverPlayerId);
                ulong steamId = receiverPlayerId.SteamId;

                Sync.Layer.SendMessage(ref msg, steamId, MyTransportMessageEnum.Success);
            }

            //Save chat history on server for non-server players
            if (senderId.Character != MySession.LocalCharacter)
            {
                MyChatSystem.AddFactionChatItem(senderId.IdentityId, msg.FactionId1, msg.FactionId2, chatItem);
            }
        }
 private static void OnSwitchCharacterModel(MySyncCharacter sync, ref SwitchCharacterModelMsg msg, MyNetworkClient sender)
 {
     if (sync.ResponsibleForUpdate(sender))
     {
         var handler = sync.CharacterModelSwitched;
         if (handler != null)
         {
             handler(msg.Model, msg.ColorMaskHSV);
         }
     }
 }
Beispiel #9
0
 private static void OnFlagsChanged(MySyncCharacter sync, ref ChangeFlagsMsg msg, MyNetworkClient sender)
 {
     if (sync.ResponsibleForUpdate(sender))
     {
         var handler = sync.FlagsChanged;
         if (handler != null)
         {
             handler(msg.EnableJetpack, msg.EnableDampeners, msg.EnableLights, msg.EnableIronsight, msg.EnableBroadcast);
         }
     }
 }
        private static void OnUpdateStoredGas(MySyncCharacter syncObject, ref UpdateGasFillLevelMsg message, MyNetworkClient sender)
        {
            if (syncObject.Entity.OxygenComponent == null)
            {
                return;
            }

            MyDefinitionId gasId = message.GasId;

            syncObject.Entity.OxygenComponent.UpdateStoredGasLevel(ref gasId, message.FillLevel);
        }
 private static void OnMovementStateChanged(MySyncCharacter sync, ref ChangeMovementStateMsg msg, MyNetworkClient sender)
 {
     if (sync.ResponsibleForUpdate(sender))
     {
         var handler = sync.MovementStateChanged;
         if (handler != null)
         {
             handler(msg.MovementState);
         }
     }
 }
        private static void OnSecondarySoundPlay(MySyncCharacter syncObject, ref PlaySecondarySoundMsg msg, MyNetworkClient sender)
        {
            if (!MySandboxGame.IsDedicated)
            {
                syncObject.Entity.StartSecondarySound(msg.SoundId, sync: false);
            }

            if (Sync.IsServer)
            {
                Sync.Layer.SendMessageToAllButOne(ref msg, sender.SteamUserId);
            }
        }
 private static void OnAnimationCommand(MySyncCharacter sync, ref AnimationCommandMsg msg, MyNetworkClient sender)
 {
     sync.Entity.AddCommand(new MyAnimationCommand()
     {
         AnimationSubtypeName = msg.AnimationSubtypeName,
         Mode      = msg.Mode,
         Area      = msg.Area,
         BlendTime = msg.BlendTime,
         TimeScale = msg.TimeScale,
         Loop      = msg.Loop
     });
 }
 private static void OnHeadOrSpineChanged(MySyncCharacter sync, ref ChangeHeadOrSpineMsg msg, MyNetworkClient sender)
 {
     if (sync.ResponsibleForUpdate(sender))
     {
         var handler = sync.HeadOrSpineChanged;
         if (handler != null)
         {
             handler(msg.HeadLocalXAngle, msg.HeadLocalYAngle,
                     msg.AdditionalSpineRotation, msg.AdditionalHeadRotation, msg.AdditionalHandRotation, msg.AdditionalUpperHandRotation);
         }
     }
 }
        static void OnAttachToCockpit(MySyncCharacter sync, ref AttachToCockpitMsg msg, MyNetworkClient sender)
        {
            MyCharacter character = sync.Entity;
            MyCockpit   cockpit   = MyEntities.GetEntityById(msg.CockpitEntityId) as MyCockpit;

            Debug.Assert(cockpit != null);
            if (cockpit == null)
            {
                return;
            }

            cockpit.AttachPilot(character, false);
        }
 private static void OnAnimationCommand(MySyncCharacter sync, ref AnimationCommandMsg msg, MyNetworkClient sender)
 {
     sync.Entity.AddCommand(new MyAnimationCommand()
     {
         AnimationSubtypeName = msg.AnimationSubtypeName,
         PlaybackCommand      = msg.PlaybackCommand,
         BlendOption          = msg.BlendOption,
         FrameOption          = msg.FrameOption,
         Area      = msg.Area,
         BlendTime = msg.BlendTime,
         TimeScale = msg.TimeScale,
     });
 }
        private static void OnCharacterInput(MySyncCharacter sync, ref CharacterInputMsg msg, MyNetworkClient sender)
        {
            sender.ClientFrameId     = msg.ClientFrameId;
            sync.CachedMovementState = msg;

            var matrix = MatrixD.CreateFromQuaternion(msg.Orientation);

            matrix.Translation      = msg.Position;
            sync.Entity.WorldMatrix = matrix;

            if (Sync.IsServer)
            {
                Sync.Layer.SendMessageToAllButOne(ref msg, sender.SteamUserId);
            }
        }
        private static void OnGlobalMessageSuccess(MySyncCharacter sync, ref SendGlobalMessageMsg msg, MyNetworkClient sender)
        {
            var senderId = MySession.Static.Players.TryGetPlayerIdentity(new MyPlayer.PlayerId(msg.SenderSteamId));

            if (MySession.LocalCharacter != null)
            {
                MyChatSystem.AddGlobalChatItem(MySession.LocalPlayerId, new MyGlobalChatItem(msg.Text, senderId.IdentityId));
                MySession.Static.ChatSystem.OnNewGlobalMessage(senderId.IdentityId);

                if (MySession.LocalPlayerId != senderId.IdentityId)
                {
                    MySession.Static.Gpss.ScanText(msg.Text, MyTexts.GetString(MySpaceTexts.TerminalTab_GPS_NewFromBroadcast));
                }
            }
        }
        private static void OnFactionMessageSuccess(MySyncCharacter sync, ref SendNewFactionMessageMsg msg, MyNetworkClient sender)
        {
            long senderIdentityId = MyEntityIdentifier.ConstructId(MyEntityIdentifier.ID_OBJECT_TYPE.IDENTITY, msg.ChatItem.IdentityIdUniqueNumber);

            var factionChatItem = new MyFactionChatItem();

            factionChatItem.Init(msg.ChatItem);
            if (!(Sync.IsServer && senderIdentityId != MySession.LocalPlayerId))
            {
                MyChatSystem.AddFactionChatItem(MySession.LocalPlayerId, msg.FactionId1, msg.FactionId2, factionChatItem);
            }
            if (senderIdentityId != MySession.LocalPlayerId)
            {
                MySession.Static.Gpss.ScanText(factionChatItem.Text, MyTexts.GetString(MySpaceTexts.TerminalTab_GPS_NewFromFactionComms));
            }
            MySession.Static.ChatSystem.OnNewFactionMessage(msg.FactionId1, msg.FactionId2, senderIdentityId, true);
        }
 private static void OnAnimationCommand(MySyncCharacter sync, ref AnimationCommandMsg msg, MyNetworkClient sender)
 {
     sync.Entity.AddCommand(new MyAnimationCommand()
     {
         AnimationSubtypeName = msg.AnimationSubtypeName,
         PlaybackCommand      = msg.PlaybackCommand,
         BlendOption          = msg.BlendOption,
         FrameOption          = msg.FrameOption,
         Area      = msg.Area,
         BlendTime = msg.BlendTime,
         TimeScale = msg.TimeScale,
     });
     if (Sync.IsServer)
     {
         Sync.Layer.SendMessageToAllButOne(ref msg, sender.SteamUserId);
     }
 }
Beispiel #21
0
        private static void OnCharacterInput(MySyncCharacter sync, ref CharacterInputMsg msg, MyNetworkClient sender)
        {
            sender.ClientFrameId = msg.ClientFrameId;

            if (sync.Entity.GetCurrentMovementState() != MyCharacterMovementEnum.Sitting && !sync.Entity.IsDead)
            {
                // Set orientation
                var pos = sync.Entity.PositionComp.GetPosition();
                var m   = Matrix.CreateFromQuaternion(msg.Orientation);
                m.Translation           = pos;
                sync.Entity.WorldMatrix = m;

                sync.m_moveIndicator     = msg.MoveIndicator;
                sync.m_rotationIndicator = msg.RotationIndicator;
                sync.m_movementFlags     = msg.MovementFlags;
            }
        }
        private static void OnRagdollTransformsUpdate(MySyncCharacter syncObject, ref RagdollTransformsMsg message, MyNetworkClient sender)
        {
            var ragdollComponent = syncObject.Entity.Components.Get <MyCharacterRagdollComponent>();

            if (ragdollComponent == null)
            {
                return;
            }
            if (syncObject.Entity.Physics == null)
            {
                return;
            }
            if (syncObject.Entity.Physics.Ragdoll == null)
            {
                return;
            }
            if (ragdollComponent.RagdollMapper == null)
            {
                return;
            }
            if (!syncObject.Entity.Physics.Ragdoll.InWorld)
            {
                return;
            }
            if (!ragdollComponent.RagdollMapper.IsActive)
            {
                return;
            }
            Debug.Assert(message.worldOrientation != null && message.worldOrientation != Quaternion.Zero, "Received invalid ragdoll orientation from server!");
            Debug.Assert(message.worldPosition != null && message.worldPosition != Vector3.Zero, "Received invalid ragdoll orientation from server!");
            Debug.Assert(message.transformsOrientations != null && message.transformsPositions != null, "Received empty ragdoll transformations from server!");
            Debug.Assert(message.transformsPositions.Length == message.TransformsCount && message.transformsOrientations.Length == message.TransformsCount, "Received ragdoll data count doesn't match!");
            Matrix worldMatrix = Matrix.CreateFromQuaternion(message.worldOrientation);

            worldMatrix.Translation = message.worldPosition;
            Matrix[] transforms = new Matrix[message.TransformsCount];

            for (int i = 0; i < message.TransformsCount; ++i)
            {
                transforms[i]             = Matrix.CreateFromQuaternion(message.transformsOrientations[i]);
                transforms[i].Translation = message.transformsPositions[i];
            }

            ragdollComponent.RagdollMapper.UpdateRigidBodiesTransformsSynced(message.TransformsCount, worldMatrix, transforms);
        }
 private static void OnSwitchCharacterModel(MySyncCharacter sync, ref SwitchCharacterModelMsg msg, MyNetworkClient sender)
 {
     if (Sync.IsServer && sync.ResponsibleForUpdate(sender))
     {
         var handler = sync.CharacterModelSwitched;
         if (handler != null)
         {
             handler(msg.Model, msg.ColorMaskHSV);
         }
         Sync.Layer.SendMessageToAllButOne(ref msg, sender.SteamUserId);
     }
     else if (sender.SteamUserId == Sync.ServerId || sender.SteamUserId == Sync.MyId)
     {
         var handler = sync.CharacterModelSwitched;
         if (handler != null)
         {
             handler(msg.Model, msg.ColorMaskHSV);
         }
     }
 }
        private static void OnPlayerMessageSuccess(MySyncCharacter sync, ref SendPlayerMessageMsg msg, MyNetworkClient sender)
        {
            var receiverId = MySession.Static.Players.TryGetPlayerIdentity(new MyPlayer.PlayerId(msg.ReceiverSteamId));
            var senderId   = MySession.Static.Players.TryGetPlayerIdentity(new MyPlayer.PlayerId(msg.SenderSteamId));

            if (receiverId != null && receiverId.Character != null && senderId != null && senderId.Character != null)
            {
                if (receiverId.Character == MySession.LocalCharacter && receiverId.Character != senderId.Character)
                {
                    MyChatSystem.AddPlayerChatItem(receiverId.IdentityId, senderId.IdentityId, new MyPlayerChatItem(msg.Text, senderId.IdentityId, msg.Timestamp, true));
                    MySession.Static.ChatSystem.OnNewPlayerMessage(senderId.IdentityId, senderId.IdentityId);

                    MySession.Static.Gpss.ScanText(msg.Text, MyTexts.GetString(MySpaceTexts.TerminalTab_GPS_NewFromPrivateComms));
                }
                else
                {
                    MyChatSystem.SetPlayerChatItemSent(senderId.IdentityId, receiverId.IdentityId, msg.Text, new TimeSpan(msg.Timestamp), true);
                    MySession.Static.ChatSystem.OnNewPlayerMessage(receiverId.IdentityId, senderId.IdentityId);
                }
            }
        }
 private static void OnCharacterPhysicsEnabled(MySyncCharacter sync, ref SetCharacterPhysicsEnabledMsg msg, MyNetworkClient sender)
 {
     sync.Entity.Physics.Enabled = msg.Enabled;
 }
 protected override MySyncComponentBase OnCreateSync()
 {
     var result = new MySyncCharacter(this);
     result.CharacterModelSwitched += ChangeModelAndColorInternal;
     result.SwitchToWeaponSuccessHandler += SwitchToWeaponSuccess;
     result.SwitchAmmoMagazineSuccessHandler += SwitchAmmoMagazineSuccess;
     //result.ShootHandler += ShootSuccess;
     return result;
 }
 private static void OnConfirmFactionMessageSuccess(MySyncCharacter syncObject, ref ConfirmFactionMessageMsg message, MyNetworkClient sender)
 {
     ConfirmMessage(ref message, MySession.LocalPlayerId);
 }
        private static void OnAnimationCommand(MySyncCharacter sync, ref AnimationCommandMsg msg, MyNetworkClient sender)
        {
            sync.Entity.AddCommand(new MyAnimationCommand()
            {
                AnimationSubtypeName = msg.AnimationSubtypeName,
                Mode = msg.Mode,
                Area = msg.Area,
                BlendTime = msg.BlendTime,
                TimeScale = msg.TimeScale,
                Loop = msg.Loop
            });

        }
        private static void OnCharacterInput(MySyncCharacter sync, ref CharacterInputMsg msg, MyNetworkClient sender)
        {
            sender.ClientFrameId = msg.ClientFrameId;

            if (sync.Entity.GetCurrentMovementState() != MyCharacterMovementEnum.Sitting && !sync.Entity.IsDead)
            {
                // Set orientation
                var pos = sync.Entity.PositionComp.GetPosition();
                var m = Matrix.CreateFromQuaternion(msg.Orientation);
                m.Translation = pos;
                sync.Entity.WorldMatrix = m;

                sync.m_moveIndicator = msg.MoveIndicator;
                sync.m_rotationIndicator = msg.RotationIndicator;
                sync.m_movementFlags = msg.MovementFlags;
            }
        }
 private static void OnRefillFromBottle(MySyncCharacter syncObject, ref RefillFromBottleMsg message, MyNetworkClient sender)
 {
     if (syncObject.Entity == MySession.LocalCharacter)
     {
         syncObject.Entity.OxygenComponent.ShowRefillFromBottleNotification();
     }
 }
        private static void OnCharacterInput(MySyncCharacter sync, ref CharacterInputMsg msg, MyNetworkClient sender)
        {
            sender.ClientFrameId = msg.ClientFrameId;
            sync.CachedMovementState = msg;

            var matrix = MatrixD.CreateFromQuaternion(msg.Orientation);
            matrix.Translation = msg.Position;
            sync.Entity.WorldMatrix = matrix;

            if (Sync.IsServer)
                Sync.Layer.SendMessageToAllButOne(ref msg, sender.SteamUserId);            
        }
        private static void OnPlayerMessageRequest(MySyncCharacter sync, ref SendPlayerMessageMsg msg, MyNetworkClient sender)
        {
            //Ignore messages that have improper lengths
            if (msg.Text.Length == 0 || msg.Text.Length > MyChatConstants.MAX_CHAT_STRING_LENGTH)
            {
                return;
            }

            var receiverId = MySession.Static.Players.TryGetPlayerIdentity(new MyPlayer.PlayerId(msg.ReceiverSteamId));
            var senderId = MySession.Static.Players.TryGetPlayerIdentity(new MyPlayer.PlayerId(msg.SenderSteamId));

            //TODO(AF) Check if message was already received

            if (receiverId != null && receiverId.Character != null && senderId != null && senderId.Character != null && MyAntennaSystem.CheckConnection(senderId, receiverId))
            {
                Sync.Layer.SendMessage(ref msg, msg.ReceiverSteamId, MyTransportMessageEnum.Success);
                Sync.Layer.SendMessage(ref msg, sender.SteamUserId, MyTransportMessageEnum.Success);

                //Save chat history on server for non-server players
                if (receiverId.Character != MySession.LocalCharacter)
                {
                    MyChatSystem.AddPlayerChatItem(receiverId.IdentityId, senderId.IdentityId, new MyPlayerChatItem(msg.Text, senderId.IdentityId, msg.Timestamp, true));
                }
                if (senderId.Character != MySession.LocalCharacter)
                {
                    MyChatSystem.AddPlayerChatItem(senderId.IdentityId, receiverId.IdentityId, new MyPlayerChatItem(msg.Text, senderId.IdentityId, msg.Timestamp, true));
                }
            }
        }
 private static void OnHeadOrSpineChanged(MySyncCharacter sync, ref ChangeHeadOrSpineMsg msg, MyNetworkClient sender)
 {
     if (sync.ResponsibleForUpdate(sender))
     {
         var handler = sync.HeadOrSpineChanged;
         if (handler != null)
             handler(msg.HeadLocalXAngle, msg.HeadLocalYAngle,
                 msg.AdditionalSpineRotation, msg.AdditionalHeadRotation, msg.AdditionalHandRotation, msg.AdditionalUpperHandRotation);
     }
 }
 private static void OnUpdateOxygen(MySyncCharacter syncObject, ref UpdateOxygenMsg message, MyNetworkClient sender)
 {
     syncObject.Entity.OxygenComponent.SuitOxygenAmount = message.OxygenAmount;
 }
 private static void OnCharacterPhysicsEnabled(MySyncCharacter sync, ref SetCharacterPhysicsEnabledMsg msg, MyNetworkClient sender)
 {
     sync.Entity.Physics.Enabled = msg.Enabled;
 }
 public void OnUpdateStoredGas(MySyncCharacter syncObject, ref UpdateGasFillLevelMsg message, MyNetworkClient sender)
 {
     syncObject.Entity.OxygenComponent.UpdateStoredGasLevel(message.GasId, message.FillLevel);
 }
        private static void OnPlayerMessageSuccess(MySyncCharacter sync, ref SendPlayerMessageMsg msg, MyNetworkClient sender)
        {
            var receiverId = MySession.Static.Players.TryGetPlayerIdentity(new MyPlayer.PlayerId(msg.ReceiverSteamId));
            var senderId = MySession.Static.Players.TryGetPlayerIdentity(new MyPlayer.PlayerId(msg.SenderSteamId));

            if (receiverId != null && receiverId.Character != null && senderId != null && senderId.Character != null)
            {
                if (receiverId.Character == MySession.LocalCharacter && receiverId.Character != senderId.Character)
                {
                    MyChatSystem.AddPlayerChatItem(receiverId.IdentityId, senderId.IdentityId, new MyPlayerChatItem(msg.Text, senderId.IdentityId, msg.Timestamp, true));
                    MySession.Static.ChatSystem.OnNewPlayerMessage(senderId.IdentityId, senderId.IdentityId);

                    MySession.Static.Gpss.ScanText(msg.Text, MyTexts.GetString(MySpaceTexts.TerminalTab_GPS_NewFromPrivateComms));
                }
                else
                {
                    MyChatSystem.SetPlayerChatItemSent(senderId.IdentityId, receiverId.IdentityId, msg.Text, new TimeSpan(msg.Timestamp), true);
                    MySession.Static.ChatSystem.OnNewPlayerMessage(receiverId.IdentityId, senderId.IdentityId);
                }
            }
        }
        private static void OnFactionMessageRequest(MySyncCharacter sync, ref SendNewFactionMessageMsg msg, MyNetworkClient sender)
        {
            //Ignore messages that have improper lengths
            if (msg.ChatItem.Text.Length == 0 || msg.ChatItem.Text.Length > MyChatConstants.MAX_CHAT_STRING_LENGTH)
            {
                return;
            }

            long currentSenderId = MyEntityIdentifier.ConstructId(MyEntityIdentifier.ID_OBJECT_TYPE.IDENTITY, msg.ChatItem.IdentityIdUniqueNumber);
            var senderId = MySession.Static.Players.TryGetIdentity(currentSenderId);

            var chatItem = new MyFactionChatItem();
            chatItem.Init(msg.ChatItem);

            //Find all members that can receive this messages
            m_tempValidIds.Clear();
            for (int i = 0; i < msg.ChatItem.PlayersToSendToUniqueNumber.Count; i++)
            {
                if (!msg.ChatItem.IsAlreadySentTo[i])
                {
                    long receiverIdentityId = MyEntityIdentifier.ConstructId(MyEntityIdentifier.ID_OBJECT_TYPE.IDENTITY, msg.ChatItem.PlayersToSendToUniqueNumber[i]);
                    var receiverId = MySession.Static.Players.TryGetIdentity(receiverIdentityId);
                    if (receiverId != null && receiverId.Character != null && MyAntennaSystem.CheckConnection(senderId, receiverId))
                    {
                        m_tempValidIds.Add(receiverIdentityId);
                    }
                }
            }

            //Set their sent flag to true, so that everyone knows they already got it (no need for confirm message)
            foreach (var id in m_tempValidIds)
            {
                chatItem.PlayersToSendTo[id] = true;
            }

            //Save the flags back in the message
            msg.ChatItem = chatItem.GetObjectBuilder();

            //Send success message back to all recepient members
            foreach (var id in m_tempValidIds)
            {
                MyPlayer.PlayerId receiverPlayerId;
                MySession.Static.Players.TryGetPlayerId(id, out receiverPlayerId);
                ulong steamId = receiverPlayerId.SteamId;

                Sync.Layer.SendMessage(ref msg, steamId, MyTransportMessageEnum.Success);
            }

            //Save chat history on server for non-server players
            if (senderId.Character != MySession.LocalCharacter)
            {
                MyChatSystem.AddFactionChatItem(senderId.IdentityId, msg.FactionId1, msg.FactionId2, chatItem);
            }
        }
 private static void OnUpdateOxygen(MySyncCharacter syncObject, ref UpdateOxygenMsg message, MyNetworkClient sender)
 {
     syncObject.Entity.SuitOxygenAmount = message.OxygenAmount;
 }
        private static void OnFlagsChanged(MySyncCharacter sync, ref ChangeFlagsMsg msg, MyNetworkClient sender)
        {
            if (MyFakes.CHARACTER_SERVER_SYNC)
            {
                var handler = sync.FlagsChanged;
                if (handler != null)
                    handler(msg.EnableJetpack, msg.EnableDampeners, msg.EnableLights, msg.EnableIronsight, msg.EnableBroadcast, msg.TargetFromCamera);

                if (Sync.IsServer)
                    Sync.Layer.SendMessageToAll(ref msg);
            }
            else
                if (sync.ResponsibleForUpdate(sender))
                {
                    var handler = sync.FlagsChanged;
                    if (handler != null)
                        handler(msg.EnableJetpack, msg.EnableDampeners, msg.EnableLights, msg.EnableIronsight, msg.EnableBroadcast, msg.TargetFromCamera);
                }
        }
        private static void OnSecondarySoundPlay(MySyncCharacter syncObject, ref PlaySecondarySoundMsg msg, MyNetworkClient sender)
        {
            if (!MySandboxGame.IsDedicated)
            {
                syncObject.Entity.SoundComp.StartSecondarySound(msg.SoundId, sync: false);
            }

            if (Sync.IsServer)
            {
                Sync.Layer.SendMessageToAllButOne(ref msg, sender.SteamUserId);
            }
        }
 private static void OnSwitchCharacterModel(MySyncCharacter sync, ref SwitchCharacterModelMsg msg, MyNetworkClient sender)
 {
     if (Sync.IsServer && sync.ResponsibleForUpdate(sender))
     {
         var handler = sync.CharacterModelSwitched;
         if (handler != null)
         {
             handler(msg.Model, msg.ColorMaskHSV);
         }
         Sync.Layer.SendMessageToAllButOne(ref msg, sender.SteamUserId);
     }
     else if (sender.SteamUserId == Sync.ServerId || sender.SteamUserId == Sync.MyId)
     {
         var handler = sync.CharacterModelSwitched;
         if (handler != null)
             handler(msg.Model, msg.ColorMaskHSV);
     }
 }
        static void OnAttachToCockpit(MySyncCharacter sync, ref AttachToCockpitMsg msg, MyNetworkClient sender)
        {
            MyCharacter character = sync.Entity;
            MyCockpit cockpit = MyEntities.GetEntityById(msg.CockpitEntityId) as MyCockpit;
            Debug.Assert(cockpit != null);
            if (cockpit == null) return;

            cockpit.AttachPilot(character, false);
        }
        private static void OnAnimationCommand(MySyncCharacter sync, ref AnimationCommandMsg msg, MyNetworkClient sender)
        {
            sync.Entity.AddCommand(new MyAnimationCommand()
            {
                AnimationSubtypeName = msg.AnimationSubtypeName,
                PlaybackCommand = msg.PlaybackCommand,
                BlendOption = msg.BlendOption,
                FrameOption = msg.FrameOption,
                Area = msg.Area,
                BlendTime = msg.BlendTime,
                TimeScale = msg.TimeScale,
            });
            if (Sync.IsServer)
            {
                Sync.Layer.SendMessageToAllButOne(ref msg, sender.SteamUserId);
            }

        }
 private static void OnSwitchCharacterModel(MySyncCharacter sync, ref SwitchCharacterModelMsg msg, MyNetworkClient sender)
 {
     if (sync.ResponsibleForUpdate(sender))
     {
         var handler = sync.CharacterModelSwitched;
         if (handler != null)
             handler(msg.Model, msg.ColorMaskHSV);
     }
 }
 private static void OnMovementStateChanged(MySyncCharacter sync, ref ChangeMovementStateMsg msg, MyNetworkClient sender)
 {
     if (sync.ResponsibleForUpdate(sender))
     {
         var handler = sync.MovementStateChanged;
         if (handler != null)
             handler(msg.MovementState);
     }
 }
        private static void OnUpdateStoredGas(MySyncCharacter syncObject, ref UpdateGasFillLevelMsg message, MyNetworkClient sender)
        {
            if (syncObject.Entity.OxygenComponent == null)
                return;

            MyDefinitionId gasId = message.GasId;
            syncObject.Entity.OxygenComponent.UpdateStoredGasLevel(ref gasId, message.FillLevel);
        }
 private static void OnConfirmFactionMessageSuccess(MySyncCharacter syncObject, ref ConfirmFactionMessageMsg message, MyNetworkClient sender)
 {
     ConfirmMessage(ref message, MySession.LocalPlayerId);
 }
 private static void OnFlagsChanged(MySyncCharacter sync, ref ChangeFlagsMsg msg, MyNetworkClient sender)
 {
     if (sync.ResponsibleForUpdate(sender))
     {
         var handler = sync.FlagsChanged;
         if (handler != null)
             handler(msg.EnableJetpack, msg.EnableDampeners, msg.EnableLights, msg.EnableIronsight, msg.EnableBroadcast);
     }
 }
        private static void OnRagdollTransformsUpdate(MySyncCharacter syncObject, ref RagdollTransformsMsg message, MyNetworkClient sender)
        {
            var ragdollComponent = syncObject.Entity.Components.Get<MyCharacterRagdollComponent>();
            if (ragdollComponent == null) return;
            if (syncObject.Entity.Physics == null) return;
            if (syncObject.Entity.Physics.Ragdoll == null) return;
            if (ragdollComponent.RagdollMapper == null) return;
            if (!syncObject.Entity.Physics.Ragdoll.InWorld) return;
            if (!ragdollComponent.RagdollMapper.IsActive) return;
            Debug.Assert(message.worldOrientation != null && message.worldOrientation != Quaternion.Zero, "Received invalid ragdoll orientation from server!");
            Debug.Assert(message.worldPosition != null && message.worldPosition != Vector3.Zero, "Received invalid ragdoll orientation from server!");
            Debug.Assert(message.transformsOrientations != null && message.transformsPositions != null, "Received empty ragdoll transformations from server!");
            Debug.Assert(message.transformsPositions.Count() == message.TransformsCount && message.transformsOrientations.Count() == message.TransformsCount, "Received ragdoll data count doesn't match!");
            Matrix worldMatrix = Matrix.CreateFromQuaternion(message.worldOrientation);
            worldMatrix.Translation = message.worldPosition;
            Matrix[] transforms = new Matrix[message.TransformsCount];

            for (int i = 0; i < message.TransformsCount; ++i)
            {
                transforms[i] = Matrix.CreateFromQuaternion(message.transformsOrientations[i]);
                transforms[i].Translation = message.transformsPositions[i];
            }

            ragdollComponent.RagdollMapper.UpdateRigidBodiesTransformsSynced(message.TransformsCount, worldMatrix, transforms);
        }
        private static void OnGlobalMessageRequest(MySyncCharacter sync, ref SendGlobalMessageMsg msg, MyNetworkClient sender)
        {
            //Ignore messages that have improper lengths
            if (msg.Text.Length == 0 || msg.Text.Length > MyChatConstants.MAX_CHAT_STRING_LENGTH)
            {
                return;
            }

            var senderId = MySession.Static.Players.TryGetPlayerIdentity(new MyPlayer.PlayerId(msg.SenderSteamId));
            var allPlayers = MySession.Static.Players.GetOnlinePlayers();
            foreach (var player in allPlayers)
            {
                var receiverId = player.Identity;
                if (receiverId != null && receiverId.Character != null && senderId != null && senderId.Character != null && MyAntennaSystem.CheckConnection(senderId, receiverId))
                {
                    Sync.Layer.SendMessage(ref msg, player.Id.SteamId, MyTransportMessageEnum.Success);

                    //Save chat history on server for non-server players
                    if (receiverId.Character != MySession.LocalCharacter)
                    {
                        MyChatSystem.AddGlobalChatItem(player.Identity.IdentityId, new MyGlobalChatItem(msg.Text, senderId.IdentityId));
                    }
                }
            }
        }
        private static void OnFactionMessageSuccess(MySyncCharacter sync, ref SendNewFactionMessageMsg msg, MyNetworkClient sender)
        {
            long senderIdentityId = MyEntityIdentifier.ConstructId(MyEntityIdentifier.ID_OBJECT_TYPE.IDENTITY, msg.ChatItem.IdentityIdUniqueNumber);

            var factionChatItem = new MyFactionChatItem();
            factionChatItem.Init(msg.ChatItem);
            if (!(Sync.IsServer && senderIdentityId != MySession.LocalPlayerId))
            {
                MyChatSystem.AddFactionChatItem(MySession.LocalPlayerId, msg.FactionId1, msg.FactionId2, factionChatItem);
            }
            if (senderIdentityId != MySession.LocalPlayerId)
            {
                MySession.Static.Gpss.ScanText(factionChatItem.Text, MyTexts.GetString(MySpaceTexts.TerminalTab_GPS_NewFromFactionComms));
            }
            MySession.Static.ChatSystem.OnNewFactionMessage(msg.FactionId1, msg.FactionId2, senderIdentityId, true);
        }
        private static void OnGlobalMessageSuccess(MySyncCharacter sync, ref SendGlobalMessageMsg msg, MyNetworkClient sender)
        {
            var senderId = MySession.Static.Players.TryGetPlayerIdentity(new MyPlayer.PlayerId(msg.SenderSteamId));
            if (MySession.LocalCharacter != null)
            {
                MyChatSystem.AddGlobalChatItem(MySession.LocalPlayerId, new MyGlobalChatItem(msg.Text, senderId.IdentityId));
                MySession.Static.ChatSystem.OnNewGlobalMessage(senderId.IdentityId);

                if (MySession.LocalPlayerId != senderId.IdentityId)
                {
                    MySession.Static.Gpss.ScanText(msg.Text, MyTexts.GetString(MySpaceTexts.TerminalTab_GPS_NewFromBroadcast));
                }
            }
        }
        private static void OnAnimationCommand(MySyncCharacter sync, ref AnimationCommandMsg msg, MyNetworkClient sender)
        {
            sync.Entity.AddCommand(new MyAnimationCommand()
            {
                AnimationSubtypeName = msg.AnimationSubtypeName,
                PlaybackCommand = msg.PlaybackCommand,
                BlendOption = msg.BlendOption,
                FrameOption = msg.FrameOption,
                Area = msg.Area,
                BlendTime = msg.BlendTime,
                TimeScale = msg.TimeScale,
            });

        }