Exemplo n.º 1
0
 public void Init(MyObjectBuilder_FactionChatItem chatBuilder)
 {
     Text            = chatBuilder.Text;
     IdentityId      = MyEntityIdentifier.ConstructId(MyEntityIdentifier.ID_OBJECT_TYPE.IDENTITY, chatBuilder.IdentityIdUniqueNumber);
     Timestamp       = TimeSpan.FromMilliseconds(chatBuilder.TimestampMs);
     PlayersToSendTo = new Dictionary <long, bool>();
     if (chatBuilder.PlayersToSendToUniqueNumber != null && chatBuilder.PlayersToSendToUniqueNumber.Count != 0)
     {
         for (int i = 0; i < chatBuilder.PlayersToSendToUniqueNumber.Count; i++)
         {
             PlayersToSendTo.Add(MyEntityIdentifier.ConstructId(MyEntityIdentifier.ID_OBJECT_TYPE.IDENTITY, chatBuilder.PlayersToSendToUniqueNumber[i]), chatBuilder.IsAlreadySentTo[i]);
         }
     }
 }
Exemplo n.º 2
0
        public MyObjectBuilder_FactionChatItem GetObjectBuilder()
        {
            var objectBuilder = new MyObjectBuilder_FactionChatItem();

            objectBuilder.Text = Text;
            objectBuilder.IdentityIdUniqueNumber = MyEntityIdentifier.GetIdUniqueNumber(IdentityId);
            objectBuilder.TimestampMs            = (long)Timestamp.TotalMilliseconds;
            if (PlayersToSendTo != null)
            {
                objectBuilder.PlayersToSendToUniqueNumber = PlayersToSendTo.Keys.ToList();
                for (int i = 0; i < objectBuilder.PlayersToSendToUniqueNumber.Count; i++)
                {
                    objectBuilder.PlayersToSendToUniqueNumber[i] = MyEntityIdentifier.GetIdUniqueNumber(objectBuilder.PlayersToSendToUniqueNumber[i]);
                }
                objectBuilder.IsAlreadySentTo = PlayersToSendTo.Values.ToList();
            }
            return(objectBuilder);
        }
        static private void OnFactionMessageSuccess(long factionId1, long factionId2, MyObjectBuilder_FactionChatItem chatItemBuilder)
        {
            long senderIdentityId = MyEntityIdentifier.ConstructId(MyEntityIdentifier.ID_OBJECT_TYPE.IDENTITY, chatItemBuilder.IdentityIdUniqueNumber);

            var factionChatItem = new MyFactionChatItem();
            factionChatItem.Init(chatItemBuilder);
            if (!(Sync.IsServer && senderIdentityId != MySession.Static.LocalPlayerId))
            {
                MyChatSystem.AddFactionChatItem(MySession.Static.LocalPlayerId, factionId1, factionId2, factionChatItem);
            }
            if (senderIdentityId != MySession.Static.LocalPlayerId)
            {
                MySession.Static.Gpss.ScanText(factionChatItem.Text, MyTexts.GetString(MySpaceTexts.TerminalTab_GPS_NewFromFactionComms));
            }
            MySession.Static.ChatSystem.OnNewFactionMessage(factionId1, factionId2, senderIdentityId, true);
        }
        static private void OnFactionMessageRequest(long factionId1, long factionId2, MyObjectBuilder_FactionChatItem chatItemBuilder)
        {
            //Ignore messages that have improper lengths
            if (chatItemBuilder.Text.Length == 0 || chatItemBuilder.Text.Length > MyChatConstants.MAX_CHAT_STRING_LENGTH)
            {
                return;
            }

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

            var chatItem = new MyFactionChatItem();
            chatItem.Init(chatItemBuilder);

            //Find all members that can receive this messages
            m_tempValidIds.Clear();
            for (int i = 0; i < chatItemBuilder.PlayersToSendToUniqueNumber.Count; i++)
            {
                if (!chatItemBuilder.IsAlreadySentTo[i])
                {
                    long receiverIdentityId = MyEntityIdentifier.ConstructId(MyEntityIdentifier.ID_OBJECT_TYPE.IDENTITY, chatItemBuilder.PlayersToSendToUniqueNumber[i]);
                    var receiverId = MySession.Static.Players.TryGetIdentity(receiverIdentityId);
                    if (Sync.Players.IdentityIsNpc(receiverIdentityId) == false && receiverId != null && receiverId.Character != null && MyAntennaSystem.Static.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
            chatItemBuilder = 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;

                MyMultiplayer.RaiseStaticEvent(x => OnFactionMessageSuccess, factionId1, factionId2, chatItemBuilder, new EndpointId(steamId));
            }

            //Save chat history on server for non-server players
            if (senderId.Character != MySession.Static.LocalCharacter)
            {
                MyChatSystem.AddFactionChatItem(senderId.IdentityId, factionId1, factionId2, chatItem);
            }

        }
Exemplo n.º 5
0
        public MyObjectBuilder_FactionChatItem GetObjectBuilder()
        {
            var objectBuilder = new MyObjectBuilder_FactionChatItem();

            objectBuilder.Text = Text;
            objectBuilder.IdentityIdUniqueNumber = MyEntityIdentifier.GetIdUniqueNumber(IdentityId);
            objectBuilder.TimestampMs = (long)Timestamp.TotalMilliseconds;
            if (PlayersToSendTo != null)
            {
                objectBuilder.PlayersToSendToUniqueNumber = PlayersToSendTo.Keys.ToList();
                for (int i = 0; i < objectBuilder.PlayersToSendToUniqueNumber.Count; i++)
                {
                    objectBuilder.PlayersToSendToUniqueNumber[i] = MyEntityIdentifier.GetIdUniqueNumber(objectBuilder.PlayersToSendToUniqueNumber[i]);
                }
                objectBuilder.IsAlreadySentTo = PlayersToSendTo.Values.ToList();
            }
            return objectBuilder;
        }
Exemplo n.º 6
0
 public void Init(MyObjectBuilder_FactionChatItem chatBuilder)
 {
     Text = chatBuilder.Text;
     IdentityId = MyEntityIdentifier.ConstructId(MyEntityIdentifier.ID_OBJECT_TYPE.IDENTITY, chatBuilder.IdentityIdUniqueNumber);
     Timestamp = TimeSpan.FromMilliseconds(chatBuilder.TimestampMs);
     PlayersToSendTo = new Dictionary<long,bool>();
     if (chatBuilder.PlayersToSendToUniqueNumber != null && chatBuilder.PlayersToSendToUniqueNumber.Count != 0)
     {
         for (int i = 0; i < chatBuilder.PlayersToSendToUniqueNumber.Count; i++)
         {
             PlayersToSendTo.Add(MyEntityIdentifier.ConstructId(MyEntityIdentifier.ID_OBJECT_TYPE.IDENTITY, chatBuilder.PlayersToSendToUniqueNumber[i]), chatBuilder.IsAlreadySentTo[i]);
         }
     }
 }