NO

using PlayerList c++

Por nociam, 04 de ago. de 2019 em Programação

c++
1
1.1k
nociamN
04 de agosto de 2019 às 22:58

Boa noite.

Estou com um problema de loop na minha lista e realmente não sei qual erro estou cometendo.

Faço o loop na lista se não tiver esse player na área ele exclui porem quanto tenho 2 player na área um deles sai dessa área o sistema entra em loop nesse trecho do código.

 

	bool achou = false;
	for (Creature* creature : this->blockRespawList) {
		SpectatorHashSet listAux;
		g_game.map.getSpectators(listAux, this->position, false, true);
		for (Creature* creatureAux : listAux) {
			if (creatureAux == creature) {
				achou = true;
			}
		}

		if (!achou) {
			this->removeBlockRespawList(creature);
			this->setBlockRespaw(RESPAWN_NONE);
		}

	}

removeBlockRespawList

	auto it = std::find(blockRespawList.begin(), blockRespawList.end(), creature);
	if (it != blockRespawList.end()) {
		creature->decrementReferenceCounter();
		blockRespawList.erase(it);
	}

 

32 minutos atrás, nociam disse:

Boa noite.

Estou com um problema de loop na minha lista e realmente não sei qual erro estou cometendo.

Faço o loop na lista se não tiver esse player na área ele exclui porem quanto tenho 2 player na área um na lista e o outro não o sistema entra em loop nesse trecho do código.

 

	bool achou = false;
	for (Creature* creature : this->blockRespawList) {
		SpectatorHashSet listAux;
		g_game.map.getSpectators(listAux, this->position, false, true);
		for (Creature* creatureAux : listAux) {
			if (creatureAux == creature) {
				achou = true;
			}
		}

		if (!achou) {
			this->removeBlockRespawList(creature);
			this->setBlockRespaw(RESPAWN_NONE);
		}

	}

removeBlockRespawList

	auto it = std::find(blockRespawList.begin(), blockRespawList.end(), creature);
	if (it != blockRespawList.end()) {
		creature->decrementReferenceCounter();
		blockRespawList.erase(it);
	}

 

Resolvido pode fechar.

	bool achou = false;
	auto it = blockRespawList.begin(), end = blockRespawList.end();
	while (it != end) {
		Creature* creature = *it;
		SpectatorHashSet listAux;
		g_game.map.getSpectators(listAux, this->position, false, true);
		for (Creature* creatureAux : listAux) {
			if (creatureAux == creature) {
				achou = true;
			}
		}

		if (!achou) {
			this->removeBlockRespawList(creature);
			this->setBlockRespaw(RESPAWN_NONE);
		}
		++it;
	}

 

Editado Agosto 4 por nociam