aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bindings/scripts/ScriptMgr.cpp2
-rw-r--r--src/bindings/scripts/scripts/item/item_scripts.cpp20
-rw-r--r--src/bindings/scripts/scripts/zone/gruuls_lair/boss_high_king_maulgar.cpp118
-rw-r--r--src/bindings/scripts/scripts/zone/karazhan/boss_prince_malchezaar.cpp49
-rw-r--r--src/bindings/scripts/scripts/zone/magisters_terrace/boss_selin_fireheart.cpp10
-rw-r--r--src/bindings/scripts/sql/Updates/r112_trinity.sql2
-rw-r--r--src/game/SpellEffects.cpp10
7 files changed, 149 insertions, 62 deletions
diff --git a/src/bindings/scripts/ScriptMgr.cpp b/src/bindings/scripts/ScriptMgr.cpp
index 5502304c093..576581a249c 100644
--- a/src/bindings/scripts/ScriptMgr.cpp
+++ b/src/bindings/scripts/ScriptMgr.cpp
@@ -341,7 +341,6 @@ extern void AddSC_boss_maiden_of_virtue();
extern void AddSC_boss_shade_of_aran();
extern void AddSC_boss_malchezaar();
extern void AddSC_boss_terestian_illhoof();
-extern void AddSC_netherspite_infernal();
extern void AddSC_boss_moroes();
extern void AddSC_bosses_opera();
extern void AddSC_instance_karazhan();
@@ -1531,7 +1530,6 @@ void ScriptsInit()
AddSC_boss_shade_of_aran();
AddSC_boss_malchezaar();
AddSC_boss_terestian_illhoof();
- AddSC_netherspite_infernal();
AddSC_boss_moroes();
AddSC_bosses_opera();
AddSC_instance_karazhan();
diff --git a/src/bindings/scripts/scripts/item/item_scripts.cpp b/src/bindings/scripts/scripts/item/item_scripts.cpp
index 730f1aee52d..42ab5914262 100644
--- a/src/bindings/scripts/scripts/item/item_scripts.cpp
+++ b/src/bindings/scripts/scripts/item/item_scripts.cpp
@@ -65,6 +65,21 @@ bool ItemUse_item_area_52_special(Player *player, Item* _Item, SpellCastTargets
}
/*#####
+# item_arcane_charges
+#####*/
+
+bool ItemUse_item_arcane_charges(Player *player, Item* _Item, SpellCastTargets const& targets)
+{
+ // allow use in flight only
+ if( player->isInFlight() )
+ return false;
+
+ // error
+ player->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,_Item,NULL);
+ return true;
+}
+
+/*#####
# item_attuned_crystal_cores
#####*/
@@ -443,6 +458,11 @@ void AddSC_item_scripts()
m_scripts[nrscripts++] = newscript;
newscript = new Script;
+ newscript->Name="item_arcane_charges";
+ newscript->pItemUse = ItemUse_item_arcane_charges;
+ m_scripts[nrscripts++] = newscript;
+
+ newscript = new Script;
newscript->Name="item_attuned_crystal_cores";
newscript->pItemUse = ItemUse_item_attuned_crystal_cores;
m_scripts[nrscripts++] = newscript;
diff --git a/src/bindings/scripts/scripts/zone/gruuls_lair/boss_high_king_maulgar.cpp b/src/bindings/scripts/scripts/zone/gruuls_lair/boss_high_king_maulgar.cpp
index 00ff19dbb0b..acc6d03f1bb 100644
--- a/src/bindings/scripts/scripts/zone/gruuls_lair/boss_high_king_maulgar.cpp
+++ b/src/bindings/scripts/scripts/zone/gruuls_lair/boss_high_king_maulgar.cpp
@@ -25,40 +25,52 @@ EndScriptData */
#include "def_gruuls_lair.h"
//Sounds
-#define SOUND_AGGRO 11367 //"Gronn are the real power in outland."
-#define SOUND_ENRAGE 11368 //"You will not defeat the hand of Gruul!"
-#define SOUND_OGRE_DEATH1 11369 //"You won't kill next one so easy!"
-#define SOUND_OGRE_DEATH2 11370 //"Pah! Does not prove anything!"
-#define SOUND_OGRE_DEATH3 11371 //"I'm not afraid of you."
-#define SOUND_OGRE_DEATH4 11372 //"Good, now you fight me!"
-#define SOUND_SLAY1 11373 //"You not so tough afterall!"
-#define SOUND_SLAY2 11374 //"Aha ha ha ha!"
-#define SOUND_SLAY3 11375 //"Mulgar is king!"
-#define SOUND_DEATH 11376 //"Gruul ...will crush you..."
+#define SOUND_AGGRO 11367
+#define SOUND_ENRAGE 11368
+#define SOUND_OGRE_DEATH1 11369
+#define SOUND_OGRE_DEATH2 11370
+#define SOUND_OGRE_DEATH3 11371
+#define SOUND_OGRE_DEATH4 11372
+#define SOUND_SLAY1 11373
+#define SOUND_SLAY2 11374
+#define SOUND_SLAY3 11375
+#define SOUND_DEATH 11376
+
+//Yells
+#define SAY_AGGRO "Gronn are the real power in Outland!"
+#define SAY_ENRAGE "You will not defeat the Hand of Gruul!"
+#define SAY_OGRE_DEATH1 "You not kill next one so easy!"
+#define SAY_OGRE_DEATH2 "Does not mean anything!"
+#define SAY_OGRE_DEATH3 "I'm not afraid of you!"
+#define SAY_OGRE_DEATH4 "Good, now you fight me!"
+#define SAY_SLAY1 "You not so tough after all!"
+#define SAY_SLAY2 "Ahahahaha!"
+#define SAY_SLAY3 "Maulgar is king!"
+#define SAY_DEATH "Gruul will... crush you!"
// High King Maulgar
#define SPELL_ARCING_SMASH 39144
#define SPELL_MIGHTY_BLOW 33230
#define SPELL_WHIRLWIND 33238
-#define SPELL_BERSERKER_C 26561
-#define SPELL_ROAR 16508
-#define SPELL_FLURRY 33232
+#define SPELL_BERSERKER_C 26561
+#define SPELL_ROAR 16508
+#define SPELL_FLURRY 33232
// Olm the Summoner
#define SPELL_DARK_DECAY 33129
-#define SPELL_DEATH_COIL 33130
-#define SPELL_SUMMON_WFH 33131
+#define SPELL_DEATH_COIL 33130
+#define SPELL_SUMMON_WFH 33131
//Kiggler the Craed
-#define SPELL_GREATER_POLYMORPH 33173
-#define SPELL_LIGHTNING_BOLT 36152
-#define SPELL_ARCANE_SHOCK 33175
-#define SPELL_ARCANE_EXPLOSION 33237
+#define SPELL_GREATER_POLYMORPH 33173
+#define SPELL_LIGHTNING_BOLT 36152
+#define SPELL_ARCANE_SHOCK 33175
+#define SPELL_ARCANE_EXPLOSION 33237
//Blindeye the Seer
-#define SPELL_GREATER_PW_SHIELD 33147
-#define SPELL_HEAL 33144
-#define SPELL_PRAYER_OH 33152
+#define SPELL_GREATER_PW_SHIELD 33147
+#define SPELL_HEAL 33144
+#define SPELL_PRAYER_OH 33152
//Krosh Firehand
#define SPELL_GREATER_FIREBALL 33051
@@ -82,7 +94,7 @@ struct TRINITY_DLL_DECL boss_high_king_maulgarAI : public ScriptedAI
uint32 MightyBlow_Timer;
uint32 Whirlwind_Timer;
uint32 Charging_Timer;
- uint32 Roar_Timer;
+ uint32 Roar_Timer;
bool Phase2;
@@ -119,18 +131,28 @@ struct TRINITY_DLL_DECL boss_high_king_maulgarAI : public ScriptedAI
void KilledUnit()
{
- switch(rand()%2)
- {
- case 0: DoPlaySoundToSet(m_creature, SOUND_SLAY1); break;
- case 1: DoPlaySoundToSet(m_creature, SOUND_SLAY2); break;
- case 2: DoPlaySoundToSet(m_creature, SOUND_SLAY3); break;
+ switch(rand()%3)
+ {
+ case 0:
+ DoYell(SAY_SLAY1, LANG_UNIVERSAL, NULL);
+ DoPlaySoundToSet(m_creature, SOUND_SLAY1);
+ break;
+ case 1:
+ DoYell(SAY_SLAY2, LANG_UNIVERSAL, NULL);
+ DoPlaySoundToSet(m_creature, SOUND_SLAY2);
+ break;
+ case 2:
+ DoYell(SAY_SLAY3, LANG_UNIVERSAL, NULL);
+ DoPlaySoundToSet(m_creature, SOUND_SLAY3);
+ break;
}
}
void JustDied(Unit* Killer)
{
DoPlaySoundToSet(m_creature, SOUND_DEATH);
-
+ DoYell(SAY_DEATH, LANG_UNIVERSAL, NULL);
+
if (pInstance)
{
pInstance->SetData(DATA_MAULGAREVENT, DONE);
@@ -144,13 +166,25 @@ struct TRINITY_DLL_DECL boss_high_king_maulgarAI : public ScriptedAI
void AddDeath()
{
- switch(rand()%3)
- {
- case 0: DoPlaySoundToSet(m_creature, SOUND_OGRE_DEATH1);break;
- case 1: DoPlaySoundToSet(m_creature, SOUND_OGRE_DEATH2);break;
- case 2: DoPlaySoundToSet(m_creature, SOUND_OGRE_DEATH3);break;
- case 3: DoPlaySoundToSet(m_creature, SOUND_OGRE_DEATH4);break;
- }
+ switch(rand()%4)
+ {
+ case 0:
+ DoYell(SAY_OGRE_DEATH1, LANG_UNIVERSAL, NULL);
+ DoPlaySoundToSet(m_creature, SOUND_OGRE_DEATH1);
+ break;
+ case 1:
+ DoYell(SAY_OGRE_DEATH2, LANG_UNIVERSAL, NULL);
+ DoPlaySoundToSet(m_creature, SOUND_OGRE_DEATH2);
+ break;
+ case 2:
+ DoYell(SAY_OGRE_DEATH3, LANG_UNIVERSAL, NULL);
+ DoPlaySoundToSet(m_creature, SOUND_OGRE_DEATH3);
+ break;
+ case 3:
+ DoYell(SAY_OGRE_DEATH4, LANG_UNIVERSAL, NULL);
+ DoPlaySoundToSet(m_creature, SOUND_OGRE_DEATH4);
+ break;
+ }
}
@@ -173,7 +207,8 @@ struct TRINITY_DLL_DECL boss_high_king_maulgarAI : public ScriptedAI
GetCouncil();
DoPlaySoundToSet(m_creature, SOUND_AGGRO);
-
+ DoYell(SAY_AGGRO, LANG_UNIVERSAL, NULL);
+
pInstance->SetData64(DATA_MAULGAREVENT_TANK, who->GetGUID());
pInstance->SetData(DATA_MAULGAREVENT, IN_PROGRESS);
@@ -231,10 +266,11 @@ struct TRINITY_DLL_DECL boss_high_king_maulgarAI : public ScriptedAI
{
Phase2 = true;
DoPlaySoundToSet(m_creature, SOUND_ENRAGE);
- DoCast(m_creature, SPELL_FLURRY);
-
- m_creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_DISPLAY, 0);
- m_creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_DISPLAY+1, 0);
+ DoYell(SAY_ENRAGE, LANG_UNIVERSAL, NULL);
+ DoCast(m_creature, SPELL_FLURRY);
+
+ m_creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_DISPLAY, 0);
+ m_creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_DISPLAY+1, 0);
}
if(Phase2)
diff --git a/src/bindings/scripts/scripts/zone/karazhan/boss_prince_malchezaar.cpp b/src/bindings/scripts/scripts/zone/karazhan/boss_prince_malchezaar.cpp
index 6b23c365a2e..16c96210232 100644
--- a/src/bindings/scripts/scripts/zone/karazhan/boss_prince_malchezaar.cpp
+++ b/src/bindings/scripts/scripts/zone/karazhan/boss_prince_malchezaar.cpp
@@ -22,6 +22,7 @@ SDCategory: Karazhan
EndScriptData */
#include "precompiled.h"
+#include "def_karazhan.h"
#define SAY_AGGRO "Madness has brought you here to me. I shall be your undoing!"
#define SOUND_AGGRO 9218
@@ -161,8 +162,13 @@ struct TRINITY_DLL_DECL netherspite_infernalAI : public ScriptedAI
struct TRINITY_DLL_DECL boss_malchezaarAI : public ScriptedAI
{
- boss_malchezaarAI(Creature *c) : ScriptedAI(c) {Reset();}
+ boss_malchezaarAI(Creature *c) : ScriptedAI(c)
+ {
+ pInstance = ((ScriptedInstance*)c->GetInstanceData());
+ Reset();
+ }
+ ScriptedInstance *pInstance;
uint32 EnfeebleTimer;
uint32 EnfeebleResetTimer;
uint32 ShadowNovaTimer;
@@ -204,6 +210,15 @@ struct TRINITY_DLL_DECL boss_malchezaarAI : public ScriptedAI
InfernalCleanupTimer = 47000;
AxesTargetSwitchTimer = 7500 + rand()%12500;
phase = 1;
+
+ if(pInstance)
+ {
+ GameObject* Door = GameObject::GetGameObject((*m_creature),pInstance->GetData64(DATA_GAMEOBJECT_NETHER_DOOR));
+ if(Door)
+ {
+ Door->SetGoState(0);
+ }
+ }
}
void KilledUnit(Unit *victim)
@@ -237,12 +252,30 @@ struct TRINITY_DLL_DECL boss_malchezaarAI : public ScriptedAI
for(int i = 0; i < TOTAL_INFERNAL_POINTS; ++i)
positions.push_back(&InfernalPoints[i]);
+
+ if(pInstance)
+ {
+ GameObject* Door = GameObject::GetGameObject((*m_creature),pInstance->GetData64(DATA_GAMEOBJECT_NETHER_DOOR));
+ if(Door)
+ {
+ Door->SetGoState(0);
+ }
+ }
}
void Aggro(Unit *who)
{
DoYell(SAY_AGGRO, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature, SOUND_AGGRO);
+
+ if(pInstance)
+ {
+ GameObject* Door = GameObject::GetGameObject((*m_creature),pInstance->GetData64(DATA_GAMEOBJECT_NETHER_DOOR));
+ if(Door)
+ {
+ Door->SetGoState(1);
+ }
+ }
}
void InfernalCleanup()
@@ -627,15 +660,6 @@ CreatureAI* GetAI_boss_malchezaar(Creature *_Creature)
return new boss_malchezaarAI (_Creature);
}
-void AddSC_netherspite_infernal()
-{
- Script *newscript;
- newscript = new Script;
- newscript->Name="netherspite_infernal";
- newscript->GetAI = GetAI_netherspite_infernal;
- m_scripts[nrscripts++] = newscript;
-}
-
void AddSC_boss_malchezaar()
{
Script *newscript;
@@ -643,4 +667,9 @@ void AddSC_boss_malchezaar()
newscript->Name="boss_malchezaar";
newscript->GetAI = GetAI_boss_malchezaar;
m_scripts[nrscripts++] = newscript;
+
+ newscript = new Script;
+ newscript->Name="netherspite_infernal";
+ newscript->GetAI = GetAI_netherspite_infernal;
+ m_scripts[nrscripts++] = newscript;
}
diff --git a/src/bindings/scripts/scripts/zone/magisters_terrace/boss_selin_fireheart.cpp b/src/bindings/scripts/scripts/zone/magisters_terrace/boss_selin_fireheart.cpp
index 349c5521cac..c1d0743637f 100644
--- a/src/bindings/scripts/scripts/zone/magisters_terrace/boss_selin_fireheart.cpp
+++ b/src/bindings/scripts/scripts/zone/magisters_terrace/boss_selin_fireheart.cpp
@@ -286,8 +286,12 @@ struct TRINITY_DLL_DECL boss_selin_fireheartAI : public ScriptedAI
{
if( DrainManaTimer < diff )
{
- DoCast(SelectUnit(SELECT_TARGET_RANDOM, 0), SPELL_DRAIN_MANA);
- DrainManaTimer = 10000;
+ Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0);
+ if( target->getPowerType() == POWER_MANA)
+ {
+ DoCast(target, SPELL_DRAIN_MANA);
+ DrainManaTimer = 10000;
+ }
}else DrainManaTimer -= diff;
}
}
@@ -366,7 +370,7 @@ struct TRINITY_DLL_DECL mob_fel_crystalAI : public ScriptedAI
{
if(((boss_selin_fireheartAI*)Selin->AI())->CrystalGUID == m_creature->GetGUID())
{
- // Set this to false if we are the creature that Selin is draining so his AI flows properly
+ Selin->RemoveAurasDueToSpell(SPELL_MANA_RAGE);
((boss_selin_fireheartAI*)Selin->AI())->DrainingCrystal = false;
((boss_selin_fireheartAI*)Selin->AI())->IsDraining = false;
((boss_selin_fireheartAI*)Selin->AI())->EmpowerTimer = 10000;
diff --git a/src/bindings/scripts/sql/Updates/r112_trinity.sql b/src/bindings/scripts/sql/Updates/r112_trinity.sql
new file mode 100644
index 00000000000..2d2412c395b
--- /dev/null
+++ b/src/bindings/scripts/sql/Updates/r112_trinity.sql
@@ -0,0 +1,2 @@
+UPDATE `item_template` SET `ScriptName`='item_arcane_charges' WHERE `entry`='34475';
+UPDATE gameobject_template SET faction = 14 WHERE entry = 185134; \ No newline at end of file
diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp
index 0e47d969975..2807b2602ee 100644
--- a/src/game/SpellEffects.cpp
+++ b/src/game/SpellEffects.cpp
@@ -1771,12 +1771,10 @@ void Spell::EffectTriggerSpell(uint32 i)
for(Unit::AuraMap::iterator iter = Auras.begin(); iter != Auras.end(); ++iter)
{
// remove all harmful spells on you...
- if( // ignore positive and passive auras
- !iter->second->IsPositive() && !iter->second->IsPassive() &&
- // only affect magic spells
- iter->second->GetSpellProto()->DmgClass == SPELL_DAMAGE_CLASS_MAGIC &&
- // ignore immunity persistent spells
- !( iter->second->GetSpellProto()->AttributesEx & 0x10000 ) )
+ if(// only affect magic spells
+ iter->second->GetSpellProto()->DmgClass == SPELL_DAMAGE_CLASS_MAGIC
+ // ignore positive and passive auras
+ && !iter->second->IsPositive() && !iter->second->IsPassive())
{
m_caster->RemoveAurasDueToSpell(iter->second->GetSpellProto()->Id);
iter = Auras.begin();