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

What can I use instead of player.Team?

Asked by 5 years ago
Edited 5 years ago

I made a code which would teleport the players in their respective spawns (which are just parts with the SpawnLocation decal to decrease suspicion) when the round starts and the code looks like this:

local function TeleportAPlayer(player)
    if player.Team == "Red Team" then
        game:GetService("Players").LocalPlayer.Character.HumanoidRootPart.CFrame = CFrame.new(Vector3.new(61, 1, -11078))
    end

    if player.Team == "Green Team" then
        game:GetService("Players").LocalPlayer.Character.HumanoidRootPart.CFrame = CFrame.new(Vector3.new(-61, 1, -11077))
    end

    if player.Team == "Blue Team" then
        game:GetService("Players").LocalPlayer.Character.HumanoidRootPart.CFrame = CFrame.new(Vector3.new(61, 1, -11199))
    end

    if player.Team == "Yellow Team" then
        game:GetService("Players").LocalPlayer.Character.HumanoidRootPart.CFrame = CFrame.new(Vector3.new(-61, 1, -11199))
    end
end

What can I use instead of player.Team (because it is only a server-side script)?

0
oops, forgot, use .Name after the Team since you're using a string SerpentineKing 3885 — 5y

2 answers

Log in to vote
0
Answered by 5 years ago

"What can I use instead of player.Team (because it is only a server-side script)?" You are using LocalPlayer which is only usable in a local script (as there will only ever be one local player).

You can simplifly this code a lot by using a table to store the key and value. The index the table using the key to get the CFrame value.

When creating a CFrame with just the x,y,z you do not need to create a Vector3 as there is a constructor for CFrame.new(x,y,z).

Example

local spawns = {
    ["Red Team"] = CFrame.new(61, 1, -11078),
    -- ect....
}

print(spawns["Red Team"])

The second issue would be down to using player.Team == "Yellow Team" player.Team is the Team instance and will not be true in any case ie instance == string. To resolve this use the Name of the team or the BrickColor.

Example

local spawns = {
    ["Red Team"] = CFrame.new(61, 1, -11078),
    -- ect....
}

local function TeleportAPlayer(player)
    -- you should include the correct validation before running the code
    -- ie does the player have a character, humanoid root part and a team that is in the list

    player.Character.HumanoidRootPart.CFrame = spawns[player.Team.Name]
end

I hope this helps. please comment if you have any other questions.

0
But how can I do a validation script like you told me to? BleepoBleapo 2 — 5y
0
You would need to check that player.Character is not nil and that player.Character:FindFirstChild("HumanoidRootPart") is not nil as well User#5423 17 — 5y
0
spawns[player.Team.Name] will also be nil if the index has no value (not found in the table) User#5423 17 — 5y
Ad
Log in to vote
-1
Answered by 5 years ago
Edited 5 years ago

Since this is all server-side, you could call the player from the PlayerAdded Event of the Service Players and continue to use the player.Team

You also don't require all of the the separate if-then statements (use elseif)

If you change the team color from some neutral color, you can use the :GetPropertyChangedSignal() Event to check the player's team and then spawn them

Also, use "SetPrimaryPartCFrame()" since calling the HumanoidRootPart specifically may only move the RootPart and not the whole Character in some instances.

Server Script

game:GetService("Players").PlayerAdded:Connect(function(player)
    player:GetPropertyChangedSignal("Team"):Connect(function()
        if player.Team.Name == "Red Team" then
            player.Character:SetPrimaryPartCFrame(CFrame.new(61, 1, -11078)))
        elseif player.Team.Name == "Green Team" then
            player.Character:SetPrimaryPartCFrame(CFrame.new(-61, 1, -11077)))
        elseif player.Team.Name == "Blue Team" then
            player.Character:SetPrimaryPartCFrame(CFrame.new(61, 1, -11199)))
        elseif player.Team.Name == "Yellow Team" then
            player.Character:SetPrimaryPartCFrame(CFrame.new(-61, 1, -11199)))
        end
    end)
end)

Another option instead of using the CFrame of the part, is to simply use the :LoadCharacter() Function of a Player, but only if the "Part with a SpawnDecal" is an actual Spawn

LoadCharacter Example

game:GetService("Players").PlayerAdded:Connect(function(player)
    player:GetPropertyChangedSignal("Team"):Connect(function()
        player:LoadCharacter()
    end)
end)

In order to use: :GetPropertyChangedSignal("Team") you will need to make sure to change the player's Team via another function.

Edit: Use "player.Team.Name" instead of "player.Team"

0
Thank you and no it isn't a classic spawn. BleepoBleapo 2 — 5y
0
1st you should be using a table, 2nd player.Team == "Green Team" will not work. It is an Team instance not a string ugh -1 User#5423 17 — 5y
0
ughhhhhhhhh UGHHHHH EXpodo1234ALT 18 — 5y
0
But can this fire when an event is fired? BleepoBleapo 2 — 5y

Answer this question