public static void Save(List <SkillData> CustomDefinitions)
            {
                if (!Directory.Exists(Dir_Definitions))
                {
                    Directory.CreateDirectory(Dir_Definitions);
                }

                var files = Directory.GetFiles(Dir_Definitions);

                if (files.Any())
                {
                    foreach (var file in files)
                    {
                        var    m        = Regex.Match(file, @"definitions\\(.*)", RegexOptions.Singleline);
                        string filename = m.Groups[1].Value;
                        if (CustomDefinitions.FirstOrDefault(x => x.Name == filename.Replace(".bin", "")) == null)
                        {
                            File.Delete((file));
                        }
                    }
                }

                foreach (var definition in CustomDefinitions)
                {
                    try
                    {
                        _SkillData data = Convert_ToStruct(definition);

                        BinaryFile.WriteToFile <_SkillData>(Dir_Definitions + @"\" + data.Name + ".bin", data);
                    }
                    catch
                    {
                    }
                }
            }
            private static _SkillData Convert_ToStruct(SkillData Data)
            {
                try
                {
                    _SkillData Struct = new _SkillData();

                    _SkillPower Power = new _SkillPower();
                    Power.IsPrimaryResource = Data.Power.IsPrimaryResource;
                    Power.Name         = Data.Power.Name;
                    Power.PowerSNO     = Data.Power.PowerSNO;
                    Power.ResourceCost = Data.Power.ResourceCost;

                    List <_Rune> Runes = new List <_Rune>();
                    foreach (var rune in Data.Power.Runes)
                    {
                        _Rune newRune = new _Rune();
                        newRune.Name        = rune.Name;
                        newRune.RuneIndex   = rune.RuneIndex;
                        newRune._DamageType = rune._DamageType;

                        Runes.Add(newRune);
                    }

                    Power.Runes = Runes;

                    Struct.Power = Power;

                    Struct.Name = Data.Name;

                    _Rune SelectedRune = new _Rune();
                    SelectedRune.Name        = Data.SelectedRune.Name;
                    SelectedRune.RuneIndex   = Data.SelectedRune.RuneIndex;
                    SelectedRune._DamageType = Data.SelectedRune._DamageType;

                    Struct.SelectedRune = SelectedRune;

                    List <_CastCondition> CastConditions = new List <_CastCondition>();
                    foreach (var condition in Data.CastConditions)
                    {
                        _CastCondition newConditions = new _CastCondition();
                        newConditions.ConditionGroup = condition.ConditionGroup;
                        newConditions.Type           = condition.Type;
                        newConditions.ValueNames     = condition.ValueNames;
                        newConditions.Values         = condition.Values;

                        CastConditions.Add(newConditions);
                    }

                    Struct.CastConditions = CastConditions;


                    return(Struct);
                }
                catch
                {
                    return(default(_SkillData));
                }
            }
            private static SkillData Convert_ToClass(_SkillData Data)
            {
                try
                {
                    List <Rune> Runes = new List <Rune>();
                    foreach (var rune in Data.Power.Runes)
                    {
                        Rune newRune = new Rune(rune.Name, rune.RuneIndex, rune._DamageType);

                        Runes.Add(newRune);
                    }

                    SkillPower Power = new SkillPower(Data.Power.PowerSNO, Data.Power.Name, Runes,
                                                      Data.Power.ResourceCost, Data.Power.IsPrimaryResource, false);

                    Rune SelectedRune = new Rune(Data.SelectedRune.Name, Data.SelectedRune.RuneIndex,
                                                 Data.SelectedRune._DamageType);

                    List <CastCondition> CastConditions = new List <CastCondition>();

                    if (Data.CastConditions != null)
                    {
                        foreach (var condition in Data.CastConditions)
                        {
                            CastCondition newCondition = new CastCondition(condition.ConditionGroup, condition.Type,
                                                                           condition.Values, condition.ValueNames);

                            newCondition.comment = condition.comment;
                            newCondition.enabled = condition._enabled;

                            newCondition.version = condition.version;

                            fixCastConditionByVersion(newCondition);

                            CastConditions.Add(newCondition);
                        }
                    }

                    SkillData Class = new SkillData(Power, Data.Name, SelectedRune, CastConditions);

                    return(Class);
                }
                catch
                {
                    return(default(SkillData));
                }
            }
            public static List <SkillData> Load()
            {
                try
                {
                    List <SkillData> CustomDefinitions = new List <SkillData>();

                    if (Directory.Exists(Dir_Definitions))
                    {
                        var files = Directory.GetFiles(Dir_Definitions);

                        foreach (var file in files)
                        {
                            bool failed;

                            _SkillData _skilldata = BinaryFile.ReadFromFile <_SkillData>(file, out failed);

                            if (!failed)
                            {
                                SkillData newSkillData = Convert_ToClass(_skilldata);

                                CustomDefinitions.Add(newSkillData);
                            }
                            else
                            {
                                _SkillData_int _skilldata_int = BinaryFile.ReadFromFile <_SkillData_int>(file, out failed);

                                SkillData newSkillData = Convert_ToClass(_skilldata_int);

                                CustomDefinitions.Add(newSkillData);
                            }
                        }
                    }

                    return(CustomDefinitions);
                }
                catch
                {
                    return(new List <SkillData>());
                }
            }