diff options
| author | Meji <alvaro.megias@outlook.com> | 2024-09-16 02:26:35 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-09-16 02:26:35 +0200 |
| commit | 6bcef33bb1fb068ceac26e3ffc795e5098e55189 (patch) | |
| tree | 95e0b34d6788ad806cc5a3ede127ac015b7ba110 /src/server/game/Entities/Object | |
| parent | 76b9d8554265bc1f359905695c26759fe227b234 (diff) | |
Core/Gameobjects: Fixed GO_DYNFLAG_LO_HIGHLIGHT application (#30123)
Closes #27374
Closes #30213
Diffstat (limited to 'src/server/game/Entities/Object')
| -rw-r--r-- | src/server/game/Entities/Object/Updates/ViewerDependentValues.h | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/src/server/game/Entities/Object/Updates/ViewerDependentValues.h b/src/server/game/Entities/Object/Updates/ViewerDependentValues.h index 9e3461af947..f91f423b0cc 100644 --- a/src/server/game/Entities/Object/Updates/ViewerDependentValues.h +++ b/src/server/game/Entities/Object/Updates/ViewerDependentValues.h @@ -93,11 +93,8 @@ public: case GAMEOBJECT_TYPE_BUTTON: case GAMEOBJECT_TYPE_GOOBER: if (gameObject->HasConditionalInteraction() && gameObject->CanActivateForPlayer(receiver)) - { - dynFlags |= GO_DYNFLAG_LO_HIGHLIGHT; if (gameObject->GetGoStateFor(receiver->GetGUID()) != GO_STATE_ACTIVE) - dynFlags |= GO_DYNFLAG_LO_ACTIVATE; - } + dynFlags |= GO_DYNFLAG_LO_ACTIVATE | GO_DYNFLAG_LO_HIGHLIGHT; break; case GAMEOBJECT_TYPE_QUESTGIVER: if (gameObject->CanActivateForPlayer(receiver)) @@ -112,7 +109,7 @@ public: case GAMEOBJECT_TYPE_GENERIC: case GAMEOBJECT_TYPE_SPELL_FOCUS: if (gameObject->HasConditionalInteraction() && gameObject->CanActivateForPlayer(receiver)) - dynFlags |= GO_DYNFLAG_LO_SPARKLE | GO_DYNFLAG_LO_HIGHLIGHT; + dynFlags |= GO_DYNFLAG_LO_SPARKLE; break; case GAMEOBJECT_TYPE_TRANSPORT: case GAMEOBJECT_TYPE_MAP_OBJ_TRANSPORT: @@ -137,8 +134,17 @@ public: break; } - if (!receiver->IsGameMaster() && !gameObject->MeetsInteractCondition(receiver)) - dynFlags |= GO_DYNFLAG_LO_NO_INTERACT; + if (!receiver->IsGameMaster()) + { + // GO_DYNFLAG_LO_INTERACT_COND should be applied to GOs with conditional interaction (without GO_FLAG_INTERACT_COND) to disable interaction + // (Ignore GAMEOBJECT_TYPE_GATHERING_NODE as some profession-related GOs may include quest loot and can always be interacted with) + if (gameObject->GetGoType() != GAMEOBJECT_TYPE_GATHERING_NODE) + if (gameObject->HasConditionalInteraction() && !gameObject->HasFlag(GO_FLAG_INTERACT_COND)) + dynFlags |= GO_DYNFLAG_LO_INTERACT_COND; + + if (!gameObject->MeetsInteractCondition(receiver)) + dynFlags |= GO_DYNFLAG_LO_NO_INTERACT; + } dynamicFlags = (uint32(pathProgress) << 16) | uint32(dynFlags); } |
