Commit 33c8b469 authored by edo9300's avatar edo9300

Added support for "custom mesage" in puzzles

parent 80794910
...@@ -1853,5 +1853,40 @@ void Game::ValidateName(irr::gui::IGUIEditBox* box) { ...@@ -1853,5 +1853,40 @@ void Game::ValidateName(irr::gui::IGUIEditBox* box) {
filtered[j] = 0; filtered[j] = 0;
box->setText(filtered); box->setText(filtered);
} }
std::wstring Game::ReadPuzzleMessage(const char* script_name) {
std::ifstream infile(script_name);
std::wstring str((std::istreambuf_iterator<char>(infile)),
std::istreambuf_iterator<char>());
std::wstring res = L"";
size_t start = str.find(L"#header");
if(start != std::wstring::npos) {
size_t end = str.rfind(L"#endheader");
res = str.substr(start + 7, end - (start + 7));
int len = 0;
for(wchar_t c : res) {
if(iswalnum(c))
break;
len++;
if(c == L'\n') {
break;
}
}
if(len)
res = res.substr(len);
}
return res;
}
std::string Game::ReadPuzzleBuffer(const char* script_name) {
std::ifstream infile(script_name);
std::string str((std::istreambuf_iterator<char>(infile)),
std::istreambuf_iterator<char>());
size_t start = str.rfind("#endheader");
if(start != std::string::npos) {
std::string res = str.substr(start + 10);
return res;
}
return str;
}
} }
...@@ -157,6 +157,8 @@ public: ...@@ -157,6 +157,8 @@ public:
recti ResizeElem(s32 x, s32 y, s32 x2, s32 y2); recti ResizeElem(s32 x, s32 y, s32 x2, s32 y2);
recti ResizeWin(s32 x, s32 y, s32 x2, s32 y2, bool chat = false); recti ResizeWin(s32 x, s32 y, s32 x2, s32 y2, bool chat = false);
void ValidateName(irr::gui::IGUIEditBox* box); void ValidateName(irr::gui::IGUIEditBox* box);
std::wstring ReadPuzzleMessage(const char* script_name);
std::string ReadPuzzleBuffer(const char* script_name);
Mutex gMutex; Mutex gMutex;
Mutex gBuffer; Mutex gBuffer;
......
...@@ -496,6 +496,18 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) { ...@@ -496,6 +496,18 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
mainGame->chkYrp->setEnabled(true); mainGame->chkYrp->setEnabled(true);
break; break;
} }
case LISTBOX_SINGLEPLAY_LIST: {
int sel = mainGame->lstSinglePlayList->getSelected();
if(sel == -1)
break;
const wchar_t* name = mainGame->lstSinglePlayList->getListItem(mainGame->lstSinglePlayList->getSelected());
wchar_t fname[256];
char filename[256];
myswprintf(fname, L"./single/%ls", name);
BufferIO::EncodeUTF8(fname, filename);
mainGame->stSinglePlayInfo->setText(mainGame->ReadPuzzleMessage(filename).c_str());
break;
}
} }
break; break;
} }
......
...@@ -221,11 +221,10 @@ namespace ygo { ...@@ -221,11 +221,10 @@ namespace ygo {
char filename[256]; char filename[256];
size_t slen = cur_replay.ReadInt16(); size_t slen = cur_replay.ReadInt16();
cur_replay.ReadData(filename, slen); cur_replay.ReadData(filename, slen);
filename[slen] = 0; std::string scriptbuff = mainGame->ReadPuzzleBuffer(filename);
if (!preload_script(pduel, filename, slen)) { if(!preload_script(pduel, filename, slen, scriptbuff.length(), (char *)scriptbuff.c_str()))
return false; return false;
} }
}
start_duel(pduel, opt); start_duel(pduel, opt);
return true; return true;
} }
......
...@@ -57,14 +57,17 @@ int SingleMode::SinglePlayThread(void* param) { ...@@ -57,14 +57,17 @@ int SingleMode::SinglePlayThread(void* param) {
mainGame->dInfo.turn = 0; mainGame->dInfo.turn = 0;
char filename[256]; char filename[256];
size_t slen = 0; size_t slen = 0;
std::string scriptbuff;
if(open_file) { if(open_file) {
open_file = false; open_file = false;
slen = BufferIO::EncodeUTF8(open_file_name, filename); slen = BufferIO::EncodeUTF8(open_file_name, filename);
if(!preload_script(pduel, filename, slen)) { scriptbuff = mainGame->ReadPuzzleBuffer(filename);
if(!preload_script(pduel, filename, slen, scriptbuff.length(), (char *)scriptbuff.c_str())) {
wchar_t fname[256]; wchar_t fname[256];
myswprintf(fname, L"./single/%ls", open_file_name); myswprintf(fname, L"./single/%ls", open_file_name);
slen = BufferIO::EncodeUTF8(fname, filename); slen = BufferIO::EncodeUTF8(fname, filename);
if(!preload_script(pduel, filename, slen)) scriptbuff = mainGame->ReadPuzzleBuffer(filename);
if(!preload_script(pduel, filename, slen, scriptbuff.length(), (char *)scriptbuff.c_str()))
slen = 0; slen = 0;
} }
} else { } else {
...@@ -72,7 +75,8 @@ int SingleMode::SinglePlayThread(void* param) { ...@@ -72,7 +75,8 @@ int SingleMode::SinglePlayThread(void* param) {
wchar_t fname[256]; wchar_t fname[256];
myswprintf(fname, L"./single/%ls", name); myswprintf(fname, L"./single/%ls", name);
slen = BufferIO::EncodeUTF8(fname, filename); slen = BufferIO::EncodeUTF8(fname, filename);
if(!preload_script(pduel, filename, slen)) scriptbuff = mainGame->ReadPuzzleBuffer(filename);
if(!preload_script(pduel, filename, slen, scriptbuff.length(), (char *)scriptbuff.c_str()))
slen = 0; slen = 0;
} }
if(slen == 0) { if(slen == 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