Yeah using a multicast from server to trigger GC execution on all clients is perfectly fine, I was more put-off by other events looking to be the other way around - but if they’re called from GameMode, and as long as you are aware the Server flag is redundant, then it’s fine.
The fact that nothing prints is concerning. Print String should show up in all viewports. Server viewport should show both server and client prints. Client viewport should also show both server and client prints. The prints are prefixed by where the print string is executed (Server: or Client:).
If you don’t see any print, check the Output Log maybe ? All print strings are also logged, under the BlueprintUserMessages tag. Imho figuring this out is a priority, printing strings/logs is an important tool for debugging, especially in multiplayer contexts where BP debugger is more difficult to use.
This is true, and what RevOverDrive said is also true, but that doesn’t really sound like a concern if you do swipes outside of gameplay (ie. inbetween rounds).
If you really wanna dive into performance, here’s another thing to take into account :
GetAllActorsWithTag loops through all alive actors and does the string comparisons in C++. With your array approach you are looping through your array but require an IsValid check for each item. Blueprint is significantly slower than C++, so due to that check, there’s a possibility that array approach ends up being slower. Obviously it depends on the amount of alive objects vs. the amount of entries in the array. If LOTS of spawning/destroying happen during gameplay round (eg. weapon projectiles), chances are your array might end up even bigger than the amount of alive actors.
Ultimately only you can figure out what’s best for your use case, or if you really need to spend time on it or not.