Skip to content

Commit 9f04ec5

Browse files
authored
fix RefreshSingle (#3111)
1 parent dfd5f48 commit 9f04ec5

2 files changed

Lines changed: 22 additions & 29 deletions

File tree

gframe/single_duel.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1566,12 +1566,13 @@ void SingleDuel::RefreshSingle(int player, int location, int sequence, int flag)
15661566
NetServer::SendBufferToPlayer(players[player], STOC_GAME_MSG, query_buffer, len + 4);
15671567
if (len <= LEN_HEADER)
15681568
return;
1569-
const int clen = BufferIO::Read<int32_t>(qbuf);
1570-
auto position = GetPosition(qbuf, 8);
1569+
auto position = GetPosition(qbuf, 12);
15711570
if (position & POS_FACEDOWN) {
1572-
BufferIO::Write<int32_t>(qbuf, QUERY_CODE);
1573-
BufferIO::Write<int32_t>(qbuf, 0);
1574-
std::memset(qbuf, 0, clen - 12);
1571+
BufferIO::Write<int32_t>(qbuf, 16);
1572+
BufferIO::Write<uint32_t>(qbuf, QUERY_CODE | QUERY_POSITION);
1573+
BufferIO::Write<uint32_t>(qbuf, 0);
1574+
// keep the 4 bytes position data
1575+
len = 16;
15751576
}
15761577
NetServer::SendBufferToPlayer(players[1 - player], STOC_GAME_MSG, query_buffer, len + 4);
15771578
for (auto pit = observers.begin(); pit != observers.end(); ++pit)

gframe/tag_duel.cpp

Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}
17181710
uint32_t TagDuel::MessageHandler(intptr_t fduel, uint32_t type) {
17191711
char msgbuf[1024];

0 commit comments

Comments
 (0)