User:JulienDethurens/Draft: Difference between revisions
>JulienDethurens No edit summary |
>JulienDethurens No edit summary |
||
Line 1: | Line 1: | ||
== Introduction == | ==Introduction== | ||
Restricted doors, also commonly called <abbr title="Very Important Person">VIP doors</abbr>, are used to restrict access to a certain area to only certain users. There are many restrictions that one could want to apply to a restricted door, and this article can not cover them all. It will however cover the most common restrictions: | Restricted doors, also commonly called <abbr title="Very Important Person">VIP doors</abbr>, are used to restrict access to a certain area to only certain users. There are many restrictions that one could want to apply to a restricted door, and this article can not cover them all. It will however cover the most common restrictions: | ||
*Being | *Being a certain player. | ||
*Owning a certain asset (usually a t-shirt, but can also be a badge, a shirt, or even a hat). | *Owning a certain asset (usually a t-shirt, but can also be a badge, a shirt, or even a hat). | ||
*Being in a specific group. | *Being in a specific group. | ||
Line 12: | Line 11: | ||
*Isn't there a nicer way to do it? | *Isn't there a nicer way to do it? | ||
The problem is that restricted doors are often overused. Sometimes, they are used to protect a room that contains certain items. Yet, these items could be given automatically to the players, instead of them having to enter the room every time they die. Try to avoid using a restricted door if you can do it in a cleaner way. | The problem is that restricted doors are often overused. Sometimes, they are used to protect a room that contains certain items. Yet, these items could be given automatically to the players, instead of them having to enter the room every time they die. Try to avoid using a restricted door if you can do it in a cleaner way. | ||
==Building the Door== | |||
== Building the Door == | |||
[[File:Door.png|thumb|An example of a door.]] | [[File:Door.png|thumb|An example of a door.]] | ||
Building the door should not be a problem, but I am still going to describe it. First, you will need to create the door. Usually, you will want it to be of the size of a character, so players can get through. You will probably want the door to be anchored too, unless you expect it to move whenever a player touches it... | Building the door should not be a problem, but I am still going to describe it. First, you will need to create the door. Usually, you will want it to be of the size of a character, so players can get through. You will probably want the door to be anchored too, unless you expect it to move whenever a player touches it... | ||
The size of a player's character is 4 x 5 x 1, so you will probably want your door to have that size. However, you can't get exactly that size with the Brick [[FormFactor (Enum)|FormFactor]]. Therefore, you will probably want to change the FormFactor to Symmetric, so you can get the exact size. Another solution would be to simply make the door slightly bigger than the exact size of a character. Usually, you will also want to build a room around the door, but that is out of the scope of this tutorial. | The size of a player's character is 4 x 5 x 1, so you will probably want your door to have that size. However, you can't get exactly that size with the Brick [[FormFactor (Enum)|FormFactor]]. Therefore, you will probably want to change the FormFactor to Symmetric, so you can get the exact size. Another solution would be to simply make the door slightly bigger than the exact size of a character. Usually, you will also want to build a room around the door, but that is out of the scope of this tutorial. | ||
==Scripting the Door== | |||
== Scripting the Door == | ===Structure=== | ||
=== Structure === | |||
First, we will need to create a script in the door. Go in the "Insert" menu and choose "Object...". Then, use the dialog that appears to insert a script in the door. Once you have a script in your door, open it to edit it in the script editor. | First, we will need to create a script in the door. Go in the "Insert" menu and choose "Object...". Then, use the dialog that appears to insert a script in the door. Once you have a script in your door, open it to edit it in the script editor. | ||
Because the door will be manipulated a lot in the script, it would be a good idea to define a variable that contains a reference to it. I'll call that variable <var>door</var>, but you can call it whatever you want. | Because the door will be manipulated a lot in the script, it would be a good idea to define a variable that contains a reference to it. I'll call that variable <var>door</var>, but you can call it whatever you want. | ||
<code lua> | <code lua> | ||
local door = script.Parent | local door = script.Parent | ||
</code> | </code> | ||
You will probably want to be able to open and close the door. Let's make a function to open the door and another to close it. | You will probably want to be able to open and close the door. Let's make a function to open the door and another to close it. | ||
Line 75: | Line 68: | ||
end | end | ||
</code> | </code> | ||
You probably want the door to open when it is touched, and, therefore, it should use the [[Touched (Event)|Touched]] event. Therefore, let's connect the Touched event to a function. Here is the code that I wrote. | You probably want the door to open when it is touched, and, therefore, it should use the [[Touched (Event)|Touched]] event. Therefore, let's connect the Touched event to a function. Then, we will check if the part that touched the door is in a character. Here is the code that I wrote. | ||
<code lua> | <code lua> | ||
local door = script.Parent | local door = script.Parent | ||
Line 100: | Line 93: | ||
door.Touched:connect(function(part) | door.Touched:connect(function(part) | ||
if not part.Parent then return end -- We don't want the script to error just because the part has no parent. | |||
local player = game:GetService('Players'):GetPlayerFromCharacter(part.Parent) or game:GetService('Players'):GetPlayerFromCharacter(part.Parent.Parent) | |||
if not player then return end -- If it isn't a character that touched the door, then we ignore it. | |||
end) | end) | ||
</code> | </code> | ||
Now, what do we want to do when the door is touched? We want to check if the player corresponds to one of the restrictions. That brings me to the next section... | Now, what do we want to do when the door is touched? We want to check if the player corresponds to one of the restrictions. That brings me to the next section... | ||
===Restrictions=== | |||
There are many ways to check if the player corresponds to one of the restrictions, but we will use a simple system in this case. However, you are encouraged to try other ways to do it, as that will help you to learn. | |||
The system we will use in this example is simple. We will use a table that contains all the restrictions, under the form of boolean expressions. If any of these boolean expressions is true, then the door will open. | |||
What we will need is a table and a loop that iterates through the table. If any of the values in the table is true, it will open the door, wait 4 seconds and then close it. You can see the code I wrote below. | |||
<code lua> | |||
local door = script.Parent | |||
=== | function open() | ||
-- This function will open the door. | |||
door.CanCollide = false -- Make players able to walk through the door. | |||
for transparency = 0, 1, .1 do | |||
door.Transparency = transparency | |||
wait(.1) | |||
end | |||
end | |||
function close() | |||
-- This function will close the door. | |||
for transparency = 1, 0, -.1 do | |||
door.Transparency = transparency | |||
wait(.1) | |||
end | |||
door.CanCollide = true -- Make players unable to walk through the door. | |||
end | |||
door.Touched:connect(function(part) | |||
if not part.Parent then return end -- We don't want the script to error just because the part has no parent. | |||
local player = game:GetService('Players'):GetPlayerFromCharacter(part.Parent) or game:GetService('Players'):GetPlayerFromCharacter(part.Parent.Parent) | |||
if not player then return end -- If it isn't a character that touched the door, then we ignore it. | |||
local restrictions = {} | |||
for _, restriction in pairs(restrictions) do | |||
if restriction then | |||
open() | |||
delay(4, close) | |||
end | |||
end | |||
end) | |||
</code> | |||
Now, we need to put some restrictions in there. A restriction, in this case, is | |||
Let's see some common restrictions you might want to apply. | |||
====Being a Certain Player==== | |||
Often, you will want to authorize certain specific players to go through the door. In a such case, this is probably what you would do. | |||
You have probably already guessed how to apply this restriction, but, if you didn't, it is simple. You just check if the player's name is equal to a certain string: | |||
<code lua> | |||
player.Name == "PlayerName" | |||
</code> | |||
====Being in a Certain Group==== | |||
Checking if a player is in a certain group is easy. You have to use the [[IsInGroup (Method)|IsInGroup]] method of the [[RBX.lua.Player (Object)|Player]] object. | |||
Incase you don't already know what the IsInGroup method does, I'll explain: | |||
The IsInGroup method accepts one argument, which is a group's <abbr title="identifier">id</abbr>. If the player is in the group with that <abbr title="identifier">id</abbr>, the method will return true. Otherwise, it will return false. | |||
Therefore, here is an example of applying that restriction (note: you can change 7 to the <abbr title="identifier">id</abbr> of any group): | |||
<code lua> | |||
player:IsInGroup(7) | |||
<code> | |||
==Terminology== | |||
This is a list of some of the terms that were used in this article, as well as their definition, in the context of the article. | |||
;restriction | |||
: A boolean expression that evaluates to true or false depending on the value of the <var>player</var> variable. | |||
;asset | |||
: A specific item, usually represented by its <abbr title="identifier">id</abbr>. Can be a t-shirt, a shirt, a pants, a model, a badge, a place, a hat, a gear and many more. | |||
;terminology | |||
: The vocabulary of technical terms used in a particular field, in this case, the current article. |
Revision as of 00:40, 26 February 2012
Introduction
Restricted doors, also commonly called VIP doors, are used to restrict access to a certain area to only certain users. There are many restrictions that one could want to apply to a restricted door, and this article can not cover them all. It will however cover the most common restrictions:
- Being a certain player.
- Owning a certain asset (usually a t-shirt, but can also be a badge, a shirt, or even a hat).
- Being in a specific group.
- Being the creator of the place.
- Being a friend or best friendss of a certain player or of the creator.
However, you should always think before making a restricted door that restricts access to a certain area. Ask yourself these questions:
- Is it really necessary?
- Wouldn't it be better to make a GUI or a command that teleports there?
- Isn't there a nicer way to do it?
The problem is that restricted doors are often overused. Sometimes, they are used to protect a room that contains certain items. Yet, these items could be given automatically to the players, instead of them having to enter the room every time they die. Try to avoid using a restricted door if you can do it in a cleaner way.
Building the Door
Building the door should not be a problem, but I am still going to describe it. First, you will need to create the door. Usually, you will want it to be of the size of a character, so players can get through. You will probably want the door to be anchored too, unless you expect it to move whenever a player touches it...
The size of a player's character is 4 x 5 x 1, so you will probably want your door to have that size. However, you can't get exactly that size with the Brick FormFactor. Therefore, you will probably want to change the FormFactor to Symmetric, so you can get the exact size. Another solution would be to simply make the door slightly bigger than the exact size of a character. Usually, you will also want to build a room around the door, but that is out of the scope of this tutorial.
Scripting the Door
Structure
First, we will need to create a script in the door. Go in the "Insert" menu and choose "Object...". Then, use the dialog that appears to insert a script in the door. Once you have a script in your door, open it to edit it in the script editor.
Because the door will be manipulated a lot in the script, it would be a good idea to define a variable that contains a reference to it. I'll call that variable door, but you can call it whatever you want.
local door = script.Parent
You will probably want to be able to open and close the door. Let's make a function to open the door and another to close it.
There are many ways to open a door, but, for this tutorial, we will choose one that makes the door progressively disappear.
We will use a loop to make the door fade, and we will use its Transparency property to changnale its opacity. Then, finally, we will change the door's CanCollide property to allow players to walk through it.
Incase you weren't sure how to write the code, here is an example that works. However, you are encouraged to write your own code, as that is how you will learn.
local door = script.Parent
function open()
-- This function will open the door.
door.CanCollide = false -- Make players able to walk through the door.
for transparency = 0, 1, .1 do
door.Transparency = transparency
wait(.1)
end
end
If there is an open function, there is of course also a close function. That close function does exactly the opposite of what the open function does, so you should be able to write the code yourself. If not, here is the code as I wrote it, but remember you are encouraged to write it yourself.
local door = script.Parent
function open()
-- This function will open the door.
door.CanCollide = false -- Make players able to walk through the door.
for transparency = 0, 1, .1 do
door.Transparency = transparency
wait(.1)
end
end
function close()
-- This function will close the door.
for transparency = 1, 0, -.1 do
door.Transparency = transparency
wait(.1)
end
door.CanCollide = true -- Make players unable to walk through the door.
end
You probably want the door to open when it is touched, and, therefore, it should use the Touched event. Therefore, let's connect the Touched event to a function. Then, we will check if the part that touched the door is in a character. Here is the code that I wrote.
local door = script.Parent
function open()
-- This function will open the door.
door.CanCollide = false -- Make players able to walk through the door.
for transparency = 0, 1, .1 do
door.Transparency = transparency
wait(.1)
end
end
function close()
-- This function will close the door.
for transparency = 1, 0, -.1 do
door.Transparency = transparency
wait(.1)
end
door.CanCollide = true -- Make players unable to walk through the door.
end
door.Touched:connect(function(part)
if not part.Parent then return end -- We don't want the script to error just because the part has no parent.
local player = game:GetService('Players'):GetPlayerFromCharacter(part.Parent) or game:GetService('Players'):GetPlayerFromCharacter(part.Parent.Parent)
if not player then return end -- If it isn't a character that touched the door, then we ignore it.
end)
Now, what do we want to do when the door is touched? We want to check if the player corresponds to one of the restrictions. That brings me to the next section...
Restrictions
There are many ways to check if the player corresponds to one of the restrictions, but we will use a simple system in this case. However, you are encouraged to try other ways to do it, as that will help you to learn.
The system we will use in this example is simple. We will use a table that contains all the restrictions, under the form of boolean expressions. If any of these boolean expressions is true, then the door will open.
What we will need is a table and a loop that iterates through the table. If any of the values in the table is true, it will open the door, wait 4 seconds and then close it. You can see the code I wrote below.
local door = script.Parent
function open()
-- This function will open the door.
door.CanCollide = false -- Make players able to walk through the door.
for transparency = 0, 1, .1 do
door.Transparency = transparency
wait(.1)
end
end
function close()
-- This function will close the door.
for transparency = 1, 0, -.1 do
door.Transparency = transparency
wait(.1)
end
door.CanCollide = true -- Make players unable to walk through the door.
end
door.Touched:connect(function(part)
if not part.Parent then return end -- We don't want the script to error just because the part has no parent.
local player = game:GetService('Players'):GetPlayerFromCharacter(part.Parent) or game:GetService('Players'):GetPlayerFromCharacter(part.Parent.Parent)
if not player then return end -- If it isn't a character that touched the door, then we ignore it.
local restrictions = {}
for _, restriction in pairs(restrictions) do
if restriction then
open()
delay(4, close)
end
end
end)
Now, we need to put some restrictions in there. A restriction, in this case, is
Let's see some common restrictions you might want to apply.
Being a Certain Player
Often, you will want to authorize certain specific players to go through the door. In a such case, this is probably what you would do.
You have probably already guessed how to apply this restriction, but, if you didn't, it is simple. You just check if the player's name is equal to a certain string:
player.Name == "PlayerName"
Being in a Certain Group
Checking if a player is in a certain group is easy. You have to use the IsInGroup method of the Player object.
Incase you don't already know what the IsInGroup method does, I'll explain:
The IsInGroup method accepts one argument, which is a group's id. If the player is in the group with that id, the method will return true. Otherwise, it will return false.
Therefore, here is an example of applying that restriction (note: you can change 7 to the id of any group):
player:IsInGroup(7)
Terminology
This is a list of some of the terms that were used in this article, as well as their definition, in the context of the article.
- restriction
- A boolean expression that evaluates to true or false depending on the value of the player variable.
- asset
- A specific item, usually represented by its id. Can be a t-shirt, a shirt, a pants, a model, a badge, a place, a hat, a gear and many more.
- terminology
- The vocabulary of technical terms used in a particular field, in this case, the current article.