--HG--
branch : trunk
This commit is contained in:
Drahy
2009-02-05 19:44:24 +01:00
17 changed files with 253 additions and 29 deletions
+1
View File
@@ -0,0 +1 @@
UPDATE `gameobject_template` SET `ScriptName` = 'go_legion_obelisk' WHERE `entry` = 185193;␍UPDATE `gameobject_template` SET `ScriptName` = 'go_legion_obelisk' WHERE `entry` = 185195;␍UPDATE `gameobject_template` SET `ScriptName` = 'go_legion_obelisk' WHERE `entry` = 185196;␍UPDATE `gameobject_template` SET `ScriptName` = 'go_legion_obelisk' WHERE `entry` = 185197;␍UPDATE `gameobject_template` SET `ScriptName` = 'go_legion_obelisk' WHERE `entry` = 185198;
+2
View File
@@ -0,0 +1,2 @@
UPDATE creature_template SET ScriptName='npc_surristrasz' WHERE entry=24795;
UPDATE creature_template SET ScriptName='npc_tiare' WHERE entry=30051;
+1
View File
@@ -106,6 +106,7 @@ SET(trinityscript_LIB_SRCS
scripts/zone/blasted_lands/blasted_lands.cpp scripts/zone/blasted_lands/blasted_lands.cpp
scripts/zone/blasted_lands/boss_kruul.cpp scripts/zone/blasted_lands/boss_kruul.cpp
scripts/zone/bloodmyst_isle/bloodmyst_isle.cpp scripts/zone/bloodmyst_isle/bloodmyst_isle.cpp
scripts/zone/borean_tundra/borean_tundra.cpp
scripts/zone/burning_steppes/burning_steppes.cpp scripts/zone/burning_steppes/burning_steppes.cpp
scripts/zone/caverns_of_time/dark_portal/def_dark_portal.h scripts/zone/caverns_of_time/dark_portal/def_dark_portal.h
scripts/zone/caverns_of_time/dark_portal/instance_dark_portal.cpp scripts/zone/caverns_of_time/dark_portal/instance_dark_portal.cpp
+1
View File
@@ -140,6 +140,7 @@ scripts/zone/blades_edge_mountains/blades_edge_mountains.cpp \
scripts/zone/blasted_lands/blasted_lands.cpp \ scripts/zone/blasted_lands/blasted_lands.cpp \
scripts/zone/blasted_lands/boss_kruul.cpp \ scripts/zone/blasted_lands/boss_kruul.cpp \
scripts/zone/bloodmyst_isle/bloodmyst_isle.cpp \ scripts/zone/bloodmyst_isle/bloodmyst_isle.cpp \
scripts/zone/borean_tundra/borean_tundra.cpp \
scripts/zone/burning_steppes/burning_steppes.cpp \ scripts/zone/burning_steppes/burning_steppes.cpp \
scripts/zone/caverns_of_time/dark_portal/boss_aeonus.cpp \ scripts/zone/caverns_of_time/dark_portal/boss_aeonus.cpp \
scripts/zone/caverns_of_time/dark_portal/boss_chrono_lord_deja.cpp \ scripts/zone/caverns_of_time/dark_portal/boss_chrono_lord_deja.cpp \
+6
View File
@@ -209,6 +209,9 @@ extern void AddSC_blasted_lands();
//Bloodmyst Isle //Bloodmyst Isle
extern void AddSC_bloodmyst_isle(); extern void AddSC_bloodmyst_isle();
//Borean Tundra
extern void AddSC_borean_tundra();
//Burning steppes //Burning steppes
extern void AddSC_burning_steppes(); extern void AddSC_burning_steppes();
@@ -1415,6 +1418,9 @@ void ScriptsInit()
//Bloodmyst Isle //Bloodmyst Isle
AddSC_bloodmyst_isle(); AddSC_bloodmyst_isle();
//Borean Tundra
AddSC_borean_tundra();
//Burning steppes //Burning steppes
AddSC_burning_steppes(); AddSC_burning_steppes();
@@ -1970,7 +1970,10 @@
</File> </File>
</Filter> </Filter>
<Filter <Filter
Name="Borean Tundra"> Name="Borean Tundra">
<File
RelativePath="..\scripts\zone\borean_tundra\borean_tundra.cpp"
>
</Filter> </Filter>
<Filter <Filter
Name="Howling Fjord"> Name="Howling Fjord">
@@ -1080,6 +1080,9 @@
</Filter> </Filter>
<Filter <Filter
Name="Borean Tundra"> Name="Borean Tundra">
<File
RelativePath="..\scripts\zone\borean_tundra\borean_tundra.cpp"
>
</Filter> </Filter>
<Filter <Filter
Name="Howling Fjord"> Name="Howling Fjord">
@@ -750,6 +750,10 @@
<Filter <Filter
Name="Borean Tundra" Name="Borean Tundra"
> >
<File
RelativePath="..\scripts\zone\borean_tundra\borean_tundra.cpp"
>
</File>
</Filter> </Filter>
<Filter <Filter
Name="Howling Fjord" Name="Howling Fjord"
@@ -17,7 +17,7 @@
/* ScriptData /* ScriptData
SDName: Blades_Edge_Mountains SDName: Blades_Edge_Mountains
SD%Complete: 90 SD%Complete: 90
SDComment: Quest support: 10503, 10504, 10556, 10609, 10682, 10980. Ogri'la->Skettis Flight. (npc_daranelle needs bit more work before consider complete) SDComment: Quest support: 10503, 10504, 10556, 10609, 10682, 10821, 10980. Ogri'la->Skettis Flight. (npc_daranelle needs bit more work before consider complete)
SDCategory: Blade's Edge Mountains SDCategory: Blade's Edge Mountains
EndScriptData */ EndScriptData */
@@ -28,10 +28,20 @@ npc_daranelle
npc_overseer_nuaar npc_overseer_nuaar
npc_saikkal_the_elder npc_saikkal_the_elder
npc_skyguard_handler_irena npc_skyguard_handler_irena
go_legion_obelisk
EndContentData */ EndContentData */
#include "precompiled.h" #include "precompiled.h"
//Support for quest: You're Fired! (10821)
bool obelisk_one, obelisk_two, obelisk_three, obelisk_four, obelisk_five;
#define LEGION_OBELISK_ONE 185193
#define LEGION_OBELISK_TWO 185195
#define LEGION_OBELISK_THREE 185196
#define LEGION_OBELISK_FOUR 185197
#define LEGION_OBELISK_FIVE 185198
/*###### /*######
## mobs_bladespire_ogre ## mobs_bladespire_ogre
######*/ ######*/
@@ -391,6 +401,48 @@ bool GossipSelect_npc_skyguard_handler_irena(Player *player, Creature *_Creature
return true; return true;
} }
/*######
## go_legion_obelisk
######*/
bool GOHello_go_legion_obelisk(Player *player, GameObject* _GO)
{
if ( player->GetQuestStatus(10821) == QUEST_STATUS_INCOMPLETE )
{
switch( _GO->GetEntry() )
{
case LEGION_OBELISK_ONE:
obelisk_one = true;
break;
case LEGION_OBELISK_TWO:
obelisk_two = true;
break;
case LEGION_OBELISK_THREE:
obelisk_three = true;
break;
case LEGION_OBELISK_FOUR:
obelisk_four = true;
break;
case LEGION_OBELISK_FIVE:
obelisk_five = true;
break;
}
if ( obelisk_one == true && obelisk_two == true && obelisk_three == true && obelisk_four == true && obelisk_five == true )
{
_GO->SummonCreature(19963,2943.40f,4778.20f,284.49f,0.94f,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,120000);
//reset global var
obelisk_one = false;
obelisk_two = false;
obelisk_three = false;
obelisk_four = false;
obelisk_five = false;
}
}
return true;
}
/*###### /*######
## AddSC ## AddSC
######*/ ######*/
@@ -425,6 +477,11 @@ void AddSC_blades_edge_mountains()
newscript->pGossipHello = &GossipHello_npc_saikkal_the_elder; newscript->pGossipHello = &GossipHello_npc_saikkal_the_elder;
newscript->pGossipSelect = &GossipSelect_npc_saikkal_the_elder; newscript->pGossipSelect = &GossipSelect_npc_saikkal_the_elder;
newscript->RegisterSelf(); newscript->RegisterSelf();
newscript = new Script;
newscript->Name="go_legion_obelisk";
newscript->pGOHello = &GOHello_go_legion_obelisk;
newscript->RegisterSelf();
newscript = new Script; newscript = new Script;
newscript->Name="npc_skyguard_handler_irena"; newscript->Name="npc_skyguard_handler_irena";
@@ -1,4 +1,4 @@
/* Copyright (C) 2006 - 2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/> /* Copyright (C) 2006 - 2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or * the Free Software Foundation; either version 2 of the License, or
@@ -0,0 +1,105 @@
/* Copyright (C) 2006 - 2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/* ScriptData
SDName: Borean_Tundra
SD%Complete: 100
SDComment:
SDCategory: Borean Tundra
EndScriptData */
/* ContentData
npc_tiare
npc_surristrasz
EndContentData */
#include "precompiled.h"
/*######
## npc_tiare
######*/
#define GOSSIP_ITEM_TELEPORT "Teleport me to Amber Ledge, please."
bool GossipHello_npc_tiare(Player *player, Creature *_Creature)
{
player->ADD_GOSSIP_ITEM(0, GOSSIP_ITEM_TELEPORT, GOSSIP_SENDER_MAIN, GOSSIP_OPTION_GOSSIP);
player->SEND_GOSSIP_MENU(_Creature->GetNpcTextId(), _Creature->GetGUID());
return true;
}
bool GossipSelect_npc_tiare(Player *player, Creature *_Creature, uint32 sender, uint32 action)
{
if (action == GOSSIP_OPTION_GOSSIP)
{
player->CLOSE_GOSSIP_MENU();
player->CastSpell(player,50135,true);
}
return true;
}
/*######
## npc_surristrasz
######*/
#define GOSSIP_ITEM_FREE_FLIGHT "I'd like passage to the Transitus Shield."
#define GOSSIP_ITEM_FLIGHT "May I use a drake to fly elsewhere?"
bool GossipHello_npc_surristrasz(Player *player, Creature *_Creature)
{
if (_Creature->isQuestGiver())
player->PrepareQuestMenu(_Creature->GetGUID());
if (_Creature->isTaxi())
{
player->ADD_GOSSIP_ITEM(0, GOSSIP_ITEM_FREE_FLIGHT, GOSSIP_SENDER_MAIN, GOSSIP_OPTION_GOSSIP);
player->ADD_GOSSIP_ITEM(2, GOSSIP_ITEM_FLIGHT, GOSSIP_SENDER_MAIN, GOSSIP_OPTION_TAXIVENDOR);
}
player->SEND_GOSSIP_MENU(_Creature->GetNpcTextId(), _Creature->GetGUID());
return true;
}
bool GossipSelect_npc_surristrasz(Player *player, Creature *_Creature, uint32 sender, uint32 action)
{
if (action == GOSSIP_OPTION_GOSSIP)
{
player->CLOSE_GOSSIP_MENU();
player->CastSpell(player,46064,true); //TaxiPath 795 (amber to coldarra)
}
if (action == GOSSIP_OPTION_TAXIVENDOR)
{
player->GetSession()->SendTaxiMenu(_Creature);
}
return true;
}
void AddSC_borean_tundra()
{
Script *newscript;
newscript = new Script;
newscript->Name = "npc_tiare";
newscript->pGossipHello = &GossipHello_npc_tiare;
newscript->pGossipSelect = &GossipSelect_npc_tiare;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "npc_surristrasz";
newscript->pGossipHello = &GossipHello_npc_surristrasz;
newscript->pGossipSelect = &GossipSelect_npc_surristrasz;
newscript->RegisterSelf();
}
+1 -1
View File
@@ -2491,7 +2491,7 @@ void Player::InitStatsForLevel(bool reapplyMods)
SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE ); // must be set SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE ); // must be set
// cleanup player flags (will be re-applied if need at aura load), to avoid have ghost flag without ghost aura, for example. // cleanup player flags (will be re-applied if need at aura load), to avoid have ghost flag without ghost aura, for example.
RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_AFK | PLAYER_FLAGS_DND | PLAYER_FLAGS_GM | PLAYER_FLAGS_GHOST); RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_AFK | PLAYER_FLAGS_DND | PLAYER_FLAGS_GM | PLAYER_FLAGS_GHOST | PLAYER_ALLOW_ONLY_ABILITY);
RemoveStandFlags(UNIT_STAND_FLAGS_ALL); // one form stealth modified bytes RemoveStandFlags(UNIT_STAND_FLAGS_ALL); // one form stealth modified bytes
RemoveByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP | UNIT_BYTE2_FLAG_SANCTUARY); RemoveByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP | UNIT_BYTE2_FLAG_SANCTUARY);
+2 -3
View File
@@ -400,9 +400,8 @@ enum PlayerFlags
PLAYER_FLAGS_UNK21 = 0x00100000, PLAYER_FLAGS_UNK21 = 0x00100000,
PLAYER_FLAGS_UNK22 = 0x00200000, PLAYER_FLAGS_UNK22 = 0x00200000,
PLAYER_FLAGS_UNK23 = 0x00400000, PLAYER_FLAGS_UNK23 = 0x00400000,
PLAYER_FLAGS_UNK24 = 0x00800000, // disabled all abilitys on tab except autoattack PLAYER_ALLOW_ONLY_ABILITY = 0x00800000, // used by bladestorm and killing spree
PLAYER_FLAGS_UNK25 = 0x01000000, // disabled all melee ability on tab include autoattack PLAYER_FLAGS_UNK25 = 0x01000000 // disabled all melee ability on tab include autoattack
}; };
// used for PLAYER__FIELD_KNOWN_TITLES field (uint64), (1<<bit_index) without (-1) // used for PLAYER__FIELD_KNOWN_TITLES field (uint64), (1<<bit_index) without (-1)
+42 -19
View File
@@ -3554,6 +3554,9 @@ uint8 Spell::CanCast(bool strict)
// check cooldowns to prevent cheating // check cooldowns to prevent cheating
if(m_caster->GetTypeId()==TYPEID_PLAYER && ((Player*)m_caster)->HasSpellCooldown(m_spellInfo->Id)) if(m_caster->GetTypeId()==TYPEID_PLAYER && ((Player*)m_caster)->HasSpellCooldown(m_spellInfo->Id))
{ {
//can cast triggered (by aura only?) spells while have this flag
if (!m_IsTriggeredSpell && ((Player*)m_caster)->HasFlag(PLAYER_FLAGS, PLAYER_ALLOW_ONLY_ABILITY))
return SPELL_FAILED_SPELL_IN_PROGRESS;
if(m_triggeredByAuraSpell) if(m_triggeredByAuraSpell)
return SPELL_FAILED_DONT_REPORT; return SPELL_FAILED_DONT_REPORT;
else else
@@ -3591,17 +3594,34 @@ uint8 Spell::CanCast(bool strict)
} }
} }
// caster state requirements bool reqAuraState=true;
if(m_spellInfo->CasterAuraState && !m_caster->HasAuraState(AuraState(m_spellInfo->CasterAuraState))) Unit::AuraList const& stateAuras = m_caster->GetAurasByType(SPELL_AURA_ABILITY_IGNORE_AURASTATE);
return SPELL_FAILED_CASTER_AURASTATE; for(Unit::AuraList::const_iterator j = stateAuras.begin();j != stateAuras.end(); ++j)
if(m_spellInfo->CasterAuraStateNot && m_caster->HasAuraState(AuraState(m_spellInfo->CasterAuraStateNot))) {
return SPELL_FAILED_CASTER_AURASTATE; if((*j)->isAffectedOnSpell(m_spellInfo))
{
reqAuraState=false;
break;
}
}
if (reqAuraState)
{
// caster state requirements
if(m_spellInfo->CasterAuraState && !m_caster->HasAuraState(AuraState(m_spellInfo->CasterAuraState)))
return SPELL_FAILED_CASTER_AURASTATE;
if(m_spellInfo->CasterAuraStateNot && m_caster->HasAuraState(AuraState(m_spellInfo->CasterAuraStateNot)))
return SPELL_FAILED_CASTER_AURASTATE;
if(m_spellInfo->casterAuraSpell && !m_caster->HasAura(m_spellInfo->casterAuraSpell))
return SPELL_FAILED_CASTER_AURASTATE;
if(m_spellInfo->excludeCasterAuraSpell && m_caster->HasAura(m_spellInfo->excludeCasterAuraSpell))
return SPELL_FAILED_CASTER_AURASTATE;
if(m_caster->isInCombat() && IsNonCombatSpell(m_spellInfo))
return SPELL_FAILED_AFFECTING_COMBAT;
}
// Caster aura req check if need
if(m_spellInfo->casterAuraSpell && !m_caster->HasAura(m_spellInfo->casterAuraSpell))
return SPELL_FAILED_CASTER_AURASTATE;
if(m_spellInfo->excludeCasterAuraSpell && m_caster->HasAura(m_spellInfo->excludeCasterAuraSpell))
return SPELL_FAILED_CASTER_AURASTATE;
// cancel autorepeat spells if cast start when moving // cancel autorepeat spells if cast start when moving
// (not wand currently autorepeat cast delayed to moving stop anyway in spell update code) // (not wand currently autorepeat cast delayed to moving stop anyway in spell update code)
@@ -3617,20 +3637,23 @@ uint8 Spell::CanCast(bool strict)
if(target) if(target)
{ {
// target state requirements (not allowed state), apply to self also if (reqAuraState)
if(m_spellInfo->TargetAuraStateNot && target->HasAuraState(AuraState(m_spellInfo->TargetAuraStateNot))) {
return SPELL_FAILED_TARGET_AURASTATE; // target state requirements (not allowed state), apply to self also
if(m_spellInfo->TargetAuraStateNot && target->HasAuraState(AuraState(m_spellInfo->TargetAuraStateNot)))
return SPELL_FAILED_TARGET_AURASTATE;
// Target aura req check if need if(m_spellInfo->targetAuraSpell && !target->HasAura(m_spellInfo->targetAuraSpell))
if(m_spellInfo->targetAuraSpell && !target->HasAura(m_spellInfo->targetAuraSpell)) return SPELL_FAILED_TARGET_AURASTATE;
return SPELL_FAILED_CASTER_AURASTATE;
if(m_spellInfo->excludeTargetAuraSpell && target->HasAura(m_spellInfo->excludeTargetAuraSpell)) if(m_spellInfo->excludeTargetAuraSpell && target->HasAura(m_spellInfo->excludeTargetAuraSpell))
return SPELL_FAILED_CASTER_AURASTATE; return SPELL_FAILED_TARGET_AURASTATE;
}
if(target != m_caster) if(target != m_caster)
{ {
// target state requirements (apply to non-self only), to allow cast affects to self like Dirty Deeds // target state requirements (apply to non-self only), to allow cast affects to self like Dirty Deeds
if(m_spellInfo->TargetAuraState && !target->HasAuraState(AuraState(m_spellInfo->TargetAuraState))) if(reqAuraState && m_spellInfo->TargetAuraState && !target->HasAuraState(AuraState(m_spellInfo->TargetAuraState)))
return SPELL_FAILED_TARGET_AURASTATE; return SPELL_FAILED_TARGET_AURASTATE;
// Not allow casting on flying player // Not allow casting on flying player
+1 -1
View File
@@ -306,7 +306,7 @@ enum AuraType
SPELL_AURA_259 = 259, SPELL_AURA_259 = 259,
SPELL_AURA_SCREEN_EFFECT = 260, SPELL_AURA_SCREEN_EFFECT = 260,
SPELL_AURA_PHASE = 261, SPELL_AURA_PHASE = 261,
SPELL_AURA_262 = 262, SPELL_AURA_ABILITY_IGNORE_AURASTATE = 262,
SPELL_AURA_ALLOW_ONLY_ABILITY = 263, SPELL_AURA_ALLOW_ONLY_ABILITY = 263,
SPELL_AURA_264 = 264, SPELL_AURA_264 = 264,
SPELL_AURA_265 = 265, SPELL_AURA_265 = 265,
+20 -2
View File
@@ -316,8 +316,8 @@ pAuraHandler AuraHandler[TOTAL_AURAS]=
&Aura::HandleNULL, //259 corrupt healing over time spell &Aura::HandleNULL, //259 corrupt healing over time spell
&Aura::HandleNoImmediateEffect, //260 SPELL_AURA_SCREEN_EFFECT (miscvalue = id in ScreenEffect.dbc) not required any code &Aura::HandleNoImmediateEffect, //260 SPELL_AURA_SCREEN_EFFECT (miscvalue = id in ScreenEffect.dbc) not required any code
&Aura::HandlePhase, //261 SPELL_AURA_PHASE undetactable invisibility? implemented in Unit::isVisibleForOrDetect &Aura::HandlePhase, //261 SPELL_AURA_PHASE undetactable invisibility? implemented in Unit::isVisibleForOrDetect
&Aura::HandleNULL, //262 &Aura::HandleNoImmediateEffect, //262 SPELL_AURA_ABILITY_IGNORE_AURASTATE implemented in spell::cancast
&Aura::HandleNULL, //263 SPELL_AURA_ALLOW_ONLY_ABILITY player can use only abilities set in SpellClassMask &Aura::HandleAuraAllowOnlyAbility, //263 SPELL_AURA_ALLOW_ONLY_ABILITY player can use only abilities set in SpellClassMask
&Aura::HandleNULL, //264 unused &Aura::HandleNULL, //264 unused
&Aura::HandleNULL, //265 unused &Aura::HandleNULL, //265 unused
&Aura::HandleNULL, //266 unused &Aura::HandleNULL, //266 unused
@@ -4967,6 +4967,23 @@ void Aura::HandleNoReagentUseAura(bool Apply, bool Real)
/*** OTHERS ***/ /*** OTHERS ***/
/*********************************************************/ /*********************************************************/
void Aura::HandleAuraAllowOnlyAbility(bool apply, bool Real)
{
if(!Real)
return;
if(!apply && m_target->HasAuraType(SPELL_AURA_ALLOW_ONLY_ABILITY))
return;
if(m_target->GetTypeId()==TYPEID_PLAYER)
{
if (apply)
m_target->SetFlag(PLAYER_FLAGS, PLAYER_ALLOW_ONLY_ABILITY);
else
m_target->RemoveFlag(PLAYER_FLAGS, PLAYER_ALLOW_ONLY_ABILITY);
}
}
void Aura::HandleShapeshiftBoosts(bool apply) void Aura::HandleShapeshiftBoosts(bool apply)
{ {
uint32 spellId = 0; uint32 spellId = 0;
@@ -6538,3 +6555,4 @@ void Aura::HandlePhase(bool apply, bool Real)
if(m_target->GetVisibility()!=VISIBILITY_OFF) if(m_target->GetVisibility()!=VISIBILITY_OFF)
m_target->SetVisibility(m_target->GetVisibility()); m_target->SetVisibility(m_target->GetVisibility());
} }
+1
View File
@@ -305,6 +305,7 @@ class TRINITY_DLL_SPEC Aura
Unit* GetTriggerTarget() const; Unit* GetTriggerTarget() const;
// add/remove SPELL_AURA_MOD_SHAPESHIFT (36) linked auras // add/remove SPELL_AURA_MOD_SHAPESHIFT (36) linked auras
void HandleAuraAllowOnlyAbility(bool apply, bool Real);
void HandleShapeshiftBoosts(bool apply); void HandleShapeshiftBoosts(bool apply);
// Allow Apply Aura Handler to modify and access m_AuraDRGroup // Allow Apply Aura Handler to modify and access m_AuraDRGroup