diff --git a/Plugin.cs b/Plugin.cs index 5de175e..d49663c 100644 --- a/Plugin.cs +++ b/Plugin.cs @@ -169,48 +169,7 @@ public class Plugin : IDalamudPlugin { this.DelayWatch.Restart(); } - if ( - this.Config.UseEvaluatorNpc - && this.ClientState.LocalPlayer is { } player - && this.Client.Data != null - ) { - var evaluator = this.Config.EvaluatorId == Evaluator.RandomId - ? Random.Shared.GetItems(Evaluator.Evaluators, 1)[0] - : Evaluator.Evaluators.FirstOrDefault(e => e.Id == this.Config.EvaluatorId); - if (evaluator != null) { - var combatants = this.Client.Data.Combatants.Values - .Where(combatant => { - var job = this.DataManager.GetExcelSheet()! - .FirstOrDefault(j => j.Abbreviation.RawString.Equals(combatant.JobAbbr, StringComparison.InvariantCultureIgnoreCase)); - - return job?.Role == player.ClassJob.GameData?.Role; - }) - .ToList(); - combatants.Sort((a, b) => a.EncDps.CompareTo(b.EncDps)); - var rank = (float) (combatants.FindIndex(combatant => combatant.Name == "YOU") + 1) / combatants.Count; - var thresholds = this.Config.EvaluationThresholds.ToList(); - thresholds.Sort((a, b) => b.Value.CompareTo(a.Value)); - foreach (var threshold in thresholds) { - if (rank < threshold.Value) { - continue; - } - - var msg = evaluator.GetLineFor(threshold.Key); - if (msg != null) { - var bytes = msg.EncodeWithNullTerminator(); - UIModule.Instance()->ShowBattleTalkImage( - Encoding.UTF8.GetBytes(evaluator.Name), - bytes, - 5f, - evaluator.BattleTalkImage, - 0 - ); - } - - break; - } - } - } + this.HandleEvaluation(); } if (this.Config.ClearResultsOnInactive && this.DelayWatch.IsRunning && this.DelayWatch.Elapsed >= TimeSpan.FromSeconds(this.Config.ClearDelaySeconds)) { @@ -244,6 +203,60 @@ public class Plugin : IDalamudPlugin { } } + private unsafe void HandleEvaluation() { + if ( + !this.Config.UseEvaluatorNpc + || this.ClientState.LocalPlayer is not { } player + || this.Client.Data == null + ) { + return; + } + + var evaluator = this.Config.EvaluatorId == Evaluator.RandomId + ? Random.Shared.GetItems(Evaluator.Evaluators, 1)[0] + : Evaluator.Evaluators.FirstOrDefault(e => e.Id == this.Config.EvaluatorId); + if (evaluator == null) { + return; + } + + var combatants = this.Client.Data.Combatants.Values + .Where(combatant => { + var job = this.DataManager.GetExcelSheet()! + .FirstOrDefault(j => j.Abbreviation.RawString.Equals(combatant.JobAbbr, StringComparison.InvariantCultureIgnoreCase)); + + return job?.Role == player.ClassJob.GameData?.Role; + }) + .ToList(); + combatants.Sort((a, b) => a.EncDps.CompareTo(b.EncDps)); + var youIndex = combatants.FindIndex(combatant => combatant.Name == "YOU"); + if (youIndex == -1) { + return; + } + + var rank = (float) (youIndex + 1) / combatants.Count; + var thresholds = this.Config.EvaluationThresholds.ToList(); + thresholds.Sort((a, b) => b.Value.CompareTo(a.Value)); + foreach (var threshold in thresholds) { + if (rank < threshold.Value) { + continue; + } + + var msg = evaluator.GetLineFor(threshold.Key); + if (msg != null) { + var bytes = msg.EncodeWithNullTerminator(); + UIModule.Instance()->ShowBattleTalkImage( + Encoding.UTF8.GetBytes(evaluator.Name), + bytes, + 5f, + evaluator.BattleTalkImage, + 0 + ); + } + + break; + } + } + /// /// Update the party list. ///