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