forked from mirror/openmw-tes3mp
Merge remote-tracking branch 'scrawl/master'
This commit is contained in:
commit
83a7eea2a9
5 changed files with 59 additions and 28 deletions
|
@ -1,7 +1,7 @@
|
|||
OpenMW
|
||||
======
|
||||
|
||||
[![Build Status](https://img.shields.io/travis/OpenMW/openmw.svg?style=plastic)](https://travis-ci.org/OpenMW/openmw) [![Coverity Scan Build Status](https://scan.coverity.com/projects/3740/badge.svg)](https://scan.coverity.com/projects/3740)
|
||||
[![Build Status](https://img.shields.io/travis/OpenMW/openmw.svg)](https://travis-ci.org/OpenMW/openmw) [![Coverity Scan Build Status](https://scan.coverity.com/projects/3740/badge.svg)](https://scan.coverity.com/projects/3740)
|
||||
|
||||
OpenMW is an attempt at recreating the engine for the popular role-playing game
|
||||
Morrowind by Bethesda Softworks. You need to own and install the original game for OpenMW to work.
|
||||
|
|
|
@ -593,7 +593,10 @@ namespace MWGui
|
|||
|
||||
for (std::vector<std::pair<std::string, int> >::const_iterator it = itemOwners.begin(); it != itemOwners.end(); ++it)
|
||||
{
|
||||
ret += std::string("\nStolen from ") + it->first;
|
||||
if (it->second == std::numeric_limits<int>::max())
|
||||
ret += std::string("\nStolen from ") + it->first; // for legacy (ESS) savegames
|
||||
else
|
||||
ret += std::string("\nStolen ") + MyGUI::utility::toString(it->second) + " from " + it->first;
|
||||
}
|
||||
|
||||
ret += getMiscString(cellref.getGlobalVariable(), "Global");
|
||||
|
|
|
@ -52,6 +52,31 @@ namespace
|
|||
return ((50.f - disposition) * fFightDispMult);
|
||||
}
|
||||
|
||||
void getPersuasionRatings(const MWMechanics::NpcStats& stats, float& rating1, float& rating2, float& rating3, bool player)
|
||||
{
|
||||
const MWWorld::Store<ESM::GameSetting> &gmst =
|
||||
MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>();
|
||||
|
||||
float persTerm = stats.getAttribute(ESM::Attribute::Personality).getModified() / gmst.find("fPersonalityMod")->getFloat();
|
||||
float luckTerm = stats.getAttribute(ESM::Attribute::Luck).getModified() / gmst.find("fLuckMod")->getFloat();
|
||||
float repTerm = stats.getReputation() * gmst.find("fReputationMod")->getFloat();
|
||||
float fatigueTerm = stats.getFatigueTerm();
|
||||
float levelTerm = stats.getLevel() * gmst.find("fLevelMod")->getFloat();
|
||||
|
||||
rating1 = (repTerm + luckTerm + persTerm + stats.getSkill(ESM::Skill::Speechcraft).getModified()) * fatigueTerm;
|
||||
|
||||
if (player)
|
||||
{
|
||||
rating2 = rating1 + levelTerm;
|
||||
rating3 = (stats.getSkill(ESM::Skill::Mercantile).getModified() + luckTerm + persTerm) * fatigueTerm;
|
||||
}
|
||||
else
|
||||
{
|
||||
rating2 = (levelTerm + repTerm + luckTerm + persTerm + stats.getSkill(ESM::Skill::Speechcraft).getModified()) * fatigueTerm;
|
||||
rating3 = (stats.getSkill(ESM::Skill::Mercantile).getModified() + repTerm + luckTerm + persTerm) * fatigueTerm;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
namespace MWMechanics
|
||||
|
@ -685,24 +710,11 @@ namespace MWMechanics
|
|||
MWWorld::Ptr playerPtr = MWBase::Environment::get().getWorld()->getPlayerPtr();
|
||||
const MWMechanics::NpcStats &playerStats = playerPtr.getClass().getNpcStats(playerPtr);
|
||||
|
||||
float persTerm = playerStats.getAttribute(ESM::Attribute::Personality).getModified()
|
||||
/ gmst.find("fPersonalityMod")->getFloat();
|
||||
float npcRating1, npcRating2, npcRating3;
|
||||
getPersuasionRatings(npcStats, npcRating1, npcRating2, npcRating3, false);
|
||||
|
||||
float luckTerm = playerStats.getAttribute(ESM::Attribute::Luck).getModified()
|
||||
/ gmst.find("fLuckMod")->getFloat();
|
||||
|
||||
float repTerm = playerStats.getReputation() * gmst.find("fReputationMod")->getFloat();
|
||||
float levelTerm = playerStats.getLevel() * gmst.find("fLevelMod")->getFloat();
|
||||
|
||||
float fatigueTerm = playerStats.getFatigueTerm();
|
||||
|
||||
float playerRating1 = (repTerm + luckTerm + persTerm + playerStats.getSkill(ESM::Skill::Speechcraft).getModified()) * fatigueTerm;
|
||||
float playerRating2 = playerRating1 + levelTerm;
|
||||
float playerRating3 = (playerStats.getSkill(ESM::Skill::Mercantile).getModified() + luckTerm + persTerm) * fatigueTerm;
|
||||
|
||||
float npcRating1 = (repTerm + luckTerm + persTerm + playerStats.getSkill(ESM::Skill::Speechcraft).getModified()) * fatigueTerm;
|
||||
float npcRating2 = (levelTerm + repTerm + luckTerm + persTerm + npcStats.getSkill(ESM::Skill::Speechcraft).getModified()) * fatigueTerm;
|
||||
float npcRating3 = (playerStats.getSkill(ESM::Skill::Mercantile).getModified() + repTerm + luckTerm + persTerm) * fatigueTerm;
|
||||
float playerRating1, playerRating2, playerRating3;
|
||||
getPersuasionRatings(playerStats, playerRating1, playerRating2, playerRating3, true);
|
||||
|
||||
int currentDisposition = std::min(100, std::max(0, int(getDerivedDisposition(npc) + currentTemporaryDispositionDelta)));
|
||||
|
||||
|
@ -1030,7 +1042,9 @@ namespace MWMechanics
|
|||
owner.second = true;
|
||||
}
|
||||
Misc::StringUtils::toLower(owner.first);
|
||||
mStolenItems[Misc::StringUtils::lowerCase(item.getClass().getId(item))][owner] += count;
|
||||
|
||||
if (!Misc::StringUtils::ciEqual(item.getCellRef().getRefId(), MWWorld::ContainerStore::sGoldId))
|
||||
mStolenItems[Misc::StringUtils::lowerCase(item.getClass().getId(item))][owner] += count;
|
||||
|
||||
commitCrime(ptr, victim, OT_Theft, item.getClass().getValue(item) * count);
|
||||
}
|
||||
|
|
|
@ -274,9 +274,9 @@ void ManualBulletShapeLoader::handleNode(const Nif::Node *node, int flags,
|
|||
// No collision. Use an internal flag setting to mark this.
|
||||
flags |= 0x800;
|
||||
}
|
||||
else if (sd->string == "MRK" && !mShowMarkers && raycasting)
|
||||
else if (sd->string == "MRK" && !mShowMarkers && (raycasting || mShape->mAutogenerated))
|
||||
{
|
||||
// Marker objects should be invisible, but still have collision.
|
||||
// Marker objects should be invisible, but can still have collision if the model explicitely specifies it via a RootCollisionNode.
|
||||
// Except in the editor, the marker objects are visible.
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -59,13 +59,27 @@ Ogre::HardwareIndexBufferSharedPtr createIndexBuffer(unsigned int flags, unsigne
|
|||
{
|
||||
for (size_t col = colStart; col < colEnd; col += increment)
|
||||
{
|
||||
indices.push_back(verts*col+row);
|
||||
indices.push_back(verts*(col+increment)+row+increment);
|
||||
indices.push_back(verts*col+row+increment);
|
||||
// diamond pattern
|
||||
if ((row + col%2) % 2 == 1)
|
||||
{
|
||||
indices.push_back(verts*(col+increment)+row);
|
||||
indices.push_back(verts*(col+increment)+row+increment);
|
||||
indices.push_back(verts*col+row+increment);
|
||||
|
||||
indices.push_back(verts*col+row);
|
||||
indices.push_back(verts*(col+increment)+row);
|
||||
indices.push_back(verts*(col+increment)+row+increment);
|
||||
indices.push_back(verts*col+row);
|
||||
indices.push_back(verts*(col+increment)+row);
|
||||
indices.push_back(verts*(col)+row+increment);
|
||||
}
|
||||
else
|
||||
{
|
||||
indices.push_back(verts*col+row);
|
||||
indices.push_back(verts*(col+increment)+row+increment);
|
||||
indices.push_back(verts*col+row+increment);
|
||||
|
||||
indices.push_back(verts*col+row);
|
||||
indices.push_back(verts*(col+increment)+row);
|
||||
indices.push_back(verts*(col+increment)+row+increment);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue