aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/server/game/Spells/Spell.cpp156
1 files changed, 29 insertions, 127 deletions
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index fd36a1653f3..d815dff4bd6 100755
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -62,8 +62,7 @@ bool IsQuestTameSpell(uint32 spellId)
SpellEntry const *spellproto = sSpellStore.LookupEntry(spellId);
if (!spellproto) return false;
- return spellproto->Effect[0] == SPELL_EFFECT_THREAT
- && spellproto->Effect[1] == SPELL_EFFECT_APPLY_AURA && spellproto->EffectApplyAuraName[1] == SPELL_AURA_DUMMY;
+ return spellproto->Effect[0] == SPELL_EFFECT_THREAT && spellproto->Effect[1] == SPELL_EFFECT_APPLY_AURA && spellproto->EffectApplyAuraName[1] == SPELL_AURA_DUMMY;
}
SpellCastTargets::SpellCastTargets() : m_elevation(0), m_speed(0)
@@ -219,9 +218,7 @@ void SpellCastTargets::setCorpseTarget(Corpse* corpse)
void SpellCastTargets::Update(Unit* caster)
{
m_GOTarget = m_GOTargetGUID ? caster->GetMap()->GetGameObject(m_GOTargetGUID) : NULL;
- m_unitTarget = m_unitTargetGUID ?
- (m_unitTargetGUID == caster->GetGUID() ? caster : ObjectAccessor::GetUnit(*caster, m_unitTargetGUID)) :
- NULL;
+ m_unitTarget = m_unitTargetGUID ? (m_unitTargetGUID == caster->GetGUID() ? caster : ObjectAccessor::GetUnit(*caster, m_unitTargetGUID)) : NULL;
m_itemTarget = NULL;
if (caster->GetTypeId() == TYPEID_PLAYER)
@@ -237,6 +234,7 @@ void SpellCastTargets::Update(Unit* caster)
if (m_itemTarget)
m_itemTargetEntry = m_itemTarget->GetEntry();
}
+
// update positions by transport move
if (HasSrc() && m_srcTransGUID)
{
@@ -246,6 +244,7 @@ void SpellCastTargets::Update(Unit* caster)
m_srcPos.RelocateOffset(m_srcTransOffset);
}
}
+
if (HasDst() && m_dstTransGUID)
{
if (WorldObject * transport = ObjectAccessor::GetWorldObject(*caster, m_dstTransGUID))
@@ -262,45 +261,25 @@ void SpellCastTargets::OutDebug()
sLog->outString("TARGET_FLAG_SELF");
if (m_targetMask & TARGET_FLAG_UNIT)
- {
sLog->outString("TARGET_FLAG_UNIT: " UI64FMTD, m_unitTargetGUID);
- }
if (m_targetMask & TARGET_FLAG_UNK17)
- {
sLog->outString("TARGET_FLAG_UNK17: " UI64FMTD, m_unitTargetGUID);
- }
if (m_targetMask & TARGET_FLAG_OBJECT)
- {
sLog->outString("TARGET_FLAG_OBJECT: " UI64FMTD, m_GOTargetGUID);
- }
if (m_targetMask & TARGET_FLAG_CORPSE)
- {
sLog->outString("TARGET_FLAG_CORPSE: " UI64FMTD, m_CorpseTargetGUID);
- }
if (m_targetMask & TARGET_FLAG_PVP_CORPSE)
- {
sLog->outString("TARGET_FLAG_PVP_CORPSE: " UI64FMTD, m_CorpseTargetGUID);
- }
if (m_targetMask & TARGET_FLAG_ITEM)
- {
sLog->outString("TARGET_FLAG_ITEM: " UI64FMTD, m_itemTargetGUID);
- }
if (m_targetMask & TARGET_FLAG_TRADE_ITEM)
- {
sLog->outString("TARGET_FLAG_TRADE_ITEM: " UI64FMTD, m_itemTargetGUID);
- }
if (m_targetMask & TARGET_FLAG_SOURCE_LOCATION)
- {
sLog->outString("TARGET_FLAG_SOURCE_LOCATION: transport guid:" UI64FMTD " trans offset: %s position: %s", m_srcTransGUID, m_srcTransOffset.ToString().c_str(), m_srcPos.ToString().c_str());
- }
if (m_targetMask & TARGET_FLAG_DEST_LOCATION)
- {
sLog->outString("TARGET_FLAG_DEST_LOCATION: transport guid:" UI64FMTD " trans offset: %s position: %s", m_dstTransGUID, m_dstTransOffset.ToString().c_str(), m_dstPos.ToString().c_str());
- }
if (m_targetMask & TARGET_FLAG_STRING)
- {
sLog->outString("TARGET_FLAG_STRING: %s", m_strTarget.c_str());
- }
sLog->outString("speed: %f", m_speed);
sLog->outString("elevation: %f", m_elevation);
}
@@ -463,14 +442,10 @@ m_caster(Caster), m_spellValue(new SpellValue(m_spellInfo))
m_spellSchoolMask = GetSpellSchoolMask(info); // Can be override for some spell (wand shoot for example)
if (m_attackType == RANGED_ATTACK)
- {
// wand case
if ((m_caster->getClassMask() & CLASSMASK_WAND_USERS) != 0 && m_caster->GetTypeId() == TYPEID_PLAYER)
- {
if (Item* pItem = m_caster->ToPlayer()->GetWeaponForAttack(RANGED_ATTACK))
m_spellSchoolMask = SpellSchoolMask(1 << pItem->GetTemplate()->Damage[0].DamageType);
- }
- }
if (originalCasterGUID)
m_originalCasterGUID = originalCasterGUID;
@@ -618,10 +593,8 @@ void Spell::SelectSpellTargets()
if (effectTargetType == SPELL_REQUIRE_CASTER)
AddUnitTarget(m_caster, i);
else if (effectTargetType == SPELL_REQUIRE_ITEM)
- {
if (m_targets.getItemTarget())
AddItemTarget(m_targets.getItemTarget(), i);
- }
continue;
}
@@ -738,15 +711,6 @@ void Spell::SelectSpellTargets()
if (Guardian* pet = m_caster->GetGuardianPet())
AddUnitTarget(pet, i);
break;
- /*case SPELL_EFFECT_ENCHANT_ITEM:
- case SPELL_EFFECT_ENCHANT_ITEM_TEMPORARY:
- case SPELL_EFFECT_ENCHANT_ITEM_PRISMATIC:
- case SPELL_EFFECT_DISENCHANT:
- case SPELL_EFFECT_PROSPECTING:
- case SPELL_EFFECT_MILLING:
- if (m_targets.getItemTarget())
- AddItemTarget(m_targets.getItemTarget(), i);
- break;*/
case SPELL_EFFECT_APPLY_AURA:
switch(m_spellInfo->EffectApplyAuraName[i])
{
@@ -891,10 +855,8 @@ void Spell::prepareDataForTriggerSystem(AuraEffect const * /*triggeredByAura*/)
m_procAttacker |= PROC_FLAG_DONE_TRAP_ACTIVATION;
- /*
- Effects which are result of aura proc from triggered spell cannot proc
- to prevent chain proc of these spells
- */
+ /* Effects which are result of aura proc from triggered spell cannot proc
+ to prevent chain proc of these spells */
// Hellfire Effect - trigger as DOT
if (m_spellInfo->SpellFamilyName == SPELLFAMILY_WARLOCK && m_spellInfo->SpellFamilyFlags[0] & 0x00000040)
@@ -1039,13 +1001,11 @@ void Spell::AddGOTarget(GameObject* pVictim, uint32 effIndex)
// Lookup target in already in list
for (std::list<GOTargetInfo>::iterator ihit = m_UniqueGOTargetInfo.begin(); ihit != m_UniqueGOTargetInfo.end(); ++ihit)
- {
if (targetGUID == ihit->targetGUID) // Found in list
{
ihit->effectMask |= 1 << effIndex; // Add only effect mask
return;
}
- }
// This is new target calculate data for him
@@ -1085,13 +1045,11 @@ void Spell::AddItemTarget(Item* pitem, uint32 effIndex)
// Lookup target in already in list
for (std::list<ItemTargetInfo>::iterator ihit = m_UniqueItemInfo.begin(); ihit != m_UniqueItemInfo.end(); ++ihit)
- {
if (pitem == ihit->item) // Found in list
{
- ihit->effectMask |= 1<<effIndex; // Add only effect mask
+ ihit->effectMask |= 1 << effIndex; // Add only effect mask
return;
}
- }
// This is new target add data
@@ -1117,24 +1075,22 @@ void Spell::DoAllEffectOnTarget(TargetInfo *target)
uint8 farMask = 0;
// create far target mask
for(uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
- {
if (IsFarUnitTargetEffect(m_spellInfo->Effect[i]))
- if ((1<<i) & mask)
- farMask |= (1<<i);
- }
+ if ((1 << i) & mask)
+ farMask |= (1 << i);
+
if (!farMask)
return;
// find unit in world
unit = ObjectAccessor::FindUnit(target->targetGUID);
if (!unit)
return;
+
// do far effects on the unit
// can't use default call because of threading, do stuff as fast as possible
for(uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
- {
- if (farMask & (1<<i))
+ if (farMask & (1 << i))
HandleEffects(unit, NULL, NULL, i);
- }
return;
}
@@ -1323,9 +1279,7 @@ void Spell::DoAllEffectOnTarget(TargetInfo *target)
caster->ProcDamageAndSpell(unit, procAttacker, procVictim, procEx, 0, m_attackType, m_spellInfo, m_triggeredByAuraSpell);
// Failed Pickpocket, reveal rogue
- if (missInfo == SPELL_MISS_RESIST
- && m_customAttr & SPELL_ATTR0_CU_PICKPOCKET
- && unitTarget->GetTypeId() == TYPEID_UNIT)
+ if (missInfo == SPELL_MISS_RESIST && m_customAttr & SPELL_ATTR0_CU_PICKPOCKET && unitTarget->GetTypeId() == TYPEID_UNIT)
{
m_caster->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_TALK);
if (unitTarget->ToCreature()->IsAIEnabled)
@@ -1402,12 +1356,8 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit *unit, const uint32 effectMask, bool
if (m_caster != unit)
{
// Recheck UNIT_FLAG_NON_ATTACKABLE for delayed spells
- if (m_spellInfo->speed > 0.0f &&
- unit->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE) &&
- unit->GetCharmerOrOwnerGUID() != m_caster->GetGUID())
- {
+ if (m_spellInfo->speed > 0.0f && unit->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE) && unit->GetCharmerOrOwnerGUID() != m_caster->GetGUID())
return SPELL_MISS_EVADE;
- }
if (!m_caster->IsFriendlyTo(unit))
{
@@ -1421,9 +1371,7 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit *unit, const uint32 effectMask, bool
// for delayed spells ignore negative spells (after duel end) for friendly targets
// TODO: this cause soul transfer bugged
if (m_spellInfo->speed > 0.0f && unit->GetTypeId() == TYPEID_PLAYER && !IsPositiveSpell(m_spellInfo->Id))
- {
return SPELL_MISS_EVADE;
- }
// assisting case, healing and resurrection
if (unit->HasUnitState(UNIT_STAT_ATTACK_PLAYER))
@@ -1453,8 +1401,8 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit *unit, const uint32 effectMask, bool
uint8 aura_effmask = 0;
for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
- if (effectMask & (1<<i) && IsUnitOwnedAuraEffect(m_spellInfo->Effect[i]))
- aura_effmask |= 1<<i;
+ if (effectMask & (1 <<i ) && IsUnitOwnedAuraEffect(m_spellInfo->Effect[i]))
+ aura_effmask |= 1 << i;
if (aura_effmask)
{
@@ -1529,10 +1477,8 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit *unit, const uint32 effectMask, bool
}
for (uint32 effectNumber = 0; effectNumber < MAX_SPELL_EFFECTS; ++effectNumber)
- {
- if (effectMask & (1<<effectNumber))
+ if (effectMask & (1 << effectNumber))
HandleEffects(unit, NULL, NULL, effectNumber);
- }
return SPELL_MISS_NONE;
}
@@ -1591,14 +1537,12 @@ void Spell::DoTriggersOnSpellHit(Unit *unit)
}
if (m_customAttr & SPELL_ATTR0_CU_LINK_HIT)
- {
if (const std::vector<int32> *spell_triggered = sSpellMgr->GetSpellLinked(m_spellInfo->Id + SPELL_LINK_HIT))
for (std::vector<int32>::const_iterator i = spell_triggered->begin(); i != spell_triggered->end(); ++i)
if (*i < 0)
unit->RemoveAurasDueToSpell(-(*i));
else
unit->CastSpell(unit, *i, true, 0, 0, m_caster->GetGUID());
- }
}
void Spell::DoAllEffectOnTarget(GOTargetInfo *target)
@@ -1627,10 +1571,8 @@ void Spell::DoAllEffectOnTarget(GOTargetInfo *target)
// cast at creature (or GO) quest objectives update at successful cast finished (+channel finished)
// ignore autorepeat/melee casts for speed (not exist quest for spells (hm...)
if (m_originalCaster && m_originalCaster->IsControlledByPlayer() && !IsAutoRepeat() && !IsNextMeleeSwingSpell() && !IsChannelActive())
- {
if (Player* p = m_originalCaster->GetCharmerOrOwnerPlayerOrPlayerItself())
p->CastedCreatureOrGO(go->GetEntry(), go->GetGUID(), m_spellInfo->Id);
- }
CallScriptAfterHitHandlers();
}
@@ -1686,7 +1628,6 @@ bool Spell::UpdateChanneledTargetList()
if (IsValidDeadOrAliveTarget(unit))
{
if (channelAuraMask & ihit->effectMask)
- {
if (AuraApplication * aurApp = unit->GetAuraApplication(m_spellInfo->Id, m_originalCasterGUID))
{
if (m_caster != unit && !m_caster->IsWithinDistInMap(unit, range))
@@ -1698,7 +1639,6 @@ bool Spell::UpdateChanneledTargetList()
}
else // aura is dispelled
continue;
- }
channelTargetEffectMask &= ~ihit->effectMask; // remove from need alive mask effect that have alive target
}
@@ -1725,10 +1665,7 @@ struct ChainHealingOrder : public std::binary_function<const Unit*, const Unit*,
int32 ChainHealingHash(Unit const* Target) const
{
- /*if (Target == MainTarget)
- return 0;
- else*/ if (Target->GetTypeId() == TYPEID_PLAYER && MainTarget->GetTypeId() == TYPEID_PLAYER &&
- Target->ToPlayer()->IsInSameRaidWith(MainTarget->ToPlayer()))
+ if (Target->GetTypeId() == TYPEID_PLAYER && MainTarget->GetTypeId() == TYPEID_PLAYER && Target->ToPlayer()->IsInSameRaidWith(MainTarget->ToPlayer()))
{
if (Target->IsFullHealth())
return 40000;
@@ -1746,16 +1683,6 @@ void Spell::SearchChainTarget(std::list<Unit*> &TagUnitMap, float max_range, uin
if (!cur)
return;
- // Get spell max affected targets
- /*uint32 unMaxTargets = m_spellInfo->MaxAffectedTargets;
- Unit::AuraList const& mod = m_caster->GetAuraEffectsByType(SPELL_AURA_MOD_MAX_AFFECTED_TARGETS);
- for (Unit::AuraList::const_iterator m = mod.begin(); m != mod.end(); ++m)
- {
- if (!(*m)->IsAffectedOnSpell(m_spellInfo))
- continue;
- unMaxTargets+=(*m)->GetAmount();
- }*/
-
//FIXME: This very like horrible hack and wrong for most spells
if (m_spellInfo->DmgClass != SPELL_DAMAGE_CLASS_MELEE)
max_range += num * CHAIN_SPELL_JUMP_RADIUS;
@@ -1765,8 +1692,6 @@ void Spell::SearchChainTarget(std::list<Unit*> &TagUnitMap, float max_range, uin
{
SearchAreaTarget(tempUnitMap, max_range, PUSH_CHAIN, SPELL_TARGETS_ALLY);
tempUnitMap.sort(ChainHealingOrder(m_caster));
- //if (cur->IsFullHealth() && tempUnitMap.size())
- // cur = tempUnitMap.front();
}
else
SearchAreaTarget(tempUnitMap, max_range, PUSH_CHAIN, TargetType);
@@ -1785,8 +1710,7 @@ void Spell::SearchChainTarget(std::list<Unit*> &TagUnitMap, float max_range, uin
if (TargetType == SPELL_TARGETS_CHAINHEAL)
{
next = tempUnitMap.begin();
- while (cur->GetDistance(*next) > CHAIN_SPELL_JUMP_RADIUS
- || !cur->IsWithinLOSInMap(*next))
+ while (cur->GetDistance(*next) > CHAIN_SPELL_JUMP_RADIUS || !cur->IsWithinLOSInMap(*next))
{
++next;
if (next == tempUnitMap.end())
@@ -1853,8 +1777,7 @@ void Spell::SearchAreaTarget(std::list<Unit*> &TagUnitMap, float radius, SpellNo
}
Trinity::SpellNotifierCreatureAndPlayer notifier(m_caster, TagUnitMap, radius, type, TargetType, pos, entry, m_spellInfo);
- if ((m_spellInfo->AttributesEx3 & SPELL_ATTR3_PLAYERS_ONLY)
- || (TargetType == SPELL_TARGETS_ENTRY && !entry))
+ if ((m_spellInfo->AttributesEx3 & SPELL_ATTR3_PLAYERS_ONLY) || (TargetType == SPELL_TARGETS_ENTRY && !entry))
m_caster->GetMap()->VisitWorld(pos->m_positionX, pos->m_positionY, radius, notifier);
else
m_caster->GetMap()->VisitAll(pos->m_positionX, pos->m_positionY, radius, notifier);
@@ -2298,9 +2221,7 @@ void Spell::SelectEffectTargets(uint32 i, uint32 cur)
if (SpellTargetPosition const* st = sSpellMgr->GetSpellTargetPosition(m_spellInfo->Id))
{
//TODO: fix this check
- if (m_spellInfo->Effect[0] == SPELL_EFFECT_TELEPORT_UNITS
- || m_spellInfo->Effect[1] == SPELL_EFFECT_TELEPORT_UNITS
- || m_spellInfo->Effect[2] == SPELL_EFFECT_TELEPORT_UNITS)
+ if (m_spellInfo->Effect[0] == SPELL_EFFECT_TELEPORT_UNITS || m_spellInfo->Effect[1] == SPELL_EFFECT_TELEPORT_UNITS || m_spellInfo->Effect[2] == SPELL_EFFECT_TELEPORT_UNITS)
m_targets.setDst(st->target_X, st->target_Y, st->target_Z, st->target_Orientation, (int32)st->target_mapId);
else if (st->target_mapId == m_caster->GetMapId())
m_targets.setDst(st->target_X, st->target_Y, st->target_Z, st->target_Orientation);
@@ -2508,7 +2429,7 @@ void Spell::SelectEffectTargets(uint32 i, uint32 cur)
{
for (Unit::ControlList::iterator itr = m_caster->m_Controlled.begin(); itr != m_caster->m_Controlled.end(); ++itr)
if ((*itr)->GetEntry() == (*i_spellST)->mConditionValue2 &&
- /*(*itr)->IsWithinDistInMap(m_caster, radius)*/ (*itr)->IsInMap(m_caster)) // For 60243 and 52173 need skip radius check or use range (no radius entry for effect)
+ (*itr)->IsInMap(m_caster)) // For 60243 and 52173 need skip radius check or use range (no radius entry for effect)
unitList.push_back(*itr);
}
}
@@ -2646,12 +2567,8 @@ void Spell::SelectEffectTargets(uint32 i, uint32 cur)
Player* Target = itr->getSource();
// IsHostileTo check duel and controlled by enemy
- if (Target && targetPlayer->IsWithinDistInMap(Target, radius) &&
- targetPlayer->getClass() == Target->getClass() &&
- !m_caster->IsHostileTo(Target))
- {
+ if (Target && targetPlayer->IsWithinDistInMap(Target, radius) && targetPlayer->getClass() == Target->getClass() && !m_caster->IsHostileTo(Target))
AddUnitTarget(Target, i);
- }
}
}
else if (m_targets.getUnitTarget())
@@ -2748,12 +2665,10 @@ void Spell::SelectEffectTargets(uint32 i, uint32 cur)
// Remove targets outside caster's raid
for (std::list<Unit*>::iterator itr = unitList.begin() ; itr != unitList.end();)
- {
if (!(*itr)->IsInRaidWith(m_caster))
itr = unitList.erase(itr);
else
++itr;
- }
break;
default:
break;
@@ -2772,12 +2687,11 @@ void Spell::SelectEffectTargets(uint32 i, uint32 cur)
else
{
for (std::list<Unit*>::iterator itr = unitList.begin() ; itr != unitList.end();)
- {
if ((*itr)->getPowerType() != (Powers)power)
itr = unitList.erase(itr);
else
++itr;
- }
+
if (unitList.size() > maxSize)
{
unitList.sort(Trinity::PowerPctOrderPred((Powers)power));
@@ -2853,7 +2767,6 @@ void Spell::prepare(SpellCastTargets const* targets, AuraEffect const * triggere
//check for special spell conditions
ConditionList conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_SPELL, m_spellInfo->Id);
if (!conditions.empty())
- {
if (!sConditionMgr->IsPlayerMeetToConditions(plrCaster, conditions))
{
//SendCastResult(SPELL_FAILED_DONT_REPORT);
@@ -2861,7 +2774,6 @@ void Spell::prepare(SpellCastTargets const* targets, AuraEffect const * triggere
finish(false);
return;
}
- }
}
if (!m_targets.HasSrc() && m_spellInfo->Targets & TARGET_FLAG_SOURCE_LOCATION)
m_targets.setSrc(*m_caster);
@@ -2897,7 +2809,7 @@ void Spell::prepare(SpellCastTargets const* targets, AuraEffect const * triggere
// Change aura with ranks only if basepoints are taken from spellInfo and aura is positive
if (IsPositiveEffect(m_spellInfo->Id, i))
{
- m_auraScaleMask |= (1<<i);
+ m_auraScaleMask |= (1 << i);
if (m_spellValue->EffectBasePoints[i] != m_spellInfo->EffectBasePoints[i])
{
m_auraScaleMask = 0;
@@ -2970,9 +2882,7 @@ void Spell::prepare(SpellCastTargets const* targets, AuraEffect const * triggere
// don't allow channeled spells / spells with cast time to be casted while moving
// (even if they are interrupted on moving, spells with almost immediate effect get to have their effect processed before movement interrupter kicks in)
- if ((IsChanneledSpell(m_spellInfo) || m_casttime)
- && m_caster->GetTypeId() == TYPEID_PLAYER && m_caster->isMoving()
- && m_spellInfo->InterruptFlags & SPELL_INTERRUPT_FLAG_MOVEMENT)
+ if ((IsChanneledSpell(m_spellInfo) || m_casttime) && m_caster->GetTypeId() == TYPEID_PLAYER && m_caster->isMoving() && m_spellInfo->InterruptFlags & SPELL_INTERRUPT_FLAG_MOVEMENT)
{
SendCastResult(SPELL_FAILED_MOVING);
finish(false);
@@ -2983,10 +2893,6 @@ void Spell::prepare(SpellCastTargets const* targets, AuraEffect const * triggere
ReSetTimer();
sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "Spell::prepare: spell id %u source %u caster %d triggered %u mask %u", m_spellInfo->Id, m_caster->GetEntry(), m_originalCaster ? m_originalCaster->GetEntry() : -1, m_IsTriggeredSpell ? 1 : 0, m_targets.getTargetMask());
- //if (m_targets.getUnitTarget())
- // sLog->outError("Spell::prepare: unit target %u", m_targets.getUnitTarget()->GetEntry());
- //if (m_targets.HasDst())
- // sLog->outError("Spell::prepare: pos target %f %f %f", m_targets.m_dstPos.m_positionX, m_targets.m_dstPos.m_positionY, m_targets.m_dstPos.m_positionZ);
//Containers for channeled spells have to be set
//TODO:Apply this to all casted spells if needed
@@ -3001,13 +2907,11 @@ void Spell::prepare(SpellCastTargets const* targets, AuraEffect const * triggere
{
m_caster->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_CAST);
for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i)
- {
if (EffectTargetType[m_spellInfo->Effect[i]] == SPELL_REQUIRE_UNIT)
{
m_caster->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_SPELL_ATTACK);
break;
}
- }
}
m_caster->SetCurrentCastedSpell(this);
@@ -3015,9 +2919,8 @@ void Spell::prepare(SpellCastTargets const* targets, AuraEffect const * triggere
TriggerGlobalCooldown();
- if (!m_casttime && !m_spellInfo->StartRecoveryTime
- && !m_castItemGUID //item: first cast may destroy item and second cast causes crash
- && GetCurrentContainer() == CURRENT_GENERIC_SPELL)
+ //item: first cast may destroy item and second cast causes crash
+ if (!m_casttime && !m_spellInfo->StartRecoveryTime && !m_castItemGUID && GetCurrentContainer() == CURRENT_GENERIC_SPELL)
cast(true);
}
}
@@ -3087,8 +2990,7 @@ void Spell::cast(bool skipCheck)
if (Unit *target = m_targets.getUnitTarget())
{
// three check: prepare, cast (m_casttime > 0), hit (delayed)
- if (m_casttime && target->isAlive()
- && !target->IsFriendlyTo(m_caster) && !m_caster->canSeeOrDetect(target))
+ if (m_casttime && target->isAlive() && !target->IsFriendlyTo(m_caster) && !m_caster->canSeeOrDetect(target))
{
SendCastResult(SPELL_FAILED_BAD_TARGETS);
SendInterrupted(0);