Hey there,
I'm working on a dialog system where a player can choose between options to say to an NPC, once an option is chosen, M should be pressed to continue the dialog and see the NPC's answer. However, the code (below) I wrote for it doesn't work, and I feel that it's very inefficient to keep calling a user input function every time an option is chosen.
Any help would be greatly appreciated. Thanks in advance!
local frame = script.Parent local userId = game.Players.LocalPlayer.UserId local thumbType = Enum.ThumbnailType.HeadShot local thumbSize = Enum.ThumbnailSize.Size420x420 local content, isReady = game.Players:GetUserThumbnailAsync(userId, thumbType, thumbSize) local player = game.Players.LocalPlayer frame.Option1.MouseButton1Down:Connect(function() frame.ThumbnailPlayer.Image = content frame.ThumbnailPlayer.Visible = true frame.Dialog.Text = "Greetings! My name is " .. player.Name .. "." frame.NameTxt.Text = game.Players.LocalPlayer.Name frame.Continue.Visible = true local function onKeyPress(inputObject, gameProcessedEvent) if inputObject.KeyCode == Enum.KeyCode.M then frame.ThumbnailPlayer.Visible = false frame.NameTxt.Text = frame.SpeakerName.Value frame.Dialog.Text = "Good day to you, " .. player.Name .. ". I am Sir Bram." end game:GetService("UserInputService").InputBegan:Connect(onKeyPress) end end) ----- frame.Option2.MouseButton1Down:Connect(function() frame.ThumbnailPlayer.Image = content frame.ThumbnailPlayer.Visible = true frame.Dialog.Text = "Do you have anything to do for me?" frame.NameTxt.Text = game.Players.LocalPlayer.Name frame.Continue.Visible = true local function onKeyPress(inputObject, gameProcessedEvent) if inputObject.KeyCode == Enum.KeyCode.M then frame.ThumbnailPlayer.Visible = false frame.NameTxt.Text = frame.SpeakerName.Value frame.Dialog.Text = "I'm afraid I don't." end end game:GetService("UserInputService").InputBegan:Connect(onKeyPress) end) ----- frame.Option3.MouseButton1Down:Connect(function() frame.ThumbnailPlayer.Image = content frame.ThumbnailPlayer.Visible = true frame.Dialog.Text = "I should be heading off now." frame.NameTxt.Text = game.Players.LocalPlayer.Name frame.Continue.Visible = true local function onKeyPress(inputObject, gameProcessedEvent) if inputObject.KeyCode == Enum.KeyCode.M then frame.ThumbnailPlayer.Visible = false frame.NameTxt.Text = frame.SpeakerName.Value frame.Dialog.Text = "Farewell, " .. game.Players.LocalPlayer.Name .. "." end end game:GetService("UserInputService").InputBegan:Connect(onKeyPress) end)