aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Object/Updates/ViewerDependentValues.h13
-rw-r--r--src/server/game/Miscellaneous/SharedDefines.h3
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