--[[
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
