[c12544] Force SPELL_AURA_OVERRIDE_ACTIONBAR_SPELLS and SPELL_AURA_OVERRIDE_ACTIONBAR_SPELLS_2 auras to send amount

This commit is contained in:
Dramacydal 2013-03-25 15:59:57 +03:00 committed by Antz
parent 461f81a06a
commit 41a410968c
2 changed files with 261 additions and 167 deletions

View file

@ -33,7 +33,7 @@
#include "Group.h"
#include "UpdateData.h"
#include "ObjectAccessor.h"
#include "Policies/SingletonImp.h"
#include "Policies/Singleton.h"
#include "Totem.h"
#include "Creature.h"
#include "Formulas.h"
@ -101,7 +101,7 @@ pAuraHandler AuraHandler[TOTAL_AURAS] =
&Aura::HandleAuraTrackResources, // 45 SPELL_AURA_TRACK_RESOURCES
&Aura::HandleUnused, // 46 SPELL_AURA_46 4 spells in 4.3.4
&Aura::HandleAuraModParryPercent, // 47 SPELL_AURA_MOD_PARRY_PERCENT
&Aura::HandleNULL, // 48 SPELL_AURA_48 4 spells in 4.3.4 Napalm (area damage spell with additional delayed damage effect)
&Aura::HandleNoImmediateEffect, // 48 SPELL_AURA_PERIODIC_TRIGGER_BY_CLIENT (Client periodic trigger spell by self (4 spells in 4.3.4 )). Implemented in pet/player cast chains.
&Aura::HandleAuraModDodgePercent, // 49 SPELL_AURA_MOD_DODGE_PERCENT
&Aura::HandleNoImmediateEffect, // 50 SPELL_AURA_MOD_CRITICAL_HEALING_AMOUNT implemented in Unit::SpellCriticalHealingBonus
&Aura::HandleAuraModBlockChancePercent, // 51 SPELL_AURA_MOD_BLOCK_CHANCE_PERCENT
@ -206,14 +206,14 @@ pAuraHandler AuraHandler[TOTAL_AURAS] =
&Aura::HandleModShieldBlockDamage, //150 SPELL_AURA_MOD_SHIELD_BLOCKDAMAGE
&Aura::HandleAuraTrackStealthed, //151 SPELL_AURA_TRACK_STEALTHED
&Aura::HandleNoImmediateEffect, //152 SPELL_AURA_MOD_DETECTED_RANGE implemented in Creature::GetAttackDistance
&Aura::HandleNoImmediateEffect, //153 SPELL_AURA_SPLIT_DAMAGE_FLAT implemented in Unit::CalculateAbsorbAndResist
&Aura::HandleUnused, //153 old SPELL_AURA_SPLIT_DAMAGE_FLAT
&Aura::HandleNoImmediateEffect, //154 SPELL_AURA_MOD_STEALTH_LEVEL implemented in Unit::isVisibleForOrDetect
&Aura::HandleNoImmediateEffect, //155 SPELL_AURA_MOD_WATER_BREATHING implemented in Player::getMaxTimer
&Aura::HandleNoImmediateEffect, //156 SPELL_AURA_MOD_REPUTATION_GAIN implemented in Player::CalculateReputationGain
&Aura::HandleUnused, //157 SPELL_AURA_PET_DAMAGE_MULTI (single test like spell 20782, also single for 214 aura)
&Aura::HandleNULL, //158 SPELL_AURA_MOD_SHIELD_BLOCKVALUE
&Aura::HandleNoImmediateEffect, //159 SPELL_AURA_NO_PVP_CREDIT implemented in Player::RewardHonor
&Aura::HandleNoImmediateEffect, //160 SPELL_AURA_MOD_AOE_AVOIDANCE implemented in Unit::MagicSpellHitResult
&Aura::HandleUnused, //160 old SPELL_AURA_MOD_AOE_AVOIDANCE
&Aura::HandleNoImmediateEffect, //161 SPELL_AURA_MOD_HEALTH_REGEN_IN_COMBAT implemented in Player::RegenerateAll and Player::RegenerateHealth
&Aura::HandleAuraPowerBurn, //162 SPELL_AURA_POWER_BURN_MANA
&Aura::HandleNoImmediateEffect, //163 SPELL_AURA_MOD_CRIT_DAMAGE_BONUS implemented in Unit::CalculateMeleeDamage and Unit::SpellCriticalDamageBonus
@ -222,7 +222,7 @@ pAuraHandler AuraHandler[TOTAL_AURAS] =
&Aura::HandleAuraModAttackPowerPercent, //166 SPELL_AURA_MOD_ATTACK_POWER_PCT
&Aura::HandleAuraModRangedAttackPowerPercent, //167 SPELL_AURA_MOD_RANGED_ATTACK_POWER_PCT
&Aura::HandleNoImmediateEffect, //168 SPELL_AURA_MOD_DAMAGE_DONE_VERSUS implemented in Unit::SpellDamageBonusDone, Unit::MeleeDamageBonusDone
&Aura::HandleNoImmediateEffect, //169 SPELL_AURA_MOD_CRIT_PERCENT_VERSUS implemented in Unit::DealDamageBySchool, Unit::DoAttackDamage, Unit::SpellCriticalBonus
&Aura::HandleUnused, //169 old SPELL_AURA_MOD_CRIT_PERCENT_VERSUS
&Aura::HandleDetectAmore, //170 SPELL_AURA_DETECT_AMORE different spells that ignore transformation effects
&Aura::HandleAuraModIncreaseSpeed, //171 SPELL_AURA_MOD_SPEED_NOT_STACK
&Aura::HandleAuraModIncreaseMountedSpeed, //172 SPELL_AURA_MOD_MOUNTED_SPEED_NOT_STACK
@ -231,7 +231,7 @@ pAuraHandler AuraHandler[TOTAL_AURAS] =
&Aura::HandleModSpellHealingPercentFromStat, //175 SPELL_AURA_MOD_SPELL_HEALING_OF_STAT_PERCENT implemented in Unit::SpellBaseHealingBonusDone
&Aura::HandleSpiritOfRedemption, //176 SPELL_AURA_SPIRIT_OF_REDEMPTION only for Spirit of Redemption spell, die at aura end
&Aura::HandleNULL, //177 SPELL_AURA_AOE_CHARM (22 spells)
&Aura::HandleNoImmediateEffect, //178 SPELL_AURA_MOD_DEBUFF_RESISTANCE implemented in Unit::MagicSpellHitResult
&Aura::HandleUnused, //178 old SPELL_AURA_MOD_DEBUFF_RESISTANCE
&Aura::HandleNoImmediateEffect, //179 SPELL_AURA_MOD_ATTACKER_SPELL_CRIT_CHANCE implemented in Unit::SpellCriticalBonus
&Aura::HandleNoImmediateEffect, //180 SPELL_AURA_MOD_FLAT_SPELL_DAMAGE_VERSUS implemented in Unit::SpellDamageBonusDone
&Aura::HandleUnused, //181 unused (3.0.8a-4.3.4) old SPELL_AURA_MOD_FLAT_SPELL_CRIT_DAMAGE_VERSUS
@ -252,7 +252,7 @@ pAuraHandler AuraHandler[TOTAL_AURAS] =
&Aura::HandleNULL, //196 SPELL_AURA_MOD_COOLDOWN (single spell 24818 in 3.2.2a)
&Aura::HandleNoImmediateEffect, //197 SPELL_AURA_MOD_ATTACKER_SPELL_AND_WEAPON_CRIT_CHANCE implemented in Unit::SpellCriticalBonus Unit::GetUnitCriticalChance
&Aura::HandleUnused, //198 unused (3.0.8a-4.3.4) old SPELL_AURA_MOD_ALL_WEAPON_SKILLS
&Aura::HandleNoImmediateEffect, //199 SPELL_AURA_MOD_INCREASES_SPELL_PCT_TO_HIT implemented in Unit::MagicSpellHitResult
&Aura::HandleUnused, //199 SPELL_AURA_MOD_INCREASES_SPELL_PCT_TO_HIT implemented in Unit::MagicSpellHitResult
&Aura::HandleNoImmediateEffect, //200 SPELL_AURA_MOD_KILL_XP_PCT implemented in Player::GiveXP
&Aura::HandleAuraAllowFlight, //201 SPELL_AURA_FLY this aura enable flight mode...
&Aura::HandleNoImmediateEffect, //202 SPELL_AURA_IGNORE_COMBAT_RESULT implemented in Unit::MeleeSpellHitResult
@ -265,7 +265,7 @@ pAuraHandler AuraHandler[TOTAL_AURAS] =
&Aura::HandleAuraModIncreaseFlightSpeed, //209 SPELL_AURA_MOD_FLIGHT_SPEED_MOUNTED_STACKING
&Aura::HandleAuraModIncreaseFlightSpeed, //210 SPELL_AURA_MOD_FLIGHT_SPEED_NOT_STACKING
&Aura::HandleAuraModIncreaseFlightSpeed, //211 SPELL_AURA_MOD_FLIGHT_SPEED_MOUNTED_NOT_STACKING
&Aura::HandleAuraModRangedAttackPowerOfStatPercent, //212 SPELL_AURA_MOD_RANGED_ATTACK_POWER_OF_STAT_PERCENT
&Aura::HandleUnused, //212 old SPELL_AURA_MOD_RANGED_ATTACK_POWER_OF_STAT_PERCENT
&Aura::HandleNoImmediateEffect, //213 SPELL_AURA_MOD_RAGE_FROM_DAMAGE_DEALT implemented in Player::RewardRage
&Aura::HandleUnused, //214 Tamed Pet Passive (single test like spell 20782, also single for 157 aura)
&Aura::HandleArenaPreparation, //215 SPELL_AURA_ARENA_PREPARATION
@ -312,7 +312,7 @@ pAuraHandler AuraHandler[TOTAL_AURAS] =
&Aura::HandleNoReagentUseAura, //256 SPELL_AURA_NO_REAGENT_USE Use SpellClassMask for spell select
&Aura::HandleNULL, //257 SPELL_AURA_MOD_TARGET_RESIST_BY_SPELL_CLASS Use SpellClassMask for spell select
&Aura::HandleNULL, //258 SPELL_AURA_MOD_SPELL_VISUAL
&Aura::HandleNoImmediateEffect, //259 SPELL_AURA_MOD_PERIODIC_HEAL implemented in Unit::SpellHealingBonus
&Aura::HandleUnused, //259 old SPELL_AURA_MOD_PERIODIC_HEAL
&Aura::HandleNoImmediateEffect, //260 SPELL_AURA_SCREEN_EFFECT (miscvalue = id in ScreenEffect.dbc) not required any code
&Aura::HandlePhase, //261 SPELL_AURA_PHASE undetectable invisibility? implemented in Unit::isVisibleForOrDetect
&Aura::HandleNoImmediateEffect, //262 SPELL_AURA_IGNORE_UNIT_STATE implemented in Unit::isIgnoreUnitState & Spell::CheckCast
@ -321,19 +321,19 @@ pAuraHandler AuraHandler[TOTAL_AURAS] =
&Aura::HandleUnused, //265 unused (3.0.8a-4.3.4)
&Aura::HandleUnused, //266 unused (3.0.8a-4.3.4)
&Aura::HandleNoImmediateEffect, //267 SPELL_AURA_MOD_IMMUNE_AURA_APPLY_SCHOOL implemented in Unit::IsImmuneToSpellEffect
&Aura::HandleAuraModAttackPowerOfStatPercent, //268 SPELL_AURA_MOD_ATTACK_POWER_OF_STAT_PERCENT
&Aura::HandleUnused, //268 old SPELL_AURA_MOD_ATTACK_POWER_OF_STAT_PERCENT
&Aura::HandleNoImmediateEffect, //269 SPELL_AURA_MOD_IGNORE_DAMAGE_REDUCTION_SCHOOL implemented in Unit::CalcNotIgnoreDamageReduction
&Aura::HandleUnused, //270 SPELL_AURA_MOD_IGNORE_TARGET_RESIST (unused in 3.2.2a)
&Aura::HandleUnused, //270 old SPELL_AURA_MOD_IGNORE_TARGET_RESIST (unused in 3.2.2a)
&Aura::HandleNoImmediateEffect, //271 SPELL_AURA_MOD_DAMAGE_FROM_CASTER implemented in Unit::SpellDamageBonusTaken
&Aura::HandleNoImmediateEffect, //272 SPELL_AURA_MAELSTROM_WEAPON (unclear use for aura, it used in (3.2.2a...3.3.0) in single spell 53817 that spellmode stacked and charged spell expected to be drop as stack
&Aura::HandleNoImmediateEffect, //273 SPELL_AURA_X_RAY (client side implementation)
&Aura::HandleNULL, //274 proc free shot?
&Aura::HandleNoImmediateEffect, //275 SPELL_AURA_MOD_IGNORE_SHAPESHIFT Use SpellClassMask for spell select
&Aura::HandleNULL, //276 mod damage % mechanic?
&Aura::HandleNoImmediateEffect, //277 SPELL_AURA_MOD_MAX_AFFECTED_TARGETS Use SpellClassMask for spell select
&Aura::HandleUnused, //277 old SPELL_AURA_MOD_MAX_AFFECTED_TARGETS
&Aura::HandleAuraModDisarm, //278 SPELL_AURA_MOD_DISARM_RANGED disarm ranged weapon
&Aura::HandleNULL, //279 SPELL_AURA_INITIALIZE_IMAGES 9 spells in 4.3.4 visual effects?
&Aura::HandleModTargetArmorPct, //280 SPELL_AURA_MOD_TARGET_ARMOR_PCT
&Aura::HandleUnused, //280 old SPELL_AURA_MOD_TARGET_ARMOR_PCT
&Aura::HandleNoImmediateEffect, //281 SPELL_AURA_MOD_HONOR_GAIN implemented in Player::RewardHonor
&Aura::HandleAuraIncreaseBaseHealthPercent, //282 SPELL_AURA_INCREASE_BASE_HEALTH_PERCENT
&Aura::HandleNoImmediateEffect, //283 SPELL_AURA_MOD_HEALING_RECEIVED implemented in Unit::SpellHealingBonusTaken
@ -349,7 +349,7 @@ pAuraHandler AuraHandler[TOTAL_AURAS] =
&Aura::HandleAuraAddMechanicAbilities, //293 SPELL_AURA_ADD_MECHANIC_ABILITIES replaces target's action bars with a predefined spellset
&Aura::HandleAuraStopNaturalManaRegen, //294 SPELL_AURA_STOP_NATURAL_MANA_REGEN implemented in Player:Regenerate
&Aura::HandleUnused, //295 unused (4.3.4)
&Aura::HandleNULL, //296 62 spells in 4.3.4
&Aura::HandleAuraSetVehicleId, //296 62 spells in 4.3.4
&Aura::HandleNULL, //297 14 spells in 4.3.4
&Aura::HandleUnused, //298 6 spells in 4.3.4
&Aura::HandleUnused, //299 unused (3.2.2a-4.3.4)
@ -369,8 +369,8 @@ pAuraHandler AuraHandler[TOTAL_AURAS] =
&Aura::HandleNULL, //313 0 spells in 4.3.4
&Aura::HandleNULL, //314 SPELL_AURA_PREVENT_RESURRECTION 2 spells int 4.3.4 prevents ressurection ?
&Aura::HandleNULL, //315 SPELL_AURA_UNDERWATER_WALKING 4 spells in 4.3.4 underwater walking
&Aura::HandleUnused, //316 0 spells in 4.3.4
&Aura::HandleNULL, //317 SPELL_AURA_MOD_INCREASE_SPELL_POWER_PCT 13 spells in 4.3.4
&Aura::HandleUnused, //316 old SPELL_AURA_MOD_PERIODIC_HASTE 0 spells in 4.3.4
&Aura::HandleModIncreaseSpellPowerPct, //317 SPELL_AURA_MOD_INCREASE_SPELL_POWER_PCT 13 spells in 4.3.4, implemented in Unit::SpellBaseDamageBonusDone and Unit::SpellBaseHealingBonusDone
&Aura::HandleAuraMastery, //318 SPELL_AURA_MASTERY 12 spells in 4.3
&Aura::HandleNULL, //319 SPELL_AURA_MOD_MELEE_ATTACK_SPEED 47 spells in 4.3.4
&Aura::HandleNULL, //320 SPELL_AURA_MOD_RANGED_ATTACK_SPEED 5 spells in 4.3.4
@ -383,7 +383,7 @@ pAuraHandler AuraHandler[TOTAL_AURAS] =
&Aura::HandleUnused, //327 0 spells in 4.3.4
&Aura::HandleNULL, //328 3 spells in 4.3.4 Eclipse Mastery Driver Passive
&Aura::HandleNULL, //329 SPELL_AURA_MOD_RUNIC_POWER_REGEN 3 spells in 4.3.4
&Aura::HandleNULL, //330 SPELL_AURA_ALLOW_CAST_WHILE_MOVING 16 spells in 4.3.4
&Aura::HandleNoImmediateEffect, //330 SPELL_AURA_ALLOW_CAST_WHILE_MOVING 16 spells in 4.3.4
&Aura::HandleNULL, //331 SPELL_AURA_MOD_WEATHER 10 spells in 4.3.4
&Aura::HandleNULL, //332 SPELL_AURA_OVERRIDE_ACTIONBAR_SPELLS 16 spells in 4.3.4
&Aura::HandleNULL, //333 SPELL_AURA_OVERRIDE_ACTIONBAR_SPELLS_2 10 spells in 4.3.4
@ -402,14 +402,14 @@ pAuraHandler AuraHandler[TOTAL_AURAS] =
&Aura::HandleNULL, //346 32 spells in 4.3.4 shows progressbar-like ui?
&Aura::HandleNULL, //347 SPELL_AURA_MOD_CD_FROM_HASTE 2 spells in 4.3.4
&Aura::HandleNULL, //348 SPELL_AURA_MOD_MONEY_TO_GUILD_BANK 2 spells in 4.3.4
&Aura::HandleNULL, //349 SPELL_AURA_MOD_CURRENCY_GAIN 16 spells in 4.3.4
&Aura::HandleNoImmediateEffect, //349 SPELL_AURA_MOD_CURRENCY_GAIN 16 spells in 4.3.4
&Aura::HandleNULL, //350 SPELL_AURA_MOD_MATERIAL_GAIN 1 spells in 4.3.4
&Aura::HandleNULL, //351 8 spells in 4.3.4 archaeology-related
&Aura::HandleNULL, //352 1 spells in 4.3.4 enables worgen<>human form switches
&Aura::HandleNULL, //352 SPELL_AURA_ALLOW_WORGEN_TRANSFORM 1 spells in 4.3.4 enables worgen<>human form switches
&Aura::HandleNULL, //353 SPELL_AURA_MOD_CAMOUFLAGE 3 spells in 4.3.4
&Aura::HandleNULL, //354 SPELL_AURA_MOD_HEALING_DONE_FROM_PCT_HEALTH 2 spells in 4.3.4
&Aura::HandleNoImmediateEffect, //354 SPELL_AURA_MOD_HEALING_DONE_FROM_PCT_HEALTH 2 spells in 4.3.4
&Aura::HandleUnused, //355 0 spells in 4.3.4
&Aura::HandleNULL, //356 SPELL_AURA_MOD_DAMAGE_DONE_FROM_PCT_POWER 2 spells in 4.3.4
&Aura::HandleNoImmediateEffect, //356 SPELL_AURA_MOD_DAMAGE_DONE_FROM_PCT_POWER 2 spells in 4.3.4
&Aura::HandleNULL, //357 1 spells in 4.3.4 Enable Tower Assault Unit Frame
&Aura::HandleNoImmediateEffect, //358 SPELL_AURA_WORGEN_TRANSFORM 5 spells in 4.3.4 forces client-side transformation to worgen form
&Aura::HandleNULL, //359 1 spells in 4.3.4 healing done vs aurastate?
@ -419,7 +419,7 @@ pAuraHandler AuraHandler[TOTAL_AURAS] =
&Aura::HandleNULL, //363 1 spells in 4.3.4 Throw Totem
&Aura::HandleUnused, //364 0 spells in 4.3.4
&Aura::HandleNULL, //365 1 spells in 4.3.4 Max Far Clip Plane
&Aura::HandleNULL, //366 SPELL_AURA_MOD_SPELL_POWER_OF_ATTACK_POWER 1 spells in 4.3.4
&Aura::HandleOverrideSpellPowerByAp, //366 SPELL_AURA_OVERRIDE_SPELL_POWER_BY_AP_PCT 1 spells in 4.3.4
&Aura::HandleNULL, //367 2 spells in 4.3.4 test spells
&Aura::HandleUnused, //368 0 spells in 4.3.4
&Aura::HandleNULL, //369 5 spells in 4.3.4 darkmoon faire related
@ -507,7 +507,7 @@ AreaAura::AreaAura(SpellEntry const* spellproto, SpellEffectIndex eff, int32* cu
// caster==NULL in constructor args if target==caster in fact
Unit* caster_ptr = caster ? caster : target;
m_radius = GetSpellRadius(sSpellRadiusStore.LookupEntry(m_spellEffect->EffectRadiusIndex));
m_radius = GetSpellRadius(sSpellRadiusStore.LookupEntry(m_spellEffect->GetRadiusIndex()));
if(Player* modOwner = caster_ptr->GetSpellModOwner())
modOwner->ApplySpellMod(spellproto->Id, SPELLMOD_RADIUS, m_radius);
@ -779,6 +779,10 @@ void AreaAura::Update(uint32 diff)
if (!apply)
continue;
// Skip some targets (TODO: Might require better checks, also unclear how the actual caster must/can be handled)
if (GetSpellProto()->HasAttribute(SPELL_ATTR_EX3_TARGET_ONLY_PLAYER) && (*tIter)->GetTypeId() != TYPEID_PLAYER)
continue;
if (SpellEntry const* actualSpellInfo = sSpellMgr.SelectAuraRankForLevel(GetSpellProto(), (*tIter)->getLevel()))
{
int32 actualBasePoints = m_currentBasePoints;
@ -1099,26 +1103,18 @@ void Aura::HandleAddModifier(bool apply, bool Real)
break;
}
m_spellmod = new SpellModifier(
SpellModOp(m_modifier.m_miscvalue),
SpellModType(m_modifier.m_auraname), // SpellModType value == spell aura types
m_modifier.m_amount,
this,
// prevent expire spell mods with (charges > 0 && m_stackAmount > 1)
// all this spell expected expire not at use but at spell proc event check
GetSpellProto()->GetStackAmount() > 1 ? 0 : GetHolder()->GetAuraCharges());
SpellClassOptionsEntry const * opt = spellProto->GetSpellClassOptions();
// Everlasting Affliction, overwrite wrong data, if will need more better restore support of spell_affect table
if (spellProto->GetSpellFamilyName() == SPELLFAMILY_WARLOCK && spellProto->SpellIconID == 3169)
if (opt && spellProto->GetSpellFamilyName() == SPELLFAMILY_WARLOCK && spellProto->SpellIconID == 3169)
{
// Corruption and Unstable Affliction
m_spellmod->mask = ClassFamilyMask(UI64LIT(0x0000010000000002));
const_cast<SpellClassOptionsEntry*>(opt)->SpellFamilyFlags = ClassFamilyMask(UI64LIT(0x0000010000000002));
}
// Improved Flametongue Weapon, overwrite wrong data, maybe time re-add table
else if (spellProto->Id == 37212)
else if (opt && spellProto->Id == 37212)
{
// Flametongue Weapon (Passive)
m_spellmod->mask = ClassFamilyMask(UI64LIT(0x0000000000200000));
const_cast<SpellClassOptionsEntry*>(opt)->SpellFamilyFlags = ClassFamilyMask(UI64LIT(0x0000000000200000));
}
}
@ -1294,18 +1290,17 @@ void Aura::TriggerSpell()
case 24834: // Shadow Bolt Whirl
{
uint32 spellForTick[8] = { 24820, 24821, 24822, 24823, 24835, 24836, 24837, 24838 };
uint32 tick = GetAuraTicks();
if (tick < 8)
{
trigger_spell_id = spellForTick[tick];
uint32 tick = (GetAuraTicks() + 7/*-1*/) % 8;
// casted in left/right (but triggered spell have wide forward cone)
float forward = target->GetOrientation();
float angle = target->GetOrientation() + (tick % 2 == 0 ? M_PI_F / 2 : - M_PI_F / 2);
target->SetOrientation(angle);
triggerTarget->CastSpell(triggerTarget, trigger_spell_id, true, NULL, this, casterGUID);
target->SetOrientation(forward);
}
// casted in left/right (but triggered spell have wide forward cone)
float forward = target->GetOrientation();
if (tick <= 3)
target->SetOrientation(forward + 0.75f * M_PI_F - tick * M_PI_F / 8); // Left
else
target->SetOrientation(forward - 0.75f * M_PI_F + (8 - tick) * M_PI_F / 8); // Right
triggerTarget->CastSpell(triggerTarget, spellForTick[tick], true, NULL, this, casterGUID);
target->SetOrientation(forward);
return;
}
// // Stink Trap
@ -1326,11 +1321,11 @@ void Aura::TriggerSpell()
float newAngle = target->GetOrientation();
if (auraId == 26009)
newAngle += M_PI_F/40;
newAngle += M_PI_F / 40;
else
newAngle -= M_PI_F/40;
newAngle -= M_PI_F / 40;
NormalizeOrientation(newAngle);
newAngle = NormalizeOrientation(newAngle);
target->SetFacingTo(newAngle);
@ -1458,7 +1453,7 @@ void Aura::TriggerSpell()
if (!creature->GetCreatureInfo()->SkinLootId)
return;
player->AutoStoreLoot(creature->GetCreatureInfo()->SkinLootId, LootTemplates_Skinning, true);
player->AutoStoreLoot(creature, creature->GetCreatureInfo()->SkinLootId, LootTemplates_Skinning, true);
creature->ForcedDespawn();
}
@ -1565,8 +1560,16 @@ void Aura::TriggerSpell()
// case 36556: break;
// // Cursed Scarab Despawn Periodic
// case 36561: break;
// // Vision Guide
// case 36573: break;
case 36573: // Vision Guide
{
if (GetAuraTicks() == 10 && target->GetTypeId() == TYPEID_PLAYER)
{
((Player*)target)->AreaExploredOrEventHappens(10525);
target->RemoveAurasDueToSpell(36573);
}
return;
}
// // Cannon Charging (platform)
// case 36785: break;
// // Cannon Charging (self)
@ -1578,10 +1581,23 @@ void Aura::TriggerSpell()
// case 37125: break;
// // Arcane Flurry
// case 37268: break;
// // Spout
// case 37429: break;
// // Spout
// case 37430: break;
case 37429: // Spout (left)
case 37430: // Spout (right)
{
float newAngle = target->GetOrientation();
if (auraId == 37429)
newAngle += 2 * M_PI_F / 100;
else
newAngle -= 2 * M_PI_F / 100;
newAngle = NormalizeOrientation(newAngle);
target->SetFacingTo(newAngle);
target->CastSpell(target, 37433, true);
return;
}
// // Karazhan - Chess NPC AI, Snapshot timer
// case 37440: break;
// // Karazhan - Chess NPC AI, action timer
@ -1656,10 +1672,23 @@ void Aura::TriggerSpell()
// case 40113: break;
// // Spirit Lance
// case 40157: break;
// // Demon Transform 2
// case 40398: break;
// // Demon Transform 1
// case 40511: break;
case 40398: // Demon Transform 2
switch (GetAuraTicks())
{
case 1:
if (target->HasAura(40506))
target->RemoveAurasDueToSpell(40506);
else
trigger_spell_id = 40506;
break;
case 2:
trigger_spell_id = 40510;
break;
}
break;
case 40511: // Demon Transform 1
trigger_spell_id = 40398;
break;
// // Ancient Flames
// case 40657: break;
// // Ethereal Ring Cannon: Cannon Aura
@ -2254,6 +2283,11 @@ void Aura::HandleAuraDummy(bool apply, bool Real)
target->RemoveAurasDueToSpell(32346);
return;
}
case 36587: // Vision Guide
{
target->CastSpell(target, 36573, true, NULL, this);
return;
}
// Gender spells
case 38224: // Illidari Agent Illusion
case 37096: // Blood Elf Illusion
@ -2850,6 +2884,20 @@ void Aura::HandleAuraDummy(bool apply, bool Real)
return;
}
case 64398: // Summon Scrap Bot (Ulduar, Mimiron) - for Scrap Bots
case 64426: // Summon Scrap Bot (Ulduar, Mimiron) - for Assault Bots
case 64621: // Summon Fire Bot (Ulduar, Mimiron)
{
uint32 triggerSpell = 0;
switch (GetId())
{
case 64398: triggerSpell = 63819; break;
case 64426: triggerSpell = 64427; break;
case 64621: triggerSpell = 64622; break;
}
target->CastSpell(target, triggerSpell, false);
return;
}
case 68839: // Corrupt Soul
{
// Knockdown Stun
@ -3335,10 +3383,27 @@ void Aura::HandleAuraMounted(bool apply, bool Real)
display_id = minfo->modelid;
target->Mount(display_id, GetId());
if (ci->vehicleId)
{
target->SetVehicleId(ci->vehicleId, ci->Entry);
if (target->GetTypeId() == TYPEID_PLAYER)
target->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_PLAYER_VEHICLE);
}
}
else
{
target->Unmount(true);
CreatureInfo const* ci = ObjectMgr::GetCreatureTemplate(m_modifier.m_miscvalue);
if (ci && target->IsVehicle() && ci->vehicleId == target->GetVehicleInfo()->GetVehicleEntry()->m_ID)
{
if (target->GetTypeId() == TYPEID_PLAYER)
target->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_PLAYER_VEHICLE);
target->SetVehicleId(0, 0);
}
}
}
@ -3348,9 +3413,7 @@ void Aura::HandleAuraWaterWalk(bool apply, bool Real)
if (!Real)
return;
WorldPacket data;
GetTarget()->BuildMoveWaterWalkPacket(&data, apply, 0);
GetTarget()->SendMessageToSet(&data, true);
GetTarget()->SetWaterWalk(apply);
}
void Aura::HandleAuraFeatherFall(bool apply, bool Real)
@ -3360,12 +3423,7 @@ void Aura::HandleAuraFeatherFall(bool apply, bool Real)
return;
Unit* target = GetTarget();
WorldPacket data;
if (apply)
data.Initialize(SMSG_MOVE_FEATHER_FALL, 8 + 4);
else
data.Initialize(SMSG_MOVE_NORMAL_FALL, 8 + 4);
data << target->GetPackGUID();
data << uint32(0);
target->BuildMoveFeatherFallPacket(&data, apply, 0);
target->SendMessageToSet(&data, true);
// start fall from current height
@ -3381,11 +3439,42 @@ void Aura::HandleAuraHover(bool apply, bool Real)
WorldPacket data;
if (apply)
data.Initialize(SMSG_MOVE_SET_HOVER, 8 + 4);
{
GetTarget()->m_movementInfo.AddMovementFlag(MOVEFLAG_HOVER);
if (GetTarget()->GetTypeId() == TYPEID_PLAYER)
{
data.Initialize(SMSG_MOVE_SET_HOVER, 8 + 4 + 1);
data.WriteGuidMask<1, 4, 2, 3, 0, 5, 6, 7>(GetTarget()->GetObjectGuid());
data.WriteGuidBytes<5, 4, 1, 2, 3, 6, 0, 7>(GetTarget()->GetObjectGuid());
data << uint32(0);
}
else
{
data.Initialize(SMSG_SPLINE_MOVE_SET_HOVER, 8 + 4 + 1);
data.WriteGuidMask<3, 7, 0, 1, 4, 6, 2, 5>(GetTarget()->GetObjectGuid());
data.WriteGuidBytes<2, 4, 3, 1, 7, 0, 5, 6>(GetTarget()->GetObjectGuid());
GetTarget()->SetByteFlag(UNIT_FIELD_BYTES_1, 3, UNIT_BYTE1_FLAG_UNK_2);
}
}
else
data.Initialize(SMSG_MOVE_UNSET_HOVER, 8 + 4);
data << GetTarget()->GetPackGUID();
data << uint32(0);
{
GetTarget()->m_movementInfo.RemoveMovementFlag(MOVEFLAG_HOVER);
data.Initialize(GetTarget()->GetTypeId() == TYPEID_PLAYER ? SMSG_MOVE_UNSET_HOVER : SMSG_SPLINE_MOVE_UNSET_HOVER, 8+4);
if (GetTarget()->GetTypeId() == TYPEID_PLAYER)
{
data.Initialize(SMSG_MOVE_UNSET_HOVER, 8 + 4 + 1);
data.WriteGuidMask<4, 6, 3, 1, 2, 7, 5, 0>(GetTarget()->GetObjectGuid());
data.WriteGuidBytes<4, 5, 3, 6, 7, 1, 2, 0>(GetTarget()->GetObjectGuid());
data << uint32(0);
}
else
{
data.Initialize(SMSG_SPLINE_MOVE_UNSET_HOVER, 8 + 4 + 1);
data.WriteGuidMask<6, 7, 4, 0, 3, 1, 5, 2>(GetTarget()->GetObjectGuid());
data.WriteGuidBytes<4, 5, 3, 0, 2, 7, 6, 1>(GetTarget()->GetObjectGuid());
GetTarget()->RemoveByteFlag(UNIT_FIELD_BYTES_1, 3, UNIT_BYTE1_FLAG_UNK_2);
}
}
GetTarget()->SendMessageToSet(&data, true);
}
@ -3489,9 +3578,6 @@ void Aura::HandleAuraModShapeshift(bool apply, bool Real)
// remove other shapeshift before applying a new one
target->RemoveSpellsCausingAura(SPELL_AURA_MOD_SHAPESHIFT, GetHolder());
// need send to client not form active state, or at re-apply form client go crazy
target->SendForcedObjectUpdate();
if (modelid > 0)
target->SetDisplayId(modelid);
@ -3628,6 +3714,10 @@ void Aura::HandleAuraModShapeshift(bool apply, bool Real)
if (target->GetTypeId() == TYPEID_PLAYER)
((Player*)target)->InitDataForForm();
// update form-dependent armor specializations
if (target->GetTypeId() == TYPEID_PLAYER && ((Player*)target)->getClass() == CLASS_DRUID)
((Player*)target)->UpdateArmorSpecializations();
}
void Aura::HandleAuraTransform(bool apply, bool Real)
@ -4163,7 +4253,6 @@ void Aura::HandleModPossess(bool apply, bool Real)
{
((Player*)target)->SetClientControl(target, 0);
}
}
else
{
@ -4513,9 +4602,7 @@ void Aura::HandleAuraModStun(bool apply, bool Real)
target->SetStandState(UNIT_STAND_STATE_STAND);// in 1.5 client
}
WorldPacket data;
target->BuildForceMoveRootPacket(&data, true, 0);
target->SendMessageToSet(&data, true);
target->SetRoot(true);
// Summon the Naj'entus Spine GameObject on target if spell is Impaling Spine
if (GetId() == 39837)
@ -4570,9 +4657,7 @@ void Aura::HandleAuraModStun(bool apply, bool Real)
if (target->getVictim() && target->isAlive())
target->SetTargetGuid(target->getVictim()->GetObjectGuid());
WorldPacket data;
target->BuildForceMoveRootPacket(&data, false, 0);
target->SendMessageToSet(&data, true);
target->SetRoot(false);
}
// Wyvern Sting
@ -4803,9 +4888,7 @@ void Aura::HandleAuraModRoot(bool apply, bool Real)
if (target->GetTypeId() == TYPEID_PLAYER)
{
WorldPacket data;
target->BuildForceMoveRootPacket(&data, true, 2);
target->SendMessageToSet(&data, true);
target->SetRoot(true);
// Clear unit movement flags
((Player*)target)->m_movementInfo.SetMovementFlags(MOVEFLAG_NONE);
@ -4850,11 +4933,7 @@ void Aura::HandleAuraModRoot(bool apply, bool Real)
target->SetTargetGuid(target->getVictim()->GetObjectGuid());
if (target->GetTypeId() == TYPEID_PLAYER)
{
WorldPacket data;
target->BuildForceMoveRootPacket(&data, false, 2);
target->SendMessageToSet(&data, true);
}
target->SetRoot(false);
}
}
}
@ -5389,7 +5468,6 @@ void Aura::HandlePeriodicEnergize(bool apply, bool Real)
if (Unit* caster = GetCaster())
m_modifier.m_amount = int32(caster->GetCreateMana() * GetBasePoints() / (200 * GetAuraMaxTicks()));
break;
}
case 29166: // Innervate (value% of casters base mana)
{
@ -5626,11 +5704,11 @@ void Aura::HandlePeriodicDamage(bool apply, bool Real)
{
if (caster->GetTypeId() != TYPEID_PLAYER)
break;
//1 point : ${($m1+$b1*1+0.015*$AP)*4} damage over 8 secs
//2 points: ${($m1+$b1*2+0.024*$AP)*5} damage over 10 secs
//3 points: ${($m1+$b1*3+0.03*$AP)*6} damage over 12 secs
//4 points: ${($m1+$b1*4+0.03428571*$AP)*7} damage over 14 secs
//5 points: ${($m1+$b1*5+0.0375*$AP)*8} damage over 16 secs
// 1 point : ${($m1+$b1*1+0.015*$AP)*4} damage over 8 secs
// 2 points: ${($m1+$b1*2+0.024*$AP)*5} damage over 10 secs
// 3 points: ${($m1+$b1*3+0.03*$AP)*6} damage over 12 secs
// 4 points: ${($m1+$b1*4+0.03428571*$AP)*7} damage over 14 secs
// 5 points: ${($m1+$b1*5+0.0375*$AP)*8} damage over 16 secs
float AP_per_combo[6] = {0.0f, 0.015f, 0.024f, 0.03f, 0.03428571f, 0.0375f};
uint8 cp = ((Player*)caster)->GetComboPoints();
if (cp > 5) cp = 5;
@ -5923,13 +6001,11 @@ void Aura::HandleModHealingDone(bool /*apply*/, bool /*Real*/)
void Aura::HandleModTotalPercentStat(bool apply, bool /*Real*/)
{
if (m_modifier.m_miscvalue < -1 || m_modifier.m_miscvalue > 4)
{
sLog.outError("WARNING: Misc Value for SPELL_AURA_MOD_PERCENT_STAT not valid");
if (!m_modifier.m_amount)
return;
}
Unit* target = GetTarget();
uint32 miscValueB = GetSpellEffect()->EffectMiscValueB;
// save current and max HP before applying aura
uint32 curHPValue = target->GetHealth();
@ -5937,7 +6013,7 @@ void Aura::HandleModTotalPercentStat(bool apply, bool /*Real*/)
for (int32 i = STAT_STRENGTH; i < MAX_STATS; ++i)
{
if (m_modifier.m_miscvalue == i || m_modifier.m_miscvalue == -1)
if ((miscValueB & (1 << i)) || miscValueB == 0)
{
target->HandleStatModifier(UnitMods(UNIT_MOD_STAT_START + i), TOTAL_PCT, float(m_modifier.m_amount), apply);
if (target->GetTypeId() == TYPEID_PLAYER || ((Creature*)target)->IsPet())
@ -5946,10 +6022,9 @@ void Aura::HandleModTotalPercentStat(bool apply, bool /*Real*/)
}
// recalculate current HP/MP after applying aura modifications (only for spells with 0x10 flag)
if (m_modifier.m_miscvalue == STAT_STAMINA && maxHPValue > 0 && GetSpellProto()->HasAttribute(SPELL_ATTR_UNK4))
if ((miscValueB & (1 << STAT_STAMINA)) && maxHPValue > 0 && GetSpellProto()->HasAttribute(SPELL_ATTR_UNK4))
{
// newHP = (curHP / maxHP) * newMaxHP = (newMaxHP * curHP) / maxHP -> which is better because no int -> double -> int conversion is needed
uint32 newHPValue = (target->GetMaxHealth() * curHPValue) / maxHPValue;
uint32 newHPValue = uint32(float(target->GetMaxHealth()) / maxHPValue * curHPValue);
target->SetHealth(newHPValue);
}
}
@ -6394,28 +6469,6 @@ void Aura::HandleAuraModRangedAttackPowerPercent(bool apply, bool /*Real*/)
GetTarget()->HandleStatModifier(UNIT_MOD_ATTACK_POWER_RANGED, TOTAL_PCT, float(m_modifier.m_amount), apply);
}
void Aura::HandleAuraModRangedAttackPowerOfStatPercent(bool /*apply*/, bool Real)
{
// spells required only Real aura add/remove
if (!Real)
return;
// Recalculate bonus
if (GetTarget()->GetTypeId() == TYPEID_PLAYER && !(GetTarget()->getClassMask() & CLASSMASK_WAND_USERS))
((Player*)GetTarget())->UpdateAttackPowerAndDamage(true);
}
void Aura::HandleAuraModAttackPowerOfStatPercent(bool /*apply*/, bool Real)
{
// spells required only Real aura add/remove
if (!Real)
return;
// Recalculate bonus
if (GetTarget()->GetTypeId() == TYPEID_PLAYER)
((Player*)GetTarget())->UpdateAttackPowerAndDamage(false);
}
void Aura::HandleAuraModAttackPowerOfArmor(bool /*apply*/, bool Real)
{
// spells required only Real aura add/remove
@ -6762,7 +6815,6 @@ void Aura::HandleShapeshiftBoosts(bool apply)
++itr;
}
// Master Shapeshifter
if (MasterShaperSpellId)
{
@ -7349,7 +7401,7 @@ void Aura::PeriodicTick()
if (pCaster->GetTypeId() == TYPEID_PLAYER)
pdamage -= target->GetDamageReduction(pdamage);
target->CalculateDamageAbsorbAndResist(pCaster, GetSpellSchoolMask(spellProto), DOT, pdamage, &absorb, &resist, !GetSpellProto()->HasAttribute(SPELL_ATTR_EX2_CANT_REFLECTED));
target->CalculateDamageAbsorbAndResist(pCaster, GetSpellSchoolMask(spellProto), DOT, pdamage, &absorb, &resist, !GetSpellProto()->HasAttribute(SPELL_ATTR_EX_CANT_REFLECTED));
DETAIL_FILTER_LOG(LOG_FILTER_PERIODIC_AFFECTS, "PeriodicTick: %s attacked %s for %u dmg inflicted by %u abs is %u",
GetCasterGuid().GetString().c_str(), target->GetGuidStr().c_str(), pdamage, GetId(), absorb);
@ -7441,7 +7493,7 @@ void Aura::PeriodicTick()
if (GetCasterGuid().IsPlayer())
pdamage -= target->GetDamageReduction(pdamage);
target->CalculateDamageAbsorbAndResist(pCaster, GetSpellSchoolMask(spellProto), DOT, pdamage, &absorb, &resist, !spellProto->HasAttribute(SPELL_ATTR_EX2_CANT_REFLECTED));
target->CalculateDamageAbsorbAndResist(pCaster, GetSpellSchoolMask(spellProto), DOT, pdamage, &absorb, &resist, !spellProto->HasAttribute(SPELL_ATTR_EX_CANT_REFLECTED));
DETAIL_FILTER_LOG(LOG_FILTER_PERIODIC_AFFECTS, "PeriodicTick: %s health leech of %s for %u dmg inflicted by %u abs is %u",
GetCasterGuid().GetString().c_str(), target->GetGuidStr().c_str(), pdamage, GetId(), absorb);
@ -7961,7 +8013,7 @@ void Aura::PeriodicDummyTick()
uint32 rand = urand(0, 99);
for (uint32 i = 1; i <= 6; ++i)
{
if (rand < i * (i+1) /2 * 5)
if (rand < i * (i + 1) / 2 * 5)
{
target->CastSpell(target, spell->Id + i, true);
break;
@ -8192,7 +8244,7 @@ void Aura::PeriodicDummyTick()
else
newAngle -= 0.09f;
NormalizeOrientation(newAngle);
newAngle = NormalizeOrientation(newAngle);
target->SetFacingTo(newAngle);
@ -8501,29 +8553,16 @@ void Aura::HandleAuraControlVehicle(bool apply, bool Real)
if (!target->IsVehicle())
return;
// TODO: Check for free seat
Unit* caster = GetCaster();
if (!caster)
return;
if (apply)
{
if (caster->GetTypeId() == TYPEID_PLAYER)
((Player*)caster)->RemovePet(PET_SAVE_AS_CURRENT);
// caster->EnterVehicle(target);
target->GetVehicleInfo()->Board(caster, GetBasePoints() - 1);
}
else
{
// some SPELL_AURA_CONTROL_VEHICLE auras have a dummy effect on the player - remove them
caster->RemoveAurasDueToSpell(GetId());
// caster->ExitVehicle();
if (caster->GetTypeId() == TYPEID_PLAYER)
((Player*)caster)->ResummonPetTemporaryUnSummonedIfAny();
}
target->GetVehicleInfo()->UnBoard(caster, m_removeMode == AURA_REMOVE_BY_TRACKING);
}
void Aura::HandleAuraAddMechanicAbilities(bool apply, bool Real)
@ -8707,10 +8746,6 @@ void Aura::HandleAuraSafeFall(bool Apply, bool Real)
bool Aura::IsCritFromAbilityAura(Unit* caster, uint32& damage)
{
if (!GetSpellProto()->IsFitToFamily(SPELLFAMILY_ROGUE, UI64LIT(0x100000)) && // Rupture
!caster->HasAffectedAura(SPELL_AURA_ABILITY_PERIODIC_CRIT, GetSpellProto()))
return false;
if (caster->IsSpellCrit(GetTarget(), GetSpellProto(), GetSpellSchoolMask(GetSpellProto())))
{
damage = caster->SpellCriticalDamageBonus(GetSpellProto(), damage, GetTarget());
@ -8720,14 +8755,6 @@ bool Aura::IsCritFromAbilityAura(Unit* caster, uint32& damage)
return false;
}
void Aura::HandleModTargetArmorPct(bool /*apply*/, bool /*Real*/)
{
if (GetTarget()->GetTypeId() != TYPEID_PLAYER)
return;
((Player*)GetTarget())->UpdateArmorPenetration();
}
void Aura::HandleAuraModAllCritChance(bool apply, bool Real)
{
// spells required only Real aura add/remove
@ -8755,6 +8782,14 @@ void Aura::HandleAuraStopNaturalManaRegen(bool apply, bool Real)
GetTarget()->ApplyModFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_REGENERATE_POWER, !apply);
}
void Aura::HandleAuraSetVehicleId(bool apply, bool Real)
{
if (!Real)
return;
GetTarget()->SetVehicleId(apply ? GetMiscValue() : 0, 0);
}
void Aura::HandleAuraMastery(bool apply, bool Real)
{
Unit* target = GetTarget();
@ -8809,7 +8844,7 @@ SpellAuraHolder::SpellAuraHolder(SpellEntry const* spellproto, Unit* target, Wor
m_applyTime = time(NULL);
m_isPassive = IsPassiveSpell(spellproto);
m_isDeathPersist = IsDeathPersistentSpell(spellproto);
m_isSingleTarget = IsSingleTargetSpell(spellproto);
m_trackedAuraType= IsSingleTargetSpell(spellproto) ? TRACK_AURA_TYPE_SINGLE_TARGET : IsSpellHaveAura(spellproto, SPELL_AURA_CONTROL_VEHICLE) ? TRACK_AURA_TYPE_CONTROL_VEHICLE : TRACK_AURA_TYPE_NOT_TRACKED;
m_procCharges = m_spellProto->GetProcCharges();
m_isRemovedOnShapeLost = (GetCasterGuid() == m_target->GetObjectGuid() &&
@ -8915,7 +8950,23 @@ void SpellAuraHolder::_AddSpellAuraHolder()
for (int32 i = 0; i < MAX_EFFECT_INDEX; ++i)
{
if (m_auras[i])
{
flags |= (1 << i);
if (m_auras[i]->GetModifier()->m_amount)
{
switch (m_auras[i]->GetModifier()->m_auraname)
{
case SPELL_AURA_SCHOOL_ABSORB:
case SPELL_AURA_OVERRIDE_ACTIONBAR_SPELLS:
case SPELL_AURA_OVERRIDE_ACTIONBAR_SPELLS_2:
flags |= AFLAG_EFFECT_AMOUNT_SEND;
break;
default:
break;
}
}
}
}
if (GetCasterGuid() == GetTarget()->GetObjectGuid())
@ -9282,6 +9333,8 @@ bool SpellAuraHolder::IsNeedVisibleSlot(Unit const* caster) const
return true;
else if (IsSpellHaveAura(m_spellProto, SPELL_AURA_IGNORE_UNIT_STATE))
return true;
else if (IsSpellHaveAura(m_spellProto, SPELL_AURA_ALLOW_CAST_WHILE_MOVING))
return true;
// passive auras (except totem auras) do not get placed in the slots
return !m_isPassive || totemAura || HasAreaAuraEffect(m_spellProto);
@ -10194,13 +10247,54 @@ bool SpellAuraHolder::IsEmptyHolder() const
return true;
}
void SpellAuraHolder::UnregisterSingleCastHolder()
void SpellAuraHolder::UnregisterAndCleanupTrackedAuras()
{
if (IsSingleTarget())
TrackedAuraType trackedType = GetTrackedAuraType();
if (!trackedType)
return;
if (trackedType == TRACK_AURA_TYPE_SINGLE_TARGET)
{
if (Unit* caster = GetCaster())
caster->GetSingleCastSpellTargets().erase(GetSpellProto());
m_isSingleTarget = false;
caster->GetTrackedAuraTargets(trackedType).erase(GetSpellProto());
}
else if (trackedType == TRACK_AURA_TYPE_CONTROL_VEHICLE)
{
Unit* caster = GetCaster();
if (caster && IsSpellHaveAura(GetSpellProto(), SPELL_AURA_CONTROL_VEHICLE, GetAuraFlags()))
{
caster->GetTrackedAuraTargets(trackedType).erase(GetSpellProto());
caster->RemoveAurasDueToSpell(GetSpellProto()->Id);
}
else if (caster)
{
Unit::TrackedAuraTargetMap scTarget = caster->GetTrackedAuraTargets(trackedType);
Unit::TrackedAuraTargetMap::iterator find = scTarget.find(GetSpellProto());
if (find != scTarget.end())
{
ObjectGuid vehicleGuid = find->second;
scTarget.erase(find);
if (Unit* vehicle = caster->GetMap()->GetUnit(vehicleGuid))
vehicle->RemoveAurasDueToSpell(GetSpellProto()->Id, NULL, AURA_REMOVE_BY_DEFAULT);
}
}
}
m_trackedAuraType = TRACK_AURA_TYPE_NOT_TRACKED;
}
void Aura::HandleModIncreaseSpellPowerPct(bool apply, bool Real)
{
if (GetTarget()->GetTypeId() != TYPEID_PLAYER)
return;
((Player*)GetTarget())->UpdateSpellDamageAndHealingBonus();
}
void Aura::HandleOverrideSpellPowerByAp(bool apply, bool Real)
{
if (GetTarget()->GetTypeId() != TYPEID_PLAYER)
return;
((Player*)GetTarget())->UpdateSpellDamageAndHealingBonus();
}

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__
#define __REVISION_NR_H__
#define REVISION_NR "12543"
#define REVISION_NR "12544"
#endif // __REVISION_NR_H__