Making a Clothing GUI 2021 (Roblox Studio) - lua

I Am Trying to make a GUI that gives you an outfit when you Click it (Text Button). Its Currently not Working. This is the Script I used.
script.Parent.MouseButton1Click:FindFirstChild(function(WhoClick)
local WhoClick = game.Players.LocalPlayer
local Shirt = ""-------Shirt Link Goes here
local Pants = ""-------Pants Link Goes Here
local PlayerShirt = game.Workspace:FindFirstChild(WhoCLick.Name).Shirt
local PlayerPants = game.Workspace:FindFirstChild(WhoCLick.Name).Pants
PlayerShirt.ShirtTemplate = Shirt
PlayerPants.PantsTemplate = Pants
end)

.FindFirstChild(function()) won't work.
Instead, do this (I used random templates for examples purposes):
script.Parent.MouseButton1Click:Connect(function(WhoClick)
WhoClick.Character.Shirt.ShirtTemplate = "http://www.roblox.com/asset/?id=57282083"
WhoClick.Character.Clothing.Template = "http://www.roblox.com/asset/?id= 6714633844"
end)

I don't know where you got that code from but it cannot work.
You want to implement an event listener for the gui buttons MouseButton1Click event.
https://developer.roblox.com/en-us/api-reference/event/GuiButton/MouseButton1Click
Instead you try to call Instance:FindFirstChild with it.
Please refer to the Roblox manual.
Implement the listener as a function and call the buttons Connect function like in the following example. This will register your event listener to the click event.
function leftClick()
print("Left mouse click")
end
script.Parent.MouseButton1Click:Connect(leftClick)
Alternatively this will also work:
script.Parent.MouseButton1Click:Connect(function ()
print("Left mouse click")
end)

Related

how do I make a buttonGUI that when clicked shows a GUI?

I would like this to be a buttonGUI or a proximity prompt (proximity prompt preferred)
You haven't given much context of the file structure, so I can only do my best to help.
So first you need to add a event listener to the button. So as a child of the button add a localscript and in that script add the listener.
local GUI_Holder = game:GetService("Players").LocalPlayer:WaitForChild("PlayerGui")
local UI = GUI_Holder.Your_UI_To_Activate -- Path to the GUI element
script.Parent.MouseButton1Click:Connect(function()
UI.Enabled = true
end)
Lines one and two look pretty bad however you can replace then with you own way of fetching the UI. (https://developer.roblox.com/en-us/api-reference/class/TextButton)
If you need any more help reply to this :)
-- Harvey
Harvey has a good answer but I recommend using button.Activated
local GUI_Holder = game:GetService("Players").LocalPlayer:WaitForChild("PlayerGui")
local UI = GUI_Holder.Your_UI_To_Activate -- Path to the GUI element
script.Parent.Activated:Connect(function()
UI.Enabled = true
end)

LuaU script (Roblox), how can I make a Key get pressed with a script

An example would have been like
local E = game:GetService('UserInputService').SetKeyDown(Enum.KeyCode.E)
but it doesnt work ofcourse because i cant jsut make my game press E by itself with this thing, so it requieres soemthing longer and if you find the solution can you also do one where it makes it pressed down?
The input can only be registered on the client, therefore you will have to code in a LocalScript. There are 2 services which are used to get the player's input:-
UserInputService
This example shows how to use the UserInputService in getting the player's LeftMouseButton input.
local UserInputService = game:GetService("UserInputService")
local function onInputBegan(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
print("The left mouse button has been pressed!")
end
end
UserInputService.InputBegan:Connect(onInputBegan)
ContextActionService
This example properly shows how to use ContextActionService in binding user input to a contextual action. The context is the tool being equipped; the action is reloading some weapon.
local ContextActionService = game:GetService("ContextActionService")
local ACTION_RELOAD = "Reload"
local tool = script.Parent
local function handleAction(actionName, inputState, inputObject)
if actionName == ACTION_RELOAD and inputState == Enum.UserInputState.Begin then
print("Reloading!")
end
end
tool.Equipped:Connect(function ()
ContextActionService:BindAction(ACTION_RELOAD, handleAction, true, Enum.KeyCode.R)
end)
You should take a look at the Wiki pages.
It sounds like you want to write a script to press the E key, but that isn't possible.
You can bind actions to keypresses, just like in the examples Giant427 provided, and you can also manually call the functions that are bound to those actions, but you cannot write a script to fire keyboard inputs.

How to trigger a MouseButton1Click event in Roblox?

I have a button and I want to fire the event that happens when the player clicks on it by another script. I tried button.MouseButton1Click() but it didn't work. How can I achieve it?
If you want to reuse code, I would recommend looking into ModuleScripts. You can write your shared code functionality in the ModuleScript, and then use it in both places that you need it.
So in a ModuleScript in ReplicatedStorage, you might have something like :
local Foo = {}
function Foo.DoSomething()
print("Doing the thing!")
-- add your other behaviors here!
end
return Foo
Then, in your code with your button :
local Foo = require(game.ReplicatedStorage.Foo) -- put the path to your ModuleScript
local button = script.Parent
button.MouseButton1Click:Connect(function()
Foo.DoSomething()
end)
And you can do the same thing in another script too!
local Foo = require(game.ReplicatedStorage.Foo)
Foo.DoSomething()
This way you won't have to fake a mouse click, your code simply exists in a sharable location.
You need to connect the Click Event to a function:
button.MouseButton1Click:Connect(function()
--whatever code you want to happen after the button is clicked goes here
end)

What does "attempt to index function with 'Connect'" mean in Roblox?

local Player = game.Players.LocalPlayer
local PlayerCash = Player:WaitForChild("leaderstats"):WaitForChild("Strength")
local Mouse = Player:GetMouse()
local amount = 50
script.Parent.Activate:Connect(function()
game.Players.LocalPlayer.leaderstats.money.Value = game.Players.LocalPlayer.leaderstats.money.Value + amount
end)
I am trying to make a code to give Strength when you click. When I press 'Play' it doesn't work. All it says in the output is
'attempt to index function with 'Connect'.'
The error "attempt to index [type] with [field name]" means that you are incorrectly using something like an object, and you are trying to access some field on it.
In your case, this error is pointing at the line : script.Parent.Activate:Connect.This says that script.Parent.Activate is a function and not a table, and you cannot call Connect on a function. This is just to help us figure out what is wrong with our code.
Since you working with Tools, there is a simple fix. Instead of using the Activate function, you are looking for the Activated event. So just change update that line like this :
script.Parent.Activated:Connect(function()
It connects a function to an event that happened, like this:
local tool = script.Parent
-- It connects the event (the tool being equipped) to a function.
tool.Equipped:Connect(function()
-- CODE
end)
Also, the answer above is how you can fix your problem and here's a shortcut: You have defined "Player" and you could've used it inside the function. Have a great day and God bless everyone here.

ROBLOX Studio function to call function for each door to open

I'm pretty new to ROBLOX development and don't really know how to make the objects talk just yet.
I have 16 cells all with an individual open and close button. Those work. I want to create a button that will open all doors at once.
function onClicked()
script.Parent.Parent.Door.Transparency = 1
script.Parent.Parent.Door.CanCollide= false
end
script.Parent.ClickDetector.MouseClick:connect(onClicked)
The above function is on each cell and works. I would like to loop through each one and fire it when I click a different button. I've been looking into getting each object with the same names but haven't been able to iterate through it.
The below code is my attempt to get it to fire off each one!
local part = workspace.OpenButton
local clickDetector = Instance.new("ClickDetector")
local function onMouseClick(player)
for _, child in pairs(workspace.PrisonCell:GetChildren()) do
print(child)
child:connect(child.Door.onClicked)
end
end
clickDetector.Parent = part
part.Parent = workspace
clickDetector.MouseClick:connect(onMouseClick)
Any help with this would be greatly appreciated!
You could do something similar to this to open all of the prison doors at once:
local part = workspace.OpenButton
local clickDetector = Instance.new("ClickDetector")
local function onMouseClick(player)
for _, child in pairs(workspace.PrisonCell:GetChildren()) do
child.Door.Transparency = 1
child.Door.CanCollide = false
end
end
clickDetector.Parent = part
part.Parent = workspace
clickDetector.MouseClick:connect(onMouseClick)
The downside to using the solution above is that if you want to change the door opening script, you would have to change it in both the individual cell buttons as well as this master button script. If you think this might be a problem in the future, I would consider writing a master script somewhere in ServerScriptService that uses BindableEvents for communcation with the button clicking scripts in order to keep the door opening function in one place.

Resources