mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-01-26 18:35:20 +00:00
Don't block when actor is paralyzed
This commit is contained in:
parent
28a0899d2b
commit
9897f14c3c
@ -55,11 +55,24 @@ namespace MWMechanics
|
||||
if (!blocker.getClass().hasInventoryStore(blocker))
|
||||
return false;
|
||||
|
||||
if (blocker.getClass().getCreatureStats(blocker).getKnockedDown()
|
||||
|| blocker.getClass().getCreatureStats(blocker).getHitRecovery())
|
||||
MWMechanics::CreatureStats& blockerStats = blocker.getClass().getCreatureStats(blocker);
|
||||
|
||||
if (blockerStats.getKnockedDown() // Used for both knockout or knockdown
|
||||
|| blockerStats.getHitRecovery()
|
||||
|| blockerStats.getMagicEffects().get(ESM::MagicEffect::Paralyze).mMagnitude > 0)
|
||||
return false;
|
||||
|
||||
// Don't block when in spellcasting state (shield is equipped, but not visible)
|
||||
if (blockerStats.getDrawState() == DrawState_Spell)
|
||||
return false;
|
||||
|
||||
MWWorld::InventoryStore& inv = blocker.getClass().getInventoryStore(blocker);
|
||||
|
||||
// Don't block when in hand-to-hand combat (shield is equipped, but not visible)
|
||||
if (blockerStats.getDrawState() == DrawState_Weapon &&
|
||||
inv.getSlot(MWWorld::InventoryStore::Slot_CarriedRight) == inv.end())
|
||||
return false;
|
||||
|
||||
MWWorld::ContainerStoreIterator shield = inv.getSlot(MWWorld::InventoryStore::Slot_CarriedLeft);
|
||||
if (shield == inv.end() || shield->getTypeName() != typeid(ESM::Armor).name())
|
||||
return false;
|
||||
@ -73,17 +86,6 @@ namespace MWMechanics
|
||||
if (angle.valueDegrees() > gmst.find("fCombatBlockRightAngle")->getFloat())
|
||||
return false;
|
||||
|
||||
MWMechanics::CreatureStats& blockerStats = blocker.getClass().getCreatureStats(blocker);
|
||||
|
||||
// Don't block when in spellcasting state (shield is equipped, but not visible)
|
||||
if (blockerStats.getDrawState() == DrawState_Spell)
|
||||
return false;
|
||||
|
||||
// Don't block when in hand-to-hand combat (shield is equipped, but not visible)
|
||||
if (blockerStats.getDrawState() == DrawState_Weapon &&
|
||||
inv.getSlot(MWWorld::InventoryStore::Slot_CarriedRight) == inv.end())
|
||||
return false;
|
||||
|
||||
MWMechanics::CreatureStats& attackerStats = attacker.getClass().getCreatureStats(attacker);
|
||||
|
||||
float blockTerm = blocker.getClass().getSkill(blocker, ESM::Skill::Block) + 0.2 * blockerStats.getAttribute(ESM::Attribute::Agility).getModified()
|
||||
|
Loading…
x
Reference in New Issue
Block a user