@@ -1688,32 +1688,24 @@ void TagDuel::RefreshSingle(int player, int location, int sequence, int flag) {
16881688 BufferIO::Write<uint8_t >(qbuf, location);
16891689 BufferIO::Write<uint8_t >(qbuf, sequence);
16901690 int len = query_card (pduel, player, location, sequence, flag, qbuf, 0 );
1691+ int pid = (player == 0 ) ? 0 : 2 ;
1692+ NetServer::SendBufferToPlayer (players[pid], STOC_GAME_MSG , query_buffer, len + 4 );
1693+ NetServer::ReSendToPlayer (players[pid + 1 ]);
1694+ if (len <= LEN_HEADER )
1695+ return ;
16911696 auto position = GetPosition (qbuf, 12 );
1692- if (location & LOCATION_ONFIELD ) {
1693- int pid = (player == 0 ) ? 0 : 2 ;
1694- NetServer::SendBufferToPlayer (players[pid], STOC_GAME_MSG , query_buffer, len + 4 );
1695- NetServer::ReSendToPlayer (players[pid + 1 ]);
1696- if (position & POS_FACEUP ) {
1697- pid = 2 - pid;
1698- NetServer::SendBufferToPlayer (players[pid], STOC_GAME_MSG , query_buffer, len + 4 );
1699- NetServer::ReSendToPlayer (players[pid + 1 ]);
1700- for (auto pit = observers.begin (); pit != observers.end (); ++pit)
1701- NetServer::ReSendToPlayer (*pit);
1702- }
1703- } else {
1704- int pid = (player == 0 ) ? 0 : 2 ;
1705- NetServer::SendBufferToPlayer (players[pid], STOC_GAME_MSG , query_buffer, len + 4 );
1706- NetServer::ReSendToPlayer (players[pid + 1 ]);
1707- if (location == LOCATION_REMOVED && (position & POS_FACEDOWN ))
1708- return ;
1709- if (location & 0x90 ) {
1710- for (int i = 0 ; i < 4 ; ++i)
1711- if (players[i] != cur_player[player])
1712- NetServer::ReSendToPlayer (players[i]);
1713- for (auto pit = observers.begin (); pit != observers.end (); ++pit)
1714- NetServer::ReSendToPlayer (*pit);
1715- }
1697+ if (position & POS_FACEDOWN ) {
1698+ BufferIO::Write<int32_t >(qbuf, 16 );
1699+ BufferIO::Write<uint32_t >(qbuf, QUERY_CODE | QUERY_POSITION );
1700+ BufferIO::Write<uint32_t >(qbuf, 0 );
1701+ // keep the 4 bytes position data
1702+ len = 16 ;
17161703 }
1704+ pid = 2 - pid;
1705+ NetServer::SendBufferToPlayer (players[pid], STOC_GAME_MSG , query_buffer, len + 4 );
1706+ NetServer::ReSendToPlayer (players[pid + 1 ]);
1707+ for (auto pit = observers.begin (); pit != observers.end (); ++pit)
1708+ NetServer::ReSendToPlayer (*pit);
17171709}
17181710uint32_t TagDuel::MessageHandler (intptr_t fduel, uint32_t type) {
17191711 char msgbuf[1024 ];
0 commit comments