Commit 1ed80e02 authored by argon.sun's avatar argon.sun

recon

parent a74e5e5b
......@@ -46,7 +46,6 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
mainGame->cbDBDecks->setSelected(sel);
else {
mainGame->cbDBDecks->addItem(dname);
mainGame->cbDeckSel->addItem(dname);
mainGame->cbDBDecks->setSelected(mainGame->cbDBDecks->getItemCount() - 1);
}
mainGame->deckManager.SaveDeck(mainGame->deckManager.deckhost, dname);
......
......@@ -88,60 +88,60 @@ bool Game::Initialize() {
btnCreateHost = env->addButton(rect<s32>(460, 25, 570, 50), wLanWindow, BUTTON_CREATE_HOST, dataManager.GetSysString(1224));
wLanWindow->setVisible(false);
//create host
wHostWindow = env->addWindow(rect<s32>(320, 100, 700, 520), false, dataManager.GetSysString(1224));
wHostWindow->getCloseButton()->setVisible(false);
env->addStaticText(dataManager.GetSysString(1225), rect<s32>(20, 30, 220, 50), false, false, wHostWindow);
cbRule = env->addComboBox(rect<s32>(140, 25, 300, 50), wHostWindow);
wCreateHost = env->addWindow(rect<s32>(320, 100, 700, 520), false, dataManager.GetSysString(1224));
wCreateHost->getCloseButton()->setVisible(false);
env->addStaticText(dataManager.GetSysString(1225), rect<s32>(20, 30, 220, 50), false, false, wCreateHost);
cbRule = env->addComboBox(rect<s32>(140, 25, 300, 50), wCreateHost);
cbRule->addItem(dataManager.GetSysString(1240));
cbRule->addItem(dataManager.GetSysString(1241));
cbRule->addItem(dataManager.GetSysString(1242));
env->addStaticText(dataManager.GetSysString(1226), rect<s32>(20, 60, 220, 80), false, false, wHostWindow);
cbLFlist = env->addComboBox(rect<s32>(140, 55, 300, 80), wHostWindow);
env->addStaticText(dataManager.GetSysString(1226), rect<s32>(20, 60, 220, 80), false, false, wCreateHost);
cbLFlist = env->addComboBox(rect<s32>(140, 55, 300, 80), wCreateHost);
for(int i = 0; i < deckManager._lfList.size(); ++i)
cbLFlist->addItem(deckManager._lfList[i].listName);
env->addStaticText(dataManager.GetSysString(1227), rect<s32>(20, 90, 220, 110), false, false, wHostWindow);
cbMatchMode = env->addComboBox(rect<s32>(140, 85, 300, 110), wHostWindow);
env->addStaticText(dataManager.GetSysString(1227), rect<s32>(20, 90, 220, 110), false, false, wCreateHost);
cbMatchMode = env->addComboBox(rect<s32>(140, 85, 300, 110), wCreateHost);
cbMatchMode->addItem(dataManager.GetSysString(1243));
cbMatchMode->addItem(dataManager.GetSysString(1244));
env->addStaticText(dataManager.GetSysString(1228), rect<s32>(20, 120, 320, 140), false, false, wHostWindow);
chkNoCheckDeck = env->addCheckBox(false, rect<s32>(20, 150, 320, 170), wHostWindow, -1, dataManager.GetSysString(1229));
chkNoShuffleDeck = env->addCheckBox(false, rect<s32>(20, 180, 320, 200), wHostWindow, -1, dataManager.GetSysString(1230));
env->addStaticText(dataManager.GetSysString(1231), rect<s32>(20, 210, 320, 230), false, false, wHostWindow);
env->addStaticText(dataManager.GetSysString(1228), rect<s32>(20, 120, 320, 140), false, false, wCreateHost);
chkNoCheckDeck = env->addCheckBox(false, rect<s32>(20, 150, 320, 170), wCreateHost, -1, dataManager.GetSysString(1229));
chkNoShuffleDeck = env->addCheckBox(false, rect<s32>(20, 180, 320, 200), wCreateHost, -1, dataManager.GetSysString(1230));
env->addStaticText(dataManager.GetSysString(1231), rect<s32>(20, 210, 320, 230), false, false, wCreateHost);
myswprintf(dataManager.strBuffer, L"%d", 8000);
ebStartLP = env->addEditBox(dataManager.strBuffer, rect<s32>(140, 205, 220, 230), true, wHostWindow);
ebStartLP = env->addEditBox(dataManager.strBuffer, rect<s32>(140, 205, 220, 230), true, wCreateHost);
ebStartLP->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER);
env->addStaticText(dataManager.GetSysString(1232), rect<s32>(20, 240, 320, 260), false, false, wHostWindow);
env->addStaticText(dataManager.GetSysString(1232), rect<s32>(20, 240, 320, 260), false, false, wCreateHost);
myswprintf(dataManager.strBuffer, L"%d", 5);
ebStartHand = env->addEditBox(dataManager.strBuffer, rect<s32>(140, 235, 220, 260), true, wHostWindow);
ebStartHand = env->addEditBox(dataManager.strBuffer, rect<s32>(140, 235, 220, 260), true, wCreateHost);
ebStartHand->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER);
env->addStaticText(dataManager.GetSysString(1233), rect<s32>(20, 270, 320, 290), false, false, wHostWindow);
env->addStaticText(dataManager.GetSysString(1233), rect<s32>(20, 270, 320, 290), false, false, wCreateHost);
myswprintf(dataManager.strBuffer, L"%d", 1);
ebDrawCount = env->addEditBox(dataManager.strBuffer, rect<s32>(140, 265, 220, 290), true, wHostWindow);
ebDrawCount = env->addEditBox(dataManager.strBuffer, rect<s32>(140, 265, 220, 290), true, wCreateHost);
ebDrawCount->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER);
env->addStaticText(dataManager.GetSysString(1234), rect<s32>(10, 360, 220, 380), false, false, wHostWindow);
ebServerName = env->addEditBox(gameConf.gamename, rect<s32>(110, 355, 250, 380), true, wHostWindow);
env->addStaticText(dataManager.GetSysString(1234), rect<s32>(10, 360, 220, 380), false, false, wCreateHost);
ebServerName = env->addEditBox(gameConf.gamename, rect<s32>(110, 355, 250, 380), true, wCreateHost);
ebServerName->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER);
env->addStaticText(dataManager.GetSysString(1235), rect<s32>(10, 390, 220, 410), false, false, wHostWindow);
ebServerPass = env->addEditBox(L"", rect<s32>(110, 385, 250, 410), true, wHostWindow);
env->addStaticText(dataManager.GetSysString(1235), rect<s32>(10, 390, 220, 410), false, false, wCreateHost);
ebServerPass = env->addEditBox(L"", rect<s32>(110, 385, 250, 410), true, wCreateHost);
ebServerPass->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER);
btnHostConfirm = env->addButton(rect<s32>(260, 355, 370, 380), wHostWindow, BUTTON_HOST_CONFIRM, dataManager.GetSysString(1211));
btnHostCancel = env->addButton(rect<s32>(260, 385, 370, 410), wHostWindow, BUTTON_HOST_CANCEL, dataManager.GetSysString(1212));
wHostWindow->setVisible(false);
/* chkNoCheckDeck = env->addCheckBox(false, rect<s32>(10, 10, 210, 30), tabLanS, -1, L"不检查卡组");
lstReplayList = env->addListBox(rect<s32>(10, 10, 460, 190), tabReplay, LISTBOX_REPLAY_LIST, true);
lstReplayList->setItemHeight(18);
btnLoadReplay = env->addButton(rect<s32>(180, 200, 280, 225), tabReplay, BUTTON_LOAD_REPLAY, L"载入录像");
env->addStaticText(L"昵称:", rect<s32>(10, 30, 90, 50), false, false, wModeSelection);
ebUsername = env->addEditBox(L"", rect<s32>(80, 25, 240, 50), true, wModeSelection);
ebUsername->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER);
env->addStaticText(L"卡组:", rect<s32>(250, 30, 350, 50), false, false, wModeSelection);
cbDeckSel = env->addComboBox(rect<s32>(310, 25, 410, 50), wModeSelection, -1);
RefreshDeck(cbDeckSel);
btnDeckEdit = env->addButton(rect<s32>(420, 25, 470, 50), wModeSelection, BUTTON_DECK_EDIT, L"编辑");
stModeStatus = env->addStaticText(L"", rect<s32>(20, 360, 350, 380), false, false, wModeSelection);
*/
btnHostConfirm = env->addButton(rect<s32>(260, 355, 370, 380), wCreateHost, BUTTON_HOST_CONFIRM, dataManager.GetSysString(1211));
btnHostCancel = env->addButton(rect<s32>(260, 385, 370, 410), wCreateHost, BUTTON_HOST_CANCEL, dataManager.GetSysString(1212));
wCreateHost->setVisible(false);
//create host
wHostSingle = env->addWindow(rect<s32>(220, 100, 800, 520), false, dataManager.GetSysString(1245));
wHostSingle->getCloseButton()->setVisible(false);
btnHostSingleDuelist = env->addButton(rect<s32>(10, 30, 110, 55), wHostSingle, BUTTON_HS_DUELIST, dataManager.GetSysString(1246));
stHostSingleDuelist[0] = env->addStaticText(L"", rect<s32>(120, 30, 320, 50), true, false, wHostSingle);
stHostSingleDuelist[1] = env->addStaticText(L"", rect<s32>(120, 55, 320, 75), true, false, wHostSingle);
chkHostSingleReady[0] = env->addCheckBox(false, rect<s32>(330, 30, 350, 50), wHostSingle, -1, L"");
chkHostSingleReady[0]->setEnabled(false);
chkHostSingleReady[1] = env->addCheckBox(false, rect<s32>(330, 55, 350, 75), wHostSingle, -1, L"");
chkHostSingleReady[1]->setEnabled(false);
btnHostSingleOB = env->addButton(rect<s32>(10, 80, 110, 105), wHostSingle, BUTTON_HS_OBSERVER, dataManager.GetSysString(1247));
for(int i = 0; i < 8; ++i)
stHostSingleOB[i] = env->addStaticText(L"", rect<s32>(120, 80 + 25 * i, 320, 100 + 25 * i), true, false, wHostSingle);
btnHostSingleStart = env->addButton(rect<s32>(460, 355, 570, 380), wHostSingle, BUTTON_HS_START, dataManager.GetSysString(1215));
btnHostSingleCancel = env->addButton(rect<s32>(460, 385, 570, 410), wHostSingle, BUTTON_HS_CANCEL, dataManager.GetSysString(1212));
//img
wCardImg = env->addStaticText(L"", rect<s32>(1, 1, 199, 273), true, false, 0, -1, true);
wCardImg->setBackgroundColor(0xc0c0c0c0);
......
......@@ -216,6 +216,7 @@ public:
irr::gui::IGUIButton* btnTestMode;
irr::gui::IGUIButton* btnDeckEdit;
irr::gui::IGUIButton* btnModeExit;
//lan
irr::gui::IGUIWindow* wLanWindow;
irr::gui::IGUIEditBox* ebNickName;
irr::gui::IGUIListBox* lstHostList;
......@@ -225,7 +226,8 @@ public:
irr::gui::IGUIButton* btnJoinHost;
irr::gui::IGUIButton* btnJoinCancel;
irr::gui::IGUIButton* btnCreateHost;
irr::gui::IGUIWindow* wHostWindow;
//create host
irr::gui::IGUIWindow* wCreateHost;
irr::gui::IGUIComboBox* cbLFlist;
irr::gui::IGUIComboBox* cbMatchMode;
irr::gui::IGUIComboBox* cbRule;
......@@ -238,12 +240,21 @@ public:
irr::gui::IGUICheckBox* chkNoShuffleDeck;
irr::gui::IGUIButton* btnHostConfirm;
irr::gui::IGUIButton* btnHostCancel;
//host(single)
irr::gui::IGUIWindow* wHostSingle;
irr::gui::IGUIButton* btnHostSingleDuelist;
irr::gui::IGUIButton* btnHostSingleOB;
irr::gui::IGUIStaticText* stHostSingleDuelist[2];
irr::gui::IGUIStaticText* stHostSingleOB[8];
irr::gui::IGUIStaticText* stHostSingleRule;
irr::gui::IGUICheckBox* chkHostSingleReady[2];
irr::gui::IGUIComboBox* cbDeckSelect;
irr::gui::IGUIButton* btnHostSingleReady;
irr::gui::IGUIButton* btnHostSingleStart;
irr::gui::IGUIButton* btnHostSingleCancel;
//replay
irr::gui::IGUIListBox* lstReplayList;
irr::gui::IGUIButton* btnLoadReplay;
irr::gui::IGUIEditBox* ebUsername;
irr::gui::IGUIComboBox* cbDeckSel;
irr::gui::IGUIStaticText* stModeStatus;
irr::gui::IGUIComboBox* cbIPList;
//message
irr::gui::IGUIWindow* wMessage;
irr::gui::IGUIStaticText* stMessage;
......@@ -376,61 +387,66 @@ extern Game* mainGame;
#define BUTTON_CREATE_HOST 113
#define BUTTON_HOST_CONFIRM 114
#define BUTTON_HOST_CANCEL 115
#define BUTTON_MSG_OK 150
#define BUTTON_YES 151
#define BUTTON_NO 152
#define BUTTON_POS_AU 160
#define BUTTON_POS_AD 161
#define BUTTON_POS_DU 162
#define BUTTON_POS_DD 163
#define BUTTON_OPTION_PREV 170
#define BUTTON_OPTION_NEXT 171
#define BUTTON_OPTION_OK 172
#define BUTTON_CARD_0 180
#define BUTTON_CARD_1 181
#define BUTTON_CARD_2 182
#define BUTTON_CARD_3 183
#define BUTTON_CARD_4 184
#define SCROLL_CARD_SELECT 185
#define BUTTON_CARD_SEL_OK 186
#define BUTTON_CMD_ACTIVATE 190
#define BUTTON_CMD_SUMMON 191
#define BUTTON_CMD_SPSUMMON 192
#define BUTTON_CMD_MSET 193
#define BUTTON_CMD_SSET 194
#define BUTTON_CMD_REPOS 195
#define BUTTON_CMD_ATTACK 196
#define BUTTON_CMD_SHOWLIST 197
#define BUTTON_ANNUMBER_OK 200
#define BUTTON_ANCARD_OK 201
#define EDITBOX_ANCARD 202
#define LISTBOX_ANCARD 203
#define CHECK_ATTRIBUTE 204
#define CHECK_RACE 205
#define BUTTON_BP 210
#define BUTTON_M2 211
#define BUTTON_EP 212
#define BUTTON_CLEAR_LOG 220
#define LISTBOX_LOG 221
#define BUTTON_CATEGORY_OK 250
#define COMBOBOX_DBLFLIST 251
#define COMBOBOX_DBDECKS 252
#define BUTTON_CLEAR_DECK 253
#define BUTTON_SAVE_DECK 254
#define BUTTON_SAVE_DECK_AS 255
#define BUTTON_DBEXIT 256
#define BUTTON_SORT_DECK 257
#define COMBOBOX_MAINTYPE 260
#define BUTTON_EFFECT_FILTER 261
#define BUTTON_START_FILTER 262
#define BUTTON_RESULT_FILTER 263
#define SCROLL_FILTER 264
#define SCROLL_KEYWORD 265
#define BUTTON_REPLAY_START 270
#define BUTTON_REPLAY_PAUSE 271
#define BUTTON_REPLAY_STEP 272
#define BUTTON_REPLAY_EXIT 273
#define BUTTON_REPLAY_SWAP 274
#define BUTTON_REPLAY_SAVE 280
#define BUTTON_REPLAY_CANCEL 281
#define BUTTON_HS_DUELIST 120
#define BUTTON_HS_OBSERVER 121
#define BUTTON_HS_READY 122
#define BUTTON_HS_START 123
#define BUTTON_HS_CANCEL 124
#define BUTTON_MSG_OK 200
#define BUTTON_YES 201
#define BUTTON_NO 202
#define BUTTON_POS_AU 210
#define BUTTON_POS_AD 211
#define BUTTON_POS_DU 212
#define BUTTON_POS_DD 213
#define BUTTON_OPTION_PREV 220
#define BUTTON_OPTION_NEXT 221
#define BUTTON_OPTION_OK 222
#define BUTTON_CARD_0 230
#define BUTTON_CARD_1 231
#define BUTTON_CARD_2 232
#define BUTTON_CARD_3 233
#define BUTTON_CARD_4 234
#define SCROLL_CARD_SELECT 235
#define BUTTON_CARD_SEL_OK 236
#define BUTTON_CMD_ACTIVATE 240
#define BUTTON_CMD_SUMMON 241
#define BUTTON_CMD_SPSUMMON 242
#define BUTTON_CMD_MSET 243
#define BUTTON_CMD_SSET 244
#define BUTTON_CMD_REPOS 245
#define BUTTON_CMD_ATTACK 246
#define BUTTON_CMD_SHOWLIST 247
#define BUTTON_ANNUMBER_OK 250
#define BUTTON_ANCARD_OK 251
#define EDITBOX_ANCARD 252
#define LISTBOX_ANCARD 253
#define CHECK_ATTRIBUTE 254
#define CHECK_RACE 255
#define BUTTON_BP 260
#define BUTTON_M2 261
#define BUTTON_EP 262
#define BUTTON_CLEAR_LOG 270
#define LISTBOX_LOG 271
#define BUTTON_CATEGORY_OK 300
#define COMBOBOX_DBLFLIST 301
#define COMBOBOX_DBDECKS 302
#define BUTTON_CLEAR_DECK 303
#define BUTTON_SAVE_DECK 304
#define BUTTON_SAVE_DECK_AS 305
#define BUTTON_DBEXIT 306
#define BUTTON_SORT_DECK 307
#define COMBOBOX_MAINTYPE 310
#define BUTTON_EFFECT_FILTER 311
#define BUTTON_START_FILTER 312
#define BUTTON_RESULT_FILTER 313
#define SCROLL_FILTER 314
#define SCROLL_KEYWORD 315
#define BUTTON_REPLAY_START 320
#define BUTTON_REPLAY_PAUSE 321
#define BUTTON_REPLAY_STEP 322
#define BUTTON_REPLAY_EXIT 323
#define BUTTON_REPLAY_SWAP 324
#define BUTTON_REPLAY_SAVE 330
#define BUTTON_REPLAY_CANCEL 331
#endif // GAME_H
......@@ -28,14 +28,29 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
break;
}
case BUTTON_CREATE_HOST: {
mainGame->HideElement(mainGame->wLanWindow, false, mainGame->wHostWindow);
mainGame->HideElement(mainGame->wLanWindow, false, mainGame->wCreateHost);
break;
}
case BUTTON_HOST_CONFIRM: {
break;
}
case BUTTON_HOST_CANCEL: {
mainGame->HideElement(mainGame->wHostWindow, false, mainGame->wLanWindow);
mainGame->HideElement(mainGame->wCreateHost, false, mainGame->wLanWindow);
break;
}
case BUTTON_HS_DUELIST: {
break;
}
case BUTTON_HS_OBSERVER: {
break;
}
case BUTTON_HS_READY: {
break;
}
case BUTTON_HS_START: {
break;
}
case BUTTON_HS_CANCEL: {
break;
}
case BUTTON_DECK_EDIT: {
......@@ -166,6 +181,9 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
}
break;
}
case irr::EET_USER_EVENT: {
break;
}
}
return false;
}
......
......@@ -211,19 +211,11 @@ int Game::EngineThread(void* pd) {
mainGame->lastReplay.BeginRecord();
mainGame->lastReplay.WriteHeader(rh);
mainGame->rnd.reset(seed);
if(mainGame->netManager.hInfo.no_shuffle_player || mainGame->rnd.real() < 0.5) {
pdInfo->is_host_player[0] = true;
pdInfo->is_host_player[1] = false;
pdInfo->is_first_turn = true;
mainGame->lastReplay.WriteData(pdInfo->hostname, 40, false);
mainGame->lastReplay.WriteData(pdInfo->clientname, 40, false);
} else {
pdInfo->is_host_player[0] = false;
pdInfo->is_host_player[1] = true;
pdInfo->is_first_turn = false;
mainGame->lastReplay.WriteData(pdInfo->clientname, 40, false);
mainGame->lastReplay.WriteData(pdInfo->hostname, 40, false);
}
pdInfo->is_host_player[0] = false;
pdInfo->is_host_player[1] = true;
pdInfo->is_first_turn = false;
mainGame->lastReplay.WriteData(pdInfo->clientname, 40, false);
mainGame->lastReplay.WriteData(pdInfo->hostname, 40, false);
if(!mainGame->netManager.hInfo.no_shuffle_deck) {
for(int i = 0; i < mainGame->deckManager.deckhost.main.size(); ++i) {
int swap = mainGame->rnd.real() * mainGame->deckManager.deckhost.main.size();
......@@ -251,10 +243,6 @@ int Game::EngineThread(void* pd) {
set_player_info(pdInfo->pDuel, 0, hi.start_lp, hi.start_hand, hi.draw_count);
set_player_info(pdInfo->pDuel, 1, hi.start_lp, hi.start_hand, hi.draw_count);
int opt = 0;
if(mainGame->netManager.hInfo.no_chain_hint)
opt |= DUEL_NO_CHAIN_HINT;
if(mainGame->netManager.hInfo.attack_ft)
opt |= DUEL_ATTACK_FIRST_TURN;
mainGame->lastReplay.WriteInt32(hi.start_lp, false);
mainGame->lastReplay.WriteInt32(hi.start_hand, false);
mainGame->lastReplay.WriteInt32(hi.draw_count, false);
......@@ -3019,7 +3007,6 @@ int Game::ReplayThread(void* pd) {
mainGame->stInfo->setText(L"");
mainGame->stDataInfo->setText(L"");
mainGame->stText->setText(L"");
mainGame->stModeStatus->setText(L"");
mainGame->btnReplayStart->setVisible(false);
mainGame->btnReplayPause->setVisible(true);
mainGame->btnReplayStep->setVisible(false);
......
......@@ -19,11 +19,6 @@ bool NetManager::CreateHost(int ipindex) {
hInfo.start_lp = _wtoi(mainGame->ebStartLP->getText());
hInfo.start_hand = _wtoi(mainGame->ebStartHand->getText());
hInfo.draw_count = _wtoi(mainGame->ebDrawCount->getText());
hInfo.is_match = mainGame->cbMatchMode->getSelected() == 0 ? false : true;
hInfo.lfindex = mainGame->cbLFlist->getSelected();
for(wp = 0, pstr = (wchar_t*)mainGame->cbLFlist->getItem(mainGame->cbLFlist->getSelected()); wp < 19 && pstr[wp]; ++wp)
hInfo.lflist[wp] = pstr[wp];
hInfo.lflist[wp] = 0;
sBHost = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if(sBHost == INVALID_SOCKET)
return false;
......@@ -217,8 +212,7 @@ int NetManager::BroadcastClient(void* np) {
std::vector<HostInfo>::iterator it;
mainGame->gMutex.Lock();
for(it = net->hosts.begin(); it != net->hosts.end(); ++it) {
if(!it->no_check_deck && !it->no_shuffle_deck && !it->no_shuffle_deck && !it->attack_ft && !it->no_chain_hint
&& it->start_lp == 8000 && it->start_hand == 5 && it->draw_count == 1)
if(!it->no_check_deck && !it->no_shuffle_deck && it->start_lp == 8000 && it->start_hand == 5 && it->draw_count == 1)
mode = L"标准设定";
else mode = L"自定义设定";
}
......@@ -256,8 +250,7 @@ int NetManager::ListenThread(void* np) {
continue;
}
int mode = ReadInt16(pbuf);
if(mode == 1 && (net->hInfo.no_chain_hint || net->hInfo.no_check_deck || net->hInfo.no_shuffle_deck || net->hInfo.no_shuffle_player || net->hInfo.attack_ft
|| net->hInfo.start_lp != 8000 || net->hInfo.start_hand != 5 || net->hInfo.draw_count != 1 )) {
if(mode == 1 && (net->hInfo.no_check_deck || net->hInfo.no_shuffle_deck || net->hInfo.start_lp != 8000 || net->hInfo.start_hand != 5 || net->hInfo.draw_count != 1 )) {
psbuf = net->send_buf;
WriteInt8(psbuf, 0x4);
send(net->sRemote, net->send_buf, 1, 0);
......@@ -290,22 +283,13 @@ int NetManager::ListenThread(void* np) {
int maincount = ReadInt16(pbuf);
int sidecount = ReadInt16(pbuf);
mainGame->deckManager.LoadDeck(mainGame->deckManager.deckclient, (int*)pbuf, maincount, sidecount);
if(!net->hInfo.no_check_deck && !mainGame->deckManager.CheckLFList(mainGame->deckManager.deckclient, net->hInfo.lfindex)) {
psbuf = net->send_buf;
WriteInt8(psbuf, 0x2);
send(net->sRemote, net->send_buf, 1, 0);
closesocket(net->sRemote);
net->sRemote = accept(net->sListen, 0, 0);
continue;
}
psbuf = net->send_buf;
WriteInt8(psbuf, 0);
const wchar_t* ln = mainGame->ebUsername->getText();
int li = 0;
while(ln[li] && li < 19) {
mainGame->dInfo.hostname[li] = ln[li];
WriteInt16(psbuf, ln[li++]);
}
// while(ln[li] && li < 19) {
// mainGame->dInfo.hostname[li] = ln[li];
// WriteInt16(psbuf, ln[li++]);
// }
mainGame->dInfo.hostname[li] = 0;
WriteInt16(psbuf, 0);
send(net->sRemote, net->send_buf, 3 + li * 2, 0);
......@@ -317,7 +301,6 @@ int NetManager::ListenThread(void* np) {
mainGame->stInfo->setText(L"");
mainGame->stDataInfo->setText(L"");
mainGame->stText->setText(L"");
mainGame->stModeStatus->setText(L"");
mainGame->dInfo.engLen = 0;
mainGame->dInfo.msgLen = 0;
mainGame->dField.Clear();
......@@ -341,7 +324,7 @@ int NetManager::JoinThread(void* adr) {
if(connect(pnet->sRemote, (sockaddr*)&server, sizeof(sockaddr)) == SOCKET_ERROR) {
closesocket(pnet->sRemote);
if(!mainGame->is_closing) {
mainGame->stModeStatus->setText(L"无法连接至主机");
// mainGame->stModeStatus->setText(L"无法连接至主机");
}
return 0;
}
......@@ -354,7 +337,7 @@ int NetManager::JoinThread(void* adr) {
NetManager::WriteInt16(pbuf, pname[i++]);
NetManager::WriteInt16(pbuf, 0);
i = 0;
pname = mainGame->ebUsername->getText();
// pname = mainGame->ebUsername->getText();
while(pname[i] != 0 && i < 19) {
mainGame->dInfo.hostname[i] = pname[i];
NetManager::WriteInt16(pbuf, pname[i++]);
......@@ -373,24 +356,7 @@ int NetManager::JoinThread(void* adr) {
int result = recv(pnet->sRemote, pnet->recv_buf, 4096, 0);
if(result == SOCKET_ERROR || pnet->recv_buf[0] != 0) {
closesocket(pnet->sRemote);
if(!mainGame->is_closing) {
if(result == SOCKET_ERROR)
mainGame->stModeStatus->setText(L"网络连接发生错误");
else if(pnet->recv_buf[0] == 0x1) {
wchar_t errorbuf[32];
myswprintf(errorbuf, L"当前版本(0x%X)与主机版本(0x%X)不匹配", PROTO_VERSION, (int)(*(short*)&pnet->recv_buf[1]));
mainGame->stModeStatus->setText(errorbuf);
} else if(pnet->recv_buf[0] == 0x2)
mainGame->stModeStatus->setText(L"无效卡组或者卡组不符合禁卡表规范");
else if(pnet->recv_buf[0] == 0x3)
mainGame->stModeStatus->setText(L"密码错误");
else if(pnet->recv_buf[0] == 0x4)
mainGame->stModeStatus->setText(L"主机非标准对战模式,拒绝连接");
else mainGame->stModeStatus->setText(L"未知错误");
}
return 0;
}
mainGame->stModeStatus->setText(L"");
wchar_t* pn = (wchar_t*)&pnet->recv_buf[1];
int pi = 0;
while(pn[pi] && pi < 19) {
......@@ -406,7 +372,7 @@ int NetManager::JoinThread(void* adr) {
mainGame->stInfo->setText(L"");
mainGame->stDataInfo->setText(L"");
mainGame->stText->setText(L"");
mainGame->stModeStatus->setText(L"");
// mainGame->stModeStatus->setText(L"");
mainGame->dInfo.engLen = 0;
mainGame->dInfo.msgLen = 0;
mainGame->dInfo.is_local_host = false;
......
......@@ -13,19 +13,15 @@ struct HostInfo {
unsigned short version;
unsigned int address;
unsigned short port;
wchar_t name[20];
char name[32];
unsigned char rule;
unsigned char mode;
unsigned int lflist;
bool no_check_deck;
bool no_shuffle_deck;
bool no_shuffle_player;
bool attack_ft;
bool no_chain_hint;
int start_lp;
unsigned int start_lp;
unsigned char start_hand;
unsigned char draw_count;
wchar_t lflist[20];
bool is_match;
unsigned char lfindex;
unsigned char time_limit;
};
struct HostRequest {
......
......@@ -177,15 +177,16 @@
!system 1158 查看列表
#menu
!system 1200 局域网模式
!system 1201 ???
!system 1201 N/A
!system 1202 观看录像
!system 1203 ???
!system 1203 N/A
!system 1204 编辑卡组
!system 1210 退出
!system 1211 确定
!system 1212 取消
!system 1213
!system 1214
!system 1215 开始
!system 1220 昵称:
!system 1221 主机信息:
!system 1222 主机密码:
......@@ -207,6 +208,11 @@
!system 1242 世界赛
!system 1243 单局模式
!system 1244 比赛模式
!system 1245 决斗准备
!system 1246 决斗者
!system 1247 OB
!system 1248 卡组选择
!system 1249 准备完成
#vistory reason
!victory 0x1 LP变成0
!victory 0x2 没有卡可抽
......
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