/// <summary> /// gets the list of dependencies from modinfo.lua /// </summary> string[] GetDependenciesFromLua(string archiveName, string fileName) { var modInfoFile = Archive.ExtractTextFile(archiveName, fileName); var results = CLua.TraceDoString(L, 1, modInfoFile); return(results[0].GetLuaValues("depend").Select(v => v.ToString()).ToArray()); }
/// <summary> ///gets the list of dependencies from modinfo.tdf /// </summary> string[] GetDependenciesFromTdf(string archiveName, string fileName) { var modInfoText = Archive.ExtractTextFile(archiveName, fileName); Lua.lua_getglobal(L, "TDFparser"); // push the parser table on the stack Lua.lua_getfield(L, -1, "ParseText"); // push the parse string function var modInfoTable = CLua.TraceCall(L, 2, new LuaString(modInfoText)); // load the tdf from string var modInfo = modInfoTable[0].GetField("mod"); // get all existing "dependN" fields var dependencies = new List <string>(); var n = 0; while (true) { var field = modInfo.GetField("depend" + n++); if (field != null) { dependencies.Add(field.ToString()); } else { break; } } LuaValue.Pop(L, 1); return(dependencies.ToArray()); }
///<summary> /// creates a lua state and registers the TDF parser ///</summary> public static IntPtr GetLuaState(string springPath) { if (Path.HasExtension(springPath)) { throw new Exception("Invalid spring path"); } var L = Lua.luaL_newstate(); Lua.luaL_openlibs(L); var springContent = Path.Combine(springPath, @"base\springcontent.sdz"); var tdfParserString = Archive.ExtractTextFile(springContent, "gamedata/parse_tdf.lua"); CLua.DoStringPushReturn(L, tdfParserString, new ConstantResults(1)); Lua.lua_setglobal(L, "TDFParser"); return(L); }
static string GetTdfField(IntPtr L, string fieldName, string archivePath) { var archive = Archive.Open(archivePath); var tdfFile = FindModInfo(archive, "tdf"); if (tdfFile != null) { var modInfoTable = GetTdfTableFromString(L, Archive.ExtractTextFile(archivePath, tdfFile)); if (modInfoTable[0] is LuaNil) { throw new Exception(String.Format("Error in file {0}: {1}", archivePath, modInfoTable[1])); } var modInfo = modInfoTable[0].GetField("mod"); if (modInfo == null) { return(null); } var field = modInfo.GetField(fieldName); if (field == null) { return(null); } return(field.ToString()); } var luaFile = FindModInfo(archive, "lua"); if (luaFile != null) { var modinfo = Archive.ExtractTextFile(archivePath, luaFile); var result = CLua.TraceDoString(L, 1, modinfo)[0].GetField(fieldName); if (result == null) { return(null); } return(result.ToString()); } return(null); }