I'm just planning right now, no script yet.
But here's my thought : Using .Magnitude in each mob to detect every few so often seconds.
1.How intensive is .Magnitude if let's say, I do it every 3 second with around 150 NPCs, with 8 players?
- How intensive is .Magnitude if let's say, the same condition except I do it locally, and sending remote event when the local player is close enough to an NPC?
If it is intensive, what amount of NPC should be suitable? What method of finding distance between NPC is the most data-saving?
(ps: i'm not asking for a script, just a draft/outline of what i should do)

3 comments
Weld a big, invisible sphere to each NPC. Use its .Touched to detect proximity. Delete it while you're running the "you're close" bit of your script so it doesn't make things go weird. Add it back at the end if necessary.
Ray cast. Ray casting is quite lightweight, and far more lightweight than looping through players.and calculating distance
Thanks for your feedback, guys! A big invisible sphere is what I'm using before coming up the idea of .Magnitude, but I think ray cast should be good since it doesn't run any other script such as iterating through players.