It only handles the projectiles in the same level, no different than what Graal does with default shoot()

!
And that delay is no different than what you get with a regular shoot, if Graal was made correctly, that is. That's called latency, and most games deal with it
When using shoot():
Client requests shoot() to server -> Server accepts and -> Packets are sent to clients in same level about the shoot.
Triggerclient:
Client sends a trigger to the server -> Server accepts and -> Sends trigger to client, and in the same step, bullets are spawned.
On second thought, there might be an additional .05 delay if the bullets can't be spawned in the same step the trigger is received? But that's not hard to deal with. It's one frame for Christ's sake.