Merge branch 'master' into soul

pull/578/head
Andrei Kortunov 5 years ago committed by GitHub
commit cb6707624d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

1
.gitignore vendored

@ -30,6 +30,7 @@ cmake-build-*
files/windows/*.aps files/windows/*.aps
## qt-creator ## qt-creator
CMakeLists.txt.user* CMakeLists.txt.user*
.vs
## resources ## resources
data data

@ -1,6 +1,8 @@
0.47.0 0.47.0
------ ------
Bug #5367: Selecting a spell on an enchanted item per hotkey always plays the equip sound
Bug #5369: Spawnpoint in the Grazelands doesn't produce oversized creatures
Feature #5362: Show the soul gems' trapped soul in count dialog Feature #5362: Show the soul gems' trapped soul in count dialog
0.46.0 0.46.0

@ -125,6 +125,7 @@ namespace MWClass
const MWWorld::ESMStore& store = MWBase::Environment::get().getWorld()->getStore(); const MWWorld::ESMStore& store = MWBase::Environment::get().getWorld()->getStore();
MWWorld::ManualRef manualRef(store, id); MWWorld::ManualRef manualRef(store, id);
manualRef.getPtr().getCellRef().setPosition(ptr.getCellRef().getPosition()); manualRef.getPtr().getCellRef().setPosition(ptr.getCellRef().getPosition());
manualRef.getPtr().getCellRef().setScale(ptr.getCellRef().getScale());
MWWorld::Ptr placed = MWBase::Environment::get().getWorld()->placeObject(manualRef.getPtr(), ptr.getCell() , ptr.getCellRef().getPosition()); MWWorld::Ptr placed = MWBase::Environment::get().getWorld()->placeObject(manualRef.getPtr(), ptr.getCell() , ptr.getCellRef().getPosition());
customData.mSpawnActorId = placed.getClass().getCreatureStats(placed).getActorId(); customData.mSpawnActorId = placed.getClass().getCreatureStats(placed).getActorId();
customData.mSpawn = false; customData.mSpawn = false;

@ -401,7 +401,8 @@ namespace MWGui
return; return;
} }
MWBase::Environment::get().getWindowManager()->useItem(item); if (!store.isEquipped(item))
MWBase::Environment::get().getWindowManager()->useItem(item);
MWWorld::ConstContainerStoreIterator rightHand = store.getSlot(MWWorld::InventoryStore::Slot_CarriedRight); MWWorld::ConstContainerStoreIterator rightHand = store.getSlot(MWWorld::InventoryStore::Slot_CarriedRight);
// change draw state only if the item is in player's right hand // change draw state only if the item is in player's right hand
if (rightHand != store.end() && item == *rightHand) if (rightHand != store.end() && item == *rightHand)
@ -411,8 +412,8 @@ namespace MWGui
} }
else if (key->type == Type_MagicItem) else if (key->type == Type_MagicItem)
{ {
// equip, if it can be equipped // equip, if it can be equipped and isn't yet equipped
if (!item.getClass().getEquipmentSlots(item).first.empty()) if (!item.getClass().getEquipmentSlots(item).first.empty() && !store.isEquipped(item))
{ {
MWBase::Environment::get().getWindowManager()->useItem(item); MWBase::Environment::get().getWindowManager()->useItem(item);

@ -43,6 +43,8 @@ namespace MWMechanics
x *= pickQuality * mFatigueTerm; x *= pickQuality * mFatigueTerm;
x += fPickLockMult * lockStrength; x += fPickLockMult * lockStrength;
MWBase::Environment::get().getMechanicsManager()->unlockAttempted(mActor, lock);
resultSound = "Open Lock Fail"; resultSound = "Open Lock Fail";
if (x <= 0) if (x <= 0)
resultMessage = "#{sLockImpossible}"; resultMessage = "#{sLockImpossible}";
@ -59,7 +61,6 @@ namespace MWMechanics
resultMessage = "#{sLockFail}"; resultMessage = "#{sLockFail}";
} }
MWBase::Environment::get().getMechanicsManager()->unlockAttempted(mActor, lock);
int uses = lockpick.getClass().getItemHealth(lockpick); int uses = lockpick.getClass().getItemHealth(lockpick);
--uses; --uses;
lockpick.getCellRef().setCharge(uses); lockpick.getCellRef().setCharge(uses);
@ -84,6 +85,8 @@ namespace MWMechanics
x += fTrapCostMult * trapSpellPoints; x += fTrapCostMult * trapSpellPoints;
x *= probeQuality * mFatigueTerm; x *= probeQuality * mFatigueTerm;
MWBase::Environment::get().getMechanicsManager()->unlockAttempted(mActor, trap);
resultSound = "Disarm Trap Fail"; resultSound = "Disarm Trap Fail";
if (x <= 0) if (x <= 0)
resultMessage = "#{sTrapImpossible}"; resultMessage = "#{sTrapImpossible}";
@ -101,7 +104,6 @@ namespace MWMechanics
resultMessage = "#{sTrapFail}"; resultMessage = "#{sTrapFail}";
} }
MWBase::Environment::get().getMechanicsManager()->unlockAttempted(mActor, trap);
int uses = probe.getClass().getItemHealth(probe); int uses = probe.getClass().getItemHealth(probe);
--uses; --uses;
probe.getCellRef().setCharge(uses); probe.getCellRef().setCharge(uses);

@ -709,6 +709,11 @@ namespace MWMechanics
} }
else if (effectId == ESM::MagicEffect::Open) else if (effectId == ESM::MagicEffect::Open)
{ {
if (!caster.isEmpty())
{
MWBase::Environment::get().getMechanicsManager()->unlockAttempted(getPlayer(), target);
// Use the player instead of the caster for vanilla crime compatibility
}
const MWWorld::ESMStore& store = MWBase::Environment::get().getWorld()->getStore(); const MWWorld::ESMStore& store = MWBase::Environment::get().getWorld()->getStore();
const ESM::MagicEffect *magiceffect = store.get<ESM::MagicEffect>().find(effectId); const ESM::MagicEffect *magiceffect = store.get<ESM::MagicEffect>().find(effectId);
MWRender::Animation* animation = MWBase::Environment::get().getWorld()->getAnimation(target); MWRender::Animation* animation = MWBase::Environment::get().getWorld()->getAnimation(target);
@ -726,11 +731,10 @@ namespace MWMechanics
target.getCellRef().unlock(); target.getCellRef().unlock();
} }
else else
{
MWBase::Environment::get().getSoundManager()->playSound3D(target, "Open Lock Fail", 1.f, 1.f); MWBase::Environment::get().getSoundManager()->playSound3D(target, "Open Lock Fail", 1.f, 1.f);
}
if (!caster.isEmpty())
MWBase::Environment::get().getMechanicsManager()->unlockAttempted(getPlayer(), target);
// Use the player instead of the caster for vanilla crime compatibility
return true; return true;
} }
} }

@ -457,7 +457,7 @@ namespace NifOsg
{ {
const Nif::NiLODNode* niLodNode = static_cast<const Nif::NiLODNode*>(nifNode); const Nif::NiLODNode* niLodNode = static_cast<const Nif::NiLODNode*>(nifNode);
node = handleLodNode(niLodNode); node = handleLodNode(niLodNode);
dataVariance = osg::Object::STATIC; dataVariance = osg::Object::DYNAMIC;
break; break;
} }
case Nif::RC_NiSwitchNode: case Nif::RC_NiSwitchNode:
@ -476,8 +476,8 @@ namespace NifOsg
{ {
bool enabled = nifNode->flags & Nif::NiNode::Flag_ActiveCollision; bool enabled = nifNode->flags & Nif::NiNode::Flag_ActiveCollision;
node = new CollisionSwitch(nifNode->trafo.toMatrix(), enabled); node = new CollisionSwitch(nifNode->trafo.toMatrix(), enabled);
dataVariance = osg::Object::STATIC; // This matrix transform must not be combined with another matrix transform.
dataVariance = osg::Object::DYNAMIC;
break; break;
} }
default: default:

@ -215,7 +215,6 @@ private:
float mMinSize; float mMinSize;
osg::ref_ptr<RootNode> mRootNode; osg::ref_ptr<RootNode> mRootNode;
osg::ref_ptr<LodCallback> mLodCallback;
}; };
QuadTreeWorld::QuadTreeWorld(osg::Group *parent, osg::Group *compileRoot, Resource::ResourceSystem *resourceSystem, Storage *storage, int compMapResolution, float compMapLevel, float lodFactor, int vertexLodMod, float maxCompGeometrySize) QuadTreeWorld::QuadTreeWorld(osg::Group *parent, osg::Group *compileRoot, Resource::ResourceSystem *resourceSystem, Storage *storage, int compMapResolution, float compMapLevel, float lodFactor, int vertexLodMod, float maxCompGeometrySize)

@ -53,7 +53,7 @@ master_doc = 'index'
# General information about the project. # General information about the project.
project = u'OpenMW' project = u'OpenMW'
copyright = u'2017, OpenMW Team' copyright = u'2020, OpenMW Team'
# The version info for the project you're documenting, acts as replacement for # The version info for the project you're documenting, acts as replacement for

Loading…
Cancel
Save