@@ -1198,11 +1198,16 @@ void AiAgentImplementation::leash() {
11981198}
11991199
12001200void AiAgentImplementation::setDefender (SceneObject* defender) {
1201+ if (defender == nullptr )
1202+ return ;
1203+
12011204 CreatureObjectImplementation::setDefender (defender);
12021205
12031206 if (isRetreating ())
12041207 homeLocation.setReached (true );
12051208
1209+ setFollowObject (defender);
1210+ setFollowState (AiAgent::FOLLOWING );
12061211 activateRecovery ();
12071212}
12081213
@@ -1212,14 +1217,18 @@ void AiAgentImplementation::queueDizzyFallEvent() {
12121217}
12131218
12141219void AiAgentImplementation::addDefender (SceneObject* defender) {
1215- if ((defenderList.size () == 0 || getFollowObject ().get () == nullptr ) && defender != nullptr ) {
1216- setFollowObject (defender);
1217- setFollowState (AiAgent::FOLLOWING );
1220+ if (defender == nullptr ) {
1221+ return ;
1222+ }
1223+
1224+ CreatureObjectImplementation::addDefender (defender);
12181225
1219- if (defender->isTangibleObject () && threatMap != nullptr )
1220- threatMap->addAggro (defender->asTangibleObject (), 1 );
1226+ if (defender->isTangibleObject () && threatMap != nullptr ) {
1227+ threatMap->addAggro (defender->asTangibleObject (), 1 );
1228+ }
12211229
1222- CreatureObjectImplementation::addDefender (defender);
1230+ if (defender->isCreatureObject ()) {
1231+ notifyPackMobs (defender->asCreatureObject ());
12231232 }
12241233}
12251234
@@ -3128,7 +3137,7 @@ bool AiAgentImplementation::isAttackableBy(CreatureObject* object) {
31283137 if (targetFaction == getFaction ())
31293138 return false ;
31303139
3131- if (targetFaction == 0 || (object->getFactionStatus () == FactionStatus::ONLEAVE ))
3140+ if (targetFaction == 0 || (object->isPlayerCreature () && object-> getFactionStatus () == FactionStatus::ONLEAVE ))
31323141 return false ;
31333142 }
31343143
0 commit comments