LeoTK 173 Postado Março 17, 2019 Share Postado Março 17, 2019 @XZero vixi ai teria que tirar essa dúvida com alguém experiente Link para o comentário Compartilhar em outros sites More sharing options...
XZero 68 Postado Março 17, 2019 Share Postado Março 17, 2019 (editado) @Brunds Como falei unique é para ficar preso no personagem, com essa falha o sistema fica incompleto. Mas acho que sei um jeito de arrumar esse problema, qualquer coisa eu posto aqui. Editado Março 17, 2019 por XZero Link para o comentário Compartilhar em outros sites More sharing options...
LeoTK 173 Postado Março 17, 2019 Share Postado Março 17, 2019 @XZero blz ficarei no aguardo então estou interessado nesse sistema Link para o comentário Compartilhar em outros sites More sharing options...
Strogman 88 Postado Março 17, 2019 Share Postado Março 17, 2019 (editado) 9 horas atrás, gabrielzika disse: Testei aqui e acontece o seguinte: se eu colocar o item que está como "unique" em um Bag estou conseguindo jogar ela e o item no chão, o mesmo ocorre quando eu coloco o item em um bau pelo map, estou conseguindo como se o item não fosse unique... em game.cpp em baixo de if(!player->hasCustomFlag(PlayerCustomFlag_CanThrowAnywhere)) { if((std::abs(playerPos.x - mapToPos.x) > item->getThrowRange()) || (std::abs(playerPos.y - mapToPos.y) > item->getThrowRange()) || (std::abs(mapFromPos.z - mapToPos.z) * 4 > item->getThrowRange())) { player->sendCancelMessage(RET_DESTINATIONOUTOFREACH); return false; } } coloque isso: if(item->getContainer()) { Container* container = item->getContainer(); for(ContainerIterator sb = container->begin(), end = container->end(); sb != end; ++sb) { Item* ballSLot = (*sb)->getItem(); boost::any valueU = (ballSLot)->getAttribute("unique"); if(valueU.type() == typeid(int32_t)) { if(boost::any_cast<int32_t>(valueU) == 1) { Thing* thingT = internalGetThing(player, toPos, toIndex, spriteId, STACKPOS_MOVE); if(getMap()->getTile(toPos)) { player->sendTextMessage(MSG_INFO_DESCR, "A item in this container is a Unique Item. You can't throw away this item!"); return false; } } } } } OBS: isso é só para não poder rebolar a bag com item unique no chão, a outra parte estou com preguiça. quem sabe, mais tarde eu resolva fazer, se ninguém ainda tiver feito, até lá. kkkk Editado Março 17, 2019 por gristony gabrielzika, FlamesAdmin e Tony Araujo reagiu a isso 3 Link para o comentário Compartilhar em outros sites More sharing options...
Tony Araujo 282 Postado Março 17, 2019 Autor Share Postado Março 17, 2019 (editado) 1 hora atrás, gristony disse: em game.cpp em baixo de if(!player->hasCustomFlag(PlayerCustomFlag_CanThrowAnywhere)) { if((std::abs(playerPos.x - mapToPos.x) > item->getThrowRange()) || (std::abs(playerPos.y - mapToPos.y) > item->getThrowRange()) || (std::abs(mapFromPos.z - mapToPos.z) * 4 > item->getThrowRange())) { player->sendCancelMessage(RET_DESTINATIONOUTOFREACH); return false; } } coloque isso: if(item->getContainer()) { Container* container = item->getContainer(); for(ContainerIterator sb = container->begin(), end = container->end(); sb != end; ++sb) { Item* ballSLot = (*sb)->getItem(); boost::any valueU = (ballSLot)->getAttribute("unique"); if(valueU.type() == typeid(int32_t)) { if(boost::any_cast<int32_t>(valueU) == 1) { Thing* thingT = internalGetThing(player, toPos, toIndex, spriteId, STACKPOS_MOVE); if(getMap()->getTile(toPos)) { player->sendTextMessage(MSG_INFO_DESCR, "A item in this container is a Unique Item. You can't throw away this item!"); return false; } } } } } OBS: isso é só para não poder rebolar a bag com item unique no chão, a outra parte estou com preguiça. quem sabe, mais tarde eu resolva fazer, se ninguém ainda tiver feito, até lá. kkkk Obrigado por contribuir brother, a outra parte eu fiz aqui e vou atualizar o tópico junto com sua contribuição. ;D @TOPICO - ATUALIZADO! Removido todos os bugs encontrados. O personagem não pode negociar bags que contenham unique items dentro. O personagem não pode por um unique tem dentro de uma bag que esteja no chão, só poderá guardar dentro do depot. O personagem não pode jogar fora uma bag que contenham unique items dentro. Adicionado imagens de todas as funções do sistema. Editado Março 17, 2019 por Tony Araujo Link para o comentário Compartilhar em outros sites More sharing options...
Crypter 136 Postado Março 17, 2019 Share Postado Março 17, 2019 Caso tenha uma bag dentro de outra bag com um unique item, vai dar pra dar trade... Link para o comentário Compartilhar em outros sites More sharing options...
Tony Araujo 282 Postado Março 17, 2019 Autor Share Postado Março 17, 2019 38 minutos atrás, Crypter disse: Caso tenha uma bag dentro de outra bag com um unique item, vai dar pra dar trade... Não dá pra colocar um item unique de dentro de uma bag pra outra Link para o comentário Compartilhar em outros sites More sharing options...
boxxer321 67 Postado Março 21, 2019 Share Postado Março 21, 2019 deu esse erro no meu https://hastebin.com/noxalibogi.php Link para o comentário Compartilhar em outros sites More sharing options...
gabriel28 60 Postado Março 22, 2019 Share Postado Março 22, 2019 (editado) No 0.4 só deu um erro na hora de compilar, mas foi uma besteirinha e falta de atenção minha: Na hora de substituir essa função: if(item->isStackable()) Você poem essa: Código: Spoiler if(item->isStackable()) { uint8_t n = 0; //acrescimo if(toItem && toItem->getID() == item->getID()) { boost::any item_value = item->getAttribute("unique"); boost::any toItem_value = toItem->getAttribute("unique"); if(!item_value.empty() && !toItem_value.empty() || item_value.empty() && toItem_value.empty()) { n = std::min((uint32_t)100 - toItem->getItemCount(), m); toCylinder->__updateThing(toItem, toItem->getID(), toItem->getItemCount() + n); updateItem = toItem; } } if(m - n > 0) { moveItem = Item::CreateItem(item->getID(), m - n); boost::any value = item->getAttribute("unique"); if(!value.empty()) moveItem->setAttribute("unique", 1); } else moveItem = NULL; if(item->isRemoved()) freeThing(item); } Também, na hora de copiar e colar, prestem atenção se não tem nenhum sinal de interrogação '?' no código. Ainda não testei pra ver se está 100% funcional na versão 0.4, mas creio que está sem problema. Depois edito o comentário dizendo. Editado Março 22, 2019 por gabriel28 Tony Araujo reagiu a isso 1 Link para o comentário Compartilhar em outros sites More sharing options...
Tony Araujo 282 Postado Março 22, 2019 Autor Share Postado Março 22, 2019 10 minutos atrás, gabriel28 disse: No 0.4 só deu um erro na hora de compilar, mas foi uma besteirinha e falta de atenção minha: Na hora de substituir essa função: if(item->isStackable()) Você poem essa: Código: Ocultar conteúdo if(item->isStackable()) { uint8_t n = 0; //acrescimo if(toItem && toItem->getID() == item->getID()) { boost::any item_value = item->getAttribute("unique"); boost::any toItem_value = toItem->getAttribute("unique"); if(!item_value.empty() && !toItem_value.empty() || item_value.empty() && toItem_value.empty()) { n = std::min((uint32_t)100 - toItem->getItemCount(), m); toCylinder->__updateThing(toItem, toItem->getID(), toItem->getItemCount() + n); updateItem = toItem; } } if(m - n > 0) { moveItem = Item::CreateItem(item->getID(), m - n); boost::any value = item->getAttribute("unique"); if(!value.empty()) moveItem->setAttribute("unique", 1); } else moveItem = NULL; if(item->isRemoved()) freeThing(item); } Também, na hora de copiar e colar, prestem atenção se não tem nenhum sinal de interrogação '?' no código. Ainda não testei pra ver se está 100% funcional na versão 0.4, mas creio que está sem problema. Depois edito o comentário dizendo. Obrigado por contribuir com o código brother ❤️ gabriel28 reagiu a isso 1 Link para o comentário Compartilhar em outros sites More sharing options...
gabriel28 60 Postado Março 22, 2019 Share Postado Março 22, 2019 @Tony Araujo Nada, só precisou declarar um negocinho e pronto. :D Testado e 100% funcional no 0.4 rev 3884. (Jogando diretamente no chão. Jogando a bp com o item dentro, jogando a bp, com uma bp, com outra bp com o item dentro. Dando trade direto no item. Dando trade com uma bp, com outra bp com o item dentro.) Um scriptzin, pra quem não sabe fazer, de um baú que da um item unique: Código: Spoiler function onUse(cid, item, frompos, item2, topos) local item = doPlayerAddItem(cid, 2515, 1) if getPlayerStorageValue(cid, 132800) < 1 then doPlayerSendTextMessage(cid,22,"Conseguiu um item.") setPlayerStorageValue(cid, 132800, 1) doItemSetAttribute(item, "unique", 1) else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Voce ja abriu esse bau.") end return true end Link para o comentário Compartilhar em outros sites More sharing options...
gabriel28 60 Postado Março 24, 2019 Share Postado Março 24, 2019 Pra quem pensar em por em servidores que não seja de Pokemon, terá que fazer alterações no código, pois, se o player morrer e perder a BP com um item unique dentro, outro player pode pegar. Link para o comentário Compartilhar em outros sites More sharing options...
Walox 46 Postado Abril 20, 2019 Share Postado Abril 20, 2019 "[C++] Unique Item System - ATUALIZADO! (No-bugs)" Bom eu acabei achando um errom... Quando eu jogo um item dentro de um recipiente aleatório no mapa, outro jogador consegue pegar o item mas a função unique permanece, acho que ainda tem bugs rs Link para o comentário Compartilhar em outros sites More sharing options...
gabriel28 60 Postado Maio 17, 2019 Share Postado Maio 17, 2019 Em 20/04/2019 em 02:55, Walox disse: "[C++] Unique Item System - ATUALIZADO! (No-bugs)" Bom eu acabei achando um errom... Quando eu jogo um item dentro de um recipiente aleatório no mapa, outro jogador consegue pegar o item mas a função unique permanece, acho que ainda tem bugs rs Como assim? Tipo um baú que está no mapa? Link para o comentário Compartilhar em outros sites More sharing options...
Walox 46 Postado Maio 17, 2019 Share Postado Maio 17, 2019 2 horas atrás, gabriel28 disse: Como assim? Tipo um baú que está no mapa? Isso mesmo pode ser bau, bag ou outros recipientes Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados