I have an actor called Ability. It have attached State Machine component, which is used to control state of ability, like casting or cooldown.
Now. I run state twice. On client and on server. There is no real synchronization between those two. When input is received that state is just changed on both client and server independently.
It have advantage of the client getting accurate approximation to current timers (casting time, cooldown time), and feeling of instant feedback when button has been pressed.
In any case the client side things are used purely for cosmetic stuff. Entire game mechanics (like tracing, damage) is run on server and results are replicated back to client. And things that need to be synced between clients are called by using NetMulticast functions.
Now my question, is this an good approach or should I think about something else ?