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)
