/// <summary> /// パーティを監視する /// </summary> public void WatchParty() { // パーティメンバの情報を取得する var player = this.GetPlayer(); var partyList = this.GetCombatantListParty(); // パーティリストに存在しないメンバの前回の状態を消去する var removeList = new List <PreviousPartyMemberStatus>(); foreach (var previouseMember in previouseParyMemberList) { if (!partyList.Any(x => x.ID == previouseMember.ID)) { removeList.Add(previouseMember); } } foreach (var removeMember in removeList) { this.previouseParyMemberList.Remove(removeMember); } foreach (var partyMember in partyList) { // このPTメンバの現在の状態を取得する var hp = partyMember.CurrentHP; var hpp = partyMember.MaxHP != 0 ? ((decimal)partyMember.CurrentHP / (decimal)partyMember.MaxHP) * 100m : 0m; var mp = partyMember.CurrentMP; var mpp = partyMember.MaxMP != 0 ? ((decimal)partyMember.CurrentMP / (decimal)partyMember.MaxMP) * 100m : 0m; var tp = partyMember.CurrentTP; var tpp = ((decimal)partyMember.CurrentTP / 1000m) * 100m; // このPTメンバの直前の情報を取得する var previousePartyMember = ( from x in this.previouseParyMemberList where x.ID == partyMember.ID select x).FirstOrDefault(); if (previousePartyMember == null) { previousePartyMember = new PreviousPartyMemberStatus() { ID = partyMember.ID, Name = partyMember.Name, HPRate = hpp, MPRate = mpp, TPRate = tpp }; this.previouseParyMemberList.Add(previousePartyMember); } // 読上げ用の名前「ジョブ名+イニシャル」とする var pcname = GetJobNameToSpeak(partyMember.Job) + partyMember.Name.Trim().Substring(0, 1); // 読上げ用のテキストを編集する var hpTextToSpeak = TTSYukkuriConfig.Default.OptionSettings.HPTextToSpeack; var mpTextToSpeak = TTSYukkuriConfig.Default.OptionSettings.MPTextToSpeack; var tpTextToSpeak = TTSYukkuriConfig.Default.OptionSettings.TPTextToSpeack; hpTextToSpeak = hpTextToSpeak.Replace("<pcname>", pcname); hpTextToSpeak = hpTextToSpeak.Replace("<hp>", hp.ToString()); hpTextToSpeak = hpTextToSpeak.Replace("<hpp>", decimal.ToInt32(hpp).ToString()); hpTextToSpeak = hpTextToSpeak.Replace("<mp>", mp.ToString()); hpTextToSpeak = hpTextToSpeak.Replace("<mpp>", decimal.ToInt32(mpp).ToString()); hpTextToSpeak = hpTextToSpeak.Replace("<tp>", tp.ToString()); hpTextToSpeak = hpTextToSpeak.Replace("<tpp>", decimal.ToInt32(tpp).ToString()); mpTextToSpeak = mpTextToSpeak.Replace("<pcname>", pcname); mpTextToSpeak = mpTextToSpeak.Replace("<hp>", hp.ToString()); mpTextToSpeak = mpTextToSpeak.Replace("<hpp>", decimal.ToInt32(hpp).ToString()); mpTextToSpeak = mpTextToSpeak.Replace("<mp>", mp.ToString()); mpTextToSpeak = mpTextToSpeak.Replace("<mpp>", decimal.ToInt32(mpp).ToString()); mpTextToSpeak = mpTextToSpeak.Replace("<tp>", tp.ToString()); mpTextToSpeak = mpTextToSpeak.Replace("<tpp>", decimal.ToInt32(tpp).ToString()); tpTextToSpeak = tpTextToSpeak.Replace("<pcname>", pcname); tpTextToSpeak = tpTextToSpeak.Replace("<hp>", hp.ToString()); tpTextToSpeak = tpTextToSpeak.Replace("<hpp>", decimal.ToInt32(hpp).ToString()); tpTextToSpeak = tpTextToSpeak.Replace("<mp>", mp.ToString()); tpTextToSpeak = tpTextToSpeak.Replace("<mpp>", decimal.ToInt32(mpp).ToString()); tpTextToSpeak = tpTextToSpeak.Replace("<tp>", tp.ToString()); tpTextToSpeak = tpTextToSpeak.Replace("<tpp>", decimal.ToInt32(tpp).ToString()); // HPをチェックして読上げる if (TTSYukkuriConfig.Default.OptionSettings.EnabledHPWatch && !string.IsNullOrWhiteSpace(hpTextToSpeak)) { if (this.IsWatchTarget(partyMember, player, "HP")) { if (hpp <= (decimal)TTSYukkuriConfig.Default.OptionSettings.HPThreshold && previousePartyMember.HPRate > (decimal)TTSYukkuriConfig.Default.OptionSettings.HPThreshold) { if ((DateTime.Now - this.lastHPNotice).TotalSeconds >= 6.0d) { this.Speak(hpTextToSpeak); this.lastHPNotice = DateTime.Now; } } else { if (hpp <= decimal.Zero && previousePartyMember.HPRate != decimal.Zero) { this.Speak(pcname + "、せんとうふのう。"); this.lastHPNotice = DateTime.Now; } } } } // MPをチェックして読上げる if (hp > 0) { if (TTSYukkuriConfig.Default.OptionSettings.EnabledMPWatch && !string.IsNullOrWhiteSpace(mpTextToSpeak)) { if (this.IsWatchTarget(partyMember, player, "MP")) { if (mpp <= (decimal)TTSYukkuriConfig.Default.OptionSettings.MPThreshold && previousePartyMember.MPRate > (decimal)TTSYukkuriConfig.Default.OptionSettings.MPThreshold) { if ((DateTime.Now - this.lastMPNotice).TotalSeconds >= 6.0d) { this.Speak(mpTextToSpeak); this.lastMPNotice = DateTime.Now; } } else { if (mpp <= decimal.Zero && previousePartyMember.MPRate != decimal.Zero) { this.Speak(pcname + "、MPなし。"); this.lastMPNotice = DateTime.Now; } } } } } // TPをチェックして読上げる if (hp > 0) { if (TTSYukkuriConfig.Default.OptionSettings.EnabledTPWatch && !string.IsNullOrWhiteSpace(tpTextToSpeak)) { if (this.IsWatchTarget(partyMember, player, "TP")) { if (tpp <= (decimal)TTSYukkuriConfig.Default.OptionSettings.TPThreshold && previousePartyMember.TPRate > (decimal)TTSYukkuriConfig.Default.OptionSettings.TPThreshold) { if ((DateTime.Now - this.lastTPNotice).TotalSeconds >= 6.0d) { this.Speak(tpTextToSpeak); this.lastTPNotice = DateTime.Now; } } else { if (tpp <= decimal.Zero && previousePartyMember.TPRate != decimal.Zero) { this.Speak(pcname + "、TPなし。"); this.lastTPNotice = DateTime.Now; } } } } } // 今回の状態を保存する previousePartyMember.HPRate = hpp; previousePartyMember.MPRate = mpp; previousePartyMember.TPRate = tpp; } }
/// <summary> /// パーティを監視する /// </summary> public void WatchParty() { // パーティメンバの情報を取得する var player = CombatantsManager.Instance.Player; var partyList = CombatantsManager.Instance.GetPartyList(); // パーティリストに存在しないメンバの前回の状態を消去する this.previouseParyMemberList.RemoveAll(x => !partyList.Any(y => y.ID == x.ID)); foreach (var partyMember in partyList) { // このPTメンバの現在の状態を取得する var hp = partyMember.CurrentHP; var hpp = partyMember.MaxHP != 0 ? ((decimal)partyMember.CurrentHP / (decimal)partyMember.MaxHP) * 100m : 0m; var mp = partyMember.CurrentMP; var mpp = partyMember.MaxMP != 0 ? ((decimal)partyMember.CurrentMP / (decimal)partyMember.MaxMP) * 100m : 0m; var tp = partyMember.CurrentTP; var tpp = ((decimal)partyMember.CurrentTP / 1000m) * 100m; var gp = partyMember.CurrentGP; var gpp = partyMember.MaxGP != 0 ? ((decimal)partyMember.CurrentGP / (decimal)partyMember.MaxGP) * 100m : 0m; // このPTメンバの直前の情報を取得する var previousePartyMember = ( from x in this.previouseParyMemberList where x.ID == partyMember.ID select x).FirstOrDefault(); if (previousePartyMember == null) { previousePartyMember = new PreviousPartyMemberStatus() { ID = partyMember.ID, Name = partyMember.Name, HPRate = hpp, MPRate = mpp, TPRate = tpp, GPRate = gpp, }; this.previouseParyMemberList.Add(previousePartyMember); } // 読上げ用の名前「ジョブ名+イニシャル」とする var pcname = string.Empty; var job = string.Empty; if (partyMember.IsPlayer) { switch (Settings.Default.UILocale) { case Locales.EN: pcname = "You"; break; case Locales.JA: pcname = "自分"; break; case Locales.CN: pcname = "你"; break; default: pcname = "You"; break; } job = pcname; } else { if (Settings.Default.UILocale == Locales.CN) { pcname = $"{partyMember.Name.Trim()}"; } else { pcname = $"{partyMember.JobID.GetPhonetic()} {partyMember.Name.Trim().Substring(0, 1)}"; } job = partyMember.JobID.GetPhonetic(); } // 読上げ用のテキストを編集する var hpTextToSpeak = Settings.Default.StatusAlertSettings.HPTextToSpeack; var mpTextToSpeak = Settings.Default.StatusAlertSettings.MPTextToSpeack; var tpTextToSpeak = Settings.Default.StatusAlertSettings.TPTextToSpeack; var gpTextToSpeak = Settings.Default.StatusAlertSettings.GPTextToSpeack; hpTextToSpeak = replaceTTS(hpTextToSpeak); mpTextToSpeak = replaceTTS(mpTextToSpeak); tpTextToSpeak = replaceTTS(tpTextToSpeak); gpTextToSpeak = replaceTTS(gpTextToSpeak); var isUsingJob = false; string replaceTTS(string tts) { if (tts.Contains("<job>")) { isUsingJob = true; } tts = tts.Replace("<pcname>", pcname); tts = tts.Replace("<job>", job); tts = tts.Replace("<hp>", hp.ToString()); tts = tts.Replace("<hpp>", decimal.ToInt32(hpp).ToString()); tts = tts.Replace("<mp>", mp.ToString()); tts = tts.Replace("<mpp>", decimal.ToInt32(mpp).ToString()); tts = tts.Replace("<tp>", tp.ToString()); tts = tts.Replace("<tpp>", decimal.ToInt32(tpp).ToString()); tts = tts.Replace("<gp>", gp.ToString()); tts = tts.Replace("<gpp>", decimal.ToInt32(gpp).ToString()); return(tts); } var deadman = isUsingJob ? job : pcname; // 設定へのショートカット var config = Settings.Default.StatusAlertSettings; // HPをチェックして読上げる if (config.EnabledHPAlert && !string.IsNullOrWhiteSpace(hpTextToSpeak)) { if (this.IsWatchTarget(partyMember, player, "HP")) { if (hpp <= (decimal)config.HPThreshold && previousePartyMember.HPRate > (decimal)config.HPThreshold) { if ((DateTime.Now - this.lastHPNotice).TotalSeconds >= NoticeInterval) { this.Speak(hpTextToSpeak, config.NoticeDeviceForHP, config.NoticeVoicePaletteForHP); this.lastHPNotice = DateTime.Now; } } else { if (hpp <= decimal.Zero && previousePartyMember.HPRate != decimal.Zero) { this.SpeakEmpty("HP", deadman, config.NoticeDeviceForHP, config.NoticeVoicePaletteForHP); this.lastHPNotice = DateTime.Now; } } } } // MPをチェックして読上げる if (hp > 0) { if (config.EnabledMPAlert && !string.IsNullOrWhiteSpace(mpTextToSpeak)) { if (this.IsWatchTarget(partyMember, player, "MP")) { if (mpp <= (decimal)config.MPThreshold && previousePartyMember.MPRate > (decimal)config.MPThreshold) { if ((DateTime.Now - this.lastMPNotice).TotalSeconds >= NoticeInterval) { this.Speak(mpTextToSpeak, config.NoticeDeviceForMP, config.NoticeVoicePaletteForMP); this.lastMPNotice = DateTime.Now; } } else { if (mpp <= decimal.Zero && previousePartyMember.MPRate != decimal.Zero) { this.SpeakEmpty("MP", deadman, config.NoticeDeviceForMP, config.NoticeVoicePaletteForMP); this.lastMPNotice = DateTime.Now; } } } } } // TPをチェックして読上げる if (hp > 0) { if (config.EnabledTPAlert && !string.IsNullOrWhiteSpace(tpTextToSpeak)) { if (this.IsWatchTarget(partyMember, player, "TP")) { if (tpp <= (decimal)config.TPThreshold && previousePartyMember.TPRate > (decimal)config.TPThreshold) { if ((DateTime.Now - this.lastTPNotice).TotalSeconds >= NoticeInterval) { this.Speak(tpTextToSpeak, config.NoticeDeviceForTP, config.NoticeVoicePaletteForTP); this.lastTPNotice = DateTime.Now; } } else { if (tpp <= decimal.Zero && previousePartyMember.TPRate != decimal.Zero) { this.SpeakEmpty("TP", deadman, config.NoticeDeviceForTP, config.NoticeVoicePaletteForTP); this.lastTPNotice = DateTime.Now; } } } } } // GPをチェックして読上げる if (hp > 0 && partyMember.MaxGP > 0) { if (config.EnabledGPAlert && !string.IsNullOrWhiteSpace(gpTextToSpeak)) { if (this.IsWatchTarget(partyMember, player, "GP")) { if (gpp >= (decimal)config.GPThreshold && previousePartyMember.GPRate < (decimal)config.GPThreshold) { if ((DateTime.Now - this.lastGPNotice).TotalSeconds >= NoticeInterval) { this.Speak(gpTextToSpeak, config.NoticeDeviceForGP, config.NoticeVoicePaletteForGP); this.lastGPNotice = DateTime.Now; } } else { if (gpp >= 100m && previousePartyMember.GPRate < 100m) { this.SpeakEmpty("GP", deadman, config.NoticeDeviceForGP, config.NoticeVoicePaletteForGP); this.lastGPNotice = DateTime.Now; } } } } } // 今回の状態を保存する previousePartyMember.HPRate = hpp; previousePartyMember.MPRate = mpp; previousePartyMember.TPRate = tpp; previousePartyMember.GPRate = gpp; } }
/// <summary> /// パーティを監視する /// </summary> public void WatchParty() { // パーティメンバの情報を取得する var player = this.GetPlayer(); var partyList = this.GetCombatantListParty(); // パーティリストに存在しないメンバの前回の状態を消去する var removeList = new List<PreviousPartyMemberStatus>(); foreach (var previouseMember in previouseParyMemberList) { if (!partyList.Any(x => x.ID == previouseMember.ID)) { removeList.Add(previouseMember); } } foreach (var removeMember in removeList) { this.previouseParyMemberList.Remove(removeMember); } foreach (var partyMember in partyList) { // このPTメンバの現在の状態を取得する var hp = partyMember.CurrentHP; var hpp = partyMember.MaxHP != 0 ? ((decimal)partyMember.CurrentHP / (decimal)partyMember.MaxHP) * 100m : 0m; var mp = partyMember.CurrentMP; var mpp = partyMember.MaxMP != 0 ? ((decimal)partyMember.CurrentMP / (decimal)partyMember.MaxMP) * 100m : 0m; var tp = partyMember.CurrentTP; var tpp = ((decimal)partyMember.CurrentTP / 1000m) * 100m; // このPTメンバの直前の情報を取得する var previousePartyMember = ( from x in this.previouseParyMemberList where x.ID == partyMember.ID select x).FirstOrDefault(); if (previousePartyMember == null) { previousePartyMember = new PreviousPartyMemberStatus() { ID = partyMember.ID, Name = partyMember.Name, HPRate = hpp, MPRate = mpp, TPRate = tpp }; this.previouseParyMemberList.Add(previousePartyMember); } // 読上げ用の名前「ジョブ名+イニシャル」とする var pcname = GetJobNameToSpeak(partyMember.Job) + partyMember.Name.Trim().Substring(0, 1); // 読上げ用のテキストを編集する var hpTextToSpeak = TTSYukkuriConfig.Default.OptionSettings.HPTextToSpeack; var mpTextToSpeak = TTSYukkuriConfig.Default.OptionSettings.MPTextToSpeack; var tpTextToSpeak = TTSYukkuriConfig.Default.OptionSettings.TPTextToSpeack; hpTextToSpeak = hpTextToSpeak.Replace("<pcname>", pcname); hpTextToSpeak = hpTextToSpeak.Replace("<hp>", hp.ToString()); hpTextToSpeak = hpTextToSpeak.Replace("<hpp>", decimal.ToInt32(hpp).ToString()); hpTextToSpeak = hpTextToSpeak.Replace("<mp>", mp.ToString()); hpTextToSpeak = hpTextToSpeak.Replace("<mpp>", decimal.ToInt32(mpp).ToString()); hpTextToSpeak = hpTextToSpeak.Replace("<tp>", tp.ToString()); hpTextToSpeak = hpTextToSpeak.Replace("<tpp>", decimal.ToInt32(tpp).ToString()); mpTextToSpeak = mpTextToSpeak.Replace("<pcname>", pcname); mpTextToSpeak = mpTextToSpeak.Replace("<hp>", hp.ToString()); mpTextToSpeak = mpTextToSpeak.Replace("<hpp>", decimal.ToInt32(hpp).ToString()); mpTextToSpeak = mpTextToSpeak.Replace("<mp>", mp.ToString()); mpTextToSpeak = mpTextToSpeak.Replace("<mpp>", decimal.ToInt32(mpp).ToString()); mpTextToSpeak = mpTextToSpeak.Replace("<tp>", tp.ToString()); mpTextToSpeak = mpTextToSpeak.Replace("<tpp>", decimal.ToInt32(tpp).ToString()); tpTextToSpeak = tpTextToSpeak.Replace("<pcname>", pcname); tpTextToSpeak = tpTextToSpeak.Replace("<hp>", hp.ToString()); tpTextToSpeak = tpTextToSpeak.Replace("<hpp>", decimal.ToInt32(hpp).ToString()); tpTextToSpeak = tpTextToSpeak.Replace("<mp>", mp.ToString()); tpTextToSpeak = tpTextToSpeak.Replace("<mpp>", decimal.ToInt32(mpp).ToString()); tpTextToSpeak = tpTextToSpeak.Replace("<tp>", tp.ToString()); tpTextToSpeak = tpTextToSpeak.Replace("<tpp>", decimal.ToInt32(tpp).ToString()); // HPをチェックして読上げる if (TTSYukkuriConfig.Default.OptionSettings.EnabledHPWatch && !string.IsNullOrWhiteSpace(hpTextToSpeak)) { if (this.IsWatchTarget(partyMember, player, "HP")) { if (hpp <= (decimal)TTSYukkuriConfig.Default.OptionSettings.HPThreshold && previousePartyMember.HPRate > (decimal)TTSYukkuriConfig.Default.OptionSettings.HPThreshold) { if ((DateTime.Now - this.lastHPNotice).TotalSeconds >= 6.0d) { this.Speak(hpTextToSpeak); this.lastHPNotice = DateTime.Now; } } else { if (hpp <= decimal.Zero && previousePartyMember.HPRate != decimal.Zero) { this.Speak(pcname + "、せんとうふのう。"); this.lastHPNotice = DateTime.Now; } } } } // MPをチェックして読上げる if (hp > 0) { if (TTSYukkuriConfig.Default.OptionSettings.EnabledMPWatch && !string.IsNullOrWhiteSpace(mpTextToSpeak)) { if (this.IsWatchTarget(partyMember, player, "MP")) { if (mpp <= (decimal)TTSYukkuriConfig.Default.OptionSettings.MPThreshold && previousePartyMember.MPRate > (decimal)TTSYukkuriConfig.Default.OptionSettings.MPThreshold) { if ((DateTime.Now - this.lastMPNotice).TotalSeconds >= 6.0d) { this.Speak(mpTextToSpeak); this.lastMPNotice = DateTime.Now; } } else { if (mpp <= decimal.Zero && previousePartyMember.MPRate != decimal.Zero) { this.Speak(pcname + "、MPなし。"); this.lastMPNotice = DateTime.Now; } } } } } // TPをチェックして読上げる if (hp > 0) { if (TTSYukkuriConfig.Default.OptionSettings.EnabledTPWatch && !string.IsNullOrWhiteSpace(tpTextToSpeak)) { if (this.IsWatchTarget(partyMember, player, "TP")) { if (tpp <= (decimal)TTSYukkuriConfig.Default.OptionSettings.TPThreshold && previousePartyMember.TPRate > (decimal)TTSYukkuriConfig.Default.OptionSettings.TPThreshold) { if ((DateTime.Now - this.lastTPNotice).TotalSeconds >= 6.0d) { this.Speak(tpTextToSpeak); this.lastTPNotice = DateTime.Now; } } else { if (tpp <= decimal.Zero && previousePartyMember.TPRate != decimal.Zero) { this.Speak(pcname + "、TPなし。"); this.lastTPNotice = DateTime.Now; } } } } } // 今回の状態を保存する previousePartyMember.HPRate = hpp; previousePartyMember.MPRate = mpp; previousePartyMember.TPRate = tpp; } }
/// <summary> /// パーティを監視する /// </summary> public void WatchParty() { // パーティメンバの情報を取得する var player = FFXIVPlugin.Instance.GetPlayer(); var partyList = FFXIVPlugin.Instance.GetPartyList(); // パーティリストに存在しないメンバの前回の状態を消去する this.previouseParyMemberList.RemoveAll(x => !partyList.Any(y => y.ID == x.ID)); foreach (var partyMember in partyList) { // このPTメンバの現在の状態を取得する var hp = partyMember.CurrentHP; var hpp = partyMember.MaxHP != 0 ? ((decimal)partyMember.CurrentHP / (decimal)partyMember.MaxHP) * 100m : 0m; var mp = partyMember.CurrentMP; var mpp = partyMember.MaxMP != 0 ? ((decimal)partyMember.CurrentMP / (decimal)partyMember.MaxMP) * 100m : 0m; var tp = partyMember.CurrentTP; var tpp = ((decimal)partyMember.CurrentTP / 1000m) * 100m; // このPTメンバの直前の情報を取得する var previousePartyMember = ( from x in this.previouseParyMemberList where x.ID == partyMember.ID select x).FirstOrDefault(); if (previousePartyMember == null) { previousePartyMember = new PreviousPartyMemberStatus() { ID = partyMember.ID, Name = partyMember.Name, HPRate = hpp, MPRate = mpp, TPRate = tpp }; this.previouseParyMemberList.Add(previousePartyMember); } // 読上げ用の名前「ジョブ名+イニシャル」とする var pcname = string.Empty; if (partyMember.IsPlayer) { switch (Settings.Default.UILocale) { case Locales.EN: pcname = "You"; break; case Locales.JA: pcname = "自分"; break; } } else { pcname = $"{partyMember.JobID.GetPhonetic()} { partyMember.Name.Trim().Substring(0, 1)}"; } // 読上げ用のテキストを編集する var hpTextToSpeak = Settings.Default.StatusAlertSettings.HPTextToSpeack; var mpTextToSpeak = Settings.Default.StatusAlertSettings.MPTextToSpeack; var tpTextToSpeak = Settings.Default.StatusAlertSettings.TPTextToSpeack; hpTextToSpeak = hpTextToSpeak.Replace("<pcname>", pcname); hpTextToSpeak = hpTextToSpeak.Replace("<hp>", hp.ToString()); hpTextToSpeak = hpTextToSpeak.Replace("<hpp>", decimal.ToInt32(hpp).ToString()); hpTextToSpeak = hpTextToSpeak.Replace("<mp>", mp.ToString()); hpTextToSpeak = hpTextToSpeak.Replace("<mpp>", decimal.ToInt32(mpp).ToString()); hpTextToSpeak = hpTextToSpeak.Replace("<tp>", tp.ToString()); hpTextToSpeak = hpTextToSpeak.Replace("<tpp>", decimal.ToInt32(tpp).ToString()); mpTextToSpeak = mpTextToSpeak.Replace("<pcname>", pcname); mpTextToSpeak = mpTextToSpeak.Replace("<hp>", hp.ToString()); mpTextToSpeak = mpTextToSpeak.Replace("<hpp>", decimal.ToInt32(hpp).ToString()); mpTextToSpeak = mpTextToSpeak.Replace("<mp>", mp.ToString()); mpTextToSpeak = mpTextToSpeak.Replace("<mpp>", decimal.ToInt32(mpp).ToString()); mpTextToSpeak = mpTextToSpeak.Replace("<tp>", tp.ToString()); mpTextToSpeak = mpTextToSpeak.Replace("<tpp>", decimal.ToInt32(tpp).ToString()); tpTextToSpeak = tpTextToSpeak.Replace("<pcname>", pcname); tpTextToSpeak = tpTextToSpeak.Replace("<hp>", hp.ToString()); tpTextToSpeak = tpTextToSpeak.Replace("<hpp>", decimal.ToInt32(hpp).ToString()); tpTextToSpeak = tpTextToSpeak.Replace("<mp>", mp.ToString()); tpTextToSpeak = tpTextToSpeak.Replace("<mpp>", decimal.ToInt32(mpp).ToString()); tpTextToSpeak = tpTextToSpeak.Replace("<tp>", tp.ToString()); tpTextToSpeak = tpTextToSpeak.Replace("<tpp>", decimal.ToInt32(tpp).ToString()); // HPをチェックして読上げる if (Settings.Default.StatusAlertSettings.EnabledHPAlert && !string.IsNullOrWhiteSpace(hpTextToSpeak)) { if (this.IsWatchTarget(partyMember, player, "HP")) { if (hpp <= (decimal)Settings.Default.StatusAlertSettings.HPThreshold && previousePartyMember.HPRate > (decimal)Settings.Default.StatusAlertSettings.HPThreshold) { if ((DateTime.Now - this.lastHPNotice).TotalSeconds >= NoticeInterval) { this.Speak(hpTextToSpeak); this.lastHPNotice = DateTime.Now; } } else { if (hpp <= decimal.Zero && previousePartyMember.HPRate != decimal.Zero) { this.SpeakEmpty("HP", pcname); this.lastHPNotice = DateTime.Now; } } } } // MPをチェックして読上げる if (hp > 0) { if (Settings.Default.StatusAlertSettings.EnabledMPAlert && !string.IsNullOrWhiteSpace(mpTextToSpeak)) { if (this.IsWatchTarget(partyMember, player, "MP")) { if (mpp <= (decimal)Settings.Default.StatusAlertSettings.MPThreshold && previousePartyMember.MPRate > (decimal)Settings.Default.StatusAlertSettings.MPThreshold) { if ((DateTime.Now - this.lastMPNotice).TotalSeconds >= NoticeInterval) { this.Speak(mpTextToSpeak); this.lastMPNotice = DateTime.Now; } } else { if (mpp <= decimal.Zero && previousePartyMember.MPRate != decimal.Zero) { this.SpeakEmpty("MP", pcname); this.lastMPNotice = DateTime.Now; } } } } } // TPをチェックして読上げる if (hp > 0) { if (Settings.Default.StatusAlertSettings.EnabledTPAlert && !string.IsNullOrWhiteSpace(tpTextToSpeak)) { if (this.IsWatchTarget(partyMember, player, "TP")) { if (tpp <= (decimal)Settings.Default.StatusAlertSettings.TPThreshold && previousePartyMember.TPRate > (decimal)Settings.Default.StatusAlertSettings.TPThreshold) { if ((DateTime.Now - this.lastTPNotice).TotalSeconds >= NoticeInterval) { this.Speak(tpTextToSpeak); this.lastTPNotice = DateTime.Now; } } else { if (tpp <= decimal.Zero && previousePartyMember.TPRate != decimal.Zero) { this.SpeakEmpty("TP", pcname); this.lastTPNotice = DateTime.Now; } } } } } // 今回の状態を保存する previousePartyMember.HPRate = hpp; previousePartyMember.MPRate = mpp; previousePartyMember.TPRate = tpp; } }