凡人修真3D(6)背包

1.背包检测空位的时候要注意。直接上代码吧。

正确的做法:检测完之后,需要立刻附加到背包中,才能进行下一次检测。

for (SeqPlayerItemPtr::iterator iter = playerItems.begin();
	iter != playerItems.end();
	iter++)
{
	if (toBag->haveSpace((*iter)->getTPlayerItem().itemCode, (*iter)->getTPlayerItem().itemAmount))
	{ 
		fromBag->deleteItem((*iter));
		toBag->addItem((*iter));
		CPlayerItemHelper::updatePlayerItem(EUpdateTypeUpdate, gateEntity, toBag, (*iter), playerItemUpdates, tLogItems, -1, updateCode, player, logDetail);
		SeqPlayerItemPtr playerItemVec2;
		CBagHelper::tidyBag(updateCode, gateEntity, player, toBag, playerItemVec2, playerItemUpdates, tLogItems);
		CBagHelper::pushBagInfo(updateCode, gateEntity, toBag, playerItemVec2);
	}
}

这不是唯一的写法。关键点是,在调用了haveSpace函数之后,需要添加了这个物品。如果在添加物品前,再次检测,就没有意义了。

例如:

for (SeqPlayerItemPtr::iterator iter = playerItems.begin();
	iter != playerItems.end();
	iter++)
{
	if (haveSpace(getTPlayerItem().itemCode, getTPlayerItem().itemAmount))
	{ 
		//xxx
	}
}
//xxx干其他东西
for (SeqPlayerItemPtr::iterator iter = playerItems.begin();
	iter != playerItems.end();
	iter++)
{
	addItem((*iter));;
}
像这样,会出错,因为物品还没加进去,但是可能位置应该被占用了。

碰到这种情况,应该累加起来。

        for (itemAmountMapIt = itemAmountMap.begin();
<span style="white-space:pre">		</span>itemAmountMapIt != itemAmountMap.end();
<span style="white-space:pre">		</span>++itemAmountMapIt)
<span style="white-space:pre">	</span>{ 
<span style="white-space:pre">		</span>itemCodeAndAmountMap[itemAmountMapIt->second.itemCode] += itemAmountMapIt->second.amount;
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>if (!bag->haveSpaces(itemCodeAndAmountMap))
<span style="white-space:pre">	</span>{
<span style="white-space:pre">		</span>CErrorCodeManager::throwException("ErrorGate_BagSlotNotEnough");
<span style="white-space:pre">	</span>}



posted @ 2016-11-10 21:51  肥宝游戏  阅读(189)  评论(0编辑  收藏  举报