Revert "Core/Spells: Fix a crash on checking school immunity added to unit manually (not by aura)"
This reverts commit 07badd7385.
This commit is contained in:
@@ -11578,10 +11578,10 @@ bool Unit::IsImmunedToSpell(SpellInfo const* spellInfo)
|
|||||||
SpellImmuneList const& schoolList = m_spellImmune[IMMUNITY_SCHOOL];
|
SpellImmuneList const& schoolList = m_spellImmune[IMMUNITY_SCHOOL];
|
||||||
for (SpellImmuneList::const_iterator itr = schoolList.begin(); itr != schoolList.end(); ++itr)
|
for (SpellImmuneList::const_iterator itr = schoolList.begin(); itr != schoolList.end(); ++itr)
|
||||||
{
|
{
|
||||||
SpellInfo const* immuneSpellInfo = sSpellMgr->GetSpellInfo(itr->spellId);
|
SpellInfo const* inmmuneSpellInfo = sSpellMgr->GetSpellInfo(itr->spellId);
|
||||||
if ((itr->type & spellInfo->GetSchoolMask())
|
if ((itr->type & spellInfo->GetSchoolMask())
|
||||||
&& !(immuneSpellInfo && immuneSpellInfo->IsPositive() && spellInfo->IsPositive())
|
&& !(inmmuneSpellInfo->IsPositive() && spellInfo->IsPositive())
|
||||||
&& !spellInfo->CanPierceImmuneAura(immuneSpellInfo))
|
&& !spellInfo->CanPierceImmuneAura(inmmuneSpellInfo))
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1287,64 +1287,65 @@ enum Targets
|
|||||||
TARGET_UNIT_TARGET_ENEMY = 6,
|
TARGET_UNIT_TARGET_ENEMY = 6,
|
||||||
TARGET_UNIT_AREA_ENTRY_SRC = 7,
|
TARGET_UNIT_AREA_ENTRY_SRC = 7,
|
||||||
TARGET_UNIT_AREA_ENTRY_DST = 8,
|
TARGET_UNIT_AREA_ENTRY_DST = 8,
|
||||||
TARGET_DEST_HOME = 9,
|
TARGET_DST_HOME = 9,
|
||||||
TARGET_UNIT_TARGET_CASTER_SRC = 11, // teleport target to caster
|
TARGET_UNIT_TARGET_DEST_CASTER = 11, // teleport target to caster
|
||||||
TARGET_UNIT_AREA_ENEMY_SRC = 15,
|
TARGET_UNIT_AREA_ENEMY_SRC = 15,
|
||||||
TARGET_UNIT_AREA_ENEMY_DST = 16,
|
TARGET_UNIT_AREA_ENEMY_DST = 16,
|
||||||
TARGET_DEST_DB = 17,
|
TARGET_DST_DB = 17,
|
||||||
TARGET_DEST_CASTER = 18,
|
TARGET_DST_CASTER = 18,
|
||||||
TARGET_UNIT_AREA_PARTY = 20,
|
TARGET_UNIT_PARTY_CASTER = 20,
|
||||||
TARGET_UNIT_TARGET_ALLY = 21,
|
TARGET_UNIT_TARGET_ALLY = 21,
|
||||||
TARGET_SRC_CASTER = 22,
|
TARGET_SRC_CASTER = 22,
|
||||||
TARGET_GAMEOBJECT_TARGET = 23,
|
TARGET_GAMEOBJECT = 23,
|
||||||
TARGET_UNIT_CONE_ENEMY_24 = 24,
|
TARGET_UNIT_CONE_ENEMY = 24,
|
||||||
TARGET_UNIT_TARGET_ANY = 25,
|
TARGET_UNIT_TARGET_ANY = 25,
|
||||||
TARGET_GAMEOBJECT_ITEM_TARGET = 26,
|
TARGET_GAMEOBJECT_ITEM = 26,
|
||||||
TARGET_UNIT_MASTER = 27,
|
TARGET_UNIT_MASTER = 27,
|
||||||
TARGET_DEST_DYNOBJ_ENEMY = 28,
|
TARGET_DEST_DYNOBJ_ENEMY = 28,
|
||||||
TARGET_DEST_DYNOBJ_ALLY = 29,
|
TARGET_DEST_DYNOBJ_ALLY = 29,
|
||||||
TARGET_UNIT_AREA_ALLY_SRC = 30,
|
TARGET_UNIT_AREA_ALLY_SRC = 30,
|
||||||
TARGET_UNIT_AREA_ALLY_DST = 31,
|
TARGET_UNIT_AREA_ALLY_DST = 31,
|
||||||
TARGET_DEST_CASTER_SUMMON = 32, // front left, 1y from caster
|
TARGET_MINION = 32,
|
||||||
|
//TARGET_DEST_SUMMON
|
||||||
TARGET_UNIT_AREA_PARTY_SRC = 33,
|
TARGET_UNIT_AREA_PARTY_SRC = 33,
|
||||||
TARGET_UNIT_AREA_PARTY_DST = 34,
|
TARGET_UNIT_AREA_PARTY_DST = 34,
|
||||||
TARGET_UNIT_TARGET_PARTY = 35,
|
TARGET_UNIT_TARGET_PARTY = 35,
|
||||||
TARGET_DEST_CASTER_UNKNOWN_36 = 36, // possibly some nearby entry dest
|
TARGET_DEST_CASTER_RANDOM_UNKNOWN = 36, //unknown
|
||||||
TARGET_UNIT_TARGET_AREA_PARTY = 37, // targets all units in party of selected target
|
TARGET_UNIT_TARGET_ALLY_PARTY = 37,
|
||||||
TARGET_UNIT_NEARBY_ENTRY = 38,
|
TARGET_UNIT_NEARBY_ENTRY = 38,
|
||||||
TARGET_DEST_CASTER_FISHING = 39,
|
TARGET_UNIT_CASTER_FISHING = 39,
|
||||||
TARGET_GAMEOBJECT_NEARBY_ENTRY = 40,
|
TARGET_GAMEOBJECT_NEARBY_ENTRY = 40,
|
||||||
TARGET_DEST_CASTER_FRONT_RIGHT = 41,
|
TARGET_DEST_CASTER_FRONT_LEFT = 41,
|
||||||
TARGET_DEST_CASTER_BACK_RIGHT = 42,
|
TARGET_DEST_CASTER_BACK_LEFT = 42,
|
||||||
TARGET_DEST_CASTER_BACK_LEFT = 43,
|
TARGET_DEST_CASTER_BACK_RIGHT = 43,
|
||||||
TARGET_DEST_CASTER_FRONT_LEFT = 44,
|
TARGET_DEST_CASTER_FRONT_RIGHT = 44,
|
||||||
TARGET_UNIT_TARGET_RAID_OR_PARTY = 45,
|
TARGET_UNIT_CHAINHEAL = 45,
|
||||||
TARGET_DEST_NEARBY_ENTRY = 46,
|
TARGET_DST_NEARBY_ENTRY = 46,
|
||||||
TARGET_DEST_CASTER_FRONT = 47,
|
TARGET_DEST_CASTER_FRONT = 47,
|
||||||
TARGET_DEST_CASTER_BACK = 48,
|
TARGET_DEST_CASTER_BACK = 48,
|
||||||
TARGET_DEST_CASTER_RIGHT = 49,
|
TARGET_DEST_CASTER_RIGHT = 49,
|
||||||
TARGET_DEST_CASTER_LEFT = 50,
|
TARGET_DEST_CASTER_LEFT = 50,
|
||||||
TARGET_GAMEOBJECT_AREA_SRC = 51,
|
TARGET_GAMEOBJECT_AREA_SRC = 51,
|
||||||
TARGET_GAMEOBJECT_AREA_DST = 52,
|
TARGET_GAMEOBJECT_AREA_DST = 52,
|
||||||
TARGET_DEST_TARGET_ENEMY = 53,
|
TARGET_DST_TARGET_ENEMY = 53, // set unit coordinates as dest, only 16 target B imlemented
|
||||||
TARGET_UNIT_CONE_ENEMY_54 = 54,
|
TARGET_UNIT_CONE_ENEMY_UNKNOWN = 54, // 180 degree, or different angle
|
||||||
TARGET_DEST_CASTER_FRONT_LEAP = 55, // for a leap spell
|
TARGET_DEST_CASTER_FRONT_LEAP = 55, // for a leap spell
|
||||||
TARGET_UNIT_AREA_RAID = 56,
|
TARGET_UNIT_RAID_CASTER = 56,
|
||||||
TARGET_UNIT_TARGET_RAID = 57,
|
TARGET_UNIT_TARGET_RAID = 57,
|
||||||
TARGET_UNIT_NEARBY_RAID = 58,
|
TARGET_UNIT_NEARBY_RAID = 58,
|
||||||
TARGET_UNIT_CONE_ALLY = 59,
|
TARGET_UNIT_CONE_ALLY = 59,
|
||||||
TARGET_UNIT_CONE_ENTRY = 60,
|
TARGET_UNIT_CONE_ENTRY = 60,
|
||||||
TARGET_UNIT_TARGET_RAID_AREA_CLASS = 61, // targets all units in raid which have class of selected target
|
TARGET_UNIT_TARGET_CLASS_RAID = 61,
|
||||||
TARGET_TEST = 62, // for a test spell
|
TARGET_TEST = 62, // for a test spell
|
||||||
TARGET_DEST_TARGET_ANY = 63,
|
TARGET_DEST_TARGET_ANY = 63,
|
||||||
TARGET_DEST_TARGET_FRONT = 64,
|
TARGET_DEST_TARGET_FRONT = 64,
|
||||||
TARGET_DEST_TARGET_BACK = 65,
|
TARGET_DEST_TARGET_BACK = 65,
|
||||||
TARGET_DEST_TARGET_RIGHT = 66,
|
TARGET_DEST_TARGET_RIGHT = 66,
|
||||||
TARGET_DEST_TARGET_LEFT = 67,
|
TARGET_DEST_TARGET_LEFT = 67,
|
||||||
TARGET_DEST_TARGET_FRONT_RIGHT = 68,
|
TARGET_DEST_TARGET_FRONT_LEFT = 68,
|
||||||
TARGET_DEST_TARGET_BACK_RIGHT = 69,
|
TARGET_DEST_TARGET_BACK_LEFT = 69,
|
||||||
TARGET_DEST_TARGET_BACK_LEFT = 70,
|
TARGET_DEST_TARGET_BACK_RIGHT = 70,
|
||||||
TARGET_DEST_TARGET_FRONT_LEFT = 71,
|
TARGET_DEST_TARGET_FRONT_RIGHT = 71,
|
||||||
TARGET_DEST_CASTER_RANDOM = 72,
|
TARGET_DEST_CASTER_RANDOM = 72,
|
||||||
TARGET_DEST_CASTER_RADIUS = 73,
|
TARGET_DEST_CASTER_RADIUS = 73,
|
||||||
TARGET_DEST_TARGET_RANDOM = 74,
|
TARGET_DEST_TARGET_RANDOM = 74,
|
||||||
@@ -1355,10 +1356,10 @@ enum Targets
|
|||||||
TARGET_DEST_DEST_BACK = 79,
|
TARGET_DEST_DEST_BACK = 79,
|
||||||
TARGET_DEST_DEST_RIGHT = 80,
|
TARGET_DEST_DEST_RIGHT = 80,
|
||||||
TARGET_DEST_DEST_LEFT = 81,
|
TARGET_DEST_DEST_LEFT = 81,
|
||||||
TARGET_DEST_DEST_FRONT_RIGHT = 82,
|
TARGET_DEST_DEST_FRONT_LEFT = 82,
|
||||||
TARGET_DEST_DEST_BACK_RIGHT = 83,
|
TARGET_DEST_DEST_BACK_LEFT = 83,
|
||||||
TARGET_DEST_DEST_BACK_LEFT = 84,
|
TARGET_DEST_DEST_BACK_RIGHT = 84,
|
||||||
TARGET_DEST_DEST_FRONT_LEFT = 85,
|
TARGET_DEST_DEST_FRONT_RIGHT = 85,
|
||||||
TARGET_DEST_DEST_RANDOM = 86,
|
TARGET_DEST_DEST_RANDOM = 86,
|
||||||
TARGET_DEST_DEST = 87,
|
TARGET_DEST_DEST = 87,
|
||||||
TARGET_DEST_DYNOBJ_NONE = 88,
|
TARGET_DEST_DYNOBJ_NONE = 88,
|
||||||
@@ -1366,7 +1367,7 @@ enum Targets
|
|||||||
TARGET_UNIT_TARGET_MINIPET = 90,
|
TARGET_UNIT_TARGET_MINIPET = 90,
|
||||||
TARGET_DEST_DEST_RANDOM_DIR_DIST = 91,
|
TARGET_DEST_DEST_RANDOM_DIR_DIST = 91,
|
||||||
TARGET_UNIT_SUMMONER = 92,
|
TARGET_UNIT_SUMMONER = 92,
|
||||||
TARGET_CORPSE_AREA_ENEMY_SRC = 93, // TODO
|
TARGET_CORPSE_AREA_ENEMY_PLAYER_SRC= 93, // TODO
|
||||||
TARGET_UNIT_VEHICLE = 94,
|
TARGET_UNIT_VEHICLE = 94,
|
||||||
TARGET_UNIT_TARGET_PASSENGER = 95,
|
TARGET_UNIT_TARGET_PASSENGER = 95,
|
||||||
TARGET_UNIT_PASSENGER_0 = 96,
|
TARGET_UNIT_PASSENGER_0 = 96,
|
||||||
@@ -1377,12 +1378,12 @@ enum Targets
|
|||||||
TARGET_UNIT_PASSENGER_5 = 101,
|
TARGET_UNIT_PASSENGER_5 = 101,
|
||||||
TARGET_UNIT_PASSENGER_6 = 102,
|
TARGET_UNIT_PASSENGER_6 = 102,
|
||||||
TARGET_UNIT_PASSENGER_7 = 103,
|
TARGET_UNIT_PASSENGER_7 = 103,
|
||||||
TARGET_UNIT_CONE_ENEMY_104 = 104,
|
TARGET_UNIT_AREA_PATH = 104,
|
||||||
TARGET_UNIT_UNK_105 = 105, // 1 spell
|
TARGET_UNIT_UNK_105 = 105, // 1 spell
|
||||||
TARGET_DEST_CHANNEL_CASTER = 106,
|
TARGET_DEST_CHANNEL_CASTER = 106,
|
||||||
TARGET_UNK_AREA_UNK_DST_107 = 107, // not enough info - only generic spells avalible
|
TARGET_UNK_AREA_UNK_DST_107 = 107, // not enough info - only generic spells avalible
|
||||||
TARGET_GAMEOBJECT_CONE = 108,
|
TARGET_GAMEOBJECT_AREA_PATH = 108,
|
||||||
TARGET_DEST_UNK_110 = 110,
|
TARGET_DEST_UNK_110 = 110, // some kind of traj?
|
||||||
TOTAL_SPELL_TARGETS
|
TOTAL_SPELL_TARGETS
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -893,7 +893,7 @@ int WorldSocket::HandleAuthSession (WorldPacket& recvPacket)
|
|||||||
//! Negative mutetime indicates amount of seconds to be muted effective on next login - which is now.
|
//! Negative mutetime indicates amount of seconds to be muted effective on next login - which is now.
|
||||||
if (mutetime < 0)
|
if (mutetime < 0)
|
||||||
{
|
{
|
||||||
mutetime = time(NULL) + -mutetime;
|
mutetime = time(NULL) + llabs(mutetime);
|
||||||
LoginDatabase.PExecute("UPDATE account SET mutetime = " SI64FMTD " WHERE id = '%u'", mutetime, id);
|
LoginDatabase.PExecute("UPDATE account SET mutetime = " SI64FMTD " WHERE id = '%u'", mutetime, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2447,7 +2447,7 @@ void AuraEffect::HandleFeignDeath(AuraApplication const* aurApp, uint8 mode, boo
|
|||||||
for (uint32 i = CURRENT_FIRST_NON_MELEE_SPELL; i < CURRENT_MAX_SPELL; i++)
|
for (uint32 i = CURRENT_FIRST_NON_MELEE_SPELL; i < CURRENT_MAX_SPELL; i++)
|
||||||
{
|
{
|
||||||
if ((*iter)->GetCurrentSpell(i)
|
if ((*iter)->GetCurrentSpell(i)
|
||||||
&& (*iter)->GetCurrentSpell(i)->m_targets.GetObjectTargetGUID() == target->GetGUID())
|
&& (*iter)->GetCurrentSpell(i)->m_targets.GetUnitTargetGUID() == target->GetGUID())
|
||||||
{
|
{
|
||||||
(*iter)->InterruptSpell(CurrentSpellTypes(i), false);
|
(*iter)->InterruptSpell(CurrentSpellTypes(i), false);
|
||||||
}
|
}
|
||||||
|
|||||||
+107
-148
@@ -117,15 +117,21 @@ void SpellCastTargets::Read(ByteBuffer& data, Unit* caster)
|
|||||||
{
|
{
|
||||||
data >> m_targetMask;
|
data >> m_targetMask;
|
||||||
|
|
||||||
if (m_targetMask == TARGET_FLAG_NONE)
|
if (m_targetMask == TARGET_FLAG_SELF)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (m_targetMask & (TARGET_FLAG_UNIT | TARGET_FLAG_UNIT_MINIPET | TARGET_FLAG_GAMEOBJECT | TARGET_FLAG_CORPSE_ENEMY | TARGET_FLAG_CORPSE_ALLY))
|
if (m_targetMask & (TARGET_FLAG_UNIT | TARGET_FLAG_UNIT_MINIPET))
|
||||||
data.readPackGUID(m_objectTargetGUID);
|
data.readPackGUID(m_unitTargetGUID);
|
||||||
|
|
||||||
|
if (m_targetMask & (TARGET_FLAG_GAMEOBJECT))
|
||||||
|
data.readPackGUID(m_GOTargetGUID);
|
||||||
|
|
||||||
if (m_targetMask & (TARGET_FLAG_ITEM | TARGET_FLAG_TRADE_ITEM))
|
if (m_targetMask & (TARGET_FLAG_ITEM | TARGET_FLAG_TRADE_ITEM))
|
||||||
data.readPackGUID(m_itemTargetGUID);
|
data.readPackGUID(m_itemTargetGUID);
|
||||||
|
|
||||||
|
if (m_targetMask & (TARGET_FLAG_CORPSE_ENEMY | TARGET_FLAG_CORPSE_ALLY))
|
||||||
|
data.readPackGUID(m_CorpseTargetGUID);
|
||||||
|
|
||||||
if (m_targetMask & TARGET_FLAG_SOURCE_LOCATION)
|
if (m_targetMask & TARGET_FLAG_SOURCE_LOCATION)
|
||||||
{
|
{
|
||||||
data.readPackGUID(m_srcTransGUID);
|
data.readPackGUID(m_srcTransGUID);
|
||||||
@@ -171,7 +177,26 @@ void SpellCastTargets::Write(ByteBuffer& data)
|
|||||||
data << uint32(m_targetMask);
|
data << uint32(m_targetMask);
|
||||||
|
|
||||||
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 | TARGET_FLAG_CORPSE_ALLY | TARGET_FLAG_GAMEOBJECT | TARGET_FLAG_CORPSE_ENEMY | TARGET_FLAG_UNIT_MINIPET))
|
||||||
data.append(m_objectTargetGUID);
|
{
|
||||||
|
if (m_targetMask & TARGET_FLAG_UNIT)
|
||||||
|
{
|
||||||
|
if (m_unitTarget)
|
||||||
|
data.append(m_unitTarget->GetPackGUID());
|
||||||
|
else
|
||||||
|
data << uint8(0);
|
||||||
|
}
|
||||||
|
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_ALLY | TARGET_FLAG_CORPSE_ENEMY))
|
||||||
|
data.appendPackGUID(m_CorpseTargetGUID);
|
||||||
|
else
|
||||||
|
data << uint8(0);
|
||||||
|
}
|
||||||
|
|
||||||
if (m_targetMask & (TARGET_FLAG_ITEM | TARGET_FLAG_TRADE_ITEM))
|
if (m_targetMask & (TARGET_FLAG_ITEM | TARGET_FLAG_TRADE_ITEM))
|
||||||
{
|
{
|
||||||
@@ -213,18 +238,6 @@ void SpellCastTargets::SetUnitTarget(Unit* target)
|
|||||||
m_targetMask |= TARGET_FLAG_UNIT;
|
m_targetMask |= TARGET_FLAG_UNIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SpellCastTargets::SetGOTarget(GameObject* target)
|
|
||||||
{
|
|
||||||
m_GOTarget = target;
|
|
||||||
m_GOTargetGUID = target->GetGUID();
|
|
||||||
m_targetMask |= TARGET_FLAG_GAMEOBJECT;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SpellCastTargets::SetCorpseTarget(Corpse* corpse)
|
|
||||||
{
|
|
||||||
m_CorpseTargetGUID = corpse->GetGUID();
|
|
||||||
}
|
|
||||||
|
|
||||||
Position const* SpellCastTargets::GetSrc() const
|
Position const* SpellCastTargets::GetSrc() const
|
||||||
{
|
{
|
||||||
return &m_srcPos;
|
return &m_srcPos;
|
||||||
@@ -317,6 +330,13 @@ void SpellCastTargets::ModDst(Position const& pos)
|
|||||||
m_dstPos.Relocate(pos);
|
m_dstPos.Relocate(pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SpellCastTargets::SetGOTarget(GameObject* target)
|
||||||
|
{
|
||||||
|
m_GOTarget = target;
|
||||||
|
m_GOTargetGUID = target->GetGUID();
|
||||||
|
m_targetMask |= TARGET_FLAG_GAMEOBJECT;
|
||||||
|
}
|
||||||
|
|
||||||
void SpellCastTargets::SetItemTarget(Item* item)
|
void SpellCastTargets::SetItemTarget(Item* item)
|
||||||
{
|
{
|
||||||
if (!item)
|
if (!item)
|
||||||
@@ -346,6 +366,11 @@ void SpellCastTargets::UpdateTradeSlotItem()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SpellCastTargets::SetCorpseTarget(Corpse* corpse)
|
||||||
|
{
|
||||||
|
m_CorpseTargetGUID = corpse->GetGUID();
|
||||||
|
}
|
||||||
|
|
||||||
void SpellCastTargets::Update(Unit* caster)
|
void SpellCastTargets::Update(Unit* caster)
|
||||||
{
|
{
|
||||||
m_GOTarget = m_GOTargetGUID ? caster->GetMap()->GetGameObject(m_GOTargetGUID) : NULL;
|
m_GOTarget = m_GOTargetGUID ? caster->GetMap()->GetGameObject(m_GOTargetGUID) : NULL;
|
||||||
@@ -607,7 +632,22 @@ void Spell::SelectSpellTargets()
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*// TODO: fix this motherfucker, nothing should be added to spell targets
|
if (!targetA && !targetB)
|
||||||
|
{
|
||||||
|
if (!m_spellInfo->GetMaxRange(true))
|
||||||
|
{
|
||||||
|
AddUnitTarget(m_caster, i);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// add here custom effects that need default target.
|
||||||
|
// FOR EVERY TARGET TYPE THERE IS A DIFFERENT FILL!!
|
||||||
|
switch(m_spellInfo->Effects[i].Effect)
|
||||||
|
{
|
||||||
|
case SPELL_EFFECT_DUMMY:
|
||||||
|
{
|
||||||
|
switch(m_spellInfo->Id)
|
||||||
|
{
|
||||||
case 20577: // Cannibalize
|
case 20577: // Cannibalize
|
||||||
case 54044: // Carrion Feeder
|
case 54044: // Carrion Feeder
|
||||||
{
|
{
|
||||||
@@ -643,80 +683,7 @@ void Spell::SelectSpellTargets()
|
|||||||
finish(false);
|
finish(false);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}*/
|
|
||||||
|
|
||||||
if (!targetA && !targetB)
|
|
||||||
{
|
|
||||||
if (!m_spellInfo->GetMaxRange(true))
|
|
||||||
{
|
|
||||||
AddUnitTarget(m_caster, i);
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// IF SPELL HAS EFFECT WHICH DOES NOT FIT PURPOSE OF THE EFFECT IT SHOULD BE SELECTED ANYWAYS
|
|
||||||
// add here custom effects that need default target.
|
|
||||||
switch(m_spellInfo->Effects[i].Effect)
|
|
||||||
{
|
|
||||||
SPELL_EFFECT_INSTAKILL //unit
|
|
||||||
SPELL_EFFECT_SCHOOL_DAMAGE // unit; on missing: add explicit
|
|
||||||
SPELL_EFFECT_DUMMY // any, no; on missing: execute
|
|
||||||
SPELL_EFFECT_TELEPORT_UNITS // unit+dest
|
|
||||||
SPELL_EFFECT_APPLY_AURA // unit, on missing: explicit, caster
|
|
||||||
SPELL_EFFECT_ENVIRONMENTAL_DAMAGE //unit
|
|
||||||
SPELL_EFFECT_POWER_DRAIN //unit, on missing: add explicit
|
|
||||||
SPELL_EFFECT_HEALTH_LEECH //unit, on missing: add explicit
|
|
||||||
SPELL_EFFECT_HEAL //unit
|
|
||||||
SPELL_EFFECT_BIND //unit, on missing: add explicit
|
|
||||||
SPELL_EFFECT_QUEST_COMPLETE //unit
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// always caster
|
|
||||||
case SPELL_EFFECT_KILL_CREDIT2:
|
|
||||||
case SPELL_EFFECT_ENERGIZE:
|
|
||||||
case SPELL_EFFECT_DISPEL_MECHANIC:
|
|
||||||
//unk
|
|
||||||
|
|
||||||
case SPELL_EFFECT_LEARN_PET_SPELL:
|
|
||||||
case SPELL_EFFECT_FEED_PET:
|
|
||||||
// effects using dest, can have no target
|
|
||||||
case SPELL_EFFECT_CREATE_HOUSE:
|
|
||||||
case SPELL_EFFECT_SUMMON_PET:
|
|
||||||
case SPELL_EFFECT_149:
|
|
||||||
case SPELL_EFFECT_PERSISTENT_AREA_AURA:
|
|
||||||
case SPELL_EFFECT_ADD_FARSIGHT:
|
|
||||||
case SPELL_EFFECT_SUMMON:
|
|
||||||
case SPELL_EFFECT_TRIGGER_MISSILE:
|
|
||||||
case SPELL_EFFECT_SUMMON_OBJECT_WILD:
|
|
||||||
case SPELL_EFFECT_TRANS_DOOR:
|
|
||||||
|
|
||||||
// effects using spell explicit target
|
|
||||||
case SPELL_EFFECT_HEAL_MAX_HEALTH:
|
|
||||||
case SPELL_EFFECT_ADD_HONOR:
|
|
||||||
case SPELL_EFFECT_POWER_DRAIN:
|
|
||||||
case SPELL_EFFECT_HEALTH_LEECH:
|
|
||||||
case SPELL_EFFECT_SCHOOL_DAMAGE:
|
|
||||||
case SPELL_EFFECT_REPUTATION:
|
|
||||||
case SPELL_EFFECT_SKILL_STEP:
|
|
||||||
case SPELL_EFFECT_LEARN_SPELL:
|
|
||||||
case SPELL_EFFECT_BIND:
|
|
||||||
case SPELL_EFFECT_CREATE_ITEM:
|
|
||||||
case SPELL_EFFECT_SKIN_PLAYER_CORPSE:
|
|
||||||
case SPELL_EFFECT_UNLEARN_SPECIALIZATION:
|
|
||||||
case SPELL_EFFECT_RESURRECT_NEW:
|
|
||||||
case SPELL_EFFECT_RESURRECT:
|
|
||||||
case SPELL_EFFECT_APPLY_GLYPH:
|
|
||||||
case SPELL_EFFECT_DISPEL:
|
|
||||||
case SPELL_EFFECT_APPLY_AURA: // can have no targets - caster in that case
|
|
||||||
case SPELL_EFFECT_SUMMON_CHANGE_ITEM: // can have no targets - caster in that case
|
|
||||||
case SPELL_EFFECT_SEND_TAXI:
|
|
||||||
{
|
|
||||||
switch(m_spellInfo->Id)
|
|
||||||
{
|
|
||||||
default:
|
default:
|
||||||
if (m_targets.GetUnitTarget())
|
if (m_targets.GetUnitTarget())
|
||||||
AddUnitTarget(m_targets.GetUnitTarget(), i);
|
AddUnitTarget(m_targets.GetUnitTarget(), i);
|
||||||
@@ -726,56 +693,6 @@ void Spell::SelectSpellTargets()
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// effects using item target
|
|
||||||
case SPELL_EFFECT_ENCHANT_ITEM:
|
|
||||||
case SPELL_EFFECT_ENCHANT_ITEM_TEMPORARY:
|
|
||||||
case SPELL_EFFECT_ENCHANT_ITEM_PRISMATIC:
|
|
||||||
case SPELL_EFFECT_DISENCHANT:
|
|
||||||
case SPELL_EFFECT_PROSPECTING:
|
|
||||||
case SPELL_EFFECT_MILLING:
|
|
||||||
// can be unit target or corpse target
|
|
||||||
// possibly failure at corpse remove?
|
|
||||||
if (WorldObject* worldObject = m_targets.GetObjectTarget())
|
|
||||||
AddTarget(worldObject, i);
|
|
||||||
break;
|
|
||||||
|
|
||||||
|
|
||||||
// effects which affect caster when no target
|
|
||||||
// no target added to the spell target list for those
|
|
||||||
case SPELL_EFFECT_SEND_EVENT:
|
|
||||||
case SPELL_EFFECT_SPAWN:
|
|
||||||
case SPELL_EFFECT_DUMMY:
|
|
||||||
case SPELL_EFFECT_TRIGGER_SPELL: // null target types - cast by caster on self
|
|
||||||
case SPELL_EFFECT_SKILL:
|
|
||||||
// effects which always affect caster
|
|
||||||
// no target added to the spell target list for those
|
|
||||||
case SPELL_EFFECT_PROFICIENCY:
|
|
||||||
case SPELL_EFFECT_PARRY:
|
|
||||||
case SPELL_EFFECT_DODGE:
|
|
||||||
case SPELL_EFFECT_EVADE:
|
|
||||||
case SPELL_EFFECT_BLOCK:
|
|
||||||
case SPELL_EFFECT_STUCK:
|
|
||||||
case SPELL_EFFECT_WEAPON:
|
|
||||||
case SPELL_EFFECT_DEFENSE:
|
|
||||||
case SPELL_EFFECT_SPELL_DEFENSE:
|
|
||||||
case SPELL_EFFECT_LANGUAGE:
|
|
||||||
case SPELL_EFFECT_TRADE_SKILL:
|
|
||||||
case SPELL_EFFECT_STEALTH:
|
|
||||||
case SPELL_EFFECT_DETECT:
|
|
||||||
case SPELL_EFFECT_ATTACK:
|
|
||||||
case SPELL_EFFECT_SELF_RESURRECT:
|
|
||||||
case SPELL_EFFECT_SUMMON_PLAYER:
|
|
||||||
case SPELL_EFFECT_152:
|
|
||||||
case SPELL_EFFECT_TITAN_GRIP:
|
|
||||||
case SPELL_EFFECT_TRIGGER_SPELL_2:
|
|
||||||
case SPELL_EFFECT_DESTROY_ALL_TOTEMS:
|
|
||||||
case SPELL_EFFECT_CAST_BUTTON:
|
|
||||||
case SPELL_EFFECT_131:
|
|
||||||
case SPELL_EFFECT_FORCE_DESELECT:
|
|
||||||
// do nothing
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
case SPELL_EFFECT_BIND:
|
case SPELL_EFFECT_BIND:
|
||||||
case SPELL_EFFECT_RESURRECT:
|
case SPELL_EFFECT_RESURRECT:
|
||||||
case SPELL_EFFECT_CREATE_ITEM:
|
case SPELL_EFFECT_CREATE_ITEM:
|
||||||
@@ -785,9 +702,35 @@ void Spell::SelectSpellTargets()
|
|||||||
case SPELL_EFFECT_SUMMON_OBJECT_WILD:
|
case SPELL_EFFECT_SUMMON_OBJECT_WILD:
|
||||||
case SPELL_EFFECT_SELF_RESURRECT:
|
case SPELL_EFFECT_SELF_RESURRECT:
|
||||||
case SPELL_EFFECT_REPUTATION:
|
case SPELL_EFFECT_REPUTATION:
|
||||||
|
case SPELL_EFFECT_LEARN_SPELL:
|
||||||
case SPELL_EFFECT_SEND_TAXI:
|
case SPELL_EFFECT_SEND_TAXI:
|
||||||
if (m_targets.GetUnitTarget())
|
if (m_targets.GetUnitTarget())
|
||||||
AddUnitTarget(m_targets.GetUnitTarget(), i);
|
AddUnitTarget(m_targets.GetUnitTarget(), i);
|
||||||
|
// Triggered spells have additional spell targets - cast them even if no explicit unit target is given (required for spell 50516 for example)
|
||||||
|
else if (m_spellInfo->Effects[i].Effect == SPELL_EFFECT_TRIGGER_SPELL)
|
||||||
|
AddUnitTarget(m_caster, i);
|
||||||
|
break;
|
||||||
|
case SPELL_EFFECT_SUMMON_PLAYER:
|
||||||
|
if (m_caster->GetTypeId() == TYPEID_PLAYER && m_caster->ToPlayer()->GetSelection())
|
||||||
|
{
|
||||||
|
Player* target = ObjectAccessor::FindPlayer(m_caster->ToPlayer()->GetSelection());
|
||||||
|
if (target)
|
||||||
|
AddUnitTarget(target, i);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SPELL_EFFECT_RESURRECT_NEW:
|
||||||
|
if (m_targets.GetUnitTarget())
|
||||||
|
AddUnitTarget(m_targets.GetUnitTarget(), i);
|
||||||
|
if (m_targets.GetCorpseTargetGUID())
|
||||||
|
{
|
||||||
|
Corpse *corpse = ObjectAccessor::GetCorpse(*m_caster, m_targets.GetCorpseTargetGUID());
|
||||||
|
if (corpse)
|
||||||
|
{
|
||||||
|
Player* owner = ObjectAccessor::FindPlayer(corpse->GetOwnerGUID());
|
||||||
|
if (owner)
|
||||||
|
AddUnitTarget(owner, i);
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case SPELL_EFFECT_SUMMON_CHANGE_ITEM:
|
case SPELL_EFFECT_SUMMON_CHANGE_ITEM:
|
||||||
case SPELL_EFFECT_ADD_FARSIGHT:
|
case SPELL_EFFECT_ADD_FARSIGHT:
|
||||||
@@ -805,14 +748,30 @@ void Spell::SelectSpellTargets()
|
|||||||
case SPELL_EFFECT_APPLY_AURA:
|
case SPELL_EFFECT_APPLY_AURA:
|
||||||
switch(m_spellInfo->Effects[i].ApplyAuraName)
|
switch(m_spellInfo->Effects[i].ApplyAuraName)
|
||||||
{
|
{
|
||||||
|
case SPELL_AURA_ADD_FLAT_MODIFIER: // some spell mods auras have 0 target modes instead expected TARGET_UNIT_CASTER(1) (and present for other ranks for same spell for example)
|
||||||
|
case SPELL_AURA_ADD_PCT_MODIFIER:
|
||||||
|
AddUnitTarget(m_caster, i);
|
||||||
|
break;
|
||||||
default: // apply to target in other case
|
default: // apply to target in other case
|
||||||
if (m_targets.GetUnitTarget())
|
if (m_targets.GetUnitTarget())
|
||||||
AddUnitTarget(m_targets.GetUnitTarget(), i);
|
AddUnitTarget(m_targets.GetUnitTarget(), i);
|
||||||
else
|
|
||||||
AddUnitTarget(m_caster, i);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case SPELL_EFFECT_SKIN_PLAYER_CORPSE:
|
||||||
|
if (m_targets.GetUnitTarget())
|
||||||
|
AddUnitTarget(m_targets.GetUnitTarget(), i);
|
||||||
|
else if (m_targets.GetCorpseTargetGUID())
|
||||||
|
{
|
||||||
|
Corpse *corpse = ObjectAccessor::GetCorpse(*m_caster, m_targets.GetCorpseTargetGUID());
|
||||||
|
if (corpse)
|
||||||
|
{
|
||||||
|
Player* owner = ObjectAccessor::FindPlayer(corpse->GetOwnerGUID());
|
||||||
|
if (owner)
|
||||||
|
AddUnitTarget(owner, i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
AddUnitTarget(m_caster, i);
|
AddUnitTarget(m_caster, i);
|
||||||
break;
|
break;
|
||||||
@@ -1238,7 +1197,7 @@ void Spell::DoAllEffectOnTarget(TargetInfo *target)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Do not take combo points on dodge and miss
|
// Do not take combo points on dodge and miss
|
||||||
if (m_needComboPoints && m_targets.GetObjectTargetGUID() == target->targetGUID)
|
if (m_needComboPoints && m_targets.GetUnitTargetGUID() == target->targetGUID)
|
||||||
if (missInfo != SPELL_MISS_NONE)
|
if (missInfo != SPELL_MISS_NONE)
|
||||||
{
|
{
|
||||||
m_needComboPoints = false;
|
m_needComboPoints = false;
|
||||||
@@ -2400,7 +2359,7 @@ void Spell::SelectEffectTargets(uint32 i, SpellImplicitTargetInfo const& cur)
|
|||||||
AddGOTarget(m_targets.GetGOTarget(), i);
|
AddGOTarget(m_targets.GetGOTarget(), i);
|
||||||
break;
|
break;
|
||||||
case TARGET_GAMEOBJECT_ITEM:
|
case TARGET_GAMEOBJECT_ITEM:
|
||||||
if (m_targets.GetGOTarget())
|
if (m_targets.GetGOTargetGUID())
|
||||||
AddGOTarget(m_targets.GetGOTarget(), i);
|
AddGOTarget(m_targets.GetGOTarget(), i);
|
||||||
else if (m_targets.GetItemTarget())
|
else if (m_targets.GetItemTarget())
|
||||||
AddItemTarget(m_targets.GetItemTarget(), i);
|
AddItemTarget(m_targets.GetItemTarget(), i);
|
||||||
@@ -2850,7 +2809,7 @@ void Spell::prepare(SpellCastTargets const* targets, AuraEffect const* triggered
|
|||||||
|
|
||||||
m_targets = *targets;
|
m_targets = *targets;
|
||||||
|
|
||||||
if (!m_targets.GetObjectTargetGUID() && m_spellInfo->Targets & TARGET_FLAG_UNIT)
|
if (!m_targets.GetUnitTargetGUID() && m_spellInfo->Targets & TARGET_FLAG_UNIT)
|
||||||
{
|
{
|
||||||
Unit* target = NULL;
|
Unit* target = NULL;
|
||||||
if (m_caster->GetTypeId() == TYPEID_UNIT)
|
if (m_caster->GetTypeId() == TYPEID_UNIT)
|
||||||
@@ -3109,7 +3068,7 @@ void Spell::cast(bool skipCheck)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// cancel at lost main target unit
|
// cancel at lost main target unit
|
||||||
if (m_targets.GetObjectTargetGUID() && m_targets.GetObjectTargetGUID() != m_caster->GetGUID())
|
if (m_targets.GetUnitTargetGUID() && m_targets.GetUnitTargetGUID() != m_caster->GetGUID())
|
||||||
{
|
{
|
||||||
cancel();
|
cancel();
|
||||||
return;
|
return;
|
||||||
@@ -3535,7 +3494,7 @@ void Spell::update(uint32 difftime)
|
|||||||
// update pointers based at it's GUIDs
|
// update pointers based at it's GUIDs
|
||||||
UpdatePointers();
|
UpdatePointers();
|
||||||
|
|
||||||
if (m_targets.GetObjectTargetGUID() && !m_targets.GetObjectTarget())
|
if (m_targets.GetUnitTargetGUID() && !m_targets.GetUnitTarget())
|
||||||
{
|
{
|
||||||
sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "Spell %u is cancelled due to removal of target.", m_spellInfo->Id);
|
sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "Spell %u is cancelled due to removal of target.", m_spellInfo->Id);
|
||||||
cancel();
|
cancel();
|
||||||
@@ -4347,7 +4306,7 @@ void Spell::TakePower()
|
|||||||
if (m_caster->GetTypeId() == TYPEID_PLAYER)
|
if (m_caster->GetTypeId() == TYPEID_PLAYER)
|
||||||
{
|
{
|
||||||
if (m_spellInfo->PowerType == POWER_RAGE || m_spellInfo->PowerType == POWER_ENERGY || m_spellInfo->PowerType == POWER_RUNE)
|
if (m_spellInfo->PowerType == POWER_RAGE || m_spellInfo->PowerType == POWER_ENERGY || m_spellInfo->PowerType == POWER_RUNE)
|
||||||
if (uint64 targetGUID = m_targets.GetObjectTargetGUID())
|
if (uint64 targetGUID = m_targets.GetUnitTargetGUID())
|
||||||
for (std::list<TargetInfo>::iterator ihit= m_UniqueTargetInfo.begin(); ihit != m_UniqueTargetInfo.end(); ++ihit)
|
for (std::list<TargetInfo>::iterator ihit= m_UniqueTargetInfo.begin(); ihit != m_UniqueTargetInfo.end(); ++ihit)
|
||||||
if (ihit->targetGUID == targetGUID)
|
if (ihit->targetGUID == targetGUID)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -133,16 +133,10 @@ class SpellCastTargets
|
|||||||
uint32 GetTargetMask() const { return m_targetMask; }
|
uint32 GetTargetMask() const { return m_targetMask; }
|
||||||
void SetTargetMask(uint32 newMask) { m_targetMask = newMask; }
|
void SetTargetMask(uint32 newMask) { m_targetMask = newMask; }
|
||||||
|
|
||||||
uint64 GetObjectTargetGUID() const { return m_objectTargetGUID; }
|
uint64 GetUnitTargetGUID() const { return m_unitTargetGUID; }
|
||||||
WorldObject * GetObjectTarget() const { return m_objectTarget; }
|
Unit* GetUnitTarget() const { return m_unitTarget; }
|
||||||
Unit* GetUnitTarget() const { return m_objectTarget ? m_objectTarget->ToUnit() : NULL; }
|
|
||||||
void SetUnitTarget(Unit* target);
|
void SetUnitTarget(Unit* target);
|
||||||
|
|
||||||
GameObject* GetGOTarget() const { return m_objectTarget ? m_objectTarget->ToUnit() : NULL;; }
|
|
||||||
void SetGOTarget(GameObject* target);
|
|
||||||
|
|
||||||
void SetCorpseTarget(Corpse* corpse);
|
|
||||||
|
|
||||||
Position const* GetSrc() const;
|
Position const* GetSrc() const;
|
||||||
void SetSrc(float x, float y, float z);
|
void SetSrc(float x, float y, float z);
|
||||||
void SetSrc(Position const& pos);
|
void SetSrc(Position const& pos);
|
||||||
@@ -156,6 +150,13 @@ class SpellCastTargets
|
|||||||
void SetDst(SpellCastTargets const& spellTargets);
|
void SetDst(SpellCastTargets const& spellTargets);
|
||||||
void ModDst(Position const& pos);
|
void ModDst(Position const& pos);
|
||||||
|
|
||||||
|
uint64 GetGOTargetGUID() const { return m_GOTargetGUID; }
|
||||||
|
GameObject* GetGOTarget() const { return m_GOTarget; }
|
||||||
|
void SetGOTarget(GameObject* target);
|
||||||
|
|
||||||
|
uint64 GetCorpseTargetGUID() const { return m_CorpseTargetGUID; }
|
||||||
|
void SetCorpseTarget(Corpse* corpse);
|
||||||
|
|
||||||
uint64 GetItemTargetGUID() const { return m_itemTargetGUID; }
|
uint64 GetItemTargetGUID() const { return m_itemTargetGUID; }
|
||||||
Item* GetItemTarget() const { return m_itemTarget; }
|
Item* GetItemTarget() const { return m_itemTarget; }
|
||||||
uint32 GetItemTargetEntry() const { return m_itemTargetEntry; }
|
uint32 GetItemTargetEntry() const { return m_itemTargetEntry; }
|
||||||
@@ -183,10 +184,15 @@ class SpellCastTargets
|
|||||||
private:
|
private:
|
||||||
uint32 m_targetMask;
|
uint32 m_targetMask;
|
||||||
|
|
||||||
WorldObject* m_objectTarget; // can be used at spell creating and after Update
|
// objects (can be used at spell creating and after Update at casting
|
||||||
|
Unit* m_unitTarget;
|
||||||
|
GameObject* m_GOTarget;
|
||||||
|
Item* m_itemTarget;
|
||||||
|
|
||||||
// object GUID/etc, can be used always
|
// object GUID/etc, can be used always
|
||||||
uint64 m_objectTargetGUID;
|
uint64 m_unitTargetGUID;
|
||||||
|
uint64 m_GOTargetGUID;
|
||||||
|
uint64 m_CorpseTargetGUID;
|
||||||
uint64 m_itemTargetGUID;
|
uint64 m_itemTargetGUID;
|
||||||
uint32 m_itemTargetEntry;
|
uint32 m_itemTargetEntry;
|
||||||
|
|
||||||
|
|||||||
@@ -5834,14 +5834,14 @@ void Spell::EffectAddExtraAttacks(SpellEffIndex effIndex)
|
|||||||
|
|
||||||
void Spell::EffectParry(SpellEffIndex /*effIndex*/)
|
void Spell::EffectParry(SpellEffIndex /*effIndex*/)
|
||||||
{
|
{
|
||||||
if (m_caster->GetTypeId() == TYPEID_PLAYER)
|
if (unitTarget && unitTarget->GetTypeId() == TYPEID_PLAYER)
|
||||||
m_caster->ToPlayer()->SetCanParry(true);
|
unitTarget->ToPlayer()->SetCanParry(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Spell::EffectBlock(SpellEffIndex /*effIndex*/)
|
void Spell::EffectBlock(SpellEffIndex /*effIndex*/)
|
||||||
{
|
{
|
||||||
if (m_caster->GetTypeId() == TYPEID_PLAYER)
|
if (unitTarget && unitTarget->GetTypeId() == TYPEID_PLAYER)
|
||||||
m_caster->ToPlayer()->SetCanBlock(true);
|
unitTarget->ToPlayer()->SetCanBlock(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Spell::EffectLeap(SpellEffIndex /*effIndex*/)
|
void Spell::EffectLeap(SpellEffIndex /*effIndex*/)
|
||||||
|
|||||||
@@ -94,264 +94,6 @@ void SpellImplicitTargetInfo::InitAreaData()
|
|||||||
|
|
||||||
void SpellImplicitTargetInfo::InitTypeData()
|
void SpellImplicitTargetInfo::InitTypeData()
|
||||||
{
|
{
|
||||||
for (uint8 i = 0; i < TOTAL_SPELL_TARGETS; ++i)
|
|
||||||
{
|
|
||||||
switch (i)
|
|
||||||
{
|
|
||||||
case TARGET_UNIT_CASTER:
|
|
||||||
case TARGET_UNIT_NEARBY_ENTRY:
|
|
||||||
case TARGET_UNIT_NEARBY_ENEMY:
|
|
||||||
case TARGET_UNIT_NEARBY_ALLY:
|
|
||||||
case TARGET_UNIT_NEARBY_PARTY:
|
|
||||||
case TARGET_UNIT_NEARBY_RAID:
|
|
||||||
case TARGET_DEST_NEARBY_ENTRY:
|
|
||||||
case TARGET_UNIT_PET:
|
|
||||||
case TARGET_UNIT_MASTER:
|
|
||||||
case TARGET_UNIT_SUMMONER:
|
|
||||||
case TARGET_UNIT_VEHICLE:
|
|
||||||
case TARGET_UNIT_PASSENGER_0:
|
|
||||||
case TARGET_UNIT_PASSENGER_1:
|
|
||||||
case TARGET_UNIT_PASSENGER_2:
|
|
||||||
case TARGET_UNIT_PASSENGER_3:
|
|
||||||
case TARGET_UNIT_PASSENGER_4:
|
|
||||||
case TARGET_UNIT_PASSENGER_5:
|
|
||||||
case TARGET_UNIT_PASSENGER_6:
|
|
||||||
case TARGET_UNIT_PASSENGER_7:
|
|
||||||
case TARGET_DEST_CHANNEL_TARGET:
|
|
||||||
case TARGET_UNIT_CHANNEL_TARGET:
|
|
||||||
case TARGET_DEST_CHANNEL_CASTER:
|
|
||||||
case TARGET_UNIT_AREA_PARTY:
|
|
||||||
case TARGET_UNIT_AREA_RAID:
|
|
||||||
case TARGET_UNIT_CONE_ENEMY_24:
|
|
||||||
case TARGET_UNIT_CONE_ENEMY_54:
|
|
||||||
case TARGET_UNIT_CONE_ENEMY_104:
|
|
||||||
case TARGET_UNIT_CONE_ALLY:
|
|
||||||
case TARGET_UNIT_CONE_ENTRY:
|
|
||||||
case TARGET_GAMEOBJECT_CONE:
|
|
||||||
case TARGET_GAMEOBJECT_NEARBY_ENTRY:
|
|
||||||
case TARGET_SRC_CASTER:
|
|
||||||
case TARGET_DEST_HOME:
|
|
||||||
case TARGET_DEST_DB:
|
|
||||||
case TARGET_DEST_CASTER:
|
|
||||||
case TARGET_DEST_CASTER_SUMMON:
|
|
||||||
case TARGET_DEST_CASTER_FISHING:
|
|
||||||
case TARGET_DEST_CASTER_FRONT_LEAP:
|
|
||||||
case TARGET_DEST_CASTER_UNKNOWN_36:
|
|
||||||
case TARGET_DEST_CASTER_FRONT:
|
|
||||||
case TARGET_DEST_CASTER_BACK:
|
|
||||||
case TARGET_DEST_CASTER_RIGHT:
|
|
||||||
case TARGET_DEST_CASTER_LEFT:
|
|
||||||
case TARGET_DEST_CASTER_FRONT_RIGHT:
|
|
||||||
case TARGET_DEST_CASTER_BACK_RIGHT:
|
|
||||||
case TARGET_DEST_CASTER_BACK_LEFT:
|
|
||||||
case TARGET_DEST_CASTER_FRONT_LEFT:
|
|
||||||
case TARGET_DEST_CASTER_RANDOM:
|
|
||||||
case TARGET_DEST_CASTER_RADIUS:
|
|
||||||
ReferenceType[i] = TARGET_REFERENCE_TYPE_CASTER;
|
|
||||||
break;
|
|
||||||
case TARGET_UNIT_TARGET_ENEMY:
|
|
||||||
case TARGET_UNIT_TARGET_ALLY:
|
|
||||||
case TARGET_UNIT_TARGET_ANY:
|
|
||||||
case TARGET_UNIT_TARGET_PARTY:
|
|
||||||
case TARGET_UNIT_TARGET_RAID:
|
|
||||||
case TARGET_UNIT_TARGET_RAID_OR_PARTY:
|
|
||||||
case TARGET_UNIT_TARGET_MINIPET:
|
|
||||||
case TARGET_UNIT_TARGET_PASSENGER:
|
|
||||||
case TARGET_UNIT_TARGET_AREA_PARTY:
|
|
||||||
case TARGET_UNIT_TARGET_RAID_AREA_CLASS:
|
|
||||||
case TARGET_UNIT_TARGET_CASTER_SRC:
|
|
||||||
case TARGET_GAMEOBJECT_TARGET:
|
|
||||||
case TARGET_GAMEOBJECT_ITEM_TARGET:
|
|
||||||
case TARGET_DEST_TARGET_ANY:
|
|
||||||
case TARGET_DEST_TARGET_ENEMY:
|
|
||||||
case TARGET_DEST_TARGET_FRONT:
|
|
||||||
case TARGET_DEST_TARGET_BACK:
|
|
||||||
case TARGET_DEST_TARGET_RIGHT:
|
|
||||||
case TARGET_DEST_TARGET_LEFT:
|
|
||||||
case TARGET_DEST_TARGET_FRONT_RIGHT:
|
|
||||||
case TARGET_DEST_TARGET_BACK_RIGHT:
|
|
||||||
case TARGET_DEST_TARGET_BACK_LEFT:
|
|
||||||
case TARGET_DEST_TARGET_FRONT_LEFT:
|
|
||||||
case TARGET_DEST_TARGET_RANDOM:
|
|
||||||
case TARGET_DEST_TARGET_RADIUS:
|
|
||||||
ReferenceType[i] = TARGET_REFERENCE_TYPE_TARGET;
|
|
||||||
break;
|
|
||||||
case TARGET_UNIT_AREA_ENTRY_SRC:
|
|
||||||
case TARGET_UNIT_AREA_ENEMY_SRC:
|
|
||||||
case TARGET_UNIT_AREA_ALLY_SRC:
|
|
||||||
case TARGET_UNIT_AREA_PARTY_SRC:
|
|
||||||
case TARGET_GAMEOBJECT_AREA_SRC:
|
|
||||||
ReferenceType[i] = TARGET_REFERENCE_TYPE_SRC;
|
|
||||||
break;
|
|
||||||
case TARGET_UNIT_AREA_ENTRY_DST:
|
|
||||||
case TARGET_UNIT_AREA_ENEMY_DST:
|
|
||||||
case TARGET_UNIT_AREA_ALLY_DST:
|
|
||||||
case TARGET_UNIT_AREA_PARTY_DST:
|
|
||||||
case TARGET_GAMEOBJECT_AREA_DST:
|
|
||||||
case TARGET_DEST_DEST_FRONT:
|
|
||||||
case TARGET_DEST_DEST_BACK:
|
|
||||||
case TARGET_DEST_DEST_RIGHT:
|
|
||||||
case TARGET_DEST_DEST_LEFT:
|
|
||||||
case TARGET_DEST_DEST_FRONT_RIGHT:
|
|
||||||
case TARGET_DEST_DEST_BACK_RIGHT:
|
|
||||||
case TARGET_DEST_DEST_BACK_LEFT:
|
|
||||||
case TARGET_DEST_DEST_FRONT_LEFT:
|
|
||||||
case TARGET_DEST_DEST_RANDOM:
|
|
||||||
case TARGET_DEST_DEST_RANDOM_DIR_DIST:
|
|
||||||
case TARGET_DEST_DEST:
|
|
||||||
case TARGET_DEST_DYNOBJ_ENEMY:
|
|
||||||
case TARGET_DEST_DYNOBJ_ALLY:
|
|
||||||
case TARGET_DEST_DYNOBJ_NONE:
|
|
||||||
case TARGET_DEST_TRAJ:
|
|
||||||
ReferenceType[i] = TARGET_REFERENCE_TYPE_DST;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (uint8 i = 0; i < TOTAL_SPELL_TARGETS; ++i)
|
|
||||||
{
|
|
||||||
switch (i)
|
|
||||||
{
|
|
||||||
case TARGET_UNIT_CASTER:
|
|
||||||
case TARGET_UNIT_NEARBY_ENTRY:
|
|
||||||
case TARGET_UNIT_NEARBY_ENEMY:
|
|
||||||
case TARGET_UNIT_NEARBY_ALLY:
|
|
||||||
case TARGET_UNIT_NEARBY_PARTY:
|
|
||||||
case TARGET_UNIT_NEARBY_RAID:
|
|
||||||
case TARGET_UNIT_PET:
|
|
||||||
case TARGET_UNIT_MASTER:
|
|
||||||
case TARGET_UNIT_SUMMONER:
|
|
||||||
case TARGET_UNIT_VEHICLE:
|
|
||||||
case TARGET_UNIT_PASSENGER_0:
|
|
||||||
case TARGET_UNIT_PASSENGER_1:
|
|
||||||
case TARGET_UNIT_PASSENGER_2:
|
|
||||||
case TARGET_UNIT_PASSENGER_3:
|
|
||||||
case TARGET_UNIT_PASSENGER_4:
|
|
||||||
case TARGET_UNIT_PASSENGER_5:
|
|
||||||
case TARGET_UNIT_PASSENGER_6:
|
|
||||||
case TARGET_UNIT_PASSENGER_7:
|
|
||||||
case TARGET_UNIT_CHANNEL_TARGET:
|
|
||||||
case TARGET_UNIT_AREA_PARTY:
|
|
||||||
case TARGET_UNIT_AREA_RAID:
|
|
||||||
case TARGET_UNIT_CONE_ENEMY_24:
|
|
||||||
case TARGET_UNIT_CONE_ENEMY_54:
|
|
||||||
case TARGET_UNIT_CONE_ENEMY_104:
|
|
||||||
case TARGET_UNIT_CONE_ALLY:
|
|
||||||
case TARGET_UNIT_CONE_ENTRY:
|
|
||||||
case TARGET_UNIT_TARGET_ENEMY:
|
|
||||||
case TARGET_UNIT_TARGET_ALLY:
|
|
||||||
case TARGET_UNIT_TARGET_ANY:
|
|
||||||
case TARGET_UNIT_TARGET_PARTY:
|
|
||||||
case TARGET_UNIT_TARGET_RAID:
|
|
||||||
case TARGET_UNIT_TARGET_RAID_OR_PARTY:
|
|
||||||
case TARGET_UNIT_TARGET_MINIPET:
|
|
||||||
case TARGET_UNIT_TARGET_PASSENGER:
|
|
||||||
case TARGET_UNIT_TARGET_AREA_PARTY:
|
|
||||||
case TARGET_UNIT_TARGET_RAID_AREA_CLASS:
|
|
||||||
case TARGET_UNIT_TARGET_CASTER_SRC:
|
|
||||||
case TARGET_UNIT_AREA_ENTRY_SRC:
|
|
||||||
case TARGET_UNIT_AREA_ENEMY_SRC:
|
|
||||||
case TARGET_UNIT_AREA_ALLY_SRC:
|
|
||||||
case TARGET_UNIT_AREA_PARTY_SRC:
|
|
||||||
|
|
||||||
case TARGET_DEST_NEARBY_ENTRY:
|
|
||||||
case TARGET_DEST_CHANNEL_TARGET:
|
|
||||||
case TARGET_DEST_CHANNEL_CASTER:
|
|
||||||
case TARGET_DEST_HOME:
|
|
||||||
case TARGET_DEST_DB:
|
|
||||||
case TARGET_DEST_CASTER:
|
|
||||||
case TARGET_DEST_CASTER_SUMMON:
|
|
||||||
case TARGET_DEST_CASTER_FISHING:
|
|
||||||
case TARGET_DEST_CASTER_FRONT_LEAP:
|
|
||||||
case TARGET_DEST_CASTER_UNKNOWN_36:
|
|
||||||
case TARGET_DEST_CASTER_FRONT:
|
|
||||||
case TARGET_DEST_CASTER_BACK:
|
|
||||||
case TARGET_DEST_CASTER_RIGHT:
|
|
||||||
case TARGET_DEST_CASTER_LEFT:
|
|
||||||
case TARGET_DEST_CASTER_FRONT_RIGHT:
|
|
||||||
case TARGET_DEST_CASTER_BACK_RIGHT:
|
|
||||||
case TARGET_DEST_CASTER_BACK_LEFT:
|
|
||||||
case TARGET_DEST_CASTER_FRONT_LEFT:
|
|
||||||
case TARGET_DEST_CASTER_RANDOM:
|
|
||||||
case TARGET_DEST_CASTER_RADIUS:
|
|
||||||
case TARGET_DEST_TARGET_ANY:
|
|
||||||
case TARGET_DEST_TARGET_ENEMY:
|
|
||||||
case TARGET_DEST_TARGET_FRONT:
|
|
||||||
case TARGET_DEST_TARGET_BACK:
|
|
||||||
case TARGET_DEST_TARGET_RIGHT:
|
|
||||||
case TARGET_DEST_TARGET_LEFT:
|
|
||||||
case TARGET_DEST_TARGET_FRONT_RIGHT:
|
|
||||||
case TARGET_DEST_TARGET_BACK_RIGHT:
|
|
||||||
case TARGET_DEST_TARGET_BACK_LEFT:
|
|
||||||
case TARGET_DEST_TARGET_FRONT_LEFT:
|
|
||||||
case TARGET_DEST_TARGET_RANDOM:
|
|
||||||
case TARGET_DEST_TARGET_RADIUS:
|
|
||||||
case TARGET_DEST_DEST_FRONT:
|
|
||||||
case TARGET_DEST_DEST_BACK:
|
|
||||||
case TARGET_DEST_DEST_RIGHT:
|
|
||||||
case TARGET_DEST_DEST_LEFT:
|
|
||||||
case TARGET_DEST_DEST_FRONT_RIGHT:
|
|
||||||
case TARGET_DEST_DEST_BACK_RIGHT:
|
|
||||||
case TARGET_DEST_DEST_BACK_LEFT:
|
|
||||||
case TARGET_DEST_DEST_FRONT_LEFT:
|
|
||||||
case TARGET_DEST_DEST_RANDOM:
|
|
||||||
case TARGET_DEST_DEST_RANDOM_DIR_DIST:
|
|
||||||
case TARGET_DEST_DEST:
|
|
||||||
case TARGET_DEST_DYNOBJ_ENEMY:
|
|
||||||
case TARGET_DEST_DYNOBJ_ALLY:
|
|
||||||
case TARGET_DEST_DYNOBJ_NONE:
|
|
||||||
case TARGET_DEST_TRAJ:
|
|
||||||
|
|
||||||
case TARGET_GAMEOBJECT_CONE:
|
|
||||||
case TARGET_GAMEOBJECT_NEARBY_ENTRY:
|
|
||||||
case TARGET_GAMEOBJECT_TARGET:
|
|
||||||
case TARGET_GAMEOBJECT_ITEM_TARGET:
|
|
||||||
case TARGET_GAMEOBJECT_AREA_SRC:
|
|
||||||
case TARGET_GAMEOBJECT_AREA_DST:
|
|
||||||
|
|
||||||
case TARGET_SRC_CASTER:
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (uint8 i = 0; i < TOTAL_SPELL_TARGETS; ++i)
|
|
||||||
{
|
|
||||||
switch (i)
|
|
||||||
{
|
|
||||||
case TARGET_DEST_CHANNEL_TARGET:
|
|
||||||
case TARGET_UNIT_CHANNEL_TARGET:
|
|
||||||
case TARGET_DEST_CHANNEL_CASTER:
|
|
||||||
TARGET_SELECT_TYPE_CHANNEL
|
|
||||||
|
|
||||||
case TARGET_UNIT_CONE_ENEMY_24:
|
|
||||||
case TARGET_UNIT_CONE_ENEMY_54:
|
|
||||||
case TARGET_UNIT_CONE_ENEMY_104:
|
|
||||||
case TARGET_UNIT_CONE_ALLY:
|
|
||||||
case TARGET_UNIT_CONE_ENTRY:
|
|
||||||
case TARGET_GAMEOBJECT_CONE:
|
|
||||||
|
|
||||||
case TARGET_UNIT_NEARBY_ENTRY:
|
|
||||||
case TARGET_UNIT_NEARBY_ENEMY:
|
|
||||||
case TARGET_UNIT_NEARBY_ALLY:
|
|
||||||
case TARGET_UNIT_NEARBY_PARTY:
|
|
||||||
case TARGET_UNIT_NEARBY_RAID:
|
|
||||||
case TARGET_DEST_NEARBY_ENTRY:
|
|
||||||
case TARGET_GAMEOBJECT_NEARBY_ENTRY:
|
|
||||||
|
|
||||||
case TARGET_UNIT_AREA_PARTY:
|
|
||||||
case TARGET_UNIT_AREA_RAID:
|
|
||||||
case TARGET_UNIT_TARGET_AREA_PARTY:
|
|
||||||
case TARGET_UNIT_TARGET_RAID_AREA_CLASS:
|
|
||||||
case TARGET_UNIT_AREA_ENTRY_SRC:
|
|
||||||
case TARGET_UNIT_AREA_ENEMY_SRC:
|
|
||||||
case TARGET_UNIT_AREA_ALLY_SRC:
|
|
||||||
case TARGET_UNIT_AREA_PARTY_SRC:
|
|
||||||
case TARGET_GAMEOBJECT_AREA_SRC:
|
|
||||||
case TARGET_UNIT_AREA_ENTRY_DST:
|
|
||||||
case TARGET_UNIT_AREA_ENEMY_DST:
|
|
||||||
case TARGET_UNIT_AREA_ALLY_DST:
|
|
||||||
case TARGET_UNIT_AREA_PARTY_DST:
|
|
||||||
case TARGET_GAMEOBJECT_AREA_DST:
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (uint8 i = 0; i < TOTAL_SPELL_TARGETS; ++i)
|
for (uint8 i = 0; i < TOTAL_SPELL_TARGETS; ++i)
|
||||||
{
|
{
|
||||||
switch (i)
|
switch (i)
|
||||||
|
|||||||
@@ -41,31 +41,6 @@ enum SpellEffectTargetTypes
|
|||||||
SPELL_REQUIRE_GOBJECT,
|
SPELL_REQUIRE_GOBJECT,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum SpellTargetReferenceTypes
|
|
||||||
{
|
|
||||||
TARGET_REFERENCE_TYPE_CASTER,
|
|
||||||
TARGET_REFERENCE_TYPE_TARGET,
|
|
||||||
TARGET_REFERENCE_TYPE_SRC,
|
|
||||||
TARGET_REFERENCE_TYPE_DEST,
|
|
||||||
};
|
|
||||||
|
|
||||||
enum SpellTargetObjectTypes
|
|
||||||
{
|
|
||||||
TARGET_OBJECT_TYPE_SRC,
|
|
||||||
TARGET_OBJECT_TYPE_DEST,
|
|
||||||
TARGET_OBJECT_TYPE_UNIT,
|
|
||||||
TARGET_OBJECT_TYPE_GAMEOBJECT,
|
|
||||||
};
|
|
||||||
|
|
||||||
enum SpellTargetSelectTypes
|
|
||||||
{
|
|
||||||
TARGET_SELECT_TYPE_DEFAULT,
|
|
||||||
TARGET_SELECT_TYPE_CHANNEL,
|
|
||||||
TARGET_SELECT_TYPE_NEARBY,
|
|
||||||
TARGET_SELECT_TYPE_CONE,
|
|
||||||
TARGET_SELECT_TYPE_AREA,
|
|
||||||
};
|
|
||||||
|
|
||||||
enum SpellSelectTargetTypes
|
enum SpellSelectTargetTypes
|
||||||
{
|
{
|
||||||
TARGET_TYPE_DEFAULT,
|
TARGET_TYPE_DEFAULT,
|
||||||
|
|||||||
Reference in New Issue
Block a user