forked from teamnwah/openmw-tes3coop
Fix disposition changes from trades not applying properly
This commit is contained in:
parent
728365b48d
commit
c85c2cff4e
6 changed files with 23 additions and 6 deletions
|
@ -51,7 +51,7 @@ namespace MWBase
|
||||||
|
|
||||||
virtual void persuade (int type) = 0;
|
virtual void persuade (int type) = 0;
|
||||||
virtual int getTemporaryDispositionChange () const = 0;
|
virtual int getTemporaryDispositionChange () const = 0;
|
||||||
virtual void applyTemporaryDispositionChange (int delta) = 0;
|
virtual void applyDispositionChange (int delta) = 0;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -126,6 +126,8 @@ namespace MWDialogue
|
||||||
void DialogueManager::startDialogue (const MWWorld::Ptr& actor)
|
void DialogueManager::startDialogue (const MWWorld::Ptr& actor)
|
||||||
{
|
{
|
||||||
mLastTopic = "";
|
mLastTopic = "";
|
||||||
|
mPermanentDispositionChange = 0;
|
||||||
|
mTemporaryDispositionChange = 0;
|
||||||
|
|
||||||
mChoice = -1;
|
mChoice = -1;
|
||||||
mIsInChoice = false;
|
mIsInChoice = false;
|
||||||
|
@ -514,9 +516,19 @@ namespace MWDialogue
|
||||||
return mTemporaryDispositionChange;
|
return mTemporaryDispositionChange;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DialogueManager::applyTemporaryDispositionChange(int delta)
|
void DialogueManager::applyDispositionChange(int delta)
|
||||||
{
|
{
|
||||||
|
int oldTemp = mTemporaryDispositionChange;
|
||||||
mTemporaryDispositionChange += delta;
|
mTemporaryDispositionChange += delta;
|
||||||
|
// don't allow increasing beyond 100 or decreasing below 0
|
||||||
|
int curDisp = MWBase::Environment::get().getMechanicsManager()->getDerivedDisposition(mActor);
|
||||||
|
if (curDisp + mTemporaryDispositionChange < 0)
|
||||||
|
mTemporaryDispositionChange = -curDisp;
|
||||||
|
else if (curDisp + mTemporaryDispositionChange > 100)
|
||||||
|
mTemporaryDispositionChange = 100 - curDisp;
|
||||||
|
|
||||||
|
int diff = mTemporaryDispositionChange - oldTemp;
|
||||||
|
mPermanentDispositionChange += diff;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DialogueManager::checkServiceRefused()
|
bool DialogueManager::checkServiceRefused()
|
||||||
|
|
|
@ -76,7 +76,7 @@ namespace MWDialogue
|
||||||
|
|
||||||
virtual void persuade (int type);
|
virtual void persuade (int type);
|
||||||
virtual int getTemporaryDispositionChange () const;
|
virtual int getTemporaryDispositionChange () const;
|
||||||
virtual void applyTemporaryDispositionChange (int delta);
|
virtual void applyDispositionChange (int delta);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -319,7 +319,7 @@ namespace MWGui
|
||||||
messageBox("#{sNotifyMessage9}");
|
messageBox("#{sNotifyMessage9}");
|
||||||
|
|
||||||
int iBarterFailDisposition = gmst.find("iBarterFailDisposition")->getInt();
|
int iBarterFailDisposition = gmst.find("iBarterFailDisposition")->getInt();
|
||||||
MWBase::Environment::get().getDialogueManager()->applyTemporaryDispositionChange(iBarterFailDisposition);
|
MWBase::Environment::get().getDialogueManager()->applyDispositionChange(iBarterFailDisposition);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -328,7 +328,7 @@ namespace MWGui
|
||||||
}
|
}
|
||||||
|
|
||||||
int iBarterSuccessDisposition = gmst.find("iBarterSuccessDisposition")->getInt();
|
int iBarterSuccessDisposition = gmst.find("iBarterSuccessDisposition")->getInt();
|
||||||
MWBase::Environment::get().getDialogueManager()->applyTemporaryDispositionChange(iBarterSuccessDisposition);
|
MWBase::Environment::get().getDialogueManager()->applyDispositionChange(iBarterSuccessDisposition);
|
||||||
|
|
||||||
// make the item transfer
|
// make the item transfer
|
||||||
mTradeModel->transferItems();
|
mTradeModel->transferItems();
|
||||||
|
|
|
@ -248,7 +248,8 @@ namespace MWMechanics
|
||||||
|
|
||||||
void CreatureStats::setAiSetting (AiSetting index, int base)
|
void CreatureStats::setAiSetting (AiSetting index, int base)
|
||||||
{
|
{
|
||||||
Stat<int> stat(base);
|
Stat<int> stat = getAiSetting(index);
|
||||||
|
stat.setBase(base);
|
||||||
setAiSetting(index, stat);
|
setAiSetting(index, stat);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -749,11 +749,15 @@ namespace MWMechanics
|
||||||
if (!owner.empty())
|
if (!owner.empty())
|
||||||
victim = MWBase::Environment::get().getWorld()->getPtr(owner, true);
|
victim = MWBase::Environment::get().getWorld()->getPtr(owner, true);
|
||||||
|
|
||||||
|
// TODO: expell from faction
|
||||||
|
|
||||||
commitCrime(ptr, victim, OT_Theft, item.getClass().getValue(item) * count);
|
commitCrime(ptr, victim, OT_Theft, item.getClass().getValue(item) * count);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MechanicsManager::commitCrime(const MWWorld::Ptr &ptr, const MWWorld::Ptr &victim, OffenseType type, int arg)
|
void MechanicsManager::commitCrime(const MWWorld::Ptr &ptr, const MWWorld::Ptr &victim, OffenseType type, int arg)
|
||||||
{
|
{
|
||||||
|
// TODO: expell from faction
|
||||||
|
|
||||||
bool reported=false;
|
bool reported=false;
|
||||||
for (Actors::PtrControllerMap::const_iterator it = mActors.begin(); it != mActors.end(); ++it)
|
for (Actors::PtrControllerMap::const_iterator it = mActors.begin(); it != mActors.end(); ++it)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue