From ec921eefc8a0c51761d8aede1a088acef61cb926 Mon Sep 17 00:00:00 2001 From: David Cernat Date: Fri, 26 May 2017 02:13:31 +0300 Subject: [PATCH] [Client] Prevent players from getting stuck in drag and drop when their opened containers are deleted --- apps/openmw/mwmp/WorldEvent.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwmp/WorldEvent.cpp b/apps/openmw/mwmp/WorldEvent.cpp index 4b142afe9..befdff335 100644 --- a/apps/openmw/mwmp/WorldEvent.cpp +++ b/apps/openmw/mwmp/WorldEvent.cpp @@ -115,7 +115,7 @@ void WorldEvent::editContainers(MWWorld::CellStore* cellStore) CurrentContainer *currentContainer = &mwmp::Main::get().getLocalPlayer()->currentContainer; if (currentContainer->refNumIndex == ptrFound.getCellRef().getRefNum().mIndex && - Misc::StringUtils::ciEqual(currentContainer->refId, ptrFound.getCellRef().getRefId())) + currentContainer->mpNum == ptrFound.getCellRef().getMpNum()) { MWBase::Environment::get().getWindowManager()->removeGuiMode(MWGui::GM_Container); MWBase::Environment::get().getWindowManager()->openContainer(ptrFound, currentContainer->loot); @@ -179,6 +179,19 @@ void WorldEvent::deleteObjects(MWWorld::CellStore* cellStore) LOG_APPEND(Log::LOG_VERBOSE, "-- Found %s, %i, %i", ptrFound.getCellRef().getRefId().c_str(), ptrFound.getCellRef().getRefNum(), ptrFound.getCellRef().getMpNum()); + // If we are in a container, and it happens to be this object, exit it + if (MWBase::Environment::get().getWindowManager()->containsMode(MWGui::GM_Container)) + { + CurrentContainer *currentContainer = &mwmp::Main::get().getLocalPlayer()->currentContainer; + + if (currentContainer->refNumIndex == ptrFound.getCellRef().getRefNum().mIndex && + currentContainer->mpNum == ptrFound.getCellRef().getMpNum()) + { + MWBase::Environment::get().getWindowManager()->removeGuiMode(MWGui::GM_Container); + MWBase::Environment::get().getWindowManager()->setDragDrop(false); + } + } + MWBase::Environment::get().getWorld()->deleteObject(ptrFound); } }