feat: begin prototyping npc rating

This commit is contained in:
Anna 2024-07-27 16:54:23 -04:00
parent c8eefd6ab2
commit 6e9036a6ce
Signed by: anna
GPG Key ID: D0943384CD9F87D1
4 changed files with 113 additions and 157 deletions

View File

@ -26,6 +26,7 @@ public class Configuration : IPluginConfiguration {
public int TextMulBlue = 100; public int TextMulBlue = 100;
public bool ClearResultsOnInactive = true; public bool ClearResultsOnInactive = true;
public float ClearDelaySeconds = 10; public float ClearDelaySeconds = 10;
public bool UseEvaluatorNpc;
} }
public enum MeterMode { public enum MeterMode {

112
Plugin.cs
View File

@ -160,6 +160,18 @@ public class Plugin : IDalamudPlugin {
if (this.Config.ClearResultsOnInactive) { if (this.Config.ClearResultsOnInactive) {
this.DelayWatch.Restart(); this.DelayWatch.Restart();
} }
if (this.Config.UseEvaluatorNpc && this.Client.Data != null) {
var combatants = this.Client.Data.Combatants.Values.ToList();
combatants.Sort((a, b) => b.EncDps.CompareTo(a.EncDps));
var rank = combatants.FindIndex(combatant => combatant.Name == "YOU");
var msg = rank switch {
< 0 => null,
1 => "Well done! I never doubted for a second that you'd do so well.",
_ => "Keep trying, friend! You'll get there in the end.",
};
UIModule.Instance()->ShowBattleTalkImage("G'raha Tia", msg, 5f, 10, 0);
}
} }
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)) {
@ -248,22 +260,20 @@ public class Plugin : IDalamudPlugin {
continue; continue;
} }
this.UpdateMember(list->PartyMembers[i], member.Object, data.Encounter, combatant); this.UpdateMember(list, i, member.Object, data.Encounter, combatant);
} }
return false; return false;
} }
private unsafe void ResetMembers(AddonPartyList* list) { private unsafe void ResetMember(
var members = AgentHUD.Instance()->PartyMembers; AddonPartyList* list,
for (var i = 0; i < members.Length && i < list->PartyMembers.Length; i++) { BattleChara* chara,
var member = members[i]; int listIndex,
if (member.Name == null) { bool includeTargeted
continue; ) {
} var unit = list->PartyMembers[listIndex];
if (unit.TargetGlow != null && (includeTargeted || list->TargetedIndex != listIndex)) {
var unit = list->PartyMembers[i];
if (list->TargetedIndex != i && unit.TargetGlow != null) {
unit.TargetGlow->SetAlpha(255); unit.TargetGlow->SetAlpha(255);
unit.TargetGlow->SetScaleX(0); unit.TargetGlow->SetScaleX(0);
unit.TargetGlow->AddRed = 0; unit.TargetGlow->AddRed = 0;
@ -277,7 +287,6 @@ public class Plugin : IDalamudPlugin {
var left = (AtkTextNode*) unit.MPGaugeBar->GetTextNodeById(2); var left = (AtkTextNode*) unit.MPGaugeBar->GetTextNodeById(2);
var right = (AtkTextNode*) unit.MPGaugeBar->GetTextNodeById(3); var right = (AtkTextNode*) unit.MPGaugeBar->GetTextNodeById(3);
var chara = member.Object;
var hasLeft = left != null && left->IsVisible(); var hasLeft = left != null && left->IsVisible();
var hasRight = right != null && right->IsVisible(); var hasRight = right != null && right->IsVisible();
@ -345,14 +354,22 @@ public class Plugin : IDalamudPlugin {
// unit.Name->MultiplyGreen = 100; // unit.Name->MultiplyGreen = 100;
// unit.Name->MultiplyBlue = 100; // unit.Name->MultiplyBlue = 100;
} }
private unsafe void ResetMembers(AddonPartyList* list) {
var members = AgentHUD.Instance()->PartyMembers;
for (var i = 0; i < members.Length && i < list->PartyMembers.Length; i++) {
this.ResetMember(list, members[i].Object, i, false);
}
} }
private unsafe void UpdateMember( private unsafe void UpdateMember(
AddonPartyList.PartyListMemberStruct member, AddonPartyList* list,
int listIndex,
BattleChara* chara, BattleChara* chara,
Encounter encounter, Encounter encounter,
Combatant combatant Combatant combatant
) { ) {
var member = list->PartyMembers[listIndex];
if (this.Config.UseDpsBar && member.TargetGlow != null) { if (this.Config.UseDpsBar && member.TargetGlow != null) {
member.TargetGlow->ToggleVisibility(true); member.TargetGlow->ToggleVisibility(true);
member.TargetGlow->SetAlpha((byte) Math.Round(this.Config.BarAlpha * 255)); member.TargetGlow->SetAlpha((byte) Math.Round(this.Config.BarAlpha * 255));
@ -383,42 +400,7 @@ public class Plugin : IDalamudPlugin {
if (this.Config.Alternate && !this._showDps) { if (this.Config.Alternate && !this._showDps) {
var isCaster = hasChara && Array.IndexOf(this._manaUsers, chara->ClassJob) != -1; var isCaster = hasChara && Array.IndexOf(this._manaUsers, chara->ClassJob) != -1;
if (!this.Config.ManaModeAlternateOnlyManaUsers || isCaster) { if (!this.Config.ManaModeAlternateOnlyManaUsers || isCaster) {
left->TextColor = new ByteColor { this.ResetMember(list, chara, listIndex, true);
RGBA = 0xFFFFFFFF,
};
left->AddRed = 0;
left->AddGreen = 0;
left->AddBlue = 0;
left->MultiplyRed = 100;
left->MultiplyGreen = 100;
left->MultiplyBlue = 100;
if (hasRight) {
right->TextColor = left->TextColor;
right->AddRed = left->AddRed;
right->AddGreen = left->AddGreen;
right->AddBlue = left->AddBlue;
right->MultiplyRed = left->MultiplyRed;
right->MultiplyGreen = left->MultiplyGreen;
right->MultiplyBlue = left->MultiplyBlue;
}
var manaString = hasChara
? chara->Mana.ToString(CultureInfo.InvariantCulture)
: "???";
if (hasRight) {
if (manaString.Length <= 1) {
left->SetText("");
right->SetText(manaString);
} else {
left->SetText(manaString[..^2]);
right->SetText(manaString[^2..]);
}
} else {
left->SetText(manaString);
}
return; return;
} }
} }
@ -473,37 +455,5 @@ public class Plugin : IDalamudPlugin {
left->SetText($"{leftText}{rightText}"); left->SetText($"{leftText}{rightText}");
} }
} }
// else if (this.Config.Mode == MeterMode.Name) {
// var dpsText = combatant.EncDps switch {
// float.NaN => "0",
// float.PositiveInfinity => "0",
// float.NegativeInfinity => "0",
// < 1_000 => $"{combatant.EncDps:N2}",
// < 1_000_000 => $"{combatant.EncDps / 1_000:N2}K",
// < 1_000_000_000 => $"{combatant.EncDps / 1_000_000:N2}M",
// _ => $"{combatant.EncDps / 1_000_000_000:N2}B",
// };
// if (this.Config.Alternate && !this._showDps) {
// member.Name->TextColor = new ByteColor {
// RGBA = 0xFFFFFFFF,
// };
// member.Name->SetText(chara->Name);
// return;
// }
// member.Name->SetText(dpsText);
// member.Name->TextColor = new ByteColor {
// RGBA = this.Config.TextColour,
// };
// member.Name->AddRed = (byte) Math.Clamp(this.Config.TextAddRed, 0, 255);
// member.Name->AddGreen = (byte) Math.Clamp(this.Config.TextAddGreen, 0, 255);
// member.Name->AddBlue = (byte) Math.Clamp(this.Config.TextAddBlue, 0, 255);
// member.Name->MultiplyRed = (byte) Math.Clamp(this.Config.TextMulRed, 0, 100);
// member.Name->MultiplyGreen = (byte) Math.Clamp(this.Config.TextMulGreen, 0, 100);
// member.Name->MultiplyBlue = (byte) Math.Clamp(this.Config.TextMulBlue, 0, 100);
// }
} }
} }

View File

@ -91,6 +91,8 @@ public class PluginUi : IDisposable {
anyChanged |= ImGui.SliderFloat("Seconds to delay before clearing", ref this.Plugin.Config.ClearDelaySeconds, 0, 300); anyChanged |= ImGui.SliderFloat("Seconds to delay before clearing", ref this.Plugin.Config.ClearDelaySeconds, 0, 300);
} }
anyChanged |= ImGui.Checkbox("Show an NPC text bubble rating your performance after an encounter", ref this.Plugin.Config.UseEvaluatorNpc);
if (anyChanged) { if (anyChanged) {
this.Plugin.SaveConfig(); this.Plugin.SaveConfig();
} }

View File

@ -54,6 +54,9 @@ public class RawEncounter {
[JsonProperty("enchps")] [JsonProperty("enchps")]
public string EncHps; public string EncHps;
[JsonProperty("ENCHPS")]
public string EncHps2;
[JsonProperty("CurrentZoneName")] [JsonProperty("CurrentZoneName")]
public string CurrentZoneName; public string CurrentZoneName;
} }