示例#1
0
        private void Ring(Alarm alarm, int currentMinute)
        {
            if (alarm.SoundId > Sounds.Unknown)
            {
                _sounds.Invoke(alarm.SoundId);
            }

            if (alarm.PrintMessage)
            {
                var tmp = "is currently up";
                if (alarm.MinuteOffset > 0)
                {
                    var offTime = (currentMinute / 60 + alarm.Node !.Times !.NextUptime(currentMinute / 60 % 24)) * 60 - currentMinute;
                    var(m, s) = EorzeaTime.MinutesToReal(offTime);
                    if (offTime > 0)
                    {
                        tmp = $"will be up in {m}:{s:D2} minutes (real-time)";
                    }
                }

                var items = alarm.Node !.Items !.PrintItems(", ", _pi.ClientState.ClientLanguage);
                _pi.Framework.Gui.Chat.PrintError($"[GatherBuddy][Alarm {alarm.Name}]: The gathering node for {items} {tmp}.");
            }

            LastAlarm = alarm;
        }
示例#2
0
        private void BackgroundCore()
        {
            // FFXIVプロセスの有無を取得する
            this.existFFXIVProcess =
                XIVPluginHelper.Instance.CurrentFFXIVProcess != null &&
                !XIVPluginHelper.Instance.CurrentFFXIVProcess.HasExited;

            if ((DateTime.Now - this.lastSaveTickerTableDateTime).TotalMinutes >= 1)
            {
                this.lastSaveTickerTableDateTime = DateTime.Now;

                if (this.existFFXIVProcess)
                {
                    // ついでにLPSを出力する
                    var lps = XIVPluginHelper.Instance.LPS;
                    if (lps > 0 &&
                        this.lastLPS != lps)
                    {
                        Logger.Write($"LPS={lps.ToString("N1")}");
                        this.lastLPS = lps;
                    }

                    // ついでにアクティブなトリガ数を出力する
                    var count = this.lastActiveTriggerCount;
                    if (count > 0 &&
                        this.lastLogedActiveTriggerCount != count)
                    {
                        this.lastLogedActiveTriggerCount = count;
                        Logger.Write($"ActiveTriggers={count.ToString("N0")}");
                    }
                }
            }

            if (this.existFFXIVProcess)
            {
                var zoneID   = XIVPluginHelper.Instance.GetCurrentZoneID();
                var zoneName = XIVPluginHelper.Instance.GetCurrentZoneName();

                // ついでにETを出力する
                var nowET = EorzeaTime.Now;
                if (nowET.Hour != this.previousET.Hour)
                {
                    LogParser.RaiseLog(
                        DateTime.Now,
                        $"[EX] ETTick ET{nowET.Hour:00}:00 Zone:{zoneID:000} {zoneName}");
                }

                this.previousET = nowET;
            }
        }
示例#3
0
        public void OnUpdate(object framework)
        {
            // Skip if the player isn't loaded in a territory.
            if (_pi.ClientState.TerritoryType == 0)
            {
                return;
            }

            var minute = EorzeaTime.CurrentMinuteOfDay();

            if (minute == _currentMinute)
            {
                return;
            }

            _currentMinute = minute;
            for (var i = 0; i < Alarms.Count; ++i)
            {
                var alarm = Alarms[i];
                if (!alarm.Enabled)
                {
                    continue;
                }

                var hour = (_currentMinute + alarm.MinuteOffset) / 60 % 24;

                var newStatus = alarm.Node !.Times !.IsUp(hour);
                if (_status[i] == newStatus)
                {
                    continue;
                }

                _status[i] = newStatus;
                if (newStatus)
                {
                    Ring(alarm, _currentMinute);
                }
            }
        }
示例#4
0
        private string ReplaceFormatPlaceholders(string format, Alarm alarm, int currentMinute)
        {
            var result = format.Replace("{Name}", alarm.Name);

            result = result.Replace("{Offset}", alarm.MinuteOffset.ToString());
            result = result.Replace("{TimesShort}", alarm.Node !.Times !.PrintHours(true));
            result = result.Replace("{TimesLong}", alarm.Node !.Times !.PrintHours());
            result = result.Replace("{AllItems}", alarm.Node !.Items !.PrintItems(", ", _pi.ClientState.ClientLanguage));

            var tmp = "is currently up";

            if (alarm.MinuteOffset > 0)
            {
                var offTime = (currentMinute / 60 + alarm.Node !.Times !.NextUptime(currentMinute / 60 % 24)) * 60 - currentMinute;
                var(m, s) = EorzeaTime.MinutesToReal(offTime);
                if (offTime > 0)
                {
                    tmp = $"will be up in {m}:{s:D2} minutes";
                }
            }

            result = result.Replace("{DelayString}", tmp);
            return(result);
        }