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:
QAston
2011-07-28 23:44:39 +02:00
parent 07badd7385
commit 495ead5f7f
9 changed files with 168 additions and 485 deletions
@@ -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++)
{
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);
}
+108 -149
View File
@@ -117,15 +117,21 @@ void SpellCastTargets::Read(ByteBuffer& data, Unit* caster)
{
data >> m_targetMask;
if (m_targetMask == TARGET_FLAG_NONE)
if (m_targetMask == TARGET_FLAG_SELF)
return;
if (m_targetMask & (TARGET_FLAG_UNIT | TARGET_FLAG_UNIT_MINIPET | TARGET_FLAG_GAMEOBJECT | TARGET_FLAG_CORPSE_ENEMY | TARGET_FLAG_CORPSE_ALLY))
data.readPackGUID(m_objectTargetGUID);
if (m_targetMask & (TARGET_FLAG_UNIT | TARGET_FLAG_UNIT_MINIPET))
data.readPackGUID(m_unitTargetGUID);
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_ENEMY | TARGET_FLAG_CORPSE_ALLY))
data.readPackGUID(m_CorpseTargetGUID);
if (m_targetMask & TARGET_FLAG_SOURCE_LOCATION)
{
data.readPackGUID(m_srcTransGUID);
@@ -171,7 +177,26 @@ void SpellCastTargets::Write(ByteBuffer& data)
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))
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))
{
@@ -213,18 +238,6 @@ void SpellCastTargets::SetUnitTarget(Unit* target)
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
{
return &m_srcPos;
@@ -317,6 +330,13 @@ void SpellCastTargets::ModDst(Position const& 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)
{
if (!item)
@@ -346,6 +366,11 @@ void SpellCastTargets::UpdateTradeSlotItem()
}
}
void SpellCastTargets::SetCorpseTarget(Corpse* corpse)
{
m_CorpseTargetGUID = corpse->GetGUID();
}
void SpellCastTargets::Update(Unit* caster)
{
m_GOTarget = m_GOTargetGUID ? caster->GetMap()->GetGameObject(m_GOTargetGUID) : NULL;
@@ -607,7 +632,22 @@ void Spell::SelectSpellTargets()
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 54044: // Carrion Feeder
{
@@ -643,80 +683,7 @@ void Spell::SelectSpellTargets()
finish(false);
}
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:
if (m_targets.GetUnitTarget())
AddUnitTarget(m_targets.GetUnitTarget(), i);
@@ -726,56 +693,6 @@ void Spell::SelectSpellTargets()
}
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_RESURRECT:
case SPELL_EFFECT_CREATE_ITEM:
@@ -785,9 +702,35 @@ void Spell::SelectSpellTargets()
case SPELL_EFFECT_SUMMON_OBJECT_WILD:
case SPELL_EFFECT_SELF_RESURRECT:
case SPELL_EFFECT_REPUTATION:
case SPELL_EFFECT_LEARN_SPELL:
case SPELL_EFFECT_SEND_TAXI:
if (m_targets.GetUnitTarget())
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;
case SPELL_EFFECT_SUMMON_CHANGE_ITEM:
case SPELL_EFFECT_ADD_FARSIGHT:
@@ -805,14 +748,30 @@ void Spell::SelectSpellTargets()
case SPELL_EFFECT_APPLY_AURA:
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
if (m_targets.GetUnitTarget())
AddUnitTarget(m_targets.GetUnitTarget(), i);
else
AddUnitTarget(m_caster, i);
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:
AddUnitTarget(m_caster, i);
break;
@@ -1238,7 +1197,7 @@ void Spell::DoAllEffectOnTarget(TargetInfo *target)
}
// 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)
{
m_needComboPoints = false;
@@ -2400,7 +2359,7 @@ void Spell::SelectEffectTargets(uint32 i, SpellImplicitTargetInfo const& cur)
AddGOTarget(m_targets.GetGOTarget(), i);
break;
case TARGET_GAMEOBJECT_ITEM:
if (m_targets.GetGOTarget())
if (m_targets.GetGOTargetGUID())
AddGOTarget(m_targets.GetGOTarget(), i);
else if (m_targets.GetItemTarget())
AddItemTarget(m_targets.GetItemTarget(), i);
@@ -2850,7 +2809,7 @@ void Spell::prepare(SpellCastTargets const* targets, AuraEffect const* triggered
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;
if (m_caster->GetTypeId() == TYPEID_UNIT)
@@ -3109,7 +3068,7 @@ void Spell::cast(bool skipCheck)
else
{
// 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();
return;
@@ -3535,7 +3494,7 @@ void Spell::update(uint32 difftime)
// update pointers based at it's GUIDs
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);
cancel();
@@ -4347,7 +4306,7 @@ void Spell::TakePower()
if (m_caster->GetTypeId() == TYPEID_PLAYER)
{
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)
if (ihit->targetGUID == targetGUID)
{
+16 -10
View File
@@ -133,16 +133,10 @@ class SpellCastTargets
uint32 GetTargetMask() const { return m_targetMask; }
void SetTargetMask(uint32 newMask) { m_targetMask = newMask; }
uint64 GetObjectTargetGUID() const { return m_objectTargetGUID; }
WorldObject * GetObjectTarget() const { return m_objectTarget; }
Unit* GetUnitTarget() const { return m_objectTarget ? m_objectTarget->ToUnit() : NULL; }
uint64 GetUnitTargetGUID() const { return m_unitTargetGUID; }
Unit* GetUnitTarget() const { return m_unitTarget; }
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;
void SetSrc(float x, float y, float z);
void SetSrc(Position const& pos);
@@ -156,6 +150,13 @@ class SpellCastTargets
void SetDst(SpellCastTargets const& spellTargets);
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; }
Item* GetItemTarget() const { return m_itemTarget; }
uint32 GetItemTargetEntry() const { return m_itemTargetEntry; }
@@ -183,10 +184,15 @@ class SpellCastTargets
private:
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
uint64 m_objectTargetGUID;
uint64 m_unitTargetGUID;
uint64 m_GOTargetGUID;
uint64 m_CorpseTargetGUID;
uint64 m_itemTargetGUID;
uint32 m_itemTargetEntry;
+4 -4
View File
@@ -5834,14 +5834,14 @@ void Spell::EffectAddExtraAttacks(SpellEffIndex effIndex)
void Spell::EffectParry(SpellEffIndex /*effIndex*/)
{
if (m_caster->GetTypeId() == TYPEID_PLAYER)
m_caster->ToPlayer()->SetCanParry(true);
if (unitTarget && unitTarget->GetTypeId() == TYPEID_PLAYER)
unitTarget->ToPlayer()->SetCanParry(true);
}
void Spell::EffectBlock(SpellEffIndex /*effIndex*/)
{
if (m_caster->GetTypeId() == TYPEID_PLAYER)
m_caster->ToPlayer()->SetCanBlock(true);
if (unitTarget && unitTarget->GetTypeId() == TYPEID_PLAYER)
unitTarget->ToPlayer()->SetCanBlock(true);
}
void Spell::EffectLeap(SpellEffIndex /*effIndex*/)
-258
View File
@@ -94,264 +94,6 @@ void SpellImplicitTargetInfo::InitAreaData()
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)
{
switch (i)
-25
View File
@@ -41,31 +41,6 @@ enum SpellEffectTargetTypes
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
{
TARGET_TYPE_DEFAULT,