private static void UpdateItems(Match item, Line line, Expressions exp, FilterType type) { _type = type; try { switch (type) { case FilterType.You: line.Action = _lastActionYou; break; case FilterType.Pet: line.Action = _lastActionPet; break; case FilterType.Party: line.Action = _lastActionPartyHealingFrom; break; case FilterType.PetParty: line.Action = _lastActionPetPartyHealingFrom; break; case FilterType.Alliance: line.Action = _lastActionAllianceHealingFrom; break; case FilterType.PetAlliance: line.Action = _lastActionPetAllianceHealingFrom; break; case FilterType.Other: line.Action = _lastActionOtherHealingFrom; break; case FilterType.PetOther: line.Action = _lastActionPetOtherHealingFrom; break; } switch (line.EventDirection) { case EventDirection.You: line.Target = You; break; default: line.Target = line.Source; break; } if (line.IsEmpty()) { return; } var playerInstance = ParseControl.Instance.Timeline.GetSetPlayer(line.Source); playerInstance.Last20Items.Add(new LineHistory(line)); if (playerInstance.Last20Items.Count > 20) { playerInstance.Last20Items.RemoveAt(0); } } catch (Exception ex) { ParsingLogHelper.Error(Logger, "Item", exp.Event, ex); } }
private static void UpdateHealing(Match cure, Line line, Expressions exp, FilterType type) { _type = type; try { if (String.IsNullOrWhiteSpace(line.Source)) { line.Source = Convert.ToString(cure.Groups["source"].Value); } if (String.IsNullOrWhiteSpace(line.Target)) { line.Target = Convert.ToString(cure.Groups["target"].Value); } switch (type) { case FilterType.You: line.Action = _lastActionYou; break; case FilterType.Pet: line.Action = _lastActionPet; break; case FilterType.Party: line.Action = _lastActionPartyHealingFrom; break; case FilterType.PetParty: line.Action = _lastActionPetPartyHealingFrom; break; case FilterType.Alliance: line.Action = _lastActionAllianceHealingFrom; break; case FilterType.PetAlliance: line.Action = _lastActionPetAllianceHealingFrom; break; case FilterType.Other: line.Action = _lastActionOtherHealingFrom; break; case FilterType.PetOther: line.Action = _lastActionPetOtherHealingFrom; break; } line.Amount = cure.Groups["amount"].Success ? Convert.ToDecimal(cure.Groups["amount"].Value) : 0m; line.Crit = cure.Groups["crit"].Success; line.Modifier = cure.Groups["modifier"].Success ? Convert.ToDecimal(cure.Groups["modifier"].Value) / 100 : 0m; switch (line.EventDirection) { case EventDirection.You: line.Target = You; break; } line.RecLossType = Convert.ToString(cure.Groups["type"].Value.ToUpperInvariant()); if (line.IsEmpty()) { return; } if (line.RecLossType == exp.HealingType) { ParseControl.Instance.Timeline.GetSetPlayer(line.Source) .SetHealing(line); } } catch (Exception ex) { ParsingLogHelper.Error(Logger, "Cure", exp.Event, ex); } }
private static void UpdateBeneficialGain(Match beneficial, Line line, Expressions exp, FilterType type) { _type = type; try { if (String.IsNullOrWhiteSpace(line.Source)) { line.Source = Convert.ToString(beneficial.Groups["source"].Value); } if (String.IsNullOrWhiteSpace(line.Target)) { line.Target = Convert.ToString(beneficial.Groups["target"].Value); } line.Action = Convert.ToString(beneficial.Groups["status"].Value); var isStoneSkin = false; foreach (var stoneSkin in MagicBarrierHelper.StoneSkin.Where(stoneSkin => String.Equals(stoneSkin, line.Action, Constants.InvariantComparer))) { isStoneSkin = true; } switch (line.EventDirection) { case EventDirection.You: line.Target = You; break; } if (line.IsEmpty()) { return; } if (isStoneSkin) { var multiplier = 0.1m; try { var cleanedName = Regex.Replace(line.Source, @"\[[\w]+\]", "") .Trim(); var source = PCWorkerDelegate.GetNPCEntityByName(cleanedName); if (source != null) { multiplier = source.Job == Actor.Job.WHM ? 0.18m : multiplier; } } catch (Exception ex) { } try { var cleanedName = Regex.Replace(line.Target, @"\[[\w]+\]", "") .Trim(); var target = PCWorkerDelegate.GetNPCEntityByName(cleanedName); if (target != null) { line.Amount = target.HPMax * multiplier; ParseControl.Instance.Timeline.GetSetPlayer(line.Source) .SetupHealingMitigated(line, "stoneskin"); } } catch (Exception ex) { } } } catch (Exception ex) { ParsingLogHelper.Error(Logger, "Cure", exp.Event, ex); } }
private static void UpdateDamageMonster(Match damage, Line line, Expressions exp, FilterType type) { _type = type; try { line.Hit = true; if (String.IsNullOrWhiteSpace(line.Source)) { line.Source = Convert.ToString(damage.Groups["source"].Value); } if (String.IsNullOrWhiteSpace(line.Target)) { line.Target = Convert.ToString(damage.Groups["target"].Value); } switch (damage.Groups["source"].Success) { case true: var lastActionIsAttack = false; switch (type) { case FilterType.You: lastActionIsAttack = _lastActionYouIsAttack; break; case FilterType.Pet: lastActionIsAttack = _lastActionPetIsAttack; break; case FilterType.Party: lastActionIsAttack = _lastActionPartyIsAttack; break; case FilterType.PetParty: lastActionIsAttack = _lastActionPetPartyIsAttack; break; case FilterType.Alliance: lastActionIsAttack = _lastActionAllianceIsAttack; break; case FilterType.PetAlliance: lastActionIsAttack = _lastActionPetAllianceIsAttack; break; case FilterType.Other: lastActionIsAttack = _lastActionOtherIsAttack; break; case FilterType.PetOther: lastActionIsAttack = _lastActionPetOtherIsAttack; break; } line.Action = lastActionIsAttack ? String.Format("{0} [+]", exp.Attack) : exp.Attack; break; case false: line.Action = _lastActionMonster; break; } line.Amount = damage.Groups["amount"].Success ? Convert.ToDecimal(damage.Groups["amount"].Value) : 0m; line.Block = damage.Groups["block"].Success; line.Crit = damage.Groups["crit"].Success; line.Modifier = damage.Groups["modifier"].Success ? Convert.ToDecimal(damage.Groups["modifier"].Value) / 100 : 0m; line.Parry = damage.Groups["parry"].Success; switch (type) { case FilterType.Pet: _lastNamePet = line.Target; break; case FilterType.Party: _lastNamePartyTo = line.Target; break; case FilterType.PetParty: _lastNamePetPartyTo = line.Target; break; case FilterType.Alliance: _lastNameAllianceTo = line.Target; break; case FilterType.PetAlliance: _lastNamePetAllianceTo = line.Target; break; case FilterType.Other: _lastNameOtherTo = line.Target; break; case FilterType.PetOther: _lastNamePetOtherTo = line.Target; break; } if (line.IsEmpty()) { return; } switch (type) { default: ParseControl.Instance.Timeline.PublishTimelineEvent(TimelineEventType.PartyMonsterFighting, line.Source); break; } ParseControl.Instance.Timeline.GetSetPlayer(line.Target) .SetDamageTaken(line); ParseControl.Instance.Timeline.GetSetMonster(line.Source) .SetDamage(line); } catch (Exception ex) { ParsingLogHelper.Error(Logger, "Damage", exp.Event, ex); } }
private static void UpdateFailedMonster(Match failed, Line line, Expressions exp, FilterType type) { _type = type; try { line.Miss = true; if (String.IsNullOrWhiteSpace(line.Source)) { line.Source = Convert.ToString(failed.Groups["source"].Value); } if (String.IsNullOrWhiteSpace(line.Target)) { line.Target = Convert.ToString(failed.Groups["target"].Value); } switch (failed.Groups["source"].Success) { case true: line.Action = exp.Attack; break; case false: line.Action = _lastActionMonster; break; } switch (type) { case FilterType.Pet: _lastNamePet = line.Target; break; case FilterType.Party: _lastNamePartyTo = line.Target; break; case FilterType.PetParty: _lastNamePetPartyTo = line.Target; break; case FilterType.Alliance: _lastNameAllianceTo = line.Target; break; case FilterType.PetAlliance: _lastNamePetAllianceTo = line.Target; break; case FilterType.Other: _lastNameOtherTo = line.Target; break; case FilterType.PetOther: _lastNamePetOtherTo = line.Target; break; } if (line.IsEmpty()) { return; } switch (type) { default: ParseControl.Instance.Timeline.PublishTimelineEvent(TimelineEventType.PartyMonsterFighting, line.Source); break; } ParseControl.Instance.Timeline.GetSetPlayer(line.Target) .SetDamageTaken(line); ParseControl.Instance.Timeline.GetSetMonster(line.Source) .SetDamage(line); } catch (Exception ex) { ParsingLogHelper.Error(Logger, "Failed", exp.Event, ex); } }