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 3
Link para o comentário
https://tibiadevs.com/forums/topic/1296-prote%C3%A7%C3%A3o-house-c/
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...