forked from mirror/openmw-tes3mp
Cleanup Security class
This commit is contained in:
parent
5173779f4b
commit
2715520d6f
3 changed files with 28 additions and 27 deletions
|
@ -13,7 +13,17 @@
|
||||||
namespace MWMechanics
|
namespace MWMechanics
|
||||||
{
|
{
|
||||||
|
|
||||||
void Security::pickLock(const MWWorld::Ptr &actor, const MWWorld::Ptr &lock, const MWWorld::Ptr &lockpick,
|
Security::Security(const MWWorld::Ptr &actor)
|
||||||
|
{
|
||||||
|
CreatureStats& creatureStats = MWWorld::Class::get(actor).getCreatureStats(actor);
|
||||||
|
NpcStats& npcStats = MWWorld::Class::get(actor).getNpcStats(actor);
|
||||||
|
mAgility = creatureStats.getAttribute(ESM::Attribute::Agility).getModified();
|
||||||
|
mLuck = creatureStats.getAttribute(ESM::Attribute::Luck).getModified();
|
||||||
|
mSecuritySkill = npcStats.getSkill(ESM::Skill::Security).getModified();
|
||||||
|
mFatigueTerm = creatureStats.getFatigueTerm();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Security::pickLock(const MWWorld::Ptr &lock, const MWWorld::Ptr &lockpick,
|
||||||
std::string& resultMessage, std::string& resultSound)
|
std::string& resultMessage, std::string& resultSound)
|
||||||
{
|
{
|
||||||
if (lock.getCellRef().mLockLevel <= 0)
|
if (lock.getCellRef().mLockLevel <= 0)
|
||||||
|
@ -23,17 +33,10 @@ namespace MWMechanics
|
||||||
|
|
||||||
float pickQuality = lockpick.get<ESM::Lockpick>()->mBase->mData.mQuality;
|
float pickQuality = lockpick.get<ESM::Lockpick>()->mBase->mData.mQuality;
|
||||||
|
|
||||||
CreatureStats& creatureStats = MWWorld::Class::get(actor).getCreatureStats(actor);
|
|
||||||
NpcStats& npcStats = MWWorld::Class::get(actor).getNpcStats(actor);
|
|
||||||
float pcAgility = creatureStats.getAttribute(ESM::Attribute::Agility).getModified();
|
|
||||||
float pcLuck = creatureStats.getAttribute(ESM::Attribute::Luck).getModified();
|
|
||||||
float securitySkill = npcStats.getSkill(ESM::Skill::Security).getModified();
|
|
||||||
float fatigueTerm = creatureStats.getFatigueTerm();
|
|
||||||
|
|
||||||
float fPickLockMult = MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>().find("fPickLockMult")->getFloat();
|
float fPickLockMult = MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>().find("fPickLockMult")->getFloat();
|
||||||
|
|
||||||
float x = 0.2 * pcAgility + 0.1 * pcLuck + securitySkill;
|
float x = 0.2 * mAgility + 0.1 * mLuck + mSecuritySkill;
|
||||||
x *= pickQuality * fatigueTerm;
|
x *= pickQuality * mFatigueTerm;
|
||||||
x += fPickLockMult * lockStrength;
|
x += fPickLockMult * lockStrength;
|
||||||
|
|
||||||
resultSound = "Open Lock Fail";
|
resultSound = "Open Lock Fail";
|
||||||
|
@ -47,7 +50,7 @@ namespace MWMechanics
|
||||||
MWWorld::Class::get(lock).unlock(lock);
|
MWWorld::Class::get(lock).unlock(lock);
|
||||||
resultMessage = "#{sLockSuccess}";
|
resultMessage = "#{sLockSuccess}";
|
||||||
resultSound = "Open Lock";
|
resultSound = "Open Lock";
|
||||||
MWWorld::Class::get(actor).skillUsageSucceeded(actor, ESM::Skill::Security, 1);
|
MWWorld::Class::get(mActor).skillUsageSucceeded(mActor, ESM::Skill::Security, 1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
resultMessage = "#{sLockFail}";
|
resultMessage = "#{sLockFail}";
|
||||||
|
@ -60,30 +63,22 @@ 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 &trap, const MWWorld::Ptr &probe,
|
||||||
std::string& resultMessage, std::string& resultSound)
|
std::string& resultMessage, std::string& resultSound)
|
||||||
{
|
{
|
||||||
if (trap.getCellRef().mTrap == "")
|
if (trap.getCellRef().mTrap == "")
|
||||||
return;
|
return;
|
||||||
|
|
||||||
CreatureStats& creatureStats = MWWorld::Class::get(actor).getCreatureStats(actor);
|
|
||||||
NpcStats& npcStats = MWWorld::Class::get(actor).getNpcStats(actor);
|
|
||||||
|
|
||||||
float probeQuality = probe.get<ESM::Probe>()->mBase->mData.mQuality;
|
float probeQuality = probe.get<ESM::Probe>()->mBase->mData.mQuality;
|
||||||
|
|
||||||
const ESM::Spell* trapSpell = MWBase::Environment::get().getWorld()->getStore().get<ESM::Spell>().find(trap.getCellRef().mTrap);
|
const ESM::Spell* trapSpell = MWBase::Environment::get().getWorld()->getStore().get<ESM::Spell>().find(trap.getCellRef().mTrap);
|
||||||
float trapSpellPoints = trapSpell->mData.mCost;
|
float trapSpellPoints = trapSpell->mData.mCost;
|
||||||
|
|
||||||
float pcAgility = creatureStats.getAttribute(ESM::Attribute::Agility).getModified();
|
|
||||||
float pcLuck = creatureStats.getAttribute(ESM::Attribute::Luck).getModified();
|
|
||||||
float securitySkill = npcStats.getSkill(ESM::Skill::Security).getModified();
|
|
||||||
float fatigueTerm = creatureStats.getFatigueTerm();
|
|
||||||
|
|
||||||
float fTrapCostMult = MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>().find("fTrapCostMult")->getFloat();
|
float fTrapCostMult = MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>().find("fTrapCostMult")->getFloat();
|
||||||
|
|
||||||
float x = 0.2 * pcAgility + 0.1 * pcLuck + securitySkill;
|
float x = 0.2 * mAgility + 0.1 * mLuck + mSecuritySkill;
|
||||||
x += fTrapCostMult * trapSpellPoints;
|
x += fTrapCostMult * trapSpellPoints;
|
||||||
x *= probeQuality * fatigueTerm;
|
x *= probeQuality * mFatigueTerm;
|
||||||
|
|
||||||
resultSound = "Disarm Trap Fail";
|
resultSound = "Disarm Trap Fail";
|
||||||
if (x <= 0)
|
if (x <= 0)
|
||||||
|
@ -97,7 +92,7 @@ namespace MWMechanics
|
||||||
|
|
||||||
resultSound = "Disarm Trap";
|
resultSound = "Disarm Trap";
|
||||||
resultMessage = "#{sTrapSuccess}";
|
resultMessage = "#{sTrapSuccess}";
|
||||||
MWWorld::Class::get(actor).skillUsageSucceeded(actor, ESM::Skill::Security, 0);
|
MWWorld::Class::get(mActor).skillUsageSucceeded(mActor, ESM::Skill::Security, 0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
resultMessage = "#{sTrapFail}";
|
resultMessage = "#{sTrapFail}";
|
||||||
|
|
|
@ -10,10 +10,16 @@ namespace MWMechanics
|
||||||
class Security
|
class Security
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static void pickLock (const MWWorld::Ptr& actor, const MWWorld::Ptr& lock, const MWWorld::Ptr& lockpick,
|
Security (const MWWorld::Ptr& actor);
|
||||||
|
|
||||||
|
void pickLock (const MWWorld::Ptr& lock, const MWWorld::Ptr& lockpick,
|
||||||
std::string& resultMessage, std::string& resultSound);
|
std::string& resultMessage, std::string& resultSound);
|
||||||
static void probeTrap (const MWWorld::Ptr& actor, const MWWorld::Ptr& trap, const MWWorld::Ptr& probe,
|
void probeTrap (const MWWorld::Ptr& trap, const MWWorld::Ptr& probe,
|
||||||
std::string& resultMessage, std::string& resultSound);
|
std::string& resultMessage, std::string& resultSound);
|
||||||
|
|
||||||
|
private:
|
||||||
|
float mAgility, mLuck, mSecuritySkill, mFatigueTerm;
|
||||||
|
MWWorld::Ptr mActor;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -162,13 +162,13 @@ namespace MWWorld
|
||||||
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, resultMessage, resultSound);
|
MWMechanics::Security(getPlayer()).pickLock(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, resultMessage, resultSound);
|
MWMechanics::Security(getPlayer()).probeTrap(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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue