aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorQAston <qaston@gmail.com>2011-09-24 02:01:18 +0200
committerQAston <qaston@gmail.com>2011-09-24 02:02:39 +0200
commitd01a761f5347cbfe5d4b2812aad44d0163bc5d66 (patch)
tree4d1b4627b0f8e250c74b679173bc5f8d9f180780 /src
parent71bbbaa21b03b31a796308dbfe968904c769967f (diff)
Core/Spells: Drop EFFECT_IMPLICIT_TARGET_PET and use EFFECT_IMPLICIT_TARGET_EXPLICIT instead.
Diffstat (limited to 'src')
-rwxr-xr-xsrc/server/game/Spells/Spell.cpp31
-rwxr-xr-xsrc/server/game/Spells/SpellEffects.cpp21
-rw-r--r--src/server/game/Spells/SpellInfo.cpp9
-rw-r--r--src/server/game/Spells/SpellInfo.h1
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