It's hard to explain but i will try.
Basically i have a RemoteEvent. I make a server script telling to fire all clients it x secs after the game starts:
remoteEvent:FireAllClients()
now i have a local script in a gui. When the player clicks a button, the script will determinate what is it going to do when the RemoteEvent fires to the client,in this case,print "i luv unicorns"
button.MouseButton1Up:connect(function()
remoteEvent.OnClientEvent:connect(function()
print'i luv unicorns'
end)
end)
now THERE is the trouble. Let's suppose that the RemoteEvent has been called 1 sec after the game started. The player clicked the button 2 secs after the game started. Even if the player clicked AFTER the RemoteEvent has been fired, it still printed "i luv unicorns" and i don't know why...
help me.

4 comments
No one can test out a solution for you without proper scripts. The second script prints after it has been clicked once and then waits for a remote event to be fired.
Can you explain it better? I don't understand :/
Your script tries to look for something instead of waiting for it.
Well...i noticed another thing about this. If the server script fires like 3 times before the button has been clicked, it will appear 3 times "i luv unicorns" in the output