forked from mirror/openmw-tes3mp
parent
3356fb81ce
commit
b277bd782e
2 changed files with 17 additions and 3 deletions
|
@ -156,6 +156,16 @@ int MWWorld::ContainerStore::count(const std::string &id)
|
||||||
return total;
|
return total;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int MWWorld::ContainerStore::restockCount(const std::string &id)
|
||||||
|
{
|
||||||
|
int total=0;
|
||||||
|
for (MWWorld::ContainerStoreIterator iter (begin()); iter!=end(); ++iter)
|
||||||
|
if (Misc::StringUtils::ciEqual(iter->getCellRef().getRefId(), id))
|
||||||
|
if (iter->getCellRef().getSoul().empty())
|
||||||
|
total += iter->getRefData().getCount();
|
||||||
|
return total;
|
||||||
|
}
|
||||||
|
|
||||||
MWWorld::ContainerStoreListener* MWWorld::ContainerStore::getContListener() const
|
MWWorld::ContainerStoreListener* MWWorld::ContainerStore::getContListener() const
|
||||||
{
|
{
|
||||||
return mListener;
|
return mListener;
|
||||||
|
@ -512,7 +522,7 @@ void MWWorld::ContainerStore::restock (const ESM::InventoryList& items, const MW
|
||||||
for (std::map<std::pair<std::string, std::string>, int>::iterator it = mLevelledItemMap.begin(); it != mLevelledItemMap.end();)
|
for (std::map<std::pair<std::string, std::string>, int>::iterator it = mLevelledItemMap.begin(); it != mLevelledItemMap.end();)
|
||||||
{
|
{
|
||||||
int spawnedCount = it->second; //How many items should be in shop originally
|
int spawnedCount = it->second; //How many items should be in shop originally
|
||||||
int itemCount = count(it->first.first); //How many items are there in shop now
|
int itemCount = restockCount(it->first.first); //How many items are there in shop now
|
||||||
//If something was not sold
|
//If something was not sold
|
||||||
if(itemCount >= spawnedCount)
|
if(itemCount >= spawnedCount)
|
||||||
{
|
{
|
||||||
|
@ -578,7 +588,7 @@ void MWWorld::ContainerStore::restock (const ESM::InventoryList& items, const MW
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//Restocking static item - just restock to the max count
|
//Restocking static item - just restock to the max count
|
||||||
int currentCount = count(itemOrList);
|
int currentCount = restockCount(itemOrList);
|
||||||
if (currentCount < std::abs(it->mCount))
|
if (currentCount < std::abs(it->mCount))
|
||||||
addInitialItem(itemOrList, owner, -(std::abs(it->mCount) - currentCount), true);
|
addInitialItem(itemOrList, owner, -(std::abs(it->mCount) - currentCount), true);
|
||||||
}
|
}
|
||||||
|
|
|
@ -162,8 +162,12 @@ namespace MWWorld
|
||||||
/// If a compatible stack is found, the item's count is added to that stack, then the original is deleted.
|
/// If a compatible stack is found, the item's count is added to that stack, then the original is deleted.
|
||||||
/// @return If the item was stacked, return the stack, otherwise return the old (untouched) item.
|
/// @return If the item was stacked, return the stack, otherwise return the old (untouched) item.
|
||||||
|
|
||||||
/// @return How many items with refID \a id are in this container?
|
|
||||||
int count (const std::string& id);
|
int count (const std::string& id);
|
||||||
|
///< @return How many items with refID \a id are in this container?
|
||||||
|
|
||||||
|
int restockCount (const std::string& id);
|
||||||
|
///< Item count with restock adjustments (such as ignoring filled soul gems).
|
||||||
|
/// @return How many items with refID \a id are in this container?
|
||||||
|
|
||||||
ContainerStoreListener* getContListener() const;
|
ContainerStoreListener* getContListener() const;
|
||||||
void setContListener(ContainerStoreListener* listener);
|
void setContListener(ContainerStoreListener* listener);
|
||||||
|
|
Loading…
Reference in a new issue