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){ } } } }