mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-01-19 21:53:51 +00:00
Some cleanup since NpcStats is now also CreatureStats
This isn't a thorough cleaning, so keep an eye out for more
This commit is contained in:
parent
75b6515915
commit
46bc7bd9c8
8 changed files with 64 additions and 69 deletions
|
@ -350,13 +350,12 @@ namespace MWClass
|
||||||
if(!weapon.isEmpty())
|
if(!weapon.isEmpty())
|
||||||
weapskill = get(weapon).getEquipmentSkill(weapon);
|
weapskill = get(weapon).getEquipmentSkill(weapon);
|
||||||
|
|
||||||
MWMechanics::CreatureStats &crstats = getCreatureStats(ptr);
|
MWMechanics::NpcStats &stats = getNpcStats(ptr);
|
||||||
MWMechanics::NpcStats &npcstats = getNpcStats(ptr);
|
const MWMechanics::MagicEffects &mageffects = stats.getMagicEffects();
|
||||||
const MWMechanics::MagicEffects &mageffects = crstats.getMagicEffects();
|
float hitchance = stats.getSkill(weapskill).getModified() +
|
||||||
float hitchance = npcstats.getSkill(weapskill).getModified() +
|
(stats.getAttribute(ESM::Attribute::Agility).getModified() / 5.0f) +
|
||||||
(crstats.getAttribute(ESM::Attribute::Agility).getModified() / 5.0f) +
|
(stats.getAttribute(ESM::Attribute::Luck).getModified() / 10.0f);
|
||||||
(crstats.getAttribute(ESM::Attribute::Luck).getModified() / 10.0f);
|
hitchance *= stats.getFatigueTerm();
|
||||||
hitchance *= crstats.getFatigueTerm();
|
|
||||||
hitchance += mageffects.get(MWMechanics::EffectKey(ESM::MagicEffect::FortifyAttack)).mMagnitude -
|
hitchance += mageffects.get(MWMechanics::EffectKey(ESM::MagicEffect::FortifyAttack)).mMagnitude -
|
||||||
mageffects.get(MWMechanics::EffectKey(ESM::MagicEffect::Blind)).mMagnitude;
|
mageffects.get(MWMechanics::EffectKey(ESM::MagicEffect::Blind)).mMagnitude;
|
||||||
hitchance -= otherstats.getEvasion();
|
hitchance -= otherstats.getEvasion();
|
||||||
|
@ -381,8 +380,8 @@ namespace MWClass
|
||||||
attack = weapon.get<ESM::Weapon>()->mBase->mData.mThrust;
|
attack = weapon.get<ESM::Weapon>()->mBase->mData.mThrust;
|
||||||
if(attack)
|
if(attack)
|
||||||
{
|
{
|
||||||
damage = attack[0] + ((attack[1]-attack[0])*npcstats.getAttackStrength());
|
damage = attack[0] + ((attack[1]-attack[0])*stats.getAttackStrength());
|
||||||
damage *= 0.5f + (crstats.getAttribute(ESM::Attribute::Luck).getModified() / 100.0f);
|
damage *= 0.5f + (stats.getAttribute(ESM::Attribute::Luck).getModified() / 100.0f);
|
||||||
if(weaphashealth)
|
if(weaphashealth)
|
||||||
{
|
{
|
||||||
int weapmaxhealth = weapon.get<ESM::Weapon>()->mBase->mData.mHealth;
|
int weapmaxhealth = weapon.get<ESM::Weapon>()->mBase->mData.mHealth;
|
||||||
|
@ -409,8 +408,8 @@ namespace MWClass
|
||||||
// option for it.
|
// option for it.
|
||||||
float minstrike = gmst.find("fMinHandToHandMult")->getFloat();
|
float minstrike = gmst.find("fMinHandToHandMult")->getFloat();
|
||||||
float maxstrike = gmst.find("fMaxHandToHandMult")->getFloat();
|
float maxstrike = gmst.find("fMaxHandToHandMult")->getFloat();
|
||||||
damage = npcstats.getSkill(weapskill).getModified();
|
damage = stats.getSkill(weapskill).getModified();
|
||||||
damage *= minstrike + ((maxstrike-minstrike)*npcstats.getAttackStrength());
|
damage *= minstrike + ((maxstrike-minstrike)*stats.getAttackStrength());
|
||||||
if(!othercls.hasDetected(victim, ptr))
|
if(!othercls.hasDetected(victim, ptr))
|
||||||
{
|
{
|
||||||
damage *= gmst.find("fCombatCriticalStrikeMult")->getFloat();
|
damage *= gmst.find("fCombatCriticalStrikeMult")->getFloat();
|
||||||
|
@ -419,7 +418,7 @@ namespace MWClass
|
||||||
}
|
}
|
||||||
|
|
||||||
healthdmg = (otherstats.getFatigue().getCurrent() < 1.0f);
|
healthdmg = (otherstats.getFatigue().getCurrent() < 1.0f);
|
||||||
if(npcstats.isWerewolf())
|
if(stats.isWerewolf())
|
||||||
{
|
{
|
||||||
healthdmg = true;
|
healthdmg = true;
|
||||||
// GLOB instead of GMST because it gets updated during a quest
|
// GLOB instead of GMST because it gets updated during a quest
|
||||||
|
@ -908,7 +907,7 @@ namespace MWClass
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
float shield = getCreatureStats(ptr).getMagicEffects().get(ESM::MagicEffect::Shield).mMagnitude;
|
float shield = stats.getMagicEffects().get(ESM::MagicEffect::Shield).mMagnitude;
|
||||||
|
|
||||||
return ratings[MWWorld::InventoryStore::Slot_Cuirass] * 0.3f
|
return ratings[MWWorld::InventoryStore::Slot_Cuirass] * 0.3f
|
||||||
+ (ratings[MWWorld::InventoryStore::Slot_CarriedLeft] + ratings[MWWorld::InventoryStore::Slot_Helmet]
|
+ (ratings[MWWorld::InventoryStore::Slot_CarriedLeft] + ratings[MWWorld::InventoryStore::Slot_Helmet]
|
||||||
|
|
|
@ -235,7 +235,7 @@ namespace MWGui
|
||||||
return;
|
return;
|
||||||
|
|
||||||
MWWorld::Ptr player = MWBase::Environment::get().getWorld()->getPlayer().getPlayer();
|
MWWorld::Ptr player = MWBase::Environment::get().getWorld()->getPlayer().getPlayer();
|
||||||
MWMechanics::NpcStats PCstats = MWWorld::Class::get(player).getNpcStats(player);
|
const MWMechanics::NpcStats &PCstats = MWWorld::Class::get(player).getNpcStats(player);
|
||||||
|
|
||||||
// level progress
|
// level progress
|
||||||
MyGUI::Widget* levelWidget;
|
MyGUI::Widget* levelWidget;
|
||||||
|
@ -467,8 +467,8 @@ namespace MWGui
|
||||||
addSeparator(coord1, coord2);
|
addSeparator(coord1, coord2);
|
||||||
|
|
||||||
MWWorld::Ptr player = MWBase::Environment::get().getWorld()->getPlayer().getPlayer();
|
MWWorld::Ptr player = MWBase::Environment::get().getWorld()->getPlayer().getPlayer();
|
||||||
MWMechanics::NpcStats PCstats = MWWorld::Class::get(player).getNpcStats(player);
|
const MWMechanics::NpcStats &PCstats = MWWorld::Class::get(player).getNpcStats(player);
|
||||||
std::set<std::string>& expelled = PCstats.getExpelled ();
|
const std::set<std::string> &expelled = PCstats.getExpelled();
|
||||||
|
|
||||||
addGroup(MWBase::Environment::get().getWindowManager()->getGameSettingString("sFaction", "Faction"), coord1, coord2);
|
addGroup(MWBase::Environment::get().getWindowManager()->getGameSettingString("sFaction", "Faction"), coord1, coord2);
|
||||||
FactionList::const_iterator end = mFactions.end();
|
FactionList::const_iterator end = mFactions.end();
|
||||||
|
|
|
@ -301,16 +301,14 @@ namespace MWGui
|
||||||
float clampedDisposition = std::max<int>(0,std::min<int>(int(MWBase::Environment::get().getMechanicsManager()->getDerivedDisposition(mPtr)
|
float clampedDisposition = std::max<int>(0,std::min<int>(int(MWBase::Environment::get().getMechanicsManager()->getDerivedDisposition(mPtr)
|
||||||
+ MWBase::Environment::get().getDialogueManager()->getTemporaryDispositionChange()),100));
|
+ MWBase::Environment::get().getDialogueManager()->getTemporaryDispositionChange()),100));
|
||||||
|
|
||||||
MWMechanics::NpcStats sellerSkill = MWWorld::Class::get(mPtr).getNpcStats(mPtr);
|
const MWMechanics::NpcStats &sellerStats = MWWorld::Class::get(mPtr).getNpcStats(mPtr);
|
||||||
MWMechanics::CreatureStats sellerStats = MWWorld::Class::get(mPtr).getCreatureStats(mPtr);
|
|
||||||
MWWorld::Ptr playerPtr = MWBase::Environment::get().getWorld()->getPlayer().getPlayer();
|
MWWorld::Ptr playerPtr = MWBase::Environment::get().getWorld()->getPlayer().getPlayer();
|
||||||
MWMechanics::NpcStats playerSkill = MWWorld::Class::get(playerPtr).getNpcStats(playerPtr);
|
const MWMechanics::NpcStats &playerStats = MWWorld::Class::get(playerPtr).getNpcStats(playerPtr);
|
||||||
MWMechanics::CreatureStats playerStats = MWWorld::Class::get(playerPtr).getCreatureStats(playerPtr);
|
|
||||||
|
|
||||||
float a1 = std::min(playerSkill.getSkill(ESM::Skill::Mercantile).getModified(), 100.f);
|
float a1 = std::min(playerStats.getSkill(ESM::Skill::Mercantile).getModified(), 100.f);
|
||||||
float b1 = std::min(0.1f * playerStats.getAttribute(ESM::Attribute::Luck).getModified(), 10.f);
|
float b1 = std::min(0.1f * playerStats.getAttribute(ESM::Attribute::Luck).getModified(), 10.f);
|
||||||
float c1 = std::min(0.2f * playerStats.getAttribute(ESM::Attribute::Personality).getModified(), 10.f);
|
float c1 = std::min(0.2f * playerStats.getAttribute(ESM::Attribute::Personality).getModified(), 10.f);
|
||||||
float d1 = std::min(sellerSkill.getSkill(ESM::Skill::Mercantile).getModified(), 100.f);
|
float d1 = std::min(sellerStats.getSkill(ESM::Skill::Mercantile).getModified(), 100.f);
|
||||||
float e1 = std::min(0.1f * sellerStats.getAttribute(ESM::Attribute::Luck).getModified(), 10.f);
|
float e1 = std::min(0.1f * sellerStats.getAttribute(ESM::Attribute::Luck).getModified(), 10.f);
|
||||||
float f1 = std::min(0.2f * sellerStats.getAttribute(ESM::Attribute::Personality).getModified(), 10.f);
|
float f1 = std::min(0.2f * sellerStats.getAttribute(ESM::Attribute::Personality).getModified(), 10.f);
|
||||||
|
|
||||||
|
|
|
@ -273,7 +273,7 @@ namespace MWGui
|
||||||
mWaiting = false;
|
mWaiting = false;
|
||||||
|
|
||||||
MWWorld::Ptr player = MWBase::Environment::get().getWorld()->getPlayer().getPlayer();
|
MWWorld::Ptr player = MWBase::Environment::get().getWorld()->getPlayer().getPlayer();
|
||||||
MWMechanics::NpcStats pcstats = MWWorld::Class::get(player).getNpcStats(player);
|
const MWMechanics::NpcStats &pcstats = MWWorld::Class::get(player).getNpcStats(player);
|
||||||
|
|
||||||
// trigger levelup if possible
|
// trigger levelup if possible
|
||||||
if (mSleeping && pcstats.getLevelProgress () >= 10)
|
if (mSleeping && pcstats.getLevelProgress () >= 10)
|
||||||
|
|
|
@ -162,19 +162,19 @@ namespace MWMechanics
|
||||||
|
|
||||||
void Actors::updateDrowning(const MWWorld::Ptr& ptr, float duration)
|
void Actors::updateDrowning(const MWWorld::Ptr& ptr, float duration)
|
||||||
{
|
{
|
||||||
Ogre::Vector3 pos(ptr.getRefData().getPosition().pos);
|
NpcStats &stats = MWWorld::Class::get(ptr).getNpcStats(ptr);
|
||||||
CreatureStats& creatureStats=MWWorld::Class::get(ptr).getCreatureStats(ptr);
|
if(MWBase::Environment::get().getWorld()->isSubmerged(ptr) &&
|
||||||
NpcStats& stats=MWWorld::Class::get(ptr).getNpcStats(ptr);
|
stats.getMagicEffects().get(ESM::MagicEffect::WaterBreathing).mMagnitude == 0)
|
||||||
bool waterBreathing=creatureStats.getMagicEffects().get(ESM::MagicEffect::WaterBreathing).mMagnitude>0;
|
|
||||||
if(MWBase::Environment::get().getWorld()->isSubmerged(ptr) && !waterBreathing)
|
|
||||||
{
|
{
|
||||||
if(creatureStats.getFatigue().getCurrent()==0)
|
if(stats.getFatigue().getCurrent() == 0)
|
||||||
stats.setTimeToStartDrowning(0);
|
stats.setTimeToStartDrowning(0);
|
||||||
float timeLeft=stats.getTimeToStartDrowning()-duration;
|
|
||||||
if(timeLeft<0)
|
float timeLeft = stats.getTimeToStartDrowning()-duration;
|
||||||
timeLeft=0;
|
if(timeLeft < 0.0f)
|
||||||
|
timeLeft = 0.0f;
|
||||||
|
|
||||||
stats.setTimeToStartDrowning(timeLeft);
|
stats.setTimeToStartDrowning(timeLeft);
|
||||||
if(timeLeft==0)
|
if(timeLeft == 0.0f)
|
||||||
stats.setLastDrowningHitTime(stats.getLastDrowningHitTime()+duration);
|
stats.setLastDrowningHitTime(stats.getLastDrowningHitTime()+duration);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -183,11 +183,11 @@ namespace MWMechanics
|
||||||
stats.setLastDrowningHitTime(0);
|
stats.setLastDrowningHitTime(0);
|
||||||
}
|
}
|
||||||
//if npc is drowning and it's time to hit, then hit
|
//if npc is drowning and it's time to hit, then hit
|
||||||
while(stats.getTimeToStartDrowning()==0.0 && stats.getLastDrowningHitTime()>0.33)
|
while(stats.getTimeToStartDrowning() == 0.0f && stats.getLastDrowningHitTime() > 0.33f)
|
||||||
{
|
{
|
||||||
stats.setLastDrowningHitTime(stats.getLastDrowningHitTime()-0.33);
|
stats.setLastDrowningHitTime(stats.getLastDrowningHitTime()-0.33f);
|
||||||
//fixme: replace it with something different once screen hit effects are implemented (blood on screen)
|
//fixme: replace it with something different once screen hit effects are implemented (blood on screen)
|
||||||
MWWorld::Class::get(ptr).setActorHealth(ptr, creatureStats.getHealth().getCurrent()-1.0);
|
MWWorld::Class::get(ptr).setActorHealth(ptr, stats.getHealth().getCurrent()-1.0f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -414,10 +414,10 @@ namespace MWMechanics
|
||||||
MWWorld::LiveCellRef<ESM::NPC>* npc = ptr.get<ESM::NPC>();
|
MWWorld::LiveCellRef<ESM::NPC>* npc = ptr.get<ESM::NPC>();
|
||||||
MWWorld::Ptr playerPtr = MWBase::Environment::get().getWorld()->getPlayer().getPlayer();
|
MWWorld::Ptr playerPtr = MWBase::Environment::get().getWorld()->getPlayer().getPlayer();
|
||||||
MWWorld::LiveCellRef<ESM::NPC>* player = playerPtr.get<ESM::NPC>();
|
MWWorld::LiveCellRef<ESM::NPC>* player = playerPtr.get<ESM::NPC>();
|
||||||
MWMechanics::CreatureStats playerStats = MWWorld::Class::get(playerPtr).getCreatureStats(playerPtr);
|
const MWMechanics::NpcStats &playerStats = MWWorld::Class::get(playerPtr).getNpcStats(playerPtr);
|
||||||
MWMechanics::NpcStats playerNpcStats = MWWorld::Class::get(playerPtr).getNpcStats(playerPtr);
|
|
||||||
|
|
||||||
if (Misc::StringUtils::lowerCase(npc->mBase->mRace) == Misc::StringUtils::lowerCase(player->mBase->mRace)) x += MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>().find("fDispRaceMod")->getFloat();
|
if (Misc::StringUtils::lowerCase(npc->mBase->mRace) == Misc::StringUtils::lowerCase(player->mBase->mRace))
|
||||||
|
x += MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>().find("fDispRaceMod")->getFloat();
|
||||||
|
|
||||||
x += MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>().find("fDispPersonalityMult")->getFloat()
|
x += MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>().find("fDispPersonalityMult")->getFloat()
|
||||||
* (playerStats.getAttribute(ESM::Attribute::Personality).getModified() - MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>().find("fDispPersonalityBase")->getFloat());
|
* (playerStats.getAttribute(ESM::Attribute::Personality).getModified() - MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>().find("fDispPersonalityBase")->getFloat());
|
||||||
|
@ -427,21 +427,21 @@ namespace MWMechanics
|
||||||
std::string npcFaction = "";
|
std::string npcFaction = "";
|
||||||
if(!npcSkill.getFactionRanks().empty()) npcFaction = npcSkill.getFactionRanks().begin()->first;
|
if(!npcSkill.getFactionRanks().empty()) npcFaction = npcSkill.getFactionRanks().begin()->first;
|
||||||
|
|
||||||
if (playerNpcStats.getFactionRanks().find(Misc::StringUtils::lowerCase(npcFaction)) != playerNpcStats.getFactionRanks().end())
|
if (playerStats.getFactionRanks().find(Misc::StringUtils::lowerCase(npcFaction)) != playerStats.getFactionRanks().end())
|
||||||
{
|
{
|
||||||
for(std::vector<ESM::Faction::Reaction>::const_iterator it = MWBase::Environment::get().getWorld()->getStore().get<ESM::Faction>().find(Misc::StringUtils::lowerCase(npcFaction))->mReactions.begin();
|
for(std::vector<ESM::Faction::Reaction>::const_iterator it = MWBase::Environment::get().getWorld()->getStore().get<ESM::Faction>().find(Misc::StringUtils::lowerCase(npcFaction))->mReactions.begin();
|
||||||
it != MWBase::Environment::get().getWorld()->getStore().get<ESM::Faction>().find(Misc::StringUtils::lowerCase(npcFaction))->mReactions.end(); ++it)
|
it != MWBase::Environment::get().getWorld()->getStore().get<ESM::Faction>().find(Misc::StringUtils::lowerCase(npcFaction))->mReactions.end(); ++it)
|
||||||
{
|
{
|
||||||
if(Misc::StringUtils::lowerCase(it->mFaction) == Misc::StringUtils::lowerCase(npcFaction)) reaction = it->mReaction;
|
if(Misc::StringUtils::lowerCase(it->mFaction) == Misc::StringUtils::lowerCase(npcFaction)) reaction = it->mReaction;
|
||||||
}
|
}
|
||||||
rank = playerNpcStats.getFactionRanks().find(Misc::StringUtils::lowerCase(npcFaction))->second;
|
rank = playerStats.getFactionRanks().find(Misc::StringUtils::lowerCase(npcFaction))->second;
|
||||||
}
|
}
|
||||||
else if (npcFaction != "")
|
else if (npcFaction != "")
|
||||||
{
|
{
|
||||||
for(std::vector<ESM::Faction::Reaction>::const_iterator it = MWBase::Environment::get().getWorld()->getStore().get<ESM::Faction>().find(Misc::StringUtils::lowerCase(npcFaction))->mReactions.begin();
|
for(std::vector<ESM::Faction::Reaction>::const_iterator it = MWBase::Environment::get().getWorld()->getStore().get<ESM::Faction>().find(Misc::StringUtils::lowerCase(npcFaction))->mReactions.begin();
|
||||||
it != MWBase::Environment::get().getWorld()->getStore().get<ESM::Faction>().find(Misc::StringUtils::lowerCase(npcFaction))->mReactions.end();++it)
|
it != MWBase::Environment::get().getWorld()->getStore().get<ESM::Faction>().find(Misc::StringUtils::lowerCase(npcFaction))->mReactions.end();++it)
|
||||||
{
|
{
|
||||||
if(playerNpcStats.getFactionRanks().find(Misc::StringUtils::lowerCase(it->mFaction)) != playerNpcStats.getFactionRanks().end() )
|
if(playerStats.getFactionRanks().find(Misc::StringUtils::lowerCase(it->mFaction)) != playerStats.getFactionRanks().end() )
|
||||||
{
|
{
|
||||||
if(it->mReaction<reaction) reaction = it->mReaction;
|
if(it->mReaction<reaction) reaction = it->mReaction;
|
||||||
}
|
}
|
||||||
|
@ -457,11 +457,11 @@ namespace MWMechanics
|
||||||
+ MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>().find("fDispFactionRankBase")->getFloat())
|
+ MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>().find("fDispFactionRankBase")->getFloat())
|
||||||
* MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>().find("fDispFactionMod")->getFloat() * reaction;
|
* MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>().find("fDispFactionMod")->getFloat() * reaction;
|
||||||
|
|
||||||
x -= MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>().find("fDispCrimeMod")->getFloat() * playerNpcStats.getBounty();
|
x -= MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>().find("fDispCrimeMod")->getFloat() * playerStats.getBounty();
|
||||||
if (playerStats.hasCommonDisease() || playerStats.hasBlightDisease())
|
if (playerStats.hasCommonDisease() || playerStats.hasBlightDisease())
|
||||||
x += MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>().find("fDispDiseaseMod")->getFloat();
|
x += MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>().find("fDispDiseaseMod")->getFloat();
|
||||||
|
|
||||||
if (playerNpcStats.getDrawState() == MWMechanics::DrawState_Weapon)
|
if (playerStats.getDrawState() == MWMechanics::DrawState_Weapon)
|
||||||
x += MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>().find("fDispWeaponDrawn")->getFloat();
|
x += MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>().find("fDispWeaponDrawn")->getFloat();
|
||||||
|
|
||||||
int effective_disposition = std::max(0,std::min(int(x),100));//, normally clamped to [0..100] when used
|
int effective_disposition = std::max(0,std::min(int(x),100));//, normally clamped to [0..100] when used
|
||||||
|
@ -473,21 +473,19 @@ namespace MWMechanics
|
||||||
if (ptr.getTypeName() == typeid(ESM::Creature).name())
|
if (ptr.getTypeName() == typeid(ESM::Creature).name())
|
||||||
return basePrice;
|
return basePrice;
|
||||||
|
|
||||||
MWMechanics::NpcStats sellerSkill = MWWorld::Class::get(ptr).getNpcStats(ptr);
|
const MWMechanics::NpcStats &sellerStats = MWWorld::Class::get(ptr).getNpcStats(ptr);
|
||||||
MWMechanics::CreatureStats sellerStats = MWWorld::Class::get(ptr).getCreatureStats(ptr);
|
|
||||||
|
|
||||||
MWWorld::Ptr playerPtr = MWBase::Environment::get().getWorld()->getPlayer().getPlayer();
|
MWWorld::Ptr playerPtr = MWBase::Environment::get().getWorld()->getPlayer().getPlayer();
|
||||||
MWMechanics::NpcStats playerSkill = MWWorld::Class::get(playerPtr).getNpcStats(playerPtr);
|
const MWMechanics::NpcStats &playerStats = MWWorld::Class::get(playerPtr).getNpcStats(playerPtr);
|
||||||
MWMechanics::CreatureStats playerStats = MWWorld::Class::get(playerPtr).getCreatureStats(playerPtr);
|
|
||||||
|
|
||||||
// I suppose the temporary disposition change _has_ to be considered here,
|
// I suppose the temporary disposition change _has_ to be considered here,
|
||||||
// otherwise one would get different prices when exiting and re-entering the dialogue window...
|
// otherwise one would get different prices when exiting and re-entering the dialogue window...
|
||||||
int clampedDisposition = std::max(0, std::min(getDerivedDisposition(ptr)
|
int clampedDisposition = std::max(0, std::min(getDerivedDisposition(ptr)
|
||||||
+ MWBase::Environment::get().getDialogueManager()->getTemporaryDispositionChange(),100));
|
+ MWBase::Environment::get().getDialogueManager()->getTemporaryDispositionChange(),100));
|
||||||
float a = std::min(playerSkill.getSkill(ESM::Skill::Mercantile).getModified(), 100.f);
|
float a = std::min(playerStats.getSkill(ESM::Skill::Mercantile).getModified(), 100.f);
|
||||||
float b = std::min(0.1f * playerStats.getAttribute(ESM::Attribute::Luck).getModified(), 10.f);
|
float b = std::min(0.1f * playerStats.getAttribute(ESM::Attribute::Luck).getModified(), 10.f);
|
||||||
float c = std::min(0.2f * playerStats.getAttribute(ESM::Attribute::Personality).getModified(), 10.f);
|
float c = std::min(0.2f * playerStats.getAttribute(ESM::Attribute::Personality).getModified(), 10.f);
|
||||||
float d = std::min(sellerSkill.getSkill(ESM::Skill::Mercantile).getModified(), 100.f);
|
float d = std::min(sellerStats.getSkill(ESM::Skill::Mercantile).getModified(), 100.f);
|
||||||
float e = std::min(0.1f * sellerStats.getAttribute(ESM::Attribute::Luck).getModified(), 10.f);
|
float e = std::min(0.1f * sellerStats.getAttribute(ESM::Attribute::Luck).getModified(), 10.f);
|
||||||
float f = std::min(0.2f * sellerStats.getAttribute(ESM::Attribute::Personality).getModified(), 10.f);
|
float f = std::min(0.2f * sellerStats.getAttribute(ESM::Attribute::Personality).getModified(), 10.f);
|
||||||
|
|
||||||
|
@ -520,13 +518,10 @@ namespace MWMechanics
|
||||||
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>();
|
||||||
|
|
||||||
|
MWMechanics::NpcStats npcStats = MWWorld::Class::get(npc).getNpcStats(npc);
|
||||||
|
|
||||||
MWWorld::Ptr playerPtr = MWBase::Environment::get().getWorld()->getPlayer().getPlayer();
|
MWWorld::Ptr playerPtr = MWBase::Environment::get().getWorld()->getPlayer().getPlayer();
|
||||||
MWMechanics::NpcStats playerSkill = MWWorld::Class::get(playerPtr).getNpcStats(playerPtr);
|
const MWMechanics::NpcStats &playerStats = MWWorld::Class::get(playerPtr).getNpcStats(playerPtr);
|
||||||
MWMechanics::CreatureStats playerStats = MWWorld::Class::get(playerPtr).getCreatureStats(playerPtr);
|
|
||||||
|
|
||||||
MWMechanics::NpcStats npcSkill = MWWorld::Class::get(npc).getNpcStats(npc);
|
|
||||||
MWMechanics::CreatureStats npcStats = MWWorld::Class::get(npc).getCreatureStats(npc);
|
|
||||||
|
|
||||||
|
|
||||||
float persTerm = playerStats.getAttribute(ESM::Attribute::Personality).getModified()
|
float persTerm = playerStats.getAttribute(ESM::Attribute::Personality).getModified()
|
||||||
/ gmst.find("fPersonalityMod")->getFloat();
|
/ gmst.find("fPersonalityMod")->getFloat();
|
||||||
|
@ -534,19 +529,18 @@ namespace MWMechanics
|
||||||
float luckTerm = playerStats.getAttribute(ESM::Attribute::Luck).getModified()
|
float luckTerm = playerStats.getAttribute(ESM::Attribute::Luck).getModified()
|
||||||
/ gmst.find("fLuckMod")->getFloat();
|
/ gmst.find("fLuckMod")->getFloat();
|
||||||
|
|
||||||
float repTerm = playerSkill.getReputation() * gmst.find("fReputationMod")->getFloat();
|
float repTerm = playerStats.getReputation() * gmst.find("fReputationMod")->getFloat();
|
||||||
|
|
||||||
float levelTerm = playerStats.getLevel() * gmst.find("fLevelMod")->getFloat();
|
float levelTerm = playerStats.getLevel() * gmst.find("fLevelMod")->getFloat();
|
||||||
|
|
||||||
float fatigueTerm = playerStats.getFatigueTerm();
|
float fatigueTerm = playerStats.getFatigueTerm();
|
||||||
|
|
||||||
float playerRating1 = (repTerm + luckTerm + persTerm + playerSkill.getSkill(ESM::Skill::Speechcraft).getModified()) * fatigueTerm;
|
float playerRating1 = (repTerm + luckTerm + persTerm + playerStats.getSkill(ESM::Skill::Speechcraft).getModified()) * fatigueTerm;
|
||||||
float playerRating2 = playerRating1 + levelTerm;
|
float playerRating2 = playerRating1 + levelTerm;
|
||||||
float playerRating3 = (playerSkill.getSkill(ESM::Skill::Mercantile).getModified() + luckTerm + persTerm) * fatigueTerm;
|
float playerRating3 = (playerStats.getSkill(ESM::Skill::Mercantile).getModified() + luckTerm + persTerm) * fatigueTerm;
|
||||||
|
|
||||||
float npcRating1 = (repTerm + luckTerm + persTerm + playerSkill.getSkill(ESM::Skill::Speechcraft).getModified()) * fatigueTerm;
|
float npcRating1 = (repTerm + luckTerm + persTerm + playerStats.getSkill(ESM::Skill::Speechcraft).getModified()) * fatigueTerm;
|
||||||
float npcRating2 = (levelTerm + repTerm + luckTerm + persTerm + npcSkill.getSkill(ESM::Skill::Speechcraft).getModified()) * fatigueTerm;
|
float npcRating2 = (levelTerm + repTerm + luckTerm + persTerm + npcStats.getSkill(ESM::Skill::Speechcraft).getModified()) * fatigueTerm;
|
||||||
float npcRating3 = (playerSkill.getSkill(ESM::Skill::Mercantile).getModified() + repTerm + luckTerm + persTerm) * fatigueTerm;
|
float npcRating3 = (playerStats.getSkill(ESM::Skill::Mercantile).getModified() + repTerm + luckTerm + persTerm) * fatigueTerm;
|
||||||
|
|
||||||
int currentDisposition = std::min(100, std::max(0, int(getDerivedDisposition(npc) + currentTemporaryDispositionDelta)));
|
int currentDisposition = std::min(100, std::max(0, int(getDerivedDisposition(npc) + currentTemporaryDispositionDelta)));
|
||||||
|
|
||||||
|
|
|
@ -101,19 +101,24 @@ MWMechanics::Stat<float>& MWMechanics::NpcStats::getSkill (int index)
|
||||||
return mSkill[index];
|
return mSkill[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const std::map<std::string, int>& MWMechanics::NpcStats::getFactionRanks() const
|
||||||
|
{
|
||||||
|
return mFactionRank;
|
||||||
|
}
|
||||||
|
|
||||||
std::map<std::string, int>& MWMechanics::NpcStats::getFactionRanks()
|
std::map<std::string, int>& MWMechanics::NpcStats::getFactionRanks()
|
||||||
{
|
{
|
||||||
return mFactionRank;
|
return mFactionRank;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::set<std::string>& MWMechanics::NpcStats::getExpelled()
|
const std::set<std::string>& MWMechanics::NpcStats::getExpelled() const
|
||||||
{
|
{
|
||||||
return mExpelled;
|
return mExpelled;
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::map<std::string, int>& MWMechanics::NpcStats::getFactionRanks() const
|
std::set<std::string>& MWMechanics::NpcStats::getExpelled()
|
||||||
{
|
{
|
||||||
return mFactionRank;
|
return mExpelled;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MWMechanics::NpcStats::isSameFaction (const NpcStats& npcStats) const
|
bool MWMechanics::NpcStats::isSameFaction (const NpcStats& npcStats) const
|
||||||
|
|
|
@ -95,18 +95,17 @@ namespace MWMechanics
|
||||||
void setMovementFlag (Flag flag, bool state);
|
void setMovementFlag (Flag flag, bool state);
|
||||||
|
|
||||||
const Stat<float>& getSkill (int index) const;
|
const Stat<float>& getSkill (int index) const;
|
||||||
|
|
||||||
Stat<float>& getSkill (int index);
|
Stat<float>& getSkill (int index);
|
||||||
|
|
||||||
|
const std::map<std::string, int>& getFactionRanks() const;
|
||||||
std::map<std::string, int>& getFactionRanks();
|
std::map<std::string, int>& getFactionRanks();
|
||||||
|
|
||||||
|
const std::set<std::string>& getExpelled() const;
|
||||||
std::set<std::string>& getExpelled();
|
std::set<std::string>& getExpelled();
|
||||||
|
|
||||||
bool isSameFaction (const NpcStats& npcStats) const;
|
bool isSameFaction (const NpcStats& npcStats) const;
|
||||||
///< Do *this and \a npcStats share a faction?
|
///< Do *this and \a npcStats share a faction?
|
||||||
|
|
||||||
const std::map<std::string, int>& getFactionRanks() const;
|
|
||||||
|
|
||||||
float getSkillGain (int skillIndex, const ESM::Class& class_, int usageType = -1,
|
float getSkillGain (int skillIndex, const ESM::Class& class_, int usageType = -1,
|
||||||
int level = -1) const;
|
int level = -1) const;
|
||||||
///< \param usageType: Usage specific factor, specified in the respective skill record;
|
///< \param usageType: Usage specific factor, specified in the respective skill record;
|
||||||
|
|
Loading…
Reference in a new issue