diff options
author | megamage <none@none> | 2008-12-24 18:45:06 -0600 |
---|---|---|
committer | megamage <none@none> | 2008-12-24 18:45:06 -0600 |
commit | f481c04eac5514c5446a04c982b4318dda62b2c6 (patch) | |
tree | e1a2a8f5b8fb7db6751170a14c35a95d47e1024a /src | |
parent | 84a21f8f4b56ab732af37c9187cf68fc464b018f (diff) |
*Fix broken item spells.
--HG--
branch : trunk
Diffstat (limited to 'src')
-rw-r--r-- | src/game/Spell.cpp | 25 | ||||
-rw-r--r-- | src/game/SpellMgr.cpp | 7 | ||||
-rw-r--r-- | src/game/SpellMgr.h | 1 |
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 |