private void parse_power_block(XElement xml_doc)
        {
            IEnumerable <XElement> power_list = xml_doc.Descendants("Power");

            foreach (XElement power in power_list)
            {
                PlayerPower            new_power       = new PlayerPower();
                XAttribute             power_name      = power.FirstAttribute;
                IEnumerable <XElement> power_specifics = power.Descendants("specific");
                IEnumerable <XElement> power_weapons   = power.Descendants("Weapon");
                new_power.name = power_name.Value;
                foreach (XElement specific in power_specifics)
                {
                    XAttribute power_info = specific.FirstAttribute;
                    switch (power_info.Value)
                    {
                    case "Flavor":
                        new_power.flavor = specific.Value;
                        break;

                    case "Power Usage":
                        switch (specific.Value)
                        {
                        case "At-Will":
                            new_power.power_usage = PlayerPower.power_usage_e.AT_WILL;
                            break;

                        case "Encounter":
                            new_power.power_usage = PlayerPower.power_usage_e.ENCOUNTER;
                            break;

                        case "Daily":
                            new_power.power_usage = PlayerPower.power_usage_e.DAILY;
                            break;

                        default:
                            break;
                        }
                        break;

                    case "Display":
                        new_power.display = specific.Value;
                        break;

                    case "Keywords":
                        new_power.keywords = specific.Value;
                        break;

                    case "Attack Type":
                        new_power.attack_type = specific.Value;
                        break;

                    case "Target":
                        new_power.target = specific.Value;
                        break;

                    case "Attack":
                        new_power.attack = specific.Value;
                        break;

                    case "Hit":
                        new_power.hit = specific.Value;
                        break;

                    case "Miss":
                        new_power.miss = specific.Value;
                        break;

                    case "Action Type":
                        switch (specific.Value)
                        {
                        case "Standard Action":
                            new_power.action_type = PlayerPower.action_type_e.STANDARD;
                            break;

                        case "Minor Action":
                            new_power.action_type = PlayerPower.action_type_e.MINOR;
                            break;

                        case "Move Action":
                            new_power.action_type = PlayerPower.action_type_e.MOVEMENT;
                            break;

                        default:
                            break;
                        }
                        break;

                    case "Effect":
                        new_power.effect = specific.Value;
                        break;

                    default:
                        break;
                    }
                    power_info.GetType();
                    specific.GetType();
                }
                foreach (XElement weapon in power_weapons)
                {
                    PowerWeapon new_weapon = new PowerWeapon();
                    if (weapon.FirstAttribute.Value == "Unarmed")
                    {
                        continue;
                    }
                    new_weapon.name         = weapon.FirstAttribute.Value;
                    new_weapon.attack_bonus = Convert.ToByte(weapon.Descendants("AttackBonus").First().Value);
                    new_weapon.crit_damage  = weapon.Descendants("CritDamage").First().Value;
                    new_weapon.damage       = weapon.Descendants("Damage").First().Value;
                    new_power.weapons.Add(new_weapon);
                }
                charData.player_powers.Add(new_power);
            }
        }
 private void parse_power_block(XElement xml_doc)
 {
     IEnumerable<XElement> power_list = xml_doc.Descendants("Power");
     foreach (XElement power in power_list)
     {
         PlayerPower new_power = new PlayerPower();
         XAttribute power_name = power.FirstAttribute;
         IEnumerable<XElement> power_specifics = power.Descendants("specific");
         IEnumerable<XElement> power_weapons = power.Descendants("Weapon");
         new_power.name = power_name.Value;
         foreach (XElement specific in power_specifics)
         {
             XAttribute power_info = specific.FirstAttribute;
             switch (power_info.Value)
             {
                 case "Flavor":
                     new_power.flavor = specific.Value;
                     break;
                 case "Power Usage":
                     switch (specific.Value)
                     {
                         case "At-Will":
                             new_power.power_usage = PlayerPower.power_usage_e.AT_WILL;
                             break;
                         case "Encounter":
                             new_power.power_usage = PlayerPower.power_usage_e.ENCOUNTER;
                             break;
                         case "Daily":
                             new_power.power_usage = PlayerPower.power_usage_e.DAILY;
                             break;
                         default:
                             break;
                     }
                     break;
                 case "Display":
                     new_power.display = specific.Value;
                     break;
                 case "Keywords":
                     new_power.keywords = specific.Value;
                     break;
                 case "Attack Type":
                     new_power.attack_type = specific.Value;
                     break;
                 case "Target":
                     new_power.target = specific.Value;
                     break;
                 case "Attack":
                     new_power.attack = specific.Value;
                     break;
                 case "Hit":
                     new_power.hit = specific.Value;
                     break;
                 case "Miss":
                     new_power.miss = specific.Value;
                     break;
                 case "Action Type":
                     switch (specific.Value)
                     {
                         case "Standard Action":
                             new_power.action_type = PlayerPower.action_type_e.STANDARD;
                             break;
                         case "Minor Action":
                             new_power.action_type = PlayerPower.action_type_e.MINOR;
                             break;
                         case "Move Action":
                             new_power.action_type = PlayerPower.action_type_e.MOVEMENT;
                             break;
                         default:
                             break;
                     }
                     break;
                 case "Effect":
                     new_power.effect = specific.Value;
                     break;
                 default:
                     break;
             }
             power_info.GetType();
             specific.GetType();
         }
         foreach (XElement weapon in power_weapons)
         {
             PowerWeapon new_weapon = new PowerWeapon();
             if (weapon.FirstAttribute.Value == "Unarmed")
             {
                 continue;
             }
             new_weapon.name = weapon.FirstAttribute.Value;
             new_weapon.attack_bonus = Convert.ToByte(weapon.Descendants("AttackBonus").First().Value);
             new_weapon.crit_damage = weapon.Descendants("CritDamage").First().Value;
             new_weapon.damage = weapon.Descendants("Damage").First().Value;
             new_power.weapons.Add(new_weapon);
         }
         charData.player_powers.Add(new_power);
     }
 }