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

Why does my Door script stop working without any apparent reason?

Asked by 5 years ago
Edited 5 years ago

So, I have this Server Script and a folder called Doors in Workspace. The Doors folder contains two folders, one called ExitDoors and another one called InsideDoors, both folders contain multiple models of doors, all of the models has a PrimaryPart assigned and all of its parts' CanCollide set to false. So it'd be: workspace.Doors.ExitDoors/InsideDoors I also have a Neighbor team and Civilians team (more on that in a sec).

I've attempted to make Civilians team be able to open all doors with no problem, and Neighbor team be unable to open doors that are parented to ExitDoors.

For some reason, they eventually tend to just don't work anymore, no errors, Doors are just frozen, inactive...I'm really confused...

This is the script I've made:

local GeneralFunctions = require(workspace.GeneralFunctions) --Don't mind this.

local DefaultCFrames = {}
for _, doorsection in ipairs(script.Parent.Doors:GetChildren()) do
    for _, door in ipairs(doorsection:GetChildren()) do
        DefaultCFrames[door] = door.PrimaryPart.CFrame
    end
end

local OpenDoorRange = 7
local SoundDebounce = {}

while true do
    wait()
    for _, doorsection in ipairs(script.Parent.Doors:GetChildren()) do
        for _, door in ipairs(doorsection:GetChildren()) do
            if DefaultCFrames[door] then

                local Distance, Player = math.huge

                -- Gets nearest player, you can skip this up to the for loop's end.
                for _, plr in ipairs(game:GetService("Players"):GetPlayers()) do
                    if plr.Character and plr.Character:WaitForChild("Humanoid").Health > 0 then
                        local Distance_Alt = (
                            plr.Character:WaitForChild("HumanoidRootPart").Position - 
                            (DefaultCFrames[door].Position - Vector3.new(0, door.PrimaryPart.Size.X / 2, 0) + Vector3.new(0, 2.31, 0))
                        ).Magnitude
                        if Distance > Distance_Alt then Distance = Distance_Alt Player = plr end
                    end
                end

                local Sound
                if Player ~= nil then
                    if (Player.Team == game:GetService("Teams").Civilians) or (Player.Team == game:GetService("Teams").Neighbor and door.Parent ~= script.Parent.Doors.ExitDoors) then
                        if Distance <= OpenDoorRange then
                            door:SetPrimaryPartCFrame(DefaultCFrames[door] * CFrame.Angles(math.rad(90), 0, 0))
                            if not SoundDebounce[door] then Sound = script.DoorOpen:Clone() SoundDebounce[door] = true end
                        else
                            door:SetPrimaryPartCFrame(DefaultCFrames[door])
                            if SoundDebounce[door] then Sound = script.DoorClose:Clone() SoundDebounce[door] = false end
                        end
                    end
                end
                if Sound then
                    Sound.Parent = door.PrimaryPart
                    Sound.PlaybackSpeed = Random.new():NextNumber(0.9, 1.1)
                    Sound.PlayOnRemove = true Sound:Destroy()
                end
            end
        end
    end
end

I really need help with this...Thanks for reading this.

0
what even is this ;( greatneil80 2647 — 5y
0
Don't use wait() as your loop's condition. User#19524 175 — 5y
0
oh okay SuperAndresZ_YT 202 — 5y

Answer this question