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

Can someone help me with this teleport problem?

Asked by 8 years ago

I'm trying to choose two random players to fight and teleport them to the map, but an error occurs. I'm trying to make sure opponent1 and opponent2 are NOT the same person then tele them to the map.

I'm trying to make a 1v1 sword fight game

The error: ServerScriptService.Main:44: attempt to index local 'opponent1' (a number value)

Code:

wait()

local players = game.Players:GetPlayers()

local maps = game:GetService("ServerStorage").Maps:GetChildren()

local runningmaps = workspace:WaitForChild("RunningMaps")

function hint(text)
    for i, player in pairs(players) do
        player:WaitForChild("PlayerGui").MainGui.hint.Text = tostring(text)
    end
end

function shout(text)
    for i, player in pairs(players) do
        player:WaitForChild("PlayerGui").MainGui.shout.Text = tostring(text)
    end
end

while true do
    hint("Welcome to Sword Fighting Practice!")
    wait(3)
    hint("Intermission: 15 seconds")
    for i=15,1,-1 do
        hint("Intermission: " ..i.. " seconds")
        if i < 2 then
            hint("Intermission: " ..i.. " second")
        end
        wait(1)
    end
    hint("")
    shout("Choosing a random map...")
    randommap = math.random(1,#maps)
    mapchosen = maps[randommap]
    wait(3)
    shout("Map Chosen: " ..mapchosen.Name)
    wait(3)
    local mapClone = mapchosen:Clone()
    mapClone.Parent = runningmaps
    local opponent1 = math.random(1,#players)
    local opponent2 = math.random(1,#players)
    local spawns = mapClone:WaitForChild("Spawns")
    if opponent1.Name ~= opponent2.Name and opponent2.Name ~= opponent1.Name then -- Error starts here
        for i,v in pairs(opponent1, opponent2) do
            if spawns then
                opponent1.Character:WaitForChild("Torso"):MoveTo(spawns.Position)
            end
        end
    else
        repeat local opponent1 = math.random(1,#players) local opponent2 = math.random(1,#players) wait() until opponent1.Name ~= opponent2.Name and opponent2.Name ~= opponent1.Name 
    end
    --for i,v in pairs()
    wait()
end

1 answer

Log in to vote
3
Answered by 8 years ago

When you define opponents you use math.random which will return a number; to get an actual player object you will need to use players[math.random(1,#players)]. This is because math.random(1,#players) will give a random number from 1 to the number of players. Using players[x] will give you the player object in the position of x.

Ad

Answer this question