diff options
author | Shauren <none@none> | 2010-11-14 00:21:57 +0100 |
---|---|---|
committer | Shauren <none@none> | 2010-11-14 00:21:57 +0100 |
commit | 9ba52c474bc236406c8f8562c7db3f3316bcfabc (patch) | |
tree | 9bf6e096e6ac42147570b95c8186cf2d24cdea78 | |
parent | 61f07610fd205096357548ab8db1642bcb067238 (diff) |
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
4 files changed, 51 insertions, 44 deletions
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 484ee03f091..30f88d59072 100755 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -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++; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp index ac976eb4de1..54436d1eeac 100755 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp @@ -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); - } - 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_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); - } - 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); - } + 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 - 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; } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp index af34b4ebc26..7a5d3c3a1c7 100755 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp @@ -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: { diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp index 25ac1068e3e..9947c452128 100755 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp @@ -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); |