Data.EventsData.ParseAbnormalities C# (CSharp) Method

ParseAbnormalities() private method

private ParseAbnormalities ( Dictionary events, System.Xml.Linq.XDocument xml ) : void
events Dictionary
xml System.Xml.Linq.XDocument
return void
        private void ParseAbnormalities(Dictionary<Event, List<Actions.Action>> events, XDocument xml)
        {
            var root = xml.Root;
            var default_active = root.Attribute("active")?.Value ?? "True";
            var default_priority = root.Attribute("priority")?.Value ?? "5";
            var default_blacklist = ParseAreaBossBlackList(root);
            foreach (var abnormality in root.Elements("abnormality"))
            {
                Dictionary<int,int> ids = new Dictionary<int, int>();
                List<HotDot.Types> types = new List<HotDot.Types>();
                var abnormalities = abnormality.Element("abnormalities");
                foreach (var abnormalityId in abnormalities.Elements("abnormality"))
                {
                    var idElement = abnormalityId.Value;
                    int id;

                    if(int.TryParse(idElement, out id))
                    {
                        var stack = int.Parse(abnormalityId.Attribute("stack")?.Value ?? "0");
                        ids[id]=stack;
                        continue;
                    }
                    HotDot.Types type;
                    if(!Enum.TryParse(idElement, true, out type))
                    {
                        throw new Exception(idElement + " is not an acceptable value.");
                    }
                    types.Add(type);
                }
                var ingame = bool.Parse(abnormality.Attribute("ingame").Value);
                var active = bool.Parse(abnormality.Attribute("active")?.Value ?? default_active);
                var priority = int.Parse(abnormality.Attribute("priority")?.Value ?? default_priority);
                AbnormalityTargetType target;
                AbnormalityTriggerType trigger;
                Enum.TryParse(abnormality.Attribute("target").Value, true, out target);
                Enum.TryParse(abnormality.Attribute("trigger").Value, true, out trigger);
                var remainingSecondsBeforeTrigger = 0;
                var rewarnTimeoutSeconds = 0;
                if (trigger == AbnormalityTriggerType.MissingDuringFight)
                {
                    remainingSecondsBeforeTrigger = int.Parse(abnormality.Attribute("remaining_seconds_before_trigger").Value);
                    rewarnTimeoutSeconds = int.Parse(abnormality.Attribute("rewarn_timeout_seconds")?.Value??"0");
                }
                var blacklist = ParseAreaBossBlackList(abnormality);
                var abnormalityEvent = new AbnormalityEvent(ingame,active, priority, blacklist.Any() ? blacklist : default_blacklist, ids, types, target, trigger, remainingSecondsBeforeTrigger,rewarnTimeoutSeconds);
                events.Add(abnormalityEvent, new List<Actions.Action>());
                ParseActions(abnormality, events, abnormalityEvent);
            }
        }