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();
|
this.DelayWatch.Restart();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (
|
this.HandleEvaluation();
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.Config.ClearResultsOnInactive && this.DelayWatch.IsRunning && this.DelayWatch.Elapsed >= TimeSpan.FromSeconds(this.Config.ClearDelaySeconds)) {
|
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>
|
/// <summary>
|
||||||
/// Update the party list.
|
/// Update the party list.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
Loading…
Reference in New Issue
Block a user