[PATCH] Show stolen items in inventory
Posted: 04 Mar 2019, 21:50
Makes stolen items in inventory/containers show up like owned items (before they are stolen), if highlighting owned items is enabled.
It didn't make sense to me that the player character doesn't know which items they pilfered, yet the guards did.
But, I don't think the original game had this either, so I don't know about submitting this for inclusion.
Screenshot:
Code:
There might be a performance issue (due to an O(n) lookup) in saves where many items have been stolen.
It didn't make sense to me that the player character doesn't know which items they pilfered, yet the guards did.
But, I don't think the original game had this either, so I don't know about submitting this for inclusion.
Screenshot:
Code:
Code: Select all
diff --git a/apps/openmw/mwbase/mechanicsmanager.hpp b/apps/openmw/mwbase/mechanicsmanager.hpp
index 1bdd8f8b5..b9026c139 100644
--- a/apps/openmw/mwbase/mechanicsmanager.hpp
+++ b/apps/openmw/mwbase/mechanicsmanager.hpp
@@ -250,6 +250,7 @@ namespace MWBase
/// <Owner, item count>
virtual std::vector<std::pair<std::string, int> > getStolenItemOwners(const std::string& itemid) = 0;
+ virtual bool isItemStolen(const std::string& itemid) = 0;
/// Has the player stolen this item from the given owner?
virtual bool isItemStolenFrom(const std::string& itemid, const MWWorld::Ptr& ptr) = 0;
diff --git a/apps/openmw/mwgui/tooltips.cpp b/apps/openmw/mwgui/tooltips.cpp
index f9775253a..77a4a5ea6 100644
--- a/apps/openmw/mwgui/tooltips.cpp
+++ b/apps/openmw/mwgui/tooltips.cpp
@@ -124,7 +124,7 @@ namespace MWGui
tooltipSize = createToolTip(info, checkOwned());
}
else
- tooltipSize = getToolTipViaPtr(mFocusObject.getRefData().getCount(), true);
+ tooltipSize = getToolTipViaPtr(mFocusObject.getRefData().getCount(), true, checkStolen());
MyGUI::IntPoint tooltipPosition = MyGUI::InputManager::getInstance().getMousePosition();
position(tooltipPosition, tooltipSize, viewSize);
@@ -202,7 +202,7 @@ namespace MWGui
std::pair<ItemModel::ModelIndex, ItemModel*> pair = *focus->getUserData<std::pair<ItemModel::ModelIndex, ItemModel*> >();
mFocusObject = pair.second->getItem(pair.first).mBase;
bool isAllowedToUse = pair.second->allowedToUseItems();
- tooltipSize = getToolTipViaPtr(pair.second->getItem(pair.first).mCount, false, !isAllowedToUse);
+ tooltipSize = getToolTipViaPtr(pair.second->getItem(pair.first).mCount, false, !isAllowedToUse || checkStolen());
}
else if (type == "ToolTipInfo")
{
@@ -216,7 +216,7 @@ namespace MWGui
mFocusObject = item;
if (!mFocusObject.isEmpty ())
- tooltipSize = getToolTipViaPtr(mFocusObject.getRefData().getCount(), false);
+ tooltipSize = getToolTipViaPtr(mFocusObject.getRefData().getCount(), checkStolen());
}
else if (type == "Spell")
{
@@ -387,6 +387,12 @@ namespace MWGui
return !mm->isAllowedToUse(ptr, mFocusObject, victim);
}
+ bool ToolTips::checkStolen()
+ {
+ MWBase::MechanicsManager* mm = MWBase::Environment::get().getMechanicsManager();
+ return mm->isItemStolen(mFocusObject.getCellRef().getRefId());
+ }
+
MyGUI::IntSize ToolTips::createToolTip(const MWGui::ToolTipInfo& info, bool isOwned)
{
mDynamicToolTipBox->setVisible(true);
diff --git a/apps/openmw/mwgui/tooltips.hpp b/apps/openmw/mwgui/tooltips.hpp
index 3b8e8b2cc..4f78f75ea 100644
--- a/apps/openmw/mwgui/tooltips.hpp
+++ b/apps/openmw/mwgui/tooltips.hpp
@@ -94,6 +94,8 @@ namespace MWGui
bool checkOwned();
/// Returns True if taking mFocusObject would be crime
+
+ bool checkStolen();
private:
MyGUI::Widget* mDynamicToolTipBox;
diff --git a/apps/openmw/mwmechanics/mechanicsmanagerimp.cpp b/apps/openmw/mwmechanics/mechanicsmanagerimp.cpp
index eead40537..68e64beba 100644
--- a/apps/openmw/mwmechanics/mechanicsmanagerimp.cpp
+++ b/apps/openmw/mwmechanics/mechanicsmanagerimp.cpp
@@ -1043,6 +1043,12 @@ namespace MWMechanics
}
}
+ bool MechanicsManager::isItemStolen(const std::string &itemid)
+ {
+ StolenItemsMap::const_iterator it = mStolenItems.find(Misc::StringUtils::lowerCase(itemid));
+ return it != mStolenItems.end();
+ }
+
bool MechanicsManager::isItemStolenFrom(const std::string &itemid, const MWWorld::Ptr& ptr)
{
StolenItemsMap::const_iterator it = mStolenItems.find(Misc::StringUtils::lowerCase(itemid));
diff --git a/apps/openmw/mwmechanics/mechanicsmanagerimp.hpp b/apps/openmw/mwmechanics/mechanicsmanagerimp.hpp
index 2dda376f5..93c3993a8 100644
--- a/apps/openmw/mwmechanics/mechanicsmanagerimp.hpp
+++ b/apps/openmw/mwmechanics/mechanicsmanagerimp.hpp
@@ -221,6 +221,8 @@ namespace MWMechanics
/// <Owner, item count>
virtual std::vector<std::pair<std::string, int> > getStolenItemOwners(const std::string& itemid) override;
+ virtual bool isItemStolen(const std::string& itemid) override;
+
/// Has the player stolen this item from the given owner?
virtual bool isItemStolenFrom(const std::string& itemid, const MWWorld::Ptr& ptr) override;