diff --git a/apps/openmw/mwgui/dialogue.cpp b/apps/openmw/mwgui/dialogue.cpp index 258e9174cf..e2b9f461ac 100644 --- a/apps/openmw/mwgui/dialogue.cpp +++ b/apps/openmw/mwgui/dialogue.cpp @@ -370,6 +370,11 @@ void DialogueWindow::addText(std::string text) mHistory->addDialogText("#B29154"+parseText(text)+"#B29154"); } +void DialogueWindow::addMessageBox(std::string text) +{ + mHistory->addDialogText("\n#FFFFFF"+text+"#B29154"); +} + void DialogueWindow::addTitle(std::string text) { // This is called from the dialogue manager, so text is diff --git a/apps/openmw/mwgui/dialogue.hpp b/apps/openmw/mwgui/dialogue.hpp index 082d925246..c4b86e6c87 100644 --- a/apps/openmw/mwgui/dialogue.hpp +++ b/apps/openmw/mwgui/dialogue.hpp @@ -65,6 +65,7 @@ namespace MWGui void setKeywords(std::list keyWord); void removeKeyword(std::string keyWord); void addText(std::string text); + void addMessageBox(std::string text); void addTitle(std::string text); void askQuestion(std::string question); void goodbye(); diff --git a/apps/openmw/mwgui/windowmanagerimp.cpp b/apps/openmw/mwgui/windowmanagerimp.cpp index caf6a4ab07..ebef71409e 100644 --- a/apps/openmw/mwgui/windowmanagerimp.cpp +++ b/apps/openmw/mwgui/windowmanagerimp.cpp @@ -537,14 +537,20 @@ void WindowManager::removeDialog(OEngine::GUI::Layout*dialog) void WindowManager::messageBox (const std::string& message, const std::vector& buttons) { - if (buttons.empty()) - { - mMessageBoxManager->createMessageBox(message); - } - else - { - mMessageBoxManager->createInteractiveMessageBox(message, buttons); - pushGuiMode(GM_InterMessageBox); + /* If there are no buttons, and there is a dialogue window open, messagebox goes to the dialogue window */ + if(buttons.empty() && std::find(mGuiModes.begin(), mGuiModes.end(), GM_Dialogue) != mGuiModes.end()) + mDialogueWindow->addMessageBox(MyGUI::LanguageManager::getInstance().replaceTags(message)); + + else{ + if (buttons.empty()) + { + mMessageBoxManager->createMessageBox(message); + } + else + { + mMessageBoxManager->createInteractiveMessageBox(message, buttons); + pushGuiMode(GM_InterMessageBox); + } } } diff --git a/apps/openmw/mwscript/containerextensions.cpp b/apps/openmw/mwscript/containerextensions.cpp index 7f4913b8a2..07cf3b9e3e 100644 --- a/apps/openmw/mwscript/containerextensions.cpp +++ b/apps/openmw/mwscript/containerextensions.cpp @@ -10,6 +10,7 @@ #include #include "../mwbase/environment.hpp" +#include "../mwbase/windowmanager.hpp" #include "../mwworld/manualref.hpp" #include "../mwworld/class.hpp" @@ -106,12 +107,41 @@ namespace MWScript throw std::runtime_error ("second argument for RemoveItem must be non-negative"); MWWorld::ContainerStore& store = MWWorld::Class::get (ptr).getContainerStore (ptr); + + std::string itemName = ""; for (MWWorld::ContainerStoreIterator iter (store.begin()); iter!=store.end() && count; ++iter) { if (toLower(iter->getCellRef().mRefID) == toLower(item)) { + switch(iter.getType()){ + case MWWorld::ContainerStore::Type_Potion: + itemName = iter->get()->mBase->mName; break; + case MWWorld::ContainerStore::Type_Apparatus: + itemName = iter->get()->mBase->mName; break; + case MWWorld::ContainerStore::Type_Armor: + itemName = iter->get()->mBase->mName; break; + case MWWorld::ContainerStore::Type_Book: + itemName = iter->get()->mBase->mName; break; + case MWWorld::ContainerStore::Type_Clothing: + itemName = iter->get()->mBase->mName; break; + case MWWorld::ContainerStore::Type_Ingredient: + itemName = iter->get()->mBase->mName; break; + case MWWorld::ContainerStore::Type_Light: + itemName = iter->get()->mBase->mName; break; + case MWWorld::ContainerStore::Type_Lockpick: + itemName = iter->get()->mBase->mName; break; + case MWWorld::ContainerStore::Type_Miscellaneous: + itemName = iter->get()->mBase->mName; break; + case MWWorld::ContainerStore::Type_Probe: + itemName = iter->get()->mBase->mName; break; + case MWWorld::ContainerStore::Type_Repair: + itemName = iter->get()->mBase->mName; break; + case MWWorld::ContainerStore::Type_Weapon: + itemName = iter->get()->mBase->mName; break; + } + if (iter->getRefData().getCount()<=count) { count -= iter->getRefData().getCount(); @@ -124,6 +154,8 @@ namespace MWScript } } } + + MWBase::Environment::get().getWindowManager()->messageBox(itemName + " has been removed from your inventory.", std::vector()); // To be fully compatible with original Morrowind, we would need to check if // count is >= 0 here and throw an exception. But let's be tollerant instead.