Ir para conteúdo

Featured Replies

Postado
  • Diretor

Não jogar itens pelo teleportes C++

 

1863719719_Semttulo2.png.00eb4eab36c9638b9db35d775d1cf222.png

 

453658907_Semttulo.png.fd4ff07b186b74c3417eafd476f006ef.png

 

 

Bom.. o nome já diz, qualquer um que jogar itens nos teleportes do seu otserv, o mesmo será removido, como aquelas lixeiras, porem esse sistema é pela source, descartando scripts .LUA.

 

 

Em teleporte.cpp ache:
 

void Teleport::__addThing(Creature* actor, int32_t, Thing* thing)
{
	if(!thing || thing->isRemoved())
		return;

	Tile* destTile = g_game.getTile(destination);
	if(!destTile)
		return;

	if(Creature* creature = thing->getCreature())
	{
		g_game.addMagicEffect(creature->getPosition(), MAGIC_EFFECT_TELEPORT, creature->isGhost());
		creature->getTile()->moveCreature(actor, creature, destTile);
		g_game.addMagicEffect(destTile->getPosition(), MAGIC_EFFECT_TELEPORT, creature->isGhost());
	}
	else if(Item* item = thing->getItem())
	{
		g_game.addMagicEffect(item->getPosition(), MAGIC_EFFECT_TELEPORT);
		g_game.internalMoveItem(actor, item->getTile(), destTile, INDEX_WHEREEVER, item, item->getItemCount(), NULL);
		g_game.addMagicEffect(destTile->getPosition(), MAGIC_EFFECT_TELEPORT);
	}
}

 

Altere ele todo para:

 

void Teleport::__addThing(Creature* actor, int32_t, Thing* thing)
{
    if (!thing || thing->isRemoved())
        return;

    Tile* destTile = g_game.getTile(destination);
    if (!destTile)
        return;

    if (Creature* creature = thing->getCreature())
    {
        g_game.addMagicEffect(creature->getPosition(), MAGIC_EFFECT_TELEPORT, creature->isGhost());
        creature->getTile()->moveCreature(actor, creature, destTile);
        g_game.addMagicEffect(destTile->getPosition(), MAGIC_EFFECT_TELEPORT, creature->isGhost());
    }
    else
    {
        Player* player = dynamic_cast<Player*>(actor);
        if (player)
        {
            player->sendTextMessage(MSG_STATUS_SMALL, "You cannot teleport items.");
			
			// Remover o item
            Item* item = dynamic_cast<Item*>(thing);
            if (item) {
                g_game.internalRemoveItem(actor, item);
            }
        }
        return;
    }
}

agora é só compilar no modo Rebuilder e ligar o servidor, créditos a mim L3K0T pela alterações.

 

20230912_034613.png.cf49b650c34dd7d7b1f79bd49c70f53c.png

Eu sou um entusiasta da programação apaixonado por ajudar a comunidade open source a crescer. Sempre em busca de novos desafios e oportunidades para contribuir com meu código.  #OpenSource #Programação #Contribuição

 

Postado
  • Autor
  • Diretor
9 horas atrás, DigoleraZica disse:

Bom dia,

 

Teria como colocar para bloquear de jogar o item em cima de teleports com storage ?

 

E esse seu em vez de remover o item teria como bloquear também?

precisa ter um moveitem instalado no seu servidor

 

 

OU Tente algo como isso
 

void Teleport::__addThing(Creature* actor, int32_t, Thing* thing)
{
    if (!thing || thing->isRemoved())
        return;

    Tile* destTile = g_game.getTile(destination);
    if (!destTile)
        return;

    if (Creature* creature = thing->getCreature())
    {
        g_game.addMagicEffect(creature->getPosition(), MAGIC_EFFECT_TELEPORT, creature->isGhost());
        creature->getTile()->moveCreature(actor, creature, destTile);
        g_game.addMagicEffect(destTile->getPosition(), MAGIC_EFFECT_TELEPORT, creature->isGhost());
    }
    else
    {
        Player* player = dynamic_cast<Player*>(actor);
        if (player)
        {
            player->sendTextMessage(MSG_STATUS_SMALL, "You cannot teleport items.");
        }
        return;
    }
}
10 horas atrás, BangxD disse:

Adorei amigo muito bom 😊 

obg, bem simples e util ;) 

 

20230912_034613.png.cf49b650c34dd7d7b1f79bd49c70f53c.png

Eu sou um entusiasta da programação apaixonado por ajudar a comunidade open source a crescer. Sempre em busca de novos desafios e oportunidades para contribuir com meu código.  #OpenSource #Programação #Contribuição

 

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

Informação Importante

Confirmação de Termo