public static void GenrateWDBScript(WDBData data, string script_name, string out_path) { StreamWriter writer = new StreamWriter(out_path + "WDB_" + script_name + ".cs"); writer.WriteLine("using UnityEngine;"); writer.WriteLine("using System.Collections;"); writer.WriteLine(""); writer.WriteLine("public class WDB_" + script_name); writer.WriteLine("{"); foreach (KeyValuePair <string, int> kv in data.mFieldName) { writer.WriteLine("\tpublic static readonly int " + kv.Key + ";"); } writer.WriteLine(""); writer.WriteLine("\tstatic WDB_" + script_name + "()"); writer.WriteLine("\t{"); writer.WriteLine("\t\tWDBData db = CDataMgr." + script_name + ";"); writer.WriteLine("\t\tif(db != null)"); writer.WriteLine("\t\t{"); foreach (KeyValuePair <string, int> kv in data.mFieldName) { writer.WriteLine("\t\t\tdb.GetFieldByName(\"" + kv.Key + "\", out " + kv.Key + ");"); } writer.WriteLine("\t\t}"); writer.WriteLine("\t}"); writer.WriteLine("}"); writer.Flush(); writer.Close(); }
static WDB_Item() { WDBData db = CDataMgr.Item; if (db != null) { db.GetFieldByName("Id", out Id); db.GetFieldByName("Name", out Name); db.GetFieldByName("Desc", out Desc); db.GetFieldByName("Body", out Body); db.GetFieldByName("Body_Drop", out Body_Drop); db.GetFieldByName("Drop_Effect", out Drop_Effect); db.GetFieldByName("Quality", out Quality); db.GetFieldByName("Bag", out Bag); db.GetFieldByName("Use", out Use); db.GetFieldByName("AutuGein", out AutuGein); db.GetFieldByName("StackSum", out StackSum); db.GetFieldByName("IsResolve", out IsResolve); db.GetFieldByName("IsSold", out IsSold); db.GetFieldByName("Price", out Price); db.GetFieldByName("IsAffirmSold", out IsAffirmSold); db.GetFieldByName("Icon", out Icon); db.GetFieldByName("IconType", out IconType); db.GetFieldByName("Function", out Function); db.GetFieldByName("BuffId", out BuffId); db.GetFieldByName("Drop", out Drop); db.GetFieldByName("TrunAround", out TrunAround); db.GetFieldByName("GainEffect", out GainEffect); } }
public void InitStream(WDBData data) { BinaryFormatter formatter = new BinaryFormatter(); MemoryStream serializationStream = new MemoryStream(); formatter.Serialize(serializationStream, data); this.m_Stream = serializationStream.ToArray(); }
public T GetData <T> (int field) { if (field >= 0 && field < m_Line.Length) { return((T)m_Line[field]); } Debug.LogWarning("lineData.GetData:" + field + " error!"); return(WDBData.createInstance <T>()); }
public void LoadNDB(byte[] ndb, byte[] tbl, string ndbName) { OpenData(ndb, ndbName); if (tbl != null) { mTBl = new WDBData(); mTBl.OpenData(tbl, ndbName); } }
void OnGUI() { index = EditorGUI.Popup(new Rect(3, 25, position.width - 6, 20), "TYPE", index, options); if (index == 0) { src_db_file = EditorGUI.TextField(new Rect(3, 50, position.width - 6, 20), "策划表名:", src_db_file); lua_wdb_out_path = EditorGUI.TextField(new Rect(3, 75, position.width - 6, 20), "wdb输出路径:", lua_wdb_out_path); if (GUILayout.Button("Genrate")) { WDBData data = CDataMgr.Instance.GetOrCreateDB(src_db_file); if (data == null) { Debug.LogError("Can't find " + src_db_file + "!!"); return; } LuaDBScriptGenrator.GenrateWDBScript(data, src_db_file, lua_wdb_out_path); LuaDBScriptGenrator.RegisterDBinCDataMgr(src_db_file); //LuaDBScriptGenrator.RegisterWDBDataInCSharp(src_db_file); } } else { src_db_file = EditorGUI.TextField(new Rect(3, 50, position.width - 6, 20), "策划表名:", src_db_file); wdb_out_path = EditorGUI.TextField(new Rect(3, 75, position.width - 6, 20), "wdb输出路径:", wdb_out_path); wdbSelect = EditorGUI.Toggle(new Rect(3, 100, position.width - 6, 20), "输出wdb ", wdbSelect); model_out_path = EditorGUI.TextField(new Rect(3, 125, position.width - 6, 20), "model输出路径:", model_out_path); modelSelect = EditorGUI.Toggle(new Rect(3, 150, position.width - 6, 20), "输出model ", modelSelect); coverModelFile = EditorGUI.Toggle(new Rect(3, 200, position.width - 6, 20), "覆盖掉之前的Model文件 ", coverModelFile); if (GUILayout.Button("Genrate")) { WDBData data = CDataMgr.Instance.GetOrCreateDB(src_db_file); if (data == null) { Debug.LogError("Can't find " + src_db_file + "!!"); return; } if (wdbSelect) { Debug.Log("输出 wdb"); DBScriptGenrator.GenrateWDBScript(data, src_db_file, wdb_out_path); DBScriptGenrator.RegisterWDBDataInCSharp(src_db_file); } if (modelSelect) { Debug.Log("输出 model"); DBScriptGenrator.GenrateModelScript(data, src_db_file, model_out_path, coverModelFile); DBScriptGenrator.RegisterWDBDataInCSharp(src_db_file); } } } }
public static int GetDataLong(IntPtr l) //3个参数(WDBData,index,wdbIndex) { WDBData db = (WDBData)lua_.ToUserDataObject(-3); int index = lua_.ToInteger(-2); int wdbIndex = lua_.ToInteger(-1); long longValue = db.GetData <long>(index, wdbIndex); lua_.PushLongInterger(longValue); return(1); }
public static void GenrateModelScript(WDBData data, string script_name, string out_path, bool coverFile) { StreamWriter writer; if (coverFile) { writer = new StreamWriter(out_path + "Model" + script_name + ".cs"); } else { writer = new StreamWriter(out_path + "Model" + script_name + ".cs.auto"); } writer.WriteLine("using UnityEngine;"); writer.WriteLine("using System.Collections;"); writer.WriteLine(""); writer.WriteLine("public class Model" + script_name + " : ModelBase"); writer.WriteLine("{"); foreach (KeyValuePair <string, int> kv in data.mFieldName) { string filed_type = GetFiledType(data.mFieldType[kv.Value]); if (kv.Key == "Id") { continue; } writer.WriteLine("\tpublic " + filed_type + " " + GetFiledName(kv.Key) + ";"); } writer.WriteLine(""); writer.WriteLine("\tpublic override bool LoadConfig(int id)"); writer.WriteLine("\t{"); writer.WriteLine("\t\tWDBSheetLine line = CDataMgr." + script_name + ".GetData(id);"); writer.WriteLine("\t\tif(line == null)"); writer.WriteLine("\t\t{"); writer.WriteLine("\t\t\tLKDebug.LogError(\"LoadConfig error: can't find \" + id + \" in " + script_name + " table!\");"); writer.WriteLine("\t\t\treturn false;"); writer.WriteLine("\t\t}"); writer.WriteLine(""); foreach (KeyValuePair <string, int> kv in data.mFieldName) { string filed_type = GetFiledType(data.mFieldType[kv.Value]); writer.WriteLine("\t\t" + GetFiledName(kv.Key) + " = line.GetData<" + filed_type + ">(WDB_" + script_name + "." + kv.Key + ");"); } writer.WriteLine(""); writer.WriteLine("\t\treturn true;"); writer.WriteLine("\t}"); writer.WriteLine("}"); writer.Flush(); writer.Close(); }
public WDBData GetData() { BinaryFormatter formatter = new BinaryFormatter(); MemoryStream serializationStream = new MemoryStream(this.m_Stream); WDBData data = formatter.Deserialize(serializationStream) as WDBData; if (data != null) { data.Init(); } return(data); }
public T GetData <T>(object field) { int nfiled = Convert.ToInt32(field); if ((nfiled >= 0) && (nfiled < this.m_Line.Length)) { if (m_Line[nfiled] == null) { return(WDBData.createInstance <T>()); } return((T)this.m_Line[nfiled]); } Debug.LogWarning("lineData.GetData:" + field + " error!"); return(WDBData.createInstance <T>()); }
public static int SetLuaTableField(IntPtr l) { string tableName = lua_.ToString(1); WDBData dbData = CDataMgr.Instance.GetOrCreateDB(tableName); lua_.GetGlobal("WDB_" + tableName); foreach (KeyValuePair <string, int> kv in dbData.mFieldName) { lua_.PushInteger(dbData.GetFieldByName(kv.Key)); lua_.SetField(-2, kv.Key); } lua_.Pop(2); return(0); }
public WDBData GetOrCreateDB(string dbName) { WDBData data; dataDic.TryGetValue(dbName, out data); if (data != null) { return(data); } else { WDBData newData = InitDBData(dbName); dataDic.Add(dbName, newData); return(newData); } }
private void CopyFile(string filePath, string savePath) { if (!savePath.StartsWith("Assets/")) { savePath = savePath.Substring(savePath.IndexOf("Assets/")); } if (savePath.Length > 0) { string WDBAssetExtension = ""; savePath += "/" + filePath.Substring(filePath.LastIndexOf("/") + 1); savePath = savePath.Replace(".", "_"); savePath += WDBAssetExtension; savePath = EditorTools.GetPathForDisk(savePath); Debug.Log(savePath); //File.Copy(filePath, savePath, true); FileStream fs = new FileStream(filePath, FileMode.Open); byte[] data = new byte[(int)fs.Length]; fs.Read(data, 0, data.Length); fs.Close(); int offset = WDBData.GetOffset(data); if (offset == 0) { Debug.LogError(filePath + " error!"); } else { FileStream fsout = new FileStream(savePath, FileMode.Create); if (offset % 4 == 0) { fsout.Write(data, 0, data.Length); } else { fsout.Write(data, 0, offset); fsout.WriteByte(0); fsout.WriteByte(0); fsout.Write(data, offset, data.Length - offset); } fsout.Close(); } } }
public static void GenrateWDBScript(WDBData data, string script_name, string out_path) { StreamWriter writer = new StreamWriter(out_path + "WDB_" + script_name + ".txt"); writer.WriteLine("WDB_" + script_name + " = {}"); writer.WriteLine("--[["); foreach (KeyValuePair <string, int> kv in data.mFieldName) { writer.WriteLine("\tWDB_" + script_name + "." + kv.Key); } writer.WriteLine("]]--"); writer.WriteLine(""); writer.WriteLine("LuaDBTable.SetLuaTableField(\"" + script_name + "\")"); writer.Flush(); writer.Close(); Debug.Log("Write WDB file finished!"); }
public WDBData InitDBData(string name) { byte[] asset = ResLoader.LoadRaw("Data/" + name + "_ndb"); if (asset != null) { byte[] tbl_asset = ResLoader.LoadRaw("Data/" + name + "_tbl"); WDBData data = new WDBData(); if (tbl_asset != null) { data.LoadNDB(asset, tbl_asset, name); } else { data.LoadNDB(asset, null, name); } return(data); } Debug.Log(name + "NULLLLL"); return(null); }
private void OnLoadTextCallback(string path, byte[] bytes) { if (!mLoadHandles.ContainsKey(path)) { //出现严重错误 return; } string text = ""; LoadHandler handle = mLoadHandles[path] as LoadHandler; if (handle.isXML) { text = System.Text.Encoding.UTF8.GetString(bytes); } else { text = System.Text.Encoding.Unicode.GetString(bytes); } if (string.IsNullOrEmpty(text)) { return; } //Hashtable tb = new Hashtable(new CustomEqualityComparer()); DataTable tb = new DataTable(); if (!handle.isXML) { WDBData dbData = null; try { dbData = TextAnalyze.Analyze(text); } catch (Exception analyzeException) { throw new Exception("加载" + path + "失败: " + analyzeException.Message); } for (int i = 0; i < dbData.GetRecordCount(); ++i) { WDBSheetLine line = dbData.GetDataByNumber(i); if (line != null) { object item = System.Activator.CreateInstance(handle.type); try { tb.Add(loadLine(line, item, handle.keyIdx), item); } catch (Exception exp) { throw new Exception("解析" + path + "失败: " + exp.Message); } } } } else { XmlDocument xDoc = new XmlDocument(); xDoc.LoadXml(text); XmlNode node = xDoc.FirstChild; node = node.NextSibling; XmlNodeList nodeList = node.ChildNodes; for (int i = 0; i < nodeList.Count; ++i) { XmlNode childNode = nodeList[i]; if (!string.IsNullOrEmpty(childNode.Name) && childNode.LocalName == "#comment") { continue; } object item = System.Activator.CreateInstance(handle.type); Type itemType = item.GetType(); System.Reflection.FieldInfo[] fields = itemType.GetFields(); foreach (System.Reflection.FieldInfo f in fields) { XmlNode nd = childNode.Attributes.GetNamedItem(f.Name); if (nd != null) { if (f.FieldType.Name == "Int32") { f.SetValue(item, System.Convert.ToInt32(nd.Value)); } if (f.FieldType.Name == "Single") { f.SetValue(item, System.Convert.ToSingle(nd.Value)); } if (f.FieldType.Name == "String") { f.SetValue(item, nd.Value); } } } tb.Add(fields[0].GetValue(item), item); } } mLoadHandles.Remove(path); mTableList.Add((int)handle.dataType, tb); if (mLoadHandles.Count <= 0) { OnAllLoad(); } }
public static WDBData Analyze(string text) { if (string.IsNullOrEmpty(text)) { return(null); } WDBData data = new WDBData(); List <WDBSheetLine> sheetList = new List <WDBSheetLine>(); data.m_Type = new List <TYPE>(); Dictionary <int, TYPE> _type = new Dictionary <int, TYPE>(); string[] lineData = text.Split('\n'); int keyLine = -1; int typeLine = -1; for (int nLine = 0; nLine < lineData.Length; ++nLine) { string[] datas = lineData[nLine].Split('\r'); datas = datas[0].Split('\t'); if (datas.Length == 0 || datas[0].IndexOf("#") == 0) { continue;//判断有错误,如果未找到该字符串,则为 -1。 如果 value 为 String.Empty,则返回值为 0 } if (datas.Length == 1 && datas[0] == "") { continue; } if (keyLine < 0) { keyLine = nLine; } else { if (nLine == keyLine + 1) { typeLine = nLine; } } WDBSheetLine sheetLine = new WDBSheetLine(); sheetLine.m_Line = new object[datas.Length]; for (int col = 0; col < datas.Length; ++col) { // if (nLine == keyLine) // data.m_FieldName.Add (datas [col], col); if (nLine == typeLine) { TYPE strType = nameToType(datas[col]); if (strType == TYPE.TYPE_INVALID) { throw new Exception("failed to parse type: " + datas[col]); } _type.Add(col, strType); data.m_Type.Add(strType); continue; } if (nLine == keyLine) { sheetLine.m_Line[col] = datas[col]; } else { sheetLine.m_Line[col] = ConvertValue(datas[col], _type[col]); } } if (nLine != typeLine) { sheetList.Add(sheetLine); } } if (sheetList.Count > 0) { data.m_Data = new WDBSheetLine[sheetList.Count]; for (int n = 0; n < sheetList.Count; ++n) { data.m_Data[n] = sheetList[n]; } sheetList.Clear(); data.Init(); } return(data); }