Core/Spells: Define many unknown SpellCastTargetFlags enum values, rename some target type enum values to follow standards, also correctly implement TARGET_UNIT_TARGET_PASSENGER.
This commit is contained in:
@@ -948,12 +948,6 @@ void Unit::CastSpell(GameObject *go, uint32 spellId, bool triggered, Item *castI
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(spellInfo->Targets & (TARGET_FLAG_OBJECT | TARGET_FLAG_OBJECT_CASTER)))
|
||||
{
|
||||
sLog->outError("CastSpell: spell id %i by caster: %s %u) is not gameobject spell", spellId, (GetTypeId() == TYPEID_PLAYER ? "player (GUID:" : "creature (Entry:"), (GetTypeId() == TYPEID_PLAYER ? GetGUIDLow() : GetEntry()));
|
||||
return;
|
||||
}
|
||||
|
||||
if (castItem)
|
||||
sLog->outStaticDebug("WORLD: cast Item spellId - %i", spellInfo->Id);
|
||||
|
||||
|
||||
@@ -1287,48 +1287,46 @@ enum Targets
|
||||
TARGET_UNIT_TARGET_ENEMY = 6,
|
||||
TARGET_UNIT_AREA_ENTRY_SRC = 7,
|
||||
TARGET_UNIT_AREA_ENTRY_DST = 8,
|
||||
TARGET_DST_HOME = 9, // uses in teleport to innkeeper spells
|
||||
TARGET_DST_HOME = 9,
|
||||
TARGET_UNIT_TARGET_DEST_CASTER = 11, // teleport target to caster
|
||||
TARGET_UNIT_AREA_ENEMY_SRC = 15,
|
||||
TARGET_UNIT_AREA_ENEMY_DST = 16,
|
||||
TARGET_DST_DB = 17, // uses in teleport spells and some other
|
||||
TARGET_DST_DB = 17,
|
||||
TARGET_DST_CASTER = 18,
|
||||
TARGET_UNIT_PARTY_CASTER = 20,
|
||||
TARGET_UNIT_TARGET_ALLY = 21,
|
||||
TARGET_SRC_CASTER = 22,
|
||||
TARGET_GAMEOBJECT = 23,
|
||||
//TARGET_OBJECT_OPEN
|
||||
TARGET_UNIT_CONE_ENEMY = 24,
|
||||
TARGET_UNIT_TARGET_ANY = 25,
|
||||
TARGET_GAMEOBJECT_ITEM = 26,
|
||||
//TARGET_OBJECT_ITEM_PICKLOCK
|
||||
TARGET_UNIT_MASTER = 27,
|
||||
TARGET_DEST_DYNOBJ_ENEMY = 28,
|
||||
TARGET_DEST_DYNOBJ_ALLY = 29, // only for effect 27
|
||||
TARGET_UNIT_AREA_ALLY_SRC = 30, // in TargetB used only with TARGET_SRC_CASTER and in self casting range in TargetA
|
||||
TARGET_DEST_DYNOBJ_ALLY = 29,
|
||||
TARGET_UNIT_AREA_ALLY_SRC = 30,
|
||||
TARGET_UNIT_AREA_ALLY_DST = 31,
|
||||
TARGET_MINION = 32,
|
||||
//TARGET_DEST_SUMMON
|
||||
TARGET_UNIT_AREA_PARTY_SRC = 33,
|
||||
TARGET_UNIT_AREA_PARTY_DST = 34, // used in Tranquility
|
||||
TARGET_UNIT_AREA_PARTY_DST = 34,
|
||||
TARGET_UNIT_TARGET_PARTY = 35,
|
||||
TARGET_DEST_CASTER_RANDOM_UNKNOWN = 36, //unknown
|
||||
TARGET_UNIT_PARTY_TARGET = 37,
|
||||
TARGET_UNIT_TARGET_ALLY_PARTY = 37,
|
||||
TARGET_UNIT_NEARBY_ENTRY = 38,
|
||||
TARGET_UNIT_CASTER_FISHING = 39,
|
||||
TARGET_GAMEOBJECT_NEARBY_ENTRY = 40,
|
||||
TARGET_DEST_CASTER_FRONT_LEFT = 41, //earth totem
|
||||
TARGET_DEST_CASTER_BACK_LEFT = 42, //water totem
|
||||
TARGET_DEST_CASTER_BACK_RIGHT = 43, //air totem
|
||||
TARGET_DEST_CASTER_FRONT_RIGHT = 44, //fire totem
|
||||
TARGET_DEST_CASTER_FRONT_LEFT = 41,
|
||||
TARGET_DEST_CASTER_BACK_LEFT = 42,
|
||||
TARGET_DEST_CASTER_BACK_RIGHT = 43,
|
||||
TARGET_DEST_CASTER_FRONT_RIGHT = 44,
|
||||
TARGET_UNIT_CHAINHEAL = 45,
|
||||
TARGET_DST_NEARBY_ENTRY = 46,
|
||||
TARGET_DEST_CASTER_FRONT = 47,
|
||||
TARGET_DEST_CASTER_BACK = 48,
|
||||
TARGET_DEST_CASTER_RIGHT = 49,
|
||||
TARGET_DEST_CASTER_LEFT = 50,
|
||||
TARGET_GAMEOBJECT_AREA_SRC = 51, // If used with SPELL_EFFECT_ACTIVATE_OBJECT, appliccable GO entries should be specified in conditions table
|
||||
TARGET_GAMEOBJECT_AREA_DST = 52, // If used with SPELL_EFFECT_ACTIVATE_OBJECT, appliccable GO entries should be specified in conditions table
|
||||
TARGET_GAMEOBJECT_AREA_SRC = 51,
|
||||
TARGET_GAMEOBJECT_AREA_DST = 52,
|
||||
TARGET_DST_TARGET_ENEMY = 53, // set unit coordinates as dest, only 16 target B imlemented
|
||||
TARGET_UNIT_CONE_ENEMY_UNKNOWN = 54, // 180 degree, or different angle
|
||||
TARGET_DEST_CASTER_FRONT_LEAP = 55, // for a leap spell
|
||||
@@ -1337,11 +1335,11 @@ enum Targets
|
||||
TARGET_UNIT_NEARBY_RAID = 58,
|
||||
TARGET_UNIT_CONE_ALLY = 59,
|
||||
TARGET_UNIT_CONE_ENTRY = 60,
|
||||
TARGET_UNIT_CLASS_TARGET = 61,
|
||||
TARGET_UNIT_TARGET_CLASS_RAID = 61,
|
||||
TARGET_TEST = 62, // for a test spell
|
||||
TARGET_DEST_TARGET_ANY = 63,
|
||||
TARGET_DEST_TARGET_FRONT = 64,
|
||||
TARGET_DEST_TARGET_BACK = 65, // uses in teleport behind spells
|
||||
TARGET_DEST_TARGET_BACK = 65,
|
||||
TARGET_DEST_TARGET_RIGHT = 66,
|
||||
TARGET_DEST_TARGET_LEFT = 67,
|
||||
TARGET_DEST_TARGET_FRONT_LEFT = 68,
|
||||
@@ -1371,7 +1369,7 @@ enum Targets
|
||||
TARGET_UNIT_SUMMONER = 92,
|
||||
TARGET_CORPSE_AREA_ENEMY_PLAYER_SRC= 93, // TODO
|
||||
TARGET_UNIT_VEHICLE = 94,
|
||||
TARGET_UNIT_DRIVER = 95,
|
||||
TARGET_UNIT_TARGET_PASSENGER = 95,
|
||||
TARGET_UNIT_PASSENGER_0 = 96,
|
||||
TARGET_UNIT_PASSENGER_1 = 97,
|
||||
TARGET_UNIT_PASSENGER_2 = 98,
|
||||
|
||||
@@ -259,7 +259,7 @@ void ScriptMgr::FillSpellSummary()
|
||||
|
||||
//Spell targets aoe friends
|
||||
if (pTempSpell->EffectImplicitTargetA[j] == TARGET_UNIT_PARTY_CASTER ||
|
||||
pTempSpell->EffectImplicitTargetA[j] == TARGET_UNIT_PARTY_TARGET ||
|
||||
pTempSpell->EffectImplicitTargetA[j] == TARGET_UNIT_TARGET_ALLY_PARTY ||
|
||||
pTempSpell->EffectImplicitTargetA[j] == TARGET_SRC_CASTER)
|
||||
SpellSummary[i].Targets |= 1 << (SELECT_TARGET_AOE_FRIEND-1);
|
||||
|
||||
@@ -268,7 +268,7 @@ void ScriptMgr::FillSpellSummary()
|
||||
pTempSpell->EffectImplicitTargetA[j] == TARGET_UNIT_TARGET_ALLY ||
|
||||
pTempSpell->EffectImplicitTargetA[j] == TARGET_UNIT_TARGET_PARTY ||
|
||||
pTempSpell->EffectImplicitTargetA[j] == TARGET_UNIT_PARTY_CASTER ||
|
||||
pTempSpell->EffectImplicitTargetA[j] == TARGET_UNIT_PARTY_TARGET ||
|
||||
pTempSpell->EffectImplicitTargetA[j] == TARGET_UNIT_TARGET_ALLY_PARTY ||
|
||||
pTempSpell->EffectImplicitTargetA[j] == TARGET_SRC_CASTER)
|
||||
SpellSummary[i].Targets |= 1 << (SELECT_TARGET_ANY_FRIEND-1);
|
||||
|
||||
|
||||
@@ -119,16 +119,16 @@ void SpellCastTargets::Read(ByteBuffer& data, Unit* caster)
|
||||
if (m_targetMask == TARGET_FLAG_SELF)
|
||||
return;
|
||||
|
||||
if (m_targetMask & (TARGET_FLAG_UNIT | TARGET_FLAG_UNK17))
|
||||
if (m_targetMask & (TARGET_FLAG_UNIT | TARGET_FLAG_UNIT_MINIPET))
|
||||
data.readPackGUID(m_unitTargetGUID);
|
||||
|
||||
if (m_targetMask & (TARGET_FLAG_OBJECT))
|
||||
if (m_targetMask & (TARGET_FLAG_GAMEOBJECT))
|
||||
data.readPackGUID(m_GOTargetGUID);
|
||||
|
||||
if (m_targetMask & (TARGET_FLAG_ITEM | TARGET_FLAG_TRADE_ITEM))
|
||||
data.readPackGUID(m_itemTargetGUID);
|
||||
|
||||
if (m_targetMask & (TARGET_FLAG_CORPSE | TARGET_FLAG_PVP_CORPSE))
|
||||
if (m_targetMask & (TARGET_FLAG_CORPSE_ENEMY | TARGET_FLAG_CORPSE_ALLY))
|
||||
data.readPackGUID(m_CorpseTargetGUID);
|
||||
|
||||
if (m_targetMask & TARGET_FLAG_SOURCE_LOCATION)
|
||||
@@ -175,7 +175,7 @@ void SpellCastTargets::Write(ByteBuffer& data)
|
||||
{
|
||||
data << uint32(m_targetMask);
|
||||
|
||||
if (m_targetMask & (TARGET_FLAG_UNIT | TARGET_FLAG_PVP_CORPSE | TARGET_FLAG_OBJECT | TARGET_FLAG_CORPSE | TARGET_FLAG_UNK17))
|
||||
if (m_targetMask & (TARGET_FLAG_UNIT | TARGET_FLAG_CORPSE_ALLY | TARGET_FLAG_GAMEOBJECT | TARGET_FLAG_CORPSE_ENEMY | TARGET_FLAG_UNIT_MINIPET))
|
||||
{
|
||||
if (m_targetMask & TARGET_FLAG_UNIT)
|
||||
{
|
||||
@@ -184,14 +184,14 @@ void SpellCastTargets::Write(ByteBuffer& data)
|
||||
else
|
||||
data << uint8(0);
|
||||
}
|
||||
else if (m_targetMask & TARGET_FLAG_OBJECT)
|
||||
else if (m_targetMask & TARGET_FLAG_GAMEOBJECT)
|
||||
{
|
||||
if (m_GOTarget)
|
||||
data.append(m_GOTarget->GetPackGUID());
|
||||
else
|
||||
data << uint8(0);
|
||||
}
|
||||
else if (m_targetMask & (TARGET_FLAG_CORPSE | TARGET_FLAG_PVP_CORPSE))
|
||||
else if (m_targetMask & (TARGET_FLAG_CORPSE_ALLY | TARGET_FLAG_CORPSE_ENEMY))
|
||||
data.appendPackGUID(m_CorpseTargetGUID);
|
||||
else
|
||||
data << uint8(0);
|
||||
@@ -333,7 +333,7 @@ void SpellCastTargets::SetGOTarget(GameObject* target)
|
||||
{
|
||||
m_GOTarget = target;
|
||||
m_GOTargetGUID = target->GetGUID();
|
||||
m_targetMask |= TARGET_FLAG_OBJECT;
|
||||
m_targetMask |= TARGET_FLAG_GAMEOBJECT;
|
||||
}
|
||||
|
||||
void SpellCastTargets::SetItemTarget(Item* item)
|
||||
@@ -417,14 +417,14 @@ void SpellCastTargets::OutDebug() const
|
||||
|
||||
if (m_targetMask & TARGET_FLAG_UNIT)
|
||||
sLog->outString("TARGET_FLAG_UNIT: " UI64FMTD, m_unitTargetGUID);
|
||||
if (m_targetMask & TARGET_FLAG_UNK17)
|
||||
sLog->outString("TARGET_FLAG_UNK17: " UI64FMTD, m_unitTargetGUID);
|
||||
if (m_targetMask & TARGET_FLAG_OBJECT)
|
||||
sLog->outString("TARGET_FLAG_OBJECT: " UI64FMTD, m_GOTargetGUID);
|
||||
if (m_targetMask & TARGET_FLAG_CORPSE)
|
||||
sLog->outString("TARGET_FLAG_CORPSE: " UI64FMTD, m_CorpseTargetGUID);
|
||||
if (m_targetMask & TARGET_FLAG_PVP_CORPSE)
|
||||
sLog->outString("TARGET_FLAG_PVP_CORPSE: " UI64FMTD, m_CorpseTargetGUID);
|
||||
if (m_targetMask & TARGET_FLAG_UNIT_MINIPET)
|
||||
sLog->outString("TARGET_FLAG_UNIT_MINIPET: " UI64FMTD, m_unitTargetGUID);
|
||||
if (m_targetMask & TARGET_FLAG_GAMEOBJECT)
|
||||
sLog->outString("TARGET_FLAG_GAMEOBJECT: " UI64FMTD, m_GOTargetGUID);
|
||||
if (m_targetMask & TARGET_FLAG_CORPSE_ENEMY)
|
||||
sLog->outString("TARGET_FLAG_CORPSE_ENEMY: " UI64FMTD, m_CorpseTargetGUID);
|
||||
if (m_targetMask & TARGET_FLAG_CORPSE_ALLY)
|
||||
sLog->outString("TARGET_FLAG_CORPSE_ALLY: " UI64FMTD, m_CorpseTargetGUID);
|
||||
if (m_targetMask & TARGET_FLAG_ITEM)
|
||||
sLog->outString("TARGET_FLAG_ITEM: " UI64FMTD, m_itemTargetGUID);
|
||||
if (m_targetMask & TARGET_FLAG_TRADE_ITEM)
|
||||
@@ -768,7 +768,7 @@ void Spell::SelectSpellTargets()
|
||||
case SPELL_EFFECT_APPLY_AREA_AURA_PARTY:
|
||||
// AreaAura
|
||||
if (m_spellInfo->Attributes & (SPELL_ATTR0_CASTABLE_WHILE_SITTING | SPELL_ATTR0_CASTABLE_WHILE_MOUNTED | SPELL_ATTR0_UNK18 | SPELL_ATTR0_NOT_SHAPESHIFT) || m_spellInfo->Attributes == SPELL_ATTR0_NOT_SHAPESHIFT)
|
||||
SelectEffectTargets(i, TARGET_UNIT_PARTY_TARGET);
|
||||
SelectEffectTargets(i, TARGET_UNIT_TARGET_ALLY_PARTY);
|
||||
break;
|
||||
case SPELL_EFFECT_SKIN_PLAYER_CORPSE:
|
||||
if (m_targets.GetUnitTarget())
|
||||
@@ -2059,8 +2059,12 @@ void Spell::SelectEffectTargets(uint32 i, uint32 cur)
|
||||
if (IsValidSingleTargetSpell(target))
|
||||
AddUnitTarget(target, i);
|
||||
break;
|
||||
case TARGET_UNIT_PARTY_TARGET:
|
||||
case TARGET_UNIT_CLASS_TARGET:
|
||||
case TARGET_UNIT_TARGET_PASSENGER:
|
||||
if (target->IsOnVehicle(m_caster))
|
||||
AddUnitTarget(target, i);
|
||||
break;
|
||||
case TARGET_UNIT_TARGET_ALLY_PARTY:
|
||||
case TARGET_UNIT_TARGET_CLASS_RAID:
|
||||
pushType = PUSH_CASTER_CENTER; // not real
|
||||
break;
|
||||
}
|
||||
@@ -2348,11 +2352,6 @@ void Spell::SelectEffectTargets(uint32 i, uint32 cur)
|
||||
else if (m_targets.GetItemTarget())
|
||||
AddItemTarget(m_targets.GetItemTarget(), i);
|
||||
break;
|
||||
case TARGET_UNIT_DRIVER:
|
||||
if (Unit* driver = m_targets.GetUnitTarget())
|
||||
if (driver->IsOnVehicle(m_caster))
|
||||
AddUnitTarget(driver, i);
|
||||
break;
|
||||
default:
|
||||
sLog->outError("SPELL (caster[type: %u; guidlow: %u], spell: %u): unhandled spell target (%u)",
|
||||
m_caster->GetTypeId(), m_caster->GetGUIDLow(), m_spellInfo->Id, cur);
|
||||
@@ -2594,7 +2593,7 @@ void Spell::SelectEffectTargets(uint32 i, uint32 cur)
|
||||
case TARGET_UNIT_AREA_PARTY_DST:
|
||||
m_caster->GetPartyMemberInDist(unitList, radius); //fix me
|
||||
break;
|
||||
case TARGET_UNIT_PARTY_TARGET:
|
||||
case TARGET_UNIT_TARGET_ALLY_PARTY:
|
||||
m_targets.GetUnitTarget()->GetPartyMemberInDist(unitList, radius);
|
||||
break;
|
||||
case TARGET_UNIT_PARTY_CASTER:
|
||||
@@ -2603,7 +2602,7 @@ void Spell::SelectEffectTargets(uint32 i, uint32 cur)
|
||||
case TARGET_UNIT_RAID_CASTER:
|
||||
m_caster->GetRaidMember(unitList, radius);
|
||||
break;
|
||||
case TARGET_UNIT_CLASS_TARGET:
|
||||
case TARGET_UNIT_TARGET_CLASS_RAID:
|
||||
{
|
||||
Player* targetPlayer = m_targets.GetUnitTarget() && m_targets.GetUnitTarget()->GetTypeId() == TYPEID_PLAYER
|
||||
? (Player*)m_targets.GetUnitTarget() : NULL;
|
||||
@@ -4711,9 +4710,8 @@ SpellCastResult Spell::CheckCast(bool strict)
|
||||
}
|
||||
|
||||
Unit* target = m_targets.GetUnitTarget();
|
||||
|
||||
// In pure self-cast spells, the client won't send any unit target
|
||||
if (!target && (m_targets.GetTargetMask() == TARGET_FLAG_SELF || m_targets.GetTargetMask() & TARGET_FLAG_UNIT_CASTER)) // TARGET_FLAG_SELF == 0, remember!
|
||||
if (!target && (m_targets.GetTargetMask() == TARGET_FLAG_SELF || m_targets.GetTargetMask() & TARGET_FLAG_UNIT_ALLY)) // TARGET_FLAG_SELF == 0, remember!
|
||||
target = m_caster;
|
||||
|
||||
if (target)
|
||||
@@ -6748,7 +6746,7 @@ bool Spell::IsValidSingleTargetEffect(Unit const* target, Targets type) const
|
||||
case TARGET_UNIT_TARGET_ENEMY:
|
||||
return !m_caster->IsFriendlyTo(target);
|
||||
case TARGET_UNIT_TARGET_ALLY:
|
||||
case TARGET_UNIT_PARTY_TARGET:
|
||||
case TARGET_UNIT_TARGET_ALLY_PARTY:
|
||||
return m_caster->IsFriendlyTo(target);
|
||||
case TARGET_UNIT_TARGET_PARTY:
|
||||
return m_caster != target && m_caster->IsInPartyWith(target);
|
||||
|
||||
@@ -39,36 +39,37 @@ struct SpellEntry;
|
||||
enum SpellCastTargetFlags
|
||||
{
|
||||
TARGET_FLAG_SELF = 0x00000000,
|
||||
TARGET_FLAG_UNUSED1 = 0x00000001, // not used in any spells as of 3.2.2a (can be set dynamically)
|
||||
TARGET_FLAG_UNUSED_1 = 0x00000001, // not used
|
||||
TARGET_FLAG_UNIT = 0x00000002, // pguid
|
||||
TARGET_FLAG_UNUSED2 = 0x00000004, // not used in any spells as of 3.2.2a (can be set dynamically)
|
||||
TARGET_FLAG_UNUSED3 = 0x00000008, // not used in any spells as of 3.2.2a (can be set dynamically)
|
||||
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, // 3 float
|
||||
TARGET_FLAG_DEST_LOCATION = 0x00000040, // 3 float
|
||||
TARGET_FLAG_OBJECT_CASTER = 0x00000080, // used in 7 spells only
|
||||
TARGET_FLAG_UNIT_CASTER = 0x00000100, // looks like self target (480 spells)
|
||||
TARGET_FLAG_PVP_CORPSE = 0x00000200, // pguid
|
||||
TARGET_FLAG_UNIT_CORPSE = 0x00000400, // 10 spells (gathering professions)
|
||||
TARGET_FLAG_OBJECT = 0x00000800, // pguid, 2 spells
|
||||
TARGET_FLAG_TRADE_ITEM = 0x00001000, // pguid, 0 spells
|
||||
TARGET_FLAG_STRING = 0x00002000, // string, 0 spells
|
||||
TARGET_FLAG_OPEN_LOCK = 0x00004000, // 199 spells, opening object/lock
|
||||
TARGET_FLAG_CORPSE = 0x00008000, // pguid, resurrection spells
|
||||
TARGET_FLAG_UNK17 = 0x00010000, // pguid, not used in any spells as of 3.2.2a (can be set dynamically)
|
||||
TARGET_FLAG_GLYPH = 0x00020000, // used in glyph spells
|
||||
TARGET_FLAG_UNK19 = 0x00040000, //
|
||||
TARGET_FLAG_UNUSED20 = 0x00080000 // uint32 counter, loop { vec3 - screen position (?), guid }, not used so far
|
||||
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_FLAG_TRADE_ITEM = 0x00001000, // pguid
|
||||
TARGET_FLAG_STRING = 0x00002000, // string
|
||||
TARGET_FLAG_GAMEOBJECT_ITEM = 0x00004000, // not sent, used with TARGET_GAMEOBJECT_ITEM
|
||||
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_UNK19 = 0x00040000, // sometimes appears with DEST_TARGET spells (may appear or not for a given spell)
|
||||
TARGET_FLAG_UNUSED20 = 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)
|
||||
};
|
||||
#define MAX_TARGET_FLAGS 21
|
||||
|
||||
enum SpellCastFlags
|
||||
{
|
||||
CAST_FLAG_NONE = 0x00000000,
|
||||
CAST_FLAG_PENDING = 0x00000001, // Pending == 1
|
||||
CAST_FLAG_PENDING = 0x00000001, // aoe combat log?
|
||||
CAST_FLAG_UNKNOWN_2 = 0x00000002,
|
||||
CAST_FLAG_UNKNOWN_3 = 0x00000004,
|
||||
CAST_FLAG_UNKNOWN_4 = 0x00000008,
|
||||
CAST_FLAG_UNKNOWN_4 = 0x00000008, // ignore AOE visual
|
||||
CAST_FLAG_UNKNOWN_5 = 0x00000010,
|
||||
CAST_FLAG_AMMO = 0x00000020, // Projectiles visual
|
||||
CAST_FLAG_UNKNOWN_7 = 0x00000040,
|
||||
|
||||
@@ -127,8 +127,9 @@ SpellMgr::SpellMgr()
|
||||
case TARGET_UNIT_TARGET_ANY:
|
||||
case TARGET_UNIT_TARGET_ENEMY:
|
||||
case TARGET_UNIT_TARGET_PARTY:
|
||||
case TARGET_UNIT_PARTY_TARGET:
|
||||
case TARGET_UNIT_CLASS_TARGET:
|
||||
case TARGET_UNIT_TARGET_PASSENGER:
|
||||
case TARGET_UNIT_TARGET_ALLY_PARTY:
|
||||
case TARGET_UNIT_TARGET_RAID_CLASS:
|
||||
case TARGET_UNIT_CHAINHEAL:
|
||||
SpellTargetType[i] = TARGET_TYPE_UNIT_TARGET;
|
||||
break;
|
||||
@@ -236,7 +237,7 @@ SpellMgr::SpellMgr()
|
||||
case TARGET_UNIT_AREA_ENTRY_SRC:
|
||||
case TARGET_UNIT_AREA_PARTY_DST:
|
||||
case TARGET_UNIT_AREA_PARTY_SRC:
|
||||
case TARGET_UNIT_PARTY_TARGET:
|
||||
case TARGET_UNIT_TARGET_ALLY_PARTY:
|
||||
case TARGET_UNIT_PARTY_CASTER:
|
||||
case TARGET_UNIT_CONE_ENEMY:
|
||||
case TARGET_UNIT_CONE_ALLY:
|
||||
@@ -4047,11 +4048,6 @@ void SpellMgr::LoadSpellCustomAttr()
|
||||
spellInfo->EffectBasePoints[2] += 30000;
|
||||
++count;
|
||||
break;
|
||||
// some dummy spell only has dest, should push caster in this case
|
||||
case 62324: // Throw Passenger
|
||||
spellInfo->Targets |= TARGET_FLAG_UNIT_CASTER;
|
||||
++count;
|
||||
break;
|
||||
case 16834: // Natural shapeshifter
|
||||
case 16835:
|
||||
spellInfo->DurationIndex = 21;
|
||||
|
||||
Reference in New Issue
Block a user