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