mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-03-30 07:21:12 +00:00
Merge remote-tracking branch 'scrawl/master'
This commit is contained in:
commit
83a7eea2a9
@ -1,7 +1,7 @@
|
|||||||
OpenMW
|
OpenMW
|
||||||
======
|
======
|
||||||
|
|
||||||
[](https://travis-ci.org/OpenMW/openmw) [](https://scan.coverity.com/projects/3740)
|
[](https://travis-ci.org/OpenMW/openmw) [](https://scan.coverity.com/projects/3740)
|
||||||
|
|
||||||
OpenMW is an attempt at recreating the engine for the popular role-playing game
|
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.
|
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)
|
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");
|
ret += getMiscString(cellref.getGlobalVariable(), "Global");
|
||||||
|
@ -52,6 +52,31 @@ namespace
|
|||||||
return ((50.f - disposition) * fFightDispMult);
|
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
|
namespace MWMechanics
|
||||||
@ -685,24 +710,11 @@ namespace MWMechanics
|
|||||||
MWWorld::Ptr playerPtr = MWBase::Environment::get().getWorld()->getPlayerPtr();
|
MWWorld::Ptr playerPtr = MWBase::Environment::get().getWorld()->getPlayerPtr();
|
||||||
const MWMechanics::NpcStats &playerStats = playerPtr.getClass().getNpcStats(playerPtr);
|
const MWMechanics::NpcStats &playerStats = playerPtr.getClass().getNpcStats(playerPtr);
|
||||||
|
|
||||||
float persTerm = playerStats.getAttribute(ESM::Attribute::Personality).getModified()
|
float npcRating1, npcRating2, npcRating3;
|
||||||
/ gmst.find("fPersonalityMod")->getFloat();
|
getPersuasionRatings(npcStats, npcRating1, npcRating2, npcRating3, false);
|
||||||
|
|
||||||
float luckTerm = playerStats.getAttribute(ESM::Attribute::Luck).getModified()
|
float playerRating1, playerRating2, playerRating3;
|
||||||
/ gmst.find("fLuckMod")->getFloat();
|
getPersuasionRatings(playerStats, playerRating1, playerRating2, playerRating3, true);
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
int currentDisposition = std::min(100, std::max(0, int(getDerivedDisposition(npc) + currentTemporaryDispositionDelta)));
|
int currentDisposition = std::min(100, std::max(0, int(getDerivedDisposition(npc) + currentTemporaryDispositionDelta)));
|
||||||
|
|
||||||
@ -1030,7 +1042,9 @@ namespace MWMechanics
|
|||||||
owner.second = true;
|
owner.second = true;
|
||||||
}
|
}
|
||||||
Misc::StringUtils::toLower(owner.first);
|
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);
|
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.
|
// No collision. Use an internal flag setting to mark this.
|
||||||
flags |= 0x800;
|
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.
|
// Except in the editor, the marker objects are visible.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -59,13 +59,27 @@ Ogre::HardwareIndexBufferSharedPtr createIndexBuffer(unsigned int flags, unsigne
|
|||||||
{
|
{
|
||||||
for (size_t col = colStart; col < colEnd; col += increment)
|
for (size_t col = colStart; col < colEnd; col += increment)
|
||||||
{
|
{
|
||||||
indices.push_back(verts*col+row);
|
// diamond pattern
|
||||||
indices.push_back(verts*(col+increment)+row+increment);
|
if ((row + col%2) % 2 == 1)
|
||||||
indices.push_back(verts*col+row+increment);
|
{
|
||||||
|
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+row);
|
||||||
indices.push_back(verts*(col+increment)+row);
|
indices.push_back(verts*(col+increment)+row);
|
||||||
indices.push_back(verts*(col+increment)+row+increment);
|
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…
x
Reference in New Issue
Block a user