*fix crash in Illidan script

*only spawn parasites in first phase of fight
*despawn spirits instead of killing them (looks better)

--HG--
branch : trunk
This commit is contained in:
Rat
2009-08-09 13:55:53 +02:00
parent f2f168464d
commit 1ad11c4460
@@ -24,7 +24,7 @@ EndScriptData */
#include "precompiled.h" #include "precompiled.h"
#include "def_black_temple.h" #include "def_black_temple.h"
#define GETGO(obj, guid) GameObject* obj = pInstance->instance->GetGameObject(pInstance->GetData64(guid)) #define GETGO(obj, guid) GameObject* obj = pInstance->instance->GetGameObject(guid)
#define GETUNIT(unit, guid) Unit* unit = Unit::GetUnit(*m_creature, guid) #define GETUNIT(unit, guid) Unit* unit = Unit::GetUnit(*m_creature, guid)
#define GETCRE(cre, guid) Creature* cre = Unit::GetCreature(*m_creature, guid) #define GETCRE(cre, guid) Creature* cre = Unit::GetCreature(*m_creature, guid)
#define HPPCT(unit) unit->GetHealth()*100 / unit->GetMaxHealth() #define HPPCT(unit) unit->GetHealth()*100 / unit->GetMaxHealth()
@@ -1094,6 +1094,8 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI
float x, y, z; float x, y, z;
if(GETGO(Gate, GateGUID)) if(GETGO(Gate, GateGUID))
Gate->GetPosition(x, y, z); Gate->GetPosition(x, y, z);
else
return;//if door not spawned, don't crash server
if(Creature* Channel = m_creature->SummonCreature(ILLIDAN_DOOR_TRIGGER, x, y, z+5, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 360000)) if(Creature* Channel = m_creature->SummonCreature(ILLIDAN_DOOR_TRIGGER, x, y, z+5, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 360000))
{ {
@@ -1104,7 +1106,7 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI
} }
for(uint8 i = 0; i < 2; ++i) for(uint8 i = 0; i < 2; ++i)
if(Creature* Spirit = m_creature->SummonCreature(i ? SPIRIT_OF_OLUM : SPIRIT_OF_UDALO, SpiritSpawns[i].x, SpiritSpawns[i].y, SpiritSpawns[i].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 360000)) if(Creature* Spirit = m_creature->SummonCreature(i ? SPIRIT_OF_OLUM : SPIRIT_OF_UDALO, SpiritSpawns[i].x, SpiritSpawns[i].y, SpiritSpawns[i].z, 0, TEMPSUMMON_TIMED_DESPAWN, 20000))
{ {
Spirit->SetVisibility(VISIBILITY_OFF); Spirit->SetVisibility(VISIBILITY_OFF);
SpiritGUID[i] = Spirit->GetGUID(); SpiritGUID[i] = Spirit->GetGUID();
@@ -1249,8 +1251,8 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI
DoYell(SAY_AKAMA_BEWARE, LANG_UNIVERSAL, NULL); DoYell(SAY_AKAMA_BEWARE, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature, SOUND_AKAMA_BEWARE); DoPlaySoundToSet(m_creature, SOUND_AKAMA_BEWARE);
Channel->setDeathState(JUST_DIED); Channel->setDeathState(JUST_DIED);
Spirit[0]->setDeathState(JUST_DIED); Spirit[0]->SetVisibility(VISIBILITY_OFF);
Spirit[1]->setDeathState(JUST_DIED); Spirit[1]->SetVisibility(VISIBILITY_OFF);
Timer = 3000; Timer = 3000;
break; break;
case 6: case 6:
@@ -1731,6 +1733,8 @@ struct TRINITY_DLL_DECL mob_parasitic_shadowfiendAI : public ScriptedAI
if(!m_creature->getVictim()->HasAura(SPELL_PARASITIC_SHADOWFIEND) if(!m_creature->getVictim()->HasAura(SPELL_PARASITIC_SHADOWFIEND)
&& !m_creature->getVictim()->HasAura(SPELL_PARASITIC_SHADOWFIEND2)) && !m_creature->getVictim()->HasAura(SPELL_PARASITIC_SHADOWFIEND2))
{ {
if(Creature* illidan = Unit::GetCreature((*m_creature),IllidanGUID))//summon only in 1. phase
if(((boss_illidan_stormrageAI*)illidan->AI())->Phase == PHASE_NORMAL)
m_creature->CastSpell(m_creature->getVictim(), SPELL_PARASITIC_SHADOWFIEND2, true, 0, 0, IllidanGUID); //do not stack m_creature->CastSpell(m_creature->getVictim(), SPELL_PARASITIC_SHADOWFIEND2, true, 0, 0, IllidanGUID); //do not stack
} }
m_creature->AttackerStateUpdate(m_creature->getVictim()); m_creature->AttackerStateUpdate(m_creature->getVictim());