I took a look at the engine source to see what condition causes the error. We all know that Quake III uses UDP for communication between the server and clients, but the question is, why? Well, UDP is simply better suited for streaming information in a game. Lost a packet? Who cares, I don't want it now, the data is old. So then, how do you create "reliability" in something that is by design unreliable? You throw an incrementing key on the things you need to be reliable. In this case, that key is serverCommandNumber. The client merely has to keep track of the last key it saw, and if it notices a jump, the client knows it missed a reliable command. Sadly, due to the underlying nature of UDP you will sometimes lose reliable commands, causing this error.
Now, I can think of a way around this, and I'll be letting Woekele know about it. Though, he'll probably just end up forcing me to write it if I want to see it in there :- Curse you!
Advertisement
Error: Cl_GetServerCommand: a reliable command was cycled out
#12
Posted 06 January 2008 - 09:23 PM
http://forums.urbant....html#msg128466
TCP Would make more sense to me to just send a message to the server saying you missed a critical command and let it resend it to you btw. But that would be like implementing TCP with UDP... hmmmm
To me it sounds like a way too major overhaul of critical portion of the engine tbh.
TCP Would make more sense to me to just send a message to the server saying you missed a critical command and let it resend it to you btw. But that would be like implementing TCP with UDP... hmmmm
To me it sounds like a way too major overhaul of critical portion of the engine tbh.
#13
Posted 07 January 2008 - 12:28 PM
This error usually only occurs during map changes right? Which commands are basically send during that time which normally aren't send during normal gameplay (as in map has been loaded)?
Maybe it's possible to establish a temporary TCP connection to send those commands and leave the game data stream on UDP. But than this _pretty much_ means breaking the Q3 protocol since it needs changes on the server side as well
But perhaps it can make the TCP connection only optional if the clients (well and server) are supporting it ... not sure or there are any protocol version check in the protocol spec it self.
Or ... instead of doing that. Add data verification routine in the netcode for commands that are critical so they can be resend. But it still involves meddling with the netcode which probably break compatibility.
Maybe it's possible to establish a temporary TCP connection to send those commands and leave the game data stream on UDP. But than this _pretty much_ means breaking the Q3 protocol since it needs changes on the server side as well
But perhaps it can make the TCP connection only optional if the clients (well and server) are supporting it ... not sure or there are any protocol version check in the protocol spec it self.
Or ... instead of doing that. Add data verification routine in the netcode for commands that are critical so they can be resend. But it still involves meddling with the netcode which probably break compatibility.
Advertisement
1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users
Advertisement