Josegvb 87 Postado Maio 24, 2017 Share Postado Maio 24, 2017 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 More sharing options...
0 Poccnn 385 Postado Maio 24, 2017 Share Postado Maio 24, 2017 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 More sharing options...
0 Stigal 584 Postado Novembro 29, 2017 Share Postado Novembro 29, 2017 A questão neste tópico de suporte foi respondida e/ou o autor do tópico resolveu o problema. Este tópico está fechado e foi movido para Suporte - Resolvidos. Se você tiver outras dúvidas, crie um novo tópico. Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Josegvb 87
entao estou com 2 codigos q eu gostaria saber oq cada 1 faz...
codigo 1:
Codigo 2:
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