mirror of
https://github.com/araxiaonline/TrinityCore.git
synced 2026-06-13 03:32:28 -04:00
[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
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -64,6 +64,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
|
||||
#####*/
|
||||
@@ -442,6 +457,11 @@ void AddSC_item_scripts()
|
||||
newscript->pItemUse = ItemUse_item_area_52_special;
|
||||
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;
|
||||
|
||||
@@ -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)
|
||||
switch(rand()%3)
|
||||
{
|
||||
case 0: DoPlaySoundToSet(m_creature, SOUND_SLAY1); break;
|
||||
case 1: DoPlaySoundToSet(m_creature, SOUND_SLAY2); break;
|
||||
case 2: DoPlaySoundToSet(m_creature, SOUND_SLAY3); break;
|
||||
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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
2
src/bindings/scripts/sql/Updates/r112_trinity.sql
Normal file
2
src/bindings/scripts/sql/Updates/r112_trinity.sql
Normal file
@@ -0,0 +1,2 @@
|
||||
UPDATE `item_template` SET `ScriptName`='item_arcane_charges' WHERE `entry`='34475';
|
||||
UPDATE gameobject_template SET faction = 14 WHERE entry = 185134;
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user