aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2023-06-12 12:46:56 +0200
committerShauren <shauren.trinity@gmail.com>2023-06-12 12:46:56 +0200
commit1b55f85fad95a717be912166a06cec118352fd56 (patch)
treec2782627e068fb8d1ab773f4edcce60c21b9b309
parentade8aa33a1b5b83c7087fd0a29789c6ec750d9ac (diff)
Core/AreaTriggers: Implement visibility of serverside areatriggers with .debug areatrigger command
-rw-r--r--src/server/game/Entities/AreaTrigger/AreaTrigger.cpp23
-rw-r--r--src/server/game/Entities/AreaTrigger/AreaTrigger.h2
-rw-r--r--src/server/scripts/Commands/cs_debug.cpp1
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;
}