RegisterQueue • Giver
RegisterQueue V1 is a queue system and a register system, that allows players in an industry role-play setting to claim their own register, unclaim it whenever that desire, and join a queue if all registers that are available are occupied. This can be used as a cafe queue system, boba bar queue system, juice bar queue system and in similar games.
Including register-queue systems allow a fair experience for a players, ensuring that a player’s shift in your cafe role-play game is undisturbed by disputes. Administrators will also find this helpful to have an identification of hard-working players through the use of the integrated activity-tracking feature.
What can this do?
- Players that meet your group rank requirements will be able to claim registers by walking up to them and interacting with the ProximityPrompt at the register.
- They’ll then be able to unclaim the register by pressing and holding another ProximityPrompt, or by touching a part (possibly at the entrance of the kitchen, you choose!)
- If all registers are currently in use, players will be able to join a register queue by pressing a Prompt from a place that you decide, and will be teleported to the next available register once they’re the first in the queue.
With Basic Admin Essentials 2.0,
- Players will be notified when they claim and unclaim registers, and will be notified of their queue position when they join the queue
- Players can see how long they’ve worked for once they have unclaimed their register
- Players may be able to execute a plugin command to see their position in the register queue, if the BAE plugin is set-up
- Administrators may be able to execute a plugin command to see who is currently in the register queue in the correct order, if the BAE plugin is set-up
- Administrators may be able to forcefully unclaim registers from players, if the BAE plugin is set-up
- Administrators may be able to view and track the history of a player’s activity (how long they have had their register claimed), if the BAE plugin is set-up
Steps and scripts to set-up the Basic Admin Essentials plugins are provided.
To install RegisterQueue…
Expand on each step for a video demonstration and details! Click here for the model.
In "Workspace", create a folder called "RegisterSystem". Inside, create a folder called "Registers". Inside the RegisterSystem folder, create a model called "QueuePrompt" and add two parts - one part called "TeleportPart" and another called "PromptPart".
The QueuePrompt model is where players will join the queue from, and where players will be teleported after they unclaim registers. Choose a spot near the entrance of your kitchen!
Move all your register models into the "Registers" folder and name them as Register1, Register2, etc. You can add as many registers as you'd like!
Add a part called TeleportPart to each of the registers.
This is where your players will be teleported to when they claim the register.
Add a part called PromptPart to each of the registers.
This is where the ProximityPrompts are shown. In the video, I’ve used the existing TeleportParts and resized/renamed them.
Add the RegisterQueue V1 model (expand for link) into the Workspace. Then, open the "Setup & Help" script and modify the first three lines (group ID, group rank, and keybind) to your liking.
The keybind modification isn’t shown in the video, but it is the same process.
https://create.roblox.com/store/asset/128779926155437/RegisterQueue-V1
BONUS: Basic Admin Plugins,
Four command are available for you:
- “unclaim” command for admins to unclaim a register based on its register number.
- “myqueuestatus” command to allow players to see their own queue position
- “regqueue” command for admins to see register queue
- “activity” command for admins to see the claim-time history of a player based on their ID
Click this spoiler for the scripts and a video demonstration.
A fully set-up version of the Basic Admin Essentials model, including the module, is available in the uncopylocked place demo. You’ll just need to configure the set-up script to your needs.
Note: the activity command is not included in the video, but it is the same steps.
"unclaim"
local Plugin = function(...)
local Data = {...}
local remoteEvent = Data[1][1]
local remoteFunction = Data[1][2]
local returnPermissions = Data[1][3]
local Commands = Data[1][4]
local Prefix = Data[1][5]
local actionPrefix = Data[1][6]
local returnPlayers = Data[1][7]
local cleanData = Data[1][8]
local pluginName = 'unclaim'
local pluginPrefix = Prefix
local pluginLevel = 0
local pluginUsage = "<Number>"
local pluginDescription = "Forcefully unclaim a register based on its number."
local function pluginFunction(Args)
local Number = tonumber(Args[3])
game.ReplicatedStorage.RegisterSystem.UnclaimNumber:Fire(Number, Args[1])
end
local descToReturn
if pluginUsage ~= "" then
descToReturn = pluginPrefix..pluginName..' '..pluginUsage..'\n'..pluginDescription
else
descToReturn = pluginPrefix..pluginName..'\n'..pluginDescription
end
return pluginName,pluginFunction,pluginLevel,pluginPrefix,{pluginName,pluginUsage,pluginDescription}
end
return Plugin
"myqueuestatus"
local Plugin = function(...)
local Data = {...}
local remoteEvent = Data[1][1]
local remoteFunction = Data[1][2]
local returnPermissions = Data[1][3]
local Commands = Data[1][4]
local Prefix = Data[1][5]
local actionPrefix = Data[1][6]
local returnPlayers = Data[1][7]
local cleanData = Data[1][8]
local pluginName = 'myqueuestatus'
local pluginPrefix = Prefix
local pluginLevel = 0
local pluginUsage = ""
local pluginDescription = "See your position in the register queue."
local function findValue(Args)
for k, v in pairs(_G.RegQueue) do
if v == Args[1].Name then
return tostring(k)
end
end
return "You're not in the register queue!"
end
local function pluginFunction(Args)
remoteEvent:FireClient(Args[1],'Hint', "Register System", findValue(Args))
end
local descToReturn
if pluginUsage ~= "" then
descToReturn = pluginPrefix..pluginName..' '..pluginUsage..'\n'..pluginDescription
else
descToReturn = pluginPrefix..pluginName..'\n'..pluginDescription
end
return pluginName,pluginFunction,pluginLevel,pluginPrefix,{pluginName,pluginUsage,pluginDescription}
end
return Plugin
"regqueue"
local Plugin = function(...)
local Data = {...}
local remoteEvent = Data[1][1]
local remoteFunction = Data[1][2]
local returnPermissions = Data[1][3]
local Commands = Data[1][4]
local Prefix = Data[1][5]
local actionPrefix = Data[1][6]
local returnPlayers = Data[1][7]
local cleanData = Data[1][8]
local pluginName = 'regqueue'
local pluginPrefix = Prefix
local pluginLevel = 0
local pluginUsage = ""
local pluginDescription = "See who is currently in the register queue."
local function pluginFunction(Args)
remoteEvent:FireClient(Args[1],'List','Register Queue',false,true,_G.RegQueue)
end
local descToReturn
if pluginUsage ~= "" then
descToReturn = pluginPrefix..pluginName..' '..pluginUsage..'\n'..pluginDescription
else
descToReturn = pluginPrefix..pluginName..'\n'..pluginDescription
end
return pluginName,pluginFunction,pluginLevel,pluginPrefix,{pluginName,pluginUsage,pluginDescription}
end
return Plugin
"activity"
local Plugin = function(...)
local Data = {...}
local remoteEvent = Data[1][1]
local remoteFunction = Data[1][2]
local returnPermissions = Data[1][3]
local Commands = Data[1][4]
local Prefix = Data[1][5]
local actionPrefix = Data[1][6]
local returnPlayers = Data[1][7]
local cleanData = Data[1][8]
local pluginName = 'activity'
local pluginPrefix = Prefix
local pluginLevel = 0
local pluginUsage = "<User ID>"
local pluginDescription = "See how long someone has worked. Enter the player's ID only - usernames do not work!"
local datastoreS = game:GetService("DataStoreService")
local playerStore = datastoreS:GetDataStore("playerTimeDictionary")
local function getPlayerTable(playerID)
local playerTable = playerStore:GetAsync(tostring(playerID))
if playerTable == nil then
return nil
end
return playerTable
end
local function pluginFunction(Args)
local userId = tonumber(Args[3])
remoteEvent:FireClient(Args[1],'List','Activity for ' .. Args[3] ,false,true,getPlayerTable(userId))
end
local descToReturn
if pluginUsage ~= "" then
descToReturn = pluginPrefix..pluginName..' '..pluginUsage..'\n'..pluginDescription
else
descToReturn = pluginPrefix..pluginName..'\n'..pluginDescription
end
return pluginName,pluginFunction,pluginLevel,pluginPrefix,{pluginName,pluginUsage,pluginDescription}
end
return Plugin
Remember that the default system includes no native UI - interaction is only through ProximityPrompts and the Basic Admin UI if enabled.
Development link
If you’d like to use RegisterQueue data such as whether a player is currently in the queue, or the name of the register they’ve claimed for purposes such as integration, RegisterQueue makes this very easy for you.
All eligible players in your game (based on group rank) will have three attributes which display this data. All attributes are only changed on the server:
-
hasRegister
will be true as a boolean if a player has a register claimed, false if not. -
registerName
states the name of the register they’ve claimed as a string. This will be empty if the player has no register claimed. -
inQueue
will be true as a boolean if the player is in the register queue, false if not.
Each register model will have a string attribute called Claimant
. The attribute will contain the username of the player that has the register claimed, or the attribute stringvalue will be “nil” if the register is unclaimed.
All players will have the eligible
attribute set to true or false depending on their group rank.
About the project…
The first version of RegisterQueue provides simple register-based functionality through ProximityPrompts and Basic Admin Essentials integration. I plan to expand on this with a V2 that contains a UI-based system, NPC systems and much more. If you have any questions, suggestions or anything that needs to be fixed, please notify me!
RegisterQueue V1 is completely free and open-sourced. This project has been released under the MIT license. Additional information on the license can be found in this page.
Is this for you?
Feel free to use the uncopylocked place demo to test the system and see if it works for your needs! This uses three registers (you can add as many registers as you’d like as long as they’re set up properly as in the instructions). To test the Basic admin commands, type :unclaim [register-number]
(1, 2, or 3) or :regqueue
(you’ll need at least 4 people) or :myqueuestatus
(you’ll need at least 4 people) or :activity [user ID]
(you can use my 2379869813 or anyone else, as long as they’ve claimed a register in the test game).
Thank you,
Iralyst
~discord: @iralyst