feat: add random evaluator option
This commit is contained in:
parent
8c7222b6ef
commit
eed90f2ded
@ -44,6 +44,8 @@ public class Evaluator {
|
|||||||
return line;
|
return line;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static readonly Guid RandomId = new("00000000-0000-0000-0000-000000000001");
|
||||||
|
|
||||||
public static readonly Evaluator[] Evaluators = [
|
public static readonly Evaluator[] Evaluators = [
|
||||||
new Evaluator {
|
new Evaluator {
|
||||||
Id = new Guid("ebbccc44-13b5-4843-a635-3b693fe47840"),
|
Id = new Guid("ebbccc44-13b5-4843-a635-3b693fe47840"),
|
||||||
@ -117,10 +119,9 @@ public class Evaluator {
|
|||||||
Lines = new Dictionary<Evaluation, SeString[]> {
|
Lines = new Dictionary<Evaluation, SeString[]> {
|
||||||
[Evaluation.Best] = [
|
[Evaluation.Best] = [
|
||||||
new SeStringBuilder()
|
new SeStringBuilder()
|
||||||
.AddItalics("Incredible!")
|
.AddText("Incredible! You have ")
|
||||||
.AddText(" You have ")
|
|
||||||
.AddItalics("got")
|
.AddItalics("got")
|
||||||
.AddText("to show me how to do that sometime!")
|
.AddText(" to show me how to do that sometime!")
|
||||||
.Build(),
|
.Build(),
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
59
Plugin.cs
59
Plugin.cs
@ -173,37 +173,40 @@ public class Plugin : IDalamudPlugin {
|
|||||||
this.Config.UseEvaluatorNpc
|
this.Config.UseEvaluatorNpc
|
||||||
&& this.ClientState.LocalPlayer is { } player
|
&& this.ClientState.LocalPlayer is { } player
|
||||||
&& this.Client.Data != null
|
&& this.Client.Data != null
|
||||||
&& Evaluator.Evaluators.FirstOrDefault(e => e.Id == this.Config.EvaluatorId) is { } evaluator
|
|
||||||
) {
|
) {
|
||||||
var combatants = this.Client.Data.Combatants.Values
|
var evaluator = this.Config.EvaluatorId == Evaluator.RandomId
|
||||||
.Where(combatant => {
|
? Random.Shared.GetItems(Evaluator.Evaluators, 1)[0]
|
||||||
var job = this.DataManager.GetExcelSheet<ClassJob>()!
|
: Evaluator.Evaluators.FirstOrDefault(e => e.Id == this.Config.EvaluatorId);
|
||||||
.FirstOrDefault(j => j.Abbreviation.RawString.Equals(combatant.JobAbbr, StringComparison.InvariantCultureIgnoreCase));
|
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;
|
return job?.Role == player.ClassJob.GameData?.Role;
|
||||||
})
|
})
|
||||||
.ToList();
|
.ToList();
|
||||||
combatants.Sort((a, b) => a.EncDps.CompareTo(b.EncDps));
|
combatants.Sort((a, b) => a.EncDps.CompareTo(b.EncDps));
|
||||||
var rank = (float) (combatants.FindIndex(combatant => combatant.Name == "YOU") + 1) / combatants.Count;
|
var rank = (float) (combatants.FindIndex(combatant => combatant.Name == "YOU") + 1) / combatants.Count;
|
||||||
var evaluation = rank switch {
|
var evaluation = rank switch {
|
||||||
>= .85f => Evaluation.Best,
|
>= .85f => Evaluation.Best,
|
||||||
>= .65f => Evaluation.Good,
|
>= .65f => Evaluation.Good,
|
||||||
>= .45f => Evaluation.Fair,
|
>= .45f => Evaluation.Fair,
|
||||||
>= .25f => Evaluation.Poor,
|
>= .25f => Evaluation.Poor,
|
||||||
_ => Evaluation.Awful,
|
_ => Evaluation.Awful,
|
||||||
};
|
};
|
||||||
var msg = evaluator.GetLineFor(evaluation);
|
var msg = evaluator.GetLineFor(evaluation);
|
||||||
if (msg != null) {
|
if (msg != null) {
|
||||||
var bytes = msg.EncodeWithNullTerminator();
|
var bytes = msg.EncodeWithNullTerminator();
|
||||||
UIModule.Instance()->ShowBattleTalkImage(
|
UIModule.Instance()->ShowBattleTalkImage(
|
||||||
Encoding.UTF8.GetBytes(evaluator.Name),
|
Encoding.UTF8.GetBytes(evaluator.Name),
|
||||||
bytes,
|
bytes,
|
||||||
5f,
|
5f,
|
||||||
evaluator.BattleTalkImage,
|
evaluator.BattleTalkImage,
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
10
PluginUi.cs
10
PluginUi.cs
@ -120,7 +120,9 @@ public class PluginUi : IDisposable {
|
|||||||
using (ImGuiHelper.DisabledUnless(this.Plugin.Config.UseEvaluatorNpc)) {
|
using (ImGuiHelper.DisabledUnless(this.Plugin.Config.UseEvaluatorNpc)) {
|
||||||
var current = Evaluator.Evaluators.FirstOrDefault(e => e.Id == this.Plugin.Config.EvaluatorId);
|
var current = Evaluator.Evaluators.FirstOrDefault(e => e.Id == this.Plugin.Config.EvaluatorId);
|
||||||
var preview = current == null
|
var preview = current == null
|
||||||
? "None"
|
? this.Plugin.Config.EvaluatorId == Evaluator.RandomId
|
||||||
|
? "Random"
|
||||||
|
: "None"
|
||||||
: current.Name;
|
: current.Name;
|
||||||
if (ImGui.BeginCombo("Evaluator", preview)) {
|
if (ImGui.BeginCombo("Evaluator", preview)) {
|
||||||
using var endCombo = new OnDispose(ImGui.EndCombo);
|
using var endCombo = new OnDispose(ImGui.EndCombo);
|
||||||
@ -130,6 +132,11 @@ public class PluginUi : IDisposable {
|
|||||||
this.Plugin.Config.EvaluatorId = Guid.Empty;
|
this.Plugin.Config.EvaluatorId = Guid.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ImGui.Selectable("Random", this.Plugin.Config.EvaluatorId == Evaluator.RandomId)) {
|
||||||
|
anyChanged = true;
|
||||||
|
this.Plugin.Config.EvaluatorId = Evaluator.RandomId;
|
||||||
|
}
|
||||||
|
|
||||||
foreach (var evaluator in Evaluator.Evaluators) {
|
foreach (var evaluator in Evaluator.Evaluators) {
|
||||||
if (ImGui.Selectable(evaluator.Name, this.Plugin.Config.EvaluatorId == evaluator.Id)) {
|
if (ImGui.Selectable(evaluator.Name, this.Plugin.Config.EvaluatorId == evaluator.Id)) {
|
||||||
anyChanged = true;
|
anyChanged = true;
|
||||||
@ -141,7 +148,6 @@ public class PluginUi : IDisposable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (anyChanged) {
|
if (anyChanged) {
|
||||||
this.Plugin.SaveConfig();
|
this.Plugin.SaveConfig();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user