Hi, I have successfully made a plot selection system for my game. I am now trying to make the player teleport to the selected plots but I have no idea what to do. This is my code so far.
local TweenService = game:GetService("TweenService") local player = game.Players.LocalPlayer local Camera = game.Workspace.Camera local PlotSelect = script.Parent:WaitForChild("PlotSelect") local Frame = PlotSelect:WaitForChild("Frame") local Left = Frame:WaitForChild("Left") local Right = Frame:WaitForChild("Right") local Select = Frame:WaitForChild("Select") local SelectedPlot = Frame:WaitForChild("SelectedPlot") local Menu = script.Parent:WaitForChild("MainMenuGui") local Menubg = Menu:WaitForChild("MainMenuBackground") local Playbutton = Menubg:WaitForChild("PlayButton") local player = game.Players.LocalPlayer local character = game.Players.LocalPlayer.Character local humanoid = character:WaitForChild("Humanoid") local humanoidRootPart = character:WaitForChild("HumanoidRootPart") continuescript = false local Plots = game.Workspace.Plots local Spawns = game.Workspace.Spawns Camera.CameraType = Enum.CameraType.Scriptable local function findUnoccupiedPlots() local availablePlots = {} for i, plot in pairs(Plots:GetChildren()) do if plot.Occupant.Value == nil then table.insert(availablePlots,plot) end end return availablePlots end local TI = TweenInfo.new( 0.5, Enum.EasingStyle.Quint, Enum.EasingDirection.InOut, 0, false, 0 ) local tweenInfo1 = TweenInfo.new( 1.5, Enum.EasingStyle.Back, Enum.EasingDirection.InOut ) local tween1 = TweenService:Create(Frame, tweenInfo1, {Position = UDim2.new(0.5, 0, 0.8, 0)}) local tween2 = TweenService:Create(Frame, tweenInfo1, {Position = UDim2.new(1.5, 0, 0.8, 0)}) Playbutton.MouseButton1Click:Connect(function() wait(3) continuescript = true end) repeat wait() until continuescript == true tween1:Play() local function camTween(plot) local cf = CFrame.new(plot.Position+Vector3.new(0,230,0),plot.Position) local tween = TweenService:Create(game.Workspace.Camera,TI,{CFrame = cf}) tween:Play() end local plotsTable = findUnoccupiedPlots() local index = 1 SelectedPlot.Value = plotsTable[index] camTween(SelectedPlot.Value) Left.MouseButton1Click:Connect(function() if Plots:FindFirstChild("Plot"..index-1) then index -= 1 else index = 12 end SelectedPlot.Value = plotsTable[index] camTween(plotsTable[index]) end) Right.MouseButton1Click:Connect(function() if Plots:FindFirstChild("Plot"..index+1) then index += 1 else index = 1 end SelectedPlot.Value = plotsTable[index] camTween(plotsTable[index]) end) Select.MouseButton1Click:Connect(function() local result = game.ReplicatedStorage.RequestPlot:InvokeServer(plotsTable[index]) if result then Select.Text = ("Success") else Select.Text = ("Error") end tween2:Play() Camera.CameraType = Enum.CameraType.Custom PlotSelect.Enabled = false SelectedPlot.Value = nil end) game.Players.PlayerRemoving:Connect(function(player) end)
The spawns are parts that I put at the centre of the plots. Please help me as I have no idea what to do.
Can I ask why you defined the local player twice? I'll asume it's a mistake and move on.
Teleporting player characters is easy. You just need to teleport the HumanoidRootPart
which is linked and joined to the entire rig of the player character, to the plot position. You could teleport using Vector3
(ignores if the teleport area is within a part) or CFrame
(teleports the character to the nearest available free space if the teleport area is blocked). I'll use Vector3
for preference reasons.
local Player = game:GetService("Players").LocalPlayer local Character = Player.Character or Player.CharacterAdded:Wait() --if player doesn't have a character then yield the script until it does wait(1) --I yield the script because sometimes even after CharacterAdded fires the HRP hasn't fully joined. Don't do this if time matters local HumanoidRootPart = Character:WaitForChild("HumanoidRootPart") local spawn = --define spawn here HumanoidRootPart.Position = spawn.Position