mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-10-30 23:26:38 +00:00 
			
		
		
		
	Merge branch 'ificialintelligence' into 'master'
Minor AI priority changes See merge request OpenMW/openmw!2558
This commit is contained in:
		
						commit
						ae1b3083b5
					
				
					 3 changed files with 17 additions and 8 deletions
				
			
		|  | @ -544,6 +544,7 @@ namespace MWMechanics | ||||||
|                 break; |                 break; | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|  |             case ESM::MagicEffect::AbsorbAttribute: | ||||||
|             case ESM::MagicEffect::DamageAttribute: |             case ESM::MagicEffect::DamageAttribute: | ||||||
|             case ESM::MagicEffect::DrainAttribute: |             case ESM::MagicEffect::DrainAttribute: | ||||||
|                 if (!enemy.isEmpty() |                 if (!enemy.isEmpty() | ||||||
|  | @ -567,6 +568,7 @@ namespace MWMechanics | ||||||
|                 } |                 } | ||||||
|                 break; |                 break; | ||||||
| 
 | 
 | ||||||
|  |             case ESM::MagicEffect::AbsorbSkill: | ||||||
|             case ESM::MagicEffect::DamageSkill: |             case ESM::MagicEffect::DamageSkill: | ||||||
|             case ESM::MagicEffect::DrainSkill: |             case ESM::MagicEffect::DrainSkill: | ||||||
|                 if (enemy.isEmpty() || !enemy.getClass().isNpc()) |                 if (enemy.isEmpty() || !enemy.getClass().isNpc()) | ||||||
|  | @ -656,23 +658,29 @@ namespace MWMechanics | ||||||
|         return rating; |         return rating; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     float rateEffects(const ESM::EffectList& list, const MWWorld::Ptr& actor, const MWWorld::Ptr& enemy) |     float rateEffects( | ||||||
|  |         const ESM::EffectList& list, const MWWorld::Ptr& actor, const MWWorld::Ptr& enemy, bool useSpellMult) | ||||||
|     { |     { | ||||||
|         // NOTE: enemy may be empty
 |         // NOTE: enemy may be empty
 | ||||||
| 
 | 
 | ||||||
|         float rating = 0.f; |         float rating = 0.f; | ||||||
|         float ratingMult = 1.f; // NB: this multiplier is applied to the effect rating, not the final rating
 |  | ||||||
| 
 | 
 | ||||||
|         const MWWorld::Store<ESM::GameSetting>& gmst |         const MWWorld::Store<ESM::GameSetting>& gmst | ||||||
|             = MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>(); |             = MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>(); | ||||||
|         static const float fAIMagicSpellMult = gmst.find("fAIMagicSpellMult")->mValue.getFloat(); |         static const float fAIMagicSpellMult = gmst.find("fAIMagicSpellMult")->mValue.getFloat(); | ||||||
|         static const float fAIRangeMagicSpellMult = gmst.find("fAIRangeMagicSpellMult")->mValue.getFloat(); |         static const float fAIRangeMagicSpellMult = gmst.find("fAIRangeMagicSpellMult")->mValue.getFloat(); | ||||||
| 
 | 
 | ||||||
|         for (std::vector<ESM::ENAMstruct>::const_iterator it = list.mList.begin(); it != list.mList.end(); ++it) |         for (const ESM::ENAMstruct& effect : list.mList) | ||||||
|         { |         { | ||||||
|             ratingMult = (it->mRange == ESM::RT_Target) ? fAIRangeMagicSpellMult : fAIMagicSpellMult; |             float effectRating = rateEffect(effect, actor, enemy); | ||||||
| 
 |             if (useSpellMult) | ||||||
|             rating += rateEffect(*it, actor, enemy) * ratingMult; |             { | ||||||
|  |                 if (effect.mRange == ESM::RT_Target) | ||||||
|  |                     effectRating *= fAIRangeMagicSpellMult; | ||||||
|  |                 else | ||||||
|  |                     effectRating *= fAIMagicSpellMult; | ||||||
|  |             } | ||||||
|  |             rating += effectRating; | ||||||
|         } |         } | ||||||
|         return rating; |         return rating; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -32,7 +32,8 @@ namespace MWMechanics | ||||||
|     /// @note target may be empty
 |     /// @note target may be empty
 | ||||||
|     float rateEffect(const ESM::ENAMstruct& effect, const MWWorld::Ptr& actor, const MWWorld::Ptr& enemy); |     float rateEffect(const ESM::ENAMstruct& effect, const MWWorld::Ptr& actor, const MWWorld::Ptr& enemy); | ||||||
|     /// @note target may be empty
 |     /// @note target may be empty
 | ||||||
|     float rateEffects(const ESM::EffectList& list, const MWWorld::Ptr& actor, const MWWorld::Ptr& enemy); |     float rateEffects( | ||||||
|  |         const ESM::EffectList& list, const MWWorld::Ptr& actor, const MWWorld::Ptr& enemy, bool useSpellMult = true); | ||||||
| 
 | 
 | ||||||
|     float vanillaRateSpell(const ESM::Spell* spell, const MWWorld::Ptr& actor, const MWWorld::Ptr& enemy); |     float vanillaRateSpell(const ESM::Spell* spell, const MWWorld::Ptr& actor, const MWWorld::Ptr& enemy); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -113,7 +113,7 @@ namespace MWMechanics | ||||||
| 
 | 
 | ||||||
|                 if (charge == -1 || charge >= castCost || weapclass == ESM::WeaponType::Thrown |                 if (charge == -1 || charge >= castCost || weapclass == ESM::WeaponType::Thrown | ||||||
|                     || weapclass == ESM::WeaponType::Ammo) |                     || weapclass == ESM::WeaponType::Ammo) | ||||||
|                     rating += rateEffects(enchantment->mEffects, actor, enemy); |                     rating += rateEffects(enchantment->mEffects, actor, enemy, false); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue