From 07937c741a4321f57668d3a61701336fbfe77f7d Mon Sep 17 00:00:00 2001 From: scrawl Date: Mon, 15 Jun 2015 16:19:05 +0200 Subject: [PATCH] Improve exception handling when starting a new game from the main menu --- apps/openmw/mwstate/statemanagerimp.cpp | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/apps/openmw/mwstate/statemanagerimp.cpp b/apps/openmw/mwstate/statemanagerimp.cpp index ce4d8f958..7c111a090 100644 --- a/apps/openmw/mwstate/statemanagerimp.cpp +++ b/apps/openmw/mwstate/statemanagerimp.cpp @@ -139,11 +139,28 @@ void MWState::StateManager::newGame (bool bypass) if (!bypass) MWBase::Environment::get().getWindowManager()->setNewGame (true); - MWBase::Environment::get().getScriptManager()->getGlobalScripts().addStartup(); + try + { + MWBase::Environment::get().getScriptManager()->getGlobalScripts().addStartup(); - MWBase::Environment::get().getWorld()->startNewGame (bypass); + MWBase::Environment::get().getWorld()->startNewGame (bypass); - mState = State_Running; + mState = State_Running; + } + catch (std::exception& e) + { + std::stringstream error; + error << "Failed to start new game: " << e.what(); + + std::cerr << error.str() << std::endl; + cleanup (true); + + MWBase::Environment::get().getWindowManager()->pushGuiMode (MWGui::GM_MainMenu); + + std::vector buttons; + buttons.push_back("#{sOk}"); + MWBase::Environment::get().getWindowManager()->interactiveMessageBox(error.str(), buttons); + } } void MWState::StateManager::endGame()