Ir para conteúdo
  • 0

[Resolvido] Duvida


Josegvb

Pergunta

entao estou com 2 codigos q eu gostaria saber oq cada 1 faz...

codigo 1:

Spoiler
Cylinder* Player::__queryDestination(int32_t& index, const Thing* thing, Item** destItem,	uint32_t& flags){	if(index == 0 /*drop to capacity window*/ || index == INDEX_WHEREEVER)	{		*destItem = NULL;		const Item* item = thing->getItem();		if(!item)			return this;		//find a appropiate slot		for(int32_t i = SLOT_FIRST; i < SLOT_LAST; ++i)		{			if(!inventory[i] && __queryAdd(i, item, item->getItemCount(), 0) == RET_NOERROR)			{				index = i;				return this;			}		}		//try containers		std::list<std::pair<Container*, int32_t> > deepList;		for(int32_t i = SLOT_FIRST; i < SLOT_LAST; ++i)		{			if(inventory[i] == tradeItem)				continue;			if(Container* container = dynamic_cast<Container*>(inventory[i]))			{				if(container->__queryAdd(-1, item, item->getItemCount(), 0) == RET_NOERROR)				{					index = INDEX_WHEREEVER;					*destItem = NULL;					return container;				}				deepList.push_back(std::make_pair(container, 0));			}		}		//check deeper in the containers		int32_t deepness = g_config.getNumber(ConfigManager::PLAYER_DEEPNESS);		for(std::list<std::pair<Container*, int32_t> >::iterator dit = deepList.begin(); dit != deepList.end(); ++dit)		{			Container* c = (*dit).first;			if(!c || c->empty())				continue;			int32_t level = (*dit).second;			for(ItemList::const_iterator it = c->getItems(); it != c->getEnd(); ++it)			{				if((*it) == tradeItem)					continue;				if(Container* subContainer = dynamic_cast<Container*>(*it))				{					if(subContainer->__queryAdd(-1, item, item->getItemCount(), 0) == RET_NOERROR)					{						index = INDEX_WHEREEVER;						*destItem = NULL;						return subContainer;					}					if(deepness < 0 || level < deepness)						deepList.push_back(std::make_pair(subContainer, (level + 1)));				}			}		}		return this;	}	Thing* destThing = __getThing(index);	if(destThing)		*destItem = destThing->getItem();	if(Cylinder* subCylinder = dynamic_cast<Cylinder*>(destThing))	{		index = INDEX_WHEREEVER;		*destItem = NULL;		return subCylinder;	}	return this;}

 

 

Codigo 2:

Spoiler
Cylinder* Player::__queryDestination(int32_t& index, const Thing* thing, Item** destItem,        uint32_t& flags){        if(index == 0 /*drop to capacity window*/ || index == INDEX_WHEREEVER){                *destItem = NULL;                 const Item* item = thing->getItem();                if(item == NULL){                        return this;                }                 //find an appropiate slot                std::list<Container*> containerList;                for(int i = SLOT_FIRST; i < SLOT_LAST; ++i){                        Item* inventoryItem = inventory[i];                         if(inventoryItem == tradeItem){                                continue;                        }                         if(inventoryItem == tradeItem){                                continue;                        }                                 if(inventoryItem){                                        //try find an already existing item to stack with                                if(inventoryItem != item && item->isStackable() && inventoryItem->getID() == item->getID() && inventoryItem->getItemCount() < 100){                                        *destItem = inventoryItem;                                        index = i;                                        return this;                                }                                //check sub-containers                                else if(Container* subContainer = inventoryItem->getContainer()){                                        Cylinder* tmpCylinder = NULL;                                        int32_t tmpIndex = INDEX_WHEREEVER;                                        Item* tmpDestItem = NULL;                                         tmpCylinder = subContainer->__queryDestination(tmpIndex, item, &tmpDestItem, flags);                                        if(tmpCylinder && tmpCylinder->__queryAdd(tmpIndex, item, item->getItemCount(), flags) == RET_NOERROR){                                                index = tmpIndex;                                                *destItem = tmpDestItem;                                                return tmpCylinder;                                        }                                         containerList.push_back(subContainer);                                }                        }                        //empty slot                        else if(__queryAdd(i, item, item->getItemCount(), flags) == RET_NOERROR){                                index = i;                                *destItem = NULL;                                return this;                        }                }                 //check deeper in the containers                for(std::list<Container*>::iterator it = containerList.begin(); it != containerList.end(); ++it){                        for(ContainerIterator iit = (*it)->begin(); iit != (*it)->end(); ++iit){                                if(Container* subContainer = (*iit)->getContainer()){                                         if(subContainer == tradeItem){                                                continue;                                        }                                         Cylinder* tmpCylinder = NULL;                                        int32_t tmpIndex = INDEX_WHEREEVER;                                        Item* tmpDestItem = NULL;                                         tmpCylinder = subContainer->__queryDestination(tmpIndex, item, &tmpDestItem, flags);                                        if(tmpCylinder && tmpCylinder->__queryAdd(tmpIndex, item, item->getItemCount(), flags) == RET_NOERROR){                                                index = tmpIndex;                                                *destItem = tmpDestItem;                                                return tmpCylinder;                                        }                                }                        }                }                return this;        }         Thing* destThing = __getThing(index);        if(destThing)                *destItem = destThing->getItem();         Cylinder* subCylinder = dynamic_cast<Cylinder*>(destThing);         if(subCylinder){                index = INDEX_WHEREEVER;                *destItem = NULL;                return subCylinder;        }        else                return this;}

 

alguem poderia me falar a diferença pfv? oq faz 1 e oq faiz o outro?

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Ao que me parece o primeiro ele apenas adiciona o item ao player e o segundo além de fazer isso ele verifica se existe outros items de mesmo id e que sejam agrupaveis e que tenham menos de 100 ( que o valor maximo de agrupamento de items agrupaveis) para uni-los em um monte só. 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...