コード例 #1
0
        private void RefreshBroadcastChatHistory()
        {
            m_chatHistory.Clear();
            var history = MyChatSystem.GetChatHistory(MySession.Static.LocalPlayerId);

            var chat = history.GlobalChatHistory.Chat;

            foreach (var text in chat)
            {
                var identity = MySession.Static.Players.TryGetIdentity(text.IdentityId);

                if (identity == null)
                {
                    continue;
                }
                bool isPlayer = identity.IdentityId == MySession.Static.LocalPlayerId;

                m_chatHistory.AppendText(identity.DisplayName, isPlayer ? MyFontEnum.DarkBlue : MyFontEnum.Blue, m_chatHistory.TextScale, Vector4.One);

                m_chatHistory.AppendText(": ", isPlayer ? MyFontEnum.DarkBlue : MyFontEnum.Blue, m_chatHistory.TextScale, Vector4.One);
                m_chatHistory.AppendText(text.Text, MyFontEnum.White, m_chatHistory.TextScale, Vector4.One);
                m_chatHistory.AppendLine();
            }

            m_factionList.SelectedItems.Clear();
            m_chatHistory.ScrollbarOffset = 1.0f;
        }
コード例 #2
0
        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));
                }
            }
        }
コード例 #3
0
        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));
                    }
                }
            }
        }
コード例 #4
0
        void m_playerList_ItemsSelected(MyGuiControlListbox obj)
        {
            if (m_playerList.SelectedItems.Count > 0)
            {
                var selectedItem = m_playerList.SelectedItems[0];
                if (selectedItem != m_globalItem)
                {
                    var playerIdentity = (MyIdentity)selectedItem.UserData;
                    RefreshPlayerChatHistory(playerIdentity);

                    var playerChatHistory = MyChatSystem.GetPlayerChatHistory(MySession.LocalPlayerId, playerIdentity.IdentityId);
                    if (playerChatHistory != null && playerChatHistory.UnreadMessageCount > 0)
                    {
                        playerChatHistory.UnreadMessageCount = 0;
                        UpdatePlayerList();
                    }
                }
                else
                {
                    RefreshGlobalChatHistory();

                    MyChatHistory chatHistory;
                    if (MySession.Static.ChatHistory.TryGetValue(MySession.LocalPlayerId, out chatHistory) && chatHistory.GlobalChatHistory.UnreadMessageCount > 0)
                    {
                        chatHistory.GlobalChatHistory.UnreadMessageCount = 0;
                        UpdatePlayerList();
                    }
                }
                m_chatbox.SetText(m_emptyText);
            }
        }
コード例 #5
0
        private void RefreshFactionChatHistory(MyFaction faction)
        {
            m_chatHistory.Clear();

            var localFaction = MySession.Static.Factions.TryGetPlayerFaction(MySession.Static.LocalPlayerId);

            if (localFaction == null)
            {
                System.Diagnostics.Debug.Fail("Chat shouldn't be refreshed if local player is not a member of a faction!");
                return;
            }
            MyFactionChatHistory factionChat = MyChatSystem.FindFactionChatHistory(faction.FactionId, localFaction.FactionId);

            if (factionChat != null)
            {
                var chat = factionChat.Chat;
                foreach (var item in chat)
                {
                    bool alreadySentToMe;
                    if (item.IdentityId == MySession.Static.LocalPlayerId || (item.PlayersToSendTo.TryGetValue(MySession.Static.LocalPlayerId, out alreadySentToMe) && alreadySentToMe))
                    {
                        int alreadySentToCount = 0;
                        foreach (var keyValue in item.PlayersToSendTo)
                        {
                            if (keyValue.Value)
                            {
                                alreadySentToCount++;
                            }
                        }
                        var identity = MySession.Static.Players.TryGetIdentity(item.IdentityId);

                        if (identity == null)
                        {
                            continue;
                        }
                        bool isPlayer = identity.IdentityId == MySession.Static.LocalPlayerId;

                        m_chatHistory.AppendText(identity.DisplayName, isPlayer ? MyFontEnum.DarkBlue : MyFontEnum.Blue, m_chatHistory.TextScale, Vector4.One);
                        if (item.PlayersToSendTo != null && item.PlayersToSendTo.Count > 0 && alreadySentToCount < item.PlayersToSendTo.Count)
                        {
                            var pendingText = new StringBuilder();
                            pendingText.Append(" (");
                            pendingText.Append(alreadySentToCount.ToString());
                            pendingText.Append("/");
                            pendingText.Append(item.PlayersToSendTo.Count.ToString());
                            pendingText.Append(") ");
                            m_chatHistory.AppendText(pendingText, MyFontEnum.Red, m_chatHistory.TextScale, Vector4.One);
                        }
                        m_chatHistory.AppendText(": ", isPlayer ? MyFontEnum.DarkBlue : MyFontEnum.Blue, m_chatHistory.TextScale, Vector4.One);
                        m_chatHistory.AppendText(item.Text, MyFontEnum.White, m_chatHistory.TextScale, Vector4.One);
                        m_chatHistory.AppendLine();
                    }
                }
            }

            m_playerList.SelectedItems.Clear();
            m_chatHistory.ScrollbarOffset = 1.0f;
        }
コード例 #6
0
        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);
            }
        }
コード例 #7
0
        public void IncrementFactionUnreadMessageCount(long factionId, bool refresh)
        {
            var chatHistory = MyChatSystem.GetFactionChatHistory(MySession.Static.LocalPlayerId, factionId);

            if (chatHistory != null)
            {
                chatHistory.UnreadMessageCount++;
                if (refresh)
                {
                    UpdateFactionList(true);
                }
            }
        }
コード例 #8
0
        public void IncrementPlayerUnreadMessageCount(long otherPlayerId, bool refresh)
        {
            MyPlayerChatHistory chatHistory = MyChatSystem.GetPlayerChatHistory(MySession.Static.LocalPlayerId, otherPlayerId);

            if (chatHistory != null)
            {
                chatHistory.UnreadMessageCount++;
                if (refresh)
                {
                    UpdatePlayerList();
                }
            }
        }
コード例 #9
0
        private void RefreshFactionList()
        {
            var localFaction = MySession.Static.Factions.TryGetPlayerFaction(MySession.Static.LocalPlayerId);

            if (localFaction != null)
            {
                //Add local player faction first
                m_tempStringBuilder.Clear();
                m_tempStringBuilder.Append(localFaction.Name);

                var chatHistory = MyChatSystem.GetFactionChatHistory(MySession.Static.LocalPlayerId, localFaction.FactionId);
                if (chatHistory != null && chatHistory.UnreadMessageCount > 0)
                {
                    m_tempStringBuilder.Append(" (");
                    m_tempStringBuilder.Append(chatHistory.UnreadMessageCount);
                    m_tempStringBuilder.Append(")");
                }

                var item = new MyGuiControlListbox.Item(text: m_tempStringBuilder, userData: localFaction);
                m_factionList.Add(item);

                m_factionList.SetToolTip(string.Empty);
                foreach (var faction in MySession.Static.Factions)
                {
                    //Don't add local player faction twice
                    if (faction.Value != localFaction && faction.Value.AcceptHumans)
                    {
                        m_tempStringBuilder.Clear();
                        m_tempStringBuilder.Append(faction.Value.Name);

                        chatHistory = MyChatSystem.GetFactionChatHistory(MySession.Static.LocalPlayerId, faction.Value.FactionId);
                        if (chatHistory != null && chatHistory.UnreadMessageCount > 0)
                        {
                            m_tempStringBuilder.Append(" (");
                            m_tempStringBuilder.Append(chatHistory.UnreadMessageCount);
                            m_tempStringBuilder.Append(")");
                        }

                        item = new MyGuiControlListbox.Item(text: m_tempStringBuilder, userData: faction.Value);
                        m_factionList.Add(item);
                    }
                }
            }
            else
            {
                m_factionList.SelectedItems.Clear();
                m_factionList.Items.Clear();

                m_factionList.SetToolTip(MyTexts.GetString(MySpaceTexts.TerminalTab_Chat_NoFaction));
            }
        }
コード例 #10
0
        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));
                }
            }
        }
コード例 #11
0
        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);
        }
コード例 #12
0
        private static MyFactionChatItem FindFactionChatItem(long playerId, long factionId1, long factionId2, TimeSpan timestamp, string text)
        {
            var factionChat = MyChatSystem.FindFactionChatHistory(factionId1, factionId2);

            if (factionChat != null)
            {
                foreach (var factionChatItem in factionChat.Chat)
                {
                    if (factionChatItem.Timestamp == timestamp && factionChatItem.Text == text)
                    {
                        return(factionChatItem);
                    }
                }
            }

            return(null);
        }
コード例 #13
0
        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);
                }
            }
        }
コード例 #14
0
        private void RefreshPlayerChatHistory(MyIdentity playerIdentity)
        {
            m_chatHistory.Clear();
            var history = MyChatSystem.GetChatHistory(MySession.Static.LocalPlayerId);

            var playerId = playerIdentity.IdentityId;
            MyPlayerChatHistory playerChat;

            if (history.PlayerChatHistory.TryGetValue(playerId, out playerChat))
            {
                var chat = playerChat.Chat;
                foreach (var text in chat)
                {
                    var identity = MySession.Static.Players.TryGetIdentity(text.IdentityId);

                    if (identity == null)
                    {
                        continue;
                    }
                    bool isPlayer = identity.IdentityId == MySession.Static.LocalPlayerId;

                    m_chatHistory.AppendText(identity.DisplayName, isPlayer ? MyFontEnum.DarkBlue : MyFontEnum.Blue, m_chatHistory.TextScale, Vector4.One);
                    if (!text.Sent)
                    {
                        m_tempStringBuilder.Clear();
                        m_tempStringBuilder.Append(" (");
                        m_tempStringBuilder.Append(MyTexts.GetString(MySpaceTexts.TerminalTab_Chat_Pending));
                        m_tempStringBuilder.Append(")");
                        m_chatHistory.AppendText(m_tempStringBuilder, MyFontEnum.Red, m_chatHistory.TextScale, Vector4.One);
                    }
                    m_chatHistory.AppendText(": ", isPlayer ? MyFontEnum.DarkBlue : MyFontEnum.Blue, m_chatHistory.TextScale, Vector4.One);
                    m_chatHistory.AppendText(text.Text, MyFontEnum.White, m_chatHistory.TextScale, Vector4.One);
                    m_chatHistory.AppendLine();
                }
            }

            m_factionList.SelectedItems.Clear();
            m_chatHistory.ScrollbarOffset = 1.0f;
        }
コード例 #15
0
        void m_factionList_ItemsSelected(MyGuiControlListbox obj)
        {
            if (m_factionList.SelectedItems.Count > 0)
            {
                var selectedItem = m_factionList.SelectedItems[0];
                var faction      = (MyFaction)selectedItem.UserData;
                RefreshFactionChatHistory(faction);

                var factions     = MySession.Static.Factions;
                var localFaction = factions.TryGetPlayerFaction(MySession.Static.LocalPlayerId);
                if (localFaction != null)
                {
                    MyFactionChatHistory factionChat = MyChatSystem.FindFactionChatHistory(faction.FactionId, localFaction.FactionId);
                    if (factionChat != null)
                    {
                        factionChat.UnreadMessageCount = 0;
                        UpdateFactionList(true);
                    }
                }

                m_chatbox.SetText(m_emptyText);
            }
        }
コード例 #16
0
        private void RefreshPlayerList()
        {
            //Add the global chat log first
            m_globalItem = new MyGuiControlListbox.Item(MyTexts.Get(MySpaceTexts.TerminalTab_Chat_ChatHistory));
            m_playerList.Add(m_globalItem);

            //Comms broadcast history
            m_tempStringBuilder.Clear();
            m_tempStringBuilder.Append(MyTexts.Get(MySpaceTexts.TerminalTab_Chat_GlobalChat));

            MyChatHistory chatHistory;

            if (MySession.Static.ChatHistory.TryGetValue(MySession.Static.LocalPlayerId, out chatHistory) && chatHistory.GlobalChatHistory.UnreadMessageCount > 0)
            {
                m_tempStringBuilder.Append(" (");
                m_tempStringBuilder.Append(chatHistory.GlobalChatHistory.UnreadMessageCount);
                m_tempStringBuilder.Append(")");
            }

            m_broadcastItem = new MyGuiControlListbox.Item(m_tempStringBuilder);
            m_playerList.Add(m_broadcastItem);

            //var allPlayers = MySession.Static.Players.GetAllIdentities();
            var allPlayers = MySession.Static.Players.GetAllPlayers();

            m_tempOnlinePlayers.Clear();
            m_tempOfflinePlayers.Clear();

            foreach (var player in allPlayers)
            {
                var playerIdentity = MySession.Static.Players.TryGetIdentity(MySession.Static.Players.TryGetIdentityId(player.SteamId, player.SerialId));

                if (playerIdentity != null && playerIdentity.IdentityId != MySession.Static.LocalPlayerId && player.SerialId == 0)
                {
                    if (playerIdentity.Character == null)
                    {
                        m_tempOfflinePlayers.Add(playerIdentity);
                    }
                    else
                    {
                        m_tempOnlinePlayers.Add(playerIdentity);
                    }
                }
            }

            foreach (var onlinePlayer in m_tempOnlinePlayers)
            {
                m_tempStringBuilder.Clear();
                m_tempStringBuilder.Append(onlinePlayer.DisplayName);

                var playerChatHistory = MyChatSystem.GetPlayerChatHistory(MySession.Static.LocalPlayerId, onlinePlayer.IdentityId);
                if (playerChatHistory != null && playerChatHistory.UnreadMessageCount > 0)
                {
                    m_tempStringBuilder.Append(" (");
                    m_tempStringBuilder.Append(playerChatHistory.UnreadMessageCount);
                    m_tempStringBuilder.Append(")");
                }

                var item = new MyGuiControlListbox.Item(text: m_tempStringBuilder, userData: onlinePlayer);
                m_playerList.Add(item);
            }

            foreach (var offlinePlayer in m_tempOfflinePlayers)
            {
                m_tempStringBuilder.Clear();
                m_tempStringBuilder.Append(offlinePlayer.DisplayName);
                m_tempStringBuilder.Append(" (");
                m_tempStringBuilder.Append(MyTexts.GetString(MySpaceTexts.TerminalTab_Chat_Offline));
                m_tempStringBuilder.Append(")");

                var playerChatHistory = MyChatSystem.GetPlayerChatHistory(MySession.Static.LocalPlayerId, offlinePlayer.IdentityId);
                if (playerChatHistory != null && playerChatHistory.UnreadMessageCount > 0)
                {
                    m_tempStringBuilder.Append(" (");
                    m_tempStringBuilder.Append(playerChatHistory.UnreadMessageCount);
                    m_tempStringBuilder.Append(")");
                }

                var item = new MyGuiControlListbox.Item(text: m_tempStringBuilder, userData: offlinePlayer, fontOverride: MyFontEnum.DarkBlue);
                m_playerList.Add(item);
            }
        }
コード例 #17
0
        private void SendMessage()
        {
            //Cannot send any message if local character is missing
            if (MySession.Static.LocalCharacter == null)
            {
                return;
            }

            m_chatboxText.Clear();
            m_chatbox.GetText(m_chatboxText);

            MyDebug.AssertDebug(m_chatboxText.Length > 0, "Length of chat text should be positive");
            MyDebug.AssertDebug(m_chatboxText.Length <= MyChatConstants.MAX_CHAT_STRING_LENGTH, "Length of chat text should not exceed maximum allowed");

            var history = MyChatSystem.GetChatHistory(MySession.Static.LocalPlayerId);

            if (m_playerList.SelectedItems.Count > 0)
            {
                var selectedItem = m_playerList.SelectedItems[0];

                if (selectedItem == m_globalItem)
                {
                    //messages entered in the global chat history should be treated as normal ingame chat
                    if (MyMultiplayer.Static != null)
                    {
                        MyMultiplayer.Static.SendChatMessage(m_chatboxText.ToString());
                    }
                    else
                    {
                        MyHud.Chat.ShowMessage(MySession.Static.LocalHumanPlayer == null ? "Player" : MySession.Static.LocalHumanPlayer.DisplayName, m_chatboxText.ToString());
                    }

                    //add the message to history
                    //MySession.Static.GlobalChatHistory.GlobalChatHistory.Chat.Enqueue(new MyGlobalChatItem
                    //{
                    //    IdentityId = MySession.Static.LocalPlayerId,
                    //    Text = m_chatboxText.ToString()
                    //});

                    RefreshGlobalChatHistory();
                }
                else if (selectedItem == m_broadcastItem)
                {
                    MySession.Static.LocalCharacter.SendNewGlobalMessage(MySession.Static.LocalHumanPlayer.Id, m_chatboxText.ToString());
                }
                else
                {
                    var playerIdentity = (MyIdentity)selectedItem.UserData;

                    MySession.Static.ChatHistory[MySession.Static.LocalPlayerId].AddPlayerChatItem(new MyPlayerChatItem(m_chatboxText.ToString(), MySession.Static.LocalPlayerId, MySession.Static.ElapsedGameTime, false), playerIdentity.IdentityId);
                    RefreshPlayerChatHistory(playerIdentity);
                }
            }
            else if (m_factionList.SelectedItems.Count > 0)
            {
                var toSendTo      = new Dictionary <long, bool>();
                var selectedItem  = m_factionList.SelectedItems[0];
                var targetFaction = (MyFaction)selectedItem.UserData;

                foreach (var member in targetFaction.Members)
                {
                    toSendTo.Add(member.Value.PlayerId, false);
                }

                if (!targetFaction.IsMember(MySession.Static.LocalPlayerId))
                {
                    var localFaction = MySession.Static.Factions.TryGetPlayerFaction(MySession.Static.LocalPlayerId);
                    if (localFaction != null)
                    {
                        foreach (var member in localFaction.Members)
                        {
                            toSendTo.Add(member.Value.PlayerId, false);
                        }
                    }
                }

                var factionChatItem = new MyFactionChatItem(m_chatboxText.ToString(), MySession.Static.LocalPlayerId, MySession.Static.ElapsedGameTime, toSendTo);

                //This has to exist!
                var currentFaction = MySession.Static.Factions.TryGetPlayerFaction(MySession.Static.LocalPlayerId);

                MySession.Static.LocalCharacter.SendNewFactionMessage(targetFaction.FactionId, currentFaction.FactionId, factionChatItem);

                RefreshFactionChatHistory(targetFaction);
            }

            m_chatbox.SetText(m_emptyText);
        }