Skip to content

Commit

Permalink
[12736] Allow targets 60 and 110 to use script target whenever required
Browse files Browse the repository at this point in the history
Also implement target 110 as TARGET_NARROW_FRONTAL_CONE_2

Close cmangos/issues#264
  • Loading branch information
xfurry committed Sep 16, 2014
1 parent 888c737 commit ec52a3f
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 5 deletions.
2 changes: 1 addition & 1 deletion src/game/SharedDefines.h
Original file line number Diff line number Diff line change
Expand Up @@ -1325,7 +1325,7 @@ enum Targets
TARGET_105 = 105, // 1 spell
TARGET_106 = 106,
TARGET_GO_IN_FRONT_OF_CASTER_90 = 108, // possible TARGET_WMO(GO?)_IN_FRONT_OF_CASTER(_30 ?) TODO: Verify the angle!
TARGET_110 = 110,
TARGET_NARROW_FRONTAL_CONE_2 = 110,
};

enum SpellMissInfo
Expand Down
53 changes: 51 additions & 2 deletions src/game/Spell.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2300,8 +2300,53 @@ void Spell::SetTargetMap(SpellEffectIndex effIndex, uint32 targetMode, UnitList&
FillAreaTargets(targetUnitMap, radius, PUSH_IN_FRONT_30, SPELL_TARGETS_FRIENDLY);
break;
case TARGET_NARROW_FRONTAL_CONE:
FillAreaTargets(targetUnitMap, radius, PUSH_IN_FRONT_15, SPELL_TARGETS_AOE_DAMAGE);
case TARGET_NARROW_FRONTAL_CONE_2:
{
SpellTargets targetB = SPELL_TARGETS_AOE_DAMAGE;

This comment has been minimized.

Copy link
@boxa

boxa Sep 17, 2014

Contributor

targetB is not used in code below...


if (m_spellInfo->Effect[effIndex] == SPELL_EFFECT_SCRIPT_EFFECT)
targetB = SPELL_TARGETS_ALL;

UnitList tempTargetUnitMap;
SQLMultiStorage::SQLMSIteratorBounds<SpellTargetEntry> bounds = sSpellScriptTargetStorage.getBounds<SpellTargetEntry>(m_spellInfo->Id);

// fill real target list if no spell script target defined
FillAreaTargets(bounds.first != bounds.second ? tempTargetUnitMap : targetUnitMap,
radius, PUSH_IN_FRONT_15, bounds.first != bounds.second ? SPELL_TARGETS_ALL : SPELL_TARGETS_AOE_DAMAGE);

This comment has been minimized.

Copy link
@boxa

boxa Sep 17, 2014

Contributor

should be here?
radius, PUSH_IN_FRONT_15, bounds.first != bounds.second ? SPELL_TARGETS_ALL : _targedB_);

i'm not understood logic...

but good commit for spell effects, for DB DEV =)

This comment has been minimized.

Copy link
@xfurry

xfurry Sep 17, 2014

Author Member

Thanks, I ran some tests and then I forgot to update this by mistake. Will fix in one of the next commits.


if (!tempTargetUnitMap.empty())
{
for (UnitList::const_iterator iter = tempTargetUnitMap.begin(); iter != tempTargetUnitMap.end(); ++iter)
{
if ((*iter)->GetTypeId() != TYPEID_UNIT)
continue;

for (SQLMultiStorage::SQLMultiSIterator<SpellTargetEntry> i_spellST = bounds.first; i_spellST != bounds.second; ++i_spellST)
{
if (i_spellST->CanNotHitWithSpellEffect(effIndex))
continue;

// only creature entries supported for this target type
if (i_spellST->type == SPELL_TARGET_TYPE_GAMEOBJECT)
continue;

if ((*iter)->GetEntry() == i_spellST->targetEntry)
{
if (i_spellST->type == SPELL_TARGET_TYPE_DEAD && ((Creature*)(*iter))->IsCorpse())
{
targetUnitMap.push_back((*iter));
}
else if (i_spellST->type == SPELL_TARGET_TYPE_CREATURE && (*iter)->isAlive())
{
targetUnitMap.push_back((*iter));
}
break;
}
}
}
}
break;
}
case TARGET_IN_FRONT_OF_CASTER_30:
FillAreaTargets(targetUnitMap, radius, PUSH_IN_FRONT_30, SPELL_TARGETS_AOE_DAMAGE);
break;
Expand Down Expand Up @@ -7079,7 +7124,11 @@ bool Spell::CheckTarget(Unit* target, SpellEffectIndex eff)
m_spellInfo->EffectImplicitTargetA[eff] != TARGET_AREAEFFECT_INSTANT &&
m_spellInfo->EffectImplicitTargetB[eff] != TARGET_AREAEFFECT_INSTANT &&
m_spellInfo->EffectImplicitTargetA[eff] != TARGET_AREAEFFECT_CUSTOM &&
m_spellInfo->EffectImplicitTargetB[eff] != TARGET_AREAEFFECT_CUSTOM)
m_spellInfo->EffectImplicitTargetB[eff] != TARGET_AREAEFFECT_CUSTOM &&
m_spellInfo->EffectImplicitTargetA[eff] != TARGET_NARROW_FRONTAL_CONE &&
m_spellInfo->EffectImplicitTargetB[eff] != TARGET_NARROW_FRONTAL_CONE &&
m_spellInfo->EffectImplicitTargetA[eff] != TARGET_NARROW_FRONTAL_CONE_2 &&
m_spellInfo->EffectImplicitTargetB[eff] != TARGET_NARROW_FRONTAL_CONE_2)
return false;
}

Expand Down
6 changes: 5 additions & 1 deletion src/game/SpellMgr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3362,7 +3362,11 @@ void SpellMgr::LoadSpellScriptTarget()
spellProto->EffectImplicitTargetA[i] == TARGET_AREAEFFECT_GO_AROUND_SOURCE ||
spellProto->EffectImplicitTargetB[i] == TARGET_AREAEFFECT_GO_AROUND_SOURCE ||
spellProto->EffectImplicitTargetA[i] == TARGET_AREAEFFECT_GO_AROUND_DEST ||
spellProto->EffectImplicitTargetB[i] == TARGET_AREAEFFECT_GO_AROUND_DEST)
spellProto->EffectImplicitTargetB[i] == TARGET_AREAEFFECT_GO_AROUND_DEST ||
spellProto->EffectImplicitTargetA[i] == TARGET_NARROW_FRONTAL_CONE ||
spellProto->EffectImplicitTargetB[i] == TARGET_NARROW_FRONTAL_CONE ||
spellProto->EffectImplicitTargetA[i] == TARGET_NARROW_FRONTAL_CONE_2 ||
spellProto->EffectImplicitTargetB[i] == TARGET_NARROW_FRONTAL_CONE_2)
{
targetfound = true;
break;
Expand Down
2 changes: 1 addition & 1 deletion src/shared/revision_nr.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__
#define __REVISION_NR_H__
#define REVISION_NR "12735"
#define REVISION_NR "12736"
#endif // __REVISION_NR_H__

0 comments on commit ec52a3f

Please sign in to comment.