*The enemy of my enemy is my friend.
*Correct some reversed parameter ordering (team and vehId were swapped) --HG-- branch : trunk
This commit is contained in:
@@ -1524,7 +1524,7 @@ bool Creature::LoadFromDB(uint32 guid, Map *map)
|
|||||||
if (map->GetInstanceId() != 0) guid = objmgr.GenerateLowGuid(HIGHGUID_UNIT);
|
if (map->GetInstanceId() != 0) guid = objmgr.GenerateLowGuid(HIGHGUID_UNIT);
|
||||||
|
|
||||||
uint16 team = 0;
|
uint16 team = 0;
|
||||||
if(!Create(guid,map,data->phaseMask,data->id,team,0,data->posX,data->posY,data->posZ,data->orientation,data))
|
if(!Create(guid,map,data->phaseMask,data->id,0,team,data->posX,data->posY,data->posZ,data->orientation,data))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
//We should set first home position, because then AI calls home movement
|
//We should set first home position, because then AI calls home movement
|
||||||
@@ -1689,6 +1689,10 @@ bool Creature::canStartAttack(Unit const* who, bool force) const
|
|||||||
|
|
||||||
if(!force)
|
if(!force)
|
||||||
{
|
{
|
||||||
|
// if victim(1) has a victim(2), and victim(2) is a non-friendly player, don't attack victim(1) unless forced
|
||||||
|
if(who->getVictim() && who->getVictim()->GetCharmerOrOwnerPlayerOrPlayerItself() && !IsFriendlyTo(who->getVictim())
|
||||||
|
return false;
|
||||||
|
|
||||||
if(who->isInCombat())
|
if(who->isInCombat())
|
||||||
if(Unit *victim = who->getAttackerForHelper())
|
if(Unit *victim = who->getAttackerForHelper())
|
||||||
if(IsWithinDistInMap(victim, sWorld.getConfig(CONFIG_CREATURE_FAMILY_ASSISTANCE_RADIUS)))
|
if(IsWithinDistInMap(victim, sWorld.getConfig(CONFIG_CREATURE_FAMILY_ASSISTANCE_RADIUS)))
|
||||||
|
|||||||
+3
-3
@@ -11344,7 +11344,7 @@ Unit* Creature::SelectVictim()
|
|||||||
else
|
else
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if(target && (!target->getVictim() || !target->isAttackingPlayer() || IsFriendlyTo(target->getVictim()))) // if the victim of target is a player, only defend the victim if we are friendly
|
if(target && (!target->getVictim() || IsFriendlyTo(target->getVictim())) // if victim(1) has a victim(2), only attack victim(1) if we are friendly with victim(2)
|
||||||
{
|
{
|
||||||
SetInFront(target);
|
SetInFront(target);
|
||||||
return target;
|
return target;
|
||||||
@@ -11358,7 +11358,7 @@ Unit* Creature::SelectVictim()
|
|||||||
{
|
{
|
||||||
if((*itr) && canCreatureAttack(*itr) && (*itr)->GetTypeId() != TYPEID_PLAYER
|
if((*itr) && canCreatureAttack(*itr) && (*itr)->GetTypeId() != TYPEID_PLAYER
|
||||||
&& !((Creature*)(*itr))->HasUnitTypeMask(UNIT_MASK_CONTROLABLE_GUARDIAN)
|
&& !((Creature*)(*itr))->HasUnitTypeMask(UNIT_MASK_CONTROLABLE_GUARDIAN)
|
||||||
&& (!(*itr)->getVictim() || !(*itr)->isAttackingPlayer() || IsFriendlyTo((*itr)->getVictim()))) // if the victim of target is a player, only defend the victim if we are friendly
|
// && (!(*itr)->getVictim() || IsFriendlyTo((*itr)->getVictim()))) // if victim(1) has a victim(2), only attack victim(1) if we are friendly with victim(2)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -11369,7 +11369,7 @@ Unit* Creature::SelectVictim()
|
|||||||
// search nearby enemy before enter evade mode
|
// search nearby enemy before enter evade mode
|
||||||
if(HasReactState(REACT_AGGRESSIVE))
|
if(HasReactState(REACT_AGGRESSIVE))
|
||||||
if(target = SelectNearestTarget())
|
if(target = SelectNearestTarget())
|
||||||
if(!target->getVictim() || !target->isAttackingPlayer() || IsFriendlyTo(target->getVictim())) // if the victim of target is a player, only defend the victim if we are friendly
|
if(!target->getVictim() || IsFriendlyTo(target->getVictim())) // if victim(1) has a victim(2), only attack victim(1) if we are friendly with victim(2)
|
||||||
return target;
|
return target;
|
||||||
|
|
||||||
if(m_invisibilityMask)
|
if(m_invisibilityMask)
|
||||||
|
|||||||
Reference in New Issue
Block a user