Making an onClicked script
Introduction
This is a FAQ that will teach you how to make a simple onClicked script. This FAQ will also explain how to put it to use.
What is onClicked?
If you put it inside a brick it will detect when it is clicked.
Instructions
1) Insert a brick onto your map.
2) Insert -> Object -> ClickDetector inside that same brick.
3) Insert a script inside that same brick, but not inside ClickDetector.
4) Double-click the script, and insert the following:
function onClicked() local x = (math.random(0,10) * 0.1) local y = (math.random(0,10) * 0.1) local z = (math.random(0,10) * 0.1) script.Parent.Color = Color3.new (x, y, z) end script.Parent.ClickDetector.MouseClick:connect(onClicked)
The Script
Here is the first part of the scripting:
function onClicked()
This tells the game to set off the function when the brick is clicked on. (This is only an example, so feel free to change this part if you want)
local x = (math.random(0,10) * 0.1) local y = (math.random(0,10) * 0.1) local z = (math.random(0,10) * 0.1) script.Parent.Color = Color3.new (x, y, z)
This tells the game to change the block's color to a random color.
Finally, the script is 'connected':
script.Parent.ClickDetector.MouseClick:connect(onClicked)
Finding Clicker
Even though ClickDetector doesn't have any function arguements so you can't tell who clicked it, it is possible. This is how:
Method 1
This will make it so only one person can click it:
- 1.Make a part. Name it what you like
- 2.Put in 2 Scripts. Name one "CheckScript" and the other "MakeScript"
- 3.Insert a StringValue. Name it "Owner". Change the value to who you want to click on it.
- 4.Put a ClickDetector into the part, set the MaxActivationDistance to 0
- 5.In the "CheckScript", paste this:
dist = 10 --change this to how far away you can be while true do wait(1) local p = game.Players:GetChildren() for i = 1, #p do if (p[i].Name == script.Parent.Owner.Value) then if (game.Workspace:findFirstChild(p[i].Name) ~= nil) then if (p[i].Character.Torso.Position - script.Parent.Position).magnitude < dist then script.Parent.ClickDetector.MaxActivationDistance = dist else script.Parent.ClickDetector.MaxActivationDistance = 0 end end end end end
6.In the "MakeScript", paste this:
dist = 10 --change this to how far away you can be
function onClicked()
local p = game.Players:GetChildren()
for i = 1, #p do
if (p[i].Name == script.Parent.Owner.Value) then
if (p[i].Character.Torso.Position - script.Parent.Position).magnitude < dist then
print("Hello world!") -- this is just an example
end
end
end
end
script.Parent.ClickDetector.MouseClick:connect(onClicked)
You can simply replace print("Hello world!") with whatever you want this to do.
Method 2
This method will make it so only a team can click on it.
1.Make a part. Name it what you like.
2.Put in 2 Scripts. Name one "CheckScript" and the other "MakeScript"
3.Put a ClickDetector into the part, set the MaxActivationDistance to 0
4.In the "CheckScript", paste this:
dist = 10 --change this to how far away you can be
teamcolor = BrickColor.new("Bright yellow") --change this to the team
while true do
wait(1)
local p = game.Players:GetChildren()
for i = 1, #p do
if (p[i].TeamColor == teamcolor) then
if (game.Workspace:findFirstChild(p[i].Name) ~= nil)
then
if (p[i].Character.Torso.Position - script.Parent.Position).magnitude < dist
then
script.Parent.ClickDetector.MaxActivationDistance = 10
else
script.Parent.ClickDetector.MaxActivationDistance = 0
end
end
end
end
end
5.In the "MakeScript", paste this:
dist = 10 --change this to how far away you can be
teamcolor = BrickColor.new("Bright yellow") --change this to the team
function onClicked()
local p = game.Players:GetChildren()
for i = 1, #p do
if (p[i].TeamColor == teamcolor) then
if (p[i].Character.Torso.Position - script.Parent.Position).magnitude < dist then
print("Hello world!")
end
end
end
end
script.Parent.ClickDetector.MouseClick:connect(onClicked)
Change print("Hello world!") to whatever you want.