Make ranged weapon bonus a distance-dependent multiplier

fix/skillcap
Capostrophic 7 years ago committed by Capostrophic
parent 382b68a081
commit bec47dfb7c

@ -30,7 +30,7 @@ namespace MWMechanics
return 0.f; return 0.f;
float rating=0.f; float rating=0.f;
float bonus=0.f; float rangedMult=1.f;
if (weapon->mData.mType >= ESM::Weapon::MarksmanBow && weapon->mData.mType <= ESM::Weapon::MarksmanThrown) if (weapon->mData.mType >= ESM::Weapon::MarksmanBow && weapon->mData.mType <= ESM::Weapon::MarksmanThrown)
{ {
@ -44,7 +44,8 @@ namespace MWMechanics
if (MWBase::Environment::get().getWorld()->isUnderwater(MWWorld::ConstPtr(enemy), 0.75f)) if (MWBase::Environment::get().getWorld()->isUnderwater(MWWorld::ConstPtr(enemy), 0.75f))
return 0.f; return 0.f;
bonus+=1.5f; if (getDistanceMinusHalfExtents(actor, enemy) >= getMaxAttackDistance(enemy))
rangedMult = 1.5f;
} }
if (weapon->mData.mType >= ESM::Weapon::MarksmanBow) if (weapon->mData.mType >= ESM::Weapon::MarksmanBow)
@ -104,15 +105,11 @@ namespace MWMechanics
int skill = item.getClass().getEquipmentSkill(item); int skill = item.getClass().getEquipmentSkill(item);
if (skill != -1) if (skill != -1)
{ {
MWMechanics::SkillValue& value = actor.getClass().getSkill(actor, skill); int value = actor.getClass().getSkill(actor, skill);
rating *= MWMechanics::getHitChance(actor, enemy, value) / 100.f; rating *= MWMechanics::getHitChance(actor, enemy, value) / 100.f;
} }
// There is no need to apply bonus if weapon rating == 0 return rating * rangedMult;
if (rating == 0.f)
return 0.f;
return rating + bonus;
} }
float rateAmmo(const MWWorld::Ptr &actor, const MWWorld::Ptr &enemy, MWWorld::Ptr &bestAmmo, ESM::Weapon::Type ammoType) float rateAmmo(const MWWorld::Ptr &actor, const MWWorld::Ptr &enemy, MWWorld::Ptr &bestAmmo, ESM::Weapon::Type ammoType)

Loading…
Cancel
Save