Commit 1341a69b authored by nanahira's avatar nanahira

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

parents 901c96ed fb780c63
...@@ -814,6 +814,9 @@ bool Game::Initialize() { ...@@ -814,6 +814,9 @@ bool Game::Initialize() {
btnBotCancel = env->addButton(rect<s32>(459, 331, 569, 356), tabBot, BUTTON_CANCEL_SINGLEPLAY, dataManager.GetSysString(1210)); btnBotCancel = env->addButton(rect<s32>(459, 331, 569, 356), tabBot, BUTTON_CANCEL_SINGLEPLAY, dataManager.GetSysString(1210));
env->addStaticText(dataManager.GetSysString(1382), rect<s32>(360, 10, 550, 30), false, true, tabBot); env->addStaticText(dataManager.GetSysString(1382), rect<s32>(360, 10, 550, 30), false, true, tabBot);
stBotInfo = env->addStaticText(L"", rect<s32>(360, 40, 560, 160), false, true, tabBot); stBotInfo = env->addStaticText(L"", rect<s32>(360, 40, 560, 160), false, true, tabBot);
cbBotDeck = env->addComboBox(rect<s32>(360, 130, 560, 155), tabBot);
cbBotDeck->setMaxSelectionRows(6);
cbBotDeck->setVisible(false);
cbBotRule = env->addComboBox(rect<s32>(360, 165, 560, 190), tabBot, COMBOBOX_BOT_RULE); cbBotRule = env->addComboBox(rect<s32>(360, 165, 560, 190), tabBot, COMBOBOX_BOT_RULE);
cbBotRule->addItem(dataManager.GetSysString(1262)); cbBotRule->addItem(dataManager.GetSysString(1262));
cbBotRule->addItem(dataManager.GetSysString(1263)); cbBotRule->addItem(dataManager.GetSysString(1263));
...@@ -1265,6 +1268,7 @@ void Game::RefreshBot() { ...@@ -1265,6 +1268,7 @@ void Game::RefreshBot() {
newinfo.support_master_rule_3 = !!strstr(linebuf, "SUPPORT_MASTER_RULE_3"); newinfo.support_master_rule_3 = !!strstr(linebuf, "SUPPORT_MASTER_RULE_3");
newinfo.support_new_master_rule = !!strstr(linebuf, "SUPPORT_NEW_MASTER_RULE"); newinfo.support_new_master_rule = !!strstr(linebuf, "SUPPORT_NEW_MASTER_RULE");
newinfo.support_master_rule_2020 = !!strstr(linebuf, "SUPPORT_MASTER_RULE_2020"); newinfo.support_master_rule_2020 = !!strstr(linebuf, "SUPPORT_MASTER_RULE_2020");
newinfo.select_deckfile = !!strstr(linebuf, "SELECT_DECKFILE");
int rule = cbBotRule->getSelected() + 3; int rule = cbBotRule->getSelected() + 3;
if((rule == 3 && newinfo.support_master_rule_3) if((rule == 3 && newinfo.support_master_rule_3)
|| (rule == 4 && newinfo.support_new_master_rule) || (rule == 4 && newinfo.support_new_master_rule)
...@@ -1280,8 +1284,23 @@ void Game::RefreshBot() { ...@@ -1280,8 +1284,23 @@ void Game::RefreshBot() {
for(unsigned int i = 0; i < botInfo.size(); ++i) { for(unsigned int i = 0; i < botInfo.size(); ++i) {
lstBotList->addItem(botInfo[i].name); lstBotList->addItem(botInfo[i].name);
} }
if(botInfo.size() == 0) if(botInfo.size() == 0) {
SetStaticText(stBotInfo, 200, guiFont, dataManager.GetSysString(1385)); SetStaticText(stBotInfo, 200, guiFont, dataManager.GetSysString(1385));
}
else {
cbBotDeck->clear();
cbBotDeck->setVisible(false);
irr::gui::IGUIComboBox* cbDeck = cbBotDeck;
FileSystem::TraversalDir(gameConf.bot_deck_path, [cbDeck](const wchar_t* name, bool isdir) {
if(!isdir && wcsrchr(name, '.') && !mywcsncasecmp(wcsrchr(name, '.'), L".ydk", 4)) {
size_t len = wcslen(name);
wchar_t deckname[256];
wcsncpy(deckname, name, len - 4);
deckname[len - 4] = 0;
cbDeck->addItem(deckname);
}
});
}
} }
bool Game::LoadConfigFromFile(const char* file) { bool Game::LoadConfigFromFile(const char* file) {
FILE* fp = fopen(file, "r"); FILE* fp = fopen(file, "r");
...@@ -1419,6 +1438,9 @@ bool Game::LoadConfigFromFile(const char* file) { ...@@ -1419,6 +1438,9 @@ bool Game::LoadConfigFromFile(const char* file) {
} else if (!strcmp(strbuf, "locale")) { } else if (!strcmp(strbuf, "locale")) {
BufferIO::DecodeUTF8(valbuf, wstr); BufferIO::DecodeUTF8(valbuf, wstr);
BufferIO::CopyWStr(wstr, gameConf.locale, 64); BufferIO::CopyWStr(wstr, gameConf.locale, 64);
} else if(!strcmp(strbuf, "bot_deck_path")) {
BufferIO::DecodeUTF8(valbuf, wstr);
BufferIO::CopyWStr(wstr, gameConf.bot_deck_path, 64);
} }
} }
} }
......
...@@ -112,6 +112,7 @@ struct BotInfo { ...@@ -112,6 +112,7 @@ struct BotInfo {
bool support_master_rule_3; bool support_master_rule_3;
bool support_new_master_rule; bool support_new_master_rule;
bool support_master_rule_2020; bool support_master_rule_2020;
bool select_deckfile;
}; };
struct FadingUnit { struct FadingUnit {
...@@ -407,6 +408,7 @@ public: ...@@ -407,6 +408,7 @@ public:
irr::gui::IGUIStaticText* stBotInfo; irr::gui::IGUIStaticText* stBotInfo;
irr::gui::IGUIButton* btnStartBot; irr::gui::IGUIButton* btnStartBot;
irr::gui::IGUIButton* btnBotCancel; irr::gui::IGUIButton* btnBotCancel;
irr::gui::IGUIComboBox* cbBotDeck;
irr::gui::IGUIComboBox* cbBotRule; irr::gui::IGUIComboBox* cbBotRule;
irr::gui::IGUICheckBox* chkBotHand; irr::gui::IGUICheckBox* chkBotHand;
irr::gui::IGUICheckBox* chkBotNoCheckDeck; irr::gui::IGUICheckBox* chkBotNoCheckDeck;
......
...@@ -338,9 +338,14 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) { ...@@ -338,9 +338,14 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
si.cb = sizeof(si); si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi)); ZeroMemory(&pi, sizeof(pi));
wchar_t cmd[MAX_PATH]; wchar_t cmd[MAX_PATH];
wchar_t arg1[512];
if(mainGame->botInfo[sel].select_deckfile)
myswprintf(arg1, L"%ls DeckFile='%ls'", mainGame->botInfo[sel].command, mainGame->cbBotDeck->getItem(mainGame->cbBotDeck->getSelected()));
else
myswprintf(arg1, L"%ls", mainGame->botInfo[sel].command);
int flag = 0; int flag = 0;
flag += (mainGame->chkBotHand->isChecked() ? 0x1 : 0); flag += (mainGame->chkBotHand->isChecked() ? 0x1 : 0);
myswprintf(cmd, L"Bot.exe \"%ls\" %d %d", mainGame->botInfo[sel].command, flag, mainGame->gameConf.serverport); myswprintf(cmd, L"Bot.exe \"%ls\" %d %d", arg1, flag, mainGame->gameConf.serverport);
if(!CreateProcessW(NULL, cmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) if(!CreateProcessW(NULL, cmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
{ {
NetServer::StopServer(); NetServer::StopServer();
...@@ -349,8 +354,13 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) { ...@@ -349,8 +354,13 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
#else #else
if(fork() == 0) { if(fork() == 0) {
usleep(100000); usleep(100000);
wchar_t warg1[512];
if(mainGame->botInfo[sel].select_deckfile)
myswprintf(warg1, L"%ls DeckFile='%ls'", mainGame->botInfo[sel].command, mainGame->cbBotDeck->getItem(mainGame->cbBotDeck->getSelected()));
else
myswprintf(warg1, L"%ls", mainGame->botInfo[sel].command);
char arg1[512]; char arg1[512];
BufferIO::EncodeUTF8(mainGame->botInfo[sel].command, arg1); BufferIO::EncodeUTF8(warg1, arg1);
int flag = 0; int flag = 0;
flag += (mainGame->chkBotHand->isChecked() ? 0x1 : 0); flag += (mainGame->chkBotHand->isChecked() ? 0x1 : 0);
char arg2[8]; char arg2[8];
...@@ -563,6 +573,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) { ...@@ -563,6 +573,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
if(sel == -1) if(sel == -1)
break; break;
mainGame->SetStaticText(mainGame->stBotInfo, 200, mainGame->guiFont, mainGame->botInfo[sel].desc); mainGame->SetStaticText(mainGame->stBotInfo, 200, mainGame->guiFont, mainGame->botInfo[sel].desc);
mainGame->cbBotDeck->setVisible(mainGame->botInfo[sel].select_deckfile);
break; break;
} }
} }
......
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