*setActive(false) when creature dies.

*Fix some script crash bugs.

--HG--
branch : trunk
This commit is contained in:
megamage
2009-01-10 10:43:57 -06:00
parent bb7fb087ca
commit 4b5bca4f0a
4 changed files with 21 additions and 18 deletions
@@ -211,16 +211,20 @@ struct TRINITY_DLL_DECL boss_the_lurker_belowAI : public Scripted_NoMovementAI
if(SpoutAnimTimer<diff)
{
DoCast(m_creature,SPELL_SPOUT_ANIM,true);
SpoutAnimTimer = 1000;
}else SpoutAnimTimer-=diff;
SpoutAnimTimer = 1000;
}else SpoutAnimTimer-=diff;
std::list<HostilReference*>& m_threatlist = m_creature->getThreatManager().getThreatList();
for(std::list<HostilReference*>::iterator itr = m_threatlist.begin(); itr!= m_threatlist.end(); ++itr)
{
Unit *target = Unit::GetUnit(*m_creature, (*itr)->getUnitGuid());
if(target && target->GetTypeId() == TYPEID_PLAYER && m_creature->HasInArc((double)diff/20000*(double)M_PI*2,target) && m_creature->GetDistance(target) <= SPOUT_DIST && !target->IsInWater())
DoCast(target,SPELL_SPOUT,true);//only knock back palyers in arc, in 100yards, not in water
}
Map *map = m_creature->GetMap();
if (map->IsDungeon() && pInstance->GetData(DATA_THELURKERBELOWEVENT) == IN_PROGRESS)
{
Map::PlayerList const &PlayerList = map->GetPlayers();
for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
{
Player *target = i->getSource();
if(target->isAlive() && m_creature->HasInArc((double)diff/20000*(double)M_PI*2,target) && m_creature->GetDistance(target) <= SPOUT_DIST && !target->IsInWater())
DoCast(target,SPELL_SPOUT,true);//only knock back palyers in arc, in 100yards, not in water
}
}
}
void StartRotate(Unit* victim)
@@ -272,7 +272,8 @@ struct TRINITY_DLL_DECL boss_terestianAI : public ScriptedAI
if(SummonKilrek && Kilrek)
{
Kilrek->Respawn();
Kilrek->AI()->AttackStart(m_creature->getVictim());
if(Kilrek->AI())
Kilrek->AI()->AttackStart(m_creature->getVictim());
SummonKilrek = false;
}
@@ -111,11 +111,12 @@ struct TRINITY_DLL_DECL boss_alarAI : public ScriptedAI
m_creature->SetDisplayId(m_creature->GetNativeDisplayId());
m_creature->SetSpeed(MOVE_RUN, DefaultMoveSpeedRate);
m_creature->SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, 10);
m_creature->SetFloatValue(UNIT_FIELD_COMBATREACH, 10);
//m_creature->SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, 10);
//m_creature->SetFloatValue(UNIT_FIELD_COMBATREACH, 10);
m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FIRE, true);
m_creature->SetUnitMovementFlags(MOVEMENTFLAG_LEVITATING);
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
m_creature->setActive(false);
}
void Aggro(Unit *who)
@@ -125,6 +126,7 @@ struct TRINITY_DLL_DECL boss_alarAI : public ScriptedAI
m_creature->SetUnitMovementFlags(MOVEMENTFLAG_LEVITATING); // after enterevademode will be set walk movement
DoZoneInCombat();
m_creature->setActive(true);
}
void JustDied(Unit *victim)
@@ -136,13 +138,8 @@ struct TRINITY_DLL_DECL boss_alarAI : public ScriptedAI
void JustSummoned(Creature *summon)
{
if(summon->GetEntry() == CREATURE_EMBER_OF_ALAR)
{
if(Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
{
summon->AI()->AttackStart(target);
summon->SetInCombatWith(target);
}
}
}
void MoveInLineOfSight(Unit *who) {}
@@ -405,7 +402,7 @@ struct TRINITY_DLL_DECL boss_alarAI : public ScriptedAI
else
{
Unit *target = NULL;
if(Phase1 && (target = m_creature->SelectNearbyTarget()) && m_creature->IsHostileTo(target)) // core bug, 1620 faction bugged
if(Phase1 && (target = m_creature->SelectNearestTarget(5)))
m_creature->AI()->AttackStart(target);
else
{