Ir para conteúdo
  • Cadastre-se

Posts Recomendados

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.

Link para o post
Compartilhar em outros sites

Esta é uma mensagem automática! Este tópico foi movido para a área correta.
Pedimos que você leia as regras do fórum.

Spoiler

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!

Link para o post
Compartilhar em outros sites
5 horas atrás, 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

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

 

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

 

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

Link para o post
Compartilhar em outros sites

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

Link para o post
Compartilhar em outros sites
2 minutos atrás, MarcosWalker disse:

up

 

Este tipo de post é considerado flood!
Que isso não se repita. Teste o script que eu lhe enviei!

 

@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

Link para o post
Compartilhar em outros sites
2 minutos atrás, login12 disse:

 

Este tipo de post é considerado flood!
Que isso não se repita. Teste o script que eu lhe enviei!

Não havia visto que você tinha comentado, desculpe. Irei testar

22 minutos atrás, login12 disse:

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;
}

 

Erro:

1517 C:\Users\xx\spells.cpp prototype for 'ReturnValue ConjureSpell::internalConjureItem(Player*, uint32_t, uint32_t, bool, uint32_t)' does not match any in class 'ConjureSpell' 
238 C:\Users\xx\spells.h static ReturnValue ConjureSpell::internalConjureItem(Player*, uint32_t, uint32_t, bool, uint32_t, slots_t, bool) 
238 C:\Users\xx\spells.h *** [obj//spells.o] Error 1

 

Link para o post
Compartilhar em outros sites

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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

  • Conteúdo Similar

    • Por Jaurez
      .
    • Por Cat
      Em alguns casos, o tibia 8.60 comum não abre de jeito nenhum no map editor, mesmo desmarcando check file signatures e configurando o path corretamente.
       
      Este é o client 8.60 adaptado para o Remere's Map Editor. Resolvi postar já que ele foi removido do site oficial do RME. (ficou apenas a versão para linux lá)
      Se estiver tendo problemas para abrir a versão 8.60, tente utilizar este.
                                                                                                                     
      Baixar o Tibia Client 8.60 que funciona no Remere’s Map Editor
      Essa versão do Tibia 8.60 client resolve o erro unsupported client version ou Could not locate tibia.dat and/or tibia.spr, please navigate to your tibia 8.60 installation folder.
       
      Downloads
      https://tibiaking.com/applications/core/interface/file/attachment.php?id=47333

      Scan: https://www.virustotal.com/gui/file/333e172ac49ba2028db9eb5889994509e7d2de28ebccfa428c04e86defbe15cc
       
    • Por danilo belato
      Fala Galera To Com um problema aki 
       
      quero exporta umas sprites de um server para colocar em outro 
       
      eu clico na sprites ai aparece tds a forma delas do lado de la >>
       
      ai eu clico nela e ponho a opiçao de export mais quando salvo a sprite ela n abri 
       
      aparece isso quando tento vê-la 
       
      visualização não disponível ( no formatos png e bitmap)
       
      Agora no formato idc fala que o paint n pode ler 
       
      me ajudem ae...
    • Por Vitor Bicaleto
      Galera to com o script do addon doll aqui, quando eu digito apenas "!addon" ele aparece assim: Digite novamente, algo está errado!"
      quando digito por exemplo: "!addon citizen" ele não funciona e não da nenhum erro
       
      mesma coisa acontece com o mount doll.. 
    • Por Ayron5
      Substitui uma stone no serve, deu tudo certo fora  esse  erro ajudem  Valendo  Rep+  Grato  

      Erro: data/actions/scripts/boost.lua:557: table index is nil
       [Warning - Event::loadScript] Cannot load script (data/actions/scripts/boost.lua)

      Script:
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo