public override void OnPlayerJoined(ulong remoteUserId)
        {
            GreetingItem item = new GreetingItem();

            item.SteamId   = remoteUserId;
            item.Timeout   = TimeSpan.FromMinutes(10);
            item.Start     = DateTime.Now;
            item.IsNewUser = PlayerMap.Instance.GetPlayerIdsFromSteamId(remoteUserId).Count() == 0;

            Logging.WriteLineAndConsole(string.Format("New User: {0}", remoteUserId));

            lock (m_greetingList)
            {
                m_greetingList.Add(item);
                Logging.WriteLineAndConsole(string.Format("Greeting Added => {0} (New user: {1})", remoteUserId, item.IsNewUser));
            }

            base.OnPlayerJoined(remoteUserId);
        }
        public override void Handle()
        {
            if (PluginSettings.Instance.GreetingMessage != "")
            {
                if (MyAPIGateway.Players == null)
                {
                    return;
                }

                int pos = 0;
                try
                {
                    List <IMyPlayer> players = new List <IMyPlayer>();
                    pos = 1;
                    bool result = false;
                    Wrapper.GameAction(() =>
                    {
                        try
                        {
                            MyAPIGateway.Players.GetPlayers(players, null);
                            result = true;
                        }
                        catch (Exception ex)
                        {
                            Logging.WriteLineAndConsole(string.Format("Failed to get player list: {0}", ex.ToString()));
                        }
                    });

                    if (!result)
                    {
                        return;
                    }

                    pos = 2;
                    lock (m_greetingList)
                    {
                        for (int r = m_greetingList.Count - 1; r >= 0; r--)
                        {
                            pos = 3;
                            GreetingItem item = m_greetingList[r];
                            if (DateTime.Now - item.Start > item.Timeout)
                            {
                                m_greetingList.RemoveAt(r);
                                continue;
                            }
                            pos = 4;
                            IMyPlayer player = players.FirstOrDefault(x => x.SteamUserId == item.SteamId && x.Controller != null && x.Controller.ControlledEntity != null);
                            pos = 5;
                            if (player != null)
                            {
                                pos = 6;
                                m_greetingList.RemoveAt(r);

                                string message = "";

                                if (item.IsNewUser)
                                {
                                    message = PluginSettings.Instance.GreetingNewUserMessage.Replace("%name%", player.DisplayName);
                                }
                                else
                                {
                                    message = PluginSettings.Instance.GreetingMessage.Replace("%name%", player.DisplayName);
                                }

                                string finalMessage = message;

                                if (PluginSettings.Instance.GreetingPublic)
                                {
                                    Communication.SendPublicInformation(finalMessage);
                                }
                                else
                                {
                                    Communication.SendPrivateInformation(item.SteamId, finalMessage);
                                }

                                if (item.IsNewUser)
                                {
                                    if (PluginSettings.Instance.GreetingNewUserItem.Enabled)
                                    {
                                        SettingsGreetingDialogItem gItem = PluginSettings.Instance.GreetingNewUserItem;
                                        Communication.SendClientMessage(item.SteamId, string.Format("/dialog \"{0}\" \"{1}\" \"{2}\" \"{3}\" \"{4}\"", gItem.Title.Replace("%name%", player.DisplayName), gItem.Header.Replace("%name%", player.DisplayName), " ", gItem.Contents.Replace("%name%", player.DisplayName).Replace("\r", "").Replace("\n", "|").Replace("\"", "'"), gItem.ButtonText));
                                    }
                                }
                                else
                                {
                                    if (PluginSettings.Instance.GreetingItem.Enabled)
                                    {
                                        SettingsGreetingDialogItem gItem = PluginSettings.Instance.GreetingItem;
                                        Communication.SendClientMessage(item.SteamId, string.Format("/dialog \"{0}\" \"{1}\" \"{2}\" \"{3}\" \"{4}\"", gItem.Title.Replace("%name%", player.DisplayName), gItem.Header.Replace("%name%", player.DisplayName), " ", gItem.Contents.Replace("%name%", player.DisplayName).Replace("\r", "").Replace("\n", "|").Replace("\"", "'"), gItem.ButtonText));
                                    }
                                }
                            }
                        }

                        pos = 7;
                    }
                }
                catch (Exception ex)
                {
                    Logging.WriteLineAndConsole(string.Format("Handle(): Error at pos - {0}: {1}", pos, ex.ToString()));
                }
            }

            base.Handle();
        }
        public override void OnPlayerJoined(ulong remoteUserId)
        {
            GreetingItem item = new GreetingItem();
            item.SteamId = remoteUserId;
            item.Timeout = TimeSpan.FromMinutes(10);
            item.Start = DateTime.Now;
            item.IsNewUser = PlayerMap.Instance.GetPlayerIdsFromSteamId(remoteUserId).Count() == 0;

            Logging.WriteLineAndConsole(string.Format("New User: {0}", remoteUserId));

            lock (m_greetingList)
            {
                m_greetingList.Add(item);
                Logging.WriteLineAndConsole(string.Format("Greeting Added => {0} (New user: {1})", remoteUserId, item.IsNewUser));
            }

            base.OnPlayerJoined(remoteUserId);
        }