internal async Task LastKnownInfoForFATE(ushort id)
        {
            if (FFXIVHunts.hubConnection.Connected && FFXIVHunts.Joined)
            {
                FATEReport[] results = await FFXIVHunts.hubConnection.Connection.InvokeAsync("QueryFATE", id, default(CancellationToken)).ConfigureAwait(false);

                foreach (FATEReport result in results)
                {
                    TimeSpan timeSinceLastReport = FFXIVHunts.ServerTimeUtc.Subtract(result.LastReported);
                    if (timeSinceLastReport < TimeSpan.Zero)
                    {
                        timeSinceLastReport = TimeSpan.Zero;
                    }
                    ChatMessage cm = new ChatMessage();
                    if (timeSinceLastReport.TotalDays > 90.0)
                    {
                        cm.MessageString = FFXIVHunts.GetWorldPrepend(result.WorldId) + string.Format(CultureInfo.CurrentCulture, Resources.LKIHuntNotReported, result.Name(false));
                    }
                    else if (timeSinceLastReport.TotalHours > 100.0)
                    {
                        cm.MessageString = FFXIVHunts.GetWorldPrepend(result.WorldId) + string.Format(CultureInfo.CurrentCulture, Resources.LKIFATEDays, result.Name(false), Convert.ToUInt32(timeSinceLastReport.TotalDays));
                    }
                    else
                    {
                        cm = ChatMessage.MakePosChatMessage(FFXIVHunts.GetWorldPrepend(result.WorldId) + string.Format(CultureInfo.CurrentCulture, Resources.LKIFATE, result.Name(false), Math.Floor(timeSinceLastReport.TotalHours), timeSinceLastReport.Minutes), result.ZoneID, result.PosX, result.PosY, "", 0);
                    }
                    if (result.Instance > 0)
                    {
                        cm.PostpendToMessage(string.Format(CultureInfo.CurrentCulture, " " + Resources.InstanceSpecifier, result.Instance));
                    }
                    await Program.mem.WriteChatMessage(cm).ConfigureAwait(false);
                }
                FATEReport[] array = null;
            }
        }
        internal async Task QueryHunt(ushort id)
        {
            if (FFXIVHunts.hubConnection.Connected && FFXIVHunts.Joined)
            {
                IOrderedEnumerable <Hunt> results = from x in await FFXIVHunts.hubConnection.Connection.InvokeAsync("QueryHunt", id, default(CancellationToken)).ConfigureAwait(false)
                                                    orderby x.LastReported
                                                    select x;

                foreach (Hunt result in results)
                {
                    TimeSpan timeSinceLastReport = FFXIVHunts.ServerTimeUtc.Subtract(result.LastReported);
                    if (timeSinceLastReport < TimeSpan.Zero)
                    {
                        timeSinceLastReport = TimeSpan.Zero;
                    }
                    ChatMessage cm         = new ChatMessage();
                    double      TotalHours = Math.Floor(timeSinceLastReport.TotalHours);
                    if (!result.LastAlive)
                    {
                        cm.MessageString = FFXIVHunts.GetWorldPrepend(result.WorldId) + string.Format(CultureInfo.CurrentCulture, Resources.LKIHuntKilled, result.Name);
                        if (Resources.LKIHuntKilled.Contains("<time>"))
                        {
                            ChatMessage chatMessage = cm;
                            chatMessage.MessageString += cm.MessageString.Replace("<time>", string.Format(CultureInfo.CurrentCulture, Resources.LKIHoursMinutes, TotalHours, timeSinceLastReport.Minutes));
                        }
                        else if (timeSinceLastReport.TotalDays > 90.0)
                        {
                            cm.MessageString = FFXIVHunts.GetWorldPrepend(result.WorldId) + string.Format(CultureInfo.CurrentCulture, Resources.LKIHuntNotReported, result.Name);
                        }
                        else if (timeSinceLastReport.TotalHours > 72.0)
                        {
                            ChatMessage chatMessage2 = cm;
                            chatMessage2.MessageString += string.Format(CultureInfo.CurrentCulture, Resources.LKIHours, TotalHours);
                        }
                        else if (timeSinceLastReport.TotalHours < 1.0)
                        {
                            ChatMessage chatMessage3 = cm;
                            chatMessage3.MessageString += string.Format(CultureInfo.CurrentCulture, Resources.LKIMinutes, Math.Floor(timeSinceLastReport.TotalMinutes));
                        }
                        else
                        {
                            ChatMessage chatMessage4 = cm;
                            chatMessage4.MessageString += string.Format(CultureInfo.CurrentCulture, Resources.LKIHoursMinutes, TotalHours, timeSinceLastReport.Minutes);
                        }
                    }
                    else
                    {
                        ushort zid = FFXIVHunts.GetZoneId(result.Id);
                        cm = ChatMessage.MakePosChatMessage(FFXIVHunts.GetWorldPrepend(result.WorldId) + string.Format(CultureInfo.CurrentCulture, Resources.LKILastSeenAt, result.Name), zid, result.LastX, result.LastY, string.Format(CultureInfo.CurrentCulture, Resources.LKIHoursMinutes, TotalHours, timeSinceLastReport.Minutes), 0);
                    }
                    if (result.Instance > 0)
                    {
                        cm.PostpendToMessage(string.Format(CultureInfo.CurrentCulture, " " + Resources.InstanceSpecifier, result.Instance));
                    }
                    await Program.mem.WriteChatMessage(cm).ConfigureAwait(false);
                }
                IEnumerator <Hunt> enumerator = null;
            }
        }
        private bool PutInChat(FATEReport fate)
        {
            World world;

            if (!FFXIVHunts.Worlds.TryGetValue(fate.WorldId, out world))
            {
                return(false);
            }
            int idx = world.FATEs.IndexOf(fate);

            if (idx == -1)
            {
                return(false);
            }
            FATEReport FATEReport = world.FATEs[idx];

            FATEReport.State          = fate.State;
            FATEReport.StartTimeEpoch = fate.StartTimeEpoch;
            FATEReport.Duration       = fate.Duration;
            FATEReport.Progress       = fate.Progress;
            bool skipAnnounce = (Settings.Default.NoAnnouncementsInContent && Program.mem.GetCurrentContentFinderCondition() > 0) || (Math.Abs(fate.TimeRemaining.TotalHours) < 3.0 && fate.TimeRemaining.TotalMinutes < (double)Settings.Default.FATEMinimumMinutesRemaining) || ((fate.State == FATEState.Preparation) ? (FATEReport.lastPutInChat > Program.mem.GetServerUtcTime().AddMinutes(-10.0)) : (Math.Abs((int)(fate.Progress - FATEReport.LastReportedProgress)) < (int)Settings.Default.FATEMinimumPercentInterval && Settings.Default.FATEMinimumPercentInterval > 0));

            if (FFXIVHunts.FateNotifyCheck(FATEReport.ID) && FATEReport.lastPutInChat < Program.mem.GetServerUtcTime().AddMinutes((double)(-(double)Settings.Default.FATEInterval)) && !fate.HasEnded && !skipAnnounce)
            {
                string postpend;
                if (fate.State == FATEState.Preparation)
                {
                    postpend = Resources.PreparationState;
                }
                else if (Math.Abs(fate.TimeRemaining.TotalHours) > 3.0)
                {
                    postpend = fate.Progress.ToString() + "%";
                }
                else
                {
                    postpend = string.Format(CultureInfo.CurrentCulture, Resources.FATEPrcTimeRemaining, fate.Progress, (int)fate.TimeRemaining.TotalMinutes, fate.TimeRemaining.Seconds.ToString("D2", CultureInfo.CreateSpecificCulture(Settings.Default.LanguageCI)));
                }
                if (fate.Instance > 0)
                {
                    postpend += string.Format(CultureInfo.CurrentCulture, " " + Resources.InstanceSpecifier, fate.Instance);
                }
                ChatMessage cm = ChatMessage.MakePosChatMessage(string.Format(CultureInfo.CurrentCulture, FFXIVHunts.GetWorldPrepend(fate.WorldId) + Resources.FATEMsg, FATEReport.Name(false)), fate.ZoneID, fate.PosX, fate.PosY, " " + postpend, 0);
                Program.mem.WriteChatMessage(cm);
                this.CheckAndPlaySound(HuntRank.FATE);
                FATEReport.lastPutInChat        = Program.mem.GetServerUtcTime();
                FATEReport.LastReportedProgress = fate.Progress;
                return(true);
            }
            return(false);
        }