diff options
-rw-r--r-- | src/server/game/Entities/AreaTrigger/AreaTrigger.cpp | 23 | ||||
-rw-r--r-- | src/server/game/Entities/AreaTrigger/AreaTrigger.h | 2 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_debug.cpp | 1 |
3 files changed, 25 insertions, 1 deletions
diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp index 7f96c3b5b21..89165e3c9d4 100644 --- a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp +++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp @@ -274,6 +274,13 @@ bool AreaTrigger::CreateServer(Map* map, AreaTriggerTemplate const* areaTriggerT SetObjectScale(1.0f); + auto areaTriggerData = m_values.ModifyValue(&AreaTrigger::m_areaTriggerData); + SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::BoundsRadius2D), GetMaxSearchRadius()); + SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::DecalPropertiesID), 24); // blue decal, for .debug areatrigger visibility + + SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::ExtraScaleCurve).ModifyValue(&UF::ScaleCurve::ParameterCurve), std::bit_cast<uint32>(1.0000001f)); + SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::ExtraScaleCurve).ModifyValue(&UF::ScaleCurve::OverrideActive), true); + _shape = position.Shape; _maxSearchRadius = _shape.GetMaxSearchRadius(); @@ -1021,6 +1028,22 @@ void AreaTrigger::AI_Destroy() _ai.reset(); } +bool AreaTrigger::IsNeverVisibleFor(WorldObject const* seer, bool allowServersideObjects) const +{ + if (WorldObject::IsNeverVisibleFor(seer, allowServersideObjects)) + return true; + + if (IsServerSide() && !allowServersideObjects) + { + if (Player const* seerPlayer = seer->ToPlayer()) + return !seerPlayer->isDebugAreaTriggers; + + return true; + } + + return false; +} + void AreaTrigger::BuildValuesCreate(ByteBuffer* data, Player const* target) const { UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target); diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.h b/src/server/game/Entities/AreaTrigger/AreaTrigger.h index 0ecc10013b8..84d8de4d0d3 100644 --- a/src/server/game/Entities/AreaTrigger/AreaTrigger.h +++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.h @@ -75,7 +75,7 @@ class TC_GAME_API AreaTrigger : public WorldObject, public GridObject<AreaTrigge bool IsServerSide() const { return _areaTriggerTemplate->Id.IsServerSide; } - bool IsNeverVisibleFor(WorldObject const* seer, bool allowServersideObjects = false) const override { return WorldObject::IsNeverVisibleFor(seer) || (IsServerSide() && !allowServersideObjects); } + bool IsNeverVisibleFor(WorldObject const* seer, bool allowServersideObjects = false) const override; private: bool Create(uint32 areaTriggerCreatePropertiesId, Unit* caster, Unit* target, SpellInfo const* spell, Position const& pos, int32 duration, SpellCastVisual spellVisual, ObjectGuid const& castId, AuraEffect const* aurEff); diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp index c4b7fa411a1..0d59da26858 100644 --- a/src/server/scripts/Commands/cs_debug.cpp +++ b/src/server/scripts/Commands/cs_debug.cpp @@ -515,6 +515,7 @@ public: handler->PSendSysMessage(LANG_DEBUG_AREATRIGGER_OFF); player->isDebugAreaTriggers = false; } + player->UpdateObjectVisibility(); return true; } |