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

Getting character from Server script?

Today I was making a Normal Elevator type game and I want to teleport players back into the elevator in a server script so they don't fall out but if I try player added the script will do it as many times as how many players are in the game, Can someone help?

Here's my code

-- Variables
local elevatorFolder = workspace:WaitForChild("Elevator")
local elevator = workspace:WaitForChild("Elevator"):WaitForChild("Elevator")
local replicatedStorage = game:GetService("ReplicatedStorage")
local floorsFolder = replicatedStorage:WaitForChild("Floors")
local floors = floorsFolder:GetChildren()
local AvailableMusic = workspace:WaitForChild("ElevatorMusic"):GetChildren()
local randomMusic = AvailableMusic[math.random(1,#AvailableMusic)]
open = false
door1 = elevatorFolder:WaitForChild("Door1")
door2 = elevatorFolder:WaitForChild("Door2")

local TweenService = game:GetService("TweenService")

local tweenInfo = TweenInfo.new(2,Enum.EasingStyle.Linear,Enum.EasingDirection.Out,0,false,0)

local Door1Open = {CFrame = door1.CFrame + door1.CFrame.lookVector * 4}
local Door2Open = {CFrame = door2.CFrame + door2.CFrame.lookVector * 4}
local Door1Close = {CFrame = door1.CFrame}
local Door2Close = {CFrame = door2.CFrame}

local Open1 = TweenService:Create(door1,tweenInfo,Door1Open)
local Open2 = TweenService:Create(door2,tweenInfo,Door2Open)
local Close1 = TweenService:Create(door1,tweenInfo,Door1Close)
local Close2 = TweenService:Create(door2,tweenInfo,Door2Close)

game.Players.PlayerAdded:Connect(function(player)
	player.CharacterAdded:Connect(function(char)

	local function openDoors()
		if open == false then
			Open1:Play()
			Open2:Play()
			wait(2)
			open = true
		end
	end
		
	local function closeDoors()
		if open == true then
			Close1:Play()
			Close2:Play()
			wait(2)
			open = false
		end
	end
		
		
	while true do
		randomMusic:Play()
		wait(14)
		randomMusic:Stop()
		local randomFloor = floors[math.random(1,#floors)]
		local clonedFloor = randomFloor:Clone()
		local timeLimit = clonedFloor:WaitForChild("TimeLimit").Value
		clonedFloor.Parent = workspace
		workspace:WaitForChild("DoorClosing"):Play()
		openDoors()
		wait(timeLimit)
		workspace:WaitForChild("DoorClosing"):Play()
		closeDoors()
		randomMusic:Play()
		clonedFloor:Destroy()
		end
	end)
end)

Can you help me?

2 answers

✓ Accepted answer

Since events create separate- I'd say threads but I'm sure there is another word- every character added starts the elevator. Try this

-- Variables
local elevatorFolder = workspace:WaitForChild("Elevator")
local elevator = workspace:WaitForChild("Elevator"):WaitForChild("Elevator")
local replicatedStorage = game:GetService("ReplicatedStorage")
local floorsFolder = replicatedStorage:WaitForChild("Floors")
local floors = floorsFolder:GetChildren()
local AvailableMusic = workspace:WaitForChild("ElevatorMusic"):GetChildren()
local randomMusic = AvailableMusic[math.random(1,#AvailableMusic)]
open = false
door1 = elevatorFolder:WaitForChild("Door1")
door2 = elevatorFolder:WaitForChild("Door2")

local TweenService = game:GetService("TweenService")

local tweenInfo = TweenInfo.new(2,Enum.EasingStyle.Linear,Enum.EasingDirection.Out,0,false,0)

local Door1Open = {CFrame = door1.CFrame + door1.CFrame.lookVector * 4}
local Door2Open = {CFrame = door2.CFrame + door2.CFrame.lookVector * 4}
local Door1Close = {CFrame = door1.CFrame}
local Door2Close = {CFrame = door2.CFrame}

local Open1 = TweenService:Create(door1,tweenInfo,Door1Open)
local Open2 = TweenService:Create(door2,tweenInfo,Door2Open)
local Close1 = TweenService:Create(door1,tweenInfo,Door1Close)
local Close2 = TweenService:Create(door2,tweenInfo,Door2Close)

 local function openDoors()
        if open == false then
            Open1:Play()
            Open2:Play()
            wait(2)
            open = true
        end
    end

    local function closeDoors()
        if open == true then
            Close1:Play()
            Close2:Play()
            wait(2)
            open = false
        end
    end


    while true do
        randomMusic:Play()
        wait(14)
        randomMusic:Stop()
        local randomFloor = floors[math.random(1,#floors)]
        local clonedFloor = randomFloor:Clone()
        local timeLimit = clonedFloor:WaitForChild("TimeLimit").Value
        clonedFloor.Parent = workspace
        workspace:WaitForChild("DoorClosing"):Play()
        openDoors()
        wait(timeLimit)
        workspace:WaitForChild("DoorClosing"):Play()
        closeDoors()
        randomMusic:Play()
        clonedFloor:Destroy()
	for i,v in pairs(game.Players:GetChildren()) do
		v.Character:MoveTo([Your elevator position as Vector3])
	end
      end


Hi, this is where we use a for i,v loop.

for index,player in pairs(players:GetChildren()) do
	if player.Character then
		-- do stuff
	end
end

It goes through all the players and does whatever you need them to.

I'm not going to edit your code however, so I hope you can adjust it to fit yours.

1 comment

0

The other anwser got accepted too but this helped me too thanks!

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