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);
     }
 }