mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-01-19 22:53:50 +00:00
commit
2329812988
4 changed files with 38 additions and 18 deletions
|
@ -7,6 +7,7 @@
|
||||||
#include "../mwbase/world.hpp"
|
#include "../mwbase/world.hpp"
|
||||||
#include "../mwbase/windowmanager.hpp"
|
#include "../mwbase/windowmanager.hpp"
|
||||||
#include "../mwbase/mechanicsmanager.hpp"
|
#include "../mwbase/mechanicsmanager.hpp"
|
||||||
|
#include "../mwbase/soundmanager.hpp"
|
||||||
|
|
||||||
#include "../mwworld/ptr.hpp"
|
#include "../mwworld/ptr.hpp"
|
||||||
#include "../mwworld/failedaction.hpp"
|
#include "../mwworld/failedaction.hpp"
|
||||||
|
@ -136,7 +137,8 @@ namespace MWClass
|
||||||
MWWorld::Ptr player = MWBase::Environment::get().getWorld ()->getPlayerPtr();
|
MWWorld::Ptr player = MWBase::Environment::get().getWorld ()->getPlayerPtr();
|
||||||
MWWorld::InventoryStore& invStore = player.getClass().getInventoryStore(player);
|
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;
|
bool hasKey = false;
|
||||||
std::string keyName;
|
std::string keyName;
|
||||||
|
|
||||||
|
@ -154,18 +156,26 @@ namespace MWClass
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (needKey && hasKey)
|
if ((isLocked || isTrapped) && hasKey)
|
||||||
{
|
{
|
||||||
MWBase::Environment::get().getWindowManager ()->messageBox (keyName + " #{sKeyUsed}");
|
MWBase::Environment::get().getWindowManager ()->messageBox (keyName + " #{sKeyUsed}");
|
||||||
|
if(isLocked)
|
||||||
unlock(ptr);
|
unlock(ptr);
|
||||||
// using a key disarms the trap
|
// using a key disarms the trap
|
||||||
|
if(isTrapped)
|
||||||
|
{
|
||||||
ptr.getCellRef().setTrap("");
|
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<MWWorld::Action> action (new MWWorld::ActionOpen(ptr));
|
boost::shared_ptr<MWWorld::Action> action (new MWWorld::ActionOpen(ptr));
|
||||||
return action;
|
return action;
|
||||||
|
@ -173,7 +183,7 @@ namespace MWClass
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Activate trap
|
// Activate trap
|
||||||
boost::shared_ptr<MWWorld::Action> action(new MWWorld::ActionTrap(actor, ptr.getCellRef().getTrap(), ptr));
|
boost::shared_ptr<MWWorld::Action> action(new MWWorld::ActionTrap(ptr.getCellRef().getTrap(), ptr));
|
||||||
action->setSound(trapActivationSound);
|
action->setSound(trapActivationSound);
|
||||||
return action;
|
return action;
|
||||||
}
|
}
|
||||||
|
|
|
@ -107,7 +107,8 @@ namespace MWClass
|
||||||
|
|
||||||
MWWorld::ContainerStore &invStore = actor.getClass().getContainerStore(actor);
|
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;
|
bool hasKey = false;
|
||||||
std::string keyName;
|
std::string keyName;
|
||||||
|
|
||||||
|
@ -125,21 +126,29 @@ namespace MWClass
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (needKey && hasKey)
|
if ((isLocked || isTrapped) && hasKey)
|
||||||
{
|
{
|
||||||
if(actor == MWMechanics::getPlayer())
|
if(actor == MWMechanics::getPlayer())
|
||||||
MWBase::Environment::get().getWindowManager()->messageBox(keyName + " #{sKeyUsed}");
|
MWBase::Environment::get().getWindowManager()->messageBox(keyName + " #{sKeyUsed}");
|
||||||
|
if(isLocked)
|
||||||
unlock(ptr); //Call the function here. because that makes sense.
|
unlock(ptr); //Call the function here. because that makes sense.
|
||||||
// using a key disarms the trap
|
// using a key disarms the trap
|
||||||
|
if(isTrapped)
|
||||||
|
{
|
||||||
ptr.getCellRef().setTrap("");
|
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
|
// Trap activation
|
||||||
boost::shared_ptr<MWWorld::Action> action(new MWWorld::ActionTrap(actor, ptr.getCellRef().getTrap(), ptr));
|
boost::shared_ptr<MWWorld::Action> action(new MWWorld::ActionTrap(ptr.getCellRef().getTrap(), ptr));
|
||||||
action->setSound(trapActivationSound);
|
action->setSound(trapActivationSound);
|
||||||
return action;
|
return action;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1305,7 +1305,9 @@ bool CharacterController::updateWeaponState()
|
||||||
if(!resultMessage.empty())
|
if(!resultMessage.empty())
|
||||||
MWBase::Environment::get().getWindowManager()->messageBox(resultMessage);
|
MWBase::Environment::get().getWindowManager()->messageBox(resultMessage);
|
||||||
if(!resultSound.empty())
|
if(!resultSound.empty())
|
||||||
MWBase::Environment::get().getSoundManager()->playSound(resultSound, 1.0f, 1.0f);
|
MWBase::Environment::get().getSoundManager()->playSound3D(target,
|
||||||
|
resultSound, 1.0f, 1.0f, MWBase::SoundManager::Play_TypeSfx,
|
||||||
|
MWBase::SoundManager::Play_Normal);
|
||||||
}
|
}
|
||||||
else if (ammunition)
|
else if (ammunition)
|
||||||
{
|
{
|
||||||
|
|
|
@ -18,10 +18,9 @@ namespace MWWorld
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/// @param spellId
|
/// @param spellId
|
||||||
/// @param actor Actor that activated the trap
|
|
||||||
/// @param trapSource
|
/// @param trapSource
|
||||||
ActionTrap (const Ptr& actor, const std::string& spellId, const Ptr& trapSource)
|
ActionTrap (const std::string& spellId, const Ptr& trapSource)
|
||||||
: Action(false, actor), mSpellId(spellId), mTrapSource(trapSource) {}
|
: Action(false, trapSource), mSpellId(spellId), mTrapSource(trapSource) {}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue