From 9e2b42661a3a83e350fc7adc974e7979fe71f333 Mon Sep 17 00:00:00 2001 From: p0wer Date: Sat, 19 Dec 2009 21:09:54 -0600 Subject: Fix Recursion Crash. Patch by Zor. Closes #863. --HG-- branch : trunk --- src/bindings/scripts/scripts/northrend/zuldrak.cpp | 105 ++++++++++----------- 1 file changed, 52 insertions(+), 53 deletions(-) (limited to 'src') diff --git a/src/bindings/scripts/scripts/northrend/zuldrak.cpp b/src/bindings/scripts/scripts/northrend/zuldrak.cpp index 00129033b56..83f76254b4b 100644 --- a/src/bindings/scripts/scripts/northrend/zuldrak.cpp +++ b/src/bindings/scripts/scripts/northrend/zuldrak.cpp @@ -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) {} - - 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); +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); + } + } +}; - 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) { -- cgit v1.2.3