Hello, I am trying to get a vehicle door to open/close when pressing E on it.
i think i have narrowed it down to the code below which is causing the issue.
createButton:NewPulse(door.Remote, function(player, wire) local torso if not wire then torso = player.Character and player.Character:FindFirstChild("Torso") elseif wire then torso = wire.PrimaryPart end if not (pos.Value == 0) or not torso then pos.Value = 1 else if posConstraint then pos.Value = posConstraint else local p = hingeAnchor.CFrame:pointToObjectSpace(torso.Position) if p.Z > 0 then pos.Value = 1 else pos.Value = -1 end end end toggleSwitch() end)
Anyone have an idea?
If a player jumps off the driver seat the door will open automatically. if the door is open and a user get on the seat the door will close. This is accomplished by the code below and it works fine.
pos.Changed:connect(toggleSwitch) toggleSwitch() local seat = door.VehicleSeat if seat then seat.Changed:connect(function(property) if property == "Occupant" then if seat.Occupant then pos.Value = 0 else pos.Value = posConstraint or 1 end toggleSwitch() end end) end end end
the whole code is
local runService = game:GetService("RunService") local createButton = require(game.ServerScriptService.GameObjects.WireItems.CreateButton) local doorModule = {} -------------------------------------------- ------------- door setup --------------- function doorModule.new(doorList) for _, door in pairs(doorList) do local hingeAnchor = door.Anchor local hinge = door.Hinge local pos = door.Pos local posConstraint = door.PosConstraint local toggleMotor = Instance.new("Motor") toggleMotor.Part0 = hingeAnchor toggleMotor.Part1 = hinge toggleMotor.C0 = CFrame.Angles(-math.pi/2, math.pi, 0) * CFrame.new(hingeAnchor.Size.X / 2, 0, 0) toggleMotor.C1 = CFrame.Angles(0, math.pi/2, 0) * CFrame.new(hinge.Size.Z / 2, 0, 0) toggleMotor.MaxVelocity = 0.08 toggleMotor.Parent = toggleMotor.Part0 door.Model:MakeJoints() local function unanchor(part) for _, part in pairs(part:GetConnectedParts()) do if part.Anchored and not (part == hingeAnchor) and part.Parent == door.Model then part.Anchored = false unanchor(part) end end end unanchor(hinge) if not door.Remote:FindFirstChild("ButtonPrompt") then print(door.Remote:GetFullName()) end local doorName = door.Remote.ButtonPrompt.Value local function toggleSwitch() toggleMotor.DesiredAngle = pos.Value * math.pi/2 if pos.Value == 0 then door.Remote.ButtonPrompt.Value = "Open "..string.lower(doorName) else door.Remote.ButtonPrompt.Value = "Close "..string.lower(doorName) end end createButton:NewPulse(door.Remote, function(player, wire) local torso if not wire then torso = player.Character and player.Character:FindFirstChild("Torso") elseif wire then torso = wire.PrimaryPart end if not (pos.Value == 0) or not torso then pos.Value = 1 -- This was 0, this allowed the door to close but not open. else if posConstraint then pos.Value = posConstraint else local p = hingeAnchor.CFrame:pointToObjectSpace(torso.Position) if p.Z > 0 then pos.Value = 1 else pos.Value = -1 end end end toggleSwitch() end) pos.Changed:connect(toggleSwitch) toggleSwitch() local seat = door.VehicleSeat if seat then seat.Changed:connect(function(property) if property == "Occupant" then if seat.Occupant then pos.Value = 0 else pos.Value = posConstraint or 1 end toggleSwitch() end end) end end end return doorModule
Closed as Non-Descriptive by imKirda and Dovydas1118
This question has been closed because its title or content does not adequately describe the problem you are trying to solve.
Please ensure that your question pertains to your actual problem, rather than your attempted solution. That is, you were trying to solve problem X, and you thought solution Y would work, but instead of asking about X when you ran into trouble, you asked about Y.
Why was this question closed?