Commit edbab083 authored by nanahira's avatar nanahira

Merge branch 'develop' into server-develop

parents b4105df6 c67eae02
......@@ -120,6 +120,8 @@ void ClientField::Clear() {
conti_act = false;
deck_reversed = false;
cant_check_grave = false;
tag_surrender = false;
tag_teammate_surrender = false;
RefreshCardCountDisplay();
}
void ClientField::Initial(int player, int deckc, int extrac) {
......
......@@ -87,6 +87,8 @@ public:
bool deck_reversed{ false };
bool conti_selecting{ false };
bool cant_check_grave{ false };
bool tag_surrender{ false };
bool tag_teammate_surrender{ false };
mt19937 rnd;
ClientField();
......
......@@ -559,6 +559,8 @@ void Game::DrawMisc() {
//finish button
if(btnCancelOrFinish->isVisible() && dField.select_ready)
DrawSelectionLine(btnCancelOrFinish, 2, 0xffffff00);
if(btnLeaveGame->isVisible() && dField.tag_teammate_surrender)
DrawSelectionLine(btnLeaveGame, 2, 0xffffff00);
//lp bar
if((dInfo.turn % 2 && dInfo.isFirst && !dInfo.is_swapped) || (!(dInfo.turn % 2) && !dInfo.isFirst && !dInfo.is_swapped) || (!(dInfo.turn % 2) && dInfo.isFirst && dInfo.is_swapped) || (dInfo.turn % 2 && !dInfo.isFirst && dInfo.is_swapped)) {
driver->draw2DRectangle(0xa0000000, Resize(327, 8, 630, 51));
......
......@@ -736,7 +736,7 @@ void DuelClient::HandleSTOCPacketLan(unsigned char* data, unsigned int len) {
}
} else {
if(selftype > 3) {
mainGame->dInfo.player_type = 7;
mainGame->dInfo.player_type = NETPLAYER_TYPE_OBSERVER;
mainGame->btnLeaveGame->setText(dataManager.GetSysString(1350));
mainGame->btnLeaveGame->setVisible(true);
mainGame->btnSpectatorSwap->setVisible(true);
......@@ -994,6 +994,11 @@ void DuelClient::HandleSTOCPacketLan(unsigned char* data, unsigned int len) {
mainGame->gMutex.unlock();
break;
}
case STOC_TEAMMATE_SURRENDER: {
if(!mainGame->dField.tag_surrender)
mainGame->dField.tag_teammate_surrender = true;
mainGame->btnLeaveGame->setText(dataManager.GetSysString(1355));
}
}
}
// Analyze STOC_GAME_MSG packet
......@@ -2661,6 +2666,12 @@ int DuelClient::ClientAnalyze(unsigned char* msg, unsigned int len) {
mainGame->dInfo.is_swapped = !mainGame->dInfo.is_swapped;
return true;
}
if(!mainGame->dInfo.isReplay && mainGame->dInfo.player_type < 7) {
mainGame->dField.tag_surrender = false;
mainGame->dField.tag_teammate_surrender = false;
mainGame->btnLeaveGame->setText(dataManager.GetSysString(1351));
mainGame->btnLeaveGame->setVisible(true);
}
mainGame->HideElement(mainGame->wSurrender);
if(!mainGame->dInfo.isReplay && mainGame->dInfo.player_type < 7) {
mainGame->btnLeaveGame->setText(dataManager.GetSysString(1351));
......
......@@ -143,7 +143,8 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
if(exit_on_return)
mainGame->device->closeDevice();
} else {
mainGame->PopupElement(mainGame->wSurrender);
if(!(mainGame->dInfo.isTag && mainGame->dField.tag_surrender))
mainGame->PopupElement(mainGame->wSurrender);
}
break;
}
......@@ -151,10 +152,12 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
soundManager.PlaySoundEffect(SOUND_BUTTON);
DuelClient::SendPacketToServer(CTOS_SURRENDER);
mainGame->HideElement(mainGame->wSurrender);
mainGame->dField.tag_surrender = true;
break;
}
case BUTTON_SURRENDER_NO: {
soundManager.PlaySoundEffect(SOUND_BUTTON);
mainGame->dField.tag_teammate_surrender = false;
mainGame->HideElement(mainGame->wSurrender);
break;
}
......@@ -522,7 +525,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
current_mset_param = (i << 16) + 3;
if(mainGame->gameConf.ask_mset) {
wchar_t wbuf[256];
myswprintf(wbuf, dataManager.GetSysString(1355), dataManager.GetName(clicked_card->code));
myswprintf(wbuf, dataManager.GetSysString(1368), dataManager.GetName(clicked_card->code));
mainGame->stQMessage->setText(wbuf);
mainGame->PopupElement(mainGame->wQuery);
} else {
......
......@@ -203,6 +203,7 @@ public:
#define STOC_HS_PLAYER_ENTER 0x20
#define STOC_HS_PLAYER_CHANGE 0x21
#define STOC_HS_WATCH_CHANGE 0x22
#define STOC_TEAMMATE_SURRENDER 0x23
#ifdef YGOPRO_SERVER_MODE
#define STOC_FIELD_FINISH 0x30
#endif
......
......@@ -14,6 +14,7 @@ TagDuel::TagDuel() {
for(int i = 0; i < 4; ++i) {
players[i] = 0;
ready[i] = false;
surrender[i] = false;
}
#ifdef YGOPRO_SERVER_MODE
cache_recorder = 0;
......@@ -678,10 +679,21 @@ void TagDuel::DuelEndProc() {
void TagDuel::Surrender(DuelPlayer* dp) {
if(dp->type > 3 || !pduel)
return;
uint32 player = dp->type;
if(surrender[player])
return;
static const uint32 teammatemap[] = { 1, 0, 3, 2 };
uint32 teammate = teammatemap[player];
if(!surrender[teammate]) {
surrender[player] = true;
NetServer::SendPacketToPlayer(players[player], STOC_TEAMMATE_SURRENDER);
NetServer::SendPacketToPlayer(players[teammate], STOC_TEAMMATE_SURRENDER);
return;
}
static const uint32 winplayermap[] = { 1, 1, 0, 0 };
unsigned char wbuf[3];
uint32 player = (dp->type < 2) ? 0 : 1;
wbuf[0] = MSG_WIN;
wbuf[1] = 1 - player;
wbuf[1] = winplayermap[player];
wbuf[2] = 0;
NetServer::SendBufferToPlayer(players[0], STOC_GAME_MSG, wbuf, 3);
NetServer::ReSendToPlayer(players[1]);
......@@ -1157,6 +1169,9 @@ int TagDuel::Analyze(unsigned char* msgbuffer, unsigned int len) {
}
}
turn_count++;
for(int i = 0; i < 4; ++i) {
surrender[i] = false;
}
}
break;
}
......
......@@ -68,6 +68,7 @@ protected:
int phase;
#endif
bool ready[4];
bool surrender[4];
Deck pdeck[4];
int deck_error[4];
unsigned char hand_result[2];
......
Subproject commit cb2c8897700aee1dea3a1c6d2e2fcfd9de7d9f68
Subproject commit 7b4f8ec113d598de98598f651f3b542931f50d27
Subproject commit 0afd8128c0eaa79157305d64d8d6d5d6d0ce2c86
Subproject commit bd4b306d4594b5884a1f4b4f653526484c0ae4c4
......@@ -407,7 +407,7 @@
!system 1352 主要信息:
!system 1353 播放起始于回合:
!system 1354 开局默认显示所有时点
!system 1355 是否确定盖放[%ls]?
!system 1355 投降(1/2)
!system 1356 此操作将放弃对当前卡组的修改,是否继续?
!system 1357 不提示保留对卡组的修改
!system 1358 键入关键字后自动进行搜索
......@@ -420,6 +420,7 @@
!system 1365 重命名失败,可能存在同名文件
!system 1366 自动保存录像
!system 1367 录像已自动保存为%ls.yrp
!system 1368 是否确定盖放[%ls]?
!system 1369 提取卡组
!system 1370 星数↑
!system 1371 攻击↑
......
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