I have successfully made a door using tweenservice. The problem is that I do not know how to prevent users from spamming the door open and closed. I would like to know how exactly would I make it so there is a delay and the user is not able to spam the door. So far, the debounce boolean I made does not work. Script:
local Door = script.Parent.Door local debounce = false local TS = game:GetService("TweenService") local TI = TweenInfo.new(1, Enum.EasingStyle.Linear, Enum.EasingDirection.Out, 0, false, 0) local DoorOpen = {CFrame = Door.CFrame + Door.CFrame.lookVector * 6} local DoorClose = {CFrame = Door.CFrame } local open = TS:Create(Door, TI, DoorOpen) local close = TS:Create(Door, TI, DoorClose) local sound = script.Parent["BMRF Sliding Door Open"] local closesound = script.Parent["BMRF Sliding Door Close"] script.Parent.ToggleDoor.OnServerEvent:Connect(function() if debounce == false then debounce = true sound:Play() open:Play() elseif debounce == true then debounce = false closesound:Play() close:Play() end end)
I have no idea if this is what you are wanting to add, but from what I understood you wanted the door to have a cooldown so you couldn't spam it.
I am not 100% sure if this script will work but I wanted to give answering a try.
local Door = script.Parent.Door local debounce = false local cooldown= false local TS = game:GetService("TweenService") local TI = TweenInfo.new(1, Enum.EasingStyle.Linear, Enum.EasingDirection.Out, 0, false, 0) local DoorOpen = {CFrame = Door.CFrame + Door.CFrame.lookVector * 6} local DoorClose = {CFrame = Door.CFrame } local open = TS:Create(Door, TI, DoorOpen) local close = TS:Create(Door, TI, DoorClose) local sound = script.Parent["BMRF Sliding Door Open"] local closesound = script.Parent["BMRF Sliding Door Close"] script.Parent.ToggleDoor.OnServerEvent:Connect(function() if cooldown == false then cooldown = true if debounce == false then debounce = true sound:Play() open:Play() elseif debounce == true then debounce = false closesound:Play() close:Play() end wait(1) cooldown = false end end)
Cheers, Jack
Well knowing that your tween is 1 second, all you'd have to do is wait the 1 second or use Tween.Completed().
local tweenService = game:GetService('TweenService') local Door = script.Parent.Door local debounce = false local isOpen = false local tweenInfo = TweenInfo.new( 1, Enum.EasingStyle.Linear, Enum.EasingDirection.Out, 0, false, 0 ) local doorOpen = { CFrame = Door.CFrame + Door.CFrame.lookVector * 6 } local doorClose = { CFrame = Door.CFrame } local Open = tweenService:Create(Door, tweenInfo, doorOpen) local Close = tweenService:Create(Door, tweenInfo, doorClose) local openSound = script.Parent["BMRF Sliding Door Open"] local closeSound = script.Parent["BMRF Sliding Door Close"] script.Parent.ToggleDoor.OnServerEvent:Connect(function(Player) if debounce == true return end debounce = true if isOpen == false then openSound:Play() Open:Play() Open.Completed:Connect(function() debounce = false end) -- completed else closeSound:Play() Close:Play() Close.Completed:Connect(function() debounce = false end) -- completed end -- check if closed/open isOpen = not isOpen -- toggle between true/false lol end) -- onServerEvent
Your debounce is instantly closed and opened. You can consider inserting a wait(1) between the open/ closing door function.
Example:
debounce = false function Test() debounce = true print("test") debounce = false end if debounce = false then script.Parent.Touched:Connect(Test) end
This will not work, as it spams the "test" print. Instead, you add a wait(1) between the function,
debounce = false function Test() debounce = true wait(1) print("test") debounce = false end if debounce = false then script.Parent.Touched:Connect(Test) end
It only fires once every 1 second when you are touching it.