diff --git a/apps/openmw/mwclass/container.cpp b/apps/openmw/mwclass/container.cpp index 2e5b495e4f..09891652ab 100644 --- a/apps/openmw/mwclass/container.cpp +++ b/apps/openmw/mwclass/container.cpp @@ -137,7 +137,8 @@ namespace MWClass MWWorld::Ptr player = MWBase::Environment::get().getWorld ()->getPlayerPtr(); MWWorld::InventoryStore& invStore = player.getClass().getInventoryStore(player); - bool needKey = ptr.getCellRef().getLockLevel() > 0; + bool isLocked = ptr.getCellRef().getLockLevel() > 0; + bool isTrapped = !ptr.getCellRef().getTrap().empty(); bool hasKey = false; std::string keyName; @@ -155,24 +156,26 @@ namespace MWClass } } - if (needKey && hasKey) + if ((isLocked || isTrapped) && hasKey) { MWBase::Environment::get().getWindowManager ()->messageBox (keyName + " #{sKeyUsed}"); - unlock(ptr); + if(isLocked) + unlock(ptr); // using a key disarms the trap - if(!ptr.getCellRef().getTrap().empty()) + if(isTrapped) { ptr.getCellRef().setTrap(""); MWBase::Environment::get().getSoundManager()->playSound3D(ptr, "Disarm Trap", 1.0f, 1.0f, MWBase::SoundManager::Play_TypeSfx, MWBase::SoundManager::Play_Normal); + isTrapped = false; } } - if (!needKey || hasKey) + if (!isLocked || hasKey) { - if(ptr.getCellRef().getTrap().empty()) + if(!isTrapped) { boost::shared_ptr action (new MWWorld::ActionOpen(ptr)); return action; diff --git a/apps/openmw/mwclass/door.cpp b/apps/openmw/mwclass/door.cpp index 12130e5dff..a54b648974 100644 --- a/apps/openmw/mwclass/door.cpp +++ b/apps/openmw/mwclass/door.cpp @@ -107,7 +107,8 @@ namespace MWClass MWWorld::ContainerStore &invStore = actor.getClass().getContainerStore(actor); - bool needKey = ptr.getCellRef().getLockLevel() > 0; + bool isLocked = ptr.getCellRef().getLockLevel() > 0; + bool isTrapped = !ptr.getCellRef().getTrap().empty(); bool hasKey = false; std::string keyName; @@ -125,24 +126,26 @@ namespace MWClass } } - if (needKey && hasKey) + if ((isLocked || isTrapped) && hasKey) { if(actor == MWMechanics::getPlayer()) MWBase::Environment::get().getWindowManager()->messageBox(keyName + " #{sKeyUsed}"); - unlock(ptr); //Call the function here. because that makes sense. + if(isLocked) + unlock(ptr); //Call the function here. because that makes sense. // using a key disarms the trap - if(!ptr.getCellRef().getTrap().empty()) + if(isTrapped) { ptr.getCellRef().setTrap(""); MWBase::Environment::get().getSoundManager()->playSound3D(ptr, "Disarm Trap", 1.0f, 1.0f, MWBase::SoundManager::Play_TypeSfx, MWBase::SoundManager::Play_Normal); + isTrapped = false; } } - if (!needKey || hasKey) + if (!isLocked || hasKey) { - if(!ptr.getCellRef().getTrap().empty()) + if(isTrapped) { // Trap activation boost::shared_ptr action(new MWWorld::ActionTrap(ptr.getCellRef().getTrap(), ptr));