mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-18 16:38:42 +01:00
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:
@@ -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++;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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:
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user