diff --git a/OverParse/App.config b/OverParse/App.config
index 0335824..de6cd09 100644
--- a/OverParse/App.config
+++ b/OverParse/App.config
@@ -193,6 +193,9 @@
True
+
+ False
+
diff --git a/OverParse/Click.cs b/OverParse/Click.cs
index 05f6933..1d78c0f 100644
--- a/OverParse/Click.cs
+++ b/OverParse/Click.cs
@@ -124,7 +124,11 @@ private void SeparateZanverse_Click(object sender, RoutedEventArgs e)
Properties.Settings.Default.SeparateZanverse = SeparateZanverse.IsChecked;
UpdateForm(null, null);
}
-
+ private void SeparateStatus_Click(object sender, RoutedEventArgs e)
+ {
+ Properties.Settings.Default.SeparateStatus = SeparateStatus.IsChecked;
+ UpdateForm(null, null);
+ }
private void SeparateFinish_Click(object sender, RoutedEventArgs e)
{
Properties.Settings.Default.SeparateFinish = SeparateFinish.IsChecked;
diff --git a/OverParse/Combatant.cs b/OverParse/Combatant.cs
index b05c0e5..246d10b 100644
--- a/OverParse/Combatant.cs
+++ b/OverParse/Combatant.cs
@@ -152,6 +152,19 @@ public class Combatant
"2618804663" , // Buster Divide (Laconium Sword charged)
"2619614461" , // Laconium Sword step attack
"3607718359" }; // Laconium Sword slash
+
+ // Status Ailment IDs
+ public static string[] StatusAttackIDs = new string[] { "2505928570" , // Burn lvl1
+ "2505928505" , // Burn lvl2
+ "2505928696" , // Burn lvl3
+ "2505928584" , // Burn lvl4
+ "2505927753" , // Burn lvl5
+ "1739789695" , // Poison lvl1
+ "1739789694" , // Poison lvl2
+ "1739789665" , // Poison lvl3
+ "1739789664" , // Poison lvl4
+ "1739789667" }; // Poison lvl5
+
// List of the above attack IDs combined
public static string[] NonAllyAttackIDs = PhotonAttackIDs.Concat(AISAttackIDs).Concat(RideAttackIDs).Concat(DBAttackIDs).Concat(LaconiumAttackIDs).ToArray();
@@ -193,6 +206,7 @@ public Combatant(string id, string name, string temp)
public int Damaged; // Remon's fixes
public int ZvsDamage => GetDamageDealt(GetZanverseID()); // Zanverse total damage
+ public int DotDamage => GetDamageDealt(GetAttackID(StatusAttackIDs)); // Status ailment total damage
public int HTFDamage => GetDamageDealt(GetAttackID(FinishAttackIDs)); // Hero Time Finish total damage
public int PwpDamage => GetDamageDealt(GetAttackID(PhotonAttackIDs)); // PwP Total Damage
public int AisDamage => GetDamageDealt(GetAttackID(AISAttackIDs)); // AIS Total Damage
@@ -232,6 +246,7 @@ public Combatant(string id, string name, string temp)
public bool IsYou => CheckIsYou(); // Player-chan running
public bool IsAlly => CheckIsAlly(); // Other players running
public bool IsZanverse => CheckIsType("Zanverse"); // Zanverse being cast
+ public bool IsStatus => CheckIsType("Status Ailment"); // status occuring
public bool IsPwp => CheckIsType("Pwp"); // Photon weapons using
public bool IsAIS => CheckIsType("AIS"); // A.I.S. mode running
public bool IsRide => CheckIsType("Ride"); // Rideroid mode running
@@ -324,12 +339,14 @@ private int GetGeneralDamage()
// Returns the damage dealt that has been filtered
private int GetReadingDamage()
{
- if (IsZanverse || IsFinish || IsAIS || IsPwp || IsDB || IsRide || IsLsw)
+ if (IsZanverse || IsStatus || IsFinish || IsAIS || IsPwp || IsDB || IsRide || IsLsw)
return Damage;
int temp = Damage;
if (Properties.Settings.Default.SeparateZanverse)
temp -= ZvsDamage;
+ if (Properties.Settings.Default.SeparateStatus)
+ temp -= DotDamage;
if (Properties.Settings.Default.SeparateFinish)
temp -= HTFDamage;
if (Properties.Settings.Default.SeparatePwp)
diff --git a/OverParse/Log.cs b/OverParse/Log.cs
index 9c080ac..75e50a0 100644
--- a/OverParse/Log.cs
+++ b/OverParse/Log.cs
@@ -273,8 +273,8 @@ public string WriteLog()
TimeSpan timespan = TimeSpan.FromSeconds(elapsed);
// Logging the total time occured through out the encounter
- int totalDamage = combatants.Where(c => c.IsAlly || c.IsZanverse || c.IsFinish).Sum(x => x.Damage);
- double totalDPS = combatants.Where(c => c.IsAlly || c.IsZanverse || c.IsFinish).Sum(x => x.DPS);
+ int totalDamage = combatants.Where(c => c.IsAlly || c.IsStatus || c.IsZanverse || c.IsFinish).Sum(x => x.Damage);
+ double totalDPS = combatants.Where(c => c.IsAlly || c.IsStatus || c.IsZanverse || c.IsFinish).Sum(x => x.DPS);
string timer = timespan.ToString(@"mm\:ss");
string log = DateTime.Now.ToString("F") + " | " + timer + " | Total Damage: " + totalDamage.ToString("N0") + " dmg" + " | " + "Total DPS: " + totalDPS.ToString("N0") + Environment.NewLine + Environment.NewLine;
@@ -283,7 +283,7 @@ public string WriteLog()
foreach (Combatant c in combatants)
{
- if (c.IsAlly || c.IsZanverse || c.IsFinish)
+ if (c.IsAlly || c.IsStatus || c.IsZanverse || c.IsFinish)
{
log += Environment.NewLine + $"# {c.Name}"+ Environment.NewLine + $"# Contrib: {c.PercentReadDPSReadout}% | Dealt: {c.ReadDamage.ToString("N0")} dmg | Taken: {c.Damaged.ToString("N0")} dmgd | {c.DPS.ToString("N0")} DPS | JA: {c.WJAPercent}% | Critical: {c.WCRIPercent}% | Max: {c.MaxHitdmg} ({c.MaxHit})" + Environment.NewLine;
}
@@ -293,13 +293,15 @@ public string WriteLog()
foreach (Combatant c in combatants)
{
- if (c.IsAlly || c.IsZanverse || c.IsFinish)
+ if (c.IsAlly || c.IsStatus || c.IsZanverse || c.IsFinish)
{
string header = $"[ {c.Name} - {c.PercentReadDPSReadout}% - {c.ReadDamage.ToString("N0")} dmg ]";
log += header + Environment.NewLine + Environment.NewLine;
List attackNames = new List();
List finishNames = new List();
+ List statusNames = new List();
+
List, List, List>> attackData = new List, List, List>>();
if (c.IsZanverse && Properties.Settings.Default.SeparateZanverse)
@@ -337,12 +339,32 @@ public string WriteLog()
attackData.Add(new Tuple, List, List>(tCombatant.Name, fmatchingAttacks, jaPercents, criPercents));
}
+ }
+ else if (c.IsStatus && Properties.Settings.Default.SeparateStatus)
+ {
+ foreach (Combatant c4 in backupCombatants)
+ {
+ if (c4.DotDamage > 0)
+ statusNames.Add(c4.ID);
+ }
+
+ foreach (string dot in statusNames)
+ {
+ Combatant tCombatant = backupCombatants.First(x => x.ID == dot);
+ List matchingAttacks = tCombatant.Attacks.Where(a => Combatant.StatusAttackIDs.Contains(a.ID)).Select(a => a.Damage).ToList();
+ List jaPercents = c.Attacks.Where(a => Combatant.StatusAttackIDs.Contains(a.ID)).Select(a => a.JA).ToList();
+ List criPercents = c.Attacks.Where(a => Combatant.StatusAttackIDs.Contains(a.ID)).Select(a => a.Cri).ToList();
+ attackData.Add(new Tuple, List, List>(tCombatant.Name, matchingAttacks, jaPercents, criPercents));
+ }
+
}
else
{
foreach (Attack a in c.Attacks)
{
- if ((a.ID == "2106601422" && Properties.Settings.Default.SeparateZanverse) || (Combatant.FinishAttackIDs.Contains(a.ID) && Properties.Settings.Default.SeparateFinish))
+ if ((a.ID == "2106601422" && Properties.Settings.Default.SeparateZanverse) ||
+ (Combatant.FinishAttackIDs.Contains(a.ID) && Properties.Settings.Default.SeparateFinish) ||
+ (Combatant.StatusAttackIDs.Contains(a.ID) && Properties.Settings.Default.SeparateStatus))
continue; // Don't do anything
if (MainWindow.skillDict.ContainsKey(a.ID))
a.ID = MainWindow.skillDict[a.ID]; // these are getting disposed anyway, no 1 cur
diff --git a/OverParse/MainWindow.xaml b/OverParse/MainWindow.xaml
index 3ea47bf..2dc3d4c 100644
--- a/OverParse/MainWindow.xaml
+++ b/OverParse/MainWindow.xaml
@@ -117,6 +117,7 @@
diff --git a/OverParse/MainWindow.xaml.cs b/OverParse/MainWindow.xaml.cs
index b2165b2..eaf3083 100644
--- a/OverParse/MainWindow.xaml.cs
+++ b/OverParse/MainWindow.xaml.cs
@@ -109,6 +109,7 @@ public MainWindow()
AutoEndEncounters.IsChecked = Properties.Settings.Default.AutoEndEncounters;
SetEncounterTimeout.IsEnabled = AutoEndEncounters.IsChecked;
SeparateZanverse.IsChecked = Properties.Settings.Default.SeparateZanverse;
+ SeparateStatus.IsChecked = Properties.Settings.Default.SeparateStatus;
SeparateFinish.IsChecked = Properties.Settings.Default.SeparateFinish;
SeparateAIS.IsChecked = Properties.Settings.Default.SeparateAIS;
SeparateDB.IsChecked = Properties.Settings.Default.SeparateDB;
@@ -678,7 +679,7 @@ public void UpdateForm(object sender, EventArgs e)
// make dummy zanverse combatant if necessary
int totalZanverse = workingList.Where(c => c.IsAlly == true).Sum(x => x.ZvsDamage);
int totalFinish = workingList.Where(c => c.IsAlly == true).Sum(x => x.HTFDamage);
-
+ int totalStatus = workingList.Where(c => c.IsAlly == true).Sum(x => x.DotDamage);
if (Properties.Settings.Default.SeparateFinish)
{
if (totalFinish > 0)
@@ -717,9 +718,28 @@ public void UpdateForm(object sender, EventArgs e)
}
}
+ if(Properties.Settings.Default.SeparateStatus)
+ {
+ if (totalStatus > 0)
+ {
+ Combatant statusHolder = new Combatant("99999999", "Status Ailment", "Status Ailment");
+ foreach (Combatant c in workingList)
+ {
+ if (c.IsAlly)
+ {
+ List targetAttacks = c.Attacks.Where(a => Combatant.StatusAttackIDs.Contains(a.ID)).ToList();
+ statusHolder.Attacks.AddRange(targetAttacks);
+ c.Attacks = c.Attacks.Except(targetAttacks).ToList();
+ }
+ }
+ statusHolder.ActiveTime = elapsed;
+ workingList.Add(statusHolder);
+ }
+ }
+
// get group damage totals
int totalDamage = workingList.Sum(x => x.Damage);
- int totalReadDamage = workingList.Where(c => c.IsAlly || c.IsZanverse || c.IsFinish).Sum(x => x.Damage);
+ int totalReadDamage = workingList.Where(c => c.IsAlly || c.IsZanverse || c.IsStatus || c.IsFinish).Sum(x => x.Damage);
// dps calcs!
foreach (Combatant c in workingList)
@@ -735,7 +755,11 @@ public void UpdateForm(object sender, EventArgs e)
Combatant.maxShare = c.ReadDamage;
bool filtered = true;
- if (Properties.Settings.Default.SeparateAIS || Properties.Settings.Default.SeparateDB || Properties.Settings.Default.SeparateRide || Properties.Settings.Default.SeparatePwp || Properties.Settings.Default.SeparateLsw)
+ if (Properties.Settings.Default.SeparateAIS ||
+ Properties.Settings.Default.SeparateDB ||
+ Properties.Settings.Default.SeparateRide ||
+ Properties.Settings.Default.SeparatePwp ||
+ Properties.Settings.Default.SeparateLsw)
{
if (c.IsAlly && c.isTemporary == "no" && !HidePlayers.IsChecked)
filtered = false;
@@ -751,12 +775,14 @@ public void UpdateForm(object sender, EventArgs e)
filtered = false;
if (c.IsZanverse)
filtered = false;
+ if (c.IsStatus)
+ filtered = false;
if (c.IsFinish)
filtered = false;
}
else
{
- if ((c.IsAlly || c.IsZanverse || c.IsFinish || !FilterPlayers.IsChecked) && (c.Damage > 0))
+ if ((c.IsAlly || c.IsZanverse || c.IsStatus || c.IsFinish || !FilterPlayers.IsChecked) && (c.Damage > 0))
filtered = false;
}
diff --git a/OverParse/Properties/Settings.Designer.cs b/OverParse/Properties/Settings.Designer.cs
index ab77d9c..6f61b14 100644
--- a/OverParse/Properties/Settings.Designer.cs
+++ b/OverParse/Properties/Settings.Designer.cs
@@ -1,10 +1,10 @@
//------------------------------------------------------------------------------
//
-// 這段程式碼是由工具產生的。
-// 執行階段版本:4.0.30319.42000
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
//
-// 對這個檔案所做的變更可能會造成錯誤的行為,而且如果重新產生程式碼,
-// 變更將會遺失。
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
//
//------------------------------------------------------------------------------
@@ -12,7 +12,7 @@ namespace OverParse.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.0.0.0")]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.7.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
@@ -754,5 +754,17 @@ public string skills_ja {
this["skills_ja"] = value;
}
}
+
+ [global::System.Configuration.UserScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("False")]
+ public bool SeparateStatus {
+ get {
+ return ((bool)(this["SeparateStatus"]));
+ }
+ set {
+ this["SeparateStatus"] = value;
+ }
+ }
}
}
diff --git a/OverParse/Properties/Settings.settings b/OverParse/Properties/Settings.settings
index 0396e6f..e84b4fd 100644
--- a/OverParse/Properties/Settings.settings
+++ b/OverParse/Properties/Settings.settings
@@ -185,5 +185,8 @@
True
+
+ False
+
\ No newline at end of file