Giver | advanced hand-to system with utility-logs, points system, accept/decline UI, Basic Admin integration and point logs for your café needs!

RegisterQueueGiver


Giver V1 is an advanced hand-to utility that allows players in an industry role-play setting to hand other players items. You’ll also be able to allow the players on the receiving end to accept/decline the hand-to requests, as well as automatically set up a points system to allow players to earn points from giving items out.

Administrators can easily monitor who’s handing what with an easy-to-add Basic Admin Essentials plugin, and be also able to see the whole handto history of a player to easily detect point-cheating efforts.

What can this do?

  • Players that meet your group rank requirements will be able to access a UI to enter a player’s username in order to hand them an item
  • Players can use a /give command to hand other players an item from their inventory in the chat
  • If the points system is enabled, the receiver can choose to accept/decline a hand-to request through a simple UI
  • If the points system is enabled, players can check their points value through the leaderboard
  • Players can quickly hand items to the same person again by entering SPACE twice into the UI

With Basic Admin Essentials 2.0,

  • Administrators can track the use of the system throughout the server, if the BAE plugin is set-up
  • Administrators can search the entire Giver history of a single player, if the BAE plugin is set-up
  • Players will receive alerts and confirmation for whether their hand-to requests go through

Steps and scripts to set-up the Basic Admin Essentials plugins are provided.


To install Giver…

Expand on each step for a video demonstration and details! Click here for the model.

Add the model into the Workspace of your game. Open the "Setup & Help" script and modify the variables at the top of the script.

https://create.roblox.com/store/asset/71401410197142/Giver-V1
Setting the Group ID to 0 means that everyone will be able to use the system.

To create a button that opens the UI (mainly for mobile users),

Create a button UI, and in a LocalScript, write a script that fires a BindableEvent. You'll need to script the button yourself, so expand for more details.

Specifically, the script should run game.ReplicatedStorage:WaitForChild("Giver"):WaitForChild("Button"):Fire() when the button is activated. For an example, see the code below for how to create a button to open the Giver UI with TopbarPlus V3:

local Icon = require(game:GetService("ReplicatedStorage").Icon)
local icon = Icon.new()
icon:setLabel("Giver")
icon:align("Right")
icon:oneClick()
icon.selected:Connect(function()
	game.ReplicatedStorage:WaitForChild("Giver"):WaitForChild("Button"):Fire()
end)

The button will simply work as a toggle - the UI will open if it is closed already, and will close if it is open already. The button must be oneClick as there isn’t feedback if the UI is closed another way (such as a request being sent through the UI).

BONUS: Basic Admin Plugins,
Two command are available for you:

  • “history” command for admins to see the amount of points and a user’s full hand-to history
  • “utilitylogs” command to see all Giver interactions within the server
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.

"history"
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 = 'history'
	local pluginPrefix = Prefix
	local pluginLevel = 0
	local pluginUsage = "<User ID>"
	local pluginDescription = "See all Giver usage of the player. Enter the player's ID only - usernames do not work!"
	
	local datastoreS = game:GetService("DataStoreService")
	local playerStore = datastoreS:GetDataStore("playerLogs")
	local pointsStore = datastoreS:GetDataStore("userPoints")
	
	local function getPlayerTable(playerID)
		local playerTable = playerStore:GetAsync(tostring(playerID))
		if playerTable == nil then
			return nil
		end
		return playerTable
	end
	
	local function getPoints(playerID)
		local puser = pointsStore:GetAsync(tostring(playerID))
		if puser == nil then
			return "Player has no points"
		end
		return tostring(puser)
	end
	
	local function pluginFunction(Args) 
		local userId = tonumber(Args[3])
		remoteEvent:FireClient(Args[1],'List','Activity for ' .. Args[3] ,false,true,getPlayerTable(userId)) 
		remoteEvent:FireClient(Args[1],'Message','Number of points for ' .. Args[3] , getPoints(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
"utilitylogs"

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 = 'utilitylogs'
local pluginPrefix = Prefix
local pluginLevel = 0
local pluginUsage = "" 
local pluginDescription = "See all uses of the Giver system in the server."

local function pluginFunction(Args) 
	remoteEvent:FireClient(Args[1],'List','Utility Logs',false,true,_G.GiverLogs) 
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


Development link

A DataStore called userPoints holds the points value as an integer for a user. The key is the user’s ID.


About the project…

The first version of Giver provides an extensive hand-to utility with features that are considered a standard in most modern cafe industry groups. Using r_r’s hand-to system as a starting point, the system features an elegant UI with icons from Flaticon (Send icons created by Amazona Adorada - Flaticon), a points system that could then be expanded on for other systems such as ranking and more.

Giver 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! You’ll have two items in your inventory to test the system with, and you’ll need to be with someone else to test the system itself. To test the Basic admin commands, type :utilitylogs to see the use of the Giver system in the server after you’d tried the system, and then use :history [ID] (try using -1 or -2 test player IDs) to see a save of all the times a user has used the Giver system.

Thank you,
Iralyst :heart: