Ejemplo n.º 1
0
    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();
    }
Ejemplo n.º 2
0
    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);
        }
    }
Ejemplo n.º 3
0
    public void InitStream(WDBData data)
    {
        BinaryFormatter formatter           = new BinaryFormatter();
        MemoryStream    serializationStream = new MemoryStream();

        formatter.Serialize(serializationStream, data);
        this.m_Stream = serializationStream.ToArray();
    }
Ejemplo n.º 4
0
 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>());
 }
Ejemplo n.º 5
0
 public void LoadNDB(byte[] ndb, byte[] tbl, string ndbName)
 {
     OpenData(ndb, ndbName);
     if (tbl != null)
     {
         mTBl = new WDBData();
         mTBl.OpenData(tbl, ndbName);
     }
 }
Ejemplo n.º 6
0
    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);
                }
            }
        }
    }
Ejemplo n.º 7
0
    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);
    }
Ejemplo n.º 8
0
    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();
    }
Ejemplo n.º 9
0
    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);
    }
Ejemplo n.º 10
0
    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>());
    }
Ejemplo n.º 11
0
    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);
    }
Ejemplo n.º 12
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);
        }
    }
Ejemplo n.º 13
0
    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();
            }
        }
    }
Ejemplo n.º 14
0
    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!");
    }
Ejemplo n.º 15
0
 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);
 }
Ejemplo n.º 16
0
    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();
        }
    }
Ejemplo n.º 17
0
    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);
    }