So I have a game with planes but there's a problem with them. Sometimes if I crash with them the camera breaks and stays where my character died even tho my character has already respawned. It says that Head is not a valid member of Model. I have no idea what to do so I'm hoping that someone here could help me with this problem.
repeat wait() until script.Parent.Welded.Value --This line makes the plane invulnerable to weapons when it is still welding wait(0.1) local Plane = script.Parent --Lines 3 - 10 set variables local AutoCrash = Plane.AutoCrash local Ejected = Plane.Ejected local Engine = Plane.MainParts.Engine local CanCrash = Plane.Customize.CanCrash local Force = CanCrash.Force local Crashed = Plane.Crashed local Parts = {} -------------------------------------------------------------------------- function Explode() --This function makes the plane explode if (not Crashed.Value) then Crashed.Value = true Plane:BreakJoints() local Explosion = Instance.new("Explosion") Explosion.Parent = game.Workspace Explosion.Position = Engine.Position Explosion.BlastRadius = Plane:GetModelSize().magnitude / 1 --This makes the BlastRadius the size of the plane Explosion.BlastPressure = 1e1 if Engine:findFirstChild("Thrust") then Engine.Thrust:Destroy() end if Engine:findFirstChild("Direction") then Engine.Direction:Destroy() end delay(5,function() Plane:Destroy() end) --This removes the plane after 5 seconds end end function GetPlaneParts(Model) --This function gets all the parts on the plane for _,v in pairs(Model:GetChildren()) do if (v:IsA("BasePart")) then table.insert(Parts,v) --This inserts all the parts into the "Parts" table end GetPlaneParts(v) end end function onAutoCrash() --This function is activated when the AutoCrash value becomes true if AutoCrash.Value then Explode() end end function DetectExplosions(Object) --This is a function that I created which detects explosions in the workspace if Object.ClassName == "Explosion" then --If the object detected was an explosion... if Object.BlastPressure > 0 then local Dist = (Object.Position - Engine.Position).magnitude if Dist <= (Object.BlastRadius + 1) then if (not Crashed.Value) then Explode() end end end end end function IsObstacle(Obj) --This function determines whether Obj is an obstacle that can be used to destroy the plane if (not Obj:IsDescendantOf(Plane)) and Obj.CanCollide then local PlaneTag = Obj:FindFirstChild("PlaneTag") if (PlaneTag and PlaneTag.Value ~= Plane) or (not PlaneTag) then return true end end return false end function IsDescendantOfPlayer(Obj) for _,v in pairs(game.Players:GetPlayers()) do if v and v.Character then if Obj:IsDescendantOf(v.Character) then return v end end end return nil end GetPlaneParts(Plane) --This activates the "GetPlaneParts" function for _,v in pairs(Parts) do --This gets all the parts in the "Parts" table v.Touched:connect(function(Object) --This is activated if any of the bricks are touched if (not Ejected.Value) then if CanCrash.Value and (not Crashed.Value) then if IsObstacle(Object) then local Player = game.Players:GetPlayerFromCharacter(script.Parent.Parent) if Player then local HitPlayer = IsDescendantOfPlayer(Object) if HitPlayer == Player then return end end if (v.Velocity.magnitude >= Force.Value) then Explode() end end end elseif Ejected.Value then if (not Crashed.Value) then if IsObstacle(Object) then if Object.Parent.Name ~= "EjectorSeat" then if (not IsDescendantOfPlayer(Object)) then Explode() end end end end end end) end game.Workspace.DescendantAdded:connect(DetectExplosions) --The detect explosions is a DescendantAdded function AutoCrash.Changed:connect(onAutoCrash) --Pretty self explanatory. When the AutoCrash value is changed, the "onAutoCrash" function is activated
Just an idea, but in the script try using this after you know the plane has crashed
Local camera = game.Workspace.CurrentCamera Then camera.CameraSubject = the characters humanoid And then camera.CameraType = “Custom”
If this is a local script, module script, or a regular script I don’t really know, but to change the camera back to the player you need access to them