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) {
filtered[j] = 0;
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:
recti ResizeElem(s32 x, s32 y, s32 x2, s32 y2);
recti ResizeWin(s32 x, s32 y, s32 x2, s32 y2, bool chat = false);
void ValidateName(irr::gui::IGUIEditBox* box);
std::wstring ReadPuzzleMessage(const char* script_name);
std::string ReadPuzzleBuffer(const char* script_name);
Mutex gMutex;
Mutex gBuffer;
......
......@@ -496,6 +496,18 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
mainGame->chkYrp->setEnabled(true);
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;
}
......
......@@ -221,10 +221,9 @@ namespace ygo {
char filename[256];
size_t slen = cur_replay.ReadInt16();
cur_replay.ReadData(filename, slen);
filename[slen] = 0;
if (!preload_script(pduel, filename, slen)) {
std::string scriptbuff = mainGame->ReadPuzzleBuffer(filename);
if(!preload_script(pduel, filename, slen, scriptbuff.length(), (char *)scriptbuff.c_str()))
return false;
}
}
start_duel(pduel, opt);
return true;
......
......@@ -57,14 +57,17 @@ int SingleMode::SinglePlayThread(void* param) {
mainGame->dInfo.turn = 0;
char filename[256];
size_t slen = 0;
std::string scriptbuff;
if(open_file) {
open_file = false;
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];
myswprintf(fname, L"./single/%ls", open_file_name);
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;
}
} else {
......@@ -72,7 +75,8 @@ int SingleMode::SinglePlayThread(void* param) {
wchar_t fname[256];
myswprintf(fname, L"./single/%ls", name);
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;
}
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