This will be always the case. Long time ago, I played at one rp server which tried to implement this and whatever they did I was always able to exploit that and abuse to powerlevelling.
I think that the classic method of the distance check is fine - if you make your monsters to require help of more peoples and not to be one-shot killed its a good chance the second pc will join the battle as well. Or if you rescript the monster targetting from nearest to most vulnerable. Instead of checking whether the second PC cast spell or damaged monster physically, make the moster to cast spell/damage him!
I believe this is problem only for a very static and hack&slash style of areas/modules. This is why diablo sucks so much and is overcrowded with bots. BTW Funky when you say bots, you mean secondary logins with autofollow or your really found an automated bot playing as regular PC on your server?
It's not always the case, actually. It will of course always be a factor, but there are many things you can do to hinder ex@plo&it)ers besides throwing your hands up and declaring it inevitable. It just takes a lot more thought and a lot more complicated coding. In pretty much every area we've tackled in that regard, we've managed to come up with an acceptable compromise between cost and benefit that dealt with the issue at hand pretty effectively. The question is not if it's possible, just how, and at how much cost in development time.
In this case, my fear is that it's going to cost rather a lot. I'll elaborate on that after I explain my situation.
We have a pretty large playerbase, even now, and they're fairly adept at finding and using exploits, as many of them are pretty veteran gamers, familiar with programs like C**********e. They also tend to possess nifty toys like programmable gaming keyboards, with some pretty amazing macro capabilities. They use them to play up to eight characters at once, in some cases, and a number of them can play two characters simultaneously pretty much flawlessly.
My goal isn't to single out all such cases, which would be an enormously difficult and time-consuming undertaking that would no doubt create an immense amount of overhead and likely some skewed incentives to boot. My goal is just to single out characters that are effectively leeching, or being dragged along for reasons I consider invalid. In particular, I want to avoid creating an incentive to drag additional toons along on runs in our forthcoming area set, Limbo, because I want to introduce a WoW-like quest reward system that gives currency-style items to players simply for completing runs. Absent some discrimination between bot and non-bot, that would introduce an incentive to drag along excess bots up to the party limit simply for more loot.
Like the OP, I'm not much interested in debating 'can' or 'should', only 'how'. I'm still hoping for an elegant low-dev-cost solution, though I anticipate having to involve a fair number of events (ondeath, ondamaged, onspellcastat, the spellhook, etc) to do this type of detection. I've looked through dozens of player-generated logs from runs done on the server, and the bots are readily detectable to the human eye in terms of a number of vectors like damage output, kills, deaths, damage taken, and so on, but some of the things their loggers scan through are not directly accessible to nwscript, which is why that approach is likely going to take rather a lot of time, and why I'm looking for alternatives.
Funky