HopperBins: Difference between revisions

From Legacy Roblox Wiki
Jump to navigationJump to search
>Mindraker
{{merge}}
>Mindraker
mNo edit summary
Line 32: Line 32:


==What do I do with it?==
==What do I do with it?==
You can use it to do almost anything! You can spawn a projectile when Button1Down is fired, have it spawn in the direction the mouse is from your head, and move in the direction of the mouse.
You can spawn a projectile when Button1Down is fired, have it spawn in the direction the mouse is from your head, and move in the direction of the mouse, for example.


Here's an example of a Boulder Summoner.
Here's an example of a Boulder Summoner.
Line 62: Line 62:


==Simple Toggle Utility==
==Simple Toggle Utility==
This tutorial wouldn't be complete without some decent examples.  Assuming you have a brick named "Toggle", and it has a BoolValue in it named "On/Off", you can use this.
Assuming you have a brick named "Toggle", and it has a BoolValue in it named "On/Off", you can use this as an example:


<pre>
<pre>
Line 93: Line 93:


==Mouse Without HopperBin==
==Mouse Without HopperBin==
===Setting up the HopperBin===
===Setting up the HopperBin===
You need a HopperBin object. This is what the player selects to activate the whole system.
You need a [[RBX.Lua.HopperBin (Object)|HopperBin object]]. This is what the player selects to activate the whole system.
 
You also need two scripts. I have a few templates that you can fix up.


Here's how it should look in the Explorer:
You also need two scripts.  Here is how they should look in the Explorer:


<pre>
<pre>
Line 106: Line 105:
</pre>
</pre>


We have two scripts. The one named ConnectionScript is the one that sets it all up, and links the mouse to some values. The HopperBin gets removed, the two scripts moved, but the mouse is still active until you select a different HopperBin!
The script named ConnectionScript is the one that sets it all up, and links the mouse to some values. The HopperBin gets removed, the two scripts moved, but the mouse is still active until you select a different HopperBin.


=== ConnectionScript ===
=== ConnectionScript ===
Here's what goes in "ConnectionScript":
Here is what goes in "ConnectionScript":


<pre>
<pre>

Revision as of 15:38, 26 August 2008

What is a HopperBin?

HopperBins are considered old now. They were the first ways to make a weapon, a utility tool, or anything you could really think of. They're mainly used for getting input from the player, and doing something with that input.

Special Events

The special events of a HopperBin are as follows:

  1. Selected
  2. Deselected

Important events and properties

The Selected and Deselected events have an argument, called a MOUSE object. Here are its important events and properties.

Events

  1. Button1Down
  2. Button1Up
  3. Button2Down -- currently un-operational
  4. Button2Up -- also non-working
  5. WheelForward -- non-working
  6. WheelBackward -- non-working

Properties

  1. Hit -- CFrame value
  2. Target -- object value
  3. X -- mouse's X position on the screen.
  4. Y -- mouse's Y position on the screen.
  5. ViewSizeX -- your screen's X size.
  6. ViewSizeY -- your screen's Y size.
  7. Origin -- CFrame value
  8. Icon -- the cursor image path

What do I do with it?

You can spawn a projectile when Button1Down is fired, have it spawn in the direction the mouse is from your head, and move in the direction of the mouse, for example.

Here's an example of a Boulder Summoner.

lifetime = 5 -- how long the boulder stays there. 5 is a good value.

function onButton1Down(mouse)
	local b = Instance.new("Part")
	b.BrickColor = BrickColor.new(217)
	b.Position = mouse.Hit.p
	b.Size = Vector3.new(5, 5, 5)
	b.Shape = 0
	b.Parent = game.Workspace
	b.Velocity = (script.Parent.Parent.Parent.Character.Head.Position - mouse.Hit.p).unit * -50 + Vector3.new(0, 10, 0)
	-- pushes it away from you, and pops it up a bit, making it seem to come out of the ground.
	game:GetService("Debris"):AddItem(b, lifetime)
end

function onSelected(mouse)
	mouse.Button1Down:connect(function() onButton1Down(mouse) end) -- Button1Down doesn't come with a mouse, seeing as its
	-- an event of the mouse itself. We need to give the function the mouse object to work off of.
end

script.Parent.Selected:connect(onSelected) -- Selected comes with a mouse.

Thats a simple thing to spawn a boulder wherever you click. It also gets rid of the boulder after a set amount of time.

Simple Toggle Utility

Assuming you have a brick named "Toggle", and it has a BoolValue in it named "On/Off", you can use this as an example:

brickName = "Toggle"
valueName = "On/Off"

function onButton1Down(mouse)
	local targ = mouse.Target
	if targ~=nil then
		if targ.Name == brickName then
			if targ:findFirstChild(valueName)~=nil then
				if targ[valueName].Value == true then
					targ[valueName].Value = false
				else
					targ[valueName].Value = true
				end
			end
		end
	end
end

function onSelected(mouse)
	mouse.Button1Down:connect(function() onButton1Down(mouse) end)
end

script.Parent.Selected:connect(onSelected)

You can easily manipulate this script to work for anything.

Mouse Without HopperBin

Setting up the HopperBin

You need a HopperBin object. This is what the player selects to activate the whole system.

You also need two scripts. Here is how they should look in the Explorer:

[-] HopperBin
	ConnectionScript
	ControlScript

The script named ConnectionScript is the one that sets it all up, and links the mouse to some values. The HopperBin gets removed, the two scripts moved, but the mouse is still active until you select a different HopperBin.

ConnectionScript

Here is what goes in "ConnectionScript":

function onSelected(mouse)
	local m = Instance.new("CFrameValue")
	m.Parent = script.Parent.Parent.Parent
	m.Name = "MouseCFrame"
	local b = Instance.new("BoolValue")
	b.Parent = script.Parent.Parent.Parent
	b.Name = "Button1Down"
	local k = Instance.new("StringValue")
	k.Parent = script.Parent.Parent.Parent
	k.Name = "KeyPressed"
	local t = Instance.new("ObjectValue")
	t.Parent = script.Parent.Parent.Parent
	t.Name = "MouseTarget"
	mouse.Move:connect(function() m.Value = mouse.Hit end)
	mouse.Button1Down:connect(function() b.Value = true end)
	mouse.Button1Up:connect(function() b.Value = false end)
	mouse.KeyDown:connect(function(key) k.Value = key k.Value = "" end)
	mouse.Changed:connect(function(property)
		if (property == "Target") then
			t.Value = mouse.Target
		end
	end)
	local hb = script.Parent
	script.Parent = hb.Parent
	hb.ControlScript.Parent = script.Parent
	hb:Remove()
end

script.Parent.Selected:connect(onSelected)

ControlScript

Here is the ControlScript:


while true do
	if script.Parent.Name == "Backpack" then break end -- this is to pause the script until it gets moved, no bugging up.
	wait()
end

function newText(text)
	local nm = Instance.new("Hint")
	nm.Parent = p
	nm.Text = text
end

function onKeyDown(key)
	if script.Parent.Parent.Character==nil then return end
	local key = string.lower(key)
end

function onButton1Down()
	if script.Parent.Parent.Character==nil then return end		
end

function onButton1Up()
	if script.Parent.Parent.Character==nil then return end
end

function onMove()
	if script.Parent.Parent.Character==nil then return end
end

script.Parent.Parent.KeyPressed.Changed:connect(function() onKeyDown(script.Parent.Parent.KeyPressed.Value) end)
script.Parent.Parent.MouseCFrame.Changed:connect(function() onMove() end)
script.Parent.Parent.Button1Down.Changed:connect(function() 
	if script.Parent.Parent.Button1Down.Value == true then 
		onButton1Down() 
	else
		onButton1Up()
	end
end)