Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
COMMUNITY QUESTION

Help with plot selection system and spawning/teleporting?

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.

1 answer

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

1 comment

0

I have multiple spawn parts because I want the player to teleport to their own plots. I use numbers corresponding to the plot number to identify the correct spawn part. As you can see in my code, I have used index to identify the selected plots. So, I want to do the same for the spawns.  That is where I need some help

This discussion is preserved as it was. New answers, comments, and votes are closed.