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

How to Make A Script That Teleport All Players To Different Positions?

Asked by 10 years ago

Like In Hunger Games

Pos1 = Vector3.new(-48, 4.5, -108.6)
Pos2 = Vector3.new(-49, 4.5, -108.6)
Pos3 = Vector3.new(-50, 4.5, -108.6)
Pos4 = Vector3.new(-8, 4.5, -108.6)
Pos5 = Vector3.new(-18, 4.5, -108.6)
for i,v in pairs(game.Players:GetPlayers())do
game.Players:GetPlayers()[i].Character:MoveTo(Pos1,Pos2,Pos3,Pos4,Pos5)
end
end
0
Teleport All Players To Different Positions Each One felipeblox10 5 — 10y

3 answers

Log in to vote
0
Answered by 10 years ago

Let me start off by thanking you for at least attempting to make it.

Next, you should put all your positions into a table:

pos = {-48, -49, -50, -8, -18} -- I'm just changing the x value since you don't look like you need to change the others.

Now with this we can iterate, or in other words move through, the table along with the players to assign them each their own spots.

Here you can see the iteration:

for _,v in pairs(game.Players:GetPlayers()) do
    v.Character:MoveTo(Vector3.new(pos[_], 4.5, -108.6));
end

I changed a couple things around with your script. One was getting the player. When you use in pairs to get the players, you do not need to get another table of the players a second time. The v represents the player that it is currently on so you can simply use that.

Next is that the :MoveTo method uses a single Vector3 value. So you can not put the multiple values like you did.

If you have any questions, please comment.

Ad
Log in to vote
0
Answered by 10 years ago

What? What does this means? You can't pass a loop value in another loop value, that's the "pairs" and "ipairs" rules, and those floating pos1-5 variables? Not even in a table? And what about this: .Character:MoveTo(Pos1,Pos2,Pos3,Pos4,Pos5) o.o

What you need to do is, first make a table which contains every position, define it like this

Pos1 = Vector3.new(-48, 4.5, -108.6)
Pos2 = Vector3.new(-49, 4.5, -108.6)
Pos3 = Vector3.new(-50, 4.5, -108.6)
Pos4 = Vector3.new(-8, 4.5, -108.6)
Pos5 = Vector3.new(-18, 4.5, -108.6)
local spawns = {Pos1, Pos2, Pos3, Pos4, Pos5}

Now you need to create the function, I don't know where to be called because I don't know your intentions, that's all your own:

function spawnPlayers()
    local passedPlayers = 0
    for _, player in pairs(game.Players:GetChildren()) do
        -- This is the main rule: 1 player = 1 spawn, this means that each player has 1 spawn, so if there are 5 spawns, the max recommended player would be 5 or they will overlap each one
        player.Position = #spawns - passedPlayer
        passedPlayers = passedPlayers + 1 -- I'm out of idea, I'm tired
    end
end

That should work, this means that each player will be spawned in each spawn, as the rule says: 1 player = 1 spawn =)

Ps: I'm tired, the passedPlayers part may not work!

0
This won't work. All the players will be at the last spawn location. PiggyJingles 358 — 10y
0
I saw, I'm tired that's why, I'm editing it now alessandro112 161 — 10y
Log in to vote
0
Answered by 10 years ago

Here is how I'd write this (commented for explanation):

-- This function takes in a list of players and positions to teleport them to
-- If #players > #positions, the positions are looped around
-- This function was used so that it's easy to reuse
local function teleportPlayersToPositionsInOrder(players, positions)
    -- Keep track of where we are in the positions table
    local positionIndex = 1;

    -- Iterate through each player
    for playerIndex = 1, #players, 1 do
        local player = players[playerIndex];

        -- Require that the player exists
        if (player and player.Character and player.Character:findFirstChild("Torso")) then
            -- Teleport the player to the position
            player.Character:MoveTo(positions[positionIndex]);

            -- Go to the next position using modulo to loop around
            positionIndex = (positionIndex % #positions) + 1;
        end
    end
end



-- The list of positions to teleport to
-- It would be more efficient to store these as just a multidimensional array, rather than Vector3 objects
local positions = {
    Vector3.new(-48, 4.5, -108.6),
    Vector3.new(-49, 4.5, -108.6),
    Vector3.new(-50, 4.5, -108.6),
    Vector3.new(-8, 4.5, -108.6),
    Vector3.new(-18, 4.5, -108.6)
};

-- Call the function with all the players in the game
teleportPlayersToPositionsInOrder(game.Players:GetPlayers(), positions);

Answer this question