-
What do you want to achieve?
I’m trying to add 2 or more seats to my vehicle. -
What is the issue?
The ProximityPrompts from other seats show up
I’ve figured out a way you could do it, you could make it so when you are Seated, it gets the part you were sitting on and finds the first model ancestor and assume that is the car model as an example, then you go through all the descendants of that model and if the child is a ProximityPrompt, disable it, otherwise do nothing, and then store the model of the car in a variable. And once you are not seated anymore, loop through the model again using the variable, enable all ProximityPrompts and set the variable to nil
I did something like that in a LocalScript in StarterCharacterScripts and it worked for me
local char = script.Parent
local hum = char:WaitForChild("Humanoid")
local formersit
hum.Seated:Connect(function(seated, seatpart)
if seated then
local model = seatpart:FindFirstAncestorOfClass("Model")
for _,v in pairs(model:GetDescendants()) do
if v.ClassName ~= "ProximityPrompt" then continue end
v.Enabled = false
end
formersit = model
else
for _,v in pairs(formersit:GetDescendants()) do
if v.ClassName ~= "ProximityPrompt" then continue end
v.Enabled = true
end
formersit = nil
end
end)
Inheritance doesn’t matter in this case so it’s best to just reference the ClassName directly. This should hopefully work for your needs and doesn’t require you to change anything related to the car. With this method, any nearby Proximity prompts unrelated to the car will still display
You could make it even faster by instead using a table and inserting the proximityprompts found into the table, but the difference is small, depending on how many parts are in the car, so it’s simpler to just go through the model again, but if needed, I could guide you on how to do it with a table instead.
Tell me if something isn’t working how it’s supposed to and I’ll try to help
It’s working, but how do you make it disabled for other models that are irrelevant to the current model?
You just have to reference the workspace
so it goes through all of workspace to disable all the proximityprompts, with that change, it can be simply turned into
local char = script.Parent
local hum = char:WaitForChild("Humanoid")
hum.Seated:Connect(function(seated, seatpart)
local state = not seated
for _,prompt in pairs(workspace:GetDescendants()) do
if prompt.ClassName ~= "ProximityPrompt" then continue end
prompt.Enabled = state
end
end)
If you have loads of stuff in your workspace, it would be better to put the things that have prompts in them into a folder and loop through that instead
I put off making it first loop through the workspace to get every proximity prompt because you may add or remove things with proximityprompts
@THECOOLGENERATOR That’s almost exactly how I had shown him, but you’re using the Sit property instead of the first return of Seated
, which is true
or false
depending on if you’re sitting or not. And that wont reenable the prompts after you get up
Maybe this?
Hum.Seated:Connect(function()
if Hum.Sit == true then
for _, v in pairs(workspace:GetDescendants()) do
if v:IsA("ProximityPrompt") then
v.Enabled = false
end
end
end)
For some reason, when the player jumped off of the seat, the prompt showed up again.
What do you mean? All prompts should up again when they get off the seat
I meant… When the player got off of the seat while I’m sitting, the prompt showed up again
So if someone got off when you’re sitting, it enabled them again for you?
Yes, that’s what I’m trying to say.
Is there a way to fix this bug?
I think I’ve fixed it.
Make a RemoteEvent called TogglePrompts and put it in ReplicatedStorage, then, in a localscript located in StarterPlayerScripts/anywhere a localscript can run and put this code in it
game:GetService("ReplicatedStorage").TogglePrompts.OnClientEvent:Connect(function(state)
for _,v in pairs(workspace:GetDescendants()) do
if v.ClassName ~= "ProximityPrompt" then continue end
v.Enabled = state
end
end)
And make a regular script in ServerScriptService and put this code in
game:GetService("Players").PlayerAdded:Connect(function(plr)
plr.CharacterAdded:Connect(function(char)
char:WaitForChild("Humanoid").Seated:Connect(function(state)
game:GetSerivce("ReplicatedStorage").TogglePrompts:FireClient(plr,not state)
end)
end)
end)
It should work as I tested it out using a 2 player local server test and when I got off one of them, the prompts stayed disabled for the other person
Alright, idk which ones which and it gave me errors like “GetService is not a valid member of DataModel “Game Name”” and “OnClientEvent can only be used on the client”
This code
game:GetService("ReplicatedStorage").TogglePrompts.OnClientEvent:Connect(function(state)
for _,v in pairs(workspace:GetDescendants()) do
if v.ClassName ~= "ProximityPrompt" then continue end
v.Enabled = state
end
end)
Should be in a localscript where it can be ran
And this
game:GetService("Players").PlayerAdded:Connect(function(plr)
plr.CharacterAdded:Connect(function(char)
char:WaitForChild("Humanoid").Seated:Connect(function(state)
game:GetService("ReplicatedStorage").TogglePrompts:FireClient(plr,not state)
end)
end)
end)
In a regualr script in ServerScriptService
I accidentally wrote GetService as GetSerivce on that so that’s probably why you got one of those errors
Unfortunately, the prompt showed up when the other player got off of the vehicle while I’m still sitting on it… I tried dragging the localscripts both in the StarterCharacterScripts folder and the StarterPlayerScripts folder, it didn’t work, and I took a closer look at the scripts, there weren’t any typos.
Did you remember to remove the former script that was having issues?
Yeah, I did. Also, I am really sorry for telling you that your lines of code didn’t work out of the blue.
It’s fine honestly, but its’ weird how it’s not working for you but it worked for me. Are you sure you removed any scripts that would cause this, and if you’re testing in-game instead ofa local server in studio, did you remember to publish?
I tested it in a published game.
I think I found the problem, I had a script inside the model that also enables/disables the visibility of the prompt, would you mind telling me which lines I should remove?
seat:GetPropertyChangedSignal("Occupant"):Connect(function()
if seat.Occupant then
proximityPromt.Enabled = false
else
proximityPromt.Enabled = true
end
end)
proximityPromt.Triggered:Connect(function(player)
seat:Sit(player.Character.Humanoid)
end)