local TweenService = game:GetService("TweenService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local hrp = character:WaitForChild("HumanoidRootPart")
local humanoid = character:WaitForChild("Humanoid")
-- Find Jeep or Camaro
local function isCar(model)
local name = model.Name:lower()
return (name == "jeep" or name == "camaro") and (
model:FindFirstChild("VehicleSeat") or
model:FindFirstChildWhichIsA("VehicleSeat") or
model:FindFirstChild("_Packet") or
model:FindFirstChild("CameraVehicleSeat")
)
end
local function getClosestCar()
local closest, shortest = nil, math.huge
for _, obj in ipairs(workspace:GetDescendants()) do
if obj:IsA("Model") and isCar(obj) then
local part = obj.PrimaryPart or obj:FindFirstChild("PrimaryPart") or obj:FindFirstChildWhichIsA("BasePart")
if part then
local dist = (hrp.Position - part.Position).Magnitude
if dist < shortest then
shortest = dist
closest = obj
end
end
end
end
return closest
end
-- Disable collisions temporarily
local function setNoCollision(state)
for _, part in ipairs(character:GetDescendants()) do
if part:IsA("BasePart") then
part.CanCollide = not state
end
end
end
--Tween character up -> across -> down
local function tweenToCar(carModel)
local targetPart = carModel.PrimaryPart or carModel:FindFirstChild("PrimaryPart") or carModel:FindFirstChildWhichIsA("BasePart")
if not targetPart then return end
setNoCollision(true)
local current = hrp.Position
local midY = 25
-- Up
local upTween = TweenService:Create(hrp, TweenInfo.new(0.4), {CFrame = CFrame.new(current.X, current.Y + midY, current.Z)})
upTween:Play()
upTween.Completed:Wait()
-- Horizontally over car
local horizTween = TweenService:Create(hrp, TweenInfo.new(1), {CFrame = CFrame.new(targetPart.Position.X, current.Y + midY, targetPart.Position.Z)})
horizTween:Play()
horizTween.Completed:Wait()
-- Down above car
local downTween = TweenService:Create(hrp, TweenInfo.new(0.4), {CFrame = CFrame.new(targetPart.Position.X, targetPart.Position.Y + 4, targetPart.Position.Z)})
downTween:Play()
downTween.Completed:Wait()
setNoCollision(false)
end
--Touch seat to try to sit
local function tryTouchSeat(carModel)
local seat = carModel:FindFirstChild("_Packet") or carModel:FindFirstChild("CameraVehicleSeat") or carModel:FindFirstChild("VehicleSeat") or carModel:FindFirstChildWhichIsA("VehicleSeat")
if not seat then
warn("No seat found in car.")
return false
end
firetouchinterest(hrp, seat, 0)
wait(0.1)
firetouchinterest(hrp, seat, 1)
wait(0.5)
if humanoid.SeatPart == seat then
print("Successfully entered car!")
return true
else
warn("Failed to sit in seat.")
return false
end
end
--Spawn Camaro fallback
local function spawnCamaro()
local remote = ReplicatedStorage:WaitForChild("GarageSpawnVehicle", 9e9)
remote:FireServer("Chassis", "Camaro")
end
--Main
local function enterClosestCar()
local car = getClosestCar()
if car then
print("Found car:", car.Name)
tweenToCar(car)
if not tryTouchSeat(car) then
warn("Couldn't get in car. Spawning Camaro.")
spawnCamaro()
end
else
warn("No car found. Spawning Camaro.")
spawnCamaro()
end
end
enterClosestCar()
Cancel
Post