From c9a5aef06167813ba679c194183f003583f9ff3d Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 26 Jun 2011 01:12:16 +0200 Subject: Scripts/Icecrown Citadel * Fixed Mark of the Fallen Champion * Allow attacking Lady Deathwhisper during intro Closes #2088 --- .../IcecrownCitadel/boss_deathbringer_saurfang.cpp | 38 +------------ .../IcecrownCitadel/boss_lady_deathwhisper.cpp | 62 ++++++++++------------ 2 files changed, 29 insertions(+), 71 deletions(-) (limited to 'src/server/scripts') diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp index a2dc0127732..96bfb17e5d4 100755 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp @@ -744,7 +744,7 @@ class npc_high_overlord_saurfang_icc : public CreatureScript InstanceScript* instance = creature->GetInstanceScript(); if (instance && instance->GetBossState(DATA_DEATHBRINGER_SAURFANG) != DONE) { - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Let it begin...", 631, -ACTION_START_EVENT); + player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "We are ready to go, High Overlord. The Lich King must fall!", 631, -ACTION_START_EVENT); player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID()); } @@ -1222,41 +1222,6 @@ class spell_deathbringer_blood_nova_targeting : public SpellScriptLoader } }; -class MarkOfTheFallenChampionCheck -{ - public: - bool operator() (Unit* unit) - { - return !unit->HasAura(SPELL_MARK_OF_THE_FALLEN_CHAMPION); - } -}; - -class spell_deathbringer_mark_of_the_fallen_champion : public SpellScriptLoader -{ - public: - spell_deathbringer_mark_of_the_fallen_champion() : SpellScriptLoader("spell_deathbringer_mark_of_the_fallen_champion") { } - - class spell_deathbringer_mark_of_the_fallen_champion_SpellScript : public SpellScript - { - PrepareSpellScript(spell_deathbringer_mark_of_the_fallen_champion_SpellScript); - - void FilterTargets(std::list& unitList) - { - unitList.remove_if(MarkOfTheFallenChampionCheck()); - } - - void Register() - { - OnUnitTargetSelect += SpellUnitTargetFn(spell_deathbringer_mark_of_the_fallen_champion_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_AREA_ENEMY_SRC); - } - }; - - SpellScript* GetSpellScript() const - { - return new spell_deathbringer_mark_of_the_fallen_champion_SpellScript(); - } -}; - class achievement_ive_gone_and_made_a_mess : public AchievementCriteriaScript { public: @@ -1285,6 +1250,5 @@ void AddSC_boss_deathbringer_saurfang() new spell_deathbringer_rune_of_blood(); new spell_deathbringer_blood_nova(); new spell_deathbringer_blood_nova_targeting(); - new spell_deathbringer_mark_of_the_fallen_champion(); new achievement_ive_gone_and_made_a_mess(); } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp index f760d415ac4..b050f42fc6c 100755 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp @@ -113,45 +113,44 @@ enum EventTypes EVENT_INTRO_5 = 4, EVENT_INTRO_6 = 5, EVENT_INTRO_7 = 6, - EVENT_INTRO_FINISH = 7, - EVENT_BERSERK = 8, - EVENT_DEATH_AND_DECAY = 9, - EVENT_DOMINATE_MIND_H = 10, + EVENT_BERSERK = 7, + EVENT_DEATH_AND_DECAY = 8, + EVENT_DOMINATE_MIND_H = 9, // Phase 1 only - EVENT_P1_SUMMON_WAVE = 11, - EVENT_P1_SHADOW_BOLT = 12, - EVENT_P1_EMPOWER_CULTIST = 13, - EVENT_P1_REANIMATE_CULTIST = 14, + EVENT_P1_SUMMON_WAVE = 10, + EVENT_P1_SHADOW_BOLT = 11, + EVENT_P1_EMPOWER_CULTIST = 12, + EVENT_P1_REANIMATE_CULTIST = 13, // Phase 2 only - EVENT_P2_SUMMON_WAVE = 15, - EVENT_P2_FROSTBOLT = 16, - EVENT_P2_FROSTBOLT_VOLLEY = 17, - EVENT_P2_TOUCH_OF_INSIGNIFICANCE = 18, - EVENT_P2_SUMMON_SHADE = 19, + EVENT_P2_SUMMON_WAVE = 14, + EVENT_P2_FROSTBOLT = 15, + EVENT_P2_FROSTBOLT_VOLLEY = 16, + EVENT_P2_TOUCH_OF_INSIGNIFICANCE = 17, + EVENT_P2_SUMMON_SHADE = 18, // Shared adds events - EVENT_CULTIST_DARK_MARTYRDOM = 20, + EVENT_CULTIST_DARK_MARTYRDOM = 19, // Cult Fanatic - EVENT_FANATIC_NECROTIC_STRIKE = 21, - EVENT_FANATIC_SHADOW_CLEAVE = 22, - EVENT_FANATIC_VAMPIRIC_MIGHT = 23, + EVENT_FANATIC_NECROTIC_STRIKE = 20, + EVENT_FANATIC_SHADOW_CLEAVE = 21, + EVENT_FANATIC_VAMPIRIC_MIGHT = 22, // Cult Adherent - EVENT_ADHERENT_FROST_FEVER = 24, - EVENT_ADHERENT_DEATHCHILL = 25, - EVENT_ADHERENT_CURSE_OF_TORPOR = 26, - EVENT_ADHERENT_SHORUD_OF_THE_OCCULT = 27, + EVENT_ADHERENT_FROST_FEVER = 23, + EVENT_ADHERENT_DEATHCHILL = 24, + EVENT_ADHERENT_CURSE_OF_TORPOR = 25, + EVENT_ADHERENT_SHORUD_OF_THE_OCCULT = 26, // Darnavan - EVENT_DARNAVAN_BLADESTORM = 28, - EVENT_DARNAVAN_CHARGE = 29, - EVENT_DARNAVAN_INTIMIDATING_SHOUT = 30, - EVENT_DARNAVAN_MORTAL_STRIKE = 31, - EVENT_DARNAVAN_SHATTERING_THROW = 32, - EVENT_DARNAVAN_SUNDER_ARMOR = 33, + EVENT_DARNAVAN_BLADESTORM = 27, + EVENT_DARNAVAN_CHARGE = 28, + EVENT_DARNAVAN_INTIMIDATING_SHOUT = 29, + EVENT_DARNAVAN_MORTAL_STRIKE = 30, + EVENT_DARNAVAN_SHATTERING_THROW = 31, + EVENT_DARNAVAN_SUNDER_ARMOR = 32, }; enum Phases @@ -181,6 +180,7 @@ enum DeprogrammingData #define QUEST_DEPROGRAMMING RAID_MODE(QUEST_DEPROGRAMMING_10, QUEST_DEPROGRAMMING_25, QUEST_DEPROGRAMMING_10, QUEST_DEPROGRAMMING_25) uint32 const SummonEntries[2] = {NPC_CULT_FANATIC, NPC_CULT_ADHERENT}; + #define GUID_CULTIST 1 Position const SummonPositions[7] = @@ -225,7 +225,6 @@ class boss_lady_deathwhisper : public CreatureScript { _Reset(); me->SetPower(POWER_MANA, me->GetMaxPower(POWER_MANA)); - me->SetLastManaUse(0xFFFFFFFF); // hacky, but no other way atm to prevent mana regen events.SetPhase(PHASE_ONE); _waveCounter = 0; _nextVengefulShadeTargetGUID = 0; @@ -239,9 +238,8 @@ class boss_lady_deathwhisper : public CreatureScript void MoveInLineOfSight(Unit* who) { - if (!_introDone && me->IsWithinDistInMap(who, 100.0f)) + if (!_introDone && me->IsWithinDistInMap(who, 110.0f)) { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); _introDone = true; Talk(SAY_INTRO_1); events.SetPhase(PHASE_INTRO); @@ -251,7 +249,6 @@ class boss_lady_deathwhisper : public CreatureScript events.ScheduleEvent(EVENT_INTRO_5, 39500, 0, PHASE_INTRO); events.ScheduleEvent(EVENT_INTRO_6, 48500, 0, PHASE_INTRO); events.ScheduleEvent(EVENT_INTRO_7, 58000, 0, PHASE_INTRO); - events.ScheduleEvent(EVENT_INTRO_FINISH, 76000, 0, PHASE_INTRO); } } @@ -437,9 +434,6 @@ class boss_lady_deathwhisper : public CreatureScript case EVENT_INTRO_7: Talk(SAY_INTRO_7); break; - case EVENT_INTRO_FINISH: - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - break; case EVENT_DEATH_AND_DECAY: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) DoCast(target, SPELL_DEATH_AND_DECAY); -- cgit v1.2.3 From 2b1039d0e1e78e85a19185208e125b2a2473778c Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 26 Jun 2011 11:45:29 +0200 Subject: Scripts/Icecrown Citadel * Removed spellmgr hacks for Boiling Blood * Removed obsolete effect from Resistant Skin causing them to lose the aura when hit by shadow spell --- sql/scripts/world_scripts_full.sql | 4 +++ .../2011_06_26_02_world_spell_script_names.sql | 6 ++++ src/server/game/Spells/SpellMgr.cpp | 9 ++--- .../IcecrownCitadel/boss_deathbringer_saurfang.cpp | 42 ++++++++++++++++++++-- 4 files changed, 52 insertions(+), 9 deletions(-) create mode 100644 sql/updates/world/2011_06_26_02_world_spell_script_names.sql (limited to 'src/server/scripts') diff --git a/sql/scripts/world_scripts_full.sql b/sql/scripts/world_scripts_full.sql index 9bb8c5ef740..45c971dd970 100644 --- a/sql/scripts/world_scripts_full.sql +++ b/sql/scripts/world_scripts_full.sql @@ -2048,6 +2048,10 @@ INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES ( 72440, 'spell_deathbringer_blood_nova'), ( 72378, 'spell_deathbringer_blood_nova_targeting'), ( 73058, 'spell_deathbringer_blood_nova_targeting'), +( 72385, 'spell_deathbringer_boiling_blood'), +( 72441, 'spell_deathbringer_boiling_blood'), +( 72442, 'spell_deathbringer_boiling_blood'), +( 72443, 'spell_deathbringer_boiling_blood'), ( 72155, 'spell_icc_harvest_blight_specimen'), ( 72162, 'spell_icc_harvest_blight_specimen'), ( 71123, 'spell_stinky_precious_decimate'), diff --git a/sql/updates/world/2011_06_26_02_world_spell_script_names.sql b/sql/updates/world/2011_06_26_02_world_spell_script_names.sql new file mode 100644 index 00000000000..cde210b091c --- /dev/null +++ b/sql/updates/world/2011_06_26_02_world_spell_script_names.sql @@ -0,0 +1,6 @@ +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_deathbringer_boiling_blood'; +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(72385,'spell_deathbringer_boiling_blood'), +(72441,'spell_deathbringer_boiling_blood'), +(72442,'spell_deathbringer_boiling_blood'), +(72443,'spell_deathbringer_boiling_blood'); diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index d6a447bd75f..2ba9ca36528 100755 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -4125,12 +4125,9 @@ void SpellMgr::LoadSpellCustomAttr() spellInfo->EffectRadiusIndex[0] = 12; // 100yd ++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; + case 72723: // Resistant Skin (Deathbringer Saurfang adds) + // this spell initially granted Shadow damage immunity, however it was removed but the data was left in client + spellInfo->Effect[2] = 0; ++count; break; case 70460: // Coldflame Jets (Traps after Saurfang) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp index 96bfb17e5d4..6fc60bdba09 100755 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp @@ -450,7 +450,7 @@ class boss_deathbringer_saurfang : public CreatureScript // select at range only Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, -10.0f, true); if (!target) - target = SelectTarget(SELECT_TARGET_RANDOM, 1, 10.0f, true); // noone? select melee + target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true); // noone? select melee if (target) DoCast(target, SPELL_BLOOD_NOVA_TRIGGER); events.ScheduleEvent(EVENT_BLOOD_NOVA, urand(20000, 25000), 0, PHASE_COMBAT); @@ -461,8 +461,7 @@ class boss_deathbringer_saurfang : public CreatureScript events.ScheduleEvent(EVENT_RUNE_OF_BLOOD, urand(20000, 25000), 0, PHASE_COMBAT); break; case EVENT_BOILING_BLOOD: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true, -BOILING_BLOOD_HELPER)) - DoCast(target, SPELL_BOILING_BLOOD); + DoCast(me, SPELL_BOILING_BLOOD); events.ScheduleEvent(EVENT_BOILING_BLOOD, urand(15000, 20000), 0, PHASE_COMBAT); break; case EVENT_BERSERK: @@ -1222,6 +1221,42 @@ class spell_deathbringer_blood_nova_targeting : public SpellScriptLoader } }; +class spell_deathbringer_boiling_blood : public SpellScriptLoader +{ + public: + spell_deathbringer_boiling_blood() : SpellScriptLoader("spell_deathbringer_boiling_blood") { } + + class spell_deathbringer_boiling_blood_SpellScript : public SpellScript + { + PrepareSpellScript(spell_deathbringer_boiling_blood_SpellScript); + + bool Load() + { + return GetCaster()->GetTypeId() == TYPEID_UNIT; + } + + void FilterTargets(std::list& unitList) + { + unitList.remove(GetCaster()->getVictim()); + std::list::iterator itr = unitList.begin(); + std::advance(itr, urand(0, unitList.size() - 1)); + Unit* target = *itr; + unitList.clear(); + unitList.push_back(target); + } + + void Register() + { + OnUnitTargetSelect += SpellUnitTargetFn(spell_deathbringer_boiling_blood_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_AREA_ENEMY_SRC); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_deathbringer_boiling_blood_SpellScript(); + } +}; + class achievement_ive_gone_and_made_a_mess : public AchievementCriteriaScript { public: @@ -1250,5 +1285,6 @@ void AddSC_boss_deathbringer_saurfang() new spell_deathbringer_rune_of_blood(); new spell_deathbringer_blood_nova(); new spell_deathbringer_blood_nova_targeting(); + new spell_deathbringer_boiling_blood(); new achievement_ive_gone_and_made_a_mess(); } -- cgit v1.2.3 From bcd62b8d298089313534de7b3280e34255c56742 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 26 Jun 2011 12:47:34 +0200 Subject: Scripts/Icecrown Citadel: Valithria Dreamwalker encounter should start when she is healed and fixed achievement credit Closes #2117 Closes #2058 --- src/server/game/Spells/SpellMgr.cpp | 3 ++- .../scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) (limited to 'src/server/scripts') diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 2ba9ca36528..0023cbf597e 100755 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -4189,8 +4189,9 @@ void SpellMgr::LoadSpellCustomAttr() spellInfo->EffectImplicitTargetB[0] = 0; ++count; break; + case 72706: // Achievement Check (Valithria Dreamwalker) case 71357: // Order Whelp - spellInfo->EffectRadiusIndex[0] = 22; + spellInfo->EffectRadiusIndex[0] = 22; // 200yd ++count; break; case 70598: // Sindragosa's Fury diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp index c95daa701e3..beeab1e72bd 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp @@ -355,6 +355,9 @@ class boss_valithria_dreamwalker : public CreatureScript _over75PercentTalkDone = true; Talk(SAY_VALITHRIA_75_PERCENT); } + else if (_instance->GetBossState(DATA_VALITHRIA_DREAMWALKER) == NOT_STARTED) + if (Creature* archmage = me->FindNearestCreature(NPC_RISEN_ARCHMAGE, 30.0f)) + archmage->AI()->DoZoneInCombat(); // call EnterCombat on one of them, that will make it all start } void DamageTaken(Unit* /*attacker*/, uint32& damage) -- cgit v1.2.3