aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <none@none>2010-11-14 00:21:57 +0100
committerShauren <none@none>2010-11-14 00:21:57 +0100
commit9ba52c474bc236406c8f8562c7db3f3316bcfabc (patch)
tree9bf6e096e6ac42147570b95c8186cf2d24cdea78
parent61f07610fd205096357548ab8db1642bcb067238 (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
-rwxr-xr-xsrc/server/game/Spells/SpellMgr.cpp5
-rwxr-xr-xsrc/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp85
-rwxr-xr-xsrc/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp2
-rwxr-xr-xsrc/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp3
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);