So here's the issue
I have a game that uses a custom explosion system so i can have more control over how it works. Recently i have tried to make it so players and objects that do not need to collide with explosions not collide with them.
But this doesn't seem to be working at all. Everything is still colliding with the explosions.
Code below
Explosion Module
local module = {} function module:Explode(position,radius,damage,outercolor,innercolor) local map for i,v in pairs(workspace:GetChildren()) do if game.ServerStorage.Maps:FindFirstChild(v.Name) then map = v end end local explosionclone = game.ServerStorage.OuterExplosion:Clone() if outercolor ~= nil then explosionclone.Color = outercolor end local audio = game.ServerStorage.ExplosionAudio:Clone() audio.Parent = explosionclone audio.RollOffMinDistance = radius*2 audio.RollOffMaxDistance = radius*5 explosionclone.Size = Vector3.new(radius*2,radius*2,radius*2) explosionclone.Velocity = Vector3.new(radius,radius,radius) explosionclone.Position = position local iexplosionclone = game.ServerStorage.InnerExplosion:Clone() if innercolor ~= nil then iexplosionclone.Color = innercolor end iexplosionclone.Size = Vector3.new(radius*1.6,radius*1.6,radius*1.6) iexplosionclone.Position = position iexplosionclone.Velocity = Vector3.new(radius,radius,radius) explosionclone.Parent = workspace.Explosions iexplosionclone.Parent = workspace.Explosions audio:Play() for i,v in pairs(game.Players:GetChildren()) do if workspace:FindFirstChild(v.Name) then if (v.Character.HumanoidRootPart.Position-position).magnitude <= radius and v.Character.Humanoid.Health >= 1 and v.Dead.Value == false then v.Character.Humanoid.Health = v.Character.Humanoid.Health - damage if v.Character.Humanoid.Health <= 0 then game.ReplicatedStorage.ChatEvent:FireAllClients(v.Name.." got blown up.") end end end end for i,v in pairs(map.Map:GetChildren()) do if v.ClassName == "Part" or v.ClassName == "WedgePart" or v.ClassName == "MeshPart" or v.ClassName == "UnionOperation" then if (v.Position-position).magnitude <= radius then local rng = math.random(1,10) v.Anchored = false if rng >= 6 then v:ClearAllChildren() end if rng >= 9 then v:Destroy() end end end end end return module
Collision Management
local ps = game:GetService("PhysicsService") ps:CreateCollisionGroup("Objects") ps:CreateCollisionGroup("Enemies") ps:CreateCollisionGroup("Explosions") local Players = game:GetService("Players") local playerCollisionGroupName = "Players" ps:CreateCollisionGroup(playerCollisionGroupName) ps:CollisionGroupSetCollidable(playerCollisionGroupName, playerCollisionGroupName, false) local previousCollisionGroups = {} local function setCollisionGroup(object) if object:IsA("BasePart") then previousCollisionGroups[object] = object.CollisionGroupId ps:SetPartCollisionGroup(object, playerCollisionGroupName) end end local function setCollisionGroupRecursive(object) setCollisionGroup(object) for _, child in ipairs(object:GetChildren()) do setCollisionGroupRecursive(child) end end local function resetCollisionGroup(object) local previousCollisionGroupId = previousCollisionGroups[object] if not previousCollisionGroupId then return end local previousCollisionGroupName = ps:GetCollisionGroupName(previousCollisionGroupId) if not previousCollisionGroupName then return end ps:SetPartCollisionGroup(object, previousCollisionGroupName) previousCollisionGroups[object] = nil end local function onCharacterAdded(character) setCollisionGroupRecursive(character) character.DescendantAdded:Connect(setCollisionGroup) character.DescendantRemoving:Connect(resetCollisionGroup) end local function onPlayerAdded(player) player.CharacterAdded:Connect(onCharacterAdded) end Players.PlayerAdded:Connect(onPlayerAdded) ps:CollisionGroupsAreCollidable("Objects","Explosions",false) ps:CollisionGroupsAreCollidable("Players","Explosions",false) ps:CollisionGroupsAreCollidable("Enemies","Explosions",false) workspace.ActiveDisasters.ChildAdded:Connect(function(child) if child.ClassName == "Model" then for i,v in pairs(child:GetChildren()) do if v.ClassName == "Part" or v.ClassName == "MeshPart" or v.ClassName == "UnionOperation" or v.ClassName == "WedgePart" then if child:FindFirstChild("Humanoid") then ps:SetPartCollisionGroup(v,"Enemies") else ps:SetPartCollisionGroup(v,"Objects") end end end elseif child.ClassName == "Part" or child.ClassName == "MeshPart" or child.ClassName == "UnionOperation" or child.ClassName == "WedgePart" then ps:SetPartCollisionGroup(child,"Objects") end end) workspace.Explosions.ChildAdded:Connect(function(child) ps:SetPartCollisionGroup(child,"Explosions") end)
How i have tried to solve the issue:
Moved the setting part to the collision group for explosions into the explosion module (Didn't work, same issue occurred) Took the velocity out of the explosions (Didn't work, same issue occurred)
Yes I am aware Velocity is deprecated now, the module was made before it was deprecated.