diff options
author | megamage <none@none> | 2008-10-23 22:04:14 -0500 |
---|---|---|
committer | megamage <none@none> | 2008-10-23 22:04:14 -0500 |
commit | 277334fc41d3c424d9a92c257bb6c80f7592f968 (patch) | |
tree | 1b232087c5ff0e528382e52b1a53f88e00859b8b /src | |
parent | 0f32ffb90ed4d0fe8ecd00451bb282c38f2164fe (diff) |
[svn] Fix cloak of shadow, can remove fairy fire now.
Add yells to High King Maulgar. Patch provided by riddick.
Script for Prince Malchezaar Doors. Patch provided by BroodWyrm.
Bug fix for Selin Fireheart. Patch provided by BroodWyrm.
Arcane Charges only while on flightpath. Patch provided by SLG.
--HG--
branch : trunk
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(); |