Scripts/Icecrown Citadel: Fixed Festergut's Pungent Blight getting interrupted

Scripts/Icecrown Citadel: Changed handling of Deathbringer Saurfang's Blood Power aura (its now always active, starts with 0 value)
Scripts/Icecrown Citadel: Fixed Deathbringer Saurfang's achievement (I've Made a Mess)
Scripts/Icecrown Citadel: Fixed Mark of the Fallen Champion aura removal (Deathbringer Saurfang)

--HG--
branch : trunk
This commit is contained in:
Shauren
2010-11-14 00:21:57 +01:00
parent 61f07610fd
commit 9ba52c474b
4 changed files with 52 additions and 45 deletions

View File

@@ -3873,6 +3873,11 @@ void SpellMgr::LoadSpellCustomAttr()
spellInfo->EffectImplicitTargetA[0] = TARGET_DST_DB;
count++;
break;
// Deathbringer Saurfang achievement (must be cast on players, cannot do that with ENTRY target)
case 72928:
spellInfo->EffectImplicitTargetB[0] = TARGET_UNIT_AREA_ENEMY_SRC;
count++;
break;
case 63675: // Improved Devouring Plague
spellInfo->AttributesEx3 |= SPELL_ATTR_EX3_NO_DONE_BONUS;
count++;

View File

@@ -254,11 +254,11 @@ class boss_deathbringer_saurfang : public CreatureScript
me->SetPower(POWER_ENERGY, 0);
DoCast(me, SPELL_ZERO_POWER, true);
DoCast(me, SPELL_BLOOD_LINK, true);
DoCast(me, SPELL_BLOOD_POWER, true);
DoCast(me, SPELL_MARK_OF_THE_FALLEN_CHAMPION_S, true);
DoCast(me, SPELL_RUNE_OF_BLOOD_S, true);
me->RemoveAurasDueToSpell(SPELL_BERSERK);
me->RemoveAurasDueToSpell(SPELL_FRENZY);
me->RemoveAurasDueToSpell(SPELL_BLOOD_POWER);
summons.DespawnAll();
instance->SetBossState(DATA_DEATHBRINGER_SAURFANG, NOT_STARTED);
}
@@ -273,6 +273,7 @@ class boss_deathbringer_saurfang : public CreatureScript
events.ScheduleEvent(EVENT_RUNE_OF_BLOOD, 20000, 0, PHASE_COMBAT);
uiFallenChampionCount = 0;
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_MARK_OF_THE_FALLEN_CHAMPION);
instance->SetBossState(DATA_DEATHBRINGER_SAURFANG, IN_PROGRESS);
}
@@ -310,6 +311,7 @@ class boss_deathbringer_saurfang : public CreatureScript
void JustReachedHome()
{
instance->SetBossState(DATA_DEATHBRINGER_SAURFANG, FAIL);
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_MARK_OF_THE_FALLEN_CHAMPION);
}
void KilledUnit(Unit *victim)
@@ -466,47 +468,49 @@ class boss_deathbringer_saurfang : public CreatureScript
// intro setup
void DoAction(const int32 action)
{
if (action == PHASE_INTRO_A || action == PHASE_INTRO_H)
switch (action)
{
if (GameObject* teleporter = GameObject::GetGameObject(*me, instance->GetData64(GO_SCOURGE_TRANSPORTER_SAURFANG)))
{
instance->HandleGameObject(0, false, teleporter);
teleporter->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE);
}
case PHASE_INTRO_A:
case PHASE_INTRO_H:
if (GameObject* teleporter = GameObject::GetGameObject(*me, instance->GetData64(GO_SCOURGE_TRANSPORTER_SAURFANG)))
{
instance->HandleGameObject(0, false, teleporter);
teleporter->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE);
}
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
// controls what events will execute
events.SetPhase(uint32(action));
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
// controls what events will execute
events.SetPhase(uint32(action));
me->SetHomePosition(deathbringerPos.GetPositionX(), deathbringerPos.GetPositionY(), deathbringerPos.GetPositionZ(), me->GetOrientation());
me->GetMotionMaster()->MovePoint(POINT_SAURFANG, deathbringerPos.GetPositionX(), deathbringerPos.GetPositionY(), deathbringerPos.GetPositionZ());
me->SetHomePosition(deathbringerPos.GetPositionX(), deathbringerPos.GetPositionY(), deathbringerPos.GetPositionZ(), me->GetOrientation());
me->GetMotionMaster()->MovePoint(POINT_SAURFANG, deathbringerPos.GetPositionX(), deathbringerPos.GetPositionY(), deathbringerPos.GetPositionZ());
events.ScheduleEvent(EVENT_INTRO_ALLIANCE_2, 2500, 0, PHASE_INTRO_A);
events.ScheduleEvent(EVENT_INTRO_ALLIANCE_3, 20000, 0, PHASE_INTRO_A);
events.ScheduleEvent(EVENT_INTRO_ALLIANCE_2, 2500, 0, PHASE_INTRO_A);
events.ScheduleEvent(EVENT_INTRO_ALLIANCE_3, 20000, 0, PHASE_INTRO_A);
events.ScheduleEvent(EVENT_INTRO_HORDE_2, 5000, 0, PHASE_INTRO_H);
events.ScheduleEvent(EVENT_INTRO_HORDE_2, 5000, 0, PHASE_INTRO_H);
break;
case ACTION_CONTINUE_INTRO:
events.ScheduleEvent(EVENT_INTRO_ALLIANCE_6, 6500+500, 0, PHASE_INTRO_A);
events.ScheduleEvent(EVENT_INTRO_FINISH, 8000, 0, PHASE_INTRO_A);
events.ScheduleEvent(EVENT_INTRO_HORDE_4, 6500, 0, PHASE_INTRO_H);
events.ScheduleEvent(EVENT_INTRO_HORDE_9, 46700+1000+500, 0, PHASE_INTRO_H);
events.ScheduleEvent(EVENT_INTRO_FINISH, 46700+1000+8000, 0, PHASE_INTRO_H);
break;
case ACTION_MARK_OF_THE_FALLEN_CHAMPION:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true, -SPELL_MARK_OF_THE_FALLEN_CHAMPION))
{
++uiFallenChampionCount;
DoCast(target, SPELL_MARK_OF_THE_FALLEN_CHAMPION);
me->SetPower(POWER_ENERGY, 0);
if (Aura* bloodPower = me->GetAura(SPELL_BLOOD_POWER))
bloodPower->RecalculateAmountOfEffects();
}
break;
default:
break;
}
else if (action == ACTION_CONTINUE_INTRO)
{
events.ScheduleEvent(EVENT_INTRO_ALLIANCE_6, 6500+500, 0, PHASE_INTRO_A);
events.ScheduleEvent(EVENT_INTRO_FINISH, 8000, 0, PHASE_INTRO_A);
events.ScheduleEvent(EVENT_INTRO_HORDE_4, 6500, 0, PHASE_INTRO_H);
events.ScheduleEvent(EVENT_INTRO_HORDE_9, 46700+1000+500, 0, PHASE_INTRO_H);
events.ScheduleEvent(EVENT_INTRO_FINISH, 46700+1000+8000, 0, PHASE_INTRO_H);
}
else if (action == ACTION_MARK_OF_THE_FALLEN_CHAMPION)
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true, -SPELL_MARK_OF_THE_FALLEN_CHAMPION))
{
++uiFallenChampionCount;
me->RemoveAurasDueToSpell(SPELL_BLOOD_POWER);
DoCast(target, SPELL_MARK_OF_THE_FALLEN_CHAMPION);
me->SetPower(POWER_ENERGY, 0);
}
}
else
ASSERT(false);
}
private:
@@ -923,9 +927,7 @@ class spell_deathbringer_blood_link : public SpellScriptLoader
void HandleDummy(SpellEffIndex /*effIndex*/)
{
GetHitUnit()->CastCustomSpell(SPELL_BLOOD_LINK_POWER, SPELLVALUE_BASE_POINT0, GetEffectValue(), GetHitUnit(), true);
if (!GetHitUnit()->HasAura(SPELL_BLOOD_POWER))
GetHitUnit()->CastSpell(GetHitUnit(), SPELL_BLOOD_POWER, true);
else if (Aura* bloodPower = GetHitUnit()->GetAura(SPELL_BLOOD_POWER))
if (Aura* bloodPower = GetHitUnit()->GetAura(SPELL_BLOOD_POWER))
bloodPower->RecalculateAmountOfEffects();
PreventHitDefaultEffect(EFFECT_0);
}
@@ -1121,9 +1123,10 @@ class achievement_ive_gone_and_made_a_mess : public AchievementCriteriaScript
bool OnCheck(Player* /*source*/, Unit* target)
{
if (Creature* saurfang = target->ToCreature())
if (saurfang->AI()->GetData(DATA_MADE_A_MESS))
return true;
if (target)
if (Creature* saurfang = target->ToCreature())
if (saurfang->AI()->GetData(DATA_MADE_A_MESS))
return true;
return false;
}

View File

@@ -212,7 +212,7 @@ class boss_festergut : public CreatureScript
me->CastSpell(me, gaseousBlight[uiInhaleCounter], true, NULL, NULL, me->GetGUID());
}
events.ScheduleEvent(EVENT_INHALE_BLIGHT, urand(33500, 35000));
return;
break;
}
case EVENT_VILE_GAS:
{

View File

@@ -386,8 +386,7 @@ class boss_professor_putricide : public CreatureScript
break;
case ACTION_FESTERGUT_GAS:
DoScriptText(SAY_FESTERGUT_GASEOUS_BLIGHT, me);
if (Creature* festergut = Unit::GetCreature(*me, instance->GetData64(DATA_FESTERGUT)))
festergut->CastSpell(festergut, SPELL_RELEASE_GAS_VISUAL, false, NULL, NULL, me->GetGUID()); // cast from festergut for LoS (with prof's GUID for logs)
DoCast(me, SPELL_RELEASE_GAS_VISUAL, true);
break;
case ACTION_FESTERGUT_DEATH:
events.ScheduleEvent(EVENT_FESTERGUT_DIES, 4000, 0, PHASE_FESTERGUT);