mirror of
				https://github.com/vcmi/vcmi.git
				synced 2025-10-31 00:07:39 +02:00 
			
		
		
		
	Do not allow building boat if there is already boat with hero in it
This commit is contained in:
		| @@ -89,11 +89,23 @@ int3 IBoatGenerator::bestLocation() const | ||||
| 		int3 targetTile = getObject()->visitablePos() + offset; | ||||
| 		const TerrainTile *tile = getObject()->cb->getTile(targetTile, false); | ||||
|  | ||||
| 		if(tile) //tile is in the map | ||||
| 		if(!tile) | ||||
| 			continue; // tile not visible / outside the map | ||||
|  | ||||
| 		if(!tile->terType->isWater()) | ||||
| 			continue; | ||||
|  | ||||
| 		if (tile->blocked) | ||||
| 		{ | ||||
| 			if(tile->terType->isWater()  &&  (!tile->blocked || tile->blockingObjects.front()->ID == Obj::BOAT)) //and is water and is not blocked or is blocked by boat | ||||
| 				return targetTile; | ||||
| 			bool hasBoat = false; | ||||
| 			for (auto const * object : tile->blockingObjects) | ||||
| 				if (object->ID == Obj::BOAT || object->ID == Obj::HERO) | ||||
| 					hasBoat = true; | ||||
|  | ||||
| 			if (!hasBoat) | ||||
| 				continue; // tile is blocked, but not by boat -> check next potential position | ||||
| 		} | ||||
| 		return targetTile; | ||||
| 	} | ||||
| 	return int3 (-1,-1,-1); | ||||
| } | ||||
| @@ -112,7 +124,7 @@ IBoatGenerator::EGeneratorState IBoatGenerator::shipyardStatus() const | ||||
| 	if(t->blockingObjects.empty()) | ||||
| 		return GOOD; //OK | ||||
|  | ||||
| 	if(t->blockingObjects.front()->ID == Obj::BOAT) | ||||
| 	if(t->blockingObjects.front()->ID == Obj::BOAT || t->blockingObjects.front()->ID == Obj::HERO) | ||||
| 		return BOAT_ALREADY_BUILT; //blocked with boat | ||||
|  | ||||
| 	return TILE_BLOCKED; //blocked | ||||
|   | ||||
		Reference in New Issue
	
	Block a user