aboutsummaryrefslogtreecommitdiff
path: root/src/server/game
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2021-10-03 19:58:03 +0200
committerShauren <shauren.trinity@gmail.com>2021-10-03 19:58:03 +0200
commitcbf1f2883ad1bc611f08af4838d892bf13057490 (patch)
tree98bf2a96df0e362b798986166d5625d5d979154b /src/server/game
parent555b2d40ecc22eb0ea4bf913b534ffa7197fa6fe (diff)
Core/Spells: Reduce number of CastSpell overloads to 1
Diffstat (limited to 'src/server/game')
-rw-r--r--src/server/game/Entities/Object/Object.cpp35
-rw-r--r--src/server/game/Entities/Object/Object.h4
-rw-r--r--src/server/game/Spells/Spell.cpp17
-rw-r--r--src/server/game/Spells/Spell.h113
-rw-r--r--src/server/game/Spells/SpellDefines.h180
-rw-r--r--src/server/game/Spells/SpellEffects.cpp10
-rw-r--r--src/server/game/Spells/SpellInfo.h37
7 files changed, 208 insertions, 188 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index 130f6ffd8d9..5eac3047a38 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -2629,7 +2629,7 @@ bool WorldObject::IsNeutralToAll() const
return my_faction->IsNeutralToAll();
}
-void WorldObject::CastSpell(SpellCastTargets const& targets, uint32 spellId, CastSpellExtraArgs const& args /*= { }*/)
+void WorldObject::CastSpell(CastSpellTargetArg const& targets, uint32 spellId, CastSpellExtraArgs const& args /*= { }*/)
{
SpellInfo const* info = sSpellMgr->GetSpellInfo(spellId, args.CastDifficulty != DIFFICULTY_NONE ? args.CastDifficulty : GetMap()->GetDifficultyID());
if (!info)
@@ -2638,37 +2638,18 @@ void WorldObject::CastSpell(SpellCastTargets const& targets, uint32 spellId, Cas
return;
}
+ if (!targets.Targets)
+ {
+ TC_LOG_ERROR("entities.unit", "CastSpell: Invalid target passed to spell cast %u by %s", spellId, GetGUID().ToString().c_str());
+ return;
+ }
+
Spell* spell = new Spell(this, info, args.TriggerFlags, args.OriginalCaster, args.OriginalCastId);
for (auto const& pair : args.SpellValueOverrides)
spell->SetSpellValue(pair.first, pair.second);
spell->m_CastItem = args.CastItem;
- spell->prepare(targets, args.TriggeringAura);
-}
-
-void WorldObject::CastSpell(WorldObject* target, uint32 spellId, CastSpellExtraArgs const& args /*= { }*/)
-{
- SpellCastTargets targets;
- if (target)
- {
- if (Unit* unitTarget = target->ToUnit())
- targets.SetUnitTarget(unitTarget);
- else if (GameObject* goTarget = target->ToGameObject())
- targets.SetGOTarget(goTarget);
- else
- {
- TC_LOG_ERROR("entities.unit", "CastSpell: Invalid target %s passed to spell cast by %s", target->GetGUID().ToString().c_str(), GetGUID().ToString().c_str());
- return;
- }
- }
- CastSpell(targets, spellId, args);
-}
-
-void WorldObject::CastSpell(Position const& dest, uint32 spellId, CastSpellExtraArgs const& args /*= { }*/)
-{
- SpellCastTargets targets;
- targets.SetDst(dest);
- CastSpell(targets, spellId, args);
+ spell->prepare(*targets.Targets, args.TriggeringAura);
}
// function based on function Unit::CanAttack from 13850 client
diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h
index 3a51700cc63..874d45ea7c5 100644
--- a/src/server/game/Entities/Object/Object.h
+++ b/src/server/game/Entities/Object/Object.h
@@ -596,9 +596,7 @@ class TC_GAME_API WorldObject : public Object, public WorldLocation
bool IsNeutralToAll() const;
// CastSpell's third arg can be a variety of things - check out CastSpellExtraArgs' constructors!
- void CastSpell(SpellCastTargets const& targets, uint32 spellId, CastSpellExtraArgs const& args = { });
- void CastSpell(WorldObject* target, uint32 spellId, CastSpellExtraArgs const& args = { });
- void CastSpell(Position const& dest, uint32 spellId, CastSpellExtraArgs const& args = { });
+ void CastSpell(CastSpellTargetArg const& targets, uint32 spellId, CastSpellExtraArgs const& args = { });
bool IsValidAttackTarget(WorldObject const* target, SpellInfo const* bySpell = nullptr) const;
bool IsValidAssistTarget(WorldObject const* target, SpellInfo const* bySpell = nullptr) const;
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 7e39f489e6d..233a0cdcddf 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -8370,6 +8370,23 @@ bool WorldObjectSpellLineTargetCheck::operator()(WorldObject* target) const
} //namespace Trinity
+CastSpellTargetArg::CastSpellTargetArg(WorldObject* target)
+{
+ if (target)
+ {
+ if (Unit* unitTarget = target->ToUnit())
+ {
+ Targets.emplace();
+ Targets->SetUnitTarget(unitTarget);
+ }
+ else if (GameObject* goTarget = target->ToGameObject())
+ {
+ Targets.emplace();
+ Targets->SetGOTarget(goTarget);
+ }
+ }
+}
+
CastSpellExtraArgs& CastSpellExtraArgs::SetTriggeringAura(AuraEffect const* triggeringAura)
{
TriggeringAura = triggeringAura;
diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h
index da84d0e8a48..2817944ff8c 100644
--- a/src/server/game/Spells/Spell.h
+++ b/src/server/game/Spells/Spell.h
@@ -31,8 +31,6 @@ namespace WorldPackets
{
namespace Spells
{
- struct SpellCastRequest;
- struct SpellTargetData;
struct SpellAmmo;
struct SpellCastData;
}
@@ -62,7 +60,6 @@ struct SummonPropertiesEntry;
enum AuraType : uint32;
enum CurrentSpellTypes : uint8;
enum LootType : uint8;
-enum SpellCastTargetFlags : uint32;
enum SpellTargetCheckTypes : uint8;
enum SpellTargetObjectTypes : uint8;
enum SpellValueMod : uint8;
@@ -153,22 +150,6 @@ enum SpellRangeFlag
SPELL_RANGE_RANGED = 2 //hunter range and ranged weapon
};
-struct TC_GAME_API SpellDestination
-{
- SpellDestination();
- SpellDestination(float x, float y, float z, float orientation = 0.0f, uint32 mapId = MAPID_INVALID);
- SpellDestination(Position const& pos);
- SpellDestination(WorldObject const& wObj);
-
- void Relocate(Position const& pos);
- void RelocateOffset(Position const& offset);
-
- WorldLocation _position;
- ObjectGuid _transportGUID;
- Position _transportOffset;
-};
-
-
struct SpellLogEffectPowerDrainParams
{
ObjectGuid Victim;
@@ -217,100 +198,6 @@ struct SpellLogEffect
Optional<std::vector<SpellLogEffectFeedPetParams>> FeedPetTargets;
};
-class TC_GAME_API SpellCastTargets
-{
- public:
- SpellCastTargets();
- SpellCastTargets(Unit* caster, WorldPackets::Spells::SpellCastRequest const& spellCastRequest);
- ~SpellCastTargets();
-
- void Write(WorldPackets::Spells::SpellTargetData& data);
-
- uint32 GetTargetMask() const { return m_targetMask; }
- void SetTargetMask(uint32 newMask) { m_targetMask = newMask; }
-
- void SetTargetFlag(SpellCastTargetFlags flag) { m_targetMask |= flag; }
-
- ObjectGuid GetOrigUnitTargetGUID() const;
- void SetOrigUnitTarget(Unit* target);
-
- ObjectGuid GetUnitTargetGUID() const;
- Unit* GetUnitTarget() const;
- void SetUnitTarget(Unit* target);
-
- ObjectGuid GetGOTargetGUID() const;
- GameObject* GetGOTarget() const;
- void SetGOTarget(GameObject* target);
-
- ObjectGuid GetCorpseTargetGUID() const;
- Corpse* GetCorpseTarget() const;
-
- WorldObject* GetObjectTarget() const;
- ObjectGuid GetObjectTargetGUID() const;
- void RemoveObjectTarget();
-
- ObjectGuid GetItemTargetGUID() const { return m_itemTargetGUID; }
- Item* GetItemTarget() const { return m_itemTarget; }
- uint32 GetItemTargetEntry() const { return m_itemTargetEntry; }
- void SetItemTarget(Item* item);
- void SetTradeItemTarget(Player* caster);
- void UpdateTradeSlotItem();
-
- SpellDestination const* GetSrc() const;
- Position const* GetSrcPos() const;
- void SetSrc(float x, float y, float z);
- void SetSrc(Position const& pos);
- void SetSrc(WorldObject const& wObj);
- void ModSrc(Position const& pos);
- void RemoveSrc();
-
- SpellDestination const* GetDst() const;
- WorldLocation const* GetDstPos() const;
- void SetDst(float x, float y, float z, float orientation, uint32 mapId = MAPID_INVALID);
- void SetDst(Position const& pos);
- void SetDst(WorldObject const& wObj);
- void SetDst(SpellDestination const& spellDest);
- void SetDst(SpellCastTargets const& spellTargets);
- void ModDst(Position const& pos);
- void ModDst(SpellDestination const& spellDest);
- void RemoveDst();
-
- bool HasSrc() const;
- bool HasDst() const;
- bool HasTraj() const { return m_speed != 0; }
-
- float GetPitch() const { return m_pitch; }
- void SetPitch(float pitch) { m_pitch = pitch; }
- float GetSpeed() const { return m_speed; }
- void SetSpeed(float speed) { m_speed = speed; }
-
- float GetDist2d() const { return m_src._position.GetExactDist2d(&m_dst._position); }
- float GetSpeedXY() const { return m_speed * std::cos(m_pitch); }
- float GetSpeedZ() const { return m_speed * std::sin(m_pitch); }
-
- void Update(WorldObject* caster);
- std::string GetTargetString() const { return m_strTarget; }
-
- private:
- uint32 m_targetMask;
-
- // objects (can be used at spell creating and after Update at casting)
- WorldObject* m_objectTarget;
- Item* m_itemTarget;
-
- // object GUID/etc, can be used always
- ObjectGuid m_origObjectTargetGUID;
- ObjectGuid m_objectTargetGUID;
- ObjectGuid m_itemTargetGUID;
- uint32 m_itemTargetEntry;
-
- SpellDestination m_src;
- SpellDestination m_dst;
-
- float m_pitch, m_speed;
- std::string m_strTarget;
-};
-
struct SpellValue
{
explicit SpellValue(SpellInfo const* proto, WorldObject const* caster);
diff --git a/src/server/game/Spells/SpellDefines.h b/src/server/game/Spells/SpellDefines.h
index 1c291da669e..337c039e3a1 100644
--- a/src/server/game/Spells/SpellDefines.h
+++ b/src/server/game/Spells/SpellDefines.h
@@ -21,10 +21,17 @@
#include "Define.h"
#include "EnumFlag.h"
#include "ObjectGuid.h"
+#include "Optional.h"
+#include "Position.h"
#include <vector>
-class Item;
class AuraEffect;
+class Corpse;
+class GameObject;
+class Item;
+class Player;
+class Unit;
+class WorldObject;
enum Difficulty : uint8;
namespace UF
@@ -36,7 +43,9 @@ namespace WorldPackets
{
namespace Spells
{
+ struct SpellCastRequest;
struct SpellCastVisual;
+ struct SpellTargetData;
}
}
@@ -251,6 +260,175 @@ enum TriggerCastFlags : uint32
TRIGGERED_FULL_DEBUG_MASK = 0xFFFFFFFF
};
+enum SpellCastTargetFlags : uint32
+{
+ TARGET_FLAG_NONE = 0x00000000,
+ TARGET_FLAG_UNUSED_1 = 0x00000001, // not used
+ TARGET_FLAG_UNIT = 0x00000002, // pguid
+ TARGET_FLAG_UNIT_RAID = 0x00000004, // not sent, used to validate target (if raid member)
+ TARGET_FLAG_UNIT_PARTY = 0x00000008, // not sent, used to validate target (if party member)
+ TARGET_FLAG_ITEM = 0x00000010, // pguid
+ TARGET_FLAG_SOURCE_LOCATION = 0x00000020, // pguid, 3 float
+ TARGET_FLAG_DEST_LOCATION = 0x00000040, // pguid, 3 float
+ TARGET_FLAG_UNIT_ENEMY = 0x00000080, // not sent, used to validate target (if enemy)
+ TARGET_FLAG_UNIT_ALLY = 0x00000100, // not sent, used to validate target (if ally)
+ TARGET_FLAG_CORPSE_ENEMY = 0x00000200, // pguid
+ TARGET_FLAG_UNIT_DEAD = 0x00000400, // not sent, used to validate target (if dead creature)
+ TARGET_FLAG_GAMEOBJECT = 0x00000800, // pguid, used with TARGET_GAMEOBJECT_TARGET
+ TARGET_FLAG_TRADE_ITEM = 0x00001000, // pguid
+ TARGET_FLAG_STRING = 0x00002000, // string
+ TARGET_FLAG_GAMEOBJECT_ITEM = 0x00004000, // not sent, used with TARGET_GAMEOBJECT_ITEM_TARGET
+ TARGET_FLAG_CORPSE_ALLY = 0x00008000, // pguid
+ TARGET_FLAG_UNIT_MINIPET = 0x00010000, // pguid, used to validate target (if non combat pet)
+ TARGET_FLAG_GLYPH_SLOT = 0x00020000, // used in glyph spells
+ TARGET_FLAG_DEST_TARGET = 0x00040000, // sometimes appears with DEST_TARGET spells (may appear or not for a given spell)
+ TARGET_FLAG_EXTRA_TARGETS = 0x00080000, // uint32 counter, loop { vec3 - screen position (?), guid }, not used so far
+ TARGET_FLAG_UNIT_PASSENGER = 0x00100000, // guessed, used to validate target (if vehicle passenger)
+ TARGET_FLAG_UNK400000 = 0X00400000,
+ TARGET_FLAG_UNK1000000 = 0X01000000,
+ TARGET_FLAG_UNK4000000 = 0X04000000,
+ TARGET_FLAG_UNK10000000 = 0X10000000,
+ TARGET_FLAG_UNK40000000 = 0X40000000,
+
+ TARGET_FLAG_UNIT_MASK = TARGET_FLAG_UNIT | TARGET_FLAG_UNIT_RAID | TARGET_FLAG_UNIT_PARTY
+ | TARGET_FLAG_UNIT_ENEMY | TARGET_FLAG_UNIT_ALLY | TARGET_FLAG_UNIT_DEAD | TARGET_FLAG_UNIT_MINIPET | TARGET_FLAG_UNIT_PASSENGER,
+ TARGET_FLAG_GAMEOBJECT_MASK = TARGET_FLAG_GAMEOBJECT | TARGET_FLAG_GAMEOBJECT_ITEM,
+ TARGET_FLAG_CORPSE_MASK = TARGET_FLAG_CORPSE_ALLY | TARGET_FLAG_CORPSE_ENEMY,
+ TARGET_FLAG_ITEM_MASK = TARGET_FLAG_TRADE_ITEM | TARGET_FLAG_ITEM | TARGET_FLAG_GAMEOBJECT_ITEM
+};
+
+struct TC_GAME_API SpellDestination
+{
+ SpellDestination();
+ SpellDestination(float x, float y, float z, float orientation = 0.0f, uint32 mapId = MAPID_INVALID);
+ SpellDestination(Position const& pos);
+ SpellDestination(WorldObject const& wObj);
+
+ void Relocate(Position const& pos);
+ void RelocateOffset(Position const& offset);
+
+ WorldLocation _position;
+ ObjectGuid _transportGUID;
+ Position _transportOffset;
+};
+
+class TC_GAME_API SpellCastTargets
+{
+public:
+ SpellCastTargets();
+ SpellCastTargets(Unit* caster, WorldPackets::Spells::SpellCastRequest const& spellCastRequest);
+ ~SpellCastTargets();
+
+ void Write(WorldPackets::Spells::SpellTargetData& data);
+
+ uint32 GetTargetMask() const { return m_targetMask; }
+ void SetTargetMask(uint32 newMask) { m_targetMask = newMask; }
+
+ void SetTargetFlag(SpellCastTargetFlags flag) { m_targetMask |= flag; }
+
+ ObjectGuid GetOrigUnitTargetGUID() const;
+ void SetOrigUnitTarget(Unit* target);
+
+ ObjectGuid GetUnitTargetGUID() const;
+ Unit* GetUnitTarget() const;
+ void SetUnitTarget(Unit* target);
+
+ ObjectGuid GetGOTargetGUID() const;
+ GameObject* GetGOTarget() const;
+ void SetGOTarget(GameObject* target);
+
+ ObjectGuid GetCorpseTargetGUID() const;
+ Corpse* GetCorpseTarget() const;
+
+ WorldObject* GetObjectTarget() const;
+ ObjectGuid GetObjectTargetGUID() const;
+ void RemoveObjectTarget();
+
+ ObjectGuid GetItemTargetGUID() const { return m_itemTargetGUID; }
+ Item* GetItemTarget() const { return m_itemTarget; }
+ uint32 GetItemTargetEntry() const { return m_itemTargetEntry; }
+ void SetItemTarget(Item* item);
+ void SetTradeItemTarget(Player* caster);
+ void UpdateTradeSlotItem();
+
+ SpellDestination const* GetSrc() const;
+ Position const* GetSrcPos() const;
+ void SetSrc(float x, float y, float z);
+ void SetSrc(Position const& pos);
+ void SetSrc(WorldObject const& wObj);
+ void ModSrc(Position const& pos);
+ void RemoveSrc();
+
+ SpellDestination const* GetDst() const;
+ WorldLocation const* GetDstPos() const;
+ void SetDst(float x, float y, float z, float orientation, uint32 mapId = MAPID_INVALID);
+ void SetDst(Position const& pos);
+ void SetDst(WorldObject const& wObj);
+ void SetDst(SpellDestination const& spellDest);
+ void SetDst(SpellCastTargets const& spellTargets);
+ void ModDst(Position const& pos);
+ void ModDst(SpellDestination const& spellDest);
+ void RemoveDst();
+
+ bool HasSrc() const;
+ bool HasDst() const;
+ bool HasTraj() const { return m_speed != 0; }
+
+ float GetPitch() const { return m_pitch; }
+ void SetPitch(float pitch) { m_pitch = pitch; }
+ float GetSpeed() const { return m_speed; }
+ void SetSpeed(float speed) { m_speed = speed; }
+
+ float GetDist2d() const { return m_src._position.GetExactDist2d(&m_dst._position); }
+ float GetSpeedXY() const { return m_speed * std::cos(m_pitch); }
+ float GetSpeedZ() const { return m_speed * std::sin(m_pitch); }
+
+ void Update(WorldObject* caster);
+ std::string GetTargetString() const { return m_strTarget; }
+
+private:
+ uint32 m_targetMask;
+
+ // objects (can be used at spell creating and after Update at casting)
+ WorldObject* m_objectTarget;
+ Item* m_itemTarget;
+
+ // object GUID/etc, can be used always
+ ObjectGuid m_origObjectTargetGUID;
+ ObjectGuid m_objectTargetGUID;
+ ObjectGuid m_itemTargetGUID;
+ uint32 m_itemTargetEntry;
+
+ SpellDestination m_src;
+ SpellDestination m_dst;
+
+ float m_pitch, m_speed;
+ std::string m_strTarget;
+};
+
+struct TC_GAME_API CastSpellTargetArg
+{
+ CastSpellTargetArg() { Targets.emplace(); }
+ CastSpellTargetArg(std::nullptr_t) { Targets.emplace(); }
+ CastSpellTargetArg(WorldObject* target);
+ CastSpellTargetArg(Item* itemTarget)
+ {
+ Targets.emplace();
+ Targets->SetItemTarget(itemTarget);
+ }
+ CastSpellTargetArg(Position const& dest)
+ {
+ Targets.emplace();
+ Targets->SetDst(dest);
+ }
+ CastSpellTargetArg(SpellCastTargets&& targets)
+ {
+ Targets.emplace(std::move(targets));
+ }
+
+ Optional<SpellCastTargets> Targets; // empty optional used to signal error state
+};
+
struct TC_GAME_API CastSpellExtraArgs
{
CastSpellExtraArgs() = default;
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index b0157c23d0b..0c12f8f8243 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -698,7 +698,7 @@ void Spell::EffectTriggerSpell()
args.AddSpellMod(SpellValueMod(SPELLVALUE_BASE_POINT0 + i), damage);
// original caster guid only for GO cast
- m_caster->CastSpell(targets, spellInfo->Id, args);
+ m_caster->CastSpell(std::move(targets), spellInfo->Id, args);
}
void Spell::EffectTriggerMissileSpell()
@@ -747,7 +747,7 @@ void Spell::EffectTriggerMissileSpell()
args.AddSpellMod(SpellValueMod(SPELLVALUE_BASE_POINT0 + i), damage);
// original caster guid only for GO cast
- m_caster->CastSpell(targets, spellInfo->Id, args);
+ m_caster->CastSpell(std::move(targets), spellInfo->Id, args);
}
void Spell::EffectForceCast()
@@ -3247,14 +3247,10 @@ void Spell::EffectScriptEffect()
if (!m_targets.HasDst())
return;
- float x, y, z;
float radius = effectInfo->CalcRadius();
for (uint8 i = 0; i < 15; ++i)
- {
- m_caster->GetRandomPoint(*destTarget, radius, x, y, z);
- m_caster->CastSpell({ x, y, z }, 54522, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
+ m_caster->CastSpell(m_caster->GetRandomPoint(*destTarget, radius), 54522, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
.SetOriginalCastId(m_castId));
- }
break;
}
case 52173: // Coyote Spirit Despawn
diff --git a/src/server/game/Spells/SpellInfo.h b/src/server/game/Spells/SpellInfo.h
index 11679e3f5d0..181b6c8ea87 100644
--- a/src/server/game/Spells/SpellInfo.h
+++ b/src/server/game/Spells/SpellInfo.h
@@ -41,43 +41,6 @@ struct SpellModifier;
struct SpellTargetPosition;
enum WeaponAttackType : uint8;
-enum SpellCastTargetFlags : uint32
-{
- TARGET_FLAG_NONE = 0x00000000,
- TARGET_FLAG_UNUSED_1 = 0x00000001, // not used
- TARGET_FLAG_UNIT = 0x00000002, // pguid
- TARGET_FLAG_UNIT_RAID = 0x00000004, // not sent, used to validate target (if raid member)
- TARGET_FLAG_UNIT_PARTY = 0x00000008, // not sent, used to validate target (if party member)
- TARGET_FLAG_ITEM = 0x00000010, // pguid
- TARGET_FLAG_SOURCE_LOCATION = 0x00000020, // pguid, 3 float
- TARGET_FLAG_DEST_LOCATION = 0x00000040, // pguid, 3 float
- TARGET_FLAG_UNIT_ENEMY = 0x00000080, // not sent, used to validate target (if enemy)
- TARGET_FLAG_UNIT_ALLY = 0x00000100, // not sent, used to validate target (if ally)
- TARGET_FLAG_CORPSE_ENEMY = 0x00000200, // pguid
- TARGET_FLAG_UNIT_DEAD = 0x00000400, // not sent, used to validate target (if dead creature)
- TARGET_FLAG_GAMEOBJECT = 0x00000800, // pguid, used with TARGET_GAMEOBJECT_TARGET
- TARGET_FLAG_TRADE_ITEM = 0x00001000, // pguid
- TARGET_FLAG_STRING = 0x00002000, // string
- TARGET_FLAG_GAMEOBJECT_ITEM = 0x00004000, // not sent, used with TARGET_GAMEOBJECT_ITEM_TARGET
- TARGET_FLAG_CORPSE_ALLY = 0x00008000, // pguid
- TARGET_FLAG_UNIT_MINIPET = 0x00010000, // pguid, used to validate target (if non combat pet)
- TARGET_FLAG_GLYPH_SLOT = 0x00020000, // used in glyph spells
- TARGET_FLAG_DEST_TARGET = 0x00040000, // sometimes appears with DEST_TARGET spells (may appear or not for a given spell)
- TARGET_FLAG_EXTRA_TARGETS = 0x00080000, // uint32 counter, loop { vec3 - screen position (?), guid }, not used so far
- TARGET_FLAG_UNIT_PASSENGER = 0x00100000, // guessed, used to validate target (if vehicle passenger)
- TARGET_FLAG_UNK400000 = 0X00400000,
- TARGET_FLAG_UNK1000000 = 0X01000000,
- TARGET_FLAG_UNK4000000 = 0X04000000,
- TARGET_FLAG_UNK10000000 = 0X10000000,
- TARGET_FLAG_UNK40000000 = 0X40000000,
-
- TARGET_FLAG_UNIT_MASK = TARGET_FLAG_UNIT | TARGET_FLAG_UNIT_RAID | TARGET_FLAG_UNIT_PARTY
- | TARGET_FLAG_UNIT_ENEMY | TARGET_FLAG_UNIT_ALLY | TARGET_FLAG_UNIT_DEAD | TARGET_FLAG_UNIT_MINIPET | TARGET_FLAG_UNIT_PASSENGER,
- TARGET_FLAG_GAMEOBJECT_MASK = TARGET_FLAG_GAMEOBJECT | TARGET_FLAG_GAMEOBJECT_ITEM,
- TARGET_FLAG_CORPSE_MASK = TARGET_FLAG_CORPSE_ALLY | TARGET_FLAG_CORPSE_ENEMY,
- TARGET_FLAG_ITEM_MASK = TARGET_FLAG_TRADE_ITEM | TARGET_FLAG_ITEM | TARGET_FLAG_GAMEOBJECT_ITEM
-};
-
enum SpellTargetSelectionCategories
{
TARGET_SELECT_CATEGORY_NYI,