diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/Combat/CombatManager.cpp | 9 | ||||
| -rw-r--r-- | src/server/game/Entities/Creature/Creature.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Entities/Creature/Creature.h | 1 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 1 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 7 |
5 files changed, 13 insertions, 7 deletions
diff --git a/src/server/game/Combat/CombatManager.cpp b/src/server/game/Combat/CombatManager.cpp index c2774a23ec2..0d396b73aa6 100644 --- a/src/server/game/Combat/CombatManager.cpp +++ b/src/server/game/Combat/CombatManager.cpp @@ -44,12 +44,9 @@ return false; if (a->HasUnitState(UNIT_STATE_IN_FLIGHT) || b->HasUnitState(UNIT_STATE_IN_FLIGHT)) return false; - if (Creature const* aCreature = a->ToCreature()) - if (aCreature->IsCombatDisallowed()) - return false; - if (Creature const* bCreature = b->ToCreature()) - if (bCreature->IsCombatDisallowed()) - return false; + // ... both units must not be ignoring combat + if (a->IsIgnoringCombat() || b->IsIgnoringCombat()) + return false; if (a->IsFriendlyTo(b) || b->IsFriendlyTo(a)) return false; Player const* playerA = a->GetCharmerOrOwnerPlayerOrPlayerItself(); diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 8acf7cbbd14..44596a1370a 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -614,6 +614,8 @@ bool Creature::UpdateEntry(uint32 entry, CreatureData const* data /*= nullptr*/, ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_ATTACK_ME, true); } + SetIgnoringCombat((cInfo->flags_extra & CREATURE_FLAG_EXTRA_NO_COMBAT) != 0); + LoadTemplateRoot(); InitializeMovementFlags(); diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index 1ac5ea83ce0..32c9a893c4a 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -91,7 +91,6 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma bool IsCivilian() const { return (GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_CIVILIAN) != 0; } bool IsTrigger() const { return (GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_TRIGGER) != 0; } bool IsGuard() const { return (GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_GUARD) != 0; } - bool IsCombatDisallowed() const { return (GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_NO_COMBAT) != 0; } void InitializeMovementFlags(); void UpdateMovementFlags(); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index aff1ea83ab4..f695159ee7c 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -382,6 +382,7 @@ Unit::Unit(bool isWorldObject) : _oldFactionId = 0; _isWalkingBeforeCharm = false; _instantCast = false; + _isIgnoringCombat = false; } //////////////////////////////////////////////////////////// diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 3ea466d9f0f..3d2110ada04 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1686,6 +1686,11 @@ class TC_GAME_API Unit : public WorldObject float GetCollisionHeight() const override; + // returns if the unit is ignoring any combat interaction + bool IsIgnoringCombat() const { return _isIgnoringCombat; } + // enables/disables combat interaction of this unit. + void SetIgnoringCombat(bool apply) { _isIgnoringCombat = apply; } + std::string GetDebugInfo() const override; protected: explicit Unit (bool isWorldObject); @@ -1832,6 +1837,8 @@ class TC_GAME_API Unit : public WorldObject SpellHistory* m_spellHistory; PositionUpdateInfo _positionUpdateInfo; + + bool _isIgnoringCombat; }; namespace Trinity |
