I haven't looked through your code too much, but I'm sure there is significant improvement. 
 
It might be easiest to just make mob->IsEgnaged() a virtual function and overload it in the client object. I can't think of anything that would break. The only time IsEngaged() is used in reference to a client is in the bot code as far as I'm aware. That way, you wouldn't have to mess with all of the group iterations in the bot code. 
		
	
		
		
		
		
		
		
		
		
		
	
		
		
	
	
	 |