I need help with this [Unsolved people who give solution first will have name in game credits]

After I posted a topic about my games door script not working on doors that were created way after the server started A developer gave me a solution Thats not even a full solution It works because I tested it with print() but now I don’t know what to do next

Code:

local Collection: CollectionService = game:GetService("CollectionService")
local TweenService: TweenService = game:GetService("TweenService")

local DoorModels: {Instance} = Collection:GetTagged("Door")

local Doortweeninfo: TweenInfo = TweenInfo.new(0.4, Enum.EasingStyle.Linear, Enum.EasingDirection.In, 0, false, 0)



for _: number, DoorModel: Instance in pairs(DoorModels) do
	local Open: Tween = TweenService:Create(DoorModel.DoorPart, Doortweeninfo, {CFrame = DoorModel.DoorFrame2.CFrame})
	local Close: Tween = TweenService:Create(DoorModel.DoorPart, Doortweeninfo, {CFrame = DoorModel.DoorFrame1.CFrame})
	local OpenState: boolean = false
	DoorModel.Click.MouseClick:Connect(function(): ()
		OpenState = not OpenState
		if OpenState then
			Open:Play()
			DoorModel.door_open:Play()
		else
			Close:Play()
			DoorModel.door_close:Play()
		end
	end)
end



local function DoorAdded(model)
	print("it works!")
end

Collection:GetInstanceAddedSignal("Door"):Connect(DoorAdded)
for i, model in pairs(Collection:GetTagged("Door")) do
	DoorAdded(model)
end
1 Like

Really no ones here wanting to help me?

1 Like

You didn’t even say what was wrong.

local Collection: CollectionService = game:GetService("CollectionService")
local TweenService: TweenService = game:GetService("TweenService")

local DoorModels: {Instance} = Collection:GetTagged("Door")

local Doortweeninfo: TweenInfo = TweenInfo.new(0.4, Enum.EasingStyle.Linear, Enum.EasingDirection.In, 0, false, 0)


local function connectDoors()
	for _: number, DoorModel: Instance in pairs(DoorModels) do
		local Open: Tween = TweenService:Create(DoorModel.DoorPart, Doortweeninfo, {CFrame = DoorModel.DoorFrame2.CFrame})
		local Close: Tween = TweenService:Create(DoorModel.DoorPart, Doortweeninfo, {CFrame = DoorModel.DoorFrame1.CFrame})
		local OpenState: boolean = false
		DoorModel.Click.MouseClick:Connect(function(): ()
			OpenState = not OpenState
			if OpenState then
				Open:Play()
				DoorModel.door_open:Play()
			else
				Close:Play()
				DoorModel.door_close:Play()
			end
		end)
	end
end


Collection:GetInstanceAddedSignal("Door"):Connect(DoorAdded)
for i, model in pairs(Collection:GetTagged("Door")) do
	connectDoors()
end

connectDoors()

This is probably what the guy who helped you was going for but you should probably change OpenState to an attribute of the door so it doesn’t get reset whenever connectDoors() is called

Complete version revised from after that dev who trying to help you

local CollectionService = game:GetService("CollectionService")
local TweenService = game:GetService("TweenService")

local DoorModels = CollectionService:GetTagged("Door")

local Doortweeninfo = TweenInfo.new(0.4, Enum.EasingStyle.Linear, Enum.EasingDirection.In, 0, false, 0)

local function setupDoor(DoorModel)
	local Open = TweenService:Create(DoorModel.DoorPart, Doortweeninfo, {CFrame = DoorModel.DoorFrame2.CFrame})
	local Close = TweenService:Create(DoorModel.DoorPart, Doortweeninfo, {CFrame = DoorModel.DoorFrame1.CFrame})
	local OpenState = false
	
	DoorModel.Click.MouseClick:Connect(function()
		OpenState = not OpenState
		if OpenState then
			Open:Play()
			DoorModel.door_open:Play()
		else
			Close:Play()
			DoorModel.door_close:Play()
		end
	end)
end

local function DoorAdded(DoorModel)
	print("Door added!")
	setupDoor(DoorModel)
end

-- Connect existing doors
for _, model in pairs(DoorModels) do
	setupDoor(model)
end

-- Connect new doors
CollectionService:GetInstanceAddedSignal("Door"):Connect(DoorAdded)
1 Like

I normally make door state machines have 4 states: Closed, Opening, Opened, Closing. I do this so that I can more easily decide for each door if I want opening and/or closing to be interruptable. Either way, you really should be saving references to the currently-playing Tweens (when there is one), and stopping it before starting a new tween playing. Your current code looks like I could spam-click the door and start a bunch of competing tweens all playing on it.

Thanks for giving me a working solution your name in now in the games credits :slightly_smiling_face:

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.