from module zone/mobai.cpp
starts at line 201
Code:
Mob* EntityList::AICheckCloseArrgo(Mob* sender, float iArrgoRange, float iAssistRange) {
if (sender->GetPrimaryFaction() == 0)
return 0; // well, if we dont have a faction set, we're gonna be indiff to everybody
LinkedListIterator<Entity*> iterator(list);
iterator.Reset();
int8 RandRoll = rand()%100;
float dist,distZ;
int leveldif;
while(iterator.MoreElements()) {
if (iterator.GetData()->IsMob() && !iterator.GetData()->IsCorpse() && iterator.GetData() != sender) {
Mob* mob = iterator.GetData()->CastToMob();
FACTION_VALUE fv = FACTION_INDIFFERENT;
fv = mob->GetFactionCon(sender);
dist = mob->Dist(sender);
distZ = sender->GetZ()-mob->GetZ();
leveldif = mob->GetLevel() - sender->GetLevel();
if (leveldif < 0){
leveldif=0;
}
if (fv <= FACTION_AMIABLE
&& mob->IsEngaged()
&& mob->GetTarget()
&& dist <= (iAssistRange-leveldif)
&& (mob->GetINT() <= 100 || mob->GetTarget()->GetLevelCon(sender->GetLevel()) != CON_GREEN)
&& sender->Dist(mob->GetTarget()) <= (iAssistRange * 2)
) {
return mob->GetTarget();
}
else if (
!(mob->IsClient() && mob->CastToClient()->GetGM())
&& mob->InZone()
&& (fv == FACTION_SCOWLS || (fv == FACTION_THREATENLY && RandRoll < THREATENLY_ARRGO_CHANCE))
&& !mob->IsInvisible()
&& dist <= (iArrgoRange - leveldif)
&& (distZ > -10 && distZ < 10)
&& (sender->GetINT() <= 75 || mob->GetLevelCon(sender->GetLevel()) != CON_GREEN)
) {
return mob;
}
}
iterator.Advance();
}
return 0;
}
I also reduced all aggroradius on mobs to 65 from 85. I feel this is a good compromise given that you cant do LOS checks and chain aggro gets silly otherwise....