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