Commit 235d44df authored by mercury233's avatar mercury233

Merge branch 'master' of https://github.com/Fluorohydride/ygopro

parents 079d9ac7 c052813b
...@@ -78,12 +78,7 @@ bool DataManager::LoadStrings(const char* file) { ...@@ -78,12 +78,7 @@ bool DataManager::LoadStrings(const char* file) {
char linebuf[256]; char linebuf[256];
char strbuf[256]; char strbuf[256];
int value; int value;
fseek(fp, 0, SEEK_END); while(fgets(linebuf, 256, fp)) {
int fsize = ftell(fp);
fseek(fp, 0, SEEK_SET);
fgets(linebuf, 256, fp);
while(ftell(fp) < fsize) {
fgets(linebuf, 256, fp);
if(linebuf[0] != '!') if(linebuf[0] != '!')
continue; continue;
sscanf(linebuf, "!%s", strbuf); sscanf(linebuf, "!%s", strbuf);
......
...@@ -76,7 +76,9 @@ void DeckBuilder::Initialize() { ...@@ -76,7 +76,9 @@ void DeckBuilder::Initialize() {
hovered_code = 0; hovered_code = 0;
hovered_pos = 0; hovered_pos = 0;
hovered_seq = -1; hovered_seq = -1;
is_lastcard = 0;
is_draging = false; is_draging = false;
is_starting_dragging = false;
prev_deck = mainGame->cbDBDecks->getSelected(); prev_deck = mainGame->cbDBDecks->getSelected();
prev_operation = 0; prev_operation = 0;
is_modified = false; is_modified = false;
...@@ -487,25 +489,20 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -487,25 +489,20 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
if(!check_limit(draging_pointer)) if(!check_limit(draging_pointer))
break; break;
} }
if(hovered_pos == 1) is_starting_dragging = true;
pop_main(hovered_seq);
else if(hovered_pos == 2)
pop_extra(hovered_seq);
else if(hovered_pos == 3)
pop_side(hovered_seq);
is_draging = true;
break; break;
} }
case irr::EMIE_LMOUSE_LEFT_UP: { case irr::EMIE_LMOUSE_LEFT_UP: {
is_starting_dragging = false;
if(!is_draging) if(!is_draging)
break; break;
bool pushed = false; bool pushed = false;
if(hovered_pos == 1) if(hovered_pos == 1)
pushed = push_main(draging_pointer, hovered_seq); pushed = push_main(draging_pointer, hovered_seq);
else if(hovered_pos == 2) else if(hovered_pos == 2)
pushed = push_extra(draging_pointer, hovered_seq); pushed = push_extra(draging_pointer, hovered_seq + is_lastcard);
else if(hovered_pos == 3) else if(hovered_pos == 3)
pushed = push_side(draging_pointer, hovered_seq); pushed = push_side(draging_pointer, hovered_seq + is_lastcard);
else if(hovered_pos == 4 && !mainGame->is_siding) else if(hovered_pos == 4 && !mainGame->is_siding)
pushed = true; pushed = true;
if(!pushed) { if(!pushed) {
...@@ -603,6 +600,16 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -603,6 +600,16 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
break; break;
} }
case irr::EMIE_MOUSE_MOVED: { case irr::EMIE_MOUSE_MOVED: {
if(is_starting_dragging) {
is_draging = true;
if(hovered_pos == 1)
pop_main(hovered_seq);
else if(hovered_pos == 2)
pop_extra(hovered_seq);
else if(hovered_pos == 3)
pop_side(hovered_seq);
is_starting_dragging = false;
}
mouse_pos.set(event.MouseInput.X, event.MouseInput.Y); mouse_pos.set(event.MouseInput.X, event.MouseInput.Y);
GetHoveredCard(); GetHoveredCard();
break; break;
...@@ -640,6 +647,7 @@ void DeckBuilder::GetHoveredCard() { ...@@ -640,6 +647,7 @@ void DeckBuilder::GetHoveredCard() {
int pre_code = hovered_code; int pre_code = hovered_code;
hovered_pos = 0; hovered_pos = 0;
hovered_code = 0; hovered_code = 0;
is_lastcard = 0;
if(x >= 314 && x <= 794) { if(x >= 314 && x <= 794) {
if(y >= 164 && y <= 435) { if(y >= 164 && y <= 435) {
int lx = 10, px, py = (y - 164) / 68; int lx = 10, px, py = (y - 164) / 68;
...@@ -671,6 +679,8 @@ void DeckBuilder::GetHoveredCard() { ...@@ -671,6 +679,8 @@ void DeckBuilder::GetHoveredCard() {
hovered_code = 0; hovered_code = 0;
} else { } else {
hovered_code = deckManager.current_deck.extra[hovered_seq]->first; hovered_code = deckManager.current_deck.extra[hovered_seq]->first;
if(x >= 772)
is_lastcard = 1;
} }
} else if (y >= 564 && y <= 628) { } else if (y >= 564 && y <= 628) {
int lx = deckManager.current_deck.side.size(); int lx = deckManager.current_deck.side.size();
...@@ -686,6 +696,8 @@ void DeckBuilder::GetHoveredCard() { ...@@ -686,6 +696,8 @@ void DeckBuilder::GetHoveredCard() {
hovered_code = 0; hovered_code = 0;
} else { } else {
hovered_code = deckManager.current_deck.side[hovered_seq]->first; hovered_code = deckManager.current_deck.side[hovered_seq]->first;
if(x >= 772)
is_lastcard = 1;
} }
} }
} else if(x >= 810 && x <= 995 && y >= 165 && y <= 626) { } else if(x >= 810 && x <= 995 && y >= 165 && y <= 626) {
...@@ -779,7 +791,8 @@ void DeckBuilder::FilterCards() { ...@@ -779,7 +791,8 @@ void DeckBuilder::FilterCards() {
if(filter_scltype) { if(filter_scltype) {
if((filter_scltype == 1 && data.lscale != filter_scl) || (filter_scltype == 2 && data.lscale < filter_scl) if((filter_scltype == 1 && data.lscale != filter_scl) || (filter_scltype == 2 && data.lscale < filter_scl)
|| (filter_scltype == 3 && data.lscale <= filter_scl) || (filter_scltype == 4 && (data.lscale > filter_scl || data.lscale == 0)) || (filter_scltype == 3 && data.lscale <= filter_scl) || (filter_scltype == 4 && (data.lscale > filter_scl || data.lscale == 0))
|| (filter_scltype == 5 && (data.lscale >= filter_scl || data.lscale == 0)) || filter_scltype == 6) || (filter_scltype == 5 && (data.lscale >= filter_scl || data.lscale == 0)) || filter_scltype == 6
|| !(data.type & TYPE_PENDULUM))
continue; continue;
} }
break; break;
......
...@@ -49,8 +49,10 @@ public: ...@@ -49,8 +49,10 @@ public:
int hovered_code; int hovered_code;
int hovered_pos; int hovered_pos;
int hovered_seq; int hovered_seq;
int is_lastcard;
int click_pos; int click_pos;
bool is_draging; bool is_draging;
bool is_starting_dragging;
int dragx; int dragx;
int dragy; int dragy;
size_t pre_mainc; size_t pre_mainc;
......
...@@ -13,12 +13,7 @@ void DeckManager::LoadLFList() { ...@@ -13,12 +13,7 @@ void DeckManager::LoadLFList() {
char linebuf[256]; char linebuf[256];
wchar_t strBuffer[256]; wchar_t strBuffer[256];
if(fp) { if(fp) {
fseek(fp, 0, SEEK_END); while(fgets(linebuf, 256, fp)) {
int fsize = ftell(fp);
fseek(fp, 0, SEEK_SET);
fgets(linebuf, 256, fp);
while(ftell(fp) < fsize) {
fgets(linebuf, 256, fp);
if(linebuf[0] == '#') if(linebuf[0] == '#')
continue; continue;
int p = 0, sa = 0, code, count; int p = 0, sa = 0, code, count;
...@@ -191,12 +186,7 @@ bool DeckManager::LoadDeck(const wchar_t* file) { ...@@ -191,12 +186,7 @@ bool DeckManager::LoadDeck(const wchar_t* file) {
int cardlist[128]; int cardlist[128];
bool is_side = false; bool is_side = false;
char linebuf[256]; char linebuf[256];
fseek(fp, 0, SEEK_END); while(fgets(linebuf, 256, fp) && ct < 128) {
int fsize = ftell(fp);
fseek(fp, 0, SEEK_SET);
fgets(linebuf, 256, fp);
while(ftell(fp) < fsize && ct < 128) {
fgets(linebuf, 256, fp);
if(linebuf[0] == '!') { if(linebuf[0] == '!') {
is_side = true; is_side = true;
continue; continue;
......
...@@ -295,6 +295,7 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) { ...@@ -295,6 +295,7 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
mainGame->deckBuilder.result_string[1] = 0; mainGame->deckBuilder.result_string[1] = 0;
mainGame->deckBuilder.results.clear(); mainGame->deckBuilder.results.clear();
mainGame->deckBuilder.is_draging = false; mainGame->deckBuilder.is_draging = false;
mainGame->deckBuilder.is_starting_dragging = false;
mainGame->deckBuilder.pre_mainc = deckManager.current_deck.main.size(); mainGame->deckBuilder.pre_mainc = deckManager.current_deck.main.size();
mainGame->deckBuilder.pre_extrac = deckManager.current_deck.extra.size(); mainGame->deckBuilder.pre_extrac = deckManager.current_deck.extra.size();
mainGame->deckBuilder.pre_sidec = deckManager.current_deck.side.size(); mainGame->deckBuilder.pre_sidec = deckManager.current_deck.side.size();
...@@ -359,6 +360,8 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) { ...@@ -359,6 +360,8 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
} }
for(int i = 0; i < 4; ++i) for(int i = 0; i < 4; ++i)
mainGame->chkHostPrepReady[i]->setChecked(false); mainGame->chkHostPrepReady[i]->setChecked(false);
mainGame->btnHostPrepReady->setVisible(true);
mainGame->btnHostPrepNotReady->setVisible(false);
mainGame->dInfo.time_limit = pkt->info.time_limit; mainGame->dInfo.time_limit = pkt->info.time_limit;
mainGame->dInfo.time_left[0] = 0; mainGame->dInfo.time_left[0] = 0;
mainGame->dInfo.time_left[1] = 0; mainGame->dInfo.time_left[1] = 0;
...@@ -411,9 +414,18 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) { ...@@ -411,9 +414,18 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
mainGame->chkHostPrepReady[selftype]->setChecked(false); mainGame->chkHostPrepReady[selftype]->setChecked(false);
mainGame->btnHostPrepDuelist->setEnabled(false); mainGame->btnHostPrepDuelist->setEnabled(false);
mainGame->btnHostPrepOB->setEnabled(true); mainGame->btnHostPrepOB->setEnabled(true);
mainGame->btnHostPrepReady->setVisible(true);
mainGame->btnHostPrepNotReady->setVisible(false);
} else { } else {
mainGame->btnHostPrepDuelist->setEnabled(true); mainGame->btnHostPrepDuelist->setEnabled(true);
mainGame->btnHostPrepOB->setEnabled(false); mainGame->btnHostPrepOB->setEnabled(false);
mainGame->btnHostPrepReady->setVisible(false);
mainGame->btnHostPrepNotReady->setVisible(false);
}
if(mainGame->chkHostPrepReady[0]->isChecked() && mainGame->chkHostPrepReady[1]->isChecked()) {
mainGame->btnHostPrepStart->setEnabled(true);
} else {
mainGame->btnHostPrepStart->setEnabled(false);
} }
} else { } else {
if(selftype < 4) { if(selftype < 4) {
...@@ -435,8 +447,18 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) { ...@@ -435,8 +447,18 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
if(selftype < 4) { if(selftype < 4) {
mainGame->chkHostPrepReady[selftype]->setEnabled(true); mainGame->chkHostPrepReady[selftype]->setEnabled(true);
mainGame->btnHostPrepOB->setEnabled(true); mainGame->btnHostPrepOB->setEnabled(true);
mainGame->btnHostPrepReady->setVisible(true);
mainGame->btnHostPrepNotReady->setVisible(false);
} else { } else {
mainGame->btnHostPrepOB->setEnabled(false); mainGame->btnHostPrepOB->setEnabled(false);
mainGame->btnHostPrepReady->setVisible(false);
mainGame->btnHostPrepNotReady->setVisible(false);
}
if(mainGame->chkHostPrepReady[0]->isChecked() && mainGame->chkHostPrepReady[1]->isChecked()
&& mainGame->chkHostPrepReady[2]->isChecked() && mainGame->chkHostPrepReady[3]->isChecked()) {
mainGame->btnHostPrepStart->setEnabled(true);
} else {
mainGame->btnHostPrepStart->setEnabled(false);
} }
} }
mainGame->dInfo.player_type = selftype; mainGame->dInfo.player_type = selftype;
...@@ -674,8 +696,16 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) { ...@@ -674,8 +696,16 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
BufferIO::CopyWStr(prename, mainGame->dInfo.clientname_tag, 20); BufferIO::CopyWStr(prename, mainGame->dInfo.clientname_tag, 20);
} else if(state == PLAYERCHANGE_READY) { } else if(state == PLAYERCHANGE_READY) {
mainGame->chkHostPrepReady[pos]->setChecked(true); mainGame->chkHostPrepReady[pos]->setChecked(true);
if(pos == selftype) {
mainGame->btnHostPrepReady->setVisible(false);
mainGame->btnHostPrepNotReady->setVisible(true);
}
} else if(state == PLAYERCHANGE_NOTREADY) { } else if(state == PLAYERCHANGE_NOTREADY) {
mainGame->chkHostPrepReady[pos]->setChecked(false); mainGame->chkHostPrepReady[pos]->setChecked(false);
if(pos == selftype) {
mainGame->btnHostPrepReady->setVisible(true);
mainGame->btnHostPrepNotReady->setVisible(false);
}
} else if(state == PLAYERCHANGE_LEAVE) { } else if(state == PLAYERCHANGE_LEAVE) {
mainGame->stHostPrepDuelist[pos]->setText(L""); mainGame->stHostPrepDuelist[pos]->setText(L"");
mainGame->chkHostPrepReady[pos]->setChecked(false); mainGame->chkHostPrepReady[pos]->setChecked(false);
...@@ -687,6 +717,12 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) { ...@@ -687,6 +717,12 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
mainGame->chkHostPrepReady[pos]->setChecked(false); mainGame->chkHostPrepReady[pos]->setChecked(false);
mainGame->stHostPrepOB->setText(watchbuf); mainGame->stHostPrepOB->setText(watchbuf);
} }
if(mainGame->chkHostPrepReady[0]->isChecked() && mainGame->chkHostPrepReady[1]->isChecked()
&& (!mainGame->dInfo.isTag || (mainGame->chkHostPrepReady[2]->isChecked() && mainGame->chkHostPrepReady[3]->isChecked()))) {
mainGame->btnHostPrepStart->setEnabled(true);
} else {
mainGame->btnHostPrepStart->setEnabled(false);
}
mainGame->gMutex.Unlock(); mainGame->gMutex.Unlock();
break; break;
} }
...@@ -1107,9 +1143,16 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) { ...@@ -1107,9 +1143,16 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
pcard->is_highlighting = true; pcard->is_highlighting = true;
mainGame->dField.highlighting_card = pcard; mainGame->dField.highlighting_card = pcard;
} }
wchar_t ynbuf[256]; int desc = BufferIO::ReadInt32(pbuf);
myswprintf(ynbuf, dataManager.GetSysString(200), dataManager.FormatLocation(l, s), dataManager.GetName(code)); if(desc == 0) {
myswprintf(textBuffer, L"%ls\n%ls", event_string, ynbuf); wchar_t ynbuf[256];
myswprintf(ynbuf, dataManager.GetSysString(200), dataManager.FormatLocation(l, s), dataManager.GetName(code));
myswprintf(textBuffer, L"%ls\n%ls", event_string, ynbuf);
} else if(desc < 2048) {
myswprintf(textBuffer, dataManager.GetSysString(desc), dataManager.GetName(code));
} else {
myswprintf(textBuffer, dataManager.GetDesc(desc), dataManager.GetName(code));
}
mainGame->gMutex.Lock(); mainGame->gMutex.Lock();
mainGame->SetStaticText(mainGame->stQMessage, 310, mainGame->textFont, textBuffer); mainGame->SetStaticText(mainGame->stQMessage, 310, mainGame->textFont, textBuffer);
mainGame->PopupElement(mainGame->wQuery); mainGame->PopupElement(mainGame->wQuery);
......
...@@ -191,8 +191,11 @@ bool Game::Initialize() { ...@@ -191,8 +191,11 @@ bool Game::Initialize() {
env->addStaticText(dataManager.GetSysString(1254), rect<s32>(10, 235, 110, 255), false, false, wHostPrepare); env->addStaticText(dataManager.GetSysString(1254), rect<s32>(10, 235, 110, 255), false, false, wHostPrepare);
cbDeckSelect = env->addComboBox(rect<s32>(120, 230, 270, 255), wHostPrepare); cbDeckSelect = env->addComboBox(rect<s32>(120, 230, 270, 255), wHostPrepare);
cbDeckSelect->setMaxSelectionRows(10); cbDeckSelect->setMaxSelectionRows(10);
btnHostPrepReady = env->addButton(rect<s32>(170, 180, 270, 205), wHostPrepare, BUTTON_HP_READY, dataManager.GetSysString(1218));
btnHostPrepNotReady = env->addButton(rect<s32>(170, 180, 270, 205), wHostPrepare, BUTTON_HP_NOTREADY, dataManager.GetSysString(1219));
btnHostPrepNotReady->setVisible(false);
btnHostPrepStart = env->addButton(rect<s32>(230, 280, 340, 305), wHostPrepare, BUTTON_HP_START, dataManager.GetSysString(1215)); btnHostPrepStart = env->addButton(rect<s32>(230, 280, 340, 305), wHostPrepare, BUTTON_HP_START, dataManager.GetSysString(1215));
btnHostPrepCancel = env->addButton(rect<s32>(350, 280, 460, 305), wHostPrepare, BUTTON_HP_CANCEL, dataManager.GetSysString(1212)); btnHostPrepCancel = env->addButton(rect<s32>(350, 280, 460, 305), wHostPrepare, BUTTON_HP_CANCEL, dataManager.GetSysString(1210));
//img //img
wCardImg = env->addStaticText(L"", rect<s32>(1, 1, 199, 273), true, false, 0, -1, true); wCardImg = env->addStaticText(L"", rect<s32>(1, 1, 199, 273), true, false, 0, -1, true);
wCardImg->setBackgroundColor(0xc0c0c0c0); wCardImg->setBackgroundColor(0xc0c0c0c0);
...@@ -272,7 +275,7 @@ bool Game::Initialize() { ...@@ -272,7 +275,7 @@ bool Game::Initialize() {
chkIgnoreDeckChanges = env->addCheckBox(false, rect<s32>(posX, posY, posX + 260, posY + 25), tabSystem, -1, dataManager.GetSysString(1357)); chkIgnoreDeckChanges = env->addCheckBox(false, rect<s32>(posX, posY, posX + 260, posY + 25), tabSystem, -1, dataManager.GetSysString(1357));
chkIgnoreDeckChanges->setChecked(gameConf.chkIgnoreDeckChanges != 0); chkIgnoreDeckChanges->setChecked(gameConf.chkIgnoreDeckChanges != 0);
posY += 30; posY += 30;
chkAutoSearch = env->addCheckBox(false, rect<s32>(posX, posY, posX + 225, posY + 25), tabSystem, CHECKBOX_AUTO_SEARCH, dataManager.GetSysString(1358)); chkAutoSearch = env->addCheckBox(false, rect<s32>(posX, posY, posX + 260, posY + 25), tabSystem, CHECKBOX_AUTO_SEARCH, dataManager.GetSysString(1358));
chkAutoSearch->setChecked(gameConf.auto_search_limit >= 0); chkAutoSearch->setChecked(gameConf.auto_search_limit >= 0);
// //
wHand = env->addWindow(rect<s32>(500, 450, 825, 605), false, L""); wHand = env->addWindow(rect<s32>(500, 450, 825, 605), false, L"");
...@@ -588,12 +591,12 @@ bool Game::Initialize() { ...@@ -588,12 +591,12 @@ bool Game::Initialize() {
btnChainIgnore->setVisible(false); btnChainIgnore->setVisible(false);
btnChainAlways->setVisible(false); btnChainAlways->setVisible(false);
btnChainWhenAvail->setVisible(false); btnChainWhenAvail->setVisible(false);
//cancel or finish
btnCancelOrFinish = env->addButton(rect<s32>(205, 230, 295, 265), 0, BUTTON_CANCEL_OR_FINISH, dataManager.GetSysString(1295));
btnCancelOrFinish->setVisible(false);
//shuffle //shuffle
btnShuffle = env->addButton(rect<s32>(205, 230, 295, 265), 0, BUTTON_CMD_SHUFFLE, dataManager.GetSysString(1297)); btnShuffle = env->addButton(rect<s32>(205, 230, 295, 265), 0, BUTTON_CMD_SHUFFLE, dataManager.GetSysString(1297));
btnShuffle->setVisible(false); btnShuffle->setVisible(false);
//cancel or finish
btnCancelOrFinish = env->addButton(rect<s32>(205, 230, 295, 265), 0, BUTTON_CANCEL_OR_FINISH, dataManager.GetSysString(1295));
btnCancelOrFinish->setVisible(false);
//leave/surrender/exit //leave/surrender/exit
btnLeaveGame = env->addButton(rect<s32>(205, 5, 295, 80), 0, BUTTON_LEAVE_GAME, L""); btnLeaveGame = env->addButton(rect<s32>(205, 5, 295, 80), 0, BUTTON_LEAVE_GAME, L"");
btnLeaveGame->setVisible(false); btnLeaveGame->setVisible(false);
...@@ -928,11 +931,7 @@ void Game::LoadConfig() { ...@@ -928,11 +931,7 @@ void Game::LoadConfig() {
gameConf.separate_clear_button = 1; gameConf.separate_clear_button = 1;
gameConf.auto_search_limit = -1; gameConf.auto_search_limit = -1;
gameConf.chkIgnoreDeckChanges = 0; gameConf.chkIgnoreDeckChanges = 0;
fseek(fp, 0, SEEK_END); while(fgets(linebuf, 256, fp)) {
int fsize = ftell(fp);
fseek(fp, 0, SEEK_SET);
while(ftell(fp) < fsize) {
fgets(linebuf, 256, fp);
sscanf(linebuf, "%s = %s", strbuf, valbuf); sscanf(linebuf, "%s = %s", strbuf, valbuf);
if(!strcmp(strbuf, "antialias")) { if(!strcmp(strbuf, "antialias")) {
gameConf.antialias = atoi(valbuf); gameConf.antialias = atoi(valbuf);
......
...@@ -262,6 +262,8 @@ public: ...@@ -262,6 +262,8 @@ public:
irr::gui::IGUIComboBox* cbDeckSelect; irr::gui::IGUIComboBox* cbDeckSelect;
irr::gui::IGUIStaticText* stHostPrepRule; irr::gui::IGUIStaticText* stHostPrepRule;
irr::gui::IGUIStaticText* stHostPrepOB; irr::gui::IGUIStaticText* stHostPrepOB;
irr::gui::IGUIButton* btnHostPrepReady;
irr::gui::IGUIButton* btnHostPrepNotReady;
irr::gui::IGUIButton* btnHostPrepStart; irr::gui::IGUIButton* btnHostPrepStart;
irr::gui::IGUIButton* btnHostPrepCancel; irr::gui::IGUIButton* btnHostPrepCancel;
//replay //replay
...@@ -462,6 +464,8 @@ extern Game* mainGame; ...@@ -462,6 +464,8 @@ extern Game* mainGame;
#define BUTTON_HP_CANCEL 123 #define BUTTON_HP_CANCEL 123
#define BUTTON_HP_KICK 124 #define BUTTON_HP_KICK 124
#define CHECKBOX_HP_READY 125 #define CHECKBOX_HP_READY 125
#define BUTTON_HP_READY 126
#define BUTTON_HP_NOTREADY 127
#define LISTBOX_REPLAY_LIST 130 #define LISTBOX_REPLAY_LIST 130
#define BUTTON_LOAD_REPLAY 131 #define BUTTON_LOAD_REPLAY 131
#define BUTTON_CANCEL_REPLAY 132 #define BUTTON_CANCEL_REPLAY 132
......
...@@ -34,11 +34,13 @@ void ClickButton(irr::gui::IGUIElement* btn) { ...@@ -34,11 +34,13 @@ void ClickButton(irr::gui::IGUIElement* btn) {
int main(int argc, char* argv[]) { int main(int argc, char* argv[]) {
#ifdef _WIN32 #ifdef _WIN32
#ifndef _DEBUG
wchar_t exepath[MAX_PATH]; wchar_t exepath[MAX_PATH];
GetModuleFileNameW(NULL, exepath, MAX_PATH); GetModuleFileNameW(NULL, exepath, MAX_PATH);
wchar_t* p = wcsrchr(exepath, '\\'); wchar_t* p = wcsrchr(exepath, '\\');
*p = '\0'; *p = '\0';
SetCurrentDirectoryW(exepath); SetCurrentDirectoryW(exepath);
#endif //_DEBUG
#endif //_WIN32 #endif //_WIN32
#ifdef _WIN32 #ifdef _WIN32
WORD wVersionRequested; WORD wVersionRequested;
......
...@@ -10,6 +10,21 @@ ...@@ -10,6 +10,21 @@
namespace ygo { namespace ygo {
void UpdateDeck() {
BufferIO::CopyWStr(mainGame->cbDeckSelect->getItem(mainGame->cbDeckSelect->getSelected()),
mainGame->gameConf.lastdeck, 64);
char deckbuf[1024];
char* pdeck = deckbuf;
BufferIO::WriteInt32(pdeck, deckManager.current_deck.main.size() + deckManager.current_deck.extra.size());
BufferIO::WriteInt32(pdeck, deckManager.current_deck.side.size());
for(size_t i = 0; i < deckManager.current_deck.main.size(); ++i)
BufferIO::WriteInt32(pdeck, deckManager.current_deck.main[i]->first);
for(size_t i = 0; i < deckManager.current_deck.extra.size(); ++i)
BufferIO::WriteInt32(pdeck, deckManager.current_deck.extra[i]->first);
for(size_t i = 0; i < deckManager.current_deck.side.size(); ++i)
BufferIO::WriteInt32(pdeck, deckManager.current_deck.side[i]->first);
DuelClient::SendBufferToServer(CTOS_UPDATE_DECK, deckbuf, pdeck - deckbuf);
}
bool MenuHandler::OnEvent(const irr::SEvent& event) { bool MenuHandler::OnEvent(const irr::SEvent& event) {
switch(event.EventType) { switch(event.EventType) {
case irr::EET_GUI_EVENT: { case irr::EET_GUI_EVENT: {
...@@ -128,10 +143,22 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) { ...@@ -128,10 +143,22 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
DuelClient::SendPacketToServer(CTOS_HS_KICK, csk); DuelClient::SendPacketToServer(CTOS_HS_KICK, csk);
break; break;
} }
case BUTTON_HP_START: { case BUTTON_HP_READY: {
if(!mainGame->chkHostPrepReady[0]->isChecked() if(mainGame->cbDeckSelect->getSelected() == -1 ||
|| !mainGame->chkHostPrepReady[1]->isChecked()) !deckManager.LoadDeck(mainGame->cbDeckSelect->getItem(mainGame->cbDeckSelect->getSelected()))) {
break; break;
}
UpdateDeck();
DuelClient::SendPacketToServer(CTOS_HS_READY);
mainGame->cbDeckSelect->setEnabled(false);
break;
}
case BUTTON_HP_NOTREADY: {
DuelClient::SendPacketToServer(CTOS_HS_NOTREADY);
mainGame->cbDeckSelect->setEnabled(true);
break;
}
case BUTTON_HP_START: {
DuelClient::SendPacketToServer(CTOS_HS_START); DuelClient::SendPacketToServer(CTOS_HS_START);
break; break;
} }
...@@ -308,19 +335,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) { ...@@ -308,19 +335,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
static_cast<irr::gui::IGUICheckBox*>(caller)->setChecked(false); static_cast<irr::gui::IGUICheckBox*>(caller)->setChecked(false);
break; break;
} }
BufferIO::CopyWStr(mainGame->cbDeckSelect->getItem(mainGame->cbDeckSelect->getSelected()), UpdateDeck();
mainGame->gameConf.lastdeck, 64);
char deckbuf[1024];
char* pdeck = deckbuf;
BufferIO::WriteInt32(pdeck, deckManager.current_deck.main.size() + deckManager.current_deck.extra.size());
BufferIO::WriteInt32(pdeck, deckManager.current_deck.side.size());
for(size_t i = 0; i < deckManager.current_deck.main.size(); ++i)
BufferIO::WriteInt32(pdeck, deckManager.current_deck.main[i]->first);
for(size_t i = 0; i < deckManager.current_deck.extra.size(); ++i)
BufferIO::WriteInt32(pdeck, deckManager.current_deck.extra[i]->first);
for(size_t i = 0; i < deckManager.current_deck.side.size(); ++i)
BufferIO::WriteInt32(pdeck, deckManager.current_deck.side[i]->first);
DuelClient::SendBufferToServer(CTOS_UPDATE_DECK, deckbuf, pdeck - deckbuf);
DuelClient::SendPacketToServer(CTOS_HS_READY); DuelClient::SendPacketToServer(CTOS_HS_READY);
mainGame->cbDeckSelect->setEnabled(false); mainGame->cbDeckSelect->setEnabled(false);
} else { } else {
......
...@@ -159,18 +159,15 @@ bool Replay::OpenReplay(const wchar_t* name) { ...@@ -159,18 +159,15 @@ bool Replay::OpenReplay(const wchar_t* name) {
} }
if(!fp) if(!fp)
return false; return false;
fseek(fp, 0, SEEK_END);
comp_size = ftell(fp) - sizeof(pheader);
fseek(fp, 0, SEEK_SET);
fread(&pheader, sizeof(pheader), 1, fp); fread(&pheader, sizeof(pheader), 1, fp);
if(pheader.flag & REPLAY_COMPRESSED) { if(pheader.flag & REPLAY_COMPRESSED) {
fread(comp_data, 0x1000, 1, fp); comp_size = fread(comp_data, 1, 0x1000, fp);
fclose(fp); fclose(fp);
replay_size = pheader.datasize; replay_size = pheader.datasize;
if(LzmaUncompress(replay_data, &replay_size, comp_data, &comp_size, pheader.props, 5) != SZ_OK) if(LzmaUncompress(replay_data, &replay_size, comp_data, &comp_size, pheader.props, 5) != SZ_OK)
return false; return false;
} else { } else {
fread(replay_data, 0x20000, 1, fp); comp_size = fread(replay_data, 1, 0x20000, fp);
fclose(fp); fclose(fp);
replay_size = comp_size; replay_size = comp_size;
} }
......
...@@ -375,7 +375,7 @@ bool ReplayMode::ReplayAnalyze(char* msg, unsigned int len) { ...@@ -375,7 +375,7 @@ bool ReplayMode::ReplayAnalyze(char* msg, unsigned int len) {
} }
case MSG_SELECT_EFFECTYN: { case MSG_SELECT_EFFECTYN: {
player = BufferIO::ReadInt8(pbuf); player = BufferIO::ReadInt8(pbuf);
pbuf += 8; pbuf += 12;
return ReadReplayResponse(); return ReadReplayResponse();
} }
case MSG_SELECT_YESNO: { case MSG_SELECT_YESNO: {
......
...@@ -269,6 +269,7 @@ void SingleDuel::PlayerReady(DuelPlayer* dp, bool is_ready) { ...@@ -269,6 +269,7 @@ void SingleDuel::PlayerReady(DuelPlayer* dp, bool is_ready) {
ready[dp->type] = is_ready; ready[dp->type] = is_ready;
STOC_HS_PlayerChange scpc; STOC_HS_PlayerChange scpc;
scpc.status = (dp->type << 4) | (is_ready ? PLAYERCHANGE_READY : PLAYERCHANGE_NOTREADY); scpc.status = (dp->type << 4) | (is_ready ? PLAYERCHANGE_READY : PLAYERCHANGE_NOTREADY);
NetServer::SendPacketToPlayer(players[dp->type], STOC_HS_PLAYER_CHANGE, scpc);
if(players[1 - dp->type]) if(players[1 - dp->type])
NetServer::SendPacketToPlayer(players[1 - dp->type], STOC_HS_PLAYER_CHANGE, scpc); NetServer::SendPacketToPlayer(players[1 - dp->type], STOC_HS_PLAYER_CHANGE, scpc);
for(auto pit = observers.begin(); pit != observers.end(); ++pit) for(auto pit = observers.begin(); pit != observers.end(); ++pit)
...@@ -651,7 +652,7 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -651,7 +652,7 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
} }
case MSG_SELECT_EFFECTYN: { case MSG_SELECT_EFFECTYN: {
player = BufferIO::ReadInt8(pbuf); player = BufferIO::ReadInt8(pbuf);
pbuf += 8; pbuf += 12;
WaitforResponse(player); WaitforResponse(player);
NetServer::SendBufferToPlayer(players[player], STOC_GAME_MSG, offset, pbuf - offset); NetServer::SendBufferToPlayer(players[player], STOC_GAME_MSG, offset, pbuf - offset);
return 1; return 1;
......
...@@ -186,7 +186,7 @@ bool SingleMode::SinglePlayAnalyze(char* msg, unsigned int len) { ...@@ -186,7 +186,7 @@ bool SingleMode::SinglePlayAnalyze(char* msg, unsigned int len) {
} }
case MSG_SELECT_EFFECTYN: { case MSG_SELECT_EFFECTYN: {
player = BufferIO::ReadInt8(pbuf); player = BufferIO::ReadInt8(pbuf);
pbuf += 8; pbuf += 12;
DuelClient::ClientAnalyze(offset, pbuf - offset); DuelClient::ClientAnalyze(offset, pbuf - offset);
if(!DuelClient::ClientAnalyze(offset, pbuf - offset)) { if(!DuelClient::ClientAnalyze(offset, pbuf - offset)) {
mainGame->singleSignal.Reset(); mainGame->singleSignal.Reset();
...@@ -830,15 +830,10 @@ byte* SingleMode::ScriptReader(const char* script_name, int* slen) { ...@@ -830,15 +830,10 @@ byte* SingleMode::ScriptReader(const char* script_name, int* slen) {
#endif #endif
if(!fp) if(!fp)
return 0; return 0;
fseek(fp, 0, SEEK_END); int len = fread(buffer, 1, sizeof(buffer), fp);
unsigned int len = ftell(fp);
if(len > sizeof(buffer)) {
fclose(fp);
return 0;
}
fseek(fp, 0, SEEK_SET);
fread(buffer, len, 1, fp);
fclose(fp); fclose(fp);
if(len >= sizeof(buffer))
return 0;
*slen = len; *slen = len;
return buffer; return buffer;
} }
......
...@@ -240,7 +240,7 @@ void TagDuel::PlayerReady(DuelPlayer* dp, bool is_ready) { ...@@ -240,7 +240,7 @@ void TagDuel::PlayerReady(DuelPlayer* dp, bool is_ready) {
STOC_HS_PlayerChange scpc; STOC_HS_PlayerChange scpc;
scpc.status = (dp->type << 4) | (is_ready ? PLAYERCHANGE_READY : PLAYERCHANGE_NOTREADY); scpc.status = (dp->type << 4) | (is_ready ? PLAYERCHANGE_READY : PLAYERCHANGE_NOTREADY);
for(int i = 0; i < 4; ++i) for(int i = 0; i < 4; ++i)
if(players[i] && players[i] != dp) if(players[i])
NetServer::SendPacketToPlayer(players[i], STOC_HS_PLAYER_CHANGE, scpc); NetServer::SendPacketToPlayer(players[i], STOC_HS_PLAYER_CHANGE, scpc);
for(auto pit = observers.begin(); pit != observers.end(); ++pit) for(auto pit = observers.begin(); pit != observers.end(); ++pit)
NetServer::SendPacketToPlayer(*pit, STOC_HS_PLAYER_CHANGE, scpc); NetServer::SendPacketToPlayer(*pit, STOC_HS_PLAYER_CHANGE, scpc);
...@@ -584,7 +584,7 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -584,7 +584,7 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
} }
case MSG_SELECT_EFFECTYN: { case MSG_SELECT_EFFECTYN: {
player = BufferIO::ReadInt8(pbuf); player = BufferIO::ReadInt8(pbuf);
pbuf += 8; pbuf += 12;
WaitforResponse(player); WaitforResponse(player);
NetServer::SendBufferToPlayer(cur_player[player], STOC_GAME_MSG, offset, pbuf - offset); NetServer::SendBufferToPlayer(cur_player[player], STOC_GAME_MSG, offset, pbuf - offset);
return 1; return 1;
......
...@@ -46,6 +46,9 @@ ...@@ -46,6 +46,9 @@
!system 92 是否要解放对方怪兽进行上级召唤? !system 92 是否要解放对方怪兽进行上级召唤?
!system 93 是否要继续选择素材? !system 93 是否要继续选择素材?
!system 94 是否现在使用这张卡的效果? !system 94 是否现在使用这张卡的效果?
!system 95 是否使用[%ls]的效果?
!system 96 是否使用[%ls]的效果代替破坏?
!system 97 是否把[%ls]在魔法与陷阱区域放置?
!system 100 先攻 !system 100 先攻
!system 101 后攻 !system 101 后攻
!system 200 是否在[%ls]发动[%ls]的效果? !system 200 是否在[%ls]发动[%ls]的效果?
...@@ -249,6 +252,8 @@ ...@@ -249,6 +252,8 @@
!system 1215 开始 !system 1215 开始
!system 1216 消息 !system 1216 消息
!system 1217 刷新主机 !system 1217 刷新主机
!system 1218 准备
!system 1219 取消准备
!system 1220 昵称: !system 1220 昵称:
!system 1221 主机信息: !system 1221 主机信息:
!system 1222 主机密码: !system 1222 主机密码:
...@@ -496,6 +501,7 @@ ...@@ -496,6 +501,7 @@
!counter 0x40 指示物(No.51 怪腕之必杀摔角手) !counter 0x40 指示物(No.51 怪腕之必杀摔角手)
!counter 0x1041 捕食指示物 !counter 0x1041 捕食指示物
!counter 0x42 指示物(爆竹鬼) !counter 0x42 指示物(爆竹鬼)
!counter 0x43 缺陷指示物
#setnames, using tab for comment #setnames, using tab for comment
!setname 0x1 正义盟军 AOJ !setname 0x1 正义盟军 AOJ
!setname 0x2 次世代 ジェネクス !setname 0x2 次世代 ジェネクス
...@@ -833,3 +839,7 @@ ...@@ -833,3 +839,7 @@
!setname 0xff 幻透翼 クリアウィング !setname 0xff 幻透翼 クリアウィング
!setname 0x100 化学结合 ボンディング !setname 0x100 化学结合 ボンディング
!setname 0x101 码语者 コード・トーカー !setname 0x101 码语者 コード・トーカー
!setname 0x102 弹丸 ヴァレット
!setname 0x103 幻变骚灵 オルターガイスト
!setname 0x104 机怪虫 クローラー
!setname 0x105 玄化 メタファイズ
...@@ -26,4 +26,4 @@ draw_field_spell = 1 ...@@ -26,4 +26,4 @@ draw_field_spell = 1
separate_clear_button = 1 separate_clear_button = 1
#auto_search_limit >= 0: Start search automatically when the user enters N chars. #auto_search_limit >= 0: Start search automatically when the user enters N chars.
auto_search_limit = -1 auto_search_limit = -1
prompt_to_discard_deck_changes = 1 ignore_deck_changes = 0
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