Commit 937d3858 authored by edo9300's avatar edo9300

Update

parent ce46da81
...@@ -127,7 +127,7 @@ void DuelClient::ClientEvent(bufferevent *bev, short events, void *ctx) { ...@@ -127,7 +127,7 @@ void DuelClient::ClientEvent(bufferevent *bev, short events, void *ctx) {
cscg.info.draw_count = _wtoi(mainGame->ebDrawCount->getText()); cscg.info.draw_count = _wtoi(mainGame->ebDrawCount->getText());
cscg.info.time_limit = _wtoi(mainGame->ebTimeLimit->getText()); cscg.info.time_limit = _wtoi(mainGame->ebTimeLimit->getText());
cscg.info.lflist = mainGame->cbLFlist->getItemData(mainGame->cbLFlist->getSelected()); cscg.info.lflist = mainGame->cbLFlist->getItemData(mainGame->cbLFlist->getSelected());
cscg.info.duel_rule = ((mainGame->cbDuelRule->getSelected() + 1) << 16) | mainGame->duel_param; cscg.info.duel_rule = mainGame->duel_param;
cscg.info.no_check_deck = mainGame->chkNoCheckDeck->isChecked(); cscg.info.no_check_deck = mainGame->chkNoCheckDeck->isChecked();
cscg.info.no_shuffle_deck = mainGame->chkNoShuffleDeck->isChecked(); cscg.info.no_shuffle_deck = mainGame->chkNoShuffleDeck->isChecked();
cscg.info.sealed = mainGame->chkRules[0]->isChecked() ? 2 : 0; cscg.info.sealed = mainGame->chkRules[0]->isChecked() ? 2 : 0;
...@@ -377,7 +377,32 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) { ...@@ -377,7 +377,32 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
str.append(msgbuf); str.append(msgbuf);
myswprintf(msgbuf, L"%ls%d\n", dataManager.GetSysString(1233), pkt->info.draw_count); myswprintf(msgbuf, L"%ls%d\n", dataManager.GetSysString(1233), pkt->info.draw_count);
str.append(msgbuf); str.append(msgbuf);
uint32 rule = pkt->info.duel_rule >> 16; uint32 rule = 5;
mainGame->dInfo.duel_rule = 2;
if(pkt->info.duel_rule == MASTER_RULE_1) {
rule = 1;
mainGame->dInfo.duel_rule = 1;
}
else if(pkt->info.duel_rule == MASTER_RULE_2) {
rule = 2;
mainGame->dInfo.duel_rule = 2;
}
else if(pkt->info.duel_rule == MASTER_RULE_3) {
rule = 3;
mainGame->dInfo.duel_rule = 3;
}
else if(pkt->info.duel_rule == MASTER_RULE_4) {
rule = 4;
mainGame->dInfo.duel_rule = 4;
}
else if((pkt->info.duel_rule) & DUEL_EMZONE) {
rule = 5;
mainGame->dInfo.duel_rule = 4;
}
else if((pkt->info.duel_rule) & DUEL_PZONE) {
rule = 5;
mainGame->dInfo.duel_rule = 3;
}
if(rule == 5) { if(rule == 5) {
uint32 flag = pkt->info.duel_rule & 0xffff, filter = 0x100; uint32 flag = pkt->info.duel_rule & 0xffff, filter = 0x100;
for (int i = 0; i < 5; ++i, filter <<= 1) for (int i = 0; i < 5; ++i, filter <<= 1)
...@@ -521,11 +546,6 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) { ...@@ -521,11 +546,6 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
mainGame->ShowElement(mainGame->wHostPrepare2); mainGame->ShowElement(mainGame->wHostPrepare2);
mainGame->wChat->setVisible(true); mainGame->wChat->setVisible(true);
mainGame->gMutex.Unlock(); mainGame->gMutex.Unlock();
mainGame->dInfo.duel_rule = 4;
if(((pkt->info.duel_rule & 0xffff) & DUEL_NO_PZONE) && ((pkt->info.duel_rule & 0xffff) & DUEL_NO_EMZONE))
mainGame->dInfo.duel_rule = 2;
else if((pkt->info.duel_rule & 0xffff) & DUEL_NO_EMZONE)
mainGame->dInfo.duel_rule = 3;
mainGame->dInfo.speed = (pkt->info.speed == 2) ? 1 : 0; mainGame->dInfo.speed = (pkt->info.speed == 2) ? 1 : 0;
watching = 0; watching = 0;
connect_state |= 0x4; connect_state |= 0x4;
......
...@@ -167,7 +167,6 @@ bool Game::Initialize() { ...@@ -167,7 +167,6 @@ bool Game::Initialize() {
cbDuelRule->addItem(dataManager.GetSysString(1261)); cbDuelRule->addItem(dataManager.GetSysString(1261));
cbDuelRule->addItem(dataManager.GetSysString(1262)); cbDuelRule->addItem(dataManager.GetSysString(1262));
cbDuelRule->addItem(dataManager.GetSysString(1263)); cbDuelRule->addItem(dataManager.GetSysString(1263));
//cbDuelRule->addItem(dataManager.GetSysString(1264));
cbDuelRule->setSelected(DEFAULT_DUEL_RULE - 1); cbDuelRule->setSelected(DEFAULT_DUEL_RULE - 1);
btnCustomRule = env->addButton(rect<s32>(305, 175, 370, 200), wCreateHost, BUTTON_CUSTOM_RULE, dataManager.GetSysString(1626)); btnCustomRule = env->addButton(rect<s32>(305, 175, 370, 200), wCreateHost, BUTTON_CUSTOM_RULE, dataManager.GetSysString(1626));
wCustomRules = env->addWindow(rect<s32>(700, 100, 910, 280), false, dataManager.strBuffer); wCustomRules = env->addWindow(rect<s32>(700, 100, 910, 280), false, dataManager.strBuffer);
...@@ -176,7 +175,7 @@ bool Game::Initialize() { ...@@ -176,7 +175,7 @@ bool Game::Initialize() {
wCustomRules->setDraggable(true); wCustomRules->setDraggable(true);
wCustomRules->setVisible(false); wCustomRules->setVisible(false);
for(int i = 0; i < 5; ++i) for(int i = 0; i < 5; ++i)
chkCustomRules[i] = env->addCheckBox(false, recti(10, 10 + i * 20, 200, 30 + i * 20), wCustomRules, 353+i, dataManager.GetSysString(1265 + i)); chkCustomRules[i] = env->addCheckBox(false, recti(10, 10 + i * 20, 200, 30 + i * 20), wCustomRules, 353 + i, dataManager.GetSysString(1265 + i));
btnCustomRulesOK = env->addButton(rect<s32>(55, 130, 155, 155), wCustomRules, BUTTON_CUSTOM_RULE_OK, dataManager.GetSysString(1211)); btnCustomRulesOK = env->addButton(rect<s32>(55, 130, 155, 155), wCustomRules, BUTTON_CUSTOM_RULE_OK, dataManager.GetSysString(1211));
duel_param = 0; duel_param = 0;
chkNoCheckDeck = env->addCheckBox(false, rect<s32>(20, 210, 170, 230), wCreateHost, -1, dataManager.GetSysString(1229)); chkNoCheckDeck = env->addCheckBox(false, rect<s32>(20, 210, 170, 230), wCreateHost, -1, dataManager.GetSysString(1229));
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#include "replay_mode.h" #include "replay_mode.h"
#include "single_mode.h" #include "single_mode.h"
#include "image_manager.h" #include "image_manager.h"
#include "../ocgcore/duel.h"
#include "game.h" #include "game.h"
#include "utils.h" #include "utils.h"
...@@ -132,6 +133,30 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) { ...@@ -132,6 +133,30 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
break; break;
} }
case BUTTON_CUSTOM_RULE: { case BUTTON_CUSTOM_RULE: {
switch (mainGame->cbDuelRule->getSelected()) {
case 0: {
mainGame->duel_param = MASTER_RULE_1;
break;
}
case 1: {
mainGame->duel_param = MASTER_RULE_2;
break;
}
case 2: {
mainGame->duel_param = MASTER_RULE_3;
break;
}
case 3: {
mainGame->duel_param = MASTER_RULE_4;
break;
}
}
uint32 filter = 0x100;
for (int i = 0; i < 5; ++i, filter <<= 1)
if (mainGame->duel_param & filter)
mainGame->chkCustomRules[i]->setChecked(true);
else
mainGame->chkCustomRules[i]->setChecked(false);
mainGame->PopupElement(mainGame->wCustomRules); mainGame->PopupElement(mainGame->wCustomRules);
break; break;
} }
...@@ -147,19 +172,19 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) { ...@@ -147,19 +172,19 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
mainGame->cbDuelRule->addItem(dataManager.GetSysString(1262)); mainGame->cbDuelRule->addItem(dataManager.GetSysString(1262));
mainGame->cbDuelRule->addItem(dataManager.GetSysString(1263)); mainGame->cbDuelRule->addItem(dataManager.GetSysString(1263));
switch (flag) { switch (flag) {
case 0x1F00: { case MASTER_RULE_1: {
mainGame->cbDuelRule->setSelected(0); mainGame->cbDuelRule->setSelected(0);
break; break;
} }
case 0x1E00: { case MASTER_RULE_2: {
mainGame->cbDuelRule->setSelected(1); mainGame->cbDuelRule->setSelected(1);
break; break;
} }
case 0x1000: { case MASTER_RULE_3: {
mainGame->cbDuelRule->setSelected(2); mainGame->cbDuelRule->setSelected(2);
break; break;
} }
case 0: { case MASTER_RULE_4: {
mainGame->cbDuelRule->setSelected(3); mainGame->cbDuelRule->setSelected(3);
break; break;
} }
...@@ -189,7 +214,8 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) { ...@@ -189,7 +214,8 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
mainGame->btnCreateHost->setEnabled(true); mainGame->btnCreateHost->setEnabled(true);
mainGame->btnJoinHost->setEnabled(true); mainGame->btnJoinHost->setEnabled(true);
mainGame->btnJoinCancel->setEnabled(true); mainGame->btnJoinCancel->setEnabled(true);
mainGame->HideElement(mainGame->wRules); if(mainGame->wRules->isVisible())
mainGame->HideElement(mainGame->wRules);
mainGame->HideElement(mainGame->wCreateHost); mainGame->HideElement(mainGame->wCreateHost);
mainGame->ShowElement(mainGame->wLanWindow); mainGame->ShowElement(mainGame->wLanWindow);
break; break;
...@@ -543,26 +569,26 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) { ...@@ -543,26 +569,26 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
switch (mainGame->cbDuelRule->getSelected()) { switch (mainGame->cbDuelRule->getSelected()) {
case 0:{ case 0:{
mainGame->cbDuelRule->removeItem(4); mainGame->cbDuelRule->removeItem(4);
mainGame->duel_param = 0x1F00; mainGame->duel_param = MASTER_RULE_1;
break; break;
} }
case 1: { case 1: {
mainGame->cbDuelRule->removeItem(4); mainGame->cbDuelRule->removeItem(4);
mainGame->duel_param = 0x1E00; mainGame->duel_param = MASTER_RULE_2;
break; break;
} }
case 2: { case 2: {
mainGame->cbDuelRule->removeItem(4); mainGame->cbDuelRule->removeItem(4);
mainGame->duel_param = 0x1000; mainGame->duel_param = MASTER_RULE_3;
break; break;
} }
case 3: { case 3: {
mainGame->cbDuelRule->removeItem(4); mainGame->cbDuelRule->removeItem(4);
mainGame->duel_param = 0; mainGame->duel_param = MASTER_RULE_4;
break; break;
} }
} }
uint32 flag = 0, filter = 0x100; uint32 filter = 0x100;
for (int i = 0; i < 5; ++i, filter <<= 1) for (int i = 0; i < 5; ++i, filter <<= 1)
if (mainGame->duel_param & filter) if (mainGame->duel_param & filter)
mainGame->chkCustomRules[i]->setChecked(true); mainGame->chkCustomRules[i]->setChecked(true);
......
...@@ -80,10 +80,36 @@ int ReplayMode::ReplayThread(void* param) { ...@@ -80,10 +80,36 @@ int ReplayMode::ReplayThread(void* param) {
int start_hand = cur_replay.ReadInt32(); int start_hand = cur_replay.ReadInt32();
int draw_count = cur_replay.ReadInt32(); int draw_count = cur_replay.ReadInt32();
int opt = cur_replay.ReadInt32(); int opt = cur_replay.ReadInt32();
mainGame->dInfo.duel_rule = 4; int rule = opt >> 16; //backwards compatibility with master rule replays
if (((opt & 0xffff) & DUEL_NO_PZONE) && ((opt & 0xffff) & DUEL_NO_EMZONE)) if(rule)
mainGame->dInfo.duel_rule = 2; switch (rule) {
else if ((opt & 0xffff) & DUEL_NO_EMZONE) case 1: {
opt |= MASTER_RULE_1;
break;
}
case 2: {
opt |= MASTER_RULE_2;
break;
}
case 3: {
opt |= MASTER_RULE_3;
break;
}
case 4: {
opt |= MASTER_RULE_4;
break;
}
}
//pre mr4 replay compatibility
if(opt & DUEL_OBSOLETE_RULING) {
opt &= ~DUEL_OBSOLETE_RULING;
opt |= MASTER_RULE_1;
} else if (!(opt & 0xff80))
opt |= MASTER_RULE_3;
mainGame->dInfo.duel_rule = 2;
if(opt & DUEL_EMZONE)
mainGame->dInfo.duel_rule = 4;
else if(opt & DUEL_PZONE)
mainGame->dInfo.duel_rule = 3; mainGame->dInfo.duel_rule = 3;
mainGame->dInfo.speed = (opt & SPEED_DUEL) ? 1 : 0; mainGame->dInfo.speed = (opt & SPEED_DUEL) ? 1 : 0;
set_player_info(pduel, 0, start_lp, start_hand, draw_count); set_player_info(pduel, 0, start_lp, start_hand, draw_count);
......
...@@ -414,28 +414,6 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) { ...@@ -414,28 +414,6 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
set_player_info(pduel, 0, host_info.start_lp, host_info.start_hand, host_info.draw_count); set_player_info(pduel, 0, host_info.start_lp, host_info.start_hand, host_info.draw_count);
set_player_info(pduel, 1, host_info.start_lp, host_info.start_hand, host_info.draw_count); set_player_info(pduel, 1, host_info.start_lp, host_info.start_hand, host_info.draw_count);
int opt = host_info.duel_rule; int opt = host_info.duel_rule;
switch (opt) {
case 0x1F00: {
opt |= (1 << 16);
break;
}
case 0x1E00: {
opt |= (2 << 16);
break;
}
case 0x1000: {
opt |= (3 << 16);
break;
}
case 0: {
opt |= (4 << 16);
break;
}
default: {
opt |= (5 << 16);
break;
}
}
if(host_info.no_shuffle_deck) if(host_info.no_shuffle_deck)
opt |= DUEL_PSEUDO_SHUFFLE; opt |= DUEL_PSEUDO_SHUFFLE;
if(host_info.speed) if(host_info.speed)
......
...@@ -383,28 +383,6 @@ void TagDuel::TPResult(DuelPlayer* dp, unsigned char tp) { ...@@ -383,28 +383,6 @@ void TagDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
set_player_info(pduel, 0, host_info.start_lp, host_info.start_hand, host_info.draw_count); set_player_info(pduel, 0, host_info.start_lp, host_info.start_hand, host_info.draw_count);
set_player_info(pduel, 1, host_info.start_lp, host_info.start_hand, host_info.draw_count); set_player_info(pduel, 1, host_info.start_lp, host_info.start_hand, host_info.draw_count);
int opt = host_info.duel_rule; int opt = host_info.duel_rule;
switch (opt) {
case 0x1F00: {
opt |= (1 << 16);
break;
}
case 0x1E00: {
opt |= (2 << 16);
break;
}
case 0x1000: {
opt |= (3 << 16);
break;
}
case 0: {
opt |= (4 << 16);
break;
}
default: {
opt |= (5 << 16);
break;
}
}
if(host_info.no_shuffle_deck) if(host_info.no_shuffle_deck)
opt |= DUEL_PSEUDO_SHUFFLE; opt |= DUEL_PSEUDO_SHUFFLE;
if(host_info.speed) if(host_info.speed)
......
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