diff --git a/apps/openmw/mwgui/companionwindow.cpp b/apps/openmw/mwgui/companionwindow.cpp index 6ac8c9d187..13daeefc50 100644 --- a/apps/openmw/mwgui/companionwindow.cpp +++ b/apps/openmw/mwgui/companionwindow.cpp @@ -41,6 +41,15 @@ CompanionWindow::CompanionWindow(DragAndDrop *dragAndDrop, MessageBoxManager* ma void CompanionWindow::onItemSelected(int index) { + const ItemStack& item = mSortModel->getItem(index); + + // We can't take conjured items from a companion NPC + if (item.mBase.getCellRef().getRefId().size() > 6 && item.mBase.getCellRef().getRefId().substr(0,6) == "bound_") + { + MWBase::Environment::get().getWindowManager()->messageBox("#{sBarterDialog12}"); + return; + } + if (mDragAndDrop->mIsOnDragAndDrop) { mDragAndDrop->drop(mModel, mItemView); @@ -48,8 +57,6 @@ void CompanionWindow::onItemSelected(int index) return; } - const ItemStack& item = mSortModel->getItem(index); - MWWorld::Ptr object = item.mBase; int count = item.mCount; bool shift = MyGUI::InputManager::getInstance().isShiftPressed(); diff --git a/apps/openmw/mwgui/container.cpp b/apps/openmw/mwgui/container.cpp index 19fe4b94cb..633e536d70 100644 --- a/apps/openmw/mwgui/container.cpp +++ b/apps/openmw/mwgui/container.cpp @@ -113,8 +113,7 @@ namespace MWGui std::string sound = mItem.mBase.getClass().getDownSoundId(mItem.mBase); MWBase::Environment::get().getSoundManager()->playSound (sound, 1.0, 1.0); - // We can't drop a conjured item to the ground; the target container should always be the source container though if it's somehow not on your - // person and you're trying to take it, this would display the wrong message. (Dropping rather than taking). + // We can't drop a conjured item to the ground; the target container should always be the source container if (mItem.mBase.getCellRef().getRefId().size() > 6 && mItem.mBase.getCellRef().getRefId().substr(0,6) == "bound_" && targetModel != mSourceModel) { MWBase::Environment::get().getWindowManager()->messageBox("#{sBarterDialog12}"); @@ -175,6 +174,15 @@ namespace MWGui void ContainerWindow::onItemSelected(int index) { + const ItemStack& item = mSortModel->getItem(index); + + // We can't take a conjured item from a container (some NPC we're pickpocketing, a box, etc) + if (item.mBase.getCellRef().getRefId().size() > 6 && item.mBase.getCellRef().getRefId().substr(0,6) == "bound_") + { + MWBase::Environment::get().getWindowManager()->messageBox("#{sContentsMessage1}"); + return; + } + if (mDragAndDrop->mIsOnDragAndDrop) { if (!dynamic_cast(mModel)) @@ -182,8 +190,6 @@ namespace MWGui return; } - const ItemStack& item = mSortModel->getItem(index); - MWWorld::Ptr object = item.mBase; int count = item.mCount; bool shift = MyGUI::InputManager::getInstance().isShiftPressed(); diff --git a/apps/openmw/mwgui/inventoryitemmodel.cpp b/apps/openmw/mwgui/inventoryitemmodel.cpp index ad1a4e9537..8273b92a6c 100644 --- a/apps/openmw/mwgui/inventoryitemmodel.cpp +++ b/apps/openmw/mwgui/inventoryitemmodel.cpp @@ -61,6 +61,10 @@ void InventoryItemModel::removeItem (const ItemStack& item, size_t count) MWWorld::Ptr InventoryItemModel::moveItem(const ItemStack &item, size_t count, ItemModel *otherModel) { + // Can't move conjured items: This is a general fix that also takes care of issues with taking conjured items via the 'Take All' button. + if (item.mBase.getCellRef().getRefId().size() > 6 && item.mBase.getCellRef().getRefId().substr(0,6) == "bound_") + return MWWorld::Ptr(); + bool setNewOwner = false; // Are you dead? Then you wont need that anymore diff --git a/apps/openmw/mwgui/inventorywindow.cpp b/apps/openmw/mwgui/inventorywindow.cpp index 4f1ef7de8c..2ec30d5bd3 100644 --- a/apps/openmw/mwgui/inventorywindow.cpp +++ b/apps/openmw/mwgui/inventorywindow.cpp @@ -189,7 +189,7 @@ namespace MWGui if (mTrading) { - // Can't give bound items to a merchant + // Can't give cojured items to a merchant if (item.mBase.getCellRef().getRefId().size() > 6 && item.mBase.getCellRef().getRefId().substr(0,6) == "bound_") { MWBase::Environment::get().getSoundManager()->playSound (sound, 1.0, 1.0);