Core/AreaTriggers: Implement visibility of serverside areatriggers with .debug areatrigger command
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -515,6 +515,7 @@ public:
|
||||
handler->PSendSysMessage(LANG_DEBUG_AREATRIGGER_OFF);
|
||||
player->isDebugAreaTriggers = false;
|
||||
}
|
||||
player->UpdateObjectVisibility();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user