public override bool Equals(object obj)
        {
            if (obj == null)
            {
                return(false);
            }
            GrowEquipItemNeedItemData growEquipItemNeedItemData = obj as GrowEquipItemNeedItemData;

            if (growEquipItemNeedItemData == null)
            {
                return(false);
            }
            bool flag = id == growEquipItemNeedItemData.id && lv == growEquipItemNeedItemData.lv && needMoney == growEquipItemNeedItemData.needMoney;

            if (needMaterial.Length == growEquipItemNeedItemData.needMaterial.Length)
            {
                for (int i = 0; i < needMaterial.Length; i++)
                {
                    flag = (flag && needMaterial[i].Equals(growEquipItemNeedItemData.needMaterial[i]));
                }
            }
            else
            {
                flag = false;
            }
            return(flag);
        }
    public static DoubleUIntKeyTable <GrowEquipItemNeedItemData> CreateNeedTableBinary(byte[] bytes)
    {
        DoubleUIntKeyTable <GrowEquipItemNeedItemData> doubleUIntKeyTable = new DoubleUIntKeyTable <GrowEquipItemNeedItemData>();
        BinaryTableReader binaryTableReader = new BinaryTableReader(bytes);

        while (binaryTableReader.MoveNext())
        {
            uint key  = binaryTableReader.ReadUInt32(0u);
            uint key2 = binaryTableReader.ReadUInt32(0u);
            GrowEquipItemNeedItemData growEquipItemNeedItemData = new GrowEquipItemNeedItemData();
            growEquipItemNeedItemData.LoadFromBinary(binaryTableReader, ref key, ref key2);
            doubleUIntKeyTable.Add(key, key2, growEquipItemNeedItemData);
        }
        return(doubleUIntKeyTable);
    }
        public static bool cb(CSVReader csv_reader, GrowEquipItemNeedItemData data, ref uint key1, ref uint key2)
        {
            data.id = key1;
            data.lv = key2;
            List <NeedMaterial> list = new List <NeedMaterial>();

            for (int i = 0; i < NEED_MATERIAL_LENGTH_MAX; i++)
            {
                uint value  = 0u;
                int  value2 = 0;
                CSVReader.PopResult popResult  = csv_reader.Pop(ref value);
                CSVReader.PopResult popResult2 = csv_reader.Pop(ref value2);
                if (value != 0 && value2 != 0)
                {
                    list.Add(new NeedMaterial(value, value2));
                }
            }
            data.needMaterial = list.ToArray();
            CSVReader.PopResult popResult3 = csv_reader.Pop(ref data.needMoney);
            return(true);
        }
    public GrowEquipItemNeedItemData GetGrowEquipItemNeedItemData(uint id, uint lv)
    {
        if (needTableData == null)
        {
            return(null);
        }
        UIntKeyTable <GrowEquipItemNeedItemData> uIntKeyTable = needTableData.Get(id);

        if (uIntKeyTable == null)
        {
            Log.Error("GetGrowEquipItemNeedItemData is NULL :: need id = " + id + " Lv = " + lv);
            return(null);
        }
        GrowEquipItemNeedItemData growEquipItemNeedItemData = uIntKeyTable.Get(lv);

        if (growEquipItemNeedItemData != null)
        {
            return(growEquipItemNeedItemData);
        }
        GrowEquipItemNeedItemData under = null;
        GrowEquipItemNeedItemData over  = null;

        uIntKeyTable.ForEach(delegate(GrowEquipItemNeedItemData table)
        {
            if (table.lv > lv && (over == null || table.lv < over.lv))
            {
                over = table;
            }
            if (table.lv <= lv && (under == null || table.lv > under.lv))
            {
                under = table;
            }
        });
        if (under != null && over == null)
        {
            return(under);
        }
        if (under == null)
        {
            return(null);
        }
        GrowEquipItemNeedItemData growEquipItemNeedItemData2 = new GrowEquipItemNeedItemData();
        float lerp_value = (float)(double)(lv - under.lv) / (float)(double)(over.lv - under.lv);

        growEquipItemNeedItemData2.id = id;
        growEquipItemNeedItemData2.lv = lv;
        List <NeedMaterial> material_list = new List <NeedMaterial>();

        Array.ForEach(under.needMaterial, delegate(NeedMaterial material_data)
        {
            Array.ForEach(over.needMaterial, delegate(NeedMaterial over_need_material)
            {
                if (over_need_material.itemID == material_data.itemID)
                {
                    material_list.Add(new NeedMaterial(over_need_material.itemID, Mathf.FloorToInt(Mathf.Lerp((float)material_data.num, (float)over_need_material.num, lerp_value))));
                }
            });
        });
        growEquipItemNeedItemData2.needMaterial = material_list.ToArray();
        growEquipItemNeedItemData2.needMoney    = Mathf.FloorToInt(Mathf.Lerp((float)under.needMoney, (float)over.needMoney, lerp_value));
        return(growEquipItemNeedItemData2);
    }