Ir para conteúdo

Featured Replies

Postado

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.

  • Respostas 7
  • Visualizações 927
  • Created
  • Última resposta

Top Posters In This Topic

Postado

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

 

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
  • 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

 

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...

 

[IMG]  < se estiver assim quero que fique assim depois que conjurar  [IMG]

 

Mas as 100 /\ estão transformando em apenas 4 charges...

Postado

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.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo