mirror of
https://github.com/araxiaonline/TrinityCore2.git
synced 2026-06-21 15:17:10 -04:00
Core/AI: Replace many Unit::IsHostileTo with Unit::IsValidAttackTarget or Creature::canCreatureAttack.
This commit is contained in:
@@ -58,7 +58,7 @@ void GuardAI::MoveInLineOfSight(Unit* unit)
|
||||
return;
|
||||
|
||||
if (!me->getVictim() && me->IsValidAttackTarget(unit) &&
|
||||
(unit->IsHostileToPlayers() || me->IsHostileTo(unit) /*|| u->getVictim() && me->IsFriendlyTo(u->getVictim())*/) &&
|
||||
(unit->IsHostileToPlayers() || me->IsHostileTo(unit)) &&
|
||||
unit->isInAccessiblePlaceFor(me))
|
||||
{
|
||||
float attackRadius = me->GetAttackDistance(unit);
|
||||
|
||||
@@ -902,12 +902,10 @@ namespace Trinity
|
||||
bool operator()(Unit* u)
|
||||
{
|
||||
// Check contains checks for: live, non-selectable, non-attackable flags, flight check and GM check, ignore totems
|
||||
if (!u->isTargetableForAttack())
|
||||
return false;
|
||||
if (u->GetTypeId() == TYPEID_UNIT && ((Creature*)u)->isTotem())
|
||||
return false;
|
||||
|
||||
if ((i_targetForPlayer ? !i_funit->IsFriendlyTo(u) : i_funit->IsHostileTo(u))&& i_obj->IsWithinDistInMap(u, i_range))
|
||||
if (i_funit->IsValidAttackTarget(u) && i_obj->IsWithinDistInMap(u, i_range))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
|
||||
@@ -1462,9 +1462,7 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, const uint32 effectMask, bool
|
||||
if (m_spellInfo->Speed > 0.0f && unit->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE) && unit->GetCharmerOrOwnerGUID() != m_caster->GetGUID())
|
||||
return SPELL_MISS_EVADE;
|
||||
|
||||
// check for IsHostileTo() instead of !IsFriendlyTo()
|
||||
// ex: spell 47463 needs to be casted by different units on the same neutral target
|
||||
if (m_caster->IsHostileTo(unit))
|
||||
if (m_caster->IsValidAttackTarget(unit))
|
||||
{
|
||||
unit->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_HITBYSPELL);
|
||||
//TODO: This is a hack. But we do not know what types of stealth should be interrupted by CC
|
||||
|
||||
@@ -701,26 +701,13 @@ namespace Trinity
|
||||
case SPELL_TARGETS_ENEMY:
|
||||
if (target->isTotem())
|
||||
continue;
|
||||
// can't be checked in SpellInfo::CheckTarget - needs more research
|
||||
if (target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE))
|
||||
if (!i_source->_IsValidAttackTarget(target, i_spellProto))
|
||||
continue;
|
||||
if (target->HasUnitState(UNIT_STAT_UNATTACKABLE))
|
||||
continue;
|
||||
if (i_source->IsControlledByPlayer())
|
||||
{
|
||||
if (i_source->IsFriendlyTo(target))
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!i_source->IsHostileTo(target))
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
case SPELL_TARGETS_ALLY:
|
||||
if (target->isTotem())
|
||||
continue;
|
||||
if (!i_source->IsFriendlyTo(target))
|
||||
if (!i_source->_IsValidAssistTarget(target, i_spellProto))
|
||||
continue;
|
||||
break;
|
||||
case SPELL_TARGETS_ENTRY:
|
||||
|
||||
@@ -487,7 +487,7 @@ public:
|
||||
if (!who)
|
||||
return;
|
||||
|
||||
if (who->isTargetableForAttack() && me->IsHostileTo(who))
|
||||
if (me->IsValidAttackTarget(who))
|
||||
if (me->IsWithinDistInMap(who, 20) && me->IsWithinLOSInMap(who))
|
||||
AttackStart(who);
|
||||
}
|
||||
|
||||
@@ -800,7 +800,7 @@ public:
|
||||
|
||||
void MoveInLineOfSight(Unit* who)
|
||||
{
|
||||
if (!who || !who->isTargetableForAttack() || !me->IsHostileTo(who) || me->getVictim())
|
||||
if (!who || !me->IsValidAttackTarget(who) || me->getVictim())
|
||||
return;
|
||||
|
||||
me->AddThreat(who, 0.0f);
|
||||
|
||||
@@ -269,7 +269,7 @@ public:
|
||||
|
||||
void MoveInLineOfSight(Unit* who)
|
||||
{
|
||||
if (!who->isTargetableForAttack() || !me->IsHostileTo(who))
|
||||
if (!me->IsValidAttackTarget(who))
|
||||
return;
|
||||
if (pInstance && Intro)
|
||||
pInstance->SetData(DATA_BRUTALLUS_EVENT, SPECIAL);
|
||||
|
||||
@@ -437,9 +437,8 @@ public:
|
||||
if (!who || me->getVictim())
|
||||
return;
|
||||
|
||||
if (who->isTargetableForAttack() && who->isInAccessiblePlaceFor(me) && me->IsHostileTo(who))
|
||||
if (me->canCreatureAttack(who))
|
||||
{
|
||||
|
||||
float attackRadius = me->GetAttackDistance(who);
|
||||
if (me->IsWithinDistInMap(who, attackRadius) && me->GetDistanceZ(who) <= CREATURE_Z_ATTACK_RANGE && me->IsWithinLOSInMap(who))
|
||||
{
|
||||
|
||||
@@ -331,7 +331,7 @@ public:
|
||||
if (bJustReset)//boss is invisible, don't attack
|
||||
return;
|
||||
|
||||
if (!me->getVictim() && who->isTargetableForAttack() && (me->IsHostileTo(who)))
|
||||
if (!me->getVictim() && me->IsValidAttackTarget(who))
|
||||
{
|
||||
float attackRadius = me->GetAttackDistance(who);
|
||||
if (me->IsWithinDistInMap(who, attackRadius))
|
||||
|
||||
@@ -281,7 +281,7 @@ public:
|
||||
|
||||
void MoveInLineOfSight(Unit* who)
|
||||
{
|
||||
if (me->IsWithinDist(who, 50) && !me->isInCombat() && me->IsHostileTo(who))
|
||||
if (me->IsWithinDist(who, 50) && !me->isInCombat() && me->IsValidAttackTarget(who))
|
||||
AttackStart(who);
|
||||
}
|
||||
|
||||
|
||||
@@ -250,7 +250,7 @@ public:
|
||||
|
||||
void MoveInLineOfSight(Unit* who)
|
||||
{
|
||||
if (me->IsWithinDist(who, 50) && !me->isInCombat() && me->IsHostileTo(who))
|
||||
if (me->IsWithinDist(who, 50) && !me->isInCombat() && me->IsValidAttackTarget(who))
|
||||
AttackStart(who);
|
||||
}
|
||||
|
||||
|
||||
@@ -1437,7 +1437,7 @@ public:
|
||||
if (!who || me->getVictim())
|
||||
return;
|
||||
|
||||
if (who->isTargetableForAttack() && me->IsHostileTo(who))
|
||||
if (me->IsValidAttackTarget(who))
|
||||
{
|
||||
//float attackRadius = me->GetAttackDistance(who);
|
||||
if (me->IsWithinDistInMap(who, 30))
|
||||
|
||||
@@ -294,7 +294,7 @@ struct boss_twinemperorsAI : public ScriptedAI
|
||||
if (!who || me->getVictim())
|
||||
return;
|
||||
|
||||
if (who->isTargetableForAttack() && who->isInAccessiblePlaceFor(me) && me->IsHostileTo(who))
|
||||
if (me->canCreatureAttack(who))
|
||||
{
|
||||
float attackRadius = me->GetAttackDistance(who);
|
||||
if (attackRadius < PULL_RANGE)
|
||||
|
||||
@@ -184,7 +184,7 @@ public:
|
||||
if (pInstance->GetData(DATA_JEDOGA_SHADOWSEEKER_EVENT) != IN_PROGRESS || !bOnGround)
|
||||
return;
|
||||
|
||||
if (!me->getVictim() && who->isTargetableForAttack() && me->IsHostileTo(who) && who->isInAccessiblePlaceFor(me))
|
||||
if (!me->getVictim() && me->canCreatureAttack(who))
|
||||
{
|
||||
float attackRadius = me->GetAttackDistance(who);
|
||||
if (me->IsWithinDistInMap(who, attackRadius) && me->IsWithinLOSInMap(who))
|
||||
|
||||
@@ -128,7 +128,7 @@ public:
|
||||
if (!who)
|
||||
return;
|
||||
|
||||
if (Phase == IDLE && who->isTargetableForAttack() && me->IsHostileTo(who) && me->IsWithinDistInMap(who, 40))
|
||||
if (Phase == IDLE && me->IsValidAttackTarget(who) && me->IsWithinDistInMap(who, 40))
|
||||
{
|
||||
Phase = INTRO;
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
|
||||
@@ -93,7 +93,7 @@ public:
|
||||
|
||||
void MoveInLineOfSight(Unit* who)
|
||||
{
|
||||
if (!me->getVictim() && who->isTargetableForAttack() && (me->IsHostileTo(who)) && who->isInAccessiblePlaceFor(me))
|
||||
if (!me->getVictim() && me->canCreatureAttack(who))
|
||||
{
|
||||
if (!Intro && me->IsWithinDistInMap(who, 100))
|
||||
{
|
||||
|
||||
@@ -254,7 +254,7 @@ public:
|
||||
{
|
||||
ScriptedAI::MoveInLineOfSight(who);
|
||||
|
||||
if (!Intro && me->IsWithinLOSInMap(who)&& me->IsWithinDistInMap(who, 100) && me->IsHostileTo(who))
|
||||
if (!Intro && me->IsWithinLOSInMap(who)&& me->IsWithinDistInMap(who, 100) && me->IsValidAttackTarget(who))
|
||||
{
|
||||
DoScriptText(SAY_INTRO, me);
|
||||
Intro = true;
|
||||
|
||||
@@ -267,7 +267,7 @@ public:
|
||||
|
||||
void MoveInLineOfSight(Unit* who)
|
||||
{
|
||||
if (!Intro && who->GetTypeId() == TYPEID_PLAYER && who->isTargetableForAttack() && me->IsHostileTo(who) && who->isInAccessiblePlaceFor(me))
|
||||
if (!Intro && who->GetTypeId() == TYPEID_PLAYER && me->canCreatureAttack(who))
|
||||
{
|
||||
if (me->IsWithinDistInMap(who, VISIBLE_RANGE) && me->IsWithinLOSInMap(who))
|
||||
{
|
||||
|
||||
@@ -282,7 +282,7 @@ public:
|
||||
if (!who || me->getVictim())
|
||||
return;
|
||||
|
||||
if (who->isTargetableForAttack() && who->isInAccessiblePlaceFor(me) && me->IsHostileTo(who))
|
||||
if (me->canCreatureAttack(who))
|
||||
{
|
||||
float attackRadius = me->GetAttackDistance(who);
|
||||
if (me->IsWithinDistInMap(who, attackRadius) && me->GetDistanceZ(who) <= CREATURE_Z_ATTACK_RANGE && me->IsWithinLOSInMap(who))
|
||||
|
||||
+1
-1
@@ -253,7 +253,7 @@ public:
|
||||
if (me->HasAura(AURA_BANISH))
|
||||
return;
|
||||
|
||||
if (!me->getVictim() && who->isTargetableForAttack() && (me->IsHostileTo(who)) && who->isInAccessiblePlaceFor(me))
|
||||
if (!me->getVictim() && me->canCreatureAttack(who))
|
||||
{
|
||||
if (me->GetDistanceZ(who) > CREATURE_Z_ATTACK_RANGE)
|
||||
return;
|
||||
|
||||
@@ -161,7 +161,7 @@ public:
|
||||
{
|
||||
if (!CanStartEvent)//boss is invisible, don't attack
|
||||
return;
|
||||
if (!me->getVictim() && who->isTargetableForAttack() && (me->IsHostileTo(who)))
|
||||
if (!me->getVictim() && who->IsValidAttackTarget(me))
|
||||
{
|
||||
float attackRadius = me->GetAttackDistance(who);
|
||||
if (me->IsWithinDistInMap(who, attackRadius))
|
||||
@@ -424,7 +424,7 @@ public:
|
||||
{
|
||||
if (!who || me->getVictim()) return;
|
||||
|
||||
if (who->isTargetableForAttack() && who->isInAccessiblePlaceFor(me) && me->IsHostileTo(who) && me->IsWithinDistInMap(who, 45))
|
||||
if (who->isInAccessiblePlaceFor(me) && me->IsValidAttackTarget(who) && me->IsWithinDistInMap(who, 45))
|
||||
{
|
||||
AttackStart(who);
|
||||
}
|
||||
|
||||
+1
-1
@@ -316,7 +316,7 @@ public:
|
||||
if (!who || me->getVictim())
|
||||
return;
|
||||
|
||||
if (who->isTargetableForAttack() && who->isInAccessiblePlaceFor(me) && me->IsHostileTo(who))
|
||||
if (me->canCreatureAttack(who))
|
||||
{
|
||||
//no attack radius check - it attacks the first target that moves in his los
|
||||
//who->RemoveSpellsCausingAura(SPELL_AURA_MOD_STEALTH);
|
||||
|
||||
+1
-1
@@ -85,7 +85,7 @@ class boss_watchkeeper_gargolmar : public CreatureScript
|
||||
|
||||
void MoveInLineOfSight(Unit* who)
|
||||
{
|
||||
if (!me->getVictim() && who->isTargetableForAttack() && (me->IsHostileTo(who)) && who->isInAccessiblePlaceFor(me))
|
||||
if (!me->getVictim() && me->canCreatureAttack(who))
|
||||
{
|
||||
if (!me->canFly() && me->GetDistanceZ(who) > CREATURE_Z_ATTACK_RANGE)
|
||||
return;
|
||||
|
||||
@@ -397,8 +397,7 @@ class boss_kaelthas : public CreatureScript
|
||||
|
||||
void MoveInLineOfSight(Unit* who)
|
||||
{
|
||||
if (!me->HasUnitState(UNIT_STAT_STUNNED) && who->isTargetableForAttack() &&
|
||||
me->IsHostileTo(who) && who->isInAccessiblePlaceFor(me))
|
||||
if (!me->HasUnitState(UNIT_STAT_STUNNED) && me->canCreatureAttack(who))
|
||||
{
|
||||
if (!me->canFly() && me->GetDistanceZ(who) > CREATURE_Z_ATTACK_RANGE)
|
||||
return;
|
||||
|
||||
@@ -315,7 +315,7 @@ class npc_warden_mellichar : public CreatureScript
|
||||
if (IsRunning)
|
||||
return;
|
||||
|
||||
if (!me->getVictim() && who->isTargetableForAttack() && (me->IsHostileTo(who)) && who->isInAccessiblePlaceFor(me))
|
||||
if (!me->getVictim() && me->canCreatureAttack(who))
|
||||
{
|
||||
if (!me->canFly() && me->GetDistanceZ(who) > CREATURE_Z_ATTACK_RANGE)
|
||||
return;
|
||||
|
||||
@@ -91,7 +91,7 @@ class boss_doomwalker : public CreatureScript
|
||||
|
||||
void MoveInLineOfSight(Unit* who)
|
||||
{
|
||||
if (who && who->GetTypeId() == TYPEID_PLAYER && me->IsHostileTo(who))
|
||||
if (who && who->GetTypeId() == TYPEID_PLAYER && me->IsValidAttackTarget(who))
|
||||
if (who->HasAura(SPELL_MARK_DEATH, 0))
|
||||
who->CastSpell(who, SPELL_AURA_DEATH, 1);
|
||||
}
|
||||
|
||||
@@ -179,7 +179,7 @@ public:
|
||||
if (!SpawnAssoc)
|
||||
return;
|
||||
|
||||
if (who->isTargetableForAttack() && me->IsHostileTo(who))
|
||||
if (me->IsValidAttackTarget(who))
|
||||
{
|
||||
Player* playerTarget = who->ToPlayer();
|
||||
|
||||
@@ -1718,7 +1718,7 @@ public:
|
||||
//Redefined for random target selection:
|
||||
void MoveInLineOfSight(Unit* who)
|
||||
{
|
||||
if (!me->getVictim() && who->isTargetableForAttack() && (me->IsHostileTo(who)) && who->isInAccessiblePlaceFor(me))
|
||||
if (!me->getVictim() && me->canCreatureAttack(who))
|
||||
{
|
||||
if (me->GetDistanceZ(who) > CREATURE_Z_ATTACK_RANGE)
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user