Exemplo n.º 1
0
        private static List <Ai> GetSpringAis_Internal(string engineFolder)
        {
            //Example Unitsync method: (not compatible with Linux environment & probably abit CPU expensive )
            //var springAis = new List<Ai>();
            //Program.SpringScanner.VerifyUnitSync();
            //if (Program.SpringScanner.unitSync != null)
            //{
            //    foreach (var bot in Program.SpringScanner.unitSync.GetAis()) //IEnumberable can't be serialized, so convert to List. Ref: http://stackoverflow.com/questions/9102234/xmlserializer-in-c-sharp-wont-serialize-ienumerable
            //        springAis.Add(bot);
            //    Program.SpringScanner.UnInitUnitsync();
            //}

            var    springAis        = new List <Ai>();
            string aiSkirmishFolder = ZkData.Utils.MakePath(engineFolder, "AI", "Skirmish"); //eg: Spring/engine/98.0/AI/Skirmish

            if (!Directory.Exists(aiSkirmishFolder))
            {
                return(springAis);
            }

            var           aiName = System.IO.Directory.EnumerateDirectories(aiSkirmishFolder, "*").ToList <string>();
            string        aiFolder;
            string        aiLibFolder;
            string        aiVerFolder;
            List <string> aiVerFolderS;
            string        aiInfoFile;

            for (int i = 0; i < aiName.Count; i++)
            {
                aiFolder     = aiName[i]; //eg: Spring/engine/98.0/AI/Skirmish/AAI
                aiVerFolderS = System.IO.Directory.EnumerateDirectories(aiFolder, "*").ToList <string>();
                for (int j = 0; j < aiVerFolderS.Count; j++)
                {
                    aiVerFolder = GetFolderOrFileName(aiVerFolderS[j]);
                    aiLibFolder = ZkData.Utils.MakePath(aiFolder, aiVerFolder);     //eg: Spring/engine/98.0/AI/Skirmish/AAI/0.9
                    aiInfoFile  = ZkData.Utils.MakePath(aiLibFolder, "AIInfo.lua"); //eg: Spring/engine/98.0/AI/Skirmish/AAI/0.9/AIInfo.lua
                    var bot = CrudeLUAReader.GetAIInfo(aiInfoFile);
                    if (bot != null)
                    {
                        springAis.Add(bot);
                    }
                }
            }
            return(springAis);
        }
Exemplo n.º 2
0
        public static List <Mod> GetPartialSddMods()
        {
            var sddMods   = new List <Mod>();
            var modFolder = Utils.MakePath(Program.SpringPaths.DataDirectories.First(), "games");
            var sddFolder = System.IO.Directory.EnumerateDirectories(modFolder, "*.sdd"); //.ToList<string>();

            foreach (string path in sddFolder)
            {
                var modinfo = Utils.MakePath(path, "modinfo.lua");
                if (File.Exists(modinfo))
                {
                    var mod = new Mod();

                    mod.ArchiveName = GetFolderOrFileName(path);

                    CrudeLUAReader.ParseModInfo(modinfo, ref mod);

                    sddMods.Add(mod);
                }
            }
            return(sddMods);
        }
Exemplo n.º 3
0
        public static Mod GetOneSddMod(Mod mod)
        {
            if (mod.Options != null || mod.ModAis != null || mod.MissionScript != null || mod.Sides != null)
            {
                return(mod);
            }

            var modFolder = Utils.MakePath(Program.SpringPaths.DataDirectories.First(), "games");
            var path      = Utils.MakePath(modFolder, mod.ArchiveName);

            String engineOptions     = null;
            String modOptions        = null;
            String luaAI             = null;
            String missionScriptPath = null;
            String missionSlotPath   = null;

            var rootFiles = Directory.EnumerateFiles(path);

            foreach (var pathOfFile in rootFiles)
            {
                var fileName = GetFolderOrFileName(pathOfFile);
                if (fileName.StartsWith("EngineOptions.lua", StringComparison.InvariantCultureIgnoreCase))
                {
                    engineOptions = pathOfFile;
                }
                else if (fileName.StartsWith("ModOptions.lua", StringComparison.InvariantCultureIgnoreCase))
                {
                    modOptions = pathOfFile;
                }
                else if (fileName.StartsWith("LuaAI.lua", StringComparison.InvariantCultureIgnoreCase))
                {
                    luaAI = pathOfFile;
                }
                else if (fileName.StartsWith("script.txt", StringComparison.InvariantCultureIgnoreCase))
                {
                    missionScriptPath = pathOfFile;
                }
                else if (fileName.StartsWith("slots.lua", StringComparison.InvariantCultureIgnoreCase))
                {
                    missionSlotPath = pathOfFile;
                }
            }

            if (modOptions != null)
            {
                CrudeLUAReader.ReadOptionsTable(modOptions, ref mod);
            }
            if (engineOptions != null)
            {
                CrudeLUAReader.ReadOptionsTable(engineOptions, ref mod);
            }
            if (luaAI != null)
            {
                CrudeLUAReader.ReadLuaAI(luaAI, ref mod);
            }
            if (missionSlotPath != null)
            {
                CrudeLUAReader.ReadMissionSlot(missionSlotPath, ref mod);
            }

            if (missionScriptPath != null)
            {
                try{
                    using (FileStream fileStream = File.OpenRead(missionScriptPath))
                        using (var stream = new StreamReader(fileStream))
                        {
                            mod.MissionScript = stream.ReadToEnd();

                            var open    = mod.MissionScript.IndexOf("mapname", 7, mod.MissionScript.Length - 8, StringComparison.InvariantCultureIgnoreCase) + 8;
                            var close   = mod.MissionScript.IndexOf(';', open);
                            var mapname = mod.MissionScript.Substring(open, close - open);
                            mod.MissionMap = mapname.Trim(new char[3] {
                                ' ', '=', '\t'
                            });
                        }
                }catch (Exception e)
                {}
            }

            var sideData = Utils.MakePath(path, "gamedata", "sidedata.lua");
            var picPath  = Utils.MakePath(path, "sidepics");

            CrudeLUAReader.ReadSideInfo(sideData, picPath, ref mod);

            return(mod);
        }