diff options
author | Rat <none@none> | 2009-08-09 13:55:53 +0200 |
---|---|---|
committer | Rat <none@none> | 2009-08-09 13:55:53 +0200 |
commit | 1ad11c44604994775fda73a2fbfc7b7097b38101 (patch) | |
tree | be43900e8e02601a53a84b5ad03b3f226b7803f9 | |
parent | f2f168464d2800cd782e1bdb8093654af1701788 (diff) |
*fix crash in Illidan script
*only spawn parasites in first phase of fight
*despawn spirits instead of killing them (looks better)
--HG--
branch : trunk
-rw-r--r-- | src/bindings/scripts/scripts/zone/black_temple/boss_illidan.cpp | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/bindings/scripts/scripts/zone/black_temple/boss_illidan.cpp b/src/bindings/scripts/scripts/zone/black_temple/boss_illidan.cpp index 8284c5a7238..25d8abfa242 100644 --- a/src/bindings/scripts/scripts/zone/black_temple/boss_illidan.cpp +++ b/src/bindings/scripts/scripts/zone/black_temple/boss_illidan.cpp @@ -24,7 +24,7 @@ EndScriptData */ #include "precompiled.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 GETCRE(cre, guid) Creature* cre = Unit::GetCreature(*m_creature, guid) #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; if(GETGO(Gate, GateGUID)) 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)) { @@ -1104,7 +1106,7 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI } 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); SpiritGUID[i] = Spirit->GetGUID(); @@ -1249,8 +1251,8 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI DoYell(SAY_AKAMA_BEWARE, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(m_creature, SOUND_AKAMA_BEWARE); Channel->setDeathState(JUST_DIED); - Spirit[0]->setDeathState(JUST_DIED); - Spirit[1]->setDeathState(JUST_DIED); + Spirit[0]->SetVisibility(VISIBILITY_OFF); + Spirit[1]->SetVisibility(VISIBILITY_OFF); Timer = 3000; break; case 6: @@ -1731,7 +1733,9 @@ struct TRINITY_DLL_DECL mob_parasitic_shadowfiendAI : public ScriptedAI if(!m_creature->getVictim()->HasAura(SPELL_PARASITIC_SHADOWFIEND) && !m_creature->getVictim()->HasAura(SPELL_PARASITIC_SHADOWFIEND2)) { - m_creature->CastSpell(m_creature->getVictim(), SPELL_PARASITIC_SHADOWFIEND2, true, 0, 0, IllidanGUID); //do not stack + 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->AttackerStateUpdate(m_creature->getVictim()); m_creature->resetAttackTimer(); |