diff options
| author | megamage <none@none> | 2008-12-24 21:08:43 -0600 |
|---|---|---|
| committer | megamage <none@none> | 2008-12-24 21:08:43 -0600 |
| commit | 65dbb2fa3874a882a1e1a9c595043abd4eadc11a (patch) | |
| tree | 1c38bd05ec1bf7ce7d18220cdef0f845ca1b5a5c /src/game/Spell.cpp | |
| parent | 808d79eb297c37a51f4c396152348e422c06d44f (diff) | |
| parent | f481c04eac5514c5446a04c982b4318dda62b2c6 (diff) | |
Merge.
--HG--
branch : trunk
Diffstat (limited to 'src/game/Spell.cpp')
| -rw-r--r-- | src/game/Spell.cpp | 44 |
1 files changed, 27 insertions, 17 deletions
diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index 02763a38d64..576deea558e 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -404,13 +404,11 @@ Spell::~Spell() void Spell::FillTargetMap() { - // TODO: ADD the correct target FILLS!!!!!! - - for(uint32 i=0;i<3;i++) + for(uint32 i = 0; i < 3; ++i) { // not call for empty effect. // Also some spells use not used effect targets for store targets for dummy effect in triggered spells - if(m_spellInfo->Effect[i]==0) + if(!m_spellInfo->Effect[i]) continue; // TODO: find a way so this is not needed? @@ -419,23 +417,34 @@ void Spell::FillTargetMap() AddUnitTarget(m_caster, i); std::list<Unit*> tmpUnitMap; + uint32 targetA = m_spellInfo->EffectImplicitTargetA[i]; + uint32 targetB = m_spellInfo->EffectImplicitTargetB[i]; - SetTargetMap(i,m_spellInfo->EffectImplicitTargetA[i],tmpUnitMap); - SetTargetMap(i,m_spellInfo->EffectImplicitTargetB[i],tmpUnitMap); + if(targetA) + SetTargetMap(i, targetA, tmpUnitMap); + if(targetB) // In very rare case !A && B + SetTargetMap(i, targetB, tmpUnitMap); 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) + { + 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) { - 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.getItemTarget()) + AddItemTarget(m_targets.getItemTarget(), i); } continue; } - if(tmpUnitMap.empty()) + if(!targetA && !targetB) { // add here custom effects that need default target. // FOR EVERY TARGET TYPE THERE IS A DIFFERENT FILL!! @@ -502,12 +511,12 @@ 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_PROFICIENCY: case SPELL_EFFECT_SUMMON_OBJECT_WILD: 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 @@ -546,7 +555,7 @@ 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: @@ -554,7 +563,7 @@ void Spell::FillTargetMap() case SPELL_EFFECT_MILLING: if(m_targets.getItemTarget()) AddItemTarget(m_targets.getItemTarget(), i); - break; + break;*/ case SPELL_EFFECT_APPLY_AURA: switch(m_spellInfo->EffectApplyAuraName[i]) { @@ -2451,8 +2460,9 @@ void Spell::_handle_immediate_phase() { if(spellmgr.EffectTargetType[m_spellInfo->Effect[j]] == SPELL_REQUIRE_DEST) { - if(m_targets.HasDest()) - HandleEffects(m_originalCaster, NULL, NULL, j); + if(!m_targets.HasDest()) + m_targets.setDestination(m_caster, false); + HandleEffects(m_originalCaster, NULL, NULL, j); } else if(spellmgr.EffectTargetType[m_spellInfo->Effect[j]] == SPELL_REQUIRE_NONE) HandleEffects(m_originalCaster, NULL, NULL, j); |
