Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
COMMUNITY QUESTION

I amde a Gate and You Need a Shirt to Pass it , How can I make it so I need A Tool?

--[[
	
	boardingHandler
	@author Jhxan	
	
--]]
math.randomseed(tick())

--> variables
local rf = game:GetService("ReplicatedStorage"):WaitForChild("boardingRF")
local re = game:GetService("ReplicatedStorage"):WaitForChild("boardingRE")
local httpKey = "key-"..math.random(1, 345894)

local scanners = {}
local onStatuses = {}

local ecShirtId = 0
local bcShirtId = 0
local fcShirtId = 0


--> functions

local function getScanners()
	for i,instance in pairs(game:GetService("Workspace"):GetDescendants()) do
		if instance.Name == "boardingSystem" and instance:IsA("Model") then
			table.insert(scanners, instance)
		end
	end
end

local function setStatuses()
	for i,scanner in pairs(scanners) do
		local data = {
			model = scanner;
			ecOn = false;
			bcOn = false;
			fcOn = false;
		}
		table.insert(onStatuses, data)
	end
end

local function setStatus(name, value, model)
	for i,status in pairs(onStatuses) do
		if status.model == model then
			status[name] = value
			print("set status: "..tostring(name).. " | " ..tostring(value))
		end
	end
end

local function getStatuses(model)
	for i,status in pairs(onStatuses) do
		if status.model == model then
			return status
		end
	end
end

local function ownsClass(usr, class)
	if class == "EC" then
		if ecShirtId ~= 0 then
			return game:GetService("MarketplaceService"):PlayerOwnsAsset(usr, ecShirtId)
		else
			return true
		end
	end
	
	if class == "BC" then
		if bcShirtId ~= 0 then
			return game:GetService("MarketplaceService"):PlayerOwnsAsset(usr, bcShirtId)
		else
			return true
		end
	end
	
	
	if class == "FC" then
		if fcShirtId ~= 0 then
			return game:GetService("MarketplaceService"):PlayerOwnsAsset(usr, fcShirtId)
		else
			return true
		end
	end
	
end

local function toggleScanners(scanner, value)
	if value == true then
		-- open scanners
		scanner:WaitForChild("leftOpener").CanCollide = false
		scanner:WaitForChild("rightOpener").CanCollide = false
		scanner:WaitForChild("leftOpener").Transparency = 1
		scanner:WaitForChild("rightOpener").Transparency = 1
	else
		-- close scanners
			scanner:WaitForChild("leftOpener").CanCollide = true
		scanner:WaitForChild("rightOpener").CanCollide = true
		scanner:WaitForChild("leftOpener").Transparency = 0
		scanner:WaitForChild("rightOpener").Transparency = 0
	end
end

local function setupScanners()
	for i,scanner in pairs(scanners) do
		scanner:WaitForChild("detectPart").Touched:connect(function(part)
			local hum = part.Parent:FindFirstChild("Humanoid")
			if hum then
				local plr = game:GetService("Players"):GetPlayerFromCharacter(part.Parent)
				if plr then
					-- is plr
					local model = scanner
					local currentStatus = getStatuses(model)
					if currentStatus.ecOn == true then
						-- ec open
						if ownsClass(plr, "EC") then
							toggleScanners(scanner, true)
							wait(0.5) -- wait 0.5 seconds
							toggleScanners(scanner, false)
						end
					end
					
					if currentStatus.bcOn == true then
						-- bc open
						if ownsClass(plr, "BC") then
							toggleScanners(scanner, true)
							wait(0.5) -- wait 0.5 seconds
							toggleScanners(scanner, false)
						end
					end
					
						if currentStatus.fcOn == true then
						-- fc open
						if ownsClass(plr, "FC") then
							toggleScanners(scanner, true)
							wait(0.5) -- wait 0.5 seconds
							toggleScanners(scanner, false)
						end
					end
					
				end
			end
		end)
	end
end

--> events
rf.OnServerInvoke = function(usr, event, key, ...)
	local args = {...}
	
	-- key not required
	if event == "getKey" then
		return httpKey
	end
	
	if event == "getBoardingStatus" then
		return getStatuses(args[1])
	end
	
	if event == "setBoardingStatus" then
		setStatus(args[1], args[2], args[3])
	end
	
	
	
	-- key required
	if key == httpKey then
	else
		usr:Kick("evm")
	end
		
end

--> scripting
getScanners()
setStatuses()
setupScanners()

Also , The Gate also got a Screen where you can activate the Classes FC , BC , EC

1 answer

Try this:

while game:WaitForChild(game.Workspace.boardingSystem) do
	local p = game.Players:GetPlayerFromCharacter(game.Workspace.boardingSystem)
	if p then
		if p.Backpack:FindFirstChildWhichIsA("Tool") ~= nil then
			game.Workspace.boardingSystem.CanCollide = false
		end
	end
	wait()
end

Put it at line 89 in your code and see if it works.

This discussion is preserved as it was. New answers, comments, and votes are closed.