コード例 #1
0
    void LoadGoodsMessage(int id)
    {
        RookiesGoods_Composite good = (RookiesGoods_Composite)RookiesGoods_OverallManage.GoodsManage.GetGoods(id);

        maxNum = good.MaxNum;
        intro  = good.Intro;
        effect = good.Effect;
        sprite = RookiesGoods_OverallManage.GoodsManage.Try2GetSprite(id);
    }
コード例 #2
0
 private void OnEnable()
 {
     IdList = RookiesGoods_OverallManage.GoodsManage.GetAllId();
     if (IdList.Count == 0)
     {
         Debug.Log("正在为你创建物品配置文件");
         data = new RookiesGoods_SuitBase(1, "", "empty", "", "", 1);
         data.SetType("RookiesGoods_Composite");
         RookiesGoods_OverallManage.GoodsManage.Add2GoodMenu(data);
         IdList.Add("1");
         idIndex = 0;
     }
     idOption = IdList.ToArray();
     idIndex  = 0;
     minSize  = new Vector2(400, 500);
     data     = (RookiesGoods_Composite)RookiesGoods_OverallManage.GoodsManage.GetGoods(int.Parse(IdList[0]), true);
     InitMessage();
     InitComposeMessage();
     Load();
     label.fontSize = 20;
     RookiesGoods_OverallManage.GoodsManage.UpdateSaveChange += UpdateSaveType;
 }
コード例 #3
0
 /// <summary>
 /// 合成失败的回调
 /// </summary>
 /// <param name="composite">合成物的信息</param>
 ///  <param name="reason">失败原因</param>
 public abstract void OnComposeFailed(RookiesGoods_Composite composite, string reason);
コード例 #4
0
    /// <summary>
    /// 合成物品
    /// </summary>
    /// <param name="targetID"></param>
    /// <param name="bagNames"></param>
    /// <returns></returns>
    public bool AutoTrying2Synthesize(int targetID, params string[] bagNames)
    {
        if (!CheckSynthesize(targetID, bagNames))
        {
            return(false);
        }
        RookiesGoods_Composite target      = (RookiesGoods_Composite)RookiesGoods_OverallManage.GoodsManage.GetGoods(targetID);
        Dictionary <int, int>  tempCounter = new Dictionary <int, int>(target.CompositeTable);

        int[] keys = new int[tempCounter.Count];
        int   i    = 0;

        foreach (int id in tempCounter.Keys)
        {
            keys[i++] = id;
        }
        if (bagNames.Length == 0)
        {
            for (i = 0; i < tempCounter.Count; i++)
            {
                foreach (RookiesGoods_Bag bag in Bags.Values)
                {
                    if (!bag.IsThere(keys[i]))
                    {
                        continue;
                    }
                    if (tempCounter[keys[i]] >= bag.FindOwnNumber(keys[i]))
                    {
                        bag.Delete(keys[i], bag.FindOwnNumber(keys[i]));
                        tempCounter[keys[i]] -= bag.FindOwnNumber(keys[i]);
                        if (tempCounter[keys[i]] == 0)
                        {
                            break;
                        }
                    }
                    else
                    {
                        bag.Delete(keys[i], tempCounter[keys[i]]);
                        break;
                    }
                }
            }
            OnComposeSuccessful(target);
            return(true);
        }
        else
        {
            RookiesGoods_Bag        bag;
            List <RookiesGoods_Bag> searchList = new List <RookiesGoods_Bag>();
            for (i = 0; i < bagNames.Length; i++)
            {
                bag = TryGetBag(bagNames[i]);
                if (bag == null)
                {
                    throw new ArgumentException("参数" + bagNames[i] + "错误,找不到角色对应背包");
                }
                searchList.Add(bag);
            }
            foreach (int id in tempCounter.Keys)
            {
                for (i = 0; i < tempCounter.Count; i++)
                {
                    foreach (RookiesGoods_Bag temp in Bags.Values)
                    {
                        if (tempCounter[keys[i]] >= temp.FindOwnNumber(keys[i]))
                        {
                            temp.Delete(keys[i], temp.FindOwnNumber(keys[i]));
                            tempCounter[keys[i]] -= temp.FindOwnNumber(keys[i]);
                            if (tempCounter[keys[i]] == 0)
                            {
                                break;
                            }
                        }
                        else
                        {
                            temp.Delete(keys[i], temp.FindOwnNumber(keys[i]) - tempCounter[keys[i]]);
                            break;
                        }
                    }
                }
            }
            OnComposeSuccessful(target);
            return(true);
        }
    }
コード例 #5
0
 /// <summary>
 /// 合成成功的回调
 /// </summary>
 ///<param name="composite">合成物的信息</param>
 public abstract void OnComposeSuccessful(RookiesGoods_Composite composite);
コード例 #6
0
    /// <summary>
    /// 检查时候可以合成某物品
    /// </summary>
    /// <param name="target">物品id</param>
    /// <param name="player"> 想要合成该物品的玩家的RookiesGoods_PlayerData实体  </param>
    /// <param name="bagNames">角色要检查的背包名</param>
    /// <returns></returns>
    public bool CheckSynthesize(int targetID, params string[] bagNames)
    {
        RookiesGoods_Composite target = (RookiesGoods_Composite)RookiesGoods_OverallManage.GoodsManage.GetGoods(targetID);

        if (target == null)
        {
            OnComposeFailed(target, "不存在目标物品");
            return(false);
        }
        Dictionary <int, int> tempCounter = new Dictionary <int, int>(target.CompositeTable);

        int[] keys = new int[tempCounter.Count];
        int   i    = 0;

        foreach (int id in tempCounter.Keys)
        {
            keys[i++] = id;
        }
        if (bagNames.Length == 0)
        {
            for (i = 0; i < tempCounter.Count; i++)
            {
                foreach (RookiesGoods_Bag bag in Bags.Values)
                {
                    tempCounter[keys[i]] -= bag.FindOwnNumber(keys[i]);
                    if (tempCounter[keys[i]] <= 0)
                    {
                        break;
                    }
                }
                if (tempCounter[keys[i]] > 0)
                {
                    OnComposeFailed(target, "材料不足");
                    return(false);
                }
            }
            return(true);
        }
        else
        {
            RookiesGoods_Bag        bag;
            List <RookiesGoods_Bag> searchList = new List <RookiesGoods_Bag>();
            for (i = 0; i < bagNames.Length; i++)
            {
                bag = TryGetBag(bagNames[i]);
                if (bag == null)
                {
                    throw new ArgumentException("参数" + bagNames[i] + "错误,找不到角色对应背包");
                }
                searchList.Add(bag);
            }
            for (i = 0; i < tempCounter.Count; i++)
            {
                foreach (RookiesGoods_Bag temp in Bags.Values)
                {
                    tempCounter[keys[i]] -= temp.FindOwnNumber(keys[i]);
                    if (tempCounter[keys[i]] <= 0)
                    {
                        break;
                    }
                }
                if (tempCounter[keys[i]] > 0)
                {
                    OnComposeFailed(target, "材料不足");
                    return(false);
                }
            }
            return(true);
        }
    }
コード例 #7
0
    private void OnGUI()
    {
        canSave   = true;
        scrollPos = EditorGUILayout.BeginScrollView(scrollPos, GUILayout.Width(position.width), GUILayout.Height(position.height));
        GUILayout.BeginVertical();

        GUILayout.Label(" 物品基础属性", label);

        GUILayout.BeginHorizontal();

        GUILayout.BeginVertical();

        GUILayout.BeginHorizontal();

        idIndex = EditorGUILayout.Popup("物品id", idIndex, idOption);
        if (updateData || data == null || data.Id != int.Parse(idOption[idIndex]))
        {
            data = (RookiesGoods_Composite)RookiesGoods_OverallManage.GoodsManage.GetGoods(int.Parse(idOption[idIndex]), true);
            if (data == null)
            {
                EditorGUILayout.HelpBox("物品不存在", MessageType.Error);
            }
            else
            {
                InitMessage();
                InitComposeMessage();
            }
            updateData = false;
        }

        GUILayout.Space(5);
        GUILayout.EndHorizontal();

        maxNum = EditorGUILayout.IntField("最大容纳量", maxNum);
        if (maxNum < 0)
        {
            EditorGUILayout.HelpBox("容纳量不能为负数", MessageType.Error);
            canSave = false;
        }
        _name = EditorGUILayout.TextField("名字", _name);
        if (_name.Equals(""))
        {
            EditorGUILayout.HelpBox("名字不能为空", MessageType.Error);
            canSave = false;
        }
        type = (Type)EditorGUILayout.EnumPopup("框架对象类型", type);
        if (type == Type.RookiesGoods_SuitBase)
        {
            durability = EditorGUILayout.IntField("耐久度,无限耐久置0", durability);
        }
        saveTypeIndex = EditorGUILayout.Popup("容器存储种类", Array.IndexOf(saveTypeOption, itemType), saveTypeOption);
        itemType      = saveTypeOption[saveTypeIndex];
        if (itemType.Equals("empty"))
        {
            EditorGUILayout.HelpBox("存储种类不能为空", MessageType.Error);
            canSave = false;
        }
        GUILayout.EndVertical();

        GUILayout.Space(60);
        sprite = EditorGUI.ObjectField(new Rect(6, 40, position.width - 6, 100), "", sprite, typeof(Sprite), true) as Sprite;
        GUILayout.Label(new GUIContent("精灵图", "请选择在Resource下的精灵图"), EditorStyles.boldLabel);
        GUILayout.EndHorizontal();
        GUILayout.Space(30);
        if (sprite == null || mRegular.IsMatch(AssetDatabase.GetAssetPath(sprite)))
        {
            spritePath = AssetDatabase.GetAssetPath(sprite);
        }
        else
        {
            EditorGUILayout.HelpBox("图片必须在Assets/Resources/下", MessageType.Error);
            canSave    = false;
            spritePath = "";
        }
        GUILayout.Label("介绍", GUILayout.MaxWidth(80));
        intro = EditorGUILayout.TextArea(intro, GUILayout.MaxHeight(75));
        if (intro.Equals(""))
        {
            EditorGUILayout.HelpBox("介绍当前为空", MessageType.Warning);
        }
        GUILayout.Label("实际作用", GUILayout.MaxWidth(80));
        effect = EditorGUILayout.TextArea(effect, GUILayout.MaxHeight(75));
        if (effect.Equals(""))
        {
            EditorGUILayout.HelpBox("实际作用当前为空", MessageType.Warning);
        }
        GUILayout.Label("合成表", GUILayout.MaxWidth(80));

        for (int i = 0; i < ComposeTable.Count; i++)
        {
            GUILayout.BeginHorizontal();
            GUILayout.Label("合成物id");
            if (RookiesGoods_OverallManage.GoodsManage.ContainsGoodsKey(ComposeTable[i].first))
            {
                int index = EditorGUILayout.Popup(Array.IndexOf(idOption, ComposeTable[i].first.ToString()), idOption);
                EditorGUILayout.TextField(RookiesGoods_OverallManage.GoodsManage.GetGoods(ComposeTable[i].first).Name);
                int num = EditorGUILayout.IntField("数量 :", ComposeTable[i].second);
                ComposeTable[i].SetFirst(int.Parse(idOption[index]));
                ComposeTable[i].SetSecond(num);
            }
            else
            {
                ComposeTable.Remove(ComposeTable[i--]);
                continue;
            }
            if (ComposeTable[i].second < 0)
            {
                EditorGUILayout.HelpBox("数量不能为负数", MessageType.Error);
                canSave = false;
            }
            if (GUILayout.Button("删除"))
            {
                ComposeTable.Remove(ComposeTable[i--]);
            }
            GUILayout.EndHorizontal();
        }
        if (IdList.Count > 1 && GUILayout.Button("添加一个合成物品"))
        {
            ComposeTable.Add(new MyPair <int, int>(1, 0));
        }
        GUILayout.Space(5);
        GUILayout.Label(" 物品自定义属性", label);
        GUILayout.Space(5);
        GUILayout.Label("整形属性", EditorStyles.boldLabel);
        for (int i = 0; i < IntProperty.Count; i++)
        {
            GUILayout.Space(5);
            GUILayout.BeginHorizontal();
            IntProperty[i].SetFirst(EditorGUILayout.TextField("属性名", IntProperty[i].first));
            for (int j = 0; j < IntProperty.Count; j++)
            {
                if (j == i)
                {
                    continue;
                }
                if (IntProperty[j].first.Equals(IntProperty[i].first))
                {
                    EditorGUILayout.HelpBox("属性名不能相同", MessageType.Error);
                    canSave = false;
                    break;
                }
            }
            if (GUILayout.Button("删除整个属性"))
            {
                IntProperty.Remove(IntProperty[i--]);
            }
            GUILayout.EndHorizontal();
            for (int j = 0; i >= 0 && j < IntProperty[i].second.Count; j++)
            {
                EditorGUILayout.BeginHorizontal();
                IntProperty[i].second[j] = EditorGUILayout.IntField("数值 " + j, IntProperty[i].second[j], GUILayout.MaxWidth(position.width - 60));
                if (GUILayout.Button("删除"))
                {
                    IntProperty[i].second.Remove(IntProperty[i].second[j--]);
                }
                EditorGUILayout.EndHorizontal();
            }
            if (GUILayout.Button("添加一个新值"))
            {
                IntProperty[i].second.Add(0);
            }
        }
        if (GUILayout.Button("添加一个新整形属性"))
        {
            IntProperty.Add(new MyPair <string, List <int> >("", new List <int>(0)));
        }
        GUILayout.Space(5);
        GUILayout.Label("字符属性", EditorStyles.boldLabel);
        for (int i = 0; i < StrProperty.Count; i++)
        {
            GUILayout.Space(5);
            GUILayout.BeginHorizontal();
            StrProperty[i].SetFirst(EditorGUILayout.TextField("属性名", StrProperty[i].first));
            for (int j = 0; j < StrProperty.Count; j++)
            {
                if (j == i)
                {
                    continue;
                }
                if (StrProperty[j].first.Equals(StrProperty[i].first))
                {
                    EditorGUILayout.HelpBox("属性名不能相同", MessageType.Error);
                    canSave = false;
                    break;
                }
            }
            if (GUILayout.Button("删除整个属性"))
            {
                StrProperty.Remove(StrProperty[i--]);
            }
            GUILayout.EndHorizontal();
            for (int j = 0; i >= 0 && j < StrProperty[i].second.Count; j++)
            {
                EditorGUILayout.BeginHorizontal();
                StrProperty[i].second[j] = EditorGUILayout.TextField("数值 " + j, StrProperty[i].second[j], GUILayout.MaxWidth(position.width - 100));
                if (GUILayout.Button("删除"))
                {
                    StrProperty[i].second.Remove(StrProperty[i].second[j--]);
                }
                EditorGUILayout.EndHorizontal();
            }
            if (GUILayout.Button("添加一个新值"))
            {
                StrProperty[i].second.Add("");
            }
        }
        if (GUILayout.Button("添加一个新字符属性"))
        {
            StrProperty.Add(new MyPair <string, List <string> >("", new List <string>()));
        }
        GUILayout.Space(5);
        GUILayout.Label("浮点属性", EditorStyles.boldLabel);
        for (int i = 0; i < DbProperty.Count; i++)
        {
            GUILayout.Space(5);
            GUILayout.BeginHorizontal();
            DbProperty[i].SetFirst(EditorGUILayout.TextField("属性名", DbProperty[i].first));
            for (int j = 0; j < DbProperty.Count; j++)
            {
                if (j == i)
                {
                    continue;
                }
                if (DbProperty[j].first.Equals(DbProperty[i].first))
                {
                    EditorGUILayout.HelpBox("属性名不能相同", MessageType.Error);
                    canSave = false;
                    break;
                }
            }
            if (GUILayout.Button("删除整个属性"))
            {
                DbProperty.Remove(DbProperty[i--]);
            }
            GUILayout.EndHorizontal();
            for (int j = 0; i >= 0 && j < DbProperty[i].second.Count; j++)
            {
                EditorGUILayout.BeginHorizontal();
                DbProperty[i].second[j] = EditorGUILayout.DoubleField("数值 " + j, DbProperty[i].second[j], GUILayout.MaxWidth(position.width - 80));
                if (GUILayout.Button("删除"))
                {
                    DbProperty[i].second.Remove(DbProperty[i].second[j--]);
                }
                EditorGUILayout.EndHorizontal();
            }
            if (GUILayout.Button("添加一个新值"))
            {
                DbProperty[i].second.Add(0);
            }
        }
        if (GUILayout.Button("添加一个新浮点属性"))
        {
            DbProperty.Add(new MyPair <string, List <double> >("", new List <double>()));
        }
        GUILayout.Space(30);

        GUILayout.BeginHorizontal();
        if (GUILayout.Button("添加一个新物品"))
        {
            idIndex = int.Parse(IdList[IdList.Count - 1]) + 1;
            IdList.Add(idIndex.ToString());
            idOption = IdList.ToArray();
            data     = new RookiesGoods_SuitBase(idIndex, "", "empty", "", "", 1);
            idIndex  = idOption.Length - 1;
            RookiesGoods_OverallManage.GoodsManage.Add2GoodMenu(data);
            data.SetType("RookiesGoods_Composite");
            updateData = true;
        }
        GUILayout.Space(5);
        if (GUILayout.Button("重新导入所有物品信息"))
        {
            RookiesGoods_OverallManage.GoodsManage.InitData();
            updateData = true;
        }
        GUILayout.EndHorizontal();
        GUILayout.BeginHorizontal();
        if (IdList.Count > 1 && GUILayout.Button("删除该物品"))
        {
            RookiesGoods_OverallManage.GoodsManage.RemoveGoods(data.Id);
            RookiesGoods_OverallManage.GoodsManage.InitData();
            IdList     = RookiesGoods_OverallManage.GoodsManage.GetAllId();
            idOption   = IdList.ToArray();
            idIndex    = (idIndex == idOption.Length)? idIndex - 1: idIndex;
            updateData = true;
        }
        if (!canSave)
        {
            EditorGUILayout.HelpBox("信息不正确无法修改", MessageType.Error);
        }
        else
        {
            if (GUILayout.Button("保存该物品信息"))
            {
                Save();
                RookiesGoods_OverallManage.GoodsManage.InitData();
                updateData = true;
            }
        }
        GUILayout.EndHorizontal();
        GUILayout.EndVertical();
        GUILayout.Label("By ConfuseL");

        EditorGUILayout.EndScrollView();
    }
コード例 #8
0
    /// <summary>
    /// 初始化数据,读取xml和json,解析所有数据。
    /// </summary>
    public void InitData()
    {
        IsSavingAfterQuit  = false;
        PrototypeGoodsMenu = new Dictionary <int, RookiesGoods_GoodsBase>();
        DurabilityID       = new List <int>();
        SpriteDic          = new Dictionary <int, Sprite>();
        PlayersData        = new Dictionary <int, RookiesGoods_PlayerData>();
        CompositeID        = new List <int>();
        XmlDocument xml = new XmlDocument();

        xml.Load(Application.dataPath + "/RookiesGoods/Config/RookiesGoods_Config.xml");
        XmlNodeList xmlNodeList = xml.SelectSingleNode("RookiesGoods_Config/JsonPath").ChildNodes;
        string      path        = xmlNodeList[0].InnerText;

        if (File.Exists(Application.dataPath + "/Resources/" + path + ".json"))
        {
            string        classType, itemType, name, intro, effect, sprite;
            int           id, maxNum, durability, length;
            int[]         arrayValue;
            List <int>    intListValue = new List <int>();
            List <double> dbListValue  = new List <double>();
            List <string> strListValue = new List <string>();
            TextAsset     textAsset    = Resources.Load(path) as TextAsset;
            JsonData      jsonData     = JsonMapper.ToObject(textAsset.text);
            foreach (JsonData data in jsonData)
            {
                JsonData stringValue = data["classType"];
                JsonData intValue;
                JsonData arrayValues;
                JsonData propertyValue;
                classType   = stringValue.ToString();
                intValue    = data["id"];
                id          = int.Parse(intValue.ToString());
                intValue    = data["maxNum"];
                maxNum      = int.Parse(intValue.ToString());
                stringValue = data["itemType"];
                itemType    = stringValue.ToString();
                stringValue = data["name"];
                name        = stringValue.ToString();
                stringValue = data["intro"];
                intro       = stringValue.ToString();
                stringValue = data["effect"];
                effect      = stringValue.ToString();
                stringValue = data["spritePath"];
                sprite      = stringValue.ToString();
                intValue    = data["durability"];
                durability  = int.Parse(intValue.ToString());
                arrayValues = data["compositeArray"];
                if (sprite != "")
                {
                    SpriteDic.Add(id, Resources.Load <Sprite>(sprite));
                }
                switch (classType)
                {
                case "RookiesGoods_SuitBase":
                    RookiesGoods_SuitBase suit;
                    suit = new RookiesGoods_SuitBase(id, name, itemType, intro, effect, maxNum);
                    suit.SetType(classType);
                    length     = arrayValues.Count;
                    arrayValue = new int[length];
                    for (int i = 0; i < length; i++)
                    {
                        arrayValue[i] = int.Parse(arrayValues[i].ToString());
                    }
                    if (length > 0)
                    {
                        CompositeID.Add(id);
                        suit.UpdateComposite(arrayValue);
                    }
                    suit.Durability = durability;
                    propertyValue   = data["specialProperty"];
                    foreach (string key in propertyValue.Keys)
                    {
                        JsonData temp = propertyValue[key];
                        switch (temp.GetJsonType())
                        {
                        case JsonType.None:
                            break;

                        case JsonType.Object:
                            suit.AddProperty(key, temp);
                            break;

                        case JsonType.Array:
                            length = temp.Count;
                            intListValue.Clear();
                            strListValue.Clear();
                            dbListValue.Clear();
                            if (length > 0)
                            {
                                switch (temp[0].GetJsonType())
                                {
                                case JsonType.Int:
                                    for (int i = 0; i < length; i++)
                                    {
                                        intListValue.Add(int.Parse(temp[i].ToString()));
                                    }
                                    suit.AddProperty(key, intListValue);
                                    break;

                                case JsonType.String:
                                    for (int i = 0; i < length; i++)
                                    {
                                        strListValue.Add(temp[i].ToString());
                                    }
                                    suit.AddProperty(key, strListValue);
                                    break;

                                case JsonType.Double:
                                    for (int i = 0; i < length; i++)
                                    {
                                        dbListValue.Add(double.Parse(temp[i].ToString()));
                                    }
                                    suit.AddProperty(key, dbListValue);
                                    break;

                                default:
                                    break;
                                }
                            }
                            break;

                        case JsonType.String:
                            suit.AddProperty(key, temp.ToString());
                            break;

                        case JsonType.Int:
                            suit.AddProperty(key, int.Parse(temp.ToString()));
                            break;

                        case JsonType.Long:
                            suit.AddProperty(key, long.Parse(temp.ToString()));
                            break;

                        case JsonType.Double:
                            suit.AddProperty(key, double.Parse(temp.ToString()));
                            break;

                        case JsonType.Boolean:
                            suit.AddProperty(key, bool.Parse(temp.ToString()));
                            break;

                        default:
                            break;
                        }
                    }
                    PrototypeGoodsMenu.Add(id, suit);
                    break;

                case "RookiesGoods_Composite":
                    RookiesGoods_Composite goods;
                    goods = new RookiesGoods_Composite(id, name, itemType, intro, effect, maxNum);
                    goods.SetType(classType);
                    length     = arrayValues.Count;
                    arrayValue = new int[length];
                    for (int i = 0; i < length; i++)
                    {
                        arrayValue[i] = int.Parse(arrayValues[i].ToString());
                    }
                    if (length > 0)
                    {
                        CompositeID.Add(id);
                        goods.UpdateComposite(arrayValue);
                    }
                    propertyValue = data["specialProperty"];
                    foreach (string key in propertyValue.Keys)
                    {
                        JsonData temp = propertyValue[key];
                        switch (temp.GetJsonType())
                        {
                        case JsonType.None:
                            break;

                        case JsonType.Object:
                            goods.AddProperty(key, temp);
                            break;

                        case JsonType.Array:
                            length = temp.Count;
                            intListValue.Clear();
                            strListValue.Clear();
                            dbListValue.Clear();
                            if (length > 0)
                            {
                                switch (temp[0].GetJsonType())
                                {
                                case JsonType.Int:
                                    for (int i = 0; i < length; i++)
                                    {
                                        intListValue.Add(int.Parse(temp[i].ToString()));
                                    }
                                    goods.AddProperty(key, intListValue);
                                    break;

                                case JsonType.String:
                                    for (int i = 0; i < length; i++)
                                    {
                                        strListValue.Add(temp[i].ToString());
                                    }
                                    goods.AddProperty(key, strListValue);
                                    break;

                                case JsonType.Double:
                                    for (int i = 0; i < length; i++)
                                    {
                                        dbListValue.Add(double.Parse(temp[i].ToString()));
                                    }
                                    goods.AddProperty(key, dbListValue);
                                    break;

                                default:
                                    break;
                                }
                            }
                            break;

                        case JsonType.String:
                            goods.AddProperty(key, temp.ToString());
                            break;

                        case JsonType.Int:
                            goods.AddProperty(key, int.Parse(temp.ToString()));
                            break;

                        case JsonType.Long:
                            goods.AddProperty(key, long.Parse(temp.ToString()));
                            break;

                        case JsonType.Double:
                            goods.AddProperty(key, double.Parse(temp.ToString()));
                            break;

                        case JsonType.Boolean:
                            goods.AddProperty(key, bool.Parse(temp.ToString()));
                            break;

                        default:
                            break;
                        }
                    }
                    PrototypeGoodsMenu.Add(id, goods);
                    break;

                case "RookiesGoods_Consumable":
                    RookiesGoods_Consumable consumable;
                    consumable = new RookiesGoods_Consumable(id, name, itemType, intro, effect, maxNum);
                    consumable.SetType(classType);
                    length     = arrayValues.Count;
                    arrayValue = new int[length];
                    for (int i = 0; i < length; i++)
                    {
                        arrayValue[i] = int.Parse(arrayValues[i].ToString());
                    }
                    if (length > 0)
                    {
                        CompositeID.Add(id);
                        consumable.UpdateComposite(arrayValue);
                    }
                    propertyValue = data["specialProperty"];
                    foreach (string key in propertyValue.Keys)
                    {
                        JsonData temp = propertyValue[key];
                        switch (temp.GetJsonType())
                        {
                        case JsonType.None:
                            break;

                        case JsonType.Object:
                            consumable.AddProperty(key, temp);
                            break;

                        case JsonType.Array:
                            length = temp.Count;
                            intListValue.Clear();
                            strListValue.Clear();
                            dbListValue.Clear();
                            if (length > 0)
                            {
                                switch (temp[0].GetJsonType())
                                {
                                case JsonType.Int:
                                    for (int i = 0; i < length; i++)
                                    {
                                        intListValue.Add(int.Parse(temp[i].ToString()));
                                    }
                                    consumable.AddProperty(key, intListValue);
                                    break;

                                case JsonType.String:
                                    //if(IsInt(temp[0].ToString()))
                                    //{
                                    //    for (int i = 0; i < length; i++)
                                    //        intListValue.Add(int.Parse(temp[i].ToString()));
                                    //    consumable.AddProperty(key, intListValue);
                                    //}
                                    //else
                                    //{
                                    for (int i = 0; i < length; i++)
                                    {
                                        strListValue.Add(temp[i].ToString());
                                    }
                                    consumable.AddProperty(key, strListValue);
                                    // }

                                    break;

                                case JsonType.Double:
                                    for (int i = 0; i < length; i++)
                                    {
                                        dbListValue.Add(double.Parse(temp[i].ToString()));
                                    }
                                    consumable.AddProperty(key, dbListValue);
                                    break;

                                default:
                                    break;
                                }
                            }
                            break;

                        case JsonType.String:
                            consumable.AddProperty(key, temp.ToString());
                            break;

                        case JsonType.Int:
                            consumable.AddProperty(key, int.Parse(temp.ToString()));
                            break;

                        case JsonType.Long:
                            consumable.AddProperty(key, long.Parse(temp.ToString()));
                            break;

                        case JsonType.Double:
                            consumable.AddProperty(key, double.Parse(temp.ToString()));
                            break;

                        case JsonType.Boolean:
                            consumable.AddProperty(key, bool.Parse(temp.ToString()));
                            break;

                        default:
                            break;
                        }
                    }
                    PrototypeGoodsMenu.Add(id, consumable);
                    break;

                default:
                    throw new ArgumentException(string.Format("id {0}的框架类型错误", id));
                }
            }
        }
        else
        {
            Debug.LogError("物品配置文件为空,插件将在你第一次存储物品信息时,自动生成配置文件。或者不使用插件直接编写。");
            // throw new ArgumentException("丢失物品配置文件");
        }
    }