Where are you supposed to put game logic in multiplayer?

GameMode exists only on the server/host. So all those debug messages will only show up on the server/host. If you play as listen server, you’d probably see the messages. If you’re client, then the server is hidden in its own world in the editor.

It really depends on what you’re trying to achieve. If the spawn manager needs to only exist on the server, then you can stick it in the game mode. It would spawn enemy actors that are replicated, and those show up on the player side.

If you need players to know about some values, like max count or a timer or something, then you push those values in the Gamestate and mark them as replicated. Or use RPCs in the Gamestate.

You could also stick its own actor in the world. The server would own it and it replicates values and RPCs down to the players for whatever it is you need player side, like max count or a timer or whatever. Just be sure to flag the actor as Replicating and probably “Always Relevant” so it doesn’t matter where it exists in the world physically. And any server/host logic like actually spawning enemies, you have the Authority checks all the same.