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; }
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; } }
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); } } }
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); }