it may not not be THAT complicated, as the groups code is quite compact. At first glance, a 'simple check' on level in the Group::AddMember in zone/groups.cpp would do it.
If it is only to reproduce 'official' EQ behaviour, get the max level of all actual members in a group (there is already such function), and fail to add a new member if level gap is too high. As a group is always created with a member, there
should be no problem...
Basically :
Code:
if ((i == MAX_GROUP_MEMBERS) || (!newmember->IsClient()))
return false;
changed to :
Code:
if ((i == MAX_GROUP_MEMBERS) || (!newmember->IsClient())
|| abs(newmember->CastToClient.GetLevel() -GetHighestLevel()) > 6 )
return false;
for a (very|too) simple check. More accurate checks can be thought of. Did not test it though, but as you mentionned it ...
At first glance, again, no other part of the code is to be changed