mirror of
https://github.com/OpenMW/openmw.git
synced 2025-04-01 07:36:41 +00:00
Detect selling stolen items or enchanting with stolen items
This commit is contained in:
parent
264226dfe3
commit
f27701cbe8
3 changed files with 45 additions and 0 deletions
|
@ -5,6 +5,8 @@
|
||||||
#include "../mwbase/environment.hpp"
|
#include "../mwbase/environment.hpp"
|
||||||
#include "../mwbase/world.hpp"
|
#include "../mwbase/world.hpp"
|
||||||
#include "../mwbase/soundmanager.hpp"
|
#include "../mwbase/soundmanager.hpp"
|
||||||
|
#include "../mwbase/dialoguemanager.hpp"
|
||||||
|
#include "../mwbase/mechanicsmanager.hpp"
|
||||||
#include "../mwworld/class.hpp"
|
#include "../mwworld/class.hpp"
|
||||||
#include "../mwworld/containerstore.hpp"
|
#include "../mwworld/containerstore.hpp"
|
||||||
|
|
||||||
|
@ -296,6 +298,28 @@ namespace MWGui
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// check if the player is attempting to use a soulstone or item that was stolen from this actor
|
||||||
|
if (mPtr != player)
|
||||||
|
{
|
||||||
|
for (int i=0; i<2; ++i)
|
||||||
|
{
|
||||||
|
MWWorld::Ptr item = (i == 0) ? mEnchanting.getOldItem() : mEnchanting.getGem();
|
||||||
|
if (Misc::StringUtils::ciEqual(item.getCellRef().mOwner, mPtr.getCellRef().mRefID))
|
||||||
|
{
|
||||||
|
std::string msg = MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>().find("sNotifyMessage49")->getString();
|
||||||
|
if (msg.find("%s") != std::string::npos)
|
||||||
|
msg.replace(msg.find("%s"), 2, item.getClass().getName(item));
|
||||||
|
MWBase::Environment::get().getWindowManager()->messageBox(msg);
|
||||||
|
MWBase::Environment::get().getDialogueManager()->say(mPtr, "Thief");
|
||||||
|
MWBase::Environment::get().getMechanicsManager()->reportCrime(player, mPtr, MWBase::MechanicsManager::OT_Theft,
|
||||||
|
item.getClass().getValue(item));
|
||||||
|
MWBase::Environment::get().getWindowManager()->removeGuiMode (GM_Enchanting);
|
||||||
|
MWBase::Environment::get().getWindowManager()->removeGuiMode (GM_Dialogue);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int result = mEnchanting.create();
|
int result = mEnchanting.create();
|
||||||
|
|
||||||
if(result==1)
|
if(result==1)
|
||||||
|
|
|
@ -271,6 +271,25 @@ namespace MWGui
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// check if the player is attempting to sell back an item stolen from this actor
|
||||||
|
for (std::vector<ItemStack>::iterator it = merchantBought.begin(); it != merchantBought.end(); ++it)
|
||||||
|
{
|
||||||
|
if (Misc::StringUtils::ciEqual(it->mBase.getCellRef().mOwner, mPtr.getCellRef().mRefID))
|
||||||
|
{
|
||||||
|
std::string msg = gmst.find("sNotifyMessage49")->getString();
|
||||||
|
if (msg.find("%s") != std::string::npos)
|
||||||
|
msg.replace(msg.find("%s"), 2, it->mBase.getClass().getName(it->mBase));
|
||||||
|
MWBase::Environment::get().getWindowManager()->messageBox(msg);
|
||||||
|
MWBase::Environment::get().getDialogueManager()->say(mPtr, "Thief");
|
||||||
|
MWBase::Environment::get().getMechanicsManager()->reportCrime(player, mPtr, MWBase::MechanicsManager::OT_Theft,
|
||||||
|
it->mBase.getClass().getValue(it->mBase)
|
||||||
|
* it->mCount);
|
||||||
|
onCancelButtonClicked(mCancelButton);
|
||||||
|
MWBase::Environment::get().getWindowManager()->removeGuiMode(GM_Dialogue);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(mCurrentBalance > mCurrentMerchantOffer)
|
if(mCurrentBalance > mCurrentMerchantOffer)
|
||||||
{
|
{
|
||||||
//if npc is a creature: reject (no haggle)
|
//if npc is a creature: reject (no haggle)
|
||||||
|
|
|
@ -28,6 +28,8 @@ namespace MWMechanics
|
||||||
void setEnchanter(MWWorld::Ptr enchanter);
|
void setEnchanter(MWWorld::Ptr enchanter);
|
||||||
void setSelfEnchanting(bool selfEnchanting);
|
void setSelfEnchanting(bool selfEnchanting);
|
||||||
void setOldItem(MWWorld::Ptr oldItem);
|
void setOldItem(MWWorld::Ptr oldItem);
|
||||||
|
MWWorld::Ptr getOldItem() { return mOldItemPtr; }
|
||||||
|
MWWorld::Ptr getGem() { return mSoulGemPtr; }
|
||||||
void setNewItemName(const std::string& s);
|
void setNewItemName(const std::string& s);
|
||||||
void setEffect(ESM::EffectList effectList);
|
void setEffect(ESM::EffectList effectList);
|
||||||
void setSoulGem(MWWorld::Ptr soulGem);
|
void setSoulGem(MWWorld::Ptr soulGem);
|
||||||
|
|
Loading…
Reference in a new issue