Making an onClicked script

From Goodblox Wiki
Revision as of 20:41, 23 June 2020 by Pizzaboxer (talk | contribs) (Created page with "{{CatUp|Tutorials}} __TOC__ ==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. ==Wh...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

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.