diff options
Diffstat (limited to 'src')
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(); |