aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game/Spell.cpp25
-rw-r--r--src/game/SpellMgr.cpp7
-rw-r--r--src/game/SpellMgr.h1
3 files changed, 23 insertions, 10 deletions
diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp
index 694ba2ceaa7..6f5dd73f724 100644
--- a/src/game/Spell.cpp
+++ b/src/game/Spell.cpp
@@ -425,19 +425,24 @@ void Spell::FillTargetMap()
if(spellmgr.EffectTargetType[m_spellInfo->Effect[i]] != SPELL_REQUIRE_UNIT)
{
- if(spellmgr.EffectTargetType[m_spellInfo->Effect[i]] == SPELL_REQUIRE_DEST
- && m_targets.HasDest() && m_spellInfo->speed > 0.0f)
+ if(spellmgr.EffectTargetType[m_spellInfo->Effect[i]] == SPELL_REQUIRE_DEST)
{
- float dist = m_caster->GetDistance(m_targets.m_destX, m_targets.m_destY, m_targets.m_destZ);
- if (dist < 5.0f) dist = 5.0f;
- m_delayMoment = (uint64) floor(dist / m_spellInfo->speed * 1000.0f);
+ if(m_targets.HasDest() && m_spellInfo->speed > 0.0f)
+ {
+ float dist = m_caster->GetDistance(m_targets.m_destX, m_targets.m_destY, m_targets.m_destZ);
+ if (dist < 5.0f) dist = 5.0f;
+ m_delayMoment = (uint64) floor(dist / m_spellInfo->speed * 1000.0f);
+ }
+ }
+ else if(spellmgr.EffectTargetType[m_spellInfo->Effect[i]] == SPELL_REQUIRE_ITEM)
+ {
+ if(m_targets.getItemTarget())
+ AddItemTarget(m_targets.getItemTarget(), i);
}
continue;
}
if(!targetA && !targetB)
- AddUnitTarget(m_caster, i);
- else if(tmpUnitMap.empty())
{
// add here custom effects that need default target.
// FOR EVERY TARGET TYPE THERE IS A DIFFERENT FILL!!
@@ -504,10 +509,10 @@ void Spell::FillTargetMap()
case SPELL_EFFECT_RESURRECT:
case SPELL_EFFECT_CREATE_ITEM:
case SPELL_EFFECT_TRIGGER_SPELL:
- //case SPELL_EFFECT_TRIGGER_MISSILE: ??
case SPELL_EFFECT_SKILL_STEP:
case SPELL_EFFECT_SELF_RESURRECT:
case SPELL_EFFECT_REPUTATION:
+ case SPELL_EFFECT_LEARN_SPELL:
if(m_targets.getUnitTarget())
tmpUnitMap.push_back(m_targets.getUnitTarget());
else
@@ -545,14 +550,14 @@ void Spell::FillTargetMap()
if(Pet* pet = m_caster->GetPet())
tmpUnitMap.push_back(pet);
break;
- case SPELL_EFFECT_ENCHANT_ITEM:
+ /*case SPELL_EFFECT_ENCHANT_ITEM:
case SPELL_EFFECT_ENCHANT_ITEM_TEMPORARY:
case SPELL_EFFECT_DISENCHANT:
case SPELL_EFFECT_FEED_PET:
case SPELL_EFFECT_PROSPECTING:
if(m_targets.getItemTarget())
AddItemTarget(m_targets.getItemTarget(), i);
- break;
+ break;*/
case SPELL_EFFECT_APPLY_AURA:
switch(m_spellInfo->EffectApplyAuraName[i])
{
diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp
index 41faea5b8fb..78175708cba 100644
--- a/src/game/SpellMgr.cpp
+++ b/src/game/SpellMgr.cpp
@@ -66,6 +66,13 @@ SpellMgr::SpellMgr()
case SPELL_EFFECT_PROFICIENCY: // 0
EffectTargetType[i] = SPELL_REQUIRE_NONE;
break;
+ case SPELL_EFFECT_ENCHANT_ITEM:
+ case SPELL_EFFECT_ENCHANT_ITEM_TEMPORARY:
+ case SPELL_EFFECT_DISENCHANT:
+ case SPELL_EFFECT_FEED_PET:
+ case SPELL_EFFECT_PROSPECTING:
+ EffectTargetType[i] = SPELL_REQUIRE_ITEM;
+ break;
default:
EffectTargetType[i] = SPELL_REQUIRE_UNIT;
break;
diff --git a/src/game/SpellMgr.h b/src/game/SpellMgr.h
index 51e6fbd1d56..d8b4b866655 100644
--- a/src/game/SpellMgr.h
+++ b/src/game/SpellMgr.h
@@ -238,6 +238,7 @@ enum SpellEffectTargetTypes
SPELL_REQUIRE_NONE,
SPELL_REQUIRE_UNIT,
SPELL_REQUIRE_DEST,
+ SPELL_REQUIRE_ITEM,
};
enum SpellSelectTargetTypes