Commit 937d3858 authored by edo9300's avatar edo9300

Update

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