mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 13:37:05 +00:00
[10842] Allow fill DB table spell_script_target for TARGET_AREAEFFECT_INSTANT(7)
Without any database entries for spell, spell will work like before. Valid targets filled to database can only be creature type (corpse or alive). Signed-off-by: NoFantasy <nofantasy@nf.no>
This commit is contained in:
parent
08b32d7d32
commit
1b4209699f
3 changed files with 42 additions and 2 deletions
|
|
@ -1788,11 +1788,47 @@ void Spell::SetTargetMap(SpellEffectIndex effIndex, uint32 targetMode, UnitList&
|
||||||
case TARGET_AREAEFFECT_INSTANT:
|
case TARGET_AREAEFFECT_INSTANT:
|
||||||
{
|
{
|
||||||
SpellTargets targetB = SPELL_TARGETS_AOE_DAMAGE;
|
SpellTargets targetB = SPELL_TARGETS_AOE_DAMAGE;
|
||||||
|
|
||||||
// Select friendly targets for positive effect
|
// Select friendly targets for positive effect
|
||||||
if (IsPositiveEffect(m_spellInfo->Id, effIndex))
|
if (IsPositiveEffect(m_spellInfo->Id, effIndex))
|
||||||
targetB = SPELL_TARGETS_FRIENDLY;
|
targetB = SPELL_TARGETS_FRIENDLY;
|
||||||
|
|
||||||
FillAreaTargets(targetUnitMap, m_caster->GetPositionX(), m_caster->GetPositionY(), radius, PUSH_DEST_CENTER, targetB);
|
UnitList tempTargetUnitMap;
|
||||||
|
SpellScriptTargetBounds bounds = sSpellMgr.GetSpellScriptTargetBounds(m_spellInfo->Id);
|
||||||
|
|
||||||
|
// fill real target list if no spell script target defined
|
||||||
|
FillAreaTargets(bounds.first != bounds.second ? tempTargetUnitMap : targetUnitMap,
|
||||||
|
m_caster->GetPositionX(), m_caster->GetPositionY(), radius, PUSH_DEST_CENTER, bounds.first != bounds.second ? SPELL_TARGETS_ALL : targetB);
|
||||||
|
|
||||||
|
if (!tempTargetUnitMap.empty())
|
||||||
|
{
|
||||||
|
for (UnitList::const_iterator iter = tempTargetUnitMap.begin(); iter != tempTargetUnitMap.end(); ++iter)
|
||||||
|
{
|
||||||
|
if ((*iter)->GetTypeId() != TYPEID_UNIT)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
for(SpellScriptTarget::const_iterator i_spellST = bounds.first; i_spellST != bounds.second; ++i_spellST)
|
||||||
|
{
|
||||||
|
// only creature entries supported for this target type
|
||||||
|
if (i_spellST->second.type == SPELL_TARGET_TYPE_GAMEOBJECT)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if ((*iter)->GetEntry() == i_spellST->second.targetEntry)
|
||||||
|
{
|
||||||
|
if (i_spellST->second.type == SPELL_TARGET_TYPE_DEAD && ((Creature*)(*iter))->IsCorpse())
|
||||||
|
{
|
||||||
|
targetUnitMap.push_back((*iter));
|
||||||
|
}
|
||||||
|
else if (i_spellST->second.type == SPELL_TARGET_TYPE_CREATURE && (*iter)->isAlive())
|
||||||
|
{
|
||||||
|
targetUnitMap.push_back((*iter));
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// exclude caster
|
// exclude caster
|
||||||
targetUnitMap.remove(m_caster);
|
targetUnitMap.remove(m_caster);
|
||||||
|
|
@ -6348,6 +6384,8 @@ bool Spell::CheckTarget( Unit* target, SpellEffectIndex eff )
|
||||||
target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE) &&
|
target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE) &&
|
||||||
m_spellInfo->EffectImplicitTargetA[eff] != TARGET_SCRIPT &&
|
m_spellInfo->EffectImplicitTargetA[eff] != TARGET_SCRIPT &&
|
||||||
m_spellInfo->EffectImplicitTargetB[eff] != TARGET_SCRIPT &&
|
m_spellInfo->EffectImplicitTargetB[eff] != TARGET_SCRIPT &&
|
||||||
|
m_spellInfo->EffectImplicitTargetA[eff] != TARGET_AREAEFFECT_INSTANT &&
|
||||||
|
m_spellInfo->EffectImplicitTargetB[eff] != TARGET_AREAEFFECT_INSTANT &&
|
||||||
m_spellInfo->EffectImplicitTargetA[eff] != TARGET_AREAEFFECT_CUSTOM &&
|
m_spellInfo->EffectImplicitTargetA[eff] != TARGET_AREAEFFECT_CUSTOM &&
|
||||||
m_spellInfo->EffectImplicitTargetB[eff] != TARGET_AREAEFFECT_CUSTOM )
|
m_spellInfo->EffectImplicitTargetB[eff] != TARGET_AREAEFFECT_CUSTOM )
|
||||||
return false;
|
return false;
|
||||||
|
|
|
||||||
|
|
@ -2960,6 +2960,8 @@ void SpellMgr::LoadSpellScriptTarget()
|
||||||
spellProto->EffectImplicitTargetB[i] == TARGET_SCRIPT_COORDINATES ||
|
spellProto->EffectImplicitTargetB[i] == TARGET_SCRIPT_COORDINATES ||
|
||||||
spellProto->EffectImplicitTargetA[i] == TARGET_FOCUS_OR_SCRIPTED_GAMEOBJECT ||
|
spellProto->EffectImplicitTargetA[i] == TARGET_FOCUS_OR_SCRIPTED_GAMEOBJECT ||
|
||||||
spellProto->EffectImplicitTargetB[i] == TARGET_FOCUS_OR_SCRIPTED_GAMEOBJECT ||
|
spellProto->EffectImplicitTargetB[i] == TARGET_FOCUS_OR_SCRIPTED_GAMEOBJECT ||
|
||||||
|
spellProto->EffectImplicitTargetA[i] == TARGET_AREAEFFECT_INSTANT ||
|
||||||
|
spellProto->EffectImplicitTargetB[i] == TARGET_AREAEFFECT_INSTANT ||
|
||||||
spellProto->EffectImplicitTargetA[i] == TARGET_AREAEFFECT_CUSTOM ||
|
spellProto->EffectImplicitTargetA[i] == TARGET_AREAEFFECT_CUSTOM ||
|
||||||
spellProto->EffectImplicitTargetB[i] == TARGET_AREAEFFECT_CUSTOM)
|
spellProto->EffectImplicitTargetB[i] == TARGET_AREAEFFECT_CUSTOM)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "10841"
|
#define REVISION_NR "10842"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue