diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp index 7f96c3b5b2..89165e3c9d 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(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 0ecc10013b..84d8de4d0d 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 GridObjectId.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 c4b7fa411a..0d59da2685 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; }