Common functions: Difference between revisions

From Legacy Roblox Wiki
Jump to navigationJump to search
>Crazypotato4
missed a spelling error. it's unprofessional when we have bad spelling. lrn2grammarandspelling.
>NXTBoy
Tidied up the first half
Line 11: Line 11:
print("Hi!")
print("Hi!")
delay(3, function()
delay(3, function()
print("Bye!")
    print("Bye!")
end)
end)
</pre>
</pre>
Line 18: Line 18:
===The  "wait()" Function===
===The  "wait()" Function===


The wait function will delay, or wait, by seconds.  Unlike other functions, this one can both be with or without a ":".
The wait function will delay, or wait, by a number of seconds.


{{Example|
print("Hi!")
<pre>
wait(3)
print("Hi!")
print("Bye!")
wait(3)
print("Bye!")
</pre>
}}


In the output, this prints the word "Hi!", waits three seconds, then prints the word "Bye!".
In the output, this prints the word "Hi!", waits three seconds, then prints the word "Bye!".
Line 32: Line 28:
See [[Scripting#Globals|this page]] for more details on these functions.
See [[Scripting#Globals|this page]] for more details on these functions.


==Useful methods==
===The ":Clone()" Method===
===The ":Clone()" Method===
What this function does it what it says, clones. When the object is cloned, it will have no parent, so the clone won't exist until you name its new parent. Here's how you do it.
This method does it what it says - clones, or makes a copy of, an object. When an object is cloned, the result will have no [[Parent]], so the clone won't exist until you "parent" it to another object.


{{Example|
game.Workspace.Brick:Clone().Parent = game.Workspace
<pre>game.Workspace.Brick:Clone().Parent = game.Workspace</pre>
 
}}
If you are creating a script that makes a [[Part]] that has a [[Decal]] on it, the easier thing to do is to clone the brick, define its position, then parent it.
If you are creating a script that makes Part that has a decal on it, the easier thing to do is to clone the brick, define it's parent, and then it's postion (Warning: The default posion is '''0,0,0'''. If you do not define a cloned part's postion, it will be there!).


===The ":FindFirstChild()" Method===
===The ":FindFirstChild()" Method===
What this function does is find the first object it finds with the name noted in the parentheses. This is very useful in finding if something is there or not.
This method is used to find a child object with a certain name. This is very useful for determining whether something is there or not.


{{Example|
You might think you could write a script like this:
<pre>
bin = script.Parent


function onTouched(part)
script.Parent.Touched:connect(function(part)
local h = part.Parent:FindFirstChild("Humanoid")
    local humanoid = part.Parent.Humanoid
if h~=nil then
    if humanoid then
print("Hi There!")
        --The part was touched by a player
end
        print("Hello, player!")
end
    end
end


bin.Touched:connect(onTouched)
However, this will error if the part's parent doesn't contain a humanoid. In the following code, humanoid will be nil if there is no humanoid in the part's parent, but it will not error.
</pre>
}}


If I were to look for the Humanoid in part.Parent without using the FindFirstChild method, I would come out with an error because the object isn't there. But with FindFirstChild, you can ask if the object is nil or not, noted in the script.  The rest of the script you should already know.  If you are trying to find something by name, it is advised to FindFirstChild to avoid possible errors.
script.Parent.Touched:connect(function(part)
    local humanoid = part.Parent:FindFirstChild("Humanoid")
    if humanoid then
        --The part was touched by a player
        print("Hello, player!")
    end
end


===The ":GetChildren()" Method===
===The ":GetChildren()" Method===
This function gets a table of the object's children. It is mostly used for iterating through all the objects inside of an object.
This method returns a table of the object's children. The following code shows how it can be used to count all the parts in the workspace


{{Example|
bricks = 0
<pre>
for object in ipairs(game.Workspace:GetChildren()) do
bricks = 0
    if object:isA("[[BasePart]]") then
local c = game.Workspace:GetChildren()
        bricks = bricks + 1
for i=1, #c do
    end
if c[i].className == "Part" then
end
bricks = bricks + 1
print(bricks)
end
end
print(bricks)
</pre>
}}


===The ":Remove()" Method===
===The ":Remove()" Method===
The Remove function changes the Parent of an object to [[nil]], and also calls Remove on all of its children.  This method should not be used any more, since there are better alternatives, whatever you want to do.  If you want to temporarily take the object out of the game's hierarchy, use ".Parent = nil" to put the object in nil so you can get it back later.  If you want to completely take it out of your game, use the Destroy method.
The Remove function changes the Parent of an object to [[nil]], and also calls Remove on all of its children.


Example:
game.Workspace.Brick:Remove()


{{Example|
This method should not be used any more, since there are better alternatives, whatever you want to do. If you want to temporarily take the object out of the game's hierarchy, use ".Parent = nil" to take the object out of the game in a way that you can get it back later. If you want to completely take it out of your game, use the Destroy method.
<pre>game.Workspace.Brick:Remove()</pre>
}}


=== The ":Destroy()" Method ===
=== The ":Destroy()" Method ===
Unlike the Remove function, the Destroy function completely removes an object.  Destroy removes all connections, and locks the object so that it can't be put back into your game. This method is better then :Remove() because it permanently takes the object out of your game.
Unlike the Remove method, the Destroy method completely removes an object.  Destroy removes all connections, and locks the object so that it can't be put back into your game. This method is better then :Remove() because it cleans up the memory used by the object.


{{Example|
game.Workspace.Brick:Destroy()
<pre> game.Workspace.Brick:Destroy()</pre>}}


===The ":MakeJoints()" Function===
===The ":MakeJoints()" Method===
MakeJoints forms a bond (a joint) between bricks if they have the required surfaces types:
MakeJoints forms a bond (a joint) between touching bricks if they have the required surfaces types:
{|border="1" cellspacing="5"  style=" -webkit-border-radius: 4px; -moz-border-radius: 4px; height: 100%; background-color: #FFFFFF; border-top: dashed 2px #ff0000; border-left: dashed 2px #ff0000; border-bottom: dashed 2px #aa0000; border-right: dashed 2px #aa0000; margin: 6px; margin-right: 10px; margin-left: 10px; clear: none; padding: 2px;"
{| class="wikitable"
! SurfaceType !! Weld !! Universal !! Studs    !! Inlet    !! Glue !! Smooth
|-
|-
|SurfaceType || '''Weld''' || '''Universal''' || '''Studs''' || '''Inlet''' || '''Glue''' || '''Smooth'''
! scope="row" | Weld     
| Weld || Weld      || Weld    || Weld    || Weld || Weld
|-
|-
| '''Weld'''      || Weld || Weld     || Weld || Weld  || Weld || Weld
! scope="row" | Universal
| Weld || Snap     || Snap    || Snap    || Glue || No Joint 
|-
|-
| '''Universal'''  || Weld || Snap      || Snap || Snap || Glue || No Joint   
! scope="row" | Studs
| Weld || Snap      || No Joint || Snap     || Glue || No Joint   
|-
|-
| '''Studs'''      || Weld || Snap      || No Joint || Snap || Glue || No Joint   
! scope="row" | Inlet
| Weld || Snap      || Snap    || No Joint || Glue || No Joint   
|-
|-
| '''Inlet'''      || Weld || Snap     || Snap || No Joint || Glue || No Joint 
! scope="row" | Glue
| Weld || Glue     || Glue    || Glue    || Glue || Glue
|-
|-
| '''Glue'''      || Weld || Glue      || Glue || Glue || Glue || Glue
! scope="row" | Smooth
|-
| Weld || No Joint  || No Joint || No Joint || Glue || No Joint  
| '''Smooth'''    || Weld || No Joint  || No Joint || No Joint || Glue || No Joint  
|}
|}


{{Example|
It can be invoked on both parts and models:
Brick Form:
<pre>
brick = game.Workspace.Brick
brick:MakeJoints()
</pre>


Model Form:
brick = game.Workspace.Brick
<pre>
brick:MakeJoints()
model = game.Workspace.Model
model:MakeJoints()
model = game.Workspace.Model
</pre>
model:MakeJoints()
}}


===The ":BreakJoints()" Method ===
===The ":BreakJoints()" Method ===
This function breaks all joints already made. Running this on a building all grouped into a model might cause it to crumble, although bricks stacked on each other will be unaffected until another force acts on them.
This method breaks all joints already made. Running this on a building grouped into a model might cause it to crumble, although bricks stacked on each other will be unaffected until another force acts on them. Once again, this method can be invoked on both models and parts
 
{{Example|
<pre>
--Brick Form
brick = game.Workspace.Brick
brick:BreakJoints()
 
--Model Form
model = game.Workspace.Model
model:BreakJoints()
</pre>
The model form is the same as doing so:
<pre>
model = game.Workspace.Model
for _, v in pairs(model:GetChildren()) do
if (v:IsA("BasePart")) then
v:BreakJoints()
end
end
</pre>
}}


Although the model form is much simpler.
brick = game.Workspace.Brick
brick:BreakJoints()
model = game.Workspace.Model
model:BreakJoints()


===The ":GetMass()" Method ===
===The ":GetMass()" Method ===
So, ever wondered how heavy a brick is in ROBLOX? The GetMass() function is just for that! It is the same as multiplying all the components of the size of the brick together. NOTE: Editing mass is not possible, as it is a returned value from a function.
So, ever wondered how heavy a brick is in ROBLOX? The GetMass() method is just for that! It is the same as multiplying all the components of the size of the brick together. NOTE: Editing mass is not possible, as it is a returned value from a method, not a property.


{{Example|
brick = game.Workspace.Brick
<pre>
print(brick:GetMass())
brick = game.Workspace.Brick
--This is the same as...
print(brick:GetMass())
brick = game.Workspace.Brick
</pre>
print(brick.Size.X * brick.Size.Y * brick.Size.Z)
This is the same as...
<pre>
brick = game.Workspace.Brick
print(brick.Size.X * brick.Size.Y * brick.Size.Z)
</pre>
}}


If density existed in ROBLOX, GetMass() would multiply the size components and the density. For the time being, all parts in ROBLOX have a density of 1.
If density existed in ROBLOX, GetMass() would multiply the size components and the density. For the time being, all parts in ROBLOX have a density of 1.
Line 202: Line 169:
DB=false
DB=false
function onTouched(hit)
function onTouched(hit)
if DB==true then return end --if debounce is active then end the function
    if DB==true then return end --if debounce is active then end the function
DB=true
    DB=true
if hit.Parent:FindFirstChild("Humanoid")~= nil then --If touched by a player then
    if hit.Parent:FindFirstChild("Humanoid")~= nil then --If touched by a player then
if game.Players:GetPlayerFromCharacter(hit.Parent)~= nil then --If there is a player that goes with the character then
        if game.Players:GetPlayerFromCharacter(hit.Parent)~= nil then --If there is a player that goes with the character then
local player = game.Players:GetPlayerFromCharacter(hit.Parent)
            local player = game.Players:GetPlayerFromCharacter(hit.Parent)
player.LocalStats.Cash=player.LocalStats.Cash + 5 --add 5 more cash
            player.LocalStats.Cash=player.LocalStats.Cash + 5 --add 5 more cash
end
        end
end
    end
wait(1)
    wait(1)
DB=false
    DB=false
end
end


Line 226: Line 193:
<pre>
<pre>
while true do
while true do
wait()
    wait()
--[[ print(game.Workspace.Player.Torso.Velocity) If you want to print the velocity of your player as you go
--[[ print(game.Workspace.Player.Torso.Velocity) If you want to print the velocity of your player as you go
  along, use this.  Change "Player" to your username. --]]
  along, use this.  Change "Player" to your username. --]]
Line 233: Line 200:
printed out as you go along, use this.  Change "Player" to your username. --]]
printed out as you go along, use this.  Change "Player" to your username. --]]


game.Workspace.Player.Torso.Velocity = game.Workspace.Player.Torso.CFrame.lookVector * 60 --[[Change "Player"  
    game.Workspace.Player.Torso.Velocity = game.Workspace.Player.Torso.CFrame.lookVector * 60 --[[Change "Player"  
to your username --]]
to your username --]]



Revision as of 09:17, 29 December 2011

Built-In Functions

There are many pre-made functions in the Object Browser, but this page will be going through the most-used ones. Most of these functions either use a pre-existing brick or delay something from happening. A final note before you start, all built-in functions start with a ":" and end with a "()".

The "delay()" Function

The delay function waits a certain amount of seconds and then executes a function on a new thread.

Example
print("Hi!")
delay(3, function()
    print("Bye!")
end)


The "wait()" Function

The wait function will delay, or wait, by a number of seconds.

print("Hi!")
wait(3)
print("Bye!")

In the output, this prints the word "Hi!", waits three seconds, then prints the word "Bye!".

See this page for more details on these functions.

Useful methods

The ":Clone()" Method

This method does it what it says - clones, or makes a copy of, an object. When an object is cloned, the result will have no Parent, so the clone won't exist until you "parent" it to another object.

game.Workspace.Brick:Clone().Parent = game.Workspace

If you are creating a script that makes a Part that has a Decal on it, the easier thing to do is to clone the brick, define its position, then parent it.

The ":FindFirstChild()" Method

This method is used to find a child object with a certain name. This is very useful for determining whether something is there or not.

You might think you could write a script like this:

script.Parent.Touched:connect(function(part)
    local humanoid = part.Parent.Humanoid
    if humanoid then
        --The part was touched by a player
        print("Hello, player!")
    end
end

However, this will error if the part's parent doesn't contain a humanoid. In the following code, humanoid will be nil if there is no humanoid in the part's parent, but it will not error.

script.Parent.Touched:connect(function(part)
    local humanoid = part.Parent:FindFirstChild("Humanoid")
    if humanoid then
        --The part was touched by a player
        print("Hello, player!")
    end
end

The ":GetChildren()" Method

This method returns a table of the object's children. The following code shows how it can be used to count all the parts in the workspace

bricks = 0
for object in ipairs(game.Workspace:GetChildren()) do
    if object:isA("BasePart") then
        bricks = bricks + 1
    end
end
print(bricks)

The ":Remove()" Method

The Remove function changes the Parent of an object to nil, and also calls Remove on all of its children.

game.Workspace.Brick:Remove()

This method should not be used any more, since there are better alternatives, whatever you want to do. If you want to temporarily take the object out of the game's hierarchy, use ".Parent = nil" to take the object out of the game in a way that you can get it back later. If you want to completely take it out of your game, use the Destroy method.

The ":Destroy()" Method

Unlike the Remove method, the Destroy method completely removes an object. Destroy removes all connections, and locks the object so that it can't be put back into your game. This method is better then :Remove() because it cleans up the memory used by the object.

game.Workspace.Brick:Destroy()

The ":MakeJoints()" Method

MakeJoints forms a bond (a joint) between touching bricks if they have the required surfaces types:

SurfaceType Weld Universal Studs Inlet Glue Smooth
Weld Weld Weld Weld Weld Weld Weld
Universal Weld Snap Snap Snap Glue No Joint
Studs Weld Snap No Joint Snap Glue No Joint
Inlet Weld Snap Snap No Joint Glue No Joint
Glue Weld Glue Glue Glue Glue Glue
Smooth Weld No Joint No Joint No Joint Glue No Joint

It can be invoked on both parts and models:

brick = game.Workspace.Brick
brick:MakeJoints()

model = game.Workspace.Model
model:MakeJoints()

The ":BreakJoints()" Method

This method breaks all joints already made. Running this on a building grouped into a model might cause it to crumble, although bricks stacked on each other will be unaffected until another force acts on them. Once again, this method can be invoked on both models and parts

brick = game.Workspace.Brick
brick:BreakJoints()

model = game.Workspace.Model
model:BreakJoints()

The ":GetMass()" Method

So, ever wondered how heavy a brick is in ROBLOX? The GetMass() method is just for that! It is the same as multiplying all the components of the size of the brick together. NOTE: Editing mass is not possible, as it is a returned value from a method, not a property.

brick = game.Workspace.Brick
print(brick:GetMass())
--This is the same as...
brick = game.Workspace.Brick
print(brick.Size.X * brick.Size.Y * brick.Size.Z)

If density existed in ROBLOX, GetMass() would multiply the size components and the density. For the time being, all parts in ROBLOX have a density of 1.

The ":MoveTo()" Method

The MoveTo() function has two different uses. The first is usable on a Model or any type of Part (see BasePart.)

Example
--Used on a model...
model = game.Workspace.Model
model:MoveTo(Vector3.new(0, 0, 10))

--Used on a Part...
brick = game.Workspace.Brick
brick:MoveTo(Vector3.new(0, 0, 10))


The second use of MoveTo() is to force a Humanoid to walk to a location to the best of its ability. The Humanoid will continue to walk in that direction until it reaches the destination.

This version of MoveTo() requires three arguments, the first is given by the : operator, and is the Humanoid. The second is the target location, and finally, the third is the BasePart the Humanoid is walking on to get to the destination.

Example
Character = game.Workspace.SomePlayer.Humanoid
Base = game.Workspace.Base --Assuming your baseplate is named "Base"
Character:MoveTo(Vector3.new(15, 0, 10), Base) --Tell Character to talk to (15, 0, 10) on Base.


The ":GetPlayerFromCharacter()" Method

Ever needed to find out what player(not character) touched your brick in you button script? The ":GetPlayerFromCharacter()" Function makes it easier than actually searching the players with the previous ":FindFirstChild()" and ":GetChildren()" functions. What it does is automatically search an area for a the player that represents the character. If an Instance's "Controller" is "Player", you can use this function.

Example
DB=false
function onTouched(hit)
    if DB==true then return end --if debounce is active then end the function
    DB=true
    if hit.Parent:FindFirstChild("Humanoid")~= nil then --If touched by a player then
        if game.Players:GetPlayerFromCharacter(hit.Parent)~= nil then --If there is a player that goes with the character then
            local player = game.Players:GetPlayerFromCharacter(hit.Parent)
            player.LocalStats.Cash=player.LocalStats.Cash + 5 --add 5 more cash
        end
    end
    wait(1)
    DB=false
end

script.Parent.Touched:connect(onTouched)


That script will change give 5 cash to the local stat of cash if you touch it.

The "lookVector" Property

There actually is a CFrame function to find which way you are looking. What this function does is find exactly which way your front is facing. The "lookVector" function can be used for several different situations, e.g., tools, planes, robots, cars, etc.

Example
while true do
    wait()
--[[ print(game.Workspace.Player.Torso.Velocity) If you want to print the velocity of your player as you go
 along, use this.  Change "Player" to your username. --]]

--[[ print(game.Workspace.Player.Torso.CFrame.lookVector) If you want to see the lookvector of your player 
printed out as you go along, use this.  Change "Player" to your username. --]]

    game.Workspace.Player.Torso.Velocity = game.Workspace.Player.Torso.CFrame.lookVector * 60 --[[Change "Player" 
to your username --]]

end


First is 'while true do' loop. Then is the 'wait()' function. The script finds 'game.Workspace.Player,' (or game.Workspace.(yourusername), then it finds my Torso and sets its velocity to the way my Torso is looking by sixty. This means this character will go at the speed of 60 units per second by the way it is facing.

See Also

Function Dump