One of the main reasons walls may not join properly is because at least one of those walls is extended.
Wall sides resulting from extensions doesn’t have the ability to solve intersections with other walls.
Why extended parts of walls don’t solve intersections?
The reason is that the wall extension command (_vaWallExtend) is a post process that is done after the intersections have been solved, this process just extrudes or trims the wall. Actually after extending a wall its height value remains the same.
Solutions
In the example below the actual height of the wall 1 is set until the red line. Since it has been extended until the roof the rest of the intersection with the wall 2 has not been solved.
The solution is to set the height of the wall 1 at least like the wall 2.
In this other example, wall 3 has been extended to reach the higher roof, hence creating a new side that is unable to solve the intersection with wall 4. The problem would still be there if wall 3 was already higher and extended downwards to the lower roof.
The solution in this case is to split wall 3 in three parts, two for the lower roof and one for the higher one. This will allow to set the height of each wall as close as possible to its roof, and use extend just to make its top face inclined.
Conclusion
- Create walls already with the right height, set it as close as possible to the height you need.
- Try to use wall extend just when you need non horizontal top or bottom faces.
- Try to use a different wall for each height, in other words avoid extending a wall to more than one object if they are placed at different heights.