RegisterQueue | register system, activity tracking and queue system with Basic Admin Essentials features for your café needs!


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 accurate 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 plugin is enabled
  • Administrators may be able to execute a plugin command to see who is currently in the register queue in the correct order, if the plugin is enabled
  • Administrators may be able to forcefully unclaim registers from players, if the plugin is enabled
  • 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 plugin is enabled

Steps to add the Basic Admin 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 a StringValue called "Claimant" to each of the registers. Set the value of each StringValue to "nil", without the quotation marks.

video pending

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.

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.

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 :heart:

3 Likes

Cool! Might use this is I ever make a café game

1 Like