aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Instances/InstanceScript.cpp67
-rw-r--r--src/server/game/Instances/InstanceScript.h4
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp4
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_amanitar.cpp4
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp6
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp3
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp4
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp2
10 files changed, 67 insertions, 31 deletions
diff --git a/src/server/game/Instances/InstanceScript.cpp b/src/server/game/Instances/InstanceScript.cpp
index d24efa8deeb..1e8458987bc 100644
--- a/src/server/game/Instances/InstanceScript.cpp
+++ b/src/server/game/Instances/InstanceScript.cpp
@@ -616,33 +616,68 @@ void InstanceScript::DoStopTimedAchievement(AchievementCriteriaTimedTypes type,
player->RemoveTimedAchievement(type, entry);
}
-// Remove Auras due to Spell on all players in instance
-void InstanceScript::DoRemoveAurasDueToSpellOnPlayers(uint32 spell)
+void InstanceScript::DoRemoveAurasDueToSpellOnPlayers(uint32 spell, bool includePets /*= false*/, bool includeControlled /*= false*/)
{
- Map::PlayerList const& PlayerList = instance->GetPlayers();
- if (!PlayerList.isEmpty())
+ Map::PlayerList const& playerList = instance->GetPlayers();
+ for (auto itr = playerList.begin(); itr != playerList.end(); ++itr)
{
- for (Map::PlayerList::const_iterator itr = PlayerList.begin(); itr != PlayerList.end(); ++itr)
+ if (Player* player = itr->GetSource())
{
- if (Player* player = itr->GetSource())
+ player->RemoveAurasDueToSpell(spell);
+
+ if (!includePets)
+ continue;
+
+ for (uint8 itr2 = 0; itr2 < MAX_SUMMON_SLOT; ++itr2)
+ {
+ if (ObjectGuid summonGUID = player->m_SummonSlot[itr2])
+ if (Creature* summon = instance->GetCreature(summonGUID))
+ summon->RemoveAurasDueToSpell(spell);
+ }
+
+ if (!includeControlled)
+ continue;
+
+ for (auto itr2 = player->m_Controlled.begin(); itr2 != player->m_Controlled.end(); ++itr2)
{
- player->RemoveAurasDueToSpell(spell);
- if (Pet* pet = player->GetPet())
- pet->RemoveAurasDueToSpell(spell);
+ if (Unit* controlled = *itr2)
+ if (controlled->IsInWorld() && controlled->GetTypeId() == TYPEID_UNIT)
+ controlled->RemoveAurasDueToSpell(spell);
}
}
}
}
-// Cast spell on all players in instance
-void InstanceScript::DoCastSpellOnPlayers(uint32 spell)
+void InstanceScript::DoCastSpellOnPlayers(uint32 spell, bool includePets /*= false*/, bool includeControlled /*= false*/)
{
- Map::PlayerList const& PlayerList = instance->GetPlayers();
+ Map::PlayerList const& playerList = instance->GetPlayers();
+ for (auto itr = playerList.begin(); itr != playerList.end(); ++itr)
+ {
+ if (Player* player = itr->GetSource())
+ {
+ player->CastSpell(player, spell, true);
- if (!PlayerList.isEmpty())
- for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
- if (Player* player = i->GetSource())
- player->CastSpell(player, spell, true);
+ if (!includePets)
+ continue;
+
+ for (uint8 itr2 = 0; itr2 < MAX_SUMMON_SLOT; ++itr2)
+ {
+ if (ObjectGuid summonGUID = player->m_SummonSlot[itr2])
+ if (Creature* summon = instance->GetCreature(summonGUID))
+ summon->CastSpell(player, spell, true);
+ }
+
+ if (!includeControlled)
+ continue;
+
+ for (auto itr2 = player->m_Controlled.begin(); itr2 != player->m_Controlled.end(); ++itr2)
+ {
+ if (Unit* controlled = *itr2)
+ if (controlled->IsInWorld() && controlled->GetTypeId() == TYPEID_UNIT)
+ controlled->CastSpell(player, spell, true);
+ }
+ }
+ }
}
bool InstanceScript::ServerAllowsTwoSideGroups()
diff --git a/src/server/game/Instances/InstanceScript.h b/src/server/game/Instances/InstanceScript.h
index 6fd35f7c556..bb830183132 100644
--- a/src/server/game/Instances/InstanceScript.h
+++ b/src/server/game/Instances/InstanceScript.h
@@ -225,10 +225,10 @@ class TC_GAME_API InstanceScript : public ZoneScript
void DoStopTimedAchievement(AchievementCriteriaTimedTypes type, uint32 entry);
// Remove Auras due to Spell on all players in instance
- void DoRemoveAurasDueToSpellOnPlayers(uint32 spell);
+ void DoRemoveAurasDueToSpellOnPlayers(uint32 spell, bool includePets = false, bool includeControlled = false);
// Cast spell on all players in instance
- void DoCastSpellOnPlayers(uint32 spell);
+ void DoCastSpellOnPlayers(uint32 spell, bool includePets = false, bool includeControlled = false);
// Return wether server allow two side groups or not
static bool ServerAllowsTwoSideGroups();
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp
index 674763623ca..e7258b36b46 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp
@@ -211,7 +211,7 @@ public:
{
SetData(DATA_EGG_EVENT, DONE);
razor->RemoveAurasDueToSpell(42013); // MindControl
- DoRemoveAurasDueToSpellOnPlayers(42013);
+ DoRemoveAurasDueToSpellOnPlayers(42013, true, true);
}
_events.ScheduleEvent(EVENT_RAZOR_PHASE_TWO, 1s);
_events.CancelEvent(EVENT_RAZOR_SPAWN);
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp
index 87038ebde0a..30fb186c590 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp
@@ -167,7 +167,7 @@ struct boss_kalecgos : public BossAI
_EnterEvadeMode();
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
- instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_SPECTRAL_REALM_AURA);
+ instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_SPECTRAL_REALM_AURA, true, true);
summons.DespawnAll();
DespawnPortals();
@@ -504,7 +504,7 @@ struct boss_sathrovarr : public BossAI
{
_JustDied();
Talk(SAY_SATH_DEATH);
- instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_SPECTRAL_REALM_AURA);
+ instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_SPECTRAL_REALM_AURA, true, true);
if (Creature* kalecgos = instance->GetCreature(DATA_KALECGOS_DRAGON))
kalecgos->AI()->DoAction(ACTION_START_OUTRO);
}
diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_amanitar.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_amanitar.cpp
index 26c8702bb57..22f3b476f0a 100644
--- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_amanitar.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_amanitar.cpp
@@ -104,7 +104,7 @@ struct boss_amanitar : public BossAI
{
_EnterEvadeMode();
summons.DespawnAll();
- instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_MINI);
+ instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_MINI, true, true);
_DespawnAtEvade();
}
@@ -112,7 +112,7 @@ struct boss_amanitar : public BossAI
{
_JustDied();
DoCastAOE(SPELL_REMOVE_MUSHROOM_POWER);
- instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_MINI);
+ instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_MINI, true, true);
}
void JustSummoned(Creature* summon) override
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp
index bd4e93e2869..a1590f8351c 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp
@@ -756,9 +756,9 @@ class npc_acolyte_of_vesperon : public CreatureScript
i->GetSource()->RemoveAurasDueToSpell(SPELL_TWILIGHT_TORMENT_VESP);
}
- instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_TWILIGHT_TORMENT_VESP_ACO);
- instance->DoRemoveAurasDueToSpellOnPlayers(57935);
- instance->DoRemoveAurasDueToSpellOnPlayers(58835); // Components of spell Twilight Torment
+ instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_TWILIGHT_TORMENT_VESP_ACO, true, true);
+ instance->DoRemoveAurasDueToSpellOnPlayers(57935, true, true);
+ instance->DoRemoveAurasDueToSpellOnPlayers(58835, true, true); // Components of spell Twilight Torment
}
void UpdateAI(uint32 /*diff*/) override
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
index 99340630b99..24f30d24ba8 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
@@ -70,6 +70,7 @@ enum Spells
SPELL_MALLEABLE_GOO = 70852,
SPELL_UNSTABLE_EXPERIMENT = 70351,
SPELL_TEAR_GAS = 71617, // phase transition
+ SPELL_TEAR_GAS_TRIGGER_MISSILE = 71615,
SPELL_TEAR_GAS_CREATURE = 71618,
SPELL_TEAR_GAS_CANCEL = 71620,
SPELL_TEAR_GAS_PERIODIC_TRIGGER = 73170,
@@ -626,7 +627,7 @@ class boss_professor_putricide : public CreatureScript
AttackStart(me->GetVictim());
// remove Tear Gas
me->RemoveAurasDueToSpell(SPELL_TEAR_GAS_PERIODIC_TRIGGER);
- instance->DoRemoveAurasDueToSpellOnPlayers(71615);
+ instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_TEAR_GAS_TRIGGER_MISSILE, true, true);
DoCastAOE(SPELL_TEAR_GAS_CANCEL);
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_GAS_VARIABLE);
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_OOZE_VARIABLE);
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp
index cf26b6a3904..2824e9d6508 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp
@@ -155,7 +155,7 @@ class boss_sapphiron : public CreatureScript
{
if (events.IsInPhase(PHASE_FLIGHT))
{
- instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_ICEBOLT);
+ instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_ICEBOLT, true, true);
me->SetReactState(REACT_AGGRESSIVE);
if (me->IsHovering())
{
@@ -379,7 +379,7 @@ class boss_sapphiron : public CreatureScript
case EVENT_EXPLOSION:
DoCastAOE(SPELL_FROST_BREATH);
DoCastAOE(SPELL_FROST_BREATH_ANTICHEAT);
- instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_ICEBOLT);
+ instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_ICEBOLT, true, true);
events.ScheduleEvent(EVENT_LAND, Seconds(3) + Milliseconds(500), 0, PHASE_FLIGHT);
return;
case EVENT_LAND:
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp
index 0a57712aa69..603f8bbde1a 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp
@@ -117,7 +117,7 @@ public:
{
Talk(SAY_DEATH);
_JustDied();
- instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_PULSING_SHOCKWAVE_AURA);
+ instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_PULSING_SHOCKWAVE_AURA, true, true);
}
void KilledUnit(Unit* who) override
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp
index 0fc748c628f..82d055784e1 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp
@@ -235,7 +235,7 @@ class boss_general_vezax : public CreatureScript
{
_JustDied();
Talk(SAY_DEATH);
- instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_AURA_OF_DESPAIR);
+ instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_AURA_OF_DESPAIR, true, true);
}
void CheckShamanisticRage()