aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game/CreatureAI.cpp36
1 files changed, 23 insertions, 13 deletions
diff --git a/src/game/CreatureAI.cpp b/src/game/CreatureAI.cpp
index 4668578c1be..6f0b5949236 100644
--- a/src/game/CreatureAI.cpp
+++ b/src/game/CreatureAI.cpp
@@ -71,26 +71,36 @@ void CreatureAI::OnCharmed(bool apply)
me->IsAIEnabled = false;
}
-void CreatureAI::DoZoneInCombat(Creature* pUnit)
+void CreatureAI::DoZoneInCombat(Creature* creature)
{
- if (!pUnit)
- pUnit = me;
-
- Map *map = pUnit->GetMap();
+ if (!creature)
+ creature = me;
+ Map *map = creature->GetMap();
if (!map->IsDungeon()) //use IsDungeon instead of Instanceable, in case battlegrounds will be instantiated
{
- sLog.outError("DoZoneInCombat call for map that isn't an instance (pUnit entry = %d)", pUnit->GetTypeId() == TYPEID_UNIT ? ((Creature*)pUnit)->GetEntry() : 0);
+ sLog.outError("DoZoneInCombat call for map that isn't an instance (creature entry = %d)", creature->GetTypeId() == TYPEID_UNIT ? ((Creature*)creature)->GetEntry() : 0);
return;
}
- if(!pUnit->getVictim())
- if(Unit *target = pUnit->SelectNearestTarget())
+ if(!creature->getVictim())
+ {
+ if(Unit *target = creature->SelectNearestTarget())
AttackStart(target);
+ else if(creature->isSummon())
+ {
+ if(Unit *summoner = ((TempSummon*)creature)->GetSummoner())
+ {
+ if(summoner->getVictim()
+ && (creature->IsFriendlyTo(summoner) || creature->IsHostileTo(summoner->getVictim())))
+ AttackStart(summoner->getVictim());
+ }
+ }
+ }
- if (!pUnit->CanHaveThreatList() || pUnit->getThreatManager().isThreatListEmpty())
+ if (!creature->CanHaveThreatList() || creature->getThreatManager().isThreatListEmpty())
{
- sLog.outError("DoZoneInCombat called for creature that either cannot have threat list or has empty threat list (pUnit entry = %d)", pUnit->GetTypeId() == TYPEID_UNIT ? ((Creature*)pUnit)->GetEntry() : 0);
+ sLog.outError("DoZoneInCombat called for creature that either cannot have threat list or has empty threat list (creature entry = %d)", creature->GetTypeId() == TYPEID_UNIT ? ((Creature*)creature)->GetEntry() : 0);
return;
}
@@ -100,9 +110,9 @@ void CreatureAI::DoZoneInCombat(Creature* pUnit)
if (Player* i_pl = i->getSource())
if (i_pl->isAlive())
{
- pUnit->SetInCombatWith(i_pl);
- i_pl->SetInCombatWith(pUnit);
- pUnit->AddThreat(i_pl, 0.0f);
+ creature->SetInCombatWith(i_pl);
+ i_pl->SetInCombatWith(creature);
+ creature->AddThreat(i_pl, 0.0f);
}
}
}