public BaseItem createItemByData(Property.Item data)
	{
		int templateid = (int)data.templateid;
		int type = ConfigManager.getInstance().getTypeByTemplateID(templateid);
		BaseItem info = null;
		switch(type)
		{
		case (int)GlobalDef.ItemType.ITEM_NORMAL:
			info = new BaseItem(); 
			break;
		case (int)GlobalDef.ItemType.ITEM_EQUIPMENT:
			info = new EquipmentItem();
			break;
		case (int)GlobalDef.ItemType.ITEM_MEDICINE:
			info = new PotionItem();
			break;
		case (int)GlobalDef.ItemType.ITEM_DIAMOND:
			info = new DiamondItem();
			break;
        case (int)GlobalDef.ItemType.ITEM_MATERIAL:
            info = new MaterialItem();
            break;
		}
		if(null == info)
		{
			info = new BaseItem(); 
		}
		info.parseData (data);
		return info;
	}
    public Dictionary<long, DiamondItem> gemList = new Dictionary<long, DiamondItem>();//

    public void addDiamonItem(long guid, DiamondItem item)
    {
        if (gemList.ContainsKey(guid))
        {
            Debug.LogError("already has this key! guid: " + guid);
            return;
        }
        gemList.Add(guid, item);
    }
    //public void onGetEquipmentStar(SocketModel module)
    //{
    //    //升星
    //    ItemMessage.MsgUpdateEquipStarRep msg = MsgSerializer.Deserialize<ItemMessage.MsgUpdateEquipStarRep>(module);
    //    int id = (int)msg.heroId;

    //    if (id == 0)
    //    {
    //        EquipmentItem item = (EquipmentItem)MonoInstancePool.getInstance<BagManager>().getEquipmentBag().getItem((long)msg.itemGuid);
    //        if (item == null)
    //        {
    //            Debug.LogError("has not this item!");
    //            return;
    //        }
    //        item.changeStar = msg.star;
    //        MonoInstancePool.getInstance<BagManager>().getEquipmentBag().IsDirty = true;

    //        EquipmentUIMananger manager = (EquipmentUIMananger)FindObjectOfType(typeof(EquipmentUIMananger));
    //        if (manager == null)
    //            return;
    //        manager.getStrengthEquipment().setEquipHeroId(null);
    //        manager.getStrengthEquipment().EquipmentUpdate(item);
    //    }
    //    else
    //    {
    //        HeroData data = MonoInstancePool.getInstance<HeroManager>().getHero((long)msg.itemGuid);
    //        if (data == null)
    //        {
    //            Debug.LogError("has not this heroData!");
    //            return;
    //        }
    //        EquipmentItem item = data.equipmentList.getItemByIdx((int)msg.itemGuid);
    //        item.changeStar = msg.star;
    //        data.equipmentList.isDirty = true;

    //        EquipmentUIMananger manager = (EquipmentUIMananger)FindObjectOfType(typeof(EquipmentUIMananger));
    //        if (manager == null)
    //            return;
    //        manager.getStrengthEquipment().setEquipHeroId(data);
    //        manager.getStrengthEquipment().EquipmentUpdate(item);
    //    }
    //}

    public void onGetInlayGem(SocketModel module)
    {
        //镶嵌
        ItemMessage.MsgInlayGemRep msg = MsgSerializer.Deserialize<ItemMessage.MsgInlayGemRep>(module);
        int id = (int)msg.heroId;
        if (id == 0)
        {
            EquipmentItem item = (EquipmentItem)MonoInstancePool.getInstance<BagManager>().getEquipmentBag().getItem((long)msg.guid);
            if (item == null)
            {
                Debug.LogError("has not this item!");
                return;
            }
            int count = msg.gemAry.Count;
            for (int i = 0; i < count; i++)
            {
                Property.Item gem = msg.gemAry[i];
                item.gemList.Clear();
                DiamondItem diamon = new DiamondItem();
                diamon.parseData(gem);
                item.addDiamonItem(diamon.guid, diamon);
            }

            MonoInstancePool.getInstance<BagManager>().getEquipmentBag().IsDirty = true;
        }
        else
        {
            HeroData data = MonoInstancePool.getInstance<HeroManager>().getHero((long)msg.heroId);
            if (data == null)
            {
                Debug.LogError("has not this heroData!");
                return;
            }
            EquipmentItem item = data.equipmentList.getItemByGuid((long)msg.guid);
            int count = msg.gemAry.Count;
            for (int i = 0; i < count; i++)
            {
                Property.Item gem = msg.gemAry[i];
                item.gemList.Clear();
                DiamondItem diamon = new DiamondItem();
                diamon.parseData(gem);
                item.addDiamonItem(diamon.guid, diamon);
            }
            data.equipmentList.isDirty = true;
        }
    }
	/// <summary>
	/// 解析从服务器接收到的数据
	/// </summary>
	public void parseServerHero(Property.Hero data)
	{
		//template Data
		parseData(data.heroid);

		guid = (long)data.guid;
		templateID = data.heroid;
		activate = data.activate;
		level = data.level;
		if(data.starLevel > starLevel ){starLevel = data.starLevel;}
		exp = data.exp;
		debris = data.debris;
		realmList.curRealmLevel = data.realm;
		battle = data.battle;
		fighting = data.fighting;

		equipmentList.clear ();
		for(int j = 0; j < data.items.Count; j++)
		{
			EquipmentItem item = new EquipmentItem();
			Property.Equip item_data = data.items[j];
			item.parseData(data.items[j]);	
			equipmentList.addItem(item.guid, item);
			
			item.gemList.Clear();
			for(int k = 0; k < item_data.gemAry.Count; k++)
			{
				DiamondItem gemItem = new DiamondItem();
				Property.Item gemData = item_data.gemAry[k];
				gemItem.guid = (long)gemData.guid;
				gemItem.templateID = (int)gemData.templateid;
				gemItem.haveNum = (int)gemData.number;
				//					gemItem.type = (int)gemData.type;
				item.gemList.Add(gemItem.guid, gemItem);
			}			
		}
		Property.Horse horse = data.horse;
		//skill
		skillList.Clear();
		skillList.clearUseSkill();
		for(int s = 0; s < data.skills.Count; s++)
		{
			Property.Skill skillData = data.skills[s];
			int skillId = skillData.skillid;
			
			SkillItem skill = new SkillItem(this, skillId);
			skill.level = skillData.level;
			skill.active = skillData.activate;
			skill.slot = skillData.slot;
			skillList.Add(skill);
			if(skill.slot != -1 && skill.slot < skillList.useSkills.Length)
			{
				skillList.useSkills[skill.slot] = s;
			}
		}
	}