1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-02-24 20:09:43 +00:00

Gold Pool implemented for Vendors

It appears that my solution breaks persuasion gold for some reason. I
may be wrong. I can’t see where this could be happening as the files
I’ve changes should not affect persuasion at all.
This commit is contained in:
Jeffrey Haines 2014-03-28 12:01:56 -04:00
parent 7026a0ceee
commit 895748f18d
3 changed files with 11 additions and 14 deletions

View file

@ -136,7 +136,7 @@ namespace MWClass
// TODO: this is not quite correct, in vanilla the merchant's gold pool is not available in his inventory. // TODO: this is not quite correct, in vanilla the merchant's gold pool is not available in his inventory.
// (except for gold you gave him) // (except for gold you gave him)
getContainerStore(ptr).add(MWWorld::ContainerStore::sGoldId, ref->mBase->mData.mGold, ptr); //getContainerStore(ptr).add(MWWorld::ContainerStore::sGoldId, ref->mBase->mData.mGold, ptr);
if (ref->mBase->mFlags & ESM::Creature::Weapon) if (ref->mBase->mFlags & ESM::Creature::Weapon)
getInventoryStore(ptr).autoEquip(ptr); getInventoryStore(ptr).autoEquip(ptr);

View file

@ -367,7 +367,7 @@ namespace MWClass
// TODO: this is not quite correct, in vanilla the merchant's gold pool is not available in his inventory. // TODO: this is not quite correct, in vanilla the merchant's gold pool is not available in his inventory.
// (except for gold you gave him) // (except for gold you gave him)
getContainerStore(ptr).add(MWWorld::ContainerStore::sGoldId, gold, ptr); //getContainerStore(ptr).add(MWWorld::ContainerStore::sGoldId, gold, ptr);
getInventoryStore(ptr).autoEquip(ptr); getInventoryStore(ptr).autoEquip(ptr);

View file

@ -360,7 +360,8 @@ namespace MWGui
if (mCurrentBalance != 0) if (mCurrentBalance != 0)
{ {
addOrRemoveGold(mCurrentBalance, player); addOrRemoveGold(mCurrentBalance, player);
addOrRemoveGold(-mCurrentBalance, mPtr); mPtr.getClass().getCreatureStats(mPtr).setGoldPool(
mPtr.getClass().getCreatureStats(mPtr).getGoldPool() - mCurrentBalance );
} }
updateTradeTime(); updateTradeTime();
@ -470,28 +471,24 @@ namespace MWGui
int TradeWindow::getMerchantGold() int TradeWindow::getMerchantGold()
{ {
int merchantGold = 0; int merchantGold = mPtr.getClass().getCreatureStats(mPtr).getGoldPool();
MWWorld::ContainerStore store = mPtr.getClass().getContainerStore(mPtr);
for (MWWorld::ContainerStoreIterator it = store.begin(); it != store.end(); ++it)
{
if (Misc::StringUtils::ciEqual(it->getCellRef().mRefID, MWWorld::ContainerStore::sGoldId))
merchantGold += it->getRefData().getCount();
}
return merchantGold; return merchantGold;
} }
// Relates to NPC gold reset delay // Relates to NPC gold reset delay
void TradeWindow::checkTradeTime() void TradeWindow::checkTradeTime()
{ {
MWWorld::ContainerStore store = mPtr.getClass().getContainerStore(mPtr); MWMechanics::CreatureStats &sellerStats = mPtr.getClass().getCreatureStats(mPtr);
const MWMechanics::CreatureStats &sellerStats = mPtr.getClass().getCreatureStats(mPtr);
double delay = boost::lexical_cast<double>(MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>().find("fBarterGoldResetDelay")->getInt()); double delay = boost::lexical_cast<double>(MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>().find("fBarterGoldResetDelay")->getInt());
// if time stamp longer than gold reset delay, reset gold. // if time stamp longer than gold reset delay, reset gold.
if (MWBase::Environment::get().getWorld()->getTimeStamp() >= sellerStats.getTradeTime() + delay) if (MWBase::Environment::get().getWorld()->getTimeStamp() >= sellerStats.getTradeTime() + delay)
{ {
addOrRemoveGold(-store.count(MWWorld::ContainerStore::sGoldId), mPtr); // reset gold to the base gold
addOrRemoveGold(+sellerStats.getGoldPool(), mPtr); if ( mPtr.getClass().isNpc() )
sellerStats.setGoldPool(mPtr.get<ESM::NPC>()->mBase->mNpdt52.mGold);
else
sellerStats.setGoldPool(mPtr.get<ESM::Creature>()->mBase->mData.mGold);
} }
} }