Core/Spells: Drop EFFECT_IMPLICIT_TARGET_PET and use EFFECT_IMPLICIT_TARGET_EXPLICIT instead.

This commit is contained in:
QAston
2011-09-24 02:02:39 +02:00
parent 71bbbaa21b
commit d01a761f53
4 changed files with 31 additions and 31 deletions
+14 -17
View File
@@ -844,12 +844,6 @@ void Spell::SelectEffectTypeImplicitTargets(uint8 effIndex)
if (targetMask & TARGET_FLAG_UNIT_MASK) if (targetMask & TARGET_FLAG_UNIT_MASK)
AddUnitTarget(m_caster, 1 << effIndex, false); AddUnitTarget(m_caster, 1 << effIndex, false);
break; 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: case SPELL_EFFECT_LEARN_PET_SPELL:
{ {
if (m_caster->GetTypeId() != TYPEID_PLAYER) // check target only for unit target case
return SPELL_FAILED_BAD_TARGETS; if (Unit* unitTarget = m_targets.GetUnitTarget())
{
if (m_caster->GetTypeId() != TYPEID_PLAYER)
return SPELL_FAILED_BAD_TARGETS;
Pet* pet = m_caster->ToPlayer()->GetPet(); Pet* pet = unitTarget->ToPet();
if (!pet) if (!pet || pet->GetOwner() != m_caster)
return SPELL_FAILED_NO_PET; return SPELL_FAILED_BAD_TARGETS;
SpellInfo const* learn_spellproto = sSpellMgr->GetSpellInfo(m_spellInfo->Effects[i].TriggerSpell); SpellInfo const* learn_spellproto = sSpellMgr->GetSpellInfo(m_spellInfo->Effects[i].TriggerSpell);
if (!learn_spellproto) if (!learn_spellproto)
return SPELL_FAILED_NOT_KNOWN; return SPELL_FAILED_NOT_KNOWN;
if (m_spellInfo->SpellLevel > pet->getLevel())
return SPELL_FAILED_LOWLEVEL;
if (m_spellInfo->SpellLevel > pet->getLevel())
return SPELL_FAILED_LOWLEVEL;
}
break; break;
} }
case SPELL_EFFECT_APPLY_GLYPH: case SPELL_EFFECT_APPLY_GLYPH:
+10 -11
View File
@@ -3091,13 +3091,12 @@ void Spell::EffectLearnSpell(SpellEffIndex effIndex)
if (unitTarget->GetTypeId() != TYPEID_PLAYER) if (unitTarget->GetTypeId() != TYPEID_PLAYER)
{ {
if (m_caster->GetTypeId() == TYPEID_PLAYER) if (unitTarget->ToPet())
EffectLearnPetSpell(effIndex); EffectLearnPetSpell(effIndex);
return; 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; uint32 spellToLearn = (m_spellInfo->Id == 483 || m_spellInfo->Id == 55884) ? damage : m_spellInfo->Effects[effIndex].TriggerSpell;
player->learnSpell(spellToLearn, false); player->learnSpell(spellToLearn, false);
@@ -3782,25 +3781,25 @@ void Spell::EffectSummonPet(SpellEffIndex effIndex)
void Spell::EffectLearnPetSpell(SpellEffIndex effIndex) void Spell::EffectLearnPetSpell(SpellEffIndex effIndex)
{ {
if (m_caster->GetTypeId() != TYPEID_PLAYER) if (!unitTarget)
return; return;
Player* _player = m_caster->ToPlayer(); if (unitTarget->ToPlayer())
{
Pet* pet = _player->GetPet(); EffectLearnSpell(effIndex);
return;
}
Pet* pet = unitTarget->ToPet();
if (!pet) if (!pet)
return; return;
if (!pet->isAlive())
return;
SpellInfo const* learn_spellproto = sSpellMgr->GetSpellInfo(m_spellInfo->Effects[effIndex].TriggerSpell); SpellInfo const* learn_spellproto = sSpellMgr->GetSpellInfo(m_spellInfo->Effects[effIndex].TriggerSpell);
if (!learn_spellproto) if (!learn_spellproto)
return; return;
pet->learnSpell(learn_spellproto->Id); pet->learnSpell(learn_spellproto->Id);
pet->SavePetToDB(PET_SAVE_AS_CURRENT); pet->SavePetToDB(PET_SAVE_AS_CURRENT);
_player->PetSpellInitialize(); pet->GetOwner()->PetSpellInitialize();
} }
void Spell::EffectTaunt(SpellEffIndex /*effIndex*/) void Spell::EffectTaunt(SpellEffIndex /*effIndex*/)
+7 -2
View File
@@ -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_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_UNIT}, // 55 SPELL_EFFECT_TAMECREATURE
{EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_DEST}, // 56 SPELL_EFFECT_SUMMON_PET {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}, // 58 SPELL_EFFECT_WEAPON_DAMAGE
{EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_UNIT}, // 59 SPELL_EFFECT_CREATE_RANDOM_ITEM {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 {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_UNIT}, // 60 SPELL_EFFECT_PROFICIENCY
@@ -2235,7 +2235,12 @@ uint32 SpellInfo::_GetExplicitTargetMask() const
continue; continue;
// extend explicit target mask only if valid targets for effect could not be provided by target types // 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; return targetMask;
} }
-1
View File
@@ -152,7 +152,6 @@ enum SpellEffectImplicitTargetTypes
EFFECT_IMPLICIT_TARGET_NONE = 0, EFFECT_IMPLICIT_TARGET_NONE = 0,
EFFECT_IMPLICIT_TARGET_EXPLICIT, EFFECT_IMPLICIT_TARGET_EXPLICIT,
EFFECT_IMPLICIT_TARGET_CASTER, EFFECT_IMPLICIT_TARGET_CASTER,
EFFECT_IMPLICIT_TARGET_PET,
}; };
// Spell clasification // Spell clasification