Ah, okay, I see what you’re saying now. problem you’re running into is one of ownership. If an event is invoked from Client and target is not owned by Client, event will be dropped. only way to communicate from Client up to Server is through Run on Server RPC, as you’re trying to do here, but if owning Actor (in this case, BP_ActorClick) is not owned by Client, even that communication won’t occur.
This limits most of this communication to Client’s PlayerController (which presents its own limitations, given where each controller exists on network and its own RPC limitations) and that controller’s Pawn. You can also use Client PlayerState.
So you might say, “why does it work with Overlap scenario, then?” Well, ActorClick BP exists on both Server and Client, and its overlap is looking for anything. If anything overlaps it, it’s going to fire Run on Server event. In this case, Server instance of Actor is being overlapped by Server instance of Character, so Server (which can run Run on Server RPC without any problems) is what’s actually firing. This won’t work with OnClicked event, because that’s only being touched by Client’s PlayerController.
Hope that makes sense. short answer is that way to handle this is to instead do communication inside Pawn (or PlayerState), or inside PlayerController itself. When OnClicked event fires, it should communicate with owned controller or pawn, which should ask Server to perform operation. If you need help setting that up, lemme know and I’ll throw a small project up somewhere.