Merged pull request #1838

fix/skillcap
Marc Zinnschlag 6 years ago
commit b6a919a2d1

@ -83,6 +83,7 @@
Feature #3276: Editor: Search- Show number of (remaining) search results and indicate a search without any results Feature #3276: Editor: Search- Show number of (remaining) search results and indicate a search without any results
Feature #3641: Editor: Limit FPS in 3d preview window Feature #3641: Editor: Limit FPS in 3d preview window
Feature #3703: Ranged sneak attack criticals Feature #3703: Ranged sneak attack criticals
Feature #4012: Editor: Write a log file if OpenCS crashes
Feature #4222: 360° screenshots Feature #4222: 360° screenshots
Feature #4256: Implement ToggleBorders (TB) console command Feature #4256: Implement ToggleBorders (TB) console command
Feature #4324: Add CFBundleIdentifier in Info.plist to allow for macOS function key shortcuts Feature #4324: Add CFBundleIdentifier in Info.plist to allow for macOS function key shortcuts
@ -91,9 +92,11 @@
Feature #4444: Per-group KF-animation files support Feature #4444: Per-group KF-animation files support
Feature #4466: Editor: Add option to ignore "Base" records when running verifier Feature #4466: Editor: Add option to ignore "Base" records when running verifier
Feature #4488: Make water shader rougher during rain Feature #4488: Make water shader rougher during rain
Feature #4012: Editor: Write a log file if OpenCS crashes
Feature #4509: Show count of enchanted items in stack in the spells list Feature #4509: Show count of enchanted items in stack in the spells list
Feature #4512: Editor: Use markers for lights and creatures levelled lists Feature #4512: Editor: Use markers for lights and creatures levelled lists
Feature #4548: Weapon priority: use the actual chance to hit the target instead of weapon skill
Feature #4549: Weapon priority: use the actual damage in weapon rating calculations
Feature #4550: Weapon priority: make ranged weapon bonus more sensible
Task #2490: Don't open command prompt window on Release-mode builds automatically Task #2490: Don't open command prompt window on Release-mode builds automatically
Task #4545: Enable is_pod string test Task #4545: Enable is_pod string test

@ -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,25 +44,33 @@ 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)
{ {
rating = (weapon->mData.mChop[0] + weapon->mData.mChop[1]) / 2.f; float rangedDamage = weapon->mData.mChop[0] + weapon->mData.mChop[1];
MWMechanics::adjustWeaponDamage(rangedDamage, item, actor);
rating = rangedDamage / 2.f;
if (weapon->mData.mType >= ESM::Weapon::MarksmanThrown) if (weapon->mData.mType >= ESM::Weapon::MarksmanThrown)
MWMechanics::resistNormalWeapon(enemy, actor, item, rating); MWMechanics::resistNormalWeapon(enemy, actor, item, rating);
} }
else else
{ {
float meleeDamage = 0.f;
for (int i=0; i<2; ++i) for (int i=0; i<2; ++i)
{ {
rating += weapon->mData.mSlash[i]; meleeDamage += weapon->mData.mSlash[i];
rating += weapon->mData.mThrust[i]; meleeDamage += weapon->mData.mThrust[i];
rating += weapon->mData.mChop[i]; meleeDamage += weapon->mData.mChop[i];
} }
rating /= 6.f;
MWMechanics::adjustWeaponDamage(meleeDamage, item, actor);
rating = meleeDamage / 6.f;
MWMechanics::resistNormalWeapon(enemy, actor, item, rating); MWMechanics::resistNormalWeapon(enemy, actor, item, rating);
} }
@ -71,7 +79,6 @@ namespace MWMechanics
{ {
if (item.getClass().getItemHealth(item) == 0) if (item.getClass().getItemHealth(item) == 0)
return 0.f; return 0.f;
rating *= item.getClass().getItemHealth(item) / float(item.getClass().getItemMaxHealth(item));
} }
if (weapon->mData.mType == ESM::Weapon::MarksmanBow) if (weapon->mData.mType == ESM::Weapon::MarksmanBow)
@ -103,13 +110,12 @@ namespace MWMechanics
int skill = item.getClass().getEquipmentSkill(item); int skill = item.getClass().getEquipmentSkill(item);
if (skill != -1) if (skill != -1)
rating *= actor.getClass().getSkill(actor, skill) / 100.f; {
int value = actor.getClass().getSkill(actor, skill);
// There is no need to apply bonus if weapon rating == 0 rating *= MWMechanics::getHitChance(actor, enemy, value) / 100.f;
if (rating == 0.f) }
return 0.f;
return rating + bonus; return rating * rangedMult;
} }
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