Add sounds for security skill

This commit is contained in:
scrawl 2013-05-19 19:48:51 +02:00
parent 7a2d1cd8ce
commit 5173779f4b
3 changed files with 31 additions and 26 deletions

View file

@ -13,7 +13,8 @@
namespace MWMechanics namespace MWMechanics
{ {
void Security::pickLock(const MWWorld::Ptr &actor, const MWWorld::Ptr &lock, const MWWorld::Ptr &lockpick) void Security::pickLock(const MWWorld::Ptr &actor, const MWWorld::Ptr &lock, const MWWorld::Ptr &lockpick,
std::string& resultMessage, std::string& resultSound)
{ {
if (lock.getCellRef().mLockLevel <= 0) if (lock.getCellRef().mLockLevel <= 0)
return; return;
@ -35,25 +36,21 @@ namespace MWMechanics
x *= pickQuality * fatigueTerm; x *= pickQuality * fatigueTerm;
x += fPickLockMult * lockStrength; x += fPickLockMult * lockStrength;
bool isPlayer = actor == MWBase::Environment::get().getWorld()->getPlayer().getPlayer(); resultSound = "Open Lock Fail";
if (x <= 0) if (x <= 0)
{ resultMessage = "#{sLockImpossible}";
if (isPlayer)
MWBase::Environment::get().getWindowManager()->messageBox("#{sLockImpossible}");
}
else else
{ {
int roll = static_cast<float> (std::rand()) / RAND_MAX * 100; int roll = static_cast<float> (std::rand()) / RAND_MAX * 100;
if (roll <= x) if (roll <= x)
{ {
MWWorld::Class::get(lock).unlock(lock); MWWorld::Class::get(lock).unlock(lock);
if (isPlayer) resultMessage = "#{sLockSuccess}";
MWBase::Environment::get().getWindowManager()->messageBox("#{sLockSuccess}"); resultSound = "Open Lock";
MWWorld::Class::get(actor).skillUsageSucceeded(actor, ESM::Skill::Security, 1); MWWorld::Class::get(actor).skillUsageSucceeded(actor, ESM::Skill::Security, 1);
} }
else if (isPlayer) else
MWBase::Environment::get().getWindowManager()->messageBox("#{sLockFail}"); resultMessage = "#{sLockFail}";
} }
if (lockpick.getCellRef().mCharge == -1) if (lockpick.getCellRef().mCharge == -1)
@ -63,7 +60,8 @@ namespace MWMechanics
lockpick.getRefData().setCount(0); lockpick.getRefData().setCount(0);
} }
void Security::probeTrap(const MWWorld::Ptr &actor, const MWWorld::Ptr &trap, const MWWorld::Ptr &probe) void Security::probeTrap(const MWWorld::Ptr &actor, const MWWorld::Ptr &trap, const MWWorld::Ptr &probe,
std::string& resultMessage, std::string& resultSound)
{ {
if (trap.getCellRef().mTrap == "") if (trap.getCellRef().mTrap == "")
return; return;
@ -87,25 +85,22 @@ namespace MWMechanics
x += fTrapCostMult * trapSpellPoints; x += fTrapCostMult * trapSpellPoints;
x *= probeQuality * fatigueTerm; x *= probeQuality * fatigueTerm;
bool isPlayer = actor == MWBase::Environment::get().getWorld()->getPlayer().getPlayer(); resultSound = "Disarm Trap Fail";
if (x <= 0) if (x <= 0)
{ resultMessage = "#{sTrapImpossible}";
if (isPlayer)
MWBase::Environment::get().getWindowManager()->messageBox("#{sTrapImpossible}");
}
else else
{ {
int roll = static_cast<float> (std::rand()) / RAND_MAX * 100; int roll = static_cast<float> (std::rand()) / RAND_MAX * 100;
if (roll <= x) if (roll <= x)
{ {
trap.getCellRef().mTrap = ""; trap.getCellRef().mTrap = "";
if (isPlayer)
MWBase::Environment::get().getWindowManager()->messageBox("#{sTrapSuccess}"); resultSound = "Disarm Trap";
resultMessage = "#{sTrapSuccess}";
MWWorld::Class::get(actor).skillUsageSucceeded(actor, ESM::Skill::Security, 0); MWWorld::Class::get(actor).skillUsageSucceeded(actor, ESM::Skill::Security, 0);
} }
else if (isPlayer) else
MWBase::Environment::get().getWindowManager()->messageBox("#{sTrapFail}"); resultMessage = "#{sTrapFail}";
} }
if (probe.getCellRef().mCharge == -1) if (probe.getCellRef().mCharge == -1)

View file

@ -10,8 +10,10 @@ namespace MWMechanics
class Security class Security
{ {
public: public:
static void pickLock (const MWWorld::Ptr& actor, const MWWorld::Ptr& lock, const MWWorld::Ptr& lockpick); static void pickLock (const MWWorld::Ptr& actor, const MWWorld::Ptr& lock, const MWWorld::Ptr& lockpick,
static void probeTrap (const MWWorld::Ptr& actor, const MWWorld::Ptr& trap, const MWWorld::Ptr& probe); std::string& resultMessage, std::string& resultSound);
static void probeTrap (const MWWorld::Ptr& actor, const MWWorld::Ptr& trap, const MWWorld::Ptr& probe,
std::string& resultMessage, std::string& resultSound);
}; };
} }

View file

@ -4,6 +4,7 @@
#include "../mwbase/environment.hpp" #include "../mwbase/environment.hpp"
#include "../mwbase/world.hpp" #include "../mwbase/world.hpp"
#include "../mwbase/windowmanager.hpp" #include "../mwbase/windowmanager.hpp"
#include "../mwbase/soundmanager.hpp"
#include "../mwworld/ptr.hpp" #include "../mwworld/ptr.hpp"
#include "../mwworld/inventorystore.hpp" #include "../mwworld/inventorystore.hpp"
@ -156,19 +157,26 @@ namespace MWWorld
if (anim->isPriorityActive(MWMechanics::Priority_Weapon)) if (anim->isPriorityActive(MWMechanics::Priority_Weapon))
return; return;
std::string resultMessage, resultSound;
if (item.getTypeName() == typeid(ESM::Lockpick).name()) if (item.getTypeName() == typeid(ESM::Lockpick).name())
{ {
if (!target.isEmpty()) if (!target.isEmpty())
MWMechanics::Security::pickLock(getPlayer(), target, item); MWMechanics::Security::pickLock(getPlayer(), target, item, resultMessage, resultSound);
anim->play("pickprobe", MWMechanics::Priority_Weapon, MWRender::Animation::Group_UpperBody, true, "start", "stop", 0.0, 0); anim->play("pickprobe", MWMechanics::Priority_Weapon, MWRender::Animation::Group_UpperBody, true, "start", "stop", 0.0, 0);
} }
else if (item.getTypeName() == typeid(ESM::Probe).name()) else if (item.getTypeName() == typeid(ESM::Probe).name())
{ {
if (!target.isEmpty()) if (!target.isEmpty())
MWMechanics::Security::probeTrap(getPlayer(), target, item); MWMechanics::Security::probeTrap(getPlayer(), target, item, resultMessage, resultSound);
anim->play("pickprobe", MWMechanics::Priority_Weapon, MWRender::Animation::Group_UpperBody, true, "start", "stop", 0.0, 0); anim->play("pickprobe", MWMechanics::Priority_Weapon, MWRender::Animation::Group_UpperBody, true, "start", "stop", 0.0, 0);
} }
if (!resultMessage.empty())
MWBase::Environment::get().getWindowManager()->messageBox(resultMessage);
if (!resultSound.empty())
MWBase::Environment::get().getSoundManager()->playSound(resultSound,1,1);
// tool used up? // tool used up?
if (!item.getRefData().getCount()) if (!item.getRefData().getCount())
MWBase::Environment::get().getWindowManager()->setSelectedWeapon(MWWorld::Ptr()); MWBase::Environment::get().getWindowManager()->setSelectedWeapon(MWWorld::Ptr());