Question 1: The standard way of synchronizing time between client is something like this:
- Client sends timestamp to server
- Server responds with clients timestamp + its own timestamp
- Client does something like this when it gets the server response: localTime = servertime + ((currentTime - timestampSentToServer) / 2)
- This gives the client a timer that is somewhat approximate to the server, step 3 can be repeated one or many times to create a more accurate time stamp
Question 2: You have two options, either you stick to your guns with the initial clock sync (as describe in question 1) for the entire game or you update it at set intervals (every packet, every 20 seconds, whatever) and adjust accordingly. Is there a preferred approach here (stick to your guns, or update as you go along), what are the benefits of one or the other? And if you update the timer as you go along how do you deal with times where the client might end up way of (either in the past or the future)?
Question 3: I think this is my most important question (as I think I got 1 and 2 groked in my head): The two previous questions talked about syncing using time but the concept of time isn't really important is it? What you're really looking for is how many ticks behind the client is, isn't it? Both the server and the client runs on the same tick speed, 15ms (66.66Hz), they both hold a tick counter that keeps track of the current tick they're on, wouldn't this scheme be possible:
- The client connects
- Server sends its current tick count to the client
- Client adopts the servers tick count, incrementing it for each tick that passes
Thanks again for all the help this forum has given me!