Fix Recursion Crash. Patch by Zor. Closes #863.

--HG--
branch : trunk
This commit is contained in:
p0wer
2009-12-19 21:09:54 -06:00
parent fc2033176b
commit 9e2b42661a
@@ -32,60 +32,59 @@ enum eDrakuruShackles
NPC_RAGECLAW = 29686
};
struct TRINITY_DLL_DECL npc_drakuru_shacklesAI : public ScriptedAI
{
npc_drakuru_shacklesAI(Creature* pCreature) : ScriptedAI(pCreature) {}
struct TRINITY_DLL_DECL npc_drakuru_shacklesAI : public ScriptedAI
{
npc_drakuru_shacklesAI(Creature* pCreature) : ScriptedAI(pCreature) {}
Unit* Rageclaw;
void Reset()
{
Rageclaw = NULL;
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
float x, y, z;
m_creature->GetClosePoint(x, y, z, m_creature->GetObjectSize() / 3, 0.1f);
if (Unit* summon = m_creature->SummonCreature(NPC_RAGECLAW, x, y, z,
0, TEMPSUMMON_DEAD_DESPAWN, 1000))
{
Rageclaw = summon;
LockRageclaw();
}
}
void LockRageclaw()
{
m_creature->SetInFront(Rageclaw);
Rageclaw->SetInFront(m_creature);
DoCast(Rageclaw, SPELL_LEFT_CHAIN, true);
DoCast(Rageclaw, SPELL_RIGHT_CHAIN, true);
}
void UnlockRageclaw(Unit* pWho)
{
if (!pWho)
return;
DoCast(Rageclaw, SPELL_FREE_RAGECLAW, true);
m_creature->setDeathState(DEAD);
}
void SpellHit(Unit* pCaster, const SpellEntry* pSpell)
{
if (pSpell->Id == SPELL_UNLOCK_SHACKLE)
{
if (Rageclaw)
UnlockRageclaw(pCaster);
else
m_creature->setDeathState(JUST_DIED);
}
}
};
Unit* Rageclaw;
void Reset()
{
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
float x, y, z;
Rageclaw = NULL;
m_creature->GetClosePoint(x, y, z, m_creature->GetObjectSize()/3,0.1);
if (Unit* summon = m_creature->SummonCreature(NPC_RAGECLAW,x,y,z,0,TEMPSUMMON_DEAD_DESPAWN,1000))
DoActionOnRageclaw(true,summon);
}
void DoActionOnRageclaw(bool bLocking, Unit* pWho)
{
if (!pWho)
return;
Rageclaw = pWho;
if (bLocking)
{
if (pWho)
{
m_creature->SetInFront(Rageclaw);
Rageclaw->SetInFront(m_creature);
DoCast(Rageclaw, SPELL_LEFT_CHAIN, true);
DoCast(Rageclaw, SPELL_RIGHT_CHAIN, true);
}
}
else
{
DoCast(Rageclaw, SPELL_FREE_RAGECLAW, true);
if (pWho->GetTypeId() == TYPEID_PLAYER)
CAST_PLR(pWho)->CastSpell(Rageclaw, SPELL_UNLOCK_SHACKLE, true);
m_creature->setDeathState(DEAD);
}
}
void SpellHit(Unit* pCaster, const SpellEntry* pSpell)
{
if (pSpell->Id == SPELL_UNLOCK_SHACKLE)
{
if (Rageclaw)
DoActionOnRageclaw(false, pCaster);
else
m_creature->setDeathState(JUST_DIED);
}
}
};
CreatureAI* GetAI_npc_drakuru_shackles(Creature* pCreature)
{