(I asked this question before though but the answer I got isn't working)
I made this quest system and along with it, a dialogue system. I made the dialogue to work so when you touch a part then a gui would pop up with a dialogue prompt. It functions fine but I only want the dialogue to appear when a specific quest has been completed.
Quest Completion Marker(for reference of how the mission becomes assigned complete):
script.Parent.Touched:connect(function(touchedpart) local player = game.Players:GetPlayerFromCharacter(touchedpart.Parent) if player then if player:FindFirstChild("Quest6") and player:FindFirstChild("Quest6").Value == "-[Get a Water Tank]" then player.Quest6.Value = "-[Completed]" game.Workspace.Data[player.Name].Socks.Value = game.Workspace.Data[player.Name].Socks.Value + 1 end end end)
Dialogue System:
local debounce = false function getPlayer(humanoid) local players = game.Players:children() for i = 1, #players do if players[i].Character.Humanoid == humanoid then return players[i] end end return nil end function onTouch(part) local human = part.Parent:findFirstChild("Humanoid") if (human ~= nil) and debounce == false then debounce = true local player = getPlayer(human) if (player == nil) then return end script.Parent:clone().Parent = player.PlayerGui wait(17) debounce = false player.PlayerGui.OnTouchGui:remove() wait() debounce = false wait(17) end end script.Parent.Parent.Touched:connect(onTouch)
What I would do is create a variable called "completed" and set it to false. Then you can check if the player has completed the quest by setting the completed variable to true when they have completed it.
Example:
local completed = false --Example for completing the quest workspace.Part.Touched:connect(function() completed = true -- Checks if completed is true if completed == true then -- Dialogue else -- If the player has not they will see the alt Dialogue -- Alt Dialogue end end)
Hope this helps.