No problem. Here's something you should know every time you're working with remote events / functions.
Hidden default argument
In both remote events / functions, there is a hidden first argument that's returned to the server that represents the client that's invoking the remote. ScriptGuider actually gives a good example of this in his remote event example place, which you can check out here:
http://www.roblox.com/games/286802910/Remote-event-example
Or go to his profile and edit his "Remote event example" game.
So, now knowing this, we should always identify this hidden argument to avoid error and confusion. Let's give an example from the server's perspective:
Server:
03 | local Remote = script.Parent |
09 | Remote.OnServerEvent:connect( function (DefaultPlayer, Arg 1 , Arg 2 , Arg 3 ) |
10 | print (DefaultPlayer, Arg 1 , Arg 2 , Arg 3 ) |
Now, if we attempted to fire this event from the client, we would do so like this:
Client:
1 | local Remote = workspace:WaitForChild 'RemoteEvent' |
7 | Remote:FireServer( "I'm" , "a" , "remote" ) |
Output from server:
I'm a remote
How to fire a listening client, from a server
Now, sometimes we wan't to do the opposite. Sometimes we want to have listening clients, waiting on server instructions. This can be achieved through "FireClient", and works about the same way. The first argument is the player we're going to invoke (assuming they have an event listening), and the rest of the arguments passed are whatever.
So:
Server:
4 | local Remote = script.Parent |
8 | Remote:FireClient(game.Players.Player 1 , "Hello there" ) |
Client:
2 | local Remote = workspace.Script.RemoveEvent |
6 | Remote.OnClientEvent:connect( function (Args) |
Client output:
Hello there
Or, we could use "FireAllClients" from the server, to fire every listening client with the OnClientEvent function. Like this:
Server:
1 | local Remote = script.Parent |
6 | Remote:FireAllClients( 'Hello there' ) |
Hope this helped. If you still have questions, let me know.