Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

Help with plot selection system and spawning/teleporting?

Asked by 3 years ago

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

Log in to vote
0
Answered by 3 years ago

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
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 xx_iamwierd 4 — 3y
Ad

Answer this question