Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
✓ ANSWER ACCEPTED

How to wait for an object to be removed?

While working on an ongoing project, I ran into the dilemma of having to run two remote functions right after the other. I planned on using the wait function in order to wait for the events to finish, however it will only wait for the event to fire.

To solve this, I tried waiting for an object that would be copied from the main server to the PlayerGui on the ServerScript, however, I haven't found the correct way of waiting for the object to be removed.

function OnClicked()
	game.ServerScriptService.MainGui.ChatNote:InvokeServer("Num1","Text1")
	-- Asks the server to set a Gui title to "Num1" and text to "Text1"

	local noted = script.Parent.Parent.Parent:WaitForChild("ChatNote") 
	-- Waits till "ChatNote" is added

	wait(noted == nil)
	-- Does not wait

	game.ServerScriptService.MainGui.ChatNote:InvokeServer("Num2","Text2")	
	-- Same as line 2
end
script.Parent.MouseButton1Down:connect(OnClicked)

Any comments are appreciated and thank you.

1 comment

0

This is by no means the optimal solution but you can run a repeat loop. repeat wait() until notel==nil

2 answers

✓ Accepted answer

Corecii wrote us a nice module that can solve this problem called InstanceDestroyed. It runs a function when an instance is destroyed. How nice!

local UponInstanceDestroyed = require(483039669)
-- This returns a function with parameters Instance and Func
-- Where Instance is the Object you are waiting to be Destroy()ed
-- And Func is the function you want to run when it is Destroy()ed

UponInstanceDestroyed(workspace.Folder, function(Object)
	print(Object:GetFullName(), "was destroyed! How pathetic it must be!")
end)

Note: Roblox Studio's delete function is not the same as the Destroy method

As suggested by @lukeb50, using a repeat until loop currently solves my problem waiting for the object to be removed.

--Current solution

local noted = script.Parent.Parent.Parent:WaitForChild("ChatNote")
-- Waits to see if ChatNote exists

repeat wait() until script.Parent.Parent.Parent:FindFirstChild("ChatNote") == nil
-- Waits until the ChatNote does not exist 

Further testing will be conducted later on if this causes any problems down the road, thank you @lukeb50 for helping me solve my problem.

This discussion is preserved as it was. New answers, comments, and votes are closed.