-- Input handling userInputService.InputChanged:Connect(function(input) if not isViewing then return end if input.UserInputType == Enum.UserInputType.MouseMovement then local delta = userInputService:GetMouseDelta() orbitYaw = orbitYaw - delta.X * rotateSpeed orbitPitch = math.clamp(orbitPitch - delta.Y * rotateSpeed, 5, 80) updateCameraPosition() elseif input.UserInputType == Enum.UserInputType.MouseWheel then orbitDistance = math.clamp(orbitDistance - input.Position.Z * zoomSpeed, 3, 20) updateCameraPosition() end end)
local ReplicatedStorage = game:GetService("ReplicatedStorage") local buyEvent = Instance.new("RemoteEvent", ReplicatedStorage) buyEvent.Name = "BuyCar" buyEvent.OnServerEvent:Connect(function(player, carName) local data = player:FindFirstChild("leaderstats") if data and data.Cash.Value >= carPrice then data.Cash.Value = data.Cash.Value - carPrice -- Give car to player (e.g., spawn vehicle or add to garage) local car = game.ReplicatedStorage.CarModels:FindFirstChild(carName):Clone() car.Parent = player:FindFirstChild("Garage") end end) (inside DealerPart) Detects player and activates camera view.
-- Camera settings local orbitDistance = 10 local orbitYaw = 0 local orbitPitch = 20 local zoomSpeed = 1 local rotateSpeed = 0.5
script.Parent.Exit.MouseButton1Click:Connect(exitView) (inside a ServerScript) Handles purchases and car ownership.
local player = game.Players.LocalPlayer local camera = workspace.CurrentCamera local userInputService = game:GetService("UserInputService") local currentCar = nil local currentCameraPart = nil local isViewing = false
-- Update camera position based on orbit angles local function updateCameraPosition() if not currentCameraPart then return end local radYaw = math.rad(orbitYaw) local radPitch = math.rad(orbitPitch) local offset = Vector3.new( math.cos(radYaw) * math.cos(radPitch) * orbitDistance, math.sin(radPitch) * orbitDistance, math.sin(radYaw) * math.cos(radPitch) * orbitDistance ) camera.CFrame = CFrame.new(currentCameraPart.Position + offset, currentCameraPart.Position) end
isViewing = true camera.CameraType = Enum.CameraType.Scriptable updateCameraPosition() end
-- Function to switch camera to a car local function switchToCar(carModel) currentCar = carModel currentCameraPart = carModel:FindFirstChild("CameraPart") or carModel.PrimaryPart if not currentCameraPart then return end
-- UI Button connections (example) script.Parent.Buy.MouseButton1Click:Connect(function() if currentCar then -- RemoteEvent to server for purchase game.ReplicatedStorage.BuyCar:FireServer(currentCar.Name) exitView() end end)
-- Exit view local function exitView() isViewing = false camera.CameraType = Enum.CameraType.Custom -- Teleport player back to dealer entrance player.Character.HumanoidRootPart.CFrame = workspace.DealerExit.CFrame end