public void Read(TCPBinaryReader br)
 {
     if (br == null)
     {
         return;
     }
     CharID                 = br.ReadUInt64();
     Name                   = br.ReadString();
     Grade                  = br.ReadByte();
     Level                  = br.ReadByte();
     CurEXP                 = br.ReadUInt32();
     HP                     = br.ReadInt32();
     MaxHP                  = br.ReadInt32();
     Atk                    = br.ReadUInt16();
     Def                    = br.ReadUInt16();
     Dodge                  = br.ReadUInt16();
     TurnSpeed              = br.ReadUInt16();
     ResistFire             = br.ReadUInt16();
     ResistIce              = br.ReadUInt16();
     ResistElect            = br.ReadUInt16();
     CreateTime             = br.ReadUInt64();
     SkillList              = br.ReadList <SkillInfo>();
     CharSlotList           = br.ReadList <CharEquipSlot>();
     MaxEnchantCount        = br.ReadUInt16();
     CharEnchantInfoList    = br.ReadList <CharEnchantInfo>();
     CharMaxEnchantInfo     = br.ReadObj <CharMaxEnchant>();
     IsFirstChar            = br.ReadByte();
     IsUseCores             = br.ReadByte();
     IsLocked               = br.ReadByte();
     FavorPoint             = br.ReadUInt32();
     LastGiveFavorPointTime = br.ReadUInt64();
     SkinName               = br.ReadString();
     HaveSkinList           = br.ReadList <SkinInfo>();
     IsDestroyed            = br.ReadByte();
     LinkBonus              = br.ReadString();
 }