diff options
-rw-r--r-- | src/server/game/Entities/Object/Updates/ViewerDependentValues.h | 13 | ||||
-rw-r--r-- | src/server/game/Miscellaneous/SharedDefines.h | 3 |
2 files changed, 13 insertions, 3 deletions
diff --git a/src/server/game/Entities/Object/Updates/ViewerDependentValues.h b/src/server/game/Entities/Object/Updates/ViewerDependentValues.h index c99b89c8dca..64571c37aeb 100644 --- a/src/server/game/Entities/Object/Updates/ViewerDependentValues.h +++ b/src/server/game/Entities/Object/Updates/ViewerDependentValues.h @@ -136,8 +136,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); } diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index db8113fa5ec..ab9c8c9a6ea 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -3019,7 +3019,8 @@ enum GameObjectDynamicLowFlags : uint16 GO_DYNFLAG_LO_STOPPED = 0x0040, // Transport is stopped GO_DYNFLAG_LO_NO_INTERACT = 0x0080, GO_DYNFLAG_LO_INVERTED_MOVEMENT = 0x0100, // GAMEOBJECT_TYPE_TRANSPORT only - GO_DYNFLAG_LO_HIGHLIGHT = 0x0200, // Allows object highlight when GO_DYNFLAG_LO_ACTIVATE or GO_DYNFLAG_LO_SPARKLE are set, not only when player is on quest determined by Data fields + GO_DYNFLAG_LO_INTERACT_COND = 0x0200, // Cannot interact (requires GO_DYNFLAG_LO_ACTIVATE to enable interaction clientside) + GO_DYNFLAG_LO_HIGHLIGHT = 0x4000, // Allows object highlight when GO_DYNFLAG_LO_ACTIVATE are set, not only when player is on quest determined by Data fields }; // client side GO show states |