Core/Spells: Drop EFFECT_IMPLICIT_TARGET_PET and use EFFECT_IMPLICIT_TARGET_EXPLICIT instead.
This commit is contained in:
@@ -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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4949,13 +4943,16 @@ SpellCastResult Spell::CheckCast(bool strict)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SPELL_EFFECT_LEARN_PET_SPELL:
|
case SPELL_EFFECT_LEARN_PET_SPELL:
|
||||||
|
{
|
||||||
|
// check target only for unit target case
|
||||||
|
if (Unit* unitTarget = m_targets.GetUnitTarget())
|
||||||
{
|
{
|
||||||
if (m_caster->GetTypeId() != TYPEID_PLAYER)
|
if (m_caster->GetTypeId() != TYPEID_PLAYER)
|
||||||
return SPELL_FAILED_BAD_TARGETS;
|
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);
|
||||||
|
|
||||||
@@ -4964,7 +4961,7 @@ SpellCastResult Spell::CheckCast(bool strict)
|
|||||||
|
|
||||||
if (m_spellInfo->SpellLevel > pet->getLevel())
|
if (m_spellInfo->SpellLevel > pet->getLevel())
|
||||||
return SPELL_FAILED_LOWLEVEL;
|
return SPELL_FAILED_LOWLEVEL;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SPELL_EFFECT_APPLY_GLYPH:
|
case SPELL_EFFECT_APPLY_GLYPH:
|
||||||
|
|||||||
@@ -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*/)
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user