Personally I’d say it’s good to use RunService. If you want less laggy projectiles, have your fireball be summoned on client-side while performing hit detection on server-side script.
.Touched isn’t really the best for hit detection because it is laggy for projectiles and results often delay or is inaccurate. Use raycasting as the alternative.
Here is a good tutorial I found which will help you get started:
In the video, they use SpatialQuerys but you can use both that or raycasting as well. Ur choice