fixed problems with isInvisbleForAlive

removed redundant check at MoveInLos
this check is already done in istargetableForAttack
thx to NoFantasy

fixed in isVisibleForOrDetect that isInvisbleForAlive
wasn't checked.. and therefore all spiritserviceprovider
got visible
thx to NetSky
This commit is contained in:
balrok 2009-10-21 17:23:25 +02:00
parent ffc2f97d3b
commit 97c94cff56
5 changed files with 9 additions and 8 deletions

View file

@ -49,7 +49,7 @@ AggressorAI::MoveInLineOfSight(Unit *u)
if (!m_creature->hasUnitState(UNIT_STAT_STUNNED | UNIT_STAT_DIED) && u->isTargetableForAttack() &&
( m_creature->IsHostileTo( u ) /*|| u->getVictim() && m_creature->IsFriendlyTo( u->getVictim() )*/ ) &&
u->isInAccessablePlaceFor(m_creature) && !u->isInvisibleForAlive())
u->isInAccessablePlaceFor(m_creature))
{
float attackRadius = m_creature->GetAttackDistance(u);
if(m_creature->IsWithinDistInMap(u, attackRadius) && m_creature->IsWithinLOSInMap(u) )

View file

@ -995,7 +995,7 @@ void CreatureEventAI::MoveInLineOfSight(Unit *who)
return;
if (!m_creature->hasUnitState(UNIT_STAT_STUNNED | UNIT_STAT_DIED) && who->isTargetableForAttack() &&
m_creature->IsHostileTo(who) && who->isInAccessablePlaceFor(m_creature) && !who->isInvisibleForAlive())
m_creature->IsHostileTo(who) && who->isInAccessablePlaceFor(m_creature))
{
if (!m_creature->canFly() && m_creature->GetDistanceZ(who) > CREATURE_Z_ATTACK_RANGE)
return;

View file

@ -43,7 +43,7 @@ void GuardAI::MoveInLineOfSight(Unit *u)
if (!m_creature->getVictim() && u->isTargetableForAttack() &&
( u->IsHostileToPlayers() || m_creature->IsHostileTo(u) /*|| u->getVictim() && m_creature->IsFriendlyTo(u->getVictim())*/ ) &&
u->isInAccessablePlaceFor(m_creature) && !u->isInvisibleForAlive())
u->isInAccessablePlaceFor(m_creature))
{
float attackRadius = m_creature->GetAttackDistance(u);
if (m_creature->IsWithinDistInMap(u,attackRadius))

View file

@ -47,7 +47,7 @@ void PetAI::MoveInLineOfSight(Unit *u)
if( !m_creature->getVictim() && m_creature->GetCharmInfo() &&
m_creature->GetCharmInfo()->HasReactState(REACT_AGGRESSIVE) &&
u->isTargetableForAttack() && m_creature->IsHostileTo( u ) &&
u->isInAccessablePlaceFor(m_creature) && !u->isInvisibleForAlive())
u->isInAccessablePlaceFor(m_creature))
{
float attackRadius = m_creature->GetAttackDistance(u);
if(m_creature->IsWithinDistInMap(u, attackRadius) && m_creature->GetDistanceZ(u) <= CREATURE_Z_ATTACK_RANGE)

View file

@ -9613,7 +9613,7 @@ bool Unit::isTargetableForAttack(bool inverseAlive /*=false*/) const
if ((isAlive() && !isInvisibleForAlive()) == inverseAlive)
return false;
return IsInWorld() && !hasUnitState(UNIT_STAT_DIED)&& !isInFlight() /*&& !isStealth()*/;
return IsInWorld() && !hasUnitState(UNIT_STAT_DIED) && !isInFlight();
}
int32 Unit::ModifyHealth(int32 dVal)
@ -9772,6 +9772,10 @@ bool Unit::isVisibleForOrDetect(Unit const* u, WorldObject const* viewPoint, boo
return false;
}
if (u->isAlive() && isInvisibleForAlive())
if (u->GetTypeId() == TYPEID_PLAYER && !((Player *)u)->isGameMaster())
return false;
// Visible units, always are visible for all units, except for units under invisibility and phases
if (m_Visibility == VISIBILITY_ON && u->m_invisibilityMask==0 && InSamePhase(u))
return true;
@ -9785,9 +9789,6 @@ bool Unit::isVisibleForOrDetect(Unit const* u, WorldObject const* viewPoint, boo
return true;
}
if (u->isAlive() && isInvisibleForAlive())
return false;
// non faction visibility non-breakable for non-GMs
if (m_Visibility == VISIBILITY_OFF)
return false;