refactor: pull evaluation into its own method
This commit is contained in:
parent
b299309463
commit
7e77b5100a
97
Plugin.cs
97
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<ClassJob>()!
|
||||
.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<ClassJob>()!
|
||||
.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;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Update the party list.
|
||||
/// </summary>
|
||||
|
Loading…
Reference in New Issue
Block a user