Scripts/Icecrown Citadel

* Call EnterEvadeMode before teleporting players to entrance - prevents players being stuck in combat
* Fixed Gaseous Blight stacking damage
* Properly initialize phase for Professor Putricide when entering combat
* Fixed Blood Nova and Boiling Blood abilities of Deathbringer Saurfang
This commit is contained in:
Shauren
2011-01-12 22:50:51 +01:00
parent 52499b03ea
commit 8d59953f93
11 changed files with 125 additions and 88 deletions
+24
View File
@@ -2794,6 +2794,30 @@ void Spell::SelectEffectTargets(uint32 i, uint32 cur)
case 59725: // Improved Spell Reflection - aoe aura case 59725: // Improved Spell Reflection - aoe aura
unitList.remove(m_caster); unitList.remove(m_caster);
break; break;
case 72378: // Blood Nova (Deathbringer Saurfang)
case 73058:
{
// select one random target, with preference of ranged targets
uint32 targetsAtRange = 0;
uint32 const minTargets = m_caster->GetMap()->GetSpawnMode() & 1 ? 10 : 4;
unitList.sort(Trinity::ObjectDistanceOrderPred(m_caster, false));
// get target count at range
for (std::list<Unit*>::iterator itr = unitList.begin(); itr != unitList.end(); ++itr, ++targetsAtRange)
if ((*itr)->GetDistance(m_caster) < 12.0f)
break;
// set the upper cap
if (targetsAtRange < minTargets)
targetsAtRange = std::min<uint32>(unitList.size()-1, minTargets);
std::list<Unit*>::iterator itr = unitList.begin();
std::advance(itr, urand(0, targetsAtRange));
Unit* target = *itr;
unitList.clear();
unitList.push_back(target);
break;
}
case 72255: // Mark of the Fallen Champion (Deathbringer Saurfang) case 72255: // Mark of the Fallen Champion (Deathbringer Saurfang)
case 72444: case 72444:
case 72445: case 72445:
+1 -1
View File
@@ -1636,7 +1636,7 @@ void Spell::EffectForceCast(SpellEffIndex effIndex)
return; return;
case 72378: // Blood Nova case 72378: // Blood Nova
case 73058: // Blood Nova case 73058: // Blood Nova
spellInfo = sSpellMgr->GetSpellForDifficultyFromSpell(spellInfo, m_caster); m_caster->CastSpell(unitTarget, 72380, true); // additional spell cast
break; break;
} }
} }
+85 -70
View File
@@ -3875,18 +3875,6 @@ void SpellMgr::LoadSpellCustomAttr()
spellInfo->AttributesEx |= SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY; spellInfo->AttributesEx |= SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY;
count++; count++;
break; break;
case 69055: // Saber Lash
case 70814: // Saber Lash
spellInfo->EffectRadiusIndex[0] = 8;
count++;
break;
case 69075: // Bone Storm
case 70834: // Bone Storm
case 70835: // Bone Storm
case 70836: // Bone Storm
spellInfo->EffectRadiusIndex[0] = 12;
count++;
break;
case 18500: // Wing Buffet case 18500: // Wing Buffet
case 33086: // Wild Bite case 33086: // Wild Bite
case 49749: // Piercing Blow case 49749: // Piercing Blow
@@ -3910,19 +3898,6 @@ void SpellMgr::LoadSpellCustomAttr()
spellInfo->StackAmount = 4; spellInfo->StackAmount = 4;
count++; count++;
break; break;
// THESE SPELLS ARE WORKING CORRECTLY EVEN WITHOUT THIS HACK
// THE ONLY REASON ITS HERE IS THAT CURRENT GRID SYSTEM
// DOES NOT ALLOW FAR OBJECT SELECTION (dist > 333)
case 70781: // Light's Hammer Teleport
case 70856: // Oratory of the Damned Teleport
case 70857: // Rampart of Skulls Teleport
case 70858: // Deathbringer's Rise Teleport
case 70859: // Upper Spire Teleport
case 70860: // Frozen Throne Teleport
case 70861: // Sindragosa's Lair Teleport
spellInfo->EffectImplicitTargetA[0] = TARGET_DST_DB;
count++;
break;
case 63675: // Improved Devouring Plague case 63675: // Improved Devouring Plague
spellInfo->AttributesEx3 |= SPELL_ATTR3_NO_DONE_BONUS; spellInfo->AttributesEx3 |= SPELL_ATTR3_NO_DONE_BONUS;
count++; count++;
@@ -3935,11 +3910,6 @@ void SpellMgr::LoadSpellCustomAttr()
spellInfo->EffectSpellClassMask[0] = flag96(423937, 276955137, 2049); spellInfo->EffectSpellClassMask[0] = flag96(423937, 276955137, 2049);
count++; count++;
break; break;
// this is here until targetAuraSpell and alike support SpellDifficulty.dbc
case 70459: // Ooze Eruption Search Effect
spellInfo->targetAuraSpell = 0;
count++;
break;
case 70728: // Exploit Weakness case 70728: // Exploit Weakness
case 70840: // Devious Minds case 70840: // Devious Minds
spellInfo->EffectImplicitTargetA[0] = TARGET_UNIT_CASTER; spellInfo->EffectImplicitTargetA[0] = TARGET_UNIT_CASTER;
@@ -3951,45 +3921,6 @@ void SpellMgr::LoadSpellCustomAttr()
spellInfo->EffectImplicitTargetB[0] = TARGET_UNIT_MASTER; spellInfo->EffectImplicitTargetB[0] = TARGET_UNIT_MASTER;
count++; count++;
break; break;
case 71413: // Green Ooze Summon
case 71414: // Orange Ooze Summon
spellInfo->EffectImplicitTargetA[0] = TARGET_DEST_DEST;
count++;
break;
// THIS IS HERE BECAUSE COOLDOWN ON CREATURE PROCS IS NOT IMPLEMENTED
case 71604: // Mutated Strength
case 72673: // Mutated Strength
case 72674: // Mutated Strength
case 72675: // Mutated Strength
spellInfo->Effect[1] = 0;
count++;
break;
case 70447: // Volatile Ooze Adhesive
case 72836: // Volatile Ooze Adhesive
case 72837: // Volatile Ooze Adhesive
case 72838: // Volatile Ooze Adhesive
case 70672: // Gaseous Bloat
case 72455: // Gaseous Bloat
case 72832: // Gaseous Bloat
case 72833: // Gaseous Bloat
spellInfo->EffectImplicitTargetB[0] = TARGET_UNIT_TARGET_ENEMY;
spellInfo->EffectImplicitTargetB[1] = TARGET_UNIT_TARGET_ENEMY;
spellInfo->EffectImplicitTargetB[2] = TARGET_UNIT_TARGET_ENEMY;
count++;
break;
case 70911: // Unbound Plague
case 72854: // Unbound Plague
case 72855: // Unbound Plague
case 72856: // Unbound Plague
spellInfo->EffectImplicitTargetB[0] = TARGET_UNIT_TARGET_ENEMY;
count++;
break;
case 71518: // Unholy Infusion Quest Credit
case 72934: // Blood Infusion Quest Credit
case 72289: // Frost Infusion Quest Credit
spellInfo->EffectRadiusIndex[0] = 28; // another missing radius
count++;
break;
case 71708: // Empowered Flare case 71708: // Empowered Flare
case 72785: // Empowered Flare case 72785: // Empowered Flare
case 72786: // Empowered Flare case 72786: // Empowered Flare
@@ -3997,10 +3928,94 @@ void SpellMgr::LoadSpellCustomAttr()
spellInfo->AttributesEx3 |= SPELL_ATTR3_NO_DONE_BONUS; spellInfo->AttributesEx3 |= SPELL_ATTR3_NO_DONE_BONUS;
count++; count++;
break; break;
case 71340: // Pact of the Darkfallen // ICECROWN CITADEL SPELLS
// THESE SPELLS ARE WORKING CORRECTLY EVEN WITHOUT THIS HACK
// THE ONLY REASON ITS HERE IS THAT CURRENT GRID SYSTEM
// DOES NOT ALLOW FAR OBJECT SELECTION (dist > 333)
case 70781: // Light's Hammer Teleport
case 70856: // Oratory of the Damned Teleport
case 70857: // Rampart of Skulls Teleport
case 70858: // Deathbringer's Rise Teleport
case 70859: // Upper Spire Teleport
case 70860: // Frozen Throne Teleport
case 70861: // Sindragosa's Lair Teleport
spellInfo->EffectImplicitTargetA[0] = TARGET_DST_DB;
count++;
break;
case 69055: // Saber Lash (Lord Marrowgar)
case 70814: // Saber Lash (Lord Marrowgar)
spellInfo->EffectRadiusIndex[0] = 8;
count++;
break;
case 69075: // Bone Storm (Lord Marrowgar)
case 70834: // Bone Storm (Lord Marrowgar)
case 70835: // Bone Storm (Lord Marrowgar)
case 70836: // Bone Storm (Lord Marrowgar)
case 72378: // Blood Nova (Deathbringer Saurfang)
case 73058: // Blood Nova (Deathbringer Saurfang)
spellInfo->EffectRadiusIndex[0] = 12;
count++;
break;
case 72385: // Boiling Blood (Deathbringer Saurfang)
case 72441: // Boiling Blood (Deathbringer Saurfang)
case 72442: // Boiling Blood (Deathbringer Saurfang)
case 72443: // Boiling Blood (Deathbringer Saurfang)
spellInfo->EffectImplicitTargetA[0] = TARGET_UNIT_TARGET_ENEMY;
spellInfo->EffectImplicitTargetB[0] = 0;
count++;
break;
case 71413: // Green Ooze Summon (Professor Putricide)
case 71414: // Orange Ooze Summon (Professor Putricide)
spellInfo->EffectImplicitTargetA[0] = TARGET_DEST_DEST;
count++;
break;
// this is here until targetAuraSpell and alike support SpellDifficulty.dbc
case 70459: // Ooze Eruption Search Effect (Professor Putricide)
spellInfo->targetAuraSpell = 0;
count++;
break;
// THIS IS HERE BECAUSE COOLDOWN ON CREATURE PROCS IS NOT IMPLEMENTED
case 71604: // Mutated Strength (Professor Putricide)
case 72673: // Mutated Strength (Professor Putricide)
case 72674: // Mutated Strength (Professor Putricide)
case 72675: // Mutated Strength (Professor Putricide)
spellInfo->Effect[1] = 0;
count++;
break;
case 70447: // Volatile Ooze Adhesive (Professor Putricide)
case 72836: // Volatile Ooze Adhesive (Professor Putricide)
case 72837: // Volatile Ooze Adhesive (Professor Putricide)
case 72838: // Volatile Ooze Adhesive (Professor Putricide)
case 70672: // Gaseous Bloat (Professor Putricide)
case 72455: // Gaseous Bloat (Professor Putricide)
case 72832: // Gaseous Bloat (Professor Putricide)
case 72833: // Gaseous Bloat (Professor Putricide)
spellInfo->EffectImplicitTargetB[0] = TARGET_UNIT_TARGET_ENEMY;
spellInfo->EffectImplicitTargetB[1] = TARGET_UNIT_TARGET_ENEMY;
spellInfo->EffectImplicitTargetB[2] = TARGET_UNIT_TARGET_ENEMY;
count++;
break;
case 70911: // Unbound Plague (Professor Putricide)
case 72854: // Unbound Plague (Professor Putricide)
case 72855: // Unbound Plague (Professor Putricide)
case 72856: // Unbound Plague (Professor Putricide)
spellInfo->EffectImplicitTargetB[0] = TARGET_UNIT_TARGET_ENEMY;
count++;
break;
case 71518: // Unholy Infusion Quest Credit (Professor Putricide)
case 72934: // Blood Infusion Quest Credit (Blood-Queen Lana'thel)
case 72289: // Frost Infusion Quest Credit (Sindragosa)
spellInfo->EffectRadiusIndex[0] = 28; // another missing radius
count++;
break;
case 71340: // Pact of the Darkfallen (Blood-Queen Lana'thel)
spellInfo->DurationIndex = 21; spellInfo->DurationIndex = 21;
count++; count++;
break; break;
case 71266: // Swarming Shadows
spellInfo->AreaGroupId = 0;
count++;
break;
default: default:
break; break;
} }
@@ -203,8 +203,8 @@ class boss_blood_council_controller : public CreatureScript
{ {
if (!instance->CheckRequiredBosses(DATA_BLOOD_PRINCE_COUNCIL, who->ToPlayer())) if (!instance->CheckRequiredBosses(DATA_BLOOD_PRINCE_COUNCIL, who->ToPlayer()))
{ {
instance->DoCastSpellOnPlayers(LIGHT_S_HAMMER_TELEPORT);
EnterEvadeMode(); EnterEvadeMode();
instance->DoCastSpellOnPlayers(LIGHT_S_HAMMER_TELEPORT);
return; return;
} }
@@ -159,8 +159,8 @@ class boss_blood_queen_lana_thel : public CreatureScript
{ {
if (!instance->CheckRequiredBosses(DATA_BLOOD_QUEEN_LANA_THEL, who->ToPlayer())) if (!instance->CheckRequiredBosses(DATA_BLOOD_QUEEN_LANA_THEL, who->ToPlayer()))
{ {
instance->DoCastSpellOnPlayers(LIGHT_S_HAMMER_TELEPORT);
EnterEvadeMode(); EnterEvadeMode();
instance->DoCastSpellOnPlayers(LIGHT_S_HAMMER_TELEPORT);
return; return;
} }
@@ -277,8 +277,8 @@ class boss_deathbringer_saurfang : public CreatureScript
{ {
if (!instance->CheckRequiredBosses(DATA_DEATHBRINGER_SAURFANG, who->ToPlayer())) if (!instance->CheckRequiredBosses(DATA_DEATHBRINGER_SAURFANG, who->ToPlayer()))
{ {
instance->DoCastSpellOnPlayers(LIGHT_S_HAMMER_TELEPORT);
EnterEvadeMode(); EnterEvadeMode();
instance->DoCastSpellOnPlayers(LIGHT_S_HAMMER_TELEPORT);
return; return;
} }
@@ -123,8 +123,8 @@ class boss_festergut : public CreatureScript
{ {
if (!instance->CheckRequiredBosses(DATA_FESTERGUT, who->ToPlayer())) if (!instance->CheckRequiredBosses(DATA_FESTERGUT, who->ToPlayer()))
{ {
instance->DoCastSpellOnPlayers(LIGHT_S_HAMMER_TELEPORT);
EnterEvadeMode(); EnterEvadeMode();
instance->DoCastSpellOnPlayers(LIGHT_S_HAMMER_TELEPORT);
return; return;
} }
@@ -270,7 +270,7 @@ class boss_festergut : public CreatureScript
if (Creature* gasDummy = ObjectAccessor::GetCreature(*me, gasDummyGUID)) if (Creature* gasDummy = ObjectAccessor::GetCreature(*me, gasDummyGUID))
for (uint8 i = 0; i < 3; ++i) for (uint8 i = 0; i < 3; ++i)
{ {
gasDummy->RemoveAurasDueToSpell(gaseousBlight[i]); me->RemoveAurasDueToSpell(gaseousBlight[i]);
gasDummy->RemoveAurasDueToSpell(gaseousBlightVisual[i]); gasDummy->RemoveAurasDueToSpell(gaseousBlightVisual[i]);
} }
} }
@@ -225,8 +225,8 @@ class boss_lady_deathwhisper : public CreatureScript
{ {
if (!instance->CheckRequiredBosses(DATA_LADY_DEATHWHISPER, who->ToPlayer())) if (!instance->CheckRequiredBosses(DATA_LADY_DEATHWHISPER, who->ToPlayer()))
{ {
instance->DoCastSpellOnPlayers(LIGHT_S_HAMMER_TELEPORT);
EnterEvadeMode(); EnterEvadeMode();
instance->DoCastSpellOnPlayers(LIGHT_S_HAMMER_TELEPORT);
return; return;
} }
@@ -214,18 +214,13 @@ class boss_professor_putricide : public CreatureScript
if (events.GetPhaseMask() & PHASE_MASK_NOT_SELF) if (events.GetPhaseMask() & PHASE_MASK_NOT_SELF)
return; return;
if (!(events.GetPhaseMask() & PHASE_MASK_NOT_SELF) && !instance->CheckRequiredBosses(DATA_PROFESSOR_PUTRICIDE, who->ToPlayer())) if (!instance->CheckRequiredBosses(DATA_PROFESSOR_PUTRICIDE, who->ToPlayer()))
{ {
instance->DoCastSpellOnPlayers(LIGHT_S_HAMMER_TELEPORT);
EnterEvadeMode(); EnterEvadeMode();
instance->DoCastSpellOnPlayers(LIGHT_S_HAMMER_TELEPORT);
return; return;
} }
_SetPhase(PHASE_COMBAT_1);
Talk(SAY_AGGRO);
DoCast(me, SPELL_OOZE_TANK_PROTECTION, true);
DoZoneInCombat(me);
events.Reset(); events.Reset();
events.ScheduleEvent(EVENT_BERSERK, 600000); events.ScheduleEvent(EVENT_BERSERK, 600000);
events.ScheduleEvent(EVENT_SLIME_PUDDLE, 10000); events.ScheduleEvent(EVENT_SLIME_PUDDLE, 10000);
@@ -233,6 +228,11 @@ class boss_professor_putricide : public CreatureScript
if (IsHeroic()) if (IsHeroic())
events.ScheduleEvent(EVENT_UNBOUND_PLAGUE, 20000); events.ScheduleEvent(EVENT_UNBOUND_PLAGUE, 20000);
_SetPhase(PHASE_COMBAT_1);
Talk(SAY_AGGRO);
DoCast(me, SPELL_OOZE_TANK_PROTECTION, true);
DoZoneInCombat(me);
instance->SetBossState(DATA_PROFESSOR_PUTRICIDE, IN_PROGRESS); instance->SetBossState(DATA_PROFESSOR_PUTRICIDE, IN_PROGRESS);
if (GameObject* table = ObjectAccessor::GetGameObject(*me, instance->GetData64(DATA_PUTRICIDE_TABLE))) if (GameObject* table = ObjectAccessor::GetGameObject(*me, instance->GetData64(DATA_PUTRICIDE_TABLE)))
table->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE); table->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE);
@@ -115,8 +115,8 @@ class boss_rotface : public CreatureScript
{ {
if (!instance->CheckRequiredBosses(DATA_ROTFACE, who->ToPlayer())) if (!instance->CheckRequiredBosses(DATA_ROTFACE, who->ToPlayer()))
{ {
instance->DoCastSpellOnPlayers(LIGHT_S_HAMMER_TELEPORT);
EnterEvadeMode(); EnterEvadeMode();
instance->DoCastSpellOnPlayers(LIGHT_S_HAMMER_TELEPORT);
return; return;
} }
@@ -384,8 +384,6 @@ class instance_icecrown_citadel : public InstanceMapScript
HandleGameObject(putricidePipes[1], true); HandleGameObject(putricidePipes[1], true);
} }
break; break;
case DATA_BLOOD_PRINCE_COUNCIL:
case DATA_BLOOD_QUEEN_LANA_THEL:
case DATA_VALITHRIA_DREAMWALKER: case DATA_VALITHRIA_DREAMWALKER:
case DATA_SINDRAGOSA: case DATA_SINDRAGOSA:
case DATA_THE_LICH_KING: case DATA_THE_LICH_KING: