about summary refs log tree commit diff
path: root/src/engine/server
diff options
context:
space:
mode:
authorMagnus Auvinen <magnus.auvinen@gmail.com>2009-01-24 12:16:02 +0000
committerMagnus Auvinen <magnus.auvinen@gmail.com>2009-01-24 12:16:02 +0000
commit9d51d47cea8f56dc5d33a6204bdacd67f0acd902 (patch)
tree80c1bf4aae727d200e5b2ad71ccca54f5c999679 /src/engine/server
parent1a1af65b96a9ab0c757a40acbbbd5347fec4663f (diff)
downloadzcatch-9d51d47cea8f56dc5d33a6204bdacd67f0acd902.tar.gz
zcatch-9d51d47cea8f56dc5d33a6204bdacd67f0acd902.zip
added tab completion to the console. works for local and remote
Diffstat (limited to 'src/engine/server')
-rw-r--r--src/engine/server/es_server.c38
1 files changed, 24 insertions, 14 deletions
diff --git a/src/engine/server/es_server.c b/src/engine/server/es_server.c
index 12d97f37..2eac05eb 100644
--- a/src/engine/server/es_server.c
+++ b/src/engine/server/es_server.c
@@ -94,6 +94,7 @@ typedef struct
 	int snap_rate;
 	
 	int last_acked_snapshot;
+	int last_input_tick;
 	SNAPSTORAGE snapshots;
 	
 	CLIENT_INPUT latestinput;
@@ -535,8 +536,10 @@ static void reset_client(int cid)
 
 	snapstorage_purge_all(&clients[cid].snapshots);
 	clients[cid].last_acked_snapshot = -1;
+	clients[cid].last_input_tick = -1;
 	clients[cid].snap_rate = SRVCLIENT_SNAPRATE_INIT;
 	clients[cid].score = 0;
+
 }
 
 static int new_client_callback(int cid, void *user)
@@ -710,11 +713,18 @@ static void server_process_client_packet(NETCHUNK *packet)
 				clients[cid].latency = (int)(((time_get()-tagtime)*1000)/time_freq());
 
 			/* add message to report the input timing */
-			msg_pack_start_system(NETMSG_INPUTTIMING, 0);
-			msg_pack_int(tick);
-			msg_pack_int(((server_tick_start_time(tick)-time_get())*1000) / time_freq());
-			msg_pack_end();
-			server_send_msg(cid);
+			/* skip packets that are old */
+			if(tick > clients[cid].last_input_tick)
+			{
+				int time_left = ((server_tick_start_time(tick)-time_get())*1000) / time_freq();
+				msg_pack_start_system(NETMSG_INPUTTIMING, 0);
+				msg_pack_int(tick);
+				msg_pack_int(time_left);
+				msg_pack_end();
+				server_send_msg(cid);
+			}
+
+			clients[cid].last_input_tick = tick;
 
 			input = &clients[cid].inputs[clients[cid].current_input];
 			
@@ -1278,15 +1288,15 @@ static void con_stoprecord(void *result, void *user_data)
 
 static void server_register_commands()
 {
-	MACRO_REGISTER_COMMAND("kick", "i", con_kick, 0);
-	MACRO_REGISTER_COMMAND("ban", "s?i", con_ban, 0);
-	MACRO_REGISTER_COMMAND("unban", "s", con_unban, 0);
-	MACRO_REGISTER_COMMAND("bans", "", con_bans, 0);
-	MACRO_REGISTER_COMMAND("status", "", con_status, 0);
-	MACRO_REGISTER_COMMAND("shutdown", "", con_shutdown, 0);
-
-	MACRO_REGISTER_COMMAND("record", "s", con_record, 0);
-	MACRO_REGISTER_COMMAND("stoprecord", "", con_stoprecord, 0);
+	MACRO_REGISTER_COMMAND("kick", "i", CFGFLAG_SERVER, con_kick, 0);
+	MACRO_REGISTER_COMMAND("ban", "s?i", CFGFLAG_SERVER, con_ban, 0);
+	MACRO_REGISTER_COMMAND("unban", "s", CFGFLAG_SERVER, con_unban, 0);
+	MACRO_REGISTER_COMMAND("bans", "", CFGFLAG_SERVER, con_bans, 0);
+	MACRO_REGISTER_COMMAND("status", "", CFGFLAG_SERVER, con_status, 0);
+	MACRO_REGISTER_COMMAND("shutdown", "", CFGFLAG_SERVER, con_shutdown, 0);
+
+	MACRO_REGISTER_COMMAND("record", "s", CFGFLAG_SERVER, con_record, 0);
+	MACRO_REGISTER_COMMAND("stoprecord", "", CFGFLAG_SERVER, con_stoprecord, 0);
 }
 
 int main(int argc, char **argv)