Commit 9ff9983b authored by mercury233's avatar mercury233 Committed by GitHub

Merge pull request #1968 from edo9300/rock_paper_scissors

Added MSG_ROCK_PAPER_SCISSORS and MSG_HAND_RES
parents 99c60dfa d7cfc24c
......@@ -2914,6 +2914,30 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
mainGame->WaitFrameSignal(40);
return true;
}
case MSG_ROCK_PAPER_SCISSORS: {
/*int player = */mainGame->LocalPlayer(BufferIO::ReadInt8(pbuf));
if(mainGame->dInfo.isReplay && mainGame->dInfo.isReplaySkiping)
return true;
mainGame->gMutex.Lock();
mainGame->PopupElement(mainGame->wHand);
mainGame->gMutex.Unlock();
return false;
}
case MSG_HAND_RES: {
int res = BufferIO::ReadInt8(pbuf);
if(mainGame->dInfo.isReplay && mainGame->dInfo.isReplaySkiping)
return true;
mainGame->stHintMsg->setVisible(false);
if(mainGame->dInfo.isFirst)
mainGame->showcardcode = ((res & 0x3) - 1) + ((((res >> 2) & 0x3) - 1) << 16);
else
mainGame->showcardcode = (((res >> 2) & 0x3) - 1) + (((res & 0x3) - 1) << 16);
mainGame->showcarddif = 50;
mainGame->showcardp = 0;
mainGame->showcard = 100;
mainGame->WaitFrameSignal(60);
return false;
}
case MSG_ANNOUNCE_RACE: {
/*int player = */mainGame->LocalPlayer(BufferIO::ReadInt8(pbuf));
mainGame->dField.announce_count = BufferIO::ReadInt8(pbuf);
......
......@@ -29,11 +29,16 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
case BUTTON_HAND2:
case BUTTON_HAND3: {
mainGame->wHand->setVisible(false);
mainGame->stHintMsg->setText(L"");
mainGame->stHintMsg->setVisible(true);
CTOS_HandResult cshr;
cshr.res = id - BUTTON_HAND1 + 1;
DuelClient::SendPacketToServer(CTOS_HAND_RESULT, cshr);
if(mainGame->dInfo.curMsg == MSG_ROCK_PAPER_SCISSORS){
DuelClient::SetResponseI(id - BUTTON_HAND1 + 1);
DuelClient::SendResponse();
} else {
mainGame->stHintMsg->setText(L"");
mainGame->stHintMsg->setVisible(true);
CTOS_HandResult cshr;
cshr.res = id - BUTTON_HAND1 + 1;
DuelClient::SendPacketToServer(CTOS_HAND_RESULT, cshr);
}
break;
}
case BUTTON_FIRST:
......
......@@ -745,6 +745,15 @@ bool ReplayMode::ReplayAnalyze(char* msg, unsigned int len) {
DuelClient::ClientAnalyze(offset, pbuf - offset);
break;
}
case MSG_ROCK_PAPER_SCISSORS: {
player = BufferIO::ReadInt8(pbuf);
return ReadReplayResponse();
}
case MSG_HAND_RES: {
pbuf += 1;
DuelClient::ClientAnalyze(offset, pbuf - offset);
break;
}
case MSG_ANNOUNCE_RACE: {
player = BufferIO::ReadInt8(pbuf);
pbuf += 5;
......
......@@ -1250,6 +1250,20 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(*oit);
break;
}
case MSG_ROCK_PAPER_SCISSORS: {
player = BufferIO::ReadInt8(pbuf);
WaitforResponse(player);
NetServer::SendBufferToPlayer(players[player], STOC_GAME_MSG, offset, pbuf - offset);
return 1;
}
case MSG_HAND_RES: {
pbuf += 1;
NetServer::SendBufferToPlayer(players[0], STOC_GAME_MSG, offset, pbuf - offset);
NetServer::ReSendToPlayer(players[1]);
for (auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break;
}
case MSG_ANNOUNCE_RACE: {
player = BufferIO::ReadInt8(pbuf);
pbuf += 5;
......
......@@ -574,6 +574,19 @@ bool SingleMode::SinglePlayAnalyze(char* msg, unsigned int len) {
DuelClient::ClientAnalyze(offset, pbuf - offset);
break;
}
case MSG_ROCK_PAPER_SCISSORS: {
player = BufferIO::ReadInt8(pbuf);
if(!DuelClient::ClientAnalyze(offset, pbuf - offset)) {
mainGame->singleSignal.Reset();
mainGame->singleSignal.Wait();
}
break;
}
case MSG_HAND_RES: {
pbuf += 1;
DuelClient::ClientAnalyze(offset, pbuf - offset);
break;
}
case MSG_ANNOUNCE_RACE: {
player = BufferIO::ReadInt8(pbuf);
pbuf += 5;
......
......@@ -1289,6 +1289,22 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(*oit);
break;
}
case MSG_ROCK_PAPER_SCISSORS: {
player = BufferIO::ReadInt8(pbuf);
WaitforResponse(player);
NetServer::SendBufferToPlayer(players[player], STOC_GAME_MSG, offset, pbuf - offset);
return 1;
}
case MSG_HAND_RES: {
pbuf += 1;
NetServer::SendBufferToPlayer(players[0], STOC_GAME_MSG, offset, pbuf - offset);
NetServer::ReSendToPlayer(players[1]);
NetServer::ReSendToPlayer(players[2]);
NetServer::ReSendToPlayer(players[3]);
for (auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break;
}
case MSG_ANNOUNCE_RACE: {
player = BufferIO::ReadInt8(pbuf);
pbuf += 5;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment