diff options
author | QAston <qaston@gmail.com> | 2011-08-24 08:53:26 +0200 |
---|---|---|
committer | QAston <qaston@gmail.com> | 2011-08-24 08:53:26 +0200 |
commit | 1178cee836c1d230ad1f8fb1bf8b64d61149ff3d (patch) | |
tree | 585821b5525c3adb9f0f58c45686cd539e1f33af /src | |
parent | 7f30ac5a9549746d19af9ca4cfc1ad7b8d2f1f4c (diff) |
Core/Spells: Small correction to: 7f30ac5a9549746d19af - TARGET_DEST_TRAJ targets should require both src and dst target provided.
Diffstat (limited to 'src')
-rwxr-xr-x | src/server/game/Spells/Spell.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Spells/SpellInfo.cpp | 109 |
2 files changed, 66 insertions, 45 deletions
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 8b226d3aac1..84d31449c41 100755 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -648,7 +648,7 @@ void Spell::InitExplicitTargets(SpellCastTargets const& targets) if (!targets.GetDst()) { // try to use unit target if provided - if (Unit* target = m_targets.GetUnitTarget()) + if (Unit* target = targets.GetUnitTarget()) m_targets.SetDst(*target); // or use self if not available else diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index d84e32379a7..3f4af08f10c 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -119,6 +119,70 @@ Targets SpellImplicitTargetInfo::GetTarget() const uint32 SpellImplicitTargetInfo::GetExplicitTargetMask(bool& srcSet, bool& dstSet) const { + uint32 targetMask = 0; + if (GetTarget() == TARGET_DEST_TRAJ) + { + if (!srcSet) + targetMask = TARGET_FLAG_SOURCE_LOCATION; + if (!dstSet) + targetMask |= TARGET_FLAG_DEST_LOCATION; + } + else + { + switch (GetReferenceType()) + { + case TARGET_REFERENCE_TYPE_SRC: + if (srcSet) + break; + targetMask = TARGET_FLAG_SOURCE_LOCATION; + break; + case TARGET_REFERENCE_TYPE_DEST: + if (dstSet) + break; + targetMask = TARGET_FLAG_DEST_LOCATION; + break; + case TARGET_REFERENCE_TYPE_TARGET: + switch (GetObjectType()) + { + case TARGET_OBJECT_TYPE_GOBJ: + targetMask = TARGET_FLAG_GAMEOBJECT; + break; + case TARGET_OBJECT_TYPE_GOBJ_ITEM: + targetMask = TARGET_FLAG_GAMEOBJECT_ITEM; + break; + case TARGET_OBJECT_TYPE_UNIT_AND_DEST: + case TARGET_OBJECT_TYPE_UNIT: + switch (GetSelectionCheckType()) + { + case TARGET_SELECT_CHECK_ENEMY: + targetMask = TARGET_FLAG_UNIT_ENEMY; + break; + case TARGET_SELECT_CHECK_ALLY: + targetMask = TARGET_FLAG_UNIT_ALLY; + break; + case TARGET_SELECT_CHECK_PARTY: + targetMask = TARGET_FLAG_UNIT_PARTY; + break; + case TARGET_SELECT_CHECK_RAID: + targetMask = TARGET_FLAG_UNIT_RAID; + break; + case TARGET_SELECT_CHECK_PASSENGER: + targetMask = TARGET_FLAG_UNIT_PASSENGER; + break; + default: + targetMask = TARGET_FLAG_UNIT; + break; + } + break; + default: + break; + } + break; + default: + break; + } + } + switch (GetObjectType()) { case TARGET_OBJECT_TYPE_SRC: @@ -131,50 +195,7 @@ uint32 SpellImplicitTargetInfo::GetExplicitTargetMask(bool& srcSet, bool& dstSet default: break; } - - switch (GetReferenceType()) - { - case TARGET_REFERENCE_TYPE_SRC: - if (srcSet) - break; - return TARGET_FLAG_SOURCE_LOCATION; - case TARGET_REFERENCE_TYPE_DEST: - if (dstSet) - break; - return TARGET_FLAG_DEST_LOCATION; - case TARGET_REFERENCE_TYPE_TARGET: - switch (GetObjectType()) - { - case TARGET_OBJECT_TYPE_GOBJ: - return TARGET_FLAG_GAMEOBJECT; - case TARGET_OBJECT_TYPE_GOBJ_ITEM: - return TARGET_FLAG_GAMEOBJECT_ITEM; - case TARGET_OBJECT_TYPE_UNIT_AND_DEST: - case TARGET_OBJECT_TYPE_UNIT: - switch (GetSelectionCheckType()) - { - case TARGET_SELECT_CHECK_ENEMY: - return TARGET_FLAG_UNIT_ENEMY; - case TARGET_SELECT_CHECK_ALLY: - return TARGET_FLAG_UNIT_ALLY; - case TARGET_SELECT_CHECK_PARTY: - return TARGET_FLAG_UNIT_PARTY; - case TARGET_SELECT_CHECK_RAID: - return TARGET_FLAG_UNIT_RAID; - case TARGET_SELECT_CHECK_PASSENGER: - return TARGET_FLAG_UNIT_PASSENGER; - default: - return TARGET_FLAG_UNIT; - } - break; - default: - break; - } - break; - default: - break; - } - return TARGET_FLAG_NONE; + return targetMask; } bool SpellImplicitTargetInfo::IsPosition(uint32 targetType) |