Hey im currently working on a random dungeon generator, which i feel is similar, so ill share my knowledge (Im not 100% sure with everything).
The way im doing it right now is having a blueprint that decides the placements of my rooms and hallways that is running only on the server (using authority switch right after the begin play node), and at the end it spawns actors with these rooms also only on server, and these blueprints are set to replicates, which also shows them on the clients (And also set to always relevant because there is default max relpication distance).
This works, but is probably not the best way to do it, as replicating something like floor feels not good.
A different thing i tried was running the first bp on server and then spawning the rooms separately on all clients using a rep notify custom struct variable (If im correct, when this variable is set, it will update on all of the clients and a function will play on all of the clients)(i used rep notify, because i read that using custom events set to multi-cast in begin play is bad).
This did work in a sense, that it spawned the correct rooms and hallways, but it broke when a client was trying to walk on them. From my research the movement replication in unreal sends to server the name (id or whatever) of the object the client is standing on, and because all of them were spawned separately on different clients, they are not “linked” together and the movement wont be replicated correctly. By default only the things, that u put into the level before pressing play and blueprints set to replicate are “linked”. (I think, im not sure about that, and also i didnt find a way to link them manualy).
And then there is level streaming. I didnt try that yet, but i found a tutorial on yt:
I plan on trying this when i get the time.
If you find any usefull information, let me know;).