diff options
author | QAston <qaston@gmail.com> | 2011-09-24 02:01:18 +0200 |
---|---|---|
committer | QAston <qaston@gmail.com> | 2011-09-24 02:02:39 +0200 |
commit | d01a761f5347cbfe5d4b2812aad44d0163bc5d66 (patch) | |
tree | 4d1b4627b0f8e250c74b679173bc5f8d9f180780 /src | |
parent | 71bbbaa21b03b31a796308dbfe968904c769967f (diff) |
Core/Spells: Drop EFFECT_IMPLICIT_TARGET_PET and use EFFECT_IMPLICIT_TARGET_EXPLICIT instead.
Diffstat (limited to 'src')
-rwxr-xr-x | src/server/game/Spells/Spell.cpp | 31 | ||||
-rwxr-xr-x | src/server/game/Spells/SpellEffects.cpp | 21 | ||||
-rw-r--r-- | src/server/game/Spells/SpellInfo.cpp | 9 | ||||
-rw-r--r-- | src/server/game/Spells/SpellInfo.h | 1 |
4 files changed, 31 insertions, 31 deletions
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 68dde527ab7..8f8748cfdec 100755 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -844,12 +844,6 @@ void Spell::SelectEffectTypeImplicitTargets(uint8 effIndex) if (targetMask & TARGET_FLAG_UNIT_MASK) AddUnitTarget(m_caster, 1 << effIndex, false); break; - // for EFFECT_LEARN_PET_SPELL - maybe should add unitTarget's pet instead of caster's? - case EFFECT_IMPLICIT_TARGET_PET: - if (targetMask & TARGET_FLAG_UNIT_MASK) - if (Guardian* pet = m_caster->GetGuardianPet()) - AddUnitTarget(pet, 1 << effIndex, false); - break; } } @@ -4950,21 +4944,24 @@ SpellCastResult Spell::CheckCast(bool strict) } case SPELL_EFFECT_LEARN_PET_SPELL: { - if (m_caster->GetTypeId() != TYPEID_PLAYER) - return SPELL_FAILED_BAD_TARGETS; - - Pet* pet = m_caster->ToPlayer()->GetPet(); - if (!pet) - return SPELL_FAILED_NO_PET; + // check target only for unit target case + if (Unit* unitTarget = m_targets.GetUnitTarget()) + { + if (m_caster->GetTypeId() != TYPEID_PLAYER) + return SPELL_FAILED_BAD_TARGETS; - SpellInfo const* learn_spellproto = sSpellMgr->GetSpellInfo(m_spellInfo->Effects[i].TriggerSpell); + Pet* pet = unitTarget->ToPet(); + if (!pet || pet->GetOwner() != m_caster) + return SPELL_FAILED_BAD_TARGETS; - if (!learn_spellproto) - return SPELL_FAILED_NOT_KNOWN; + SpellInfo const* learn_spellproto = sSpellMgr->GetSpellInfo(m_spellInfo->Effects[i].TriggerSpell); - if (m_spellInfo->SpellLevel > pet->getLevel()) - return SPELL_FAILED_LOWLEVEL; + if (!learn_spellproto) + return SPELL_FAILED_NOT_KNOWN; + if (m_spellInfo->SpellLevel > pet->getLevel()) + return SPELL_FAILED_LOWLEVEL; + } break; } case SPELL_EFFECT_APPLY_GLYPH: diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index f0e63398b8f..c8e3c195e32 100755 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -3091,13 +3091,12 @@ void Spell::EffectLearnSpell(SpellEffIndex effIndex) if (unitTarget->GetTypeId() != TYPEID_PLAYER) { - if (m_caster->GetTypeId() == TYPEID_PLAYER) + if (unitTarget->ToPet()) EffectLearnPetSpell(effIndex); - return; } - Player* player = (Player*)unitTarget; + Player* player = unitTarget->ToPlayer(); uint32 spellToLearn = (m_spellInfo->Id == 483 || m_spellInfo->Id == 55884) ? damage : m_spellInfo->Effects[effIndex].TriggerSpell; player->learnSpell(spellToLearn, false); @@ -3782,15 +3781,16 @@ void Spell::EffectSummonPet(SpellEffIndex effIndex) void Spell::EffectLearnPetSpell(SpellEffIndex effIndex) { - if (m_caster->GetTypeId() != TYPEID_PLAYER) + if (!unitTarget) return; - Player* _player = m_caster->ToPlayer(); - - Pet* pet = _player->GetPet(); - if (!pet) + if (unitTarget->ToPlayer()) + { + EffectLearnSpell(effIndex); return; - if (!pet->isAlive()) + } + Pet* pet = unitTarget->ToPet(); + if (!pet) return; SpellInfo const* learn_spellproto = sSpellMgr->GetSpellInfo(m_spellInfo->Effects[effIndex].TriggerSpell); @@ -3798,9 +3798,8 @@ void Spell::EffectLearnPetSpell(SpellEffIndex effIndex) return; pet->learnSpell(learn_spellproto->Id); - pet->SavePetToDB(PET_SAVE_AS_CURRENT); - _player->PetSpellInitialize(); + pet->GetOwner()->PetSpellInitialize(); } void Spell::EffectTaunt(SpellEffIndex /*effIndex*/) diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 1e4aa4f00f5..78bf88a7144 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -750,7 +750,7 @@ SpellEffectInfo::StaticData SpellEffectInfo::_data[TOTAL_SPELL_EFFECTS] = {EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_ITEM}, // 54 SPELL_EFFECT_ENCHANT_ITEM_TEMPORARY {EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_UNIT}, // 55 SPELL_EFFECT_TAMECREATURE {EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_DEST}, // 56 SPELL_EFFECT_SUMMON_PET - {EFFECT_IMPLICIT_TARGET_PET, TARGET_OBJECT_TYPE_UNIT}, // 57 SPELL_EFFECT_LEARN_PET_SPELL + {EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_UNIT}, // 57 SPELL_EFFECT_LEARN_PET_SPELL {EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_UNIT}, // 58 SPELL_EFFECT_WEAPON_DAMAGE {EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_UNIT}, // 59 SPELL_EFFECT_CREATE_RANDOM_ITEM {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_UNIT}, // 60 SPELL_EFFECT_PROFICIENCY @@ -2235,7 +2235,12 @@ uint32 SpellInfo::_GetExplicitTargetMask() const continue; // extend explicit target mask only if valid targets for effect could not be provided by target types - targetMask |= Effects[i].GetMissingTargetMask(srcSet, dstSet, targetMask); + uint32 effectTargetMask = Effects[i].GetMissingTargetMask(srcSet, dstSet, targetMask); + + // don't add explicit object/dest flags when spell has no max range + if (GetMaxRange(true) == 0.0f && GetMaxRange(false) == 0.0f) + effectTargetMask &= ~(TARGET_FLAG_UNIT_MASK | TARGET_FLAG_GAMEOBJECT | TARGET_FLAG_CORPSE_MASK | TARGET_FLAG_DEST_LOCATION); + targetMask |= effectTargetMask; } return targetMask; } diff --git a/src/server/game/Spells/SpellInfo.h b/src/server/game/Spells/SpellInfo.h index f7bdbd52c5d..680652ea922 100644 --- a/src/server/game/Spells/SpellInfo.h +++ b/src/server/game/Spells/SpellInfo.h @@ -152,7 +152,6 @@ enum SpellEffectImplicitTargetTypes EFFECT_IMPLICIT_TARGET_NONE = 0, EFFECT_IMPLICIT_TARGET_EXPLICIT, EFFECT_IMPLICIT_TARGET_CASTER, - EFFECT_IMPLICIT_TARGET_PET, }; // Spell clasification |