Help Needed on Bus Mechanic!

This is a very basic problem. I am currently developing a game like Camping. I am making an entering bus mechanic and exiting bus mechanic. I have completed the mechanic. It was a basic CFrame and Vector3 incorporation.

-Enter Bus: The script is a server script. Once a player step on a designated area, a gui tweens onto screen.

-Gui(Issue): Once it’s clicked, it respawns the character and tweens back.

Once the player tries stepping on the designated area once more, the gui doesn’t tween on screen. I have used ‘if then’ statements but nothing seems to be working. The goal of the script is to make the gui appear everytime the player steps on the designated area.

2 Likes

Please provide the code that opens and closes the GUI, also check if the ResetOnSpawn property of the ScreenGui is set to true.

Touched Script:

local part = script.Parent
local exitgui = script.Parent[“RespawnGui”]

part.Touched:connect(function(hit)
if hit and hit.Parent:findFirstChild(“Humanoid”) then
local plr = game:GetService(“Players”):GetPlayerFromCharacter(hit.Parent)
if not plr:WaitForChild(“PlayerGui”):findFirstChild(“RespawnGui”) then
exitgui:Clone().Parent = plr.PlayerGui
exitgui.Frame:TweenPosition(UDim2.new(0, 373,0, 89))
elseif
exitgui.Frame.Position == {0.363, 0,5, 0} then
exitgui.Frame:TweenPosition(UDim2.new(0, 373,0, 89))
end
end
wait()
end)


GUI Script:

local plr = game:GetService(“Players”).LocalPlayer

local spawns = workspace.SpawnLocation

script.Parent.MouseButton1Click:Connect(function()

plr.Character.HumanoidRootPart.CFrame = spawns.CFrame + Vector3.new(0,5,0)

script.Parent.Parent:TweenPosition(UDim2.new(0.363, 0,5, 0))

print(“Fired”)

end)

The property is set to true. Is it the fact that it’s a local script? I can do :LoadCharacter with a server script, however, I want to do it locally.

Formatted

local part = script.Parent
local exitgui = script.Parent[“RespawnGui”]

part.Touched:connect(function(hit)
    if hit and hit.Parent:findFirstChild(“Humanoid”) then
        local plr = game:GetService(“Players”):GetPlayerFromCharacter(hit.Parent)
            if not plr:WaitForChild(“PlayerGui”):findFirstChild(“RespawnGui”) then
                exitgui:Clone().Parent = plr.PlayerGui
                exitgui.Frame:TweenPosition(UDim2.new(0, 373,0, 89))
            elseif exitgui.Frame.Position == {0.363, 0,5, 0} then
                exitgui.Frame:TweenPosition(UDim2.new(0, 373,0, 89))
            end
        end
    wait()
end)
local plr = game:GetService(“Players”).LocalPlayer
local spawns = workspace.SpawnLocation

script.Parent.MouseButton1Click:Connect(function()
    plr.Character.HumanoidRootPart.CFrame = spawns.CFrame + Vector3.new(0,5,0)
    script.Parent.Parent:TweenPosition(UDim2.new(0.363, 0,5, 0))
    print(“Fired”)
end)

If I’m understanding the issue properly, your exitgui is no longer a valid reference because the character would have already died by the time you use that. Turn off the ResetOnSpawn property and see if that solves your issue.

Another concern is formatting your code proeperly on the forum, please read this post on how to create code snippets/blocks on the forum.

I’m surprised the script didn’t work. I turned the property off, however, it won’t tween back on screen.

Hmm, sorry I missed some things, I haven’t gotten a lot of sleep.

I fixed up your code a bit:

ServerScript:

local PlayersService = game:GetService("Players")
local Part = script.Parent
local ExitScreen = script.Parent:WaitForChild("RespawnGui")

local function OnTouched(Hit)
    if Hit.Parent:FindFirstChild("Humanoid") then
        local Player = PlayersService:GetPlayerFromCharacter(Hit)
        if not Player:WaitForChild("PlayerGui"):FindFirstChild("RespawnGui") then
            ExitScreen:Clone().Parent = Player.PlayerGui
            ExitScreen.Frame:TweenPosition(UDim2.new(0, 373,0, 89))
        else
            exitgui.Frame:TweenPosition(UDim2.new(0, 373,0, 89))
        end
    end
end

Part.Touched:Connect(OnTouched)

The code still has the same result. I might just try a different approach.