forked from mirror/openmw-tes3mp
Add sounds for security skill
This commit is contained in:
parent
7a2d1cd8ce
commit
5173779f4b
3 changed files with 31 additions and 26 deletions
|
@ -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)
|
||||||
|
|
|
@ -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);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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());
|
||||||
|
|
Loading…
Reference in a new issue