monster.cpp before "void Monster:

nCreatureFound(Creature* creature, bool pushFront /*= false*/)" add:
[cpp]void Monster::addTarget(Creature* creature, bool pushFront /*= false*/)
{
if(isOpponent(creature))
{
assert(creature != this);
if(std::find(targetList.begin(), targetList.end(), creature) == targetList.end())
{
creature->addRef();
if(pushFront)
targetList.push_front(creature);
else
targetList.push_back(creature);
}
}
updateIdleStatus();
}[/cpp]
In function "void Monster:

nCreatureFound(Creature* creature, bool pushFront /*= false*/)" remove this:
[cpp]if(isOpponent(creature))
{
assert(creature != this);
if(std::find(targetList.begin(), targetList.end(), creature) == targetList.end())
{
creature->addRef();
if(pushFront)
targetList.push_front(creature);
else
targetList.push_back(creature);
}
}[/cpp]
In
monster.h after "bool isFleeing() const {return getHealth() <= mType->runAwayHealth;}" add:
[cpp]void addTarget(Creature* creature, bool pushFront = false);[/cpp]
combat.cpp:
In function "bool Combat::CombatHealthFunc(Creature* caster, Creature* target, const CombatParams& params, void* data)", "bool Combat::CombatNullFunc(Creature* caster, Creature* target, const CombatParams& params, void*)" and "bool Combat::CombatManaFunc(Creature* caster, Creature* target, const CombatParams& params, void* data)" add:
[cpp] if(Monster* attackedMonster = target->getMonster())
if(!attackedMonster->isSummon())
{
attackedMonster->addTarget(caster, true);
if(Creature* master = caster->getMaster())
attackedMonster->addTarget(master, false);
}[/cpp]
before "return true;"