For example, if I wanted one GUI button to make multiple things move at the same time using 1 script for the button and 1 per thing I wanted to move, how would I make that work? Is it possible to make it client based so that it only happens for the person activating the button?
You can create a remote event object and put it in Replicated Storage. It doesn't have to be Replicated storage but it's a good place for remote events. Then all you have to do is something like game.ReplicatedStorage.RemoteEvent:FireClient() to fire an event. Then, you can have a local script that says something like game.ReplicatedStorage.RemoteEvent.OnClientEvent: --Do Stuff. If you want to send a signal from client to server, then do the same thing but replace FireClient() with FireServer()