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

Why does this PhysicsService:CollisionGroup script not work?

Asked by 7 years ago

So, I'm making a team based game and decided to make team only doors (Doors that only people on the respective team can use) using the new Collision group. I'm a very new scripter, so to try to understand the concept I followed the ROBLOX wiki example listed in the announcement blog post

The following is all the code from that tutorial for sake of comparison

local PhysicsService = game:GetService("PhysicsService")
local Players = game:GetService("Players")

local redForceField = game.Workspace.RedStartingZone.ForceField
local blueForceField = game.Workspace.BlueStartingZone.ForceField

local redForceFields = "RedForceFields"
local blueForceFields = "BlueForceFields"
local redPlayers = "RedPlayers"
local bluePlayers = "BluePlayers"

PhysicsService:CreateCollisionGroup(redForceFields)
PhysicsService:CreateCollisionGroup(blueForceFields)

PhysicsService:CreateCollisionGroup(redPlayers)
PhysicsService:CreateCollisionGroup(bluePlayers)

PhysicsService:SetPartCollisionGroup(redForceField, redForceFields)
PhysicsService:SetPartCollisionGroup(blueForceField, blueForceFields)

PhysicsService:CollisionGroupSetCollidable(redForceFields, redPlayers, false)
PhysicsService:CollisionGroupSetCollidable(blueForceFields, bluePlayers, false)

local function setCollisionGroupRecursive(object, groupName)
    if object:IsA("BasePart") then
        PhysicsService:SetPartCollisionGroup(object, groupName)
    end
    for _, child in ipairs(object:GetChildren()) do
        setCollisionGroupRecursive(child, groupName)
    end
end

local function onCharacterAdded(character, team)
    local collisionGroupName = team.Name .. "Players"
    setCollisionGroupRecursive(character, collisionGroupName)
end

local function onPlayerAdded(player)
    player.CharacterAdded:Connect(function(character)
        onCharacterAdded(character, player.Team)
    end)
end

Players.PlayerAdded:Connect(onPlayerAdded)

Now I looked over the script for awhile and I'm pretty sure I understand it for the most part. So, I'm pretty sure the things I should change for it to work in my place would be this part:

local redForceField = game.Workspace.RedStartingZone.ForceField
local blueForceField = game.Workspace.BlueStartingZone.ForceField

Also although not needed, changing the following would be the goal, as in the future my teams' names won't be Red and Blue, of course, to test it out I don't care as I just want it to work, so, I have team names simply "Red" And "Blue"

local redPlayers = "RedPlayers"
local bluePlayers = "BluePlayers"

so I tweaked that first part to be

local redForceField = game.Workspace.Rspawnbuilding.RSpawnDoor1 -- I changed this to my team door
local blueForceField = game.Workspace.sy.NeonTbrick -- just a random part cause i dont have a blue base yet, 
--still should work as there still is a blue team and the part is valid

Since It still wasn't working, I decided to add debugging help using print() (note I'm not 100% sure if the print text is the correct terms to be using, but either way, I thought it would indicate at something)

So, the edited code is:

local PhysicsService = game:GetService("PhysicsService")
local Players = game:GetService("Players")

local redForceField = game.Workspace.Rspawnbuilding.RSpawnDoor1 -- I changed this to my team door
local blueForceField = game.Workspace.sy.NeonTbrick -- just a random part cause I don't have a blue base yet, 
--still, should work as there still is a blue team

local redForceFields = "RedForceFields"
local blueForceFields = "BlueForceFields"
local redPlayers = "RedPlayers"
local bluePlayers = "BluePlayers"

PhysicsService:CreateCollisionGroup(redForceFields)
PhysicsService:CreateCollisionGroup(blueForceFields)

PhysicsService:CreateCollisionGroup(redPlayers)
PhysicsService:CreateCollisionGroup(bluePlayers)

PhysicsService:SetPartCollisionGroup(redForceField, redForceFields)
PhysicsService:SetPartCollisionGroup(blueForceField, blueForceFields)

PhysicsService:CollisionGroupSetCollidable(redForceFields, redPlayers, false)
PhysicsService:CollisionGroupSetCollidable(blueForceFields, bluePlayers, false)

local function setCollisionGroupRecursive(object, groupName)
    print("checking for basepart for")
    print(object)
    if object:IsA("BasePart") then
        PhysicsService:SetPartCollisionGroup(object, groupName)
        print("Yes it is a base part")
        print("________")
    else
        print("No it's not a base part")
        print("________")
    end

    for _, child in ipairs(object:GetChildren()) do
        print("~~~~~~~~~~~~~~")
        print("adding child:")
        print(child)
        print(groupName)
        print("~~~~~~~~~~~~~~")
        setCollisionGroupRecursive(child, groupName)
    end
    print("Done with set")
end

local function onCharacterAdded(character, team)
    print("players team is")
    print(team)
    local collisionGroupName = team.Name .. "Players"
    setCollisionGroupRecursive(character, collisionGroupName)
end

local function onPlayerAdded(player)
    print("phase 1 player added")
    player.CharacterAdded:Connect(function(character)
        onCharacterAdded(character, player.Team)
        print("Character Added start")
    end)
end



Players.PlayerAdded:Connect(onPlayerAdded)

If you want the output log, I'll add that, but since It's kinda long, and I don't want to make this question any longer, I won't post it yet.

Since it might be prudent, ill post the behavior properties of the spawn door (In studio, not in-game)

Anchored = true
Archivable = true
CanCollide = true
CollisionGroupId = 0
Locked = false

So, in the end, I concluded that the tutorial must have had the flawed code, is that true, or did I just overlook something. And either way, What would i have to change for it to work?

0
If the output has errors, you should include them. Pyrondon 2089 — 7y
0
There's no error messages in the output unfortunately. PecolaFromScratch 20 — 7y
0
I have the same problem. MinePlayersPE1 33 — 7y

Answer this question