void oFormActMain_AfterCombatAction(bool isImport, CombatActionEventArgs actionInfo) { if (incDamageTypes.Contains(actionInfo.swingType) == false) { return; } if (actionInfo.damage <= 0) { return; } // Get the incoming damage combatant from the current encounter EncounterData activeEncounter = ActGlobals.oFormActMain.ActiveZone.Items[ActGlobals.oFormActMain.ActiveZone.Items.Count - 1]; CombatantData combatant = activeEncounter.GetCombatant(actionInfo.victim); SortedList <DateTime, long> damagePerSecond; if (combatant.Tags.ContainsKey(tagName)) // See if the combatant already has a DamageTakenPerSecond container { damagePerSecond = (SortedList <DateTime, long>)combatant.Tags[tagName]; } else { damagePerSecond = new SortedList <DateTime, long>(); combatant.Tags.Add(tagName, damagePerSecond); } if (damagePerSecond.ContainsKey(actionInfo.time)) // See if the container has an entry for the current second { damagePerSecond[actionInfo.time] += actionInfo.damage; // Add damage to the current second } else { damagePerSecond.Add(actionInfo.time, actionInfo.damage); // Add this damage as the current second } }
public FightData CreateCurrentRunFightData(EncounterData currentFightData, int phase) { TimeSpan fightDuration = currentFightData.Duration; int totalDamageDoneToBossInCurrentPhase = 0; foreach (String bossName in _bossListOfEachPhase[phase]) { int damageDoneToBoss = (int)currentFightData.GetCombatant(bossName).DamageTaken; totalDamageDoneToBossInCurrentPhase += damageDoneToBoss; _damageDoneToEachBoss[bossName] = damageDoneToBoss; } if (currentPhase != phase) { currentPhase++; } return(new FightData(fightDuration, GetTotalDamageDoneToBoss(currentPhase))); }
public string GetBoss(EncounterData enc) { var strongest = enc.GetStrongestEnemy("YOU"); var combatant = enc.GetCombatant(strongest); strongest = string.IsNullOrEmpty(GetTranslatedStrongest(strongest)) ? strongest : GetTranslatedStrongest(strongest); if (enc.ZoneName.ToLower() == "the Weapon's Refrain (Ultimate)".ToLower()) { return("The Ultima Weapon"); } if (enc.ZoneName.ToLower() == "the Unending Coil of Bahamut (Ultimate)".ToLower()) { return("Bahamut Prime"); } if (enc.ZoneName.Contains("Alphascape (V4.0)")) { strongest = "Omega-M and Omega-F"; } if (enc.ZoneName.Contains("Savage")) { strongest = strongest + " (Savage)"; } if (enc.ZoneName.Contains("Alphascape") && enc.ZoneName.Contains("4.0") && enc.ZoneName.Contains("Savage")) { if (combatant.AllOut.ContainsKey("Target Analysis") || combatant.AllOut.ContainsKey("標的識別") || combatant.AllOut.ContainsKey("Unknown_336C")) { return("The Final Omega (Savage)"); } return("Omega-M and Omega-F (Savage)"); } return(strongest); }
void OnBeforeLogLineRead(bool isImport, LogLineEventArgs logInfo) { var log = logInfo.logLine; //Fetch Data if (inCombat) { var actData = ActiveEnconter.GetCombatant("YOU"); if (actData == null) { return; } //Encounter Data if (double.TryParse(actData.GetColumnByName("EncDPS").Replace(@",", @"").Replace(@"%", @""), out var encDps)) { if (encDps >= 0) { dataStruct.PlayerCurrentDPS = encDps; } } if (double.TryParse(actData.GetColumnByName("EncHPS").Replace(@",", @"").Replace(@"%", @""), out var encHps)) { if (encDps >= 0) { dataStruct.PlayerCurrentHPS = encHps; } } if (actData.GetColumnByName("Job") == "Whm" || actData.GetColumnByName("Job") == "Sch" || actData.GetColumnByName("Job") == "Ast") { if (double.TryParse(actData.GetColumnByName("CritHeal%").Replace(@",", @"").Replace(@"%", @""), out var encCrit)) { if (encDps >= 0) { dataStruct.PlayerCurrentCrit = encCrit; } } } else { if (double.TryParse(actData.GetColumnByName("CritDam%").Replace(@",", @"").Replace(@"%", @""), out var encCrit)) { if (encDps >= 0) { dataStruct.PlayerCurrentCrit = encCrit; } } } if (double.TryParse(actData.GetColumnByName("DirectHitPct").Replace(@",", @"").Replace(@"%", @""), out var encDH)) { if (encDps >= 0) { dataStruct.PlayerCurrentDH = encDH; } } if (double.TryParse(actData.GetColumnByName("CritDirectHitPct").Replace(@",", @"").Replace(@"%", @""), out var encCritDH)) { if (encDps >= 0) { dataStruct.PlayerCurrentCritDH = encCritDH; } } if (double.TryParse(actData.GetColumnByName("OverHealPct").Replace(@",", @"").Replace(@"%", @""), out var encOverheal)) { if (encDps >= 0) { dataStruct.PlayerCurrentOverheal = encOverheal; } } if (int.TryParse(actData.GetColumnByName("Damage%").Replace(@",", @"").Replace(@"%", @""), out var entDmg)) { if (encDps >= 0) { dataStruct.PlayerCurrentDamage = entDmg; } } //Encounter Information var encTime = ActiveEnconter.Duration.TotalSeconds; dataStruct.CurrentEncounterTime = encTime; dataStruct.CurrentEncounterName = ActiveEnconter.ZoneName; //Enemies dataStruct.Enemies.Clear(); foreach (var combatant in ActiveEnconter.Items) { if (combatant.Value.GetColumnByName("Job") != "") { continue; } dataStruct.Enemies.Add(combatant.Value.Name); } } //Custom Triggers if (log.Length > 23) { var loglineA = log.Substring(23); dataStruct.CustomTriggerActive = customTriggers.Any(str => loglineA.Contains(str)); } //Write Data WriteJSON(dataStruct); }