the problem is the function returns one player per frame.
make it return one player or monster per frame and you end up with really slow reacting monsters (average map of 60? thats 6 seconds to see a nearby monster).
So any 'replacement' would have to be noticably different in design.
'Findradius also ignores entities that are nonsolid I think'
DP finds them.
Findradius is a suitable replacement, so long as its slightly staggered between monsters. While 6 seconds is too slow, 0.5 is imho fine for non-player entities, though you'd want to spot players a little faster really.
if (e.flags & (FL_MONSTER | FL_CLIENT))
that would do nicely.