Skip to content

Commit

Permalink
Scripts/Trial of the Crusader: Fix crash in MovementInform for Frost …
Browse files Browse the repository at this point in the history
…Sphere in Anub'arak encounter.

Thanks Vincent-Michael!
Fixes TrinityCore#4834
  • Loading branch information
kaelima committed Jan 15, 2012
1 parent ac37e72 commit 67555fd
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 51 deletions.
Expand Up @@ -186,7 +186,7 @@ class boss_nightbane : public CreatureScript
void MovementInform(uint32 type, uint32 id)
{
if (type != POINT_MOTION_TYPE)
return;
return;

if (Intro)
{
Expand Down
Expand Up @@ -122,6 +122,11 @@ const Position SphereSpawn[6] =
{ 706.6383f, 161.5266f, 155.6701f, 0 },
};

enum MovementPoints
{
POINT_FALL_GROUND = 1
};

class boss_anubarak_trial : public CreatureScript
{
public:
Expand Down Expand Up @@ -553,68 +558,68 @@ class mob_nerubian_burrower : public CreatureScript

class mob_frost_sphere : public CreatureScript
{
public:
mob_frost_sphere() : CreatureScript("mob_frost_sphere") { }
public:
mob_frost_sphere() : CreatureScript("mob_frost_sphere") { }

CreatureAI* GetAI(Creature* creature) const
{
return new mob_frost_sphereAI(creature);
};

struct mob_frost_sphereAI : public ScriptedAI
{
mob_frost_sphereAI(Creature* creature) : ScriptedAI(creature)
struct mob_frost_sphereAI : public ScriptedAI
{
}

bool m_bFall;
float x, y, z;
mob_frost_sphereAI(Creature* creature) : ScriptedAI(creature)
{
}

void Reset()
{
m_bFall = false;
me->SetReactState(REACT_PASSIVE);
me->SetFlying(true);
me->SetDisplayId(25144);
me->SetSpeed(MOVE_RUN, 0.5f, false);
me->GetMotionMaster()->MoveRandom(20.0f);
DoCast(SPELL_FROST_SPHERE);
}
void Reset()
{
_isFalling = false;
me->SetReactState(REACT_PASSIVE);
me->SetFlying(true);
me->SetDisplayId(me->GetCreatureInfo()->Modelid2);
me->SetSpeed(MOVE_RUN, 0.5f, false);
me->GetMotionMaster()->MoveRandom(20.0f);
DoCast(SPELL_FROST_SPHERE);
}

void DamageTaken(Unit* /*who*/, uint32& uiDamage)
{
if (me->GetHealth() < uiDamage)
void DamageTaken(Unit* /*who*/, uint32& damage)
{
uiDamage = 0;
if (!m_bFall)
if (me->GetHealth() <= damage)
{
m_bFall = true;
me->GetMotionMaster()->MoveIdle();
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
//At hit the ground
me->HandleEmoteCommand(EMOTE_ONESHOT_FLYDEATH);
me->GetMotionMaster()->MoveFall();
damage = 0;
if (!_isFalling)
{
_isFalling = true;
me->GetMotionMaster()->MoveIdle();
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
//At hit the ground
me->HandleEmoteCommand(EMOTE_ONESHOT_FLYDEATH);
me->GetMotionMaster()->MoveFall(POINT_FALL_GROUND);
}
}
}
}

void MovementInform(uint32 uiType, uint32 uiId)
{
if (uiType != POINT_MOTION_TYPE) return;

switch (uiId)
void MovementInform(uint32 type, uint32 pointId)
{
case 0:
me->RemoveAurasDueToSpell(SPELL_FROST_SPHERE);
me->SetDisplayId(11686);
DoCast(SPELL_PERMAFROST_VISUAL);
DoCast(SPELL_PERMAFROST);
me->SetFloatValue(OBJECT_FIELD_SCALE_X, 2.0f);
break;
if (type != EFFECT_MOTION_TYPE)
return;

switch (pointId)
{
case POINT_FALL_GROUND:
me->RemoveAurasDueToSpell(SPELL_FROST_SPHERE);
me->SetDisplayId(me->GetCreatureInfo()->Modelid1);
DoCast(SPELL_PERMAFROST_VISUAL);
DoCast(SPELL_PERMAFROST);
me->SetFloatValue(OBJECT_FIELD_SCALE_X, 2.0f);
break;
}
}
}
};

private:
bool _isFalling;
};

CreatureAI* GetAI(Creature* creature) const
{
return new mob_frost_sphereAI(creature);
};
};

class mob_anubarak_spike : public CreatureScript
Expand Down

0 comments on commit 67555fd

Please sign in to comment.