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 bool ClearResultsOnInactive = true;
public float ClearDelaySeconds = 10;
public bool UseEvaluatorNpc;
}
public enum MeterMode {

112
Plugin.cs
View File

@ -160,6 +160,18 @@ public class Plugin : IDalamudPlugin {
if (this.Config.ClearResultsOnInactive) {
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)) {
@ -248,22 +260,20 @@ public class Plugin : IDalamudPlugin {
continue;
}
this.UpdateMember(list->PartyMembers[i], member.Object, data.Encounter, combatant);
this.UpdateMember(list, i, member.Object, data.Encounter, combatant);
}
return false;
}
private unsafe void ResetMembers(AddonPartyList* list) {
var members = AgentHUD.Instance()->PartyMembers;
for (var i = 0; i < members.Length && i < list->PartyMembers.Length; i++) {
var member = members[i];
if (member.Name == null) {
continue;
}
var unit = list->PartyMembers[i];
if (list->TargetedIndex != i && unit.TargetGlow != null) {
private unsafe void ResetMember(
AddonPartyList* list,
BattleChara* chara,
int listIndex,
bool includeTargeted
) {
var unit = list->PartyMembers[listIndex];
if (unit.TargetGlow != null && (includeTargeted || list->TargetedIndex != listIndex)) {
unit.TargetGlow->SetAlpha(255);
unit.TargetGlow->SetScaleX(0);
unit.TargetGlow->AddRed = 0;
@ -277,7 +287,6 @@ public class Plugin : IDalamudPlugin {
var left = (AtkTextNode*) unit.MPGaugeBar->GetTextNodeById(2);
var right = (AtkTextNode*) unit.MPGaugeBar->GetTextNodeById(3);
var chara = member.Object;
var hasLeft = left != null && left->IsVisible();
var hasRight = right != null && right->IsVisible();
@ -345,14 +354,22 @@ public class Plugin : IDalamudPlugin {
// unit.Name->MultiplyGreen = 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(
AddonPartyList.PartyListMemberStruct member,
AddonPartyList* list,
int listIndex,
BattleChara* chara,
Encounter encounter,
Combatant combatant
) {
var member = list->PartyMembers[listIndex];
if (this.Config.UseDpsBar && member.TargetGlow != null) {
member.TargetGlow->ToggleVisibility(true);
member.TargetGlow->SetAlpha((byte) Math.Round(this.Config.BarAlpha * 255));
@ -383,42 +400,7 @@ public class Plugin : IDalamudPlugin {
if (this.Config.Alternate && !this._showDps) {
var isCaster = hasChara && Array.IndexOf(this._manaUsers, chara->ClassJob) != -1;
if (!this.Config.ManaModeAlternateOnlyManaUsers || isCaster) {
left->TextColor = new ByteColor {
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);
}
this.ResetMember(list, chara, listIndex, true);
return;
}
}
@ -473,37 +455,5 @@ public class Plugin : IDalamudPlugin {
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.Checkbox("Show an NPC text bubble rating your performance after an encounter", ref this.Plugin.Config.UseEvaluatorNpc);
if (anyChanged) {
this.Plugin.SaveConfig();
}

View File

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