Пример #1
0
        public MountResult MountFiles(MissionSourceInfo srcInfo)
        {
            // load map file into memory
            MapFile mapf = new MapFile();

            if (srcInfo.Map == null)
            {
                return(new MountResult(MountErrorType.MAP_UNDEFINED, Resource.Strings.MountError_MAP_UNDEFINED));
            }
            if (!File.Exists(srcInfo.Map))
            {
                return(new MountResult(MountErrorType.MAP_NOTFOUND, Resource.Strings.MountError_MAP_NOTFOUND.F(srcInfo.Map)));
            }
            try
            {
                mapf.ReadFromFile(srcInfo.Map);
            }
            catch (Exception ex)
            {
                return(new MountResult(MountErrorType.MAP_READ_ERROR, Resource.Strings.MountError_MAP_READ_ERROR, ex));
            }

            // load mis file into memory
            MisFile misf = new MisFile();

            if (srcInfo.Mis == null)
            {
                return(new MountResult(MountErrorType.MIS_UNDEFINED, Resource.Strings.MountError_MIS_UNDEFINED));
            }
            if (!File.Exists(srcInfo.Mis))
            {
                return(new MountResult(MountErrorType.MIS_NOTFOUND, Resource.Strings.MountError_MIS_NOTFOUND.F(srcInfo.Mis)));
            }
            try
            {
                misf.ReadFromFile(srcInfo.Mis);
            }
            catch (Exception ex)
            {
                return(new MountResult(MountErrorType.MIS_READ_ERROR, Resource.Strings.MountError_MIS_READ_ERROR, ex));
            }

            // load (optional) rules file into memory
            MapRulesFile rulf = new MapRulesFile();

            if (srcInfo.Rules != null)
            {
                if (!File.Exists(srcInfo.Rules))
                {
                    return(new MountResult(MountErrorType.RULES_NOTFOUND, Resource.Strings.MountError_RULES_NOTFOUND.F(srcInfo.Rules)));
                }
                try
                {
                    rulf.ReadFromFile(srcInfo.Rules);
                }
                catch (Exception ex)
                {
                    return(new MountResult(MountErrorType.RULES_READ_ERROR, Resource.Strings.MountError_RULES_READ_ERROR, ex));
                }
            }

            // load (optional) mod file into memory
            if (srcInfo.Mod != null)
            {
                if (!File.Exists(srcInfo.Mod))
                {
                    return(new MountResult(MountErrorType.MOD_NOTFOUND, Resource.Strings.MountError_MOD_NOTFOUND.F(srcInfo.Mod)));
                }
                ModFile modf = new ModFile();
                try
                {
                    modf.ReadFromFile(srcInfo.Mod);
                }
                catch (Exception ex)
                {
                    return(new MountResult(MountErrorType.MOD_READ_ERROR, Resource.Strings.MountError_MOD_READ_ERROR, ex));
                }

                // apply mod
                try
                {
                    Mod mod = modf.CreateMod();
                    mod.Apply(ref mapf, ref misf);
                }
                catch (Exception ex)
                {
                    return(new MountResult(MountErrorType.MOD_ERROR, Resource.Strings.MountError_MOD_ERROR, ex));
                }
            }

            // define target paths
            string mapPath = MAPFILE_FORMAT.F(MissionDir, RESERVED_MISSION_NAME);
            string misPath = MISFILE_FORMAT.F(MissionDir, RESERVED_MISSION_NAME);
            string rulPath = RULESFILE_FORMAT.F(MissionDir, RESERVED_MISSION_NAME);

            // write map
            try
            {
                mapf.WriteToFile(mapPath);
            }
            catch (Exception ex)
            {
                return(new MountResult(MountErrorType.MAP_WRITE_ERROR, Resource.Strings.MountError_MAP_WRITE_ERROR, ex));
            }

            // write mis
            try
            {
                misf.WriteToFile(misPath);
            }
            catch (Exception ex)
            {
                return(new MountResult(MountErrorType.MIS_WRITE_ERROR, Resource.Strings.MountError_MIS_WRITE_ERROR, ex));
            }

            // write rules, if defined
            if (srcInfo.Rules != null)
            {
                try
                {
                    rulf.WriteToFile(rulPath);
                }
                catch (Exception ex)
                {
                    return(new MountResult(MountErrorType.RULES_WRITE_ERROR, Resource.Strings.MountError_RULES_WRITE_ERROR, ex));
                }
            }

            return(new MountResult(MountErrorType.SUCCESS));
        }