diff options
author | ccrs <ccrs@users.noreply.github.com> | 2017-04-27 13:53:18 +0200 |
---|---|---|
committer | ccrs <ccrs@users.noreply.github.com> | 2017-04-27 13:53:18 +0200 |
commit | 5043639c563514c079ba6eb959dd4c1c555fa494 (patch) | |
tree | 68a69437199d9047743f2a4cedbcc42bd505e21b /src | |
parent | aa86dfddca8f1fcb6b77fc1a37f367978c593018 (diff) |
Core/Misc: 522f537048 followup
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Creature/Creature.cpp | 20 | ||||
-rw-r--r-- | src/server/game/Entities/Creature/Creature.h | 4 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 3 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 5 |
4 files changed, 24 insertions, 8 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 55c6365d109..d7b72571aa5 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -3103,6 +3103,26 @@ void Creature::ReleaseFocus(Spell const* focusSpell, bool withDelay) m_focusDelay = (!IsPet() && withDelay) ? GameTime::GetGameTimeMS() : 0; // don't allow re-target right away to prevent visual bugs } +bool Creature::IsMovementPreventedByCasting() const +{ + // first check if currently a movement allowed channel is active and we're not casting + if (Spell* spell = m_currentSpells[CURRENT_CHANNELED_SPELL]) + { + if (spell->getState() != SPELL_STATE_FINISHED && spell->IsChannelActive()) + if (spell->GetSpellInfo()->IsMoveAllowedChannel()) + if (HasUnitState(UNIT_STATE_CASTING)) + return true; + } + + if (const_cast<Creature*>(this)->IsFocusing(nullptr, true)) + return true; + + if (HasUnitState(UNIT_STATE_CASTING)) + return true; + + return false; +} + void Creature::StartPickPocketRefillTimer() { _pickpocketLootRestore = time(nullptr) + sWorld->getIntConfig(CONFIG_CREATURE_PICKPOCKET_REFILL); diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index f5cbf4c46c4..c70b6bb40b7 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -714,9 +714,11 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma void MustReacquireTarget() { m_shouldReacquireTarget = true; } // flags the Creature for forced (client displayed) target reacquisition in the next ::Update call void DoNotReacquireTarget() { m_shouldReacquireTarget = false; m_suppressedTarget = ObjectGuid::Empty; m_suppressedOrientation = 0.0f; } void FocusTarget(Spell const* focusSpell, WorldObject const* target); - bool IsFocusing(Spell const* focusSpell = nullptr, bool withDelay = false) override; + bool IsFocusing(Spell const* focusSpell = nullptr, bool withDelay = false); void ReleaseFocus(Spell const* focusSpell = nullptr, bool withDelay = true); + bool IsMovementPreventedByCasting() const override; + // Part of Evade mechanics time_t GetLastDamagedTime() const { return _lastDamagedTime; } void SetLastDamagedTime(time_t val) { _lastDamagedTime = val; } diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 9856d018388..f5026a8c799 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -3325,9 +3325,6 @@ bool Unit::IsMovementPreventedByCasting() const if (spell->GetSpellInfo()->IsMoveAllowedChannel()) return false; - if (const_cast<Unit*>(this)->IsFocusing(nullptr, true)) - return false; - // prohibit movement for all other spell casts return true; } diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 3b139180d2f..32788df4569 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1902,10 +1902,7 @@ class TC_GAME_API Unit : public WorldObject Spell* FindCurrentSpellBySpellId(uint32 spell_id) const; int32 GetCurrentSpellCastTime(uint32 spell_id) const; - virtual bool IsFocusing(Spell const* /*focusSpell*/ = nullptr, bool /*withDelay*/ = false) { return false; } - - // Check if our current channel spell has attribute SPELL_ATTR5_CAN_CHANNEL_WHEN_MOVING - bool IsMovementPreventedByCasting() const; + virtual bool IsMovementPreventedByCasting() const; SpellHistory* GetSpellHistory() { return m_spellHistory; } SpellHistory const* GetSpellHistory() const { return m_spellHistory; } |