[svn] Remove isVisible function. Check stealth and invisible in canAttack();
Use new remove aura by interrupt flag function. --HG-- branch : trunk
This commit is contained in:
@@ -73,18 +73,18 @@ bool ScriptedAI::IsVisible(Unit* who) const
|
||||
|
||||
void ScriptedAI::MoveInLineOfSight(Unit *who)
|
||||
{
|
||||
if (!m_creature->getVictim() && who->isTargetableForAttack() && ( m_creature->IsHostileTo( who )) && who->isInAccessablePlaceFor(m_creature))
|
||||
{
|
||||
if (!m_creature->canFly() && m_creature->GetDistanceZ(who) > CREATURE_Z_ATTACK_RANGE)
|
||||
return;
|
||||
if(m_creature->getVictim() || !m_creature->IsHostileTo(who) || !who->isInAccessablePlaceFor(m_creature))
|
||||
return;
|
||||
|
||||
float attackRadius = m_creature->GetAttackDistance(who);
|
||||
if (m_creature->IsWithinDistInMap(who, attackRadius) && m_creature->IsWithinLOSInMap(who))
|
||||
{
|
||||
who->RemoveSpellsCausingAura(SPELL_AURA_MOD_STEALTH);
|
||||
AttackStart(who);
|
||||
}
|
||||
}
|
||||
if(!m_creature->canFly() && m_creature->GetDistanceZ(who) > CREATURE_Z_ATTACK_RANGE)
|
||||
return;
|
||||
|
||||
if(!m_creature->IsWithinDistInMap(who, m_creature->GetAttackDistance(who)) || !m_creature->IsWithinLOSInMap(who))
|
||||
return;
|
||||
|
||||
if(m_creature->canAttack(who))
|
||||
//who->RemoveSpellsCausingAura(SPELL_AURA_MOD_STEALTH);
|
||||
AttackStart(who);
|
||||
}
|
||||
|
||||
void ScriptedAI::AttackStart(Unit* who, bool melee)
|
||||
@@ -777,7 +777,7 @@ std::list<Creature*> ScriptedAI::DoFindFriendlyMissingBuff(float range, uint32 s
|
||||
|
||||
void Scripted_NoMovementAI::MoveInLineOfSight(Unit *who)
|
||||
{
|
||||
if( !m_creature->getVictim() && who->isTargetableForAttack() && ( m_creature->IsHostileTo( who )) && who->isInAccessablePlaceFor(m_creature) )
|
||||
if( !m_creature->getVictim() && m_creature->canAttack(who) && ( m_creature->IsHostileTo( who )) && who->isInAccessablePlaceFor(m_creature) )
|
||||
{
|
||||
if (!m_creature->canFly() && m_creature->GetDistanceZ(who) > CREATURE_Z_ATTACK_RANGE)
|
||||
return;
|
||||
|
||||
@@ -1195,8 +1195,7 @@ struct TRINITY_DLL_DECL Mob_EventAI : public ScriptedAI
|
||||
if (m_creature->isCivilian() && m_creature->IsNeutralToAll())
|
||||
return;
|
||||
|
||||
|
||||
if (who->isTargetableForAttack() && who->isInAccessablePlaceFor(m_creature) && m_creature->IsHostileTo(who))
|
||||
if (m_creature->canAttack(who) && who->isInAccessablePlaceFor(m_creature) && m_creature->IsHostileTo(who))
|
||||
{
|
||||
if (!m_creature->canFly() && m_creature->GetDistanceZ(who) > CREATURE_Z_ATTACK_RANGE)
|
||||
return;
|
||||
@@ -1204,8 +1203,8 @@ struct TRINITY_DLL_DECL Mob_EventAI : public ScriptedAI
|
||||
float attackRadius = m_creature->GetAttackDistance(who);
|
||||
if (m_creature->IsWithinDistInMap(who, attackRadius) && m_creature->IsWithinLOSInMap(who))
|
||||
{
|
||||
if(who->HasStealthAura())
|
||||
who->RemoveSpellsCausingAura(SPELL_AURA_MOD_STEALTH);
|
||||
//if(who->HasStealthAura())
|
||||
// who->RemoveSpellsCausingAura(SPELL_AURA_MOD_STEALTH);
|
||||
|
||||
//Begin melee attack if we are within range
|
||||
AttackStart(who);
|
||||
|
||||
@@ -413,7 +413,7 @@ struct TRINITY_DLL_DECL boss_illidan_stormrageAI : public ScriptedAI
|
||||
}
|
||||
EnterPhase(PHASE_FLIGHT);
|
||||
}
|
||||
else
|
||||
else // handle flight sequence
|
||||
Timer[EVENT_FLIGHT_SEQUENCE] = 1000;
|
||||
}
|
||||
|
||||
@@ -691,10 +691,10 @@ struct TRINITY_DLL_DECL boss_illidan_stormrageAI : public ScriptedAI
|
||||
Event = EVENT_NULL;
|
||||
for(uint32 i = 1; i <= MaxTimer[Phase]; i++)
|
||||
{
|
||||
if(Timer[i])
|
||||
if(Timer[i]) // Event is enabled
|
||||
if(Timer[i] <= diff)
|
||||
{
|
||||
if(!Event)
|
||||
if(!Event) // No event with higher priority
|
||||
Event = (EventIllidan)i;
|
||||
}
|
||||
else Timer[i] -= diff;
|
||||
@@ -708,12 +708,12 @@ struct TRINITY_DLL_DECL boss_illidan_stormrageAI : public ScriptedAI
|
||||
break;
|
||||
|
||||
case PHASE_NORMAL_2:
|
||||
if(m_creature->GetHealth()*100 / m_creature->GetMaxHealth() < 30)
|
||||
if(HPPCT(m_creature) < 30)
|
||||
EnterPhase(PHASE_TALK_SEQUENCE);
|
||||
break;
|
||||
|
||||
case PHASE_NORMAL_MAIEV:
|
||||
if(m_creature->GetHealth()*100 / m_creature->GetMaxHealth() < 1)
|
||||
if(HPPCT(m_creature) < 1)
|
||||
EnterPhase(PHASE_TALK_SEQUENCE);
|
||||
break;
|
||||
|
||||
@@ -758,7 +758,7 @@ struct TRINITY_DLL_DECL boss_illidan_stormrageAI : public ScriptedAI
|
||||
if(soundid)
|
||||
DoPlaySoundToSet(m_creature, soundid);
|
||||
}
|
||||
Timer[EVENT_TAUNT] = 32000;
|
||||
Timer[EVENT_TAUNT] = 25000 + rand()%10000;
|
||||
break;
|
||||
|
||||
case EVENT_SHEAR:
|
||||
@@ -833,12 +833,9 @@ struct TRINITY_DLL_DECL boss_illidan_stormrageAI : public ScriptedAI
|
||||
case EVENT_MOVE_POINT:
|
||||
Phase = PHASE_FLIGHT_SEQUENCE;
|
||||
Timer[EVENT_FLIGHT_SEQUENCE] = 0;//do not start Event when changing hover point
|
||||
for (uint8 i = 0; i <= rand()%3; i++)
|
||||
{
|
||||
HoverPoint++;
|
||||
if(HoverPoint > 3)
|
||||
HoverPoint = 0;
|
||||
}
|
||||
HoverPoint += (rand()%3 + 1);
|
||||
if(HoverPoint > 3)
|
||||
HoverPoint -= 4;
|
||||
m_creature->GetMotionMaster()->MovePoint(0, HoverPosition[HoverPoint].x, HoverPosition[HoverPoint].y, HoverPosition[HoverPoint].z);
|
||||
break;
|
||||
|
||||
@@ -2059,27 +2056,17 @@ void boss_illidan_stormrageAI::CastEyeBlast()
|
||||
final.x = 2 * final.x - initial.x;
|
||||
final.y = 2 * final.y - initial.y;
|
||||
|
||||
for(uint8 i = 0; i < 2; ++i)//core bug, two buff do not coexist
|
||||
{
|
||||
Creature* Trigger = NULL;
|
||||
Trigger = m_creature->SummonCreature(DEMON_FIRE, initial.x, initial.y, initial.z, 0, TEMPSUMMON_TIMED_DESPAWN, 13000);
|
||||
if(Trigger)
|
||||
{
|
||||
((demonfireAI*)Trigger->AI())->IsTrigger = true;
|
||||
Trigger->SetSpeed(MOVE_WALK, 3);
|
||||
Trigger->SetUnitMovementFlags(MOVEMENTFLAG_WALK_MODE);
|
||||
Trigger->GetMotionMaster()->MovePoint(0, final.x, final.y, final.z);
|
||||
Creature* Trigger = m_creature->SummonCreature(DEMON_FIRE, initial.x, initial.y, initial.z, 0, TEMPSUMMON_TIMED_DESPAWN, 13000);
|
||||
if(!Trigger) return;
|
||||
|
||||
if(!i)
|
||||
Trigger->CastSpell(Trigger, SPELL_EYE_BLAST_TRIGGER, true);
|
||||
else
|
||||
{
|
||||
Trigger->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
m_creature->SetUInt64Value(UNIT_FIELD_TARGET, Trigger->GetGUID());
|
||||
DoCast(Trigger, SPELL_EYE_BLAST);
|
||||
}
|
||||
}
|
||||
}
|
||||
((demonfireAI*)Trigger->AI())->IsTrigger = true;
|
||||
Trigger->SetSpeed(MOVE_WALK, 3);
|
||||
Trigger->SetUnitMovementFlags(MOVEMENTFLAG_WALK_MODE);
|
||||
Trigger->GetMotionMaster()->MovePoint(0, final.x, final.y, final.z);
|
||||
|
||||
Trigger->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
m_creature->SetUInt64Value(UNIT_FIELD_TARGET, Trigger->GetGUID());
|
||||
DoCast(Trigger, SPELL_EYE_BLAST);
|
||||
}
|
||||
|
||||
void boss_illidan_stormrageAI::SummonFlamesOfAzzinoth()
|
||||
@@ -2162,13 +2149,10 @@ void boss_illidan_stormrageAI::EnterPhase(PhaseIllidan NextPhase)
|
||||
m_creature->InterruptNonMeleeSpells(false);
|
||||
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE + UNIT_FLAG_NOT_SELECTABLE);
|
||||
m_creature->GetMotionMaster()->Clear(false);
|
||||
//m_creature->GetMotionMaster()->MoveIdle();
|
||||
m_creature->AttackStop();
|
||||
break;
|
||||
case PHASE_FLIGHT_SEQUENCE:
|
||||
if(Phase == PHASE_FLIGHT) //land
|
||||
Timer[EVENT_FLIGHT_SEQUENCE] = 2000;
|
||||
else //lift off
|
||||
if(Phase == PHASE_NORMAL) //lift off
|
||||
{
|
||||
FlightCount = 1;
|
||||
Timer[EVENT_FLIGHT_SEQUENCE] = 1;
|
||||
@@ -2176,9 +2160,10 @@ void boss_illidan_stormrageAI::EnterPhase(PhaseIllidan NextPhase)
|
||||
m_creature->InterruptNonMeleeSpells(false);
|
||||
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE + UNIT_FLAG_NOT_SELECTABLE);
|
||||
m_creature->GetMotionMaster()->Clear(false);
|
||||
//m_creature->GetMotionMaster()->MoveIdle();
|
||||
m_creature->AttackStop();
|
||||
}
|
||||
else //land
|
||||
Timer[EVENT_FLIGHT_SEQUENCE] = 2000;
|
||||
break;
|
||||
case PHASE_TRANSFORM_SEQUENCE:
|
||||
if(Phase == PHASE_DEMON)
|
||||
@@ -2191,7 +2176,6 @@ void boss_illidan_stormrageAI::EnterPhase(PhaseIllidan NextPhase)
|
||||
DoPlaySoundToSet(m_creature, SOUND_MORPH);
|
||||
}
|
||||
m_creature->GetMotionMaster()->Clear();
|
||||
//m_creature->GetMotionMaster()->MoveIdle();
|
||||
m_creature->AttackStop();
|
||||
break;
|
||||
default:
|
||||
|
||||
Reference in New Issue
Block a user