diff --git a/apps/openmw/mwclass/npc.cpp b/apps/openmw/mwclass/npc.cpp index 3ed45ac722..92ede8680a 100644 --- a/apps/openmw/mwclass/npc.cpp +++ b/apps/openmw/mwclass/npc.cpp @@ -739,18 +739,19 @@ namespace MWClass float Npc::getArmorRating (const MWWorld::Ptr& ptr) const { - MWWorld::InventoryStore& invStore = MWWorld::Class::get(ptr).getInventoryStore(ptr); - const MWWorld::Store &gmst = - MWBase::Environment::get().getWorld()->getStore().get(); + const MWBase::World *world = MWBase::Environment::get().getWorld(); + const MWWorld::Store &gmst = world->getStore().get(); - int ratings[MWWorld::InventoryStore::Slots]; + MWMechanics::NpcStats &stats = getNpcStats(ptr); + MWWorld::InventoryStore &invStore = getInventoryStore(ptr); int iBaseArmorSkill = gmst.find("iBaseArmorSkill")->getInt(); float fUnarmoredBase1 = gmst.find("fUnarmoredBase1")->getFloat(); float fUnarmoredBase2 = gmst.find("fUnarmoredBase2")->getFloat(); - int unarmoredSkill = MWWorld::Class::get(ptr).getNpcStats(ptr).getSkill(ESM::Skill::Unarmored).getModified(); + int unarmoredSkill = stats.getSkill(ESM::Skill::Unarmored).getModified(); - for (int i = 0; i < MWWorld::InventoryStore::Slots; ++i) + int ratings[MWWorld::InventoryStore::Slots]; + for(int i = 0;i < MWWorld::InventoryStore::Slots;i++) { MWWorld::ContainerStoreIterator it = invStore.getSlot(i); if (it == invStore.end() || it->getTypeName() != typeid(ESM::Armor).name()) @@ -760,28 +761,27 @@ namespace MWClass } else { - MWWorld::LiveCellRef *ref = - it->get(); + MWWorld::LiveCellRef *ref = it->get(); int armorSkillType = MWWorld::Class::get(*it).getEquipmentSkill(*it); - int armorSkill = MWWorld::Class::get(ptr).getNpcStats(ptr).getSkill(armorSkillType).getModified(); + int armorSkill = stats.getSkill(armorSkillType).getModified(); - if (ref->mBase->mData.mWeight == 0) + if(ref->mBase->mData.mWeight == 0) ratings[i] = ref->mBase->mData.mArmor; else ratings[i] = ref->mBase->mData.mArmor * armorSkill / iBaseArmorSkill; } } - float shield = MWWorld::Class::get(ptr).getCreatureStats(ptr).getMagicEffects().get(ESM::MagicEffect::Shield).mMagnitude; + float shield = getCreatureStats(ptr).getMagicEffects().get(ESM::MagicEffect::Shield).mMagnitude; - return ratings[MWWorld::InventoryStore::Slot_Cuirass] * 0.3 + return ratings[MWWorld::InventoryStore::Slot_Cuirass] * 0.3f + (ratings[MWWorld::InventoryStore::Slot_CarriedLeft] + ratings[MWWorld::InventoryStore::Slot_Helmet] + ratings[MWWorld::InventoryStore::Slot_Greaves] + ratings[MWWorld::InventoryStore::Slot_Boots] + ratings[MWWorld::InventoryStore::Slot_LeftPauldron] + ratings[MWWorld::InventoryStore::Slot_RightPauldron] - ) * 0.1 - + (ratings[MWWorld::InventoryStore::Slot_LeftGauntlet] + MWWorld::InventoryStore::Slot_RightGauntlet) - * 0.05 + ) * 0.1f + + (ratings[MWWorld::InventoryStore::Slot_LeftGauntlet] + ratings[MWWorld::InventoryStore::Slot_RightGauntlet]) + * 0.05f + shield; }