Ir para conteúdo
Propaganda

Posts Recomendados

Proteção para jogadores que não forem donos da house mexer em itens. Evita falhas no sistema de house e jogadores serem roubados.

 

game.cpp, ache:

bool Game::playerMoveThing(uint32_t playerId, const Position& fromPos,
    uint16_t spriteId, int16_t fromStackpos, const Position& toPos, uint16_t count)

 

E troque por:

bool Game::playerMoveThing(uint32_t playerId, const Position& fromPos,
	uint16_t spriteId, int16_t fromStackpos, const Position& toPos, uint16_t count)
{
	Player* player = getPlayerByID(playerId);
	if(!player || player->isRemoved())
		return false;

	uint8_t fromIndex = 0;
	if(fromPos.x == 0xFFFF)
	{
		if(fromPos.y & 0x40)
			fromIndex = static_cast<uint8_t>(fromPos.z);
		else
			fromIndex = static_cast<uint8_t>(fromPos.y);
	}
	else
		fromIndex = fromStackpos;

	Tile* tileHoN = getMap()->getTile(fromPos);
	if(tileHoN)
	{
		HouseTile* houseTileNo = tileHoN->getHouseTile();
		if(houseTileNo)
		{
		    House* houseI = houseTileNo->getHouse();
		    if(houseI)
		    {
		    	House* houseO = Houses::getInstance()->getHouse(houseI->getId());
		        if(player->getGUID() != houseO->getOwner())
		        {
                	if(!houseO->isSubOwner(player))
                	{
                    	player->sendTextMessage(MSG_INFO_DESCR, "Sorry but you are not allowed to move item in this house.");
					    return false;
                	}
				}
			}
   		}
	}
	
	Thing* thing = internalGetThing(player, fromPos, fromIndex, spriteId, STACKPOS_MOVE);
	Cylinder* toCylinder = internalGetCylinder(player, toPos);
	if(!thing || !toCylinder)
	{
		player->sendCancelMessage(RET_NOTPOSSIBLE);
		return false;
	}

	if(Creature* movingCreature = thing->getCreature())
	{
		uint32_t delay = g_config.getNumber(ConfigManager::PUSH_CREATURE_DELAY);
		if(Position::areInRange<1,1,0>(movingCreature->getPosition(), player->getPosition()) && delay > 0)
		{
			SchedulerTask* task = createSchedulerTask(delay, boost::bind(&Game::playerMoveCreature, this,
				player->getID(), movingCreature->getID(), movingCreature->getPosition(), toCylinder->getPosition()));
			player->setNextActionTask(task);
		}
		else
			playerMoveCreature(playerId, movingCreature->getID(), movingCreature->getPosition(), toCylinder->getPosition());
	}
	else if(thing->getItem())
		playerMoveItem(playerId, fromPos, spriteId, fromStackpos, toPos, count);

	return true;
}

 

  • Like 4
Link para o comentário
https://tibiadevs.com/forums/topic/1296-prote%C3%A7%C3%A3o-house-c/
Compartilhar em outros sites

15 horas atrás, morduk disse:

Pra qual TFS?

Postei no lugar errado, se alguém puder mover agradeço

Link para o comentário
https://tibiadevs.com/forums/topic/1296-prote%C3%A7%C3%A3o-house-c/#findComment-6704
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
  • Criar Novo...