For the actual deciding of when to battle, I was thinking of something like this:
area
Entered(atom/A)
.=..()
if(!ismob(A)) return .
if(istype(/mob/player1,A))
switch(rand(1,4))
if(1)//enemy 1 here
if(2)//enemy 2 here
if(3)//enemy 3 here
if(4) return .
if(istype(/mob/player2,A))
switch(rand(1,3))
if(1)//enemy 1 here
if(2)//enemy 2 here
if(3) return .
Is this a good way to handle what I am looking for?
If no for either, what would be a better way?
It could work. If I was to code something similar I'd create the combat maps on a different Z level then check to see if they are all in use (and if so--> create a new one). No point in constantly recreating maps, when you can leave them there for the next time they are used.
No.
Why? Cuz. You only get area/Entered() called once, when you enter the outside border of the area. While you walk around inside the area, it wont rand anything. If you're trying to create a static monster encounter point, then what you're doing would work, but I'd advise against that unless it is a boss.
I'd use mob/Player/Move()
Check first to see if they are in a no battle zone or already in a battle. Then check to see if the roll comes up for a battle. Then check to see which opponent they will get. You could specify WHICH opponents you can encounter using areas, and that'd be fine. But for the actual random combat probably not a good idea.