private void OnUpdateData(GameServerPacket packet)
        {
            int          player = GetLocalPlayer(packet.ReadByte());
            CardLocation loc    = (CardLocation)packet.ReadByte();

            IList <ClientCard> cards = null;

            switch (loc)
            {
            case CardLocation.Hand:
                cards = _duel.Fields[player].Hand;
                break;

            case CardLocation.MonsterZone:
                cards = _duel.Fields[player].MonsterZone;
                break;

            case CardLocation.SpellZone:
                cards = _duel.Fields[player].SpellZone;
                break;

            case CardLocation.Grave:
                cards = _duel.Fields[player].Graveyard;
                break;

            case CardLocation.Removed:
                cards = _duel.Fields[player].Banished;
                break;

            case CardLocation.Deck:
                cards = _duel.Fields[player].Deck;
                break;

            case CardLocation.Extra:
                cards = _duel.Fields[player].ExtraDeck;
                break;
            }
            if (cards != null)
            {
                foreach (ClientCard card in cards)
                {
                    try{
                        int len = packet.ReadInt32();
                        if (len < 8)
                        {
                            continue;
                        }
                        long pos = packet.GetPosition();
                        card.Update(packet, _duel);
                        packet.SetPosition(pos + len - 4);
                    }catch (Exception) {
                    }
                }
            }
        }