*Use SetReactState(REACT_PASSIVE) to force creatures such as halazzi and reliquary of souls to stop combat and merge.

--HG--
branch : trunk
This commit is contained in:
megamage
2008-12-08 18:04:53 -06:00
parent 26259a5fa4
commit 8e4928a21a
2 changed files with 10 additions and 17 deletions
@@ -370,6 +370,7 @@ struct TRINITY_DLL_DECL boss_essence_of_sufferingAI : public ScriptedAI
{ {
damage = 0; damage = 0;
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
m_creature->SetReactState(REACT_PASSIVE);
m_creature->Yell(SUFF_SAY_RECAP,LANG_UNIVERSAL,0); m_creature->Yell(SUFF_SAY_RECAP,LANG_UNIVERSAL,0);
DoPlaySoundToSet(m_creature, SUFF_SOUND_RECAP); DoPlaySoundToSet(m_creature, SUFF_SOUND_RECAP);
} }
@@ -482,6 +483,7 @@ struct TRINITY_DLL_DECL boss_essence_of_desireAI : public ScriptedAI
{ {
damage = 0; damage = 0;
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
m_creature->SetReactState(REACT_PASSIVE);
m_creature->Yell(DESI_SAY_RECAP,LANG_UNIVERSAL,0); m_creature->Yell(DESI_SAY_RECAP,LANG_UNIVERSAL,0);
DoPlaySoundToSet(m_creature, DESI_SOUND_RECAP); DoPlaySoundToSet(m_creature, DESI_SOUND_RECAP);
} }
@@ -107,7 +107,7 @@ struct TRINITY_DLL_DECL boss_halazziAI : public ScriptedAI
BerserkTimer = 600000; BerserkTimer = 600000;
CheckTimer = 1000; CheckTimer = 1000;
DoCast(m_creature, SPELL_DUAL_WIELD, true); m_creature->CastSpell(m_creature, SPELL_DUAL_WIELD, true);
Phase = PHASE_NONE; Phase = PHASE_NONE;
EnterPhase(PHASE_LYNX); EnterPhase(PHASE_LYNX);
@@ -143,17 +143,13 @@ struct TRINITY_DLL_DECL boss_halazziAI : public ScriptedAI
EnterPhase(PHASE_HUMAN); EnterPhase(PHASE_HUMAN);
} }
void AttackStart(Unit *who)
{
if(Phase != PHASE_MERGE) ScriptedAI::AttackStart(who);
}
void EnterPhase(PhaseHalazzi NextPhase) void EnterPhase(PhaseHalazzi NextPhase)
{ {
switch(NextPhase) switch(NextPhase)
{ {
case PHASE_LYNX: case PHASE_LYNX:
case PHASE_ENRAGE: case PHASE_ENRAGE:
m_creature->SetReactState(REACT_AGGRESSIVE);
if(Phase == PHASE_MERGE) if(Phase == PHASE_MERGE)
{ {
m_creature->CastSpell(m_creature, SPELL_TRANSFORM_MERGE, true); m_creature->CastSpell(m_creature, SPELL_TRANSFORM_MERGE, true);
@@ -193,8 +189,10 @@ struct TRINITY_DLL_DECL boss_halazziAI : public ScriptedAI
Lynx->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); Lynx->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
Lynx->GetMotionMaster()->Clear(); Lynx->GetMotionMaster()->Clear();
Lynx->GetMotionMaster()->MoveFollow(m_creature, 0, 0); Lynx->GetMotionMaster()->MoveFollow(m_creature, 0, 0);
((Creature*)Lynx)->SetReactState(REACT_PASSIVE);
m_creature->GetMotionMaster()->Clear(); m_creature->GetMotionMaster()->Clear();
m_creature->GetMotionMaster()->MoveFollow(Lynx, 0, 0); m_creature->GetMotionMaster()->MoveFollow(Lynx, 0, 0);
m_creature->SetReactState(REACT_PASSIVE);
TransformCount++; TransformCount++;
}break; }break;
default: default:
@@ -203,7 +201,7 @@ struct TRINITY_DLL_DECL boss_halazziAI : public ScriptedAI
Phase = NextPhase; Phase = NextPhase;
} }
void UpdateAI(const uint32 diff) void UpdateAI(const uint32 diff)
{ {
if(!m_creature->SelectHostilTarget() && !m_creature->getVictim()) if(!m_creature->SelectHostilTarget() && !m_creature->getVictim())
return; return;
@@ -281,11 +279,10 @@ struct TRINITY_DLL_DECL boss_halazziAI : public ScriptedAI
{ {
if(CheckTimer < diff) if(CheckTimer < diff)
{ {
Unit *Lynx = Unit::GetUnit(*m_creature, LynxGUID); if(Unit *Lynx = Unit::GetUnit(*m_creature, LynxGUID))
if(Lynx)
{ {
Lynx->GetMotionMaster()->MoveFollow(m_creature, 0, 0); //Lynx->GetMotionMaster()->MoveFollow(m_creature, 0, 0);
m_creature->GetMotionMaster()->MoveFollow(Lynx, 0, 0); //m_creature->GetMotionMaster()->MoveFollow(Lynx, 0, 0);
if(m_creature->IsWithinDistInMap(Lynx, 6.0f)) if(m_creature->IsWithinDistInMap(Lynx, 6.0f))
{ {
if(TransformCount < 3) if(TransformCount < 3)
@@ -348,12 +345,6 @@ struct TRINITY_DLL_DECL boss_spiritlynxAI : public ScriptedAI
damage = 0; damage = 0;
} }
void AttackStart(Unit *who)
{
if(!m_creature->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
ScriptedAI::AttackStart(who);
}
void Aggro(Unit *who) {/*DoZoneInCombat();*/} void Aggro(Unit *who) {/*DoZoneInCombat();*/}
void UpdateAI(const uint32 diff) void UpdateAI(const uint32 diff)