Core/Spells: Improvements in selecting default targets based on effect type.

This commit is contained in:
QAston
2011-09-23 11:58:40 +02:00
parent ab023e847a
commit 13a1d90130
4 changed files with 322 additions and 454 deletions
+18 -22
View File
@@ -66,16 +66,7 @@ enum SpellCastTargetFlags
| 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,
};
enum SpellEffectTargetTypes
{
SPELL_REQUIRE_NONE,
SPELL_REQUIRE_UNIT,
SPELL_REQUIRE_DEST,
SPELL_REQUIRE_ITEM,
SPELL_REQUIRE_CASTER,
SPELL_REQUIRE_GOBJECT,
TARGET_FLAG_ITEM_MASK = TARGET_FLAG_TRADE_ITEM | TARGET_FLAG_ITEM | TARGET_FLAG_GAMEOBJECT_ITEM,
};
enum SpellTargetSelectionCategories
@@ -100,7 +91,7 @@ enum SpellTargetReferenceTypes
enum SpellTargetObjectTypes
{
TARGET_OBJECT_TYPE_NONE,
TARGET_OBJECT_TYPE_NONE = 0,
TARGET_OBJECT_TYPE_SRC,
TARGET_OBJECT_TYPE_DEST,
TARGET_OBJECT_TYPE_UNIT,
@@ -109,6 +100,9 @@ enum SpellTargetObjectTypes
TARGET_OBJECT_TYPE_GOBJ_ITEM,
TARGET_OBJECT_TYPE_ITEM,
TARGET_OBJECT_TYPE_CORPSE,
// only for effect target type
TARGET_OBJECT_TYPE_CORPSE_ENEMY,
TARGET_OBJECT_TYPE_CORPSE_ALLY,
};
enum SpellTargetSelectionCheckTypes
@@ -153,6 +147,14 @@ enum SpellSelectTargetTypes
TARGET_TYPE_CHANNEL,
};
enum SpellEffectImplicitTargetTypes
{
EFFECT_IMPLICIT_TARGET_NONE = 0,
EFFECT_IMPLICIT_TARGET_EXPLICIT,
EFFECT_IMPLICIT_TARGET_CASTER,
EFFECT_IMPLICIT_TARGET_PET,
};
// Spell clasification
enum SpellSpecificType
{
@@ -294,22 +296,16 @@ public:
bool HasRadius() const;
float CalcRadius(Unit* caster = NULL, Spell* = NULL) const;
SpellEffectTargetTypes GetRequiredTargetType() const;
uint32 GetMissingTargetMask(bool srcSet = false, bool destSet = false, uint32 mask = 0) const;
SpellTargetObjectTypes GetImplicitTargetObjectType() const;
SpellTargetObjectTypes GetRequiredTargetObjectType() const;
SpellEffectImplicitTargetTypes GetImplicitTargetType() const;
SpellTargetObjectTypes GetUsedTargetObjectType() const;
private:
static bool InitStaticData();
static void InitRequiredTargetTypeData();
static bool Init;
static SpellEffectTargetTypes RequiredTargetType[TOTAL_SPELL_EFFECTS];
struct StaticData
{
SpellTargetObjectTypes ImplicitObjectType; // defines if explicit target can be added to effect target list if there's no valid target type provided for effect
SpellTargetObjectTypes RequiredObjectType; // defines valid target object type for spell effect
SpellEffectImplicitTargetTypes ImplicitTargetType; // defines what target can be added to effect target list if there's no valid target type provided for effect
SpellTargetObjectTypes UsedTargetObjectType; // defines valid target object type for spell effect
};
static StaticData _data[TOTAL_SPELL_EFFECTS];
};