diff options
author | QAston <none@none> | 2010-08-02 20:05:22 +0200 |
---|---|---|
committer | QAston <none@none> | 2010-08-02 20:05:22 +0200 |
commit | 891df4eccb0848b9e03b69b4b34728e487d0d405 (patch) | |
tree | 140d7ed08388f2c46f7b03d1544c3b1cdcae4b31 /src | |
parent | 03caa8550fd1e69a3c6943baf8ace93b86861253 (diff) |
*Drop m_intTargetFlags, correctly send TARGET_FLAG_SOURCE_LOCATION and TARGET_FLAG_DEST_LOCATION - fixes many spell visuals.
--HG--
branch : trunk
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Spells/Spell.cpp | 46 | ||||
-rw-r--r-- | src/server/game/Spells/Spell.h | 15 |
2 files changed, 12 insertions, 49 deletions
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index eef6783330f..8a805cca947 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -83,7 +83,6 @@ SpellCastTargets::SpellCastTargets() : m_elevation(0), m_speed(0) m_dstPos.Relocate(0,0,0,0); m_strTarget = ""; m_targetMask = 0; - m_intTargetFlags = 0; } SpellCastTargets::~SpellCastTargets() @@ -97,13 +96,13 @@ void SpellCastTargets::setUnitTarget(Unit *target) m_unitTarget = target; m_unitTargetGUID = target->GetGUID(); - m_intTargetFlags |= FLAG_INT_UNIT; + m_targetMask |= TARGET_FLAG_UNIT; } void SpellCastTargets::setSrc(float x, float y, float z) { m_srcPos.Relocate(x, y, z); - m_intTargetFlags |= FLAG_INT_SRC_LOC; + m_targetMask |= TARGET_FLAG_SOURCE_LOCATION; } void SpellCastTargets::setSrc(Position *pos) @@ -111,14 +110,14 @@ void SpellCastTargets::setSrc(Position *pos) if (pos) { m_srcPos.Relocate(pos); - m_intTargetFlags |= FLAG_INT_SRC_LOC; + m_targetMask |= TARGET_FLAG_SOURCE_LOCATION; } } void SpellCastTargets::setDst(float x, float y, float z, float orientation, uint32 mapId) { m_dstPos.Relocate(x, y, z, orientation); - m_intTargetFlags |= FLAG_INT_DST_LOC; + m_targetMask |= TARGET_FLAG_DEST_LOCATION; if (mapId != MAPID_INVALID) m_dstPos.m_mapId = mapId; } @@ -128,7 +127,7 @@ void SpellCastTargets::setDst(Position *pos) if (pos) { m_dstPos.Relocate(pos); - m_intTargetFlags |= FLAG_INT_DST_LOC; + m_targetMask |= TARGET_FLAG_DEST_LOCATION; } } @@ -136,7 +135,7 @@ void SpellCastTargets::setGOTarget(GameObject *target) { m_GOTarget = target; m_GOTargetGUID = target->GetGUID(); - m_intTargetFlags |= FLAG_INT_OBJECT; + m_targetMask |= TARGET_FLAG_OBJECT; } void SpellCastTargets::setItemTarget(Item* item) @@ -210,13 +209,10 @@ bool SpellCastTargets::read (WorldPacket * data, Unit *caster) case TARGET_FLAG_UNK17: // used for non-combat pets, maybe other? if (!data->readPackGUID(m_unitTargetGUID)) return false; - if (m_targetMask & TARGET_FLAG_UNIT) - m_intTargetFlags |= FLAG_INT_UNIT; break; case TARGET_FLAG_OBJECT: if (!data->readPackGUID(m_GOTargetGUID)) return false; - m_intTargetFlags |= FLAG_INT_OBJECT; break; case TARGET_FLAG_CORPSE: case TARGET_FLAG_PVP_CORPSE: @@ -239,7 +235,6 @@ bool SpellCastTargets::read (WorldPacket * data, Unit *caster) m_srcPos.m_orientation = caster->GetOrientation(); if (!m_srcPos.IsPositionValid()) return false; - m_intTargetFlags |= FLAG_INT_SRC_LOC; break; } case TARGET_FLAG_DEST_LOCATION: @@ -250,7 +245,6 @@ bool SpellCastTargets::read (WorldPacket * data, Unit *caster) *data >> m_dstPos.m_positionX >> m_dstPos.m_positionY >> m_dstPos.m_positionZ; if (!m_dstPos.IsPositionValid()) return false; - m_intTargetFlags |= FLAG_INT_DST_LOC; break; } case TARGET_FLAG_STRING: @@ -3253,7 +3247,7 @@ uint64 Spell::handle_delayed(uint64 t_offset) m_immediateHandled = true; } - bool single_missile = (m_targets.getIntTargetFlags() & FLAG_INT_DST_LOC); + bool single_missile = (m_targets.HasDst()); // now recheck units targeting correctness (need before any effects apply to prevent adding immunity at first effect not allow apply second spell effect and similar cases) for (std::list<TargetInfo>::iterator ihit= m_UniqueTargetInfo.begin(); ihit != m_UniqueTargetInfo.end(); ++ihit) @@ -3741,19 +3735,6 @@ void Spell::SendSpellStart() data << uint32(castFlags); // cast flags data << uint32(m_timer); // delay? - // Preliminary setting of the target mask for the SMSG_SPELL_START packet. This will be - // adjusted again later in SendSpellGo() based on the real targets obtained in SelectSpellTargets() - if (m_spellInfo->Targets & TARGET_FLAG_SOURCE_LOCATION) - m_targets.setTargetMask(m_targets.getTargetMask() | TARGET_FLAG_SOURCE_LOCATION); - - if (m_spellInfo->Targets & TARGET_FLAG_DEST_LOCATION) - m_targets.setTargetMask(m_targets.getTargetMask() | TARGET_FLAG_DEST_LOCATION); - - if (m_targets.getTargetMask() & (TARGET_FLAG_SOURCE_LOCATION | TARGET_FLAG_DEST_LOCATION)) - m_targets.setTargetMask(m_targets.getTargetMask() & ~TARGET_FLAG_UNIT); - else if (m_targets.getIntTargetFlags() & FLAG_INT_UNIT) - m_targets.setTargetMask(m_targets.getTargetMask() | TARGET_FLAG_UNIT); - m_targets.write(&data); if (castFlags & CAST_FLAG_POWER_LEFT_SELF) @@ -3821,21 +3802,14 @@ void Spell::SendSpellGo() data << uint32(castFlags); // cast flags data << uint32(getMSTime()); // timestamp - if ((m_spellInfo->Targets & TARGET_FLAG_SOURCE_LOCATION) && m_targets.HasSrc()) - m_targets.setTargetMask(m_targets.getTargetMask() | TARGET_FLAG_SOURCE_LOCATION); - else - m_targets.setTargetMask(m_targets.getTargetMask() & ~TARGET_FLAG_SOURCE_LOCATION); - - if ((m_spellInfo->Targets & TARGET_FLAG_DEST_LOCATION) && m_targets.HasDst()) - m_targets.setTargetMask(m_targets.getTargetMask() | TARGET_FLAG_DEST_LOCATION); - else - m_targets.setTargetMask(m_targets.getTargetMask() & ~TARGET_FLAG_DEST_LOCATION); - + /* + // statement below seems to be wrong - i've seen spells with both unit and dest target // Can't have TARGET_FLAG_UNIT when *_LOCATION is present - it breaks missile visuals if (m_targets.getTargetMask() & (TARGET_FLAG_SOURCE_LOCATION | TARGET_FLAG_DEST_LOCATION)) m_targets.setTargetMask(m_targets.getTargetMask() & ~TARGET_FLAG_UNIT); else if (m_targets.getIntTargetFlags() & FLAG_INT_UNIT) m_targets.setTargetMask(m_targets.getTargetMask() | TARGET_FLAG_UNIT); + */ WriteSpellGoTargets(&data); diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h index 53123d49288..a0e19746a5f 100644 --- a/src/server/game/Spells/Spell.h +++ b/src/server/game/Spells/Spell.h @@ -33,15 +33,6 @@ class Aura; struct SpellEntry; class SpellScript; -// These flags represent the inner states of the targeting system -enum SpellInternalTargetFlags -{ - FLAG_INT_UNIT = 0x00000002, - FLAG_INT_SRC_LOC = 0x00000020, - FLAG_INT_DST_LOC = 0x00000040, - FLAG_INT_OBJECT = 0x00000800 -}; - // These flags are used in client - server communication only enum SpellCastTargetFlags { @@ -166,14 +157,12 @@ class SpellCastTargets m_strTarget = target.m_strTarget; m_targetMask = target.m_targetMask; - m_intTargetFlags = target.getIntTargetFlags(); return *this; } uint32 getTargetMask() const { return m_targetMask; } void setTargetMask(uint32 newMask) { m_targetMask = newMask; } - uint32 getIntTargetFlags() const { return m_intTargetFlags; } uint64 getUnitTargetGUID() const { return m_unitTargetGUID; } Unit *getUnitTarget() const { return m_unitTarget; } @@ -204,8 +193,8 @@ class SpellCastTargets } bool IsEmpty() const { return m_GOTargetGUID == 0 && m_unitTargetGUID == 0 && m_itemTarget == 0 && m_CorpseTargetGUID == 0; } - bool HasSrc() const { return m_intTargetFlags & FLAG_INT_SRC_LOC; } - bool HasDst() const { return m_intTargetFlags & FLAG_INT_DST_LOC; } + bool HasSrc() const { return getTargetMask() & TARGET_FLAG_SOURCE_LOCATION; } + bool HasDst() const { return getTargetMask() & TARGET_FLAG_DEST_LOCATION; } bool HasTraj() const { return m_speed != 0; } float GetDist2d() const { return m_srcPos.GetExactDist2d(&m_dstPos); } |