
Keyless

local RS = game:GetService("ReplicatedStorage")
local CS = game:GetService("CollectionService")
local Players = game:GetService("Players")
local PathfindingService = game:GetService("PathfindingService")
local TablesRE = RS.Packages.Knit.Services.TablesService.RE
local TablesRF = RS.Packages.Knit.Services.TablesService.RF
local LocalPlayer = Players.LocalPlayer
local NumberMap = {}
local BoardMap = {}
local FlippedBoards = {}
local AllBoardIDs = {}
local TriedBoards = {}
local CurrentTableID = nil
local NextNumber = 1
local IsSubmitting = false
local LastSubmittedBoardID = nil
local AutoLobbyEnabled = true
local IsSeated = false
local function FindOpenTable()
local BestTable = nil
local BestDistance = math.huge
local HumanoidRootPart = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart")
if not HumanoidRootPart then return nil end
for _, T in CS:GetTagged("Table") do
local Seats = T:FindFirstChild("Seats")
if not Seats then continue end
local OccupiedCount = 0
local EmptySeat = nil
for _, S in Seats:GetChildren() do
if S:IsA("Seat") then
if S.Occupant then
OccupiedCount = OccupiedCount + 1
else
EmptySeat = S
end
end
end
if OccupiedCount == 1 and EmptySeat then
local Dist = (EmptySeat.Position - HumanoidRootPart.Position).Magnitude
if Dist < BestDistance then
BestDistance = Dist
BestTable = EmptySeat
end
end
end
if not BestTable then
for _, T in CS:GetTagged("Table") do
local Seats = T:FindFirstChild("Seats")
if not Seats then continue end
local OccupiedCount = 0
local EmptySeat = nil
for _, S in Seats:GetChildren() do
if S:IsA("Seat") then
if S.Occupant then
OccupiedCount = OccupiedCount + 1
else
EmptySeat = S
end
end
end
if OccupiedCount == 0 and EmptySeat then
local Dist = (EmptySeat.Position - HumanoidRootPart.Position).Magnitude
if Dist < BestDistance then
BestDistance = Dist
BestTable = EmptySeat
end
end
end
end
return BestTable
end
local function IsSeatStillValid(Seat)
if not Seat or not Seat.Parent then return false end
if Seat.Occupant then return false end
local PP = Seat:FindFirstChildOfClass("ProximityPrompt")
if PP and not PP.Enabled then return false end
return true
end
local function WalkToSeat(Seat)
local Character = LocalPlayer.Character
if not Character then return false end
local Humanoid = Character:FindFirstChildOfClass("Humanoid")
local HumanoidRootPart = Character:FindFirstChild("HumanoidRootPart")
if not Humanoid or not HumanoidRootPart then return false end
if not IsSeatStillValid(Seat) then return false end
local Path = PathfindingService:CreatePath({
AgentRadius = 2,
AgentHeight = 5,
AgentCanJump = true,
AgentCanClimb = false,
})
local Success, Err = nil, nil
Success, Err = xpcall(function()
Path:ComputeAsync(HumanoidRootPart.Position, Seat.Position)
end, function(E) return E end)
if not Success then return false end
if Path.Status ~= Enum.PathStatus.Success then return false end
local Waypoints = Path:GetWaypoints()
for _, Waypoint in Waypoints do
if not AutoLobbyEnabled or IsSeated then return false end
if not IsSeatStillValid(Seat) then
Humanoid:MoveTo(HumanoidRootPart.Position)
return false
end
Humanoid:MoveTo(Waypoint.Position)
if Waypoint.Action == Enum.PathWaypointAction.Jump then
Humanoid.Jump = true
end
local Reached = Humanoid.MoveToFinished:Wait()
if not Reached then return false end
end
if not IsSeatStillValid(Seat) then return false end
return true
end
local function FireProximityPrompt(Seat)
local PP = Seat:FindFirstChildOfClass("ProximityPrompt")
if not PP then return false end
if not PP.Enabled then return false end
PP.HoldDuration = 0
if fireproximityprompt then
fireproximityprompt(PP)
else
PP:InputHoldBegin()
task.wait(0.1)
PP:InputHoldEnd()
end
return true
end
local function AutoLobbyLoop()
while AutoLobbyEnabled do
if not IsSeated then
local Seat = FindOpenTable()
if Seat then
local Arrived = WalkToSeat(Seat)
if Arrived and not IsSeated and IsSeatStillValid(Seat) then
task.wait(0.3)
if IsSeatStillValid(Seat) then
local Fired = FireProximityPrompt(Seat)
if not Fired and IsSeatStillValid(Seat) then
local Character = LocalPlayer.Character
local Humanoid = Character and Character:FindFirstChildOfClass("Humanoid")
if Humanoid then
Humanoid:MoveTo(Seat.Position)
Humanoid.MoveToFinished:Wait()
task.wait(0.3)
if IsSeatStillValid(Seat) then
FireProximityPrompt(Seat)
end
end
end
end
task.wait(2)
end
end
end
task.wait(0.5)
end
end
local function GetAllBoardIDs()
AllBoardIDs = {}
for _, T in CS:GetTagged("Table") do
if T:GetAttribute("ID") == CurrentTableID then
local Boards = T:FindFirstChild("Boards")
if Boards then
for _, B in Boards:GetChildren() do
if B:IsA("Model") then
local BID = B:GetAttribute("ID")
if BID then
table.insert(AllBoardIDs, BID)
end
end
end
end
break
end
end
end
local function GetUnknownBoard()
for _, BID in AllBoardIDs do
if not BoardMap[BID] and not FlippedBoards[BID] and not TriedBoards[BID] then
return BID
end
end
return nil
end
local function ResetState()
IsSeated = false
CurrentTableID = nil
NumberMap = {}
BoardMap = {}
FlippedBoards = {}
AllBoardIDs = {}
TriedBoards = {}
NextNumber = 1
IsSubmitting = false
end
TablesRE.OnBoardFlip.OnClientEvent:Connect(function(Data)
if not Data or not Data.Model or not Data.Number then return end
local BID = Data.Model:GetAttribute("ID")
if not BID then return end
NumberMap[Data.Number] = BID
BoardMap[BID] = Data.Number
end)
TablesRE.OnBoardsReset.OnClientEvent:Connect(function()
NextNumber = 1
FlippedBoards = {}
TriedBoards = {}
IsSubmitting = false
end)
TablesRE.OnPickedBoard.OnClientEvent:Connect(function(Correct)
IsSubmitting = false
if Correct then
local BID = NumberMap[NextNumber]
if not BID and LastSubmittedBoardID then
BID = LastSubmittedBoardID
NumberMap[NextNumber] = BID
BoardMap[BID] = NextNumber
end
if BID then
FlippedBoards[BID] = true
end
NextNumber = NextNumber + 1
end
end)
TablesRE.OnPickTurn.OnClientEvent:Connect(function(TableID)
if TableID and type(TableID) == "string" then
CurrentTableID = TableID
end
if not CurrentTableID then return end
if IsSubmitting then return end
if #AllBoardIDs == 0 then
GetAllBoardIDs()
end
task.wait(0.2)
local BoardID = NumberMap[NextNumber]
if not BoardID then
BoardID = GetUnknownBoard()
end
if not BoardID then
TriedBoards = {}
BoardID = GetUnknownBoard()
end
if BoardID then
IsSubmitting = true
LastSubmittedBoardID = BoardID
TriedBoards[BoardID] = true
task.spawn(function()
TablesRF.OnPicked:InvokeServer(CurrentTableID, BoardID)
end)
end
end)
TablesRE.OnPickStopped.OnClientEvent:Connect(function()
IsSubmitting = false
end)
TablesRE.OnPlayerSeated.OnClientEvent:Connect(function()
IsSeated = true
end)
TablesRE.OnMatchEnded.OnClientEvent:Connect(function()
IsSubmitting = false
task.wait(3)
ResetState()
end)
TablesRE.OnLose.OnClientEvent:Connect(function()
IsSubmitting = false
task.wait(3)
ResetState()
end)
TablesRE.OnVictory.OnClientEvent:Connect(function()
IsSubmitting = false
task.wait(3)
ResetState()
end)
TablesRE.OnPlayerUnSeated.OnClientEvent:Connect(function()
ResetState()
end)
LocalPlayer.CharacterAdded:Connect(function(Character)
ResetState()
Character:WaitForChild("HumanoidRootPart")
Character:WaitForChild("Humanoid")
task.wait(1)
end)
task.spawn(AutoLobbyLoop)
MT bom.
10/10
more auto play
plss
More auto play script
@helloimgregory89 what game
@binary https://www.roblox.com/games/111542623898793/Stick-Drop