Postado Novembro 26, 2016 8 anos Olá pessoal do TK. Ultimamente estou usando a rev 3777, e a função dela de conjurar items é diferente da rev 3884... que conjura items na backpack... Eu já adicionei o código de runar na bp porém... ele só runa se a blank estiver de apenas com 1 charge... teria como colocar pra poder conjurar com 1 ou mais blank rune empilhavél? Igual ao rev 3884? Creio que o código de checar as blank runes seria esse: ReturnValue ConjureSpell::internalConjureItem(Player* player, uint32_t conjureId, uint32_t conjureCount, bool transform/* = false*/, uint32_t reagentId/* = 0*/, slots_t slot/* = SLOT_WHEREVER*/, bool test/* = false*/) { if(!transform) { Item* newItem = Item::CreateItem(conjureId, conjureCount); if(!newItem) return RET_NOTPOSSIBLE; ReturnValue ret = g_game.internalPlayerAddItem(player, player, newItem, true); if(ret != RET_NOERROR) delete newItem; return ret; } if(!reagentId) return RET_NOTPOSSIBLE; Item* item = player->getInventoryItem(slot); if(item && item->getID() == reagentId) { if(item->isStackable() && item->getItemCount() != 1) return RET_YOUNEEDTOSPLITYOURSPEARS; if(test) return RET_NOERROR; Item* newItem = g_game.transformItem(item, conjureId, conjureCount); if(!newItem) return RET_NOTPOSSIBLE; g_game.startDecay(newItem); return RET_NOERROR; } return RET_YOUNEEDAMAGICITEMTOCASTSPELL; } Desde já agradeço.
Postado Novembro 26, 2016 8 anos Esta é uma mensagem automática! Este tópico foi movido para a área correta.Pedimos que você leia as regras do fórum. Mostrar conteúdo oculto This is an automated message! This topic has been moved to the correct area.Please read the forum rules. ReturnValue ConjureSpell::internalConjureItem(Player* player, uint32_t conjureId, uint32_t conjureCount, bool transform/* = false*/, uint32_t reagentId/* = 0*/, slots_t slot/* = SLOT_WHEREVER*/, bool test/* = false*/) { if(!transform) { Item* newItem = Item::CreateItem(conjureId, conjureCount); if(!newItem) return RET_NOTPOSSIBLE; ReturnValue ret = g_game.internalPlayerAddItem(player, player, newItem, true); if(ret != RET_NOERROR) delete newItem; return ret; } if(!reagentId) return RET_NOTPOSSIBLE; Item* item = player->getInventoryItem(slot); if(item && item->getID() == reagentId) { if(item->isStackable() && item->getItemCount() <= 0) return RET_YOUNEEDTOSPLITYOURSPEARS; if(test) return RET_NOERROR; Item* newItem = g_game.transformItem(item, conjureId, conjureCount); if(!newItem) return RET_NOTPOSSIBLE; g_game.startDecay(newItem); return RET_NOERROR; } return RET_YOUNEEDAMAGICITEMTOCASTSPELL; } _ .-'` `} _./) / } .'o \ | } '.___.'`.\ {` /`\_/ , `. } ME DA UMA NOZ! \=' .-' _`\ { `'`;/ `, } _\ @ ; } /__`;-...'--' Cluck!
Postado Novembro 27, 2016 8 anos Autor Em 26/11/2016 em 21:32, Snowsz disse: Esta é uma mensagem automática! Este tópico foi movido para a área correta.Pedimos que você leia as regras do fórum. Mostrar conteúdo oculto Mostrar conteúdo oculto This is an automated message! This topic has been moved to the correct area.Please read the forum rules. ReturnValue ConjureSpell::internalConjureItem(Player* player, uint32_t conjureId, uint32_t conjureCount, bool transform/* = false*/, uint32_t reagentId/* = 0*/, slots_t slot/* = SLOT_WHEREVER*/, bool test/* = false*/) { if(!transform) { Item* newItem = Item::CreateItem(conjureId, conjureCount); if(!newItem) return RET_NOTPOSSIBLE; ReturnValue ret = g_game.internalPlayerAddItem(player, player, newItem, true); if(ret != RET_NOERROR) delete newItem; return ret; } if(!reagentId) return RET_NOTPOSSIBLE; Item* item = player->getInventoryItem(slot); if(item && item->getID() == reagentId) { if(item->isStackable() && item->getItemCount() <= 0) return RET_YOUNEEDTOSPLITYOURSPEARS; if(test) return RET_NOERROR; Item* newItem = g_game.transformItem(item, conjureId, conjureCount); if(!newItem) return RET_NOTPOSSIBLE; g_game.startDecay(newItem); return RET_NOERROR; } return RET_YOUNEEDAMAGICITEMTOCASTSPELL; } Se eu estiver qualquer quantidade de 1 a 100 blank runes após conjurar irá transformar em apenas 4 sudden death [se eu conjurar adori gran mort], que é a quantidade que apenas 1 blank rune deveria transformar... < se estiver assim quero que fique assim depois que conjurar Mas as 100 /\ estão transformando em apenas 4 charges...
Postado Dezembro 2, 2016 8 anos Troque suas duas funções, por estas: ReturnValue ConjureSpell::internalConjureItem(Player* player, uint32_t conjureId, uint32_t conjureCount, bool transform/* = false*/, uint32_t reagentId/* = 0*/) { if(!transform) { Item* newItem = Item::CreateItem(conjureId, conjureCount); if(!newItem) return RET_NOTPOSSIBLE; ReturnValue ret = g_game.internalPlayerAddItem(player, player, newItem, true); if(ret != RET_NOERROR) delete newItem; g_game.startDecay(newItem); return ret; } if(!reagentId) return RET_NOTPOSSIBLE; std::list<Container*> containers; Item *item = NULL, *fromItem = NULL; for(int32_t i = SLOT_FIRST; i < SLOT_LAST; ++i) { if(!(item = player->getInventoryItem((slots_t)i))) continue; if(!fromItem && item->getID() == reagentId) fromItem = item; else if(Container* container = item->getContainer()) containers.push_back(container); } if(!fromItem) { for(std::list<Container*>::iterator cit = containers.begin(); cit != containers.end(); ++cit) { for(ItemList::const_reverse_iterator it = (*cit)->getReversedItems(); it != (*cit)->getReversedEnd(); ++it) { if((*it)->getID() == reagentId) { fromItem = (*it); break; } if(Container* tmp = (*it)->getContainer()) containers.push_back(tmp); } } } if(!fromItem) return RET_YOUNEEDAMAGICITEMTOCASTSPELL; if((fromItem->isStackable() || fromItem->hasCharges()) && fromItem->getSubType() > 1) { item = Item::CreateItem(conjureId, conjureCount); ReturnValue ret = g_game.internalPlayerAddItem(NULL, player, item, false); if(ret != RET_NOERROR) return ret; g_game.transformItem(fromItem, reagentId, (int32_t)(fromItem->getItemCount() - 1)); } else g_game.transformItem(fromItem, conjureId, conjureCount); g_game.startDecay(item); return RET_NOERROR; } bool ConjureSpell::ConjureItem(const ConjureSpell* spell, Creature* creature, const std::string&) { Player* player = creature->getPlayer(); if(!player) return false; if(!player->hasFlag(PlayerFlag_IgnoreSpellCheck) && player->getZone() == ZONE_HARDCORE) { player->sendCancelMessage(RET_CANNOTCONJUREITEMHERE); g_game.addMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF); return false; } ReturnValue result = RET_NOTPOSSIBLE; if(spell->getReagentId() != 0) { if((result = internalConjureItem(player, spell->getConjureId(), spell->getConjureCount(), true, spell->getReagentId())) == RET_NOERROR) { spell->postSpell(player); g_game.addMagicEffect(player->getPosition(), MAGIC_EFFECT_WRAPS_RED); return true; } } else if((result = internalConjureItem(player, spell->getConjureId(), spell->getConjureCount())) == RET_NOERROR) { spell->postSpell(player); g_game.addMagicEffect(player->getPosition(), MAGIC_EFFECT_WRAPS_RED); return true; } player->sendCancelMessage(result); g_game.addMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF); return false; } @This life is filled with hurt When happiness doesn't work Trust me and take my hand When the lights go out you will understand
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.