Core/AreaTriggers: Changed how Attached flag is determined - instead of being set in database it is now dynamically set depending on how the areatrigger was created. AreaTriggers created by auras are now all attached by default

This commit is contained in:
Shauren
2026-01-11 12:20:42 +01:00
parent e5a46c2da9
commit 8622b9bf8f
3 changed files with 8 additions and 5 deletions

View File

@@ -169,7 +169,10 @@ bool AreaTrigger::Create(AreaTriggerCreatePropertiesId areaTriggerCreateProperti
SetSpellVisual(spellVisual);
if (!IsStaticSpawn())
{
SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::TimeToTargetScale), GetCreateProperties()->TimeToTargetScale != 0 ? GetCreateProperties()->TimeToTargetScale : *m_areaTriggerData->Duration);
SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::TimeToTargetPos), *m_areaTriggerData->Duration);
}
SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::BoundsRadius2D), GetCreateProperties()->Shape.GetMaxSearchRadius());
SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::DecalPropertiesID), GetCreateProperties()->DecalPropertiesId);
if (IsServerSide())
@@ -206,8 +209,6 @@ bool AreaTrigger::Create(AreaTriggerCreatePropertiesId areaTriggerCreateProperti
fieldFlags |= AreaTriggerFieldFlags::AbsoluteOrientation;
if (flags.HasFlag(AreaTriggerCreatePropertiesFlag::HasDynamicShape))
fieldFlags |= AreaTriggerFieldFlags::DynamicShape;
if (flags.HasFlag(AreaTriggerCreatePropertiesFlag::HasAttached))
fieldFlags |= AreaTriggerFieldFlags::Attached;
if (flags.HasFlag(AreaTriggerCreatePropertiesFlag::HasFaceMovementDir))
fieldFlags |= AreaTriggerFieldFlags::FaceMovementDir;
if (flags.HasFlag(AreaTriggerCreatePropertiesFlag::HasFollowsTerrain))
@@ -234,8 +235,9 @@ bool AreaTrigger::Create(AreaTriggerCreatePropertiesId areaTriggerCreateProperti
PhasingHandler::InitDbPhaseShift(GetPhaseShift(), spawnData->phaseUseFlags, spawnData->phaseId, spawnData->phaseGroup);
}
if (target && HasAreaTriggerFlag(AreaTriggerFieldFlags::Attached))
if (target && aurEff)
{
SetAreaTriggerFlag(AreaTriggerFieldFlags::Attached);
m_movementInfo.transport.guid = target->GetGUID();
m_updateFlag.MovementTransport = true;
}

View File

@@ -62,7 +62,7 @@ enum class AreaTriggerCreatePropertiesFlag : uint32
None = 0x00000,
HasAbsoluteOrientation = 0x00001,
HasDynamicShape = 0x00002,
HasAttached = 0x00004,
HasAttached = 0x00004, // DEPRECATED
HasFaceMovementDir = 0x00008,
HasFollowsTerrain = 0x00010, // NYI
AlwaysExterior = 0x00020,

View File

@@ -6383,7 +6383,8 @@ void AuraEffect::HandleCreateAreaTrigger(AuraApplication const* aurApp, uint8 mo
if (apply)
{
AreaTriggerCreatePropertiesId createPropertiesId = { uint32(GetMiscValue()), false };
AreaTrigger::CreateAreaTrigger(createPropertiesId, *target, GetBase()->GetDuration(), GetCaster(), target, GetBase()->GetSpellVisual(), GetSpellInfo(), nullptr, this);
Position pos = { target->GetPositionX(), target->GetPositionY(), target->GetPositionZ() }; // drop orientation for attached areatrigger
AreaTrigger::CreateAreaTrigger(createPropertiesId, pos, GetBase()->GetDuration(), GetCaster(), target, GetBase()->GetSpellVisual(), GetSpellInfo(), nullptr, this);
}
else
{