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

Parts still collideable, after a script tells it to not be collideable not working, why?

Asked by 2 years ago
Edited 2 years ago

Hi, so basically I wanted to make a humanoid, and if you kill it, it obviously falls apart, but you can't collide with them. And after some time, those humanoids despawn. But if I kill them it gives me an error, and I can still collide with them, why?

local a = script.Parent.Head
local b = script.Parent.HumanoidRootPart
local c = script.Parent.LeftArm
local d = script.Parent.LeftLeg
local e = script.Parent.RightArm
local f = script.Parent.RightLeg
local g = script.Parent.Torso

while wait(0.05) do
    if script.Parent.Humanoid.Health <= 0 then
        a.CanCollide = false
        b.CanCollide = false
        c.CanCollide = false
        d.CanCollide = false
        e.CanCollide = false
        f.CanCollide = false
        g.CanCollide = false
        wait(35)
        script.Parent:Destroy()
    end
end

1 answer

Log in to vote
0
Answered by 2 years ago

Sadly, you cannot make players non-collidable because they have a Humanoid. Another reason is that you're using a local script and not a normal one.

So, how do we fix it? We can use PhysicsService and we can make Collision Groups.

Also you can just do script.Parent:GetChildren() or script.Parent:GetDescendants() instead of listing each limb one by one.

local PhysicsService = game:GetService("PhysicsService")

local character = script.Parent
local CharacterGroup = PhysicsService:CreateCollisionGroup("Character") -- creates a collision group for your/someone's character
local EverythingExitsed = PhysicsService:CreateCollisionGroup("Instances") -- creates a collision group of every parts that existed in the workspace except the character
PhysicsService:CollisionGroupSetCollidable("Character", "Instances", false) -- makes both collision groups to not collide with each other

local Humanoid = character:FindFIrstChildOfClass("Humanoid")

function NoCollide(char)
    for i, v in pairs(char:GetDescendants()) do
        if v:IsA("BasePart") then
            PhysicsService:SetPartCollisionGroup(v, "Character")
        end
    end
end

Humanoid.Died:Connect(function() -- alternative to `if Humanoid.Health <= 0 then`
    local everything = workspace:GetDescendants()

    NoCollide(character)
    for i, v in ipairs(everything) do
        if v:IsDescendantOf(character) then
            table.remove(everything, i)
        elseif v == character then
            table.remove(everything, i)
        elseif not v:IsA("BasePart") then
            table.remove(everything, i)
        end

        PhysicsService:SetPartCollisionGroup(v, "Instances")
    end
end)
0
Quite a nice idea, but it still gives me an error, and doesn't work Kisferenc 47 — 2y
0
what's the error? T3_MasterGamer 2189 — 2y
Ad

Answer this question